[Lldb-commits] [lldb] [lldb][RISCV] fix LR/SC atomic sequence handling in lldb-server (PR #127505)

via lldb-commits lldb-commits at lists.llvm.org
Fri Jun 20 07:15:55 PDT 2025


================
@@ -0,0 +1,90 @@
+"""
+Test software step-inst
+"""
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class TestSoftwareStep(TestBase):
+    @skipIf(archs=no_match(re.compile("rv*")))
+    def test_cas(self):
+        self.build()
+        (target, process, cur_thread, bkpt) = lldbutil.run_to_name_breakpoint(
+            self, "cas"
+        )
+        entry_pc = cur_thread.GetFrameAtIndex(0).GetPC()
+
+        self.runCmd("thread step-inst")
+        self.expect(
+            "thread list",
+            substrs=["stopped", "stop reason = instruction step into"],
+        )
+
+        pc = cur_thread.GetFrameAtIndex(0).GetPC()
+        self.assertTrue((pc - entry_pc) > 0x10)
+
+    @skipIf(archs=no_match(re.compile("rv*")))
+    def test_branch_cas(self):
+        self.build(dictionary={"C_SOURCES": "branch.c", "EXE": "branch.x"})
+        (target, process, cur_thread, bkpt) = lldbutil.run_to_name_breakpoint(
+            self, "branch_cas", exe_name="branch.x"
+        )
+        entry_pc = cur_thread.GetFrameAtIndex(0).GetPC()
+
+        self.runCmd("thread step-inst")
+        self.expect(
+            "thread list",
+            substrs=["stopped", "stop reason = instruction step into"],
+        )
+
+        pc = cur_thread.GetFrameAtIndex(0).GetPC()
+        self.assertTrue((pc - entry_pc) > 0x10)
+
+    @skipIf(archs=no_match(re.compile("rv*")))
+    def test_incomplete_sequence_without_lr(self):
+        self.build(
+            dictionary={
+                "C_SOURCES": "incomplete_sequence_without_lr.c",
+                "EXE": "incomplete_lr.x",
+            }
+        )
+        (target, process, cur_thread, bkpt) = lldbutil.run_to_name_breakpoint(
+            self, "incomplete_cas", exe_name="incomplete_lr.x"
+        )
+        entry_pc = cur_thread.GetFrameAtIndex(0).GetPC()
+
+        self.runCmd("thread step-inst")
+
+        self.expect(
+            "thread list",
+            substrs=["stopped", "stop reason = instruction step into"],
+        )
+
+        pc = cur_thread.GetFrameAtIndex(0).GetPC()
+        self.assertTrue((pc - entry_pc) == 0x4)
+
+    @skipIf(archs=no_match(re.compile("rv*")))
+    def test_incomplete_sequence_without_sc(self):
+        self.build(
+            dictionary={
+                "C_SOURCES": "incomplete_sequence_without_sc.c",
+                "EXE": "incomplete_sc.x",
+            }
+        )
+        (target, process, cur_thread, bkpt) = lldbutil.run_to_name_breakpoint(
+            self, "incomplete_cas", exe_name="incomplete_sc.x"
+        )
+        entry_pc = cur_thread.GetFrameAtIndex(0).GetPC()
+
+        self.runCmd("thread step-inst")
+
+        self.expect(
+            "thread list",
+            substrs=["stopped", "stop reason = instruction step into"],
+        )
+
+        pc = cur_thread.GetFrameAtIndex(0).GetPC()
+        self.assertTrue((pc - entry_pc) == 0x4)
----------------
dlav-sc wrote:

addressed

https://github.com/llvm/llvm-project/pull/127505


More information about the lldb-commits mailing list