Skip to content

Commit 9c08e65

Browse files
authored
[lldb] Adapt llgs tests for RISC-V (#130034)
Some lldb tests from llgs category fail on RISC-V target due to lack of necessary condition checks. This patch adapts these tests by taking into account the peculiarities of the RISC-V architecture
1 parent eb4a705 commit 9c08e65

File tree

6 files changed

+31
-5
lines changed

6 files changed

+31
-5
lines changed

lldb/packages/Python/lldbsuite/test/lldbplatformutil.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def check_first_register_readable(test_case):
3535
test_case.expect("register read r0", substrs=["r0 = 0x"])
3636
elif arch in ["powerpc64le"]:
3737
test_case.expect("register read r0", substrs=["r0 = 0x"])
38-
elif re.match("^rv(32|64)", arch):
38+
elif arch in ["riscv64", "riscv32"]:
3939
test_case.expect("register read zero", substrs=["zero = 0x"])
4040
else:
4141
# TODO: Add check for other architectures
@@ -240,6 +240,10 @@ def getArchitecture():
240240
arch = "x86_64"
241241
if arch in ["armv7l", "armv8l"]:
242242
arch = "arm"
243+
if re.match("rv64*", arch):
244+
arch = "riscv64"
245+
if re.match("rv32*", arch):
246+
arch = "riscv32"
243247
return arch
244248

245249

lldb/packages/Python/lldbsuite/test/lldbtest.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1393,6 +1393,10 @@ def isLoongArchLSX(self):
13931393
def isLoongArchLASX(self):
13941394
return self.isLoongArch() and "lasx" in self.getCPUInfo()
13951395

1396+
def isRISCV(self):
1397+
"""Returns true if the architecture is RISCV64 or RISCV32."""
1398+
return self.getArchitecture() in ["riscv64", "riscv32"]
1399+
13961400
def getArchitecture(self):
13971401
"""Returns the architecture in effect the test suite is running with."""
13981402
return lldbplatformutil.getArchitecture()

lldb/packages/Python/lldbsuite/test/tools/lldb-server/gdbremote_testcase.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,7 @@ def assert_valid_reg_info(self, reg_info):
682682
self.assertTrue("name" in reg_info)
683683
self.assertTrue("bitsize" in reg_info)
684684

685-
if not self.getArchitecture() == "aarch64":
685+
if not (self.getArchitecture() == "aarch64" or self.isRISCV()):
686686
self.assertTrue("offset" in reg_info)
687687

688688
self.assertTrue("encoding" in reg_info)

lldb/test/API/tools/lldb-server/TestLldbGdbServer.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,17 @@ def test_qRegisterInfo_contains_required_generics_debugserver(self):
195195
# Ensure we have a stack pointer register.
196196
self.assertIn("sp", generic_regs)
197197

198-
# Ensure we have a flags register.
199-
self.assertIn("flags", generic_regs)
198+
# Ensure we have a flags register. RISC-V doesn't have a flags register
199+
if not self.isRISCV():
200+
self.assertIn("flags", generic_regs)
201+
202+
if self.isRISCV():
203+
# Special RISC-V register for a return address
204+
self.assertIn("ra", generic_regs)
205+
206+
# RISC-V's function arguments registers
207+
for i in range(1, 9):
208+
self.assertIn(f"arg{i}", generic_regs)
200209

201210
def test_qRegisterInfo_contains_at_least_one_register_set(self):
202211
self.build()

lldb/test/API/tools/lldb-server/main.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,15 @@ static void swap_chars() {
128128
:
129129
: "r"('0'), "r"('1'), "r"(&g_c1), "r"(&g_c2)
130130
: "memory");
131+
#elif defined(__riscv)
132+
asm volatile("sb %1, (%2)\n\t"
133+
"sb %0, (%3)\n\t"
134+
"sb %0, (%2)\n\t"
135+
"sb %1, (%3)\n\t"
136+
:
137+
: "r"('0'), "r"('1'), "r"(&g_c1), "r"(&g_c2)
138+
: "memory");
139+
131140
#else
132141
#warning This may generate unpredictible assembly and cause the single-stepping test to fail.
133142
#warning Please add appropriate assembly for your target.

lldb/test/API/tools/lldb-server/registers-target-xml-reading/TestGdbRemoteTargetXmlPacket.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def test_g_target_xml_returns_correct_data(self):
6363
self.assertEqual(q_info_reg["format"], xml_info_reg.get("format"))
6464
self.assertEqual(q_info_reg["bitsize"], xml_info_reg.get("bitsize"))
6565

66-
if not self.isAArch64():
66+
if not (self.isAArch64() or self.isRISCV()):
6767
self.assertEqual(q_info_reg["offset"], xml_info_reg.get("offset"))
6868

6969
self.assertEqual(q_info_reg["encoding"], xml_info_reg.get("encoding"))

0 commit comments

Comments
 (0)