Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion substratevm/debug/gdbpy/gdb-debughelpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ class SVMUtil:
string_type = gdb.lookup_type("java.lang.String")
enum_type = gdb.lookup_type("java.lang.Enum")
object_type = gdb.lookup_type("java.lang.Object")
object_header_type = gdb.lookup_type("_objhdr")
hub_type = gdb.lookup_type("Encoded$Dynamic$Hub")
null = gdb.Value(0).cast(object_type.pointer())
classloader_type = gdb.lookup_type("java.lang.ClassLoader")
Expand Down Expand Up @@ -670,7 +671,8 @@ def children(self) -> Iterable[object]:
trace('<SVMPPClass> - children (class field iterator)')
if self.__skip_children:
return
fields = [str(f.name) for f in SVMUtil.get_all_fields(self.__obj.type, svm_print_static_fields.value) if f.name != SVMUtil.hub_field_name]
# hide fields from the object header
fields = [str(f.name) for f in SVMUtil.get_all_fields(self.__obj.type, svm_print_static_fields.value) if f.parent_type != SVMUtil.object_header_type]
for index, f in enumerate(fields):
trace(f'<SVMPPClass> - children: field "{f}"')
# apply custom limit only for java objects
Expand Down
10 changes: 5 additions & 5 deletions substratevm/mx.substratevm/testhello.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ def test():
execute("set print symbol off")

exec_string = execute("ptype _objhdr")
fixed_idhash_field = "int idHash;" in exec_string
has_reserved_field = "reserved;" in exec_string

# Print DefaultGreeter and check the modifiers of its methods and fields
exec_string = execute("ptype 'hello.Hello$DefaultGreeter'")
Expand Down Expand Up @@ -223,7 +223,7 @@ def test():
fr"{spaces_pattern}<java.lang.Object> = {{",
fr"{spaces_pattern}<_objhdr> = {{",
fr"{spaces_pattern}hub = {address_pattern}",
fr"{spaces_pattern}idHash = {address_pattern}" if fixed_idhash_field else None,
fr"{spaces_pattern}reserved = {address_pattern}" if has_reserved_field else None,
fr"{spaces_pattern}}}, <No data fields>}}, ",
fr"{spaces_pattern}members of java\.lang\.String\[\]:",
fr"{spaces_pattern}len = 0x0,",
Expand All @@ -241,7 +241,7 @@ def test():
fr"{spaces_pattern}<java.lang.Object> = {{",
fr"{spaces_pattern}<_objhdr> = {{",
fr"{spaces_pattern}hub = {address_pattern}",
fr"{spaces_pattern}idHash = {address_pattern}" if fixed_idhash_field else None,
fr"{spaces_pattern}reserved = {address_pattern}" if has_reserved_field else None,
fr"{spaces_pattern}}}, <No data fields>}},",
fr"{spaces_pattern}members of java\.lang\.Class:",
fr"{spaces_pattern}name = {address_pattern},",
Expand Down Expand Up @@ -278,7 +278,7 @@ def test():
fr"{spaces_pattern}<java.lang.Object> = {{",
fr"{spaces_pattern}<_objhdr> = {{",
fr"{spaces_pattern}hub = {address_pattern}",
fr"{spaces_pattern}idHash = {address_pattern}" if fixed_idhash_field else None,
fr"{spaces_pattern}reserved = {address_pattern}" if has_reserved_field else None,
fr"{spaces_pattern}}}, <No data fields>}},",
fr"{spaces_pattern}members of java\.lang\.Class:",
fr"{spaces_pattern}name = {address_pattern},",
Expand Down Expand Up @@ -382,7 +382,7 @@ def test():
exec_string = execute("ptype _objhdr")
rexp = [r"type = struct _objhdr {",
fr"{spaces_pattern}Encoded\$Dynamic\$Hub \*hub;",
fr"{spaces_pattern}int idHash;" if fixed_idhash_field else None,
fr"{spaces_pattern}(int|long) reserved;" if has_reserved_field else None,
r"}"]

checker = Checker('ptype _objhdr', rexp)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -332,9 +332,9 @@ private int writeHeaderType(DebugContext context, HeaderTypeEntry headerTypeEntr
String name = uniqueDebugString(DwarfDebugInfo.HUB_TYPE_NAME);
log(context, " [0x%08x] name 0x%x (%s)", pos, debugStringIndex(name), name);
pos = writeStrSectionOffset(name, buffer, pos);
int size = hubType.getSize();
log(context, " [0x%08x] byte_size 0x%x", pos, size);
pos = writeAttrData2((short) size, buffer, pos);
int hubTypeSize = hubType.getSize();
log(context, " [0x%08x] byte_size 0x%x", pos, hubTypeSize);
pos = writeAttrData2((short) hubTypeSize, buffer, pos);
/* Write a data location expression to mask and/or rebase hub pointers. */
log(context, " [0x%08x] data_location", pos);
pos = writeCompressedOopConversionExpression(true, buffer, pos);
Expand All @@ -354,9 +354,9 @@ private int writeHeaderType(DebugContext context, HeaderTypeEntry headerTypeEntr
abbrevCode = AbbrevCode.TYPE_POINTER;
log(context, " [0x%08x] <1> Abbrev Number %d", pos, abbrevCode.ordinal());
pos = writeAbbrevCode(abbrevCode, buffer, pos);
int pointerSize = dwarfSections.referenceSize();
log(context, " [0x%08x] byte_size 0x%x", pos, pointerSize);
pos = writeAttrData1((byte) pointerSize, buffer, pos);
int hubSize = hubField.getSize();
log(context, " [0x%08x] byte_size 0x%x", pos, hubSize);
pos = writeAttrData1((byte) hubSize, buffer, pos);
log(context, " [0x%08x] type 0x%x", pos, hubLayoutTypeIdx);
pos = writeAttrRef4(hubLayoutTypeIdx, buffer, pos);

Expand All @@ -365,15 +365,15 @@ private int writeHeaderType(DebugContext context, HeaderTypeEntry headerTypeEntr

/* Write the type representing the object header. */
name = headerTypeEntry.getTypeName();
size = hubField.getSize();
int headerSize = headerTypeEntry.getSize();
log(context, " [0x%08x] header type %s", pos, name);
abbrevCode = AbbrevCode.OBJECT_HEADER;
log(context, " [0x%08x] <1> Abbrev Number %d", pos, abbrevCode.ordinal());
pos = writeAbbrevCode(abbrevCode, buffer, pos);
log(context, " [0x%08x] name 0x%x (%s)", pos, debugStringIndex(name), name);
pos = writeStrSectionOffset(name, buffer, pos);
log(context, " [0x%08x] byte_size 0x%x", pos, size);
pos = writeAttrData1((byte) size, buffer, pos);
log(context, " [0x%08x] byte_size 0x%x", pos, headerSize);
pos = writeAttrData1((byte) headerSize, buffer, pos);
pos = writeHubField(context, hubField, hubTypeIdx, buffer, pos);
pos = writeStructFields(context, headerTypeEntry.fields(), buffer, pos);

Expand Down
Loading