Skip to content

Commit

Permalink
[lldb] Update register state parsing for JSON crashlogs
Browse files Browse the repository at this point in the history
 - The register encoding state in the JSON crashlog format changes.
   Update the parser accordingly.
 - Print the register state when printing the symbolicated thread.
  • Loading branch information
JDevlieghere committed Apr 22, 2021
1 parent 8c17a87 commit 91d3f73
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 14 deletions.
26 changes: 12 additions & 14 deletions lldb/examples/python/crashlog.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def dump(self, prefix):
if self.registers:
print("%s Registers:" % (prefix))
for reg in self.registers.keys():
print("%s %-5s = %#16.16x" % (prefix, reg, self.registers[reg]))
print("%s %-8s = %#16.16x" % (prefix, reg, self.registers[reg]))

def dump_symbolicated(self, crash_log, options):
this_thread_crashed = self.app_specific_backtrace
Expand Down Expand Up @@ -156,6 +156,10 @@ def dump_symbolicated(self, crash_log, options):
symbolicated_frame_address_idx += 1
else:
print(frame)
if self.registers:
print()
for reg in self.registers.keys():
print(" %-8s = %#16.16x" % (reg, self.registers[reg]))

def add_ident(self, ident):
if ident not in self.idents:
Expand Down Expand Up @@ -488,27 +492,21 @@ def parse_threads(self, json_threads):
thread.reason = json_thread['name']
if json_thread.get('triggered', False):
self.crashlog.crashed_thread_idx = idx
self.registers = self.parse_thread_registers(
thread.registers = self.parse_thread_registers(
json_thread['threadState'])
thread.queue = json_thread.get('queue')
self.parse_frames(thread, json_thread.get('frames', []))
self.crashlog.threads.append(thread)
idx += 1

def parse_thread_registers(self, json_thread_state):
idx = 0
registers = dict()
for json_reg in json_thread_state.get('x', []):
key = str('x{}'.format(idx))
value = int(json_reg['value'])
registers[key] = value
idx += 1

for register in ['lr', 'cpsr', 'fp', 'sp', 'esr', 'pc']:
if register in json_thread_state:
json_reg = json_thread_state[register]
registers[register] = int(json_reg['value'])

for key, state in json_thread_state.items():
try:
value = int(state['value'])
registers[key] = value
except (TypeError, ValueError):
pass
return registers


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@
# CHECK: [ 0] {{.*}}out`foo + 16 at test.c
# CHECK: [ 1] {{.*}}out`bar + 8 at test.c
# CHECK: [ 2] {{.*}}out`main + 19 at test.c
# CHECK: rbp = 0x00007ffeec22a530
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@
# CHECK: [ 0] {{.*}}out`foo + 16 at test.c
# CHECK: [ 1] {{.*}}out`bar + 8 at test.c
# CHECK: [ 2] {{.*}}out`main + 19 at test.c
# CHECK: rbp = 0x00007ffee42d8020

0 comments on commit 91d3f73

Please sign in to comment.