Skip to content

Commit e422c00

Browse files
committed
[lldb] Update register state parsing for JSON crashlogs
- The register encoding state in the JSON crashlog format changes. Update the parser accordingly. - Print the register state when printing the symbolicated thread. (cherry picked from commit 91d3f73)
1 parent 12e713d commit e422c00

File tree

3 files changed

+14
-14
lines changed

3 files changed

+14
-14
lines changed

lldb/examples/python/crashlog.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def dump(self, prefix):
9797
if self.registers:
9898
print("%s Registers:" % (prefix))
9999
for reg in self.registers.keys():
100-
print("%s %-5s = %#16.16x" % (prefix, reg, self.registers[reg]))
100+
print("%s %-8s = %#16.16x" % (prefix, reg, self.registers[reg]))
101101

102102
def dump_symbolicated(self, crash_log, options):
103103
this_thread_crashed = self.app_specific_backtrace
@@ -156,6 +156,10 @@ def dump_symbolicated(self, crash_log, options):
156156
symbolicated_frame_address_idx += 1
157157
else:
158158
print(frame)
159+
if self.registers:
160+
print()
161+
for reg in self.registers.keys():
162+
print(" %-8s = %#16.16x" % (reg, self.registers[reg]))
159163

160164
def add_ident(self, ident):
161165
if ident not in self.idents:
@@ -482,27 +486,21 @@ def parse_threads(self, json_threads):
482486
thread = self.crashlog.Thread(idx, False)
483487
if json_thread.get('triggered', False):
484488
self.crashlog.crashed_thread_idx = idx
485-
self.registers = self.parse_thread_registers(
489+
thread.registers = self.parse_thread_registers(
486490
json_thread['threadState'])
487491
thread.queue = json_thread.get('queue')
488492
self.parse_frames(thread, json_thread.get('frames', []))
489493
self.crashlog.threads.append(thread)
490494
idx += 1
491495

492496
def parse_thread_registers(self, json_thread_state):
493-
idx = 0
494497
registers = dict()
495-
for json_reg in json_thread_state.get('x', []):
496-
key = str('x{}'.format(idx))
497-
value = int(json_reg['value'])
498-
registers[key] = value
499-
idx += 1
500-
501-
for register in ['lr', 'cpsr', 'fp', 'sp', 'esr', 'pc']:
502-
if register in json_thread_state:
503-
json_reg = json_thread_state[register]
504-
registers[register] = int(json_reg['value'])
505-
498+
for key, state in json_thread_state.items():
499+
try:
500+
value = int(state['value'])
501+
registers[key] = value
502+
except (TypeError, ValueError):
503+
pass
506504
return registers
507505

508506

lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@
77
# CHECK: [ 0] {{.*}}out`foo + 16 at test.c
88
# CHECK: [ 1] {{.*}}out`bar + 8 at test.c
99
# CHECK: [ 2] {{.*}}out`main + 19 at test.c
10+
# CHECK: rbp = 0x00007ffeec22a530

lldb/test/Shell/ScriptInterpreter/Python/Crashlog/text.test

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@
77
# CHECK: [ 0] {{.*}}out`foo + 16 at test.c
88
# CHECK: [ 1] {{.*}}out`bar + 8 at test.c
99
# CHECK: [ 2] {{.*}}out`main + 19 at test.c
10+
# CHECK: rbp = 0x00007ffee42d8020

0 commit comments

Comments
 (0)