[Lldb-commits] [lldb] 5397221 - [lldb] Add arm32/thumb register layout to Scripted{Frame, Thread} (#172005)

via lldb-commits lldb-commits at lists.llvm.org
Fri Dec 12 11:06:12 PST 2025


Author: Med Ismail Bennani
Date: 2025-12-12T20:06:08+01:00
New Revision: 53972216d1087552945e9a44f11b6a2a9d38a59c

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

LOG: [lldb] Add arm32/thumb register layout to Scripted{Frame,Thread} (#172005)

Added: 
    

Modified: 
    lldb/examples/python/templates/scripted_process.py
    lldb/test/API/functionalities/scripted_frame_provider/TestScriptedFrameProvider.py
    lldb/test/API/functionalities/scripted_frame_provider/circular_dependency/TestFrameProviderCircularDependency.py

Removed: 
    


################################################################################
diff  --git a/lldb/examples/python/templates/scripted_process.py b/lldb/examples/python/templates/scripted_process.py
index 24aa9818bb989..b6f2d18971e72 100644
--- a/lldb/examples/python/templates/scripted_process.py
+++ b/lldb/examples/python/templates/scripted_process.py
@@ -360,6 +360,9 @@ def get_register_info(self):
             elif "arm64" in self.arch or self.arch == "aarch64":
                 self.register_info["sets"] = ["General Purpose Registers"]
                 self.register_info["registers"] = ARM64_GPR
+            elif "arm" in self.arch or "thumb" in self.arch:
+                self.register_info["sets"] = ["General Purpose Registers"]
+                self.register_info["registers"] = ARM32_GPR
             else:
                 raise ValueError("Unknown architecture", self.arch)
         return self.register_info
@@ -520,6 +523,9 @@ def get_register_info(self):
                 elif "arm64" in self.arch or self.arch == "aarch64":
                     self.register_info["sets"] = ["General Purpose Registers"]
                     self.register_info["registers"] = ARM64_GPR
+                elif "arm" in self.arch or "thumb" in self.arch:
+                    self.register_info["sets"] = ["General Purpose Registers"]
+                    self.register_info["registers"] = ARM32_GPR
                 else:
                     raise ValueError("Unknown architecture", self.arch)
         return self.register_info
@@ -688,11 +694,10 @@ def get_register_context(self):
 
         return struct.pack(f"{len(self.register_ctx)}Q", *self.register_ctx.values())
 
-
-ARM64_GPR = [
+ARM32_GPR = [
     {
-        "name": "x0",
-        "bitsize": 64,
+        "name": "r0",
+        "bitsize": 32,
         "offset": 0,
         "encoding": "uint",
         "format": "hex",
@@ -703,9 +708,9 @@ def get_register_context(self):
         "alt-name": "arg0",
     },
     {
-        "name": "x1",
-        "bitsize": 64,
-        "offset": 8,
+        "name": "r1",
+        "bitsize": 32,
+        "offset": 4,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
@@ -715,9 +720,9 @@ def get_register_context(self):
         "alt-name": "arg1",
     },
     {
-        "name": "x2",
-        "bitsize": 64,
-        "offset": 16,
+        "name": "r2",
+        "bitsize": 32,
+        "offset": 8,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
@@ -727,9 +732,9 @@ def get_register_context(self):
         "alt-name": "arg2",
     },
     {
-        "name": "x3",
-        "bitsize": 64,
-        "offset": 24,
+        "name": "r3",
+        "bitsize": 32,
+        "offset": 12,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
@@ -739,444 +744,69 @@ def get_register_context(self):
         "alt-name": "arg3",
     },
     {
-        "name": "x4",
-        "bitsize": 64,
-        "offset": 32,
+        "name": "r4",
+        "bitsize": 32,
+        "offset": 16,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
         "gcc": 4,
         "dwarf": 4,
-        "generic": "arg4",
-        "alt-name": "arg4",
     },
     {
-        "name": "x5",
-        "bitsize": 64,
-        "offset": 40,
+        "name": "r5",
+        "bitsize": 32,
+        "offset": 20,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
         "gcc": 5,
         "dwarf": 5,
-        "generic": "arg5",
-        "alt-name": "arg5",
-    },
-    {
-        "name": "x6",
-        "bitsize": 64,
-        "offset": 48,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 6,
-        "dwarf": 6,
-        "generic": "arg6",
-        "alt-name": "arg6",
     },
     {
-        "name": "x7",
-        "bitsize": 64,
-        "offset": 56,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 7,
-        "dwarf": 7,
-        "generic": "arg7",
-        "alt-name": "arg7",
-    },
-    {
-        "name": "x8",
-        "bitsize": 64,
-        "offset": 64,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 8,
-        "dwarf": 8,
-    },
-    {
-        "name": "x9",
-        "bitsize": 64,
-        "offset": 72,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 9,
-        "dwarf": 9,
-    },
-    {
-        "name": "x10",
-        "bitsize": 64,
-        "offset": 80,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 10,
-        "dwarf": 10,
-    },
-    {
-        "name": "x11",
-        "bitsize": 64,
-        "offset": 88,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 11,
-        "dwarf": 11,
-    },
-    {
-        "name": "x12",
-        "bitsize": 64,
-        "offset": 96,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 12,
-        "dwarf": 12,
-    },
-    {
-        "name": "x13",
-        "bitsize": 64,
-        "offset": 104,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 13,
-        "dwarf": 13,
-    },
-    {
-        "name": "x14",
-        "bitsize": 64,
-        "offset": 112,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 14,
-        "dwarf": 14,
-    },
-    {
-        "name": "x15",
-        "bitsize": 64,
-        "offset": 120,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 15,
-        "dwarf": 15,
-    },
-    {
-        "name": "x16",
-        "bitsize": 64,
-        "offset": 128,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 16,
-        "dwarf": 16,
-    },
-    {
-        "name": "x17",
-        "bitsize": 64,
-        "offset": 136,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 17,
-        "dwarf": 17,
-    },
-    {
-        "name": "x18",
-        "bitsize": 64,
-        "offset": 144,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 18,
-        "dwarf": 18,
-    },
-    {
-        "name": "x19",
-        "bitsize": 64,
-        "offset": 152,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 19,
-        "dwarf": 19,
-    },
-    {
-        "name": "x20",
-        "bitsize": 64,
-        "offset": 160,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 20,
-        "dwarf": 20,
-    },
-    {
-        "name": "x21",
-        "bitsize": 64,
-        "offset": 168,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 21,
-        "dwarf": 21,
-    },
-    {
-        "name": "x22",
-        "bitsize": 64,
-        "offset": 176,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 22,
-        "dwarf": 22,
-    },
-    {
-        "name": "x23",
-        "bitsize": 64,
-        "offset": 184,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 23,
-        "dwarf": 23,
-    },
-    {
-        "name": "x24",
-        "bitsize": 64,
-        "offset": 192,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 24,
-        "dwarf": 24,
-    },
-    {
-        "name": "x25",
-        "bitsize": 64,
-        "offset": 200,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 25,
-        "dwarf": 25,
-    },
-    {
-        "name": "x26",
-        "bitsize": 64,
-        "offset": 208,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 26,
-        "dwarf": 26,
-    },
-    {
-        "name": "x27",
-        "bitsize": 64,
-        "offset": 216,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 27,
-        "dwarf": 27,
-    },
-    {
-        "name": "x28",
-        "bitsize": 64,
-        "offset": 224,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 28,
-        "dwarf": 28,
-    },
-    {
-        "name": "x29",
-        "bitsize": 64,
-        "offset": 232,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 29,
-        "dwarf": 29,
-        "generic": "fp",
-        "alt-name": "fp",
-    },
-    {
-        "name": "x30",
-        "bitsize": 64,
-        "offset": 240,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 30,
-        "dwarf": 30,
-        "generic": "lr",
-        "alt-name": "lr",
-    },
-    {
-        "name": "sp",
-        "bitsize": 64,
-        "offset": 248,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 31,
-        "dwarf": 31,
-        "generic": "sp",
-        "alt-name": "sp",
-    },
-    {
-        "name": "pc",
-        "bitsize": 64,
-        "offset": 256,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 32,
-        "dwarf": 32,
-        "generic": "pc",
-        "alt-name": "pc",
-    },
-    {
-        "name": "cpsr",
+        "name": "r6",
         "bitsize": 32,
-        "offset": 264,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 33,
-        "dwarf": 33,
-    },
-]
-
-INTEL64_GPR = [
-    {
-        "name": "rax",
-        "bitsize": 64,
-        "offset": 0,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 0,
-        "dwarf": 0,
-    },
-    {
-        "name": "rbx",
-        "bitsize": 64,
-        "offset": 8,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 3,
-        "dwarf": 3,
-    },
-    {
-        "name": "rcx",
-        "bitsize": 64,
-        "offset": 16,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 2,
-        "dwarf": 2,
-        "generic": "arg4",
-        "alt-name": "arg4",
-    },
-    {
-        "name": "rdx",
-        "bitsize": 64,
         "offset": 24,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
-        "gcc": 1,
-        "dwarf": 1,
-        "generic": "arg3",
-        "alt-name": "arg3",
-    },
-    {
-        "name": "rdi",
-        "bitsize": 64,
-        "offset": 32,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 5,
-        "dwarf": 5,
-        "generic": "arg1",
-        "alt-name": "arg1",
-    },
-    {
-        "name": "rsi",
-        "bitsize": 64,
-        "offset": 40,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 4,
-        "dwarf": 4,
-        "generic": "arg2",
-        "alt-name": "arg2",
-    },
-    {
-        "name": "rbp",
-        "bitsize": 64,
-        "offset": 48,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
         "gcc": 6,
         "dwarf": 6,
-        "generic": "fp",
-        "alt-name": "fp",
     },
     {
-        "name": "rsp",
-        "bitsize": 64,
-        "offset": 56,
+        "name": "r7",
+        "bitsize": 32,
+        "offset": 28,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
         "gcc": 7,
         "dwarf": 7,
-        "generic": "sp",
-        "alt-name": "sp",
     },
     {
         "name": "r8",
-        "bitsize": 64,
-        "offset": 64,
+        "bitsize": 32,
+        "offset": 32,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
         "gcc": 8,
         "dwarf": 8,
-        "generic": "arg5",
-        "alt-name": "arg5",
     },
     {
         "name": "r9",
-        "bitsize": 64,
-        "offset": 72,
+        "bitsize": 32,
+        "offset": 36,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
         "gcc": 9,
         "dwarf": 9,
-        "generic": "arg6",
-        "alt-name": "arg6",
     },
     {
         "name": "r10",
-        "bitsize": 64,
-        "offset": 80,
+        "bitsize": 32,
+        "offset": 40,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
@@ -1185,18 +815,20 @@ def get_register_context(self):
     },
     {
         "name": "r11",
-        "bitsize": 64,
-        "offset": 88,
+        "bitsize": 32,
+        "offset": 44,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
         "gcc": 11,
         "dwarf": 11,
+        "generic": "fp",
+        "alt-name": "fp",
     },
     {
         "name": "r12",
-        "bitsize": 64,
-        "offset": 96,
+        "bitsize": 32,
+        "offset": 48,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
@@ -1204,80 +836,49 @@ def get_register_context(self):
         "dwarf": 12,
     },
     {
-        "name": "r13",
-        "bitsize": 64,
-        "offset": 104,
+        "name": "sp",
+        "bitsize": 32,
+        "offset": 52,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
         "gcc": 13,
         "dwarf": 13,
+        "generic": "sp",
+        "alt-name": "r13",
     },
     {
-        "name": "r14",
-        "bitsize": 64,
-        "offset": 112,
+        "name": "lr",
+        "bitsize": 32,
+        "offset": 56,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
         "gcc": 14,
         "dwarf": 14,
+        "generic": "lr",
+        "alt-name": "r14",
     },
     {
-        "name": "r15",
-        "bitsize": 64,
-        "offset": 120,
+        "name": "pc",
+        "bitsize": 32,
+        "offset": 60,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
         "gcc": 15,
         "dwarf": 15,
-    },
-    {
-        "name": "rip",
-        "bitsize": 64,
-        "offset": 128,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "gcc": 16,
-        "dwarf": 16,
         "generic": "pc",
-        "alt-name": "pc",
+        "alt-name": "r15",
     },
     {
-        "name": "rflags",
-        "bitsize": 64,
-        "offset": 136,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-        "generic": "flags",
-        "alt-name": "flags",
-    },
-    {
-        "name": "cs",
-        "bitsize": 64,
-        "offset": 144,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-    },
-    {
-        "name": "fs",
-        "bitsize": 64,
-        "offset": 152,
-        "encoding": "uint",
-        "format": "hex",
-        "set": 0,
-    },
-    {
-        "name": "gs",
-        "bitsize": 64,
-        "offset": 160,
+        "name": "cpsr",
+        "bitsize": 32,
+        "offset": 64,
         "encoding": "uint",
         "format": "hex",
         "set": 0,
+        "dwarf": 128,
     },
 ]
 

diff  --git a/lldb/test/API/functionalities/scripted_frame_provider/TestScriptedFrameProvider.py b/lldb/test/API/functionalities/scripted_frame_provider/TestScriptedFrameProvider.py
index 922cb7f326f33..afe344b3f2ffb 100644
--- a/lldb/test/API/functionalities/scripted_frame_provider/TestScriptedFrameProvider.py
+++ b/lldb/test/API/functionalities/scripted_frame_provider/TestScriptedFrameProvider.py
@@ -10,7 +10,6 @@
 from lldbsuite.test.lldbtest import TestBase
 from lldbsuite.test import lldbutil
 
- at skipIf(oslist=["linux"], archs=["arm$"])
 class ScriptedFrameProviderTestCase(TestBase):
     NO_DEBUG_INFO_TESTCASE = True
 

diff  --git a/lldb/test/API/functionalities/scripted_frame_provider/circular_dependency/TestFrameProviderCircularDependency.py b/lldb/test/API/functionalities/scripted_frame_provider/circular_dependency/TestFrameProviderCircularDependency.py
index b15bfb24804b6..87477ac1bc59f 100644
--- a/lldb/test/API/functionalities/scripted_frame_provider/circular_dependency/TestFrameProviderCircularDependency.py
+++ b/lldb/test/API/functionalities/scripted_frame_provider/circular_dependency/TestFrameProviderCircularDependency.py
@@ -9,7 +9,6 @@
 from lldbsuite.test.lldbtest import TestBase
 from lldbsuite.test import lldbutil
 
- at skipIf(oslist=["linux"], archs=["arm$"])
 class FrameProviderCircularDependencyTestCase(TestBase):
     NO_DEBUG_INFO_TESTCASE = True
 


        


More information about the lldb-commits mailing list