Skip to content

Commit

Permalink
Fix slot type for method parameter name in DDR ROMClass walker
Browse files Browse the repository at this point in the history
Handle method parameter names as UTF8 strings rather than raw SRPs.

Signed-off-by: Alexey Khrabrov <khrabrov@cs.toronto.edu>
  • Loading branch information
AlexeyKhrabrov committed Jan 20, 2021
1 parent fd6deb6 commit 23e2ca0
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -297,38 +297,38 @@ private J9ROMMethodPointer allSlotsInROMMethodDo(J9ROMMethodPointer method) thro

return J9ROMMethodPointer.cast(cursor);
}

private long allSlotsInMethodParametersDataDo(U32Pointer cursor) throws CorruptDataException
{
J9MethodParametersDataPointer methodParametersData = J9MethodParametersDataPointer.cast(cursor);
J9MethodParameterPointer parameters = methodParametersData.parameters();
long methodParametersSize = ROMHelp.J9_METHOD_PARAMS_SIZE_FROM_NUMBER_OF_PARAMS(methodParametersData.parameterCount().longValue());
long padding = U32.SIZEOF - (methodParametersSize % U32.SIZEOF);
long size = 0;

if (padding == U32.SIZEOF) {
padding = 0;
}

size = methodParametersSize + padding;

classWalkerCallback.addSlot(clazz, SlotType.J9_SRP, methodParametersData.parameterCountEA(), "parameterCount");

for (int i = 0; i < methodParametersData.parameterCount().longValue(); i++) {
classWalkerCallback.addSlot(clazz, SlotType.J9_SRP, parameters.nameEA(), "methodParameterName");
classWalkerCallback.addSlot(clazz, SlotType.J9_U16, parameters.flagsEA(), "methodParameterFlag");
classWalkerCallback.addSlot(clazz, SlotType.J9_ROM_UTF8, parameters.nameEA(), "methodParameterName");
classWalkerCallback.addSlot(clazz, SlotType.J9_U16, parameters.flagsEA(), "methodParameterFlag");
}

cursor = cursor.addOffset(methodParametersSize);
for (; padding > 0; padding--) {
classWalkerCallback.addSlot(clazz, SlotType.J9_U8, cursor, "MethodParameters padding");
cursor.addOffset(1);
}

classWalkerCallback.addSection(clazz, methodParametersData, size, "Method Parameters", true);
return size/U32.SIZEOF;
}

private int allSlotsInROMFieldDo(J9ROMFieldShapePointer field) throws CorruptDataException {
int fieldLength = 0;

Expand Down
2 changes: 2 additions & 0 deletions runtime/ddr/overrides-vm
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ typeoverride.J9AnnotationInfoEntry.annotationType=J9SRP(J9UTF8)
typeoverride.J9AnnotationInfoEntry.memberName=J9SRP(J9UTF8)
typeoverride.J9AnnotationInfoEntry.memberSignature=J9SRP(J9UTF8)

typeoverride.J9MethodParameter.name=J9SRP(J9UTF8)

typeoverride.J9EnclosingObject.nameAndSignature=J9SRP(J9ROMNameAndSignature)

typeoverride.J9ROMClass.className=J9SRP(J9UTF8)
Expand Down
2 changes: 2 additions & 0 deletions runtime/ddr/vmddrstructs.properties
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@ ddrblob.typeoverride.J9AnnotationInfoEntry.annotationType=J9SRP(struct J9UTF8)
ddrblob.typeoverride.J9AnnotationInfoEntry.memberName=J9SRP(struct J9UTF8)
ddrblob.typeoverride.J9AnnotationInfoEntry.memberSignature=J9SRP(struct J9UTF8)

ddrblob.typeoverride.J9MethodParameter.name=J9SRP(struct J9UTF8)

ddrblob.typeoverride.J9EnclosingObject.nameAndSignature=J9SRP(struct J9ROMNameAndSignature)

ddrblob.typeoverride.J9ROMClass.className=J9SRP(struct J9UTF8)
Expand Down

0 comments on commit 23e2ca0

Please sign in to comment.