Skip to content

Commit

Permalink
[ci skip][Feature #18910][lldb] Dedup lldb_init
Browse files Browse the repository at this point in the history
by moving it fully into RbBaseCommand
  • Loading branch information
eightbitraptor authored and peterzhu2118 committed Aug 18, 2022
1 parent b26aec9 commit 92603bb
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 28 deletions.
4 changes: 3 additions & 1 deletion misc/lldb_cruby.py
Original file line number Diff line number Diff line change
Expand Up @@ -741,5 +741,7 @@ def __lldb_init_module(debugger, internal_dict):
debugger.HandleCommand("command script add -f lldb_cruby.dump_page dump_page")
debugger.HandleCommand("command script add -f lldb_cruby.dump_page_rvalue dump_page_rvalue")
debugger.HandleCommand("command script add -f lldb_cruby.rb_id2str rb_id2str")
lldb_init(debugger)

lldb_rb.rb_base_command.RbBaseCommand.lldb_init(debugger)

print("lldb scripts for ruby has been installed.")
55 changes: 28 additions & 27 deletions misc/lldb_rb/rb_base_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,39 @@ def register_lldb_command(cls, debugger, module_name):
command = f"command script add -c {module_name}.{cls.__name__} {cls.program}"
debugger.HandleCommand(command)

@classmethod
def lldb_init(cls, debugger):
target = debugger.GetSelectedTarget()
global SIZEOF_VALUE
SIZEOF_VALUE = target.FindFirstType("VALUE").GetByteSize()

value_types = []
g = globals()

imemo_types = target.FindFirstType("enum imemo_type")

for member in imemo_types.GetEnumMembers():
g[member.GetName()] = member.GetValueAsUnsigned()

for enum in target.FindFirstGlobalVariable("ruby_dummy_gdb_enums"):
enum = enum.GetType()
members = enum.GetEnumMembers()
for i in range(0, members.GetSize()):
member = members.GetTypeEnumMemberAtIndex(i)
name = member.GetName()
value = member.GetValueAsUnsigned()
g[name] = value

if name.startswith("RUBY_T_"):
value_types.append(name)
g["value_types"] = value_types

def __init__(self, debugger, _internal_dict):
self.internal_dict = _internal_dict

def __call__(self, debugger, command, exe_ctx, result):
if not ("RUBY_Qfalse" in globals()):
self._lldb_init(debugger)
RbBaseCommand.lldb_init(debugger)

self.build_environment(debugger)
self.call(debugger, command, exe_ctx, result)
Expand All @@ -40,29 +67,3 @@ def _append_command_output(self, debugger, command, result):
result.Clear()
result.write(output1)
result.write(output2)

def _lldb_init(self, debugger):
target = debugger.GetSelectedTarget()
global SIZEOF_VALUE
SIZEOF_VALUE = target.FindFirstType("VALUE").GetByteSize()

value_types = []
g = globals()

imemo_types = target.FindFirstType("enum imemo_type")

for member in imemo_types.GetEnumMembers():
g[member.GetName()] = member.GetValueAsUnsigned()

for enum in target.FindFirstGlobalVariable("ruby_dummy_gdb_enums"):
enum = enum.GetType()
members = enum.GetEnumMembers()
for i in range(0, members.GetSize()):
member = members.GetTypeEnumMemberAtIndex(i)
name = member.GetName()
value = member.GetValueAsUnsigned()
g[name] = value

if name.startswith("RUBY_T_"):
value_types.append(name)
g["value_types"] = value_types

0 comments on commit 92603bb

Please sign in to comment.