Skip to content

Commit

Permalink
Merge pull request #13973 from ChengJin01/visit_enclosed_inner_classe…
Browse files Browse the repository at this point in the history
…s_romclass_walk

Visit enclosed inner classes in the ROMClass walk
  • Loading branch information
keithc-ca committed Nov 23, 2021
2 parents a624728 + 2f87015 commit f73492a
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 5 deletions.
2 changes: 2 additions & 0 deletions debugtools/DDR_VM/src/com/ibm/j9ddr/AuxFieldInfo29.dat
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,8 @@ J9ROMClass.callSiteData = required
J9ROMClass.className = required
J9ROMClass.cpShapeDescription = required
J9ROMClass.doubleScalarStaticCount = required
J9ROMClass.enclosedInnerClassCount = U_32
J9ROMClass.enclosedInnerClasses = J9SRP(J9SRP(J9UTF8))
J9ROMClass.extraModifiers = required
J9ROMClass.innerClassCount = required
J9ROMClass.innerClasses = required
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,10 +187,24 @@ private void allSlotsInROMHeaderDo() throws CorruptDataException {
srpCursor = romClass.innerClasses();
count = romClass.innerClassCount().intValue();
classWalkerCallback.addSection(clazz, srpCursor, count * SelfRelativePointer.SIZEOF, "innerClassesSRPs", true);
for (; count > 0; count--) {
for (; 0 != count; count--) {
classWalkerCallback.addSlot(clazz, SlotType.J9_ROM_UTF8, srpCursor, "innerClassNameUTF8");
srpCursor = srpCursor.add(1);
}

try {
/* walk enclosed inner classes SRPs block */
srpCursor = romClass.enclosedInnerClasses();
count = romClass.enclosedInnerClassCount().intValue();
classWalkerCallback.addSection(clazz, srpCursor, count * SelfRelativePointer.SIZEOF, "enclosedInnerClassesSRPs", true);
for (; 0 != count; count--) {
classWalkerCallback.addSlot(clazz, SlotType.J9_ROM_UTF8, srpCursor, "enclosedInnerClassesNameUTF8");
srpCursor = srpCursor.add(1);
}
} catch (NoSuchFieldException e) {
// ignore: VM that generated the core dump doesn't have enclosedInnerClasses or enclosedInnerClassCount
}

/* add CP NAS section */
J9ROMMethodPointer firstMethod = romClass.romMethods();
long size = (firstMethod.getAddress() - srpCursor.getAddress());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2001, 2014 IBM Corp. and others
* Copyright (c) 2001, 2021 IBM Corp. and others
*
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which accompanies this
Expand Down Expand Up @@ -52,6 +52,7 @@ public class RomClassSummaryCommand extends Command
"fields",
"interfacesSRPs",
"innerClassesSRPs",
"enclosedInnerClassesSRPs",
"cpNamesAndSignaturesSRPs",
"methods",
"cpShapeDescription",
Expand Down
2 changes: 2 additions & 0 deletions runtime/ddr/overrides-vm
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ typeoverride.J9EnclosingObject.nameAndSignature=J9SRP(J9ROMNameAndSignature)

typeoverride.J9ROMClass.className=J9SRP(J9UTF8)
typeoverride.J9ROMClass.cpShapeDescription=J9SRP(U32)
typeoverride.J9ROMClass.enclosedInnerClasses=J9SRP(J9SRP(J9UTF8))
typeoverride.J9ROMClass.innerClasses=J9SRP(J9SRP(J9UTF8))
typeoverride.J9ROMClass.interfaces=J9SRP(J9SRP(J9UTF8))
typeoverride.J9ROMClass.intermediateClassData=J9WSRP(U_8)
Expand All @@ -101,6 +102,7 @@ typeoverride.J9ROMClass.superclassName=J9SRP(J9UTF8)

typeoverride.J9ROMArrayClass.className=J9SRP(J9UTF8)
typeoverride.J9ROMArrayClass.cpShapeDescription=J9SRP(U32)
typeoverride.J9ROMArrayClass.enclosedInnerClasses=J9SRP(J9SRP(J9UTF8))
typeoverride.J9ROMArrayClass.innerClasses=J9SRP(J9SRP(J9UTF8))
typeoverride.J9ROMArrayClass.interfaces=J9SRP(J9SRP(J9UTF8))
typeoverride.J9ROMArrayClass.intermediateClassData=J9WSRP(U_8)
Expand Down
2 changes: 2 additions & 0 deletions runtime/ddr/vmddrstructs.properties
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ ddrblob.typeoverride.J9EnclosingObject.nameAndSignature=J9SRP(struct J9ROMNameAn

ddrblob.typeoverride.J9ROMClass.className=J9SRP(struct J9UTF8)
ddrblob.typeoverride.J9ROMClass.cpShapeDescription=J9SRP(U32)
ddrblob.typeoverride.J9ROMClass.enclosedInnerClasses=J9SRP(J9SRP(struct J9UTF8))
ddrblob.typeoverride.J9ROMClass.innerClasses=J9SRP(J9SRP(struct J9UTF8))
ddrblob.typeoverride.J9ROMClass.interfaces=J9SRP(J9SRP(struct J9UTF8))
ddrblob.typeoverride.J9ROMClass.optionalInfo=J9SRP(U32)
Expand All @@ -179,6 +180,7 @@ ddrblob.typeoverride.J9ROMClass.specialSplitMethodRefIndexes=J9SRP(U16)

ddrblob.typeoverride.J9ROMArrayClass.className=J9SRP(struct J9UTF8)
ddrblob.typeoverride.J9ROMArrayClass.cpShapeDescription=J9SRP(U32)
ddrblob.typeoverride.J9ROMArrayClass.enclosedInnerClasses=J9SRP(J9SRP(struct J9UTF8))
ddrblob.typeoverride.J9ROMArrayClass.innerClasses=J9SRP(J9SRP(struct J9UTF8))
ddrblob.typeoverride.J9ROMArrayClass.interfaces=J9SRP(J9SRP(struct J9UTF8))
ddrblob.typeoverride.J9ROMArrayClass.optionalInfo=J9SRP(U32)
Expand Down
17 changes: 14 additions & 3 deletions runtime/util/romclasswalk.c
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ void allSlotsInROMClassDo(J9ROMClass* romClass,
rangeValid = callbacks->validateRangeCallback(romClass, srpCursor, count * sizeof(J9SRP), userData);
if (rangeValid) {
callbacks->sectionCallback(romClass, srpCursor, count * sizeof(J9SRP), "interfacesSRPs", userData);
for (; count > 0; count--) {
for (; 0 != count; count--) {
callbacks->slotCallback(romClass, J9ROM_UTF8, srpCursor++, "interfaceUTF8", userData);
}
}
Expand All @@ -178,11 +178,22 @@ void allSlotsInROMClassDo(J9ROMClass* romClass,
rangeValid = callbacks->validateRangeCallback(romClass, srpCursor, count * sizeof(J9SRP), userData);
if (rangeValid) {
callbacks->sectionCallback(romClass, srpCursor, count * sizeof(J9SRP), "innerClassesSRPs", userData);
for (; count > 0; count--) {
for (; 0 != count; count--) {
callbacks->slotCallback(romClass, J9ROM_UTF8, srpCursor++, "innerClassNameUTF8", userData);
}
}

/* walk enclosed inner classes SRPs block */
srpCursor = J9ROMCLASS_ENCLOSEDINNERCLASSES(romClass);
count = romClass->enclosedInnerClassCount;
rangeValid = callbacks->validateRangeCallback(romClass, srpCursor, count * sizeof(J9SRP), userData);
if (rangeValid) {
callbacks->sectionCallback(romClass, srpCursor, count * sizeof(J9SRP), "enclosedInnerClassesSRPs", userData);
for (; 0 != count; count--) {
callbacks->slotCallback(romClass, J9ROM_UTF8, srpCursor++, "enclosedInnerClassesNameUTF8", userData);
}
}

#if JAVA_SPEC_VERSION >= 11
/* walk nest members SRPs block */
if (0 != romClass->nestMemberCount) {
Expand All @@ -191,7 +202,7 @@ void allSlotsInROMClassDo(J9ROMClass* romClass,
rangeValid = callbacks->validateRangeCallback(romClass, srpCursor, count * sizeof(J9SRP), userData);
if (rangeValid) {
callbacks->sectionCallback(romClass, srpCursor, count * sizeof(J9SRP), "nestMembersSRPs", userData);
for (; count > 0; count--) {
for (; 0 != count; count--) {
callbacks->slotCallback(romClass, J9ROM_UTF8, srpCursor++, "nestMemberUTF8", userData);
}
}
Expand Down

0 comments on commit f73492a

Please sign in to comment.