From 14dcceef6a0d0a08621c7a4b4cd97322bbb38ae3 Mon Sep 17 00:00:00 2001 From: Georgiy Samoylov Date: Tue, 25 Feb 2025 18:12:01 +0300 Subject: [PATCH 1/7] [lldb] Added checking for RISC-V --- lldb/packages/Python/lldbsuite/test/lldbplatformutil.py | 4 ++++ lldb/packages/Python/lldbsuite/test/lldbtest.py | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py b/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py index 3d8c713562e9b..8d78657a6ef70 100644 --- a/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py +++ b/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py @@ -240,6 +240,10 @@ def getArchitecture(): arch = "x86_64" if arch in ["armv7l", "armv8l"]: arch = "arm" + if re.match("rv64*", arch): + arch = "riscv64" + if re.match("rv32*", arch): + arch = "riscv32" return arch diff --git a/lldb/packages/Python/lldbsuite/test/lldbtest.py b/lldb/packages/Python/lldbsuite/test/lldbtest.py index 81b286340560d..231e2c537d8da 100644 --- a/lldb/packages/Python/lldbsuite/test/lldbtest.py +++ b/lldb/packages/Python/lldbsuite/test/lldbtest.py @@ -1393,6 +1393,10 @@ def isLoongArchLSX(self): def isLoongArchLASX(self): return self.isLoongArch() and "lasx" in self.getCPUInfo() + def isRISCV(self): + """Returns true if the architecture is RISCV64 or RISCV32.""" + return self.getArchitecture() in ["riscv64", "riscv32"] + def getArchitecture(self): """Returns the architecture in effect the test suite is running with.""" return lldbplatformutil.getArchitecture() From 0644381cf17f233004851fc0170ae210f934e639 Mon Sep 17 00:00:00 2001 From: Georgiy Samoylov Date: Thu, 13 Feb 2025 11:45:54 +0300 Subject: [PATCH 2/7] [lldb] Adapted TestGdbRemoteTargetXmlPacket.py test for RISC-V --- .../TestGdbRemoteTargetXmlPacket.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lldb/test/API/tools/lldb-server/registers-target-xml-reading/TestGdbRemoteTargetXmlPacket.py b/lldb/test/API/tools/lldb-server/registers-target-xml-reading/TestGdbRemoteTargetXmlPacket.py index c1a92eeb5d5d1..603aa0033f086 100644 --- a/lldb/test/API/tools/lldb-server/registers-target-xml-reading/TestGdbRemoteTargetXmlPacket.py +++ b/lldb/test/API/tools/lldb-server/registers-target-xml-reading/TestGdbRemoteTargetXmlPacket.py @@ -63,7 +63,7 @@ def test_g_target_xml_returns_correct_data(self): self.assertEqual(q_info_reg["format"], xml_info_reg.get("format")) self.assertEqual(q_info_reg["bitsize"], xml_info_reg.get("bitsize")) - if not self.isAArch64(): + if not (self.isAArch64() or self.isRISCV()): self.assertEqual(q_info_reg["offset"], xml_info_reg.get("offset")) self.assertEqual(q_info_reg["encoding"], xml_info_reg.get("encoding")) From 9b8db01fe9637c6ddca33663471ddee585a7d358 Mon Sep 17 00:00:00 2001 From: Georgiy Samoylov Date: Thu, 13 Feb 2025 14:11:25 +0300 Subject: [PATCH 3/7] [lldb] Adapted TestLldbGdbServer.py test for RISC-V --- .../lldbsuite/test/tools/lldb-server/gdbremote_testcase.py | 2 +- lldb/test/API/tools/lldb-server/TestLldbGdbServer.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-server/gdbremote_testcase.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-server/gdbremote_testcase.py index fb96b3d4de560..3d3ecb9aa8f95 100644 --- a/lldb/packages/Python/lldbsuite/test/tools/lldb-server/gdbremote_testcase.py +++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-server/gdbremote_testcase.py @@ -682,7 +682,7 @@ def assert_valid_reg_info(self, reg_info): self.assertTrue("name" in reg_info) self.assertTrue("bitsize" in reg_info) - if not self.getArchitecture() == "aarch64": + if not (self.getArchitecture() == "aarch64" or self.isRISCV()): self.assertTrue("offset" in reg_info) self.assertTrue("encoding" in reg_info) diff --git a/lldb/test/API/tools/lldb-server/TestLldbGdbServer.py b/lldb/test/API/tools/lldb-server/TestLldbGdbServer.py index 592037db502aa..69f1a25891807 100644 --- a/lldb/test/API/tools/lldb-server/TestLldbGdbServer.py +++ b/lldb/test/API/tools/lldb-server/TestLldbGdbServer.py @@ -195,8 +195,9 @@ def test_qRegisterInfo_contains_required_generics_debugserver(self): # Ensure we have a stack pointer register. self.assertIn("sp", generic_regs) - # Ensure we have a flags register. - self.assertIn("flags", generic_regs) + # Ensure we have a flags register. RISC-V doesn't have a flags register + if not self.isRISCV(): + self.assertIn("flags", generic_regs) def test_qRegisterInfo_contains_at_least_one_register_set(self): self.build() From 69933f161e7e06dfa0b098f61fca71637b5d34f1 Mon Sep 17 00:00:00 2001 From: Georgiy Samoylov Date: Wed, 19 Feb 2025 17:41:32 +0300 Subject: [PATCH 4/7] [lldb] Adapted TestGdbRemoteSingleStep.py test for RISC-V --- lldb/test/API/tools/lldb-server/main.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lldb/test/API/tools/lldb-server/main.cpp b/lldb/test/API/tools/lldb-server/main.cpp index 484da8aa4bef9..c661f5b4e82c4 100644 --- a/lldb/test/API/tools/lldb-server/main.cpp +++ b/lldb/test/API/tools/lldb-server/main.cpp @@ -128,6 +128,15 @@ static void swap_chars() { : : "r"('0'), "r"('1'), "r"(&g_c1), "r"(&g_c2) : "memory"); +#elif defined(__riscv) + asm volatile("sb %1, (%2)\n\t" + "sb %0, (%3)\n\t" + "sb %0, (%2)\n\t" + "sb %1, (%3)\n\t" + : + : "r"('0'), "r"('1'), "r"(&g_c1), "r"(&g_c2) + : "memory"); + #else #warning This may generate unpredictible assembly and cause the single-stepping test to fail. #warning Please add appropriate assembly for your target. From 6a66aa6b200ac55c443b4579fe7e8fa85c2dc182 Mon Sep 17 00:00:00 2001 From: Georgiy Samoylov Date: Wed, 19 Feb 2025 21:15:59 +0300 Subject: [PATCH 5/7] [lldb] Changed rv64 to riscv64 in arch check --- lldb/packages/Python/lldbsuite/test/lldbplatformutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py b/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py index 8d78657a6ef70..a1ab06076dcb2 100644 --- a/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py +++ b/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py @@ -35,7 +35,7 @@ def check_first_register_readable(test_case): test_case.expect("register read r0", substrs=["r0 = 0x"]) elif arch in ["powerpc64le"]: test_case.expect("register read r0", substrs=["r0 = 0x"]) - elif re.match("^rv(32|64)", arch): + elif arch in ["riscv64", "riscv32"]: test_case.expect("register read zero", substrs=["zero = 0x"]) else: # TODO: Add check for other architectures From 8c4308e11bcba5e4d132075e6f5c073569119d68 Mon Sep 17 00:00:00 2001 From: Georgiy Samoylov Date: Thu, 20 Feb 2025 15:09:52 +0300 Subject: [PATCH 6/7] [lldb] Added check for a generic register:ra and a0-a7 --- lldb/test/API/tools/lldb-server/TestLldbGdbServer.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lldb/test/API/tools/lldb-server/TestLldbGdbServer.py b/lldb/test/API/tools/lldb-server/TestLldbGdbServer.py index 69f1a25891807..ce75e3e89e0a6 100644 --- a/lldb/test/API/tools/lldb-server/TestLldbGdbServer.py +++ b/lldb/test/API/tools/lldb-server/TestLldbGdbServer.py @@ -199,6 +199,14 @@ def test_qRegisterInfo_contains_required_generics_debugserver(self): if not self.isRISCV(): self.assertIn("flags", generic_regs) + if self.isRISCV(): + # Special RISC-V register for a return address + self.assertIn("ra", generic_regs) + + # RISC-V's function arguments registers + for i in range(1, 9): + self.assertIn(f"arg{i}", generic_regs) + def test_qRegisterInfo_contains_at_least_one_register_set(self): self.build() self.prep_debug_monitor_and_inferior() From cca1018c4fa3ec7cc63e52d04048c6fd5f2a8d45 Mon Sep 17 00:00:00 2001 From: Georgiy Samoylov Date: Thu, 6 Mar 2025 18:41:41 +0300 Subject: [PATCH 7/7] [lldb] Code format changes --- lldb/packages/Python/lldbsuite/test/lldbtest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lldb/packages/Python/lldbsuite/test/lldbtest.py b/lldb/packages/Python/lldbsuite/test/lldbtest.py index 231e2c537d8da..7d0e6e9a970eb 100644 --- a/lldb/packages/Python/lldbsuite/test/lldbtest.py +++ b/lldb/packages/Python/lldbsuite/test/lldbtest.py @@ -1394,7 +1394,7 @@ def isLoongArchLASX(self): return self.isLoongArch() and "lasx" in self.getCPUInfo() def isRISCV(self): - """Returns true if the architecture is RISCV64 or RISCV32.""" + """Returns true if the architecture is RISCV64 or RISCV32.""" return self.getArchitecture() in ["riscv64", "riscv32"] def getArchitecture(self):