Author: Jonas Devlieghere Date: 2021-04-22T16:40:59-07:00 New Revision: 91d3f73937b603b168a2be40f57a81efcc37da86
URL: https://github.com/llvm/llvm-project/commit/91d3f73937b603b168a2be40f57a81efcc37da86 DIFF: https://github.com/llvm/llvm-project/commit/91d3f73937b603b168a2be40f57a81efcc37da86.diff LOG: [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. Added: Modified: lldb/examples/python/crashlog.py lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test lldb/test/Shell/ScriptInterpreter/Python/Crashlog/text.test Removed: ################################################################################ diff --git a/lldb/examples/python/crashlog.py b/lldb/examples/python/crashlog.py index 3fde19e0895b..45f7d01bc38a 100755 --- a/lldb/examples/python/crashlog.py +++ b/lldb/examples/python/crashlog.py @@ -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 @@ -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: @@ -488,7 +492,7 @@ 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', [])) @@ -496,19 +500,13 @@ def parse_threads(self, json_threads): 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 diff --git a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test index 46c37132fc47..a514b07fe9f8 100644 --- a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test +++ b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test @@ -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 diff --git a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/text.test b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/text.test index 7c6e1fc1d1da..44ee5cb80431 100644 --- a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/text.test +++ b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/text.test @@ -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 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits