authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-12-16 05:11:10-05:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-12-16 15:11:23-05:00
log5af740465597c3bcee3d26adbc7b1994d40df0f1
tree13ffb8752406c53576a11a50b177767d152d47c9
parent1983adb8ae710a374b4cb1bb4cb5514abac7ddd0

lldb: add pretty printer for `InternPool.Local.List`


1 files changed, 37 insertions(+), 0 deletions(-)

tools/lldb_pretty_printers.py+37
...@@ -7,10 +7,28 @@...@@ -7,10 +7,28 @@
7import lldb7import lldb
8import re8import re
99
10# Helpers
11
10page_size = 1 << 1212page_size = 1 << 12
1113
12def log2_int(i): return i.bit_length() - 114def log2_int(i): return i.bit_length() - 1
1315
16def create_struct(name, struct_type, **inits):
17 struct_bytes = bytearray(struct_type.size)
18 struct_data = lldb.SBData()
19 for field in struct_type.fields:
20 field_size = field.type.size
21 field_bytes = inits[field.name].data.uint8[:field_size]
22 match struct_data.byte_order:
23 case lldb.eByteOrderLittle:
24 field_start = field.byte_offset
25 struct_bytes[field_start:field_start + len(field_bytes)] = field_bytes
26 case lldb.eByteOrderBig:
27 field_end = field.byte_offset + field_size
28 struct_bytes[field_end - len(field_bytes):field_end] = field_bytes
29 struct_data.SetData(lldb.SBError(), struct_bytes, struct_data.byte_order, struct_data.GetAddressByteSize())
30 return next(iter(inits.values())).CreateValueFromData(name, struct_data, struct_type)
31
14# Define Zig Language32# Define Zig Language
1533
16zig_keywords = {34zig_keywords = {
...@@ -678,6 +696,22 @@ value_tag_handlers = {...@@ -678,6 +696,22 @@ value_tag_handlers = {
678 'lazy_size': lambda payload: '@sizeOf(%s)' % type_Type_SummaryProvider(payload),696 'lazy_size': lambda payload: '@sizeOf(%s)' % type_Type_SummaryProvider(payload),
679}697}
680698
699# Define Zig Stage2 Compiler (compiled with the self-hosted backend)
700
701class root_InternPool_Local_List_SynthProvider:
702 def __init__(self, value, _=None): self.value = value
703 def update(self):
704 capacity = self.value.EvaluateExpression('@as(*@This().Header, @alignCast(@ptrCast(@this().bytes - @This().bytes_offset))).capacity')
705 self.view = create_struct('view', self.value.EvaluateExpression('@This().View').GetValueAsType(), bytes=self.value.GetChildMemberWithName('bytes'), len=capacity, capacity=capacity).GetNonSyntheticValue()
706 def has_children(self): return True
707 def num_children(self): return 1
708 def get_child_index(self, name):
709 try: return ('view',).index(name)
710 except: pass
711 def get_child_at_index(self, index):
712 try: return (self.view,)[index]
713 except: pass
714
681# Initialize715# Initialize
682716
683def add(debugger, *, category, regex=False, type, identifier=None, synth=False, inline_children=False, expand=False, summary=False):717def add(debugger, *, category, regex=False, type, identifier=None, synth=False, inline_children=False, expand=False, summary=False):
...@@ -729,3 +763,6 @@ def __lldb_init_module(debugger, _=None):...@@ -729,3 +763,6 @@ def __lldb_init_module(debugger, _=None):
729 add(debugger, category='zig.stage2', type='InternPool.Key.Ptr.Addr', identifier='zig_TaggedUnion', synth=True)763 add(debugger, category='zig.stage2', type='InternPool.Key.Ptr.Addr', identifier='zig_TaggedUnion', synth=True)
730 add(debugger, category='zig.stage2', type='InternPool.Key.Aggregate.Storage', identifier='zig_TaggedUnion', synth=True)764 add(debugger, category='zig.stage2', type='InternPool.Key.Aggregate.Storage', identifier='zig_TaggedUnion', synth=True)
731 add(debugger, category='zig.stage2', type='arch.x86_64.CodeGen.MCValue', identifier='zig_TaggedUnion', synth=True, inline_children=True, summary=True)765 add(debugger, category='zig.stage2', type='arch.x86_64.CodeGen.MCValue', identifier='zig_TaggedUnion', synth=True, inline_children=True, summary=True)
766
767 # Initialize Zig Stage2 Compiler (compiled with the self-hosted backend)
768 add(debugger, category='zig', regex=True, type='^root\\.InternPool\\.Local\\.List\\(.*\\)$', identifier='root_InternPool_Local_List', synth=True, expand=True, summary='capacity=${var%#}')