[Lldb-commits] [lldb] [lldb][LoongArch] Complete register alias name in `AugmentRegisterInfo` (PR #124059)

via lldb-commits lldb-commits at lists.llvm.org
Wed Feb 5 17:08:50 PST 2025


https://github.com/wangleiat updated https://github.com/llvm/llvm-project/pull/124059

>From f4777704df6b2ac7b7ab33e3baadd3830154904a Mon Sep 17 00:00:00 2001
From: Ray Wang <wangray1021 at gmail.com>
Date: Thu, 23 Jan 2025 12:13:32 +0800
Subject: [PATCH 1/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
 =?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Created using spr 1.3.5-bogner
---
 .../ABI/LoongArch/ABISysV_loongarch.cpp       | 38 +++++++------------
 1 file changed, 14 insertions(+), 24 deletions(-)

diff --git a/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.cpp b/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.cpp
index dc7e9bba000676d..272c6a6be529ff3 100644
--- a/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.cpp
+++ b/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.cpp
@@ -644,32 +644,22 @@ void ABISysV_loongarch::AugmentRegisterInfo(
     std::vector<lldb_private::DynamicRegisterInfo::Register> &regs) {
   lldb_private::RegInfoBasedABI::AugmentRegisterInfo(regs);
 
+  static const std::unordered_map<std::string, std::string> reg_aliases = {
+      {"r0", "zero"}, {"r1", "ra"},  {"r2", "tp"},  {"r3", "sp"},
+      {"r4", "a0"},   {"r5", "a1"},  {"r6", "a2"},  {"r7", "a3"},
+      {"r8", "a4"},   {"r9", "a5"},  {"r10", "a6"}, {"r11", "a7"},
+      {"r12", "t0"},  {"r13", "t1"}, {"r14", "t2"}, {"r15", "t3"},
+      {"r16", "t4"},  {"r17", "t5"}, {"r18", "t6"}, {"r19", "t7"},
+      {"r20", "t8"},  {"r22", "fp"}, {"r23", "s0"}, {"r24", "s1"},
+      {"r25", "s2"},  {"r26", "s3"}, {"r27", "s4"}, {"r28", "s5"},
+      {"r29", "s6"},  {"r30", "s7"}, {"r31", "s8"}};
+
   for (auto it : llvm::enumerate(regs)) {
     // Set alt name for certain registers for convenience
-    if (it.value().name == "r0")
-      it.value().alt_name.SetCString("zero");
-    else if (it.value().name == "r1")
-      it.value().alt_name.SetCString("ra");
-    else if (it.value().name == "r3")
-      it.value().alt_name.SetCString("sp");
-    else if (it.value().name == "r22")
-      it.value().alt_name.SetCString("fp");
-    else if (it.value().name == "r4")
-      it.value().alt_name.SetCString("a0");
-    else if (it.value().name == "r5")
-      it.value().alt_name.SetCString("a1");
-    else if (it.value().name == "r6")
-      it.value().alt_name.SetCString("a2");
-    else if (it.value().name == "r7")
-      it.value().alt_name.SetCString("a3");
-    else if (it.value().name == "r8")
-      it.value().alt_name.SetCString("a4");
-    else if (it.value().name == "r9")
-      it.value().alt_name.SetCString("a5");
-    else if (it.value().name == "r10")
-      it.value().alt_name.SetCString("a6");
-    else if (it.value().name == "r11")
-      it.value().alt_name.SetCString("a7");
+    std::string reg_name = it.value().name.GetStringRef().str();
+    if (auto alias = reg_aliases.find(reg_name); alias != reg_aliases.end()) {
+      it.value().alt_name.SetCString(alias->second.c_str());
+    }
 
     // Set generic regnum so lldb knows what the PC, etc is
     it.value().regnum_generic = GetGenericNum(it.value().name.GetStringRef());

>From d03f4f2b191c09d6492249aa5e0d50fc62a5a434 Mon Sep 17 00:00:00 2001
From: Ray Wang <wangray1021 at gmail.com>
Date: Wed, 5 Feb 2025 17:58:09 +0800
Subject: [PATCH 2/2] add test

Created using spr 1.3.5-bogner
---
 .../postmortem/elf-core/TestLinuxCore.py      | 82 ++++++++++---------
 1 file changed, 44 insertions(+), 38 deletions(-)

diff --git a/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py b/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py
index 376d6492d83b604..adabac106f3e375 100644
--- a/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py
+++ b/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py
@@ -642,8 +642,7 @@ def test_aarch64_sve_regs_full(self):
         )
         # RMode should have enumerator descriptions.
         self.expect(
-            "register info fpcr",
-            substrs=["RMode: 0 = RN, 1 = RP, 2 = RM, 3 = RZ"],
+            "register info fpcr", substrs=["RMode: 0 = RN, 1 = RP, 2 = RM, 3 = RZ"]
         )
 
     @skipIfLLVMTargetMissing("AArch64")
@@ -852,41 +851,42 @@ def test_loongarch64_regs(self):
         self.assertTrue(target, VALID_TARGET)
         process = target.LoadCore("linux-loongarch64.core")
 
-        values = {}
-        values["r0"] = "0x0000000000000000"
-        values["r1"] = "0x000000012000016c"
-        values["r2"] = "0x0000000000000000"
-        values["r3"] = "0x00007ffffb8249e0"
-        values["r4"] = "0x0000000000000000"
-        values["r5"] = "0x000000012000010c"
-        values["r6"] = "0x0000000000000000"
-        values["r7"] = "0x0000000000000000"
-        values["r8"] = "0x0000000000000000"
-        values["r9"] = "0x0000000000000000"
-        values["r10"] = "0x0000000000000000"
-        values["r11"] = "0x00000000000000dd"
-        values["r12"] = "0x0000000000000000"
-        values["r13"] = "0x000000000000002f"
-        values["r14"] = "0x0000000000000000"
-        values["r15"] = "0x0000000000000000"
-        values["r16"] = "0x0000000000000000"
-        values["r17"] = "0x0000000000000000"
-        values["r18"] = "0x0000000000000000"
-        values["r19"] = "0x0000000000000000"
-        values["r20"] = "0x0000000000000000"
-        values["r21"] = "0x0000000000000000"
-        values["r22"] = "0x00007ffffb824a10"
-        values["r23"] = "0x0000000000000000"
-        values["r24"] = "0x0000000000000000"
-        values["r25"] = "0x0000000000000000"
-        values["r26"] = "0x0000000000000000"
-        values["r27"] = "0x0000000000000000"
-        values["r28"] = "0x0000000000000000"
-        values["r29"] = "0x0000000000000000"
-        values["r30"] = "0x0000000000000000"
-        values["r31"] = "0x0000000000000000"
-        values["orig_a0"] = "0x0000555556b62d50"
-        values["pc"] = "0x000000012000012c"
+        values = {
+            "r0": ("0x0000000000000000", "zero"),
+            "r1": ("0x000000012000016c", "ra"),
+            "r2": ("0x0000000000000000", "tp"),
+            "r3": ("0x00007ffffb8249e0", "sp"),
+            "r4": ("0x0000000000000000", "a0"),
+            "r5": ("0x000000012000010c", "a1"),
+            "r6": ("0x0000000000000000", "a2"),
+            "r7": ("0x0000000000000000", "a3"),
+            "r8": ("0x0000000000000000", "a4"),
+            "r9": ("0x0000000000000000", "a5"),
+            "r10": ("0x0000000000000000", "a6"),
+            "r11": ("0x00000000000000dd", "a7"),
+            "r12": ("0x0000000000000000", "t0"),
+            "r13": ("0x000000000000002f", "t1"),
+            "r14": ("0x0000000000000000", "t2"),
+            "r15": ("0x0000000000000000", "t3"),
+            "r16": ("0x0000000000000000", "t4"),
+            "r17": ("0x0000000000000000", "t5"),
+            "r18": ("0x0000000000000000", "t6"),
+            "r19": ("0x0000000000000000", "t7"),
+            "r20": ("0x0000000000000000", "t8"),
+            "r21": ("0x0000000000000000", None),
+            "r22": ("0x00007ffffb824a10", "fp"),
+            "r23": ("0x0000000000000000", "s0"),
+            "r24": ("0x0000000000000000", "s1"),
+            "r25": ("0x0000000000000000", "s2"),
+            "r26": ("0x0000000000000000", "s3"),
+            "r27": ("0x0000000000000000", "s4"),
+            "r28": ("0x0000000000000000", "s5"),
+            "r29": ("0x0000000000000000", "s6"),
+            "r30": ("0x0000000000000000", "s7"),
+            "r31": ("0x0000000000000000", "s8"),
+            "orig_a0": ("0x0000555556b62d50", None),
+            "pc": ("0x000000012000012c", None),
+        }
 
         fpr_values = {}
         fpr_values["f0"] = "0x00000000ffffff05"
@@ -931,11 +931,17 @@ def test_loongarch64_regs(self):
         fpr_values["fcc7"] = "0x01"
         fpr_values["fcsr"] = "0x00000000"
 
-        for regname, value in values.items():
+        for regname in values:
+            value, alias = values[regname]
             self.expect(
                 "register read {}".format(regname),
                 substrs=["{} = {}".format(regname, value)],
             )
+            if alias:
+                self.expect(
+                    "register read {}".format(alias),
+                    substrs=["{} = {}".format(regname, value)],
+                )
 
         for regname, value in fpr_values.items():
             self.expect(



More information about the lldb-commits mailing list