[Lldb-commits] [lldb] e1cad13 - [lldb] Support Rosetta registers in crashlog.py

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Mon Jan 31 10:51:00 PST 2022


Author: Jonas Devlieghere
Date: 2022-01-31T10:50:16-08:00
New Revision: e1cad1303bf9d2a77546469dc0987502692f80d9

URL: https://github.com/llvm/llvm-project/commit/e1cad1303bf9d2a77546469dc0987502692f80d9
DIFF: https://github.com/llvm/llvm-project/commit/e1cad1303bf9d2a77546469dc0987502692f80d9.diff

LOG: [lldb] Support Rosetta registers in crashlog.py

Rosetta crashlogs can have their own thread register state. Unlike the
other registers which ware directly listed under "threadState", the
Rosetta registers are nested under their own key in the JSON, as
illustrated below:

  {
      "threadState":
      {
          "rosetta":
          {
              "tmp2":
              {
                  "value": 4935057216
              },
              "tmp1":
              {
                  "value": 4365863188
              },
              "tmp0":
              {
                  "value": 18446744073709551615
              }
          }
      }
  }

Added: 
    

Modified: 
    lldb/examples/python/crashlog.py
    lldb/test/Shell/ScriptInterpreter/Python/Crashlog/Inputs/a.out.ips
    lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test

Removed: 
    


################################################################################
diff  --git a/lldb/examples/python/crashlog.py b/lldb/examples/python/crashlog.py
index bdb9ae12b33ce..370b46a90bd99 100755
--- a/lldb/examples/python/crashlog.py
+++ b/lldb/examples/python/crashlog.py
@@ -523,10 +523,13 @@ def parse_threads(self, json_threads):
     def parse_thread_registers(self, json_thread_state):
         registers = dict()
         for key, state in json_thread_state.items():
+            if key == "rosetta":
+               registers.update(self.parse_thread_registers(state))
+               continue
             try:
                value = int(state['value'])
                registers[key] = value
-            except (TypeError, ValueError):
+            except (KeyError, ValueError, TypeError):
                pass
         return registers
 

diff  --git a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/Inputs/a.out.ips b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/Inputs/a.out.ips
index 109ac2ba24858..af72bba8c6d7c 100644
--- a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/Inputs/a.out.ips
+++ b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/Inputs/a.out.ips
@@ -106,6 +106,17 @@
       "rcx": {
         "value": 140732860114656
       },
+      "rosetta": {
+        "tmp2": {
+          "value": 8
+        },
+        "tmp1": {
+          "value": 20
+        },
+        "tmp0": {
+          "value": 92
+        }
+      },
       "flavor": "x86_THREAD_STATE",
       "rdi": {
         "value": 1

diff  --git a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test
index b70cd44c0c8e8..1669b40f3aea0 100644
--- a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test
+++ b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test
@@ -13,5 +13,6 @@
 # CHECK: [  1] {{.*}}out`bar + 8 at test.c
 # CHECK: [  2] {{.*}}out`main + 19 at test.c
 # CHECK: rbp = 0x00007ffeec22a530
+# CHECK: tmp2 = 0x0000000000000008
 # CHECK: invalid foo
 # CHECK: invalid bar


        


More information about the lldb-commits mailing list