diff options
author | Matt Valentine-House <[email protected]> | 2021-04-27 12:13:29 +0100 |
---|---|---|
committer | Peter Zhu <[email protected]> | 2021-04-27 10:58:49 -0400 |
commit | c752a35816c64c0eef3324a860ad4a535fb8ff2b () | |
tree | dbccee7a0e563b64108d1ef2622c2d91ca4e5130 | |
parent | 1b2abb6590a653cb7b31d73c42edbaf2d0617b27 (diff) |
lldb: Add Freelist Index to dump_page output
Notes: Merged: https://.com/ruby/ruby/pull/4420
-rwxr-xr-x | misc/lldb_cruby.py | 61 |
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 |