summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Valentine-House <[email protected]>2021-04-27 12:13:29 +0100
committerPeter Zhu <[email protected]>2021-04-27 10:58:49 -0400
commitc752a35816c64c0eef3324a860ad4a535fb8ff2b ()
treedbccee7a0e563b64108d1ef2622c2d91ca4e5130
parent1b2abb6590a653cb7b31d73c42edbaf2d0617b27 (diff)
lldb: Add Freelist Index to dump_page output
Notes: Merged: https://.com/ruby/ruby/pull/4420
-rwxr-xr-xmisc/lldb_cruby.py61
1 files changed, 49 insertions, 12 deletions
@@ -527,6 +527,31 @@ def dump_bits(target, result, page, object_address, end = "\n"):
check_bits(page, "wb_unprotected_bits", bitmap_index, bitmap_bit, "U"),
), end=end, file=result)
def dump_page(debugger, command, result, internal_dict):
if not ('RUBY_Qfalse' in globals()):
lldb_init(debugger)
@@ -540,21 +565,33 @@ def dump_page(debugger, command, result, internal_dict):
page = frame.EvaluateExpression(command)
page = page.Cast(tHeapPageP)
- tRBasic = target.FindFirstType("struct RBasic")
- tRValue = target.FindFirstType("struct RVALUE")
- obj_address = page.GetChildMemberWithName('start').GetValueAsUnsigned();
- num_slots = page.GetChildMemberWithName('total_slots').unsigned
- ruby_type_map = ruby_types(debugger)
- for j in range(0, num_slots):
- offset = obj_address + (j * tRValue.GetByteSize())
- obj_addr = lldb.SBAddress(offset, target)
- p = target.CreateValueFromAddress("object", obj_addr, tRBasic)
- dump_bits(target, result, page, offset, end = " ")
- flags = p.GetChildMemberWithName('flags').GetValueAsUnsigned()
- print("%s [%3d]: Addr: %0#x (flags: %0#x)" % (rb_type(flags, ruby_type_map), j, offset, flags), file=result)
def rb_type(flags, ruby_types):
flType = flags & RUBY_T_MASK