aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
diff options
context:
space:
mode:
authordlav-sc <daniil.avdeev@syntacore.com>2025-06-30 16:27:44 +0300
committerGitHub <noreply@github.com>2025-06-30 16:27:44 +0300
commitd7e23bef6ad497cd5a100126957c381e053dda9b (patch)
tree3e7ca7ee8afdbfba1fa674493beb3d92f48cf4aa /lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
parenta99fee6989a66ca7cb73fc2fcbac0f693d122326 (diff)
downloadllvm-d7e23bef6ad497cd5a100126957c381e053dda9b.zip
llvm-d7e23bef6ad497cd5a100126957c381e053dda9b.tar.gz
llvm-d7e23bef6ad497cd5a100126957c381e053dda9b.tar.bz2
[lldb][RISCV] fix LR/SC atomic sequence handling in lldb-server (#146072)
lldb-server had limited support for single-stepping through the lr/sc atomic sequence. This patch enhances that support for all possible atomic sequences. The previous version contained an incorrect regex pattern in the test, causing the riscv-specific test to run on other platforms. This reland fixes the regex (see lldb/test/API/riscv/step/TestSoftwareStep.py)
Diffstat (limited to 'lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp')
-rw-r--r--lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
index 7f2aba0..9c798cb 100644
--- a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+++ b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
@@ -833,7 +833,7 @@ void NativeProcessLinux::MonitorBreakpoint(NativeThreadLinux &thread) {
auto stepping_with_bp_it =
m_threads_stepping_with_breakpoint.find(thread.GetID());
if (stepping_with_bp_it != m_threads_stepping_with_breakpoint.end() &&
- stepping_with_bp_it->second == reg_ctx.GetPC())
+ llvm::is_contained(stepping_with_bp_it->second, reg_ctx.GetPC()))
thread.SetStoppedByTrace();
StopRunningThreads(thread.GetID());
@@ -1960,10 +1960,12 @@ void NativeProcessLinux::SignalIfAllThreadsStopped() {
// Clear any temporary breakpoints we used to implement software single
// stepping.
for (const auto &thread_info : m_threads_stepping_with_breakpoint) {
- Status error = RemoveBreakpoint(thread_info.second);
- if (error.Fail())
- LLDB_LOG(log, "pid = {0} remove stepping breakpoint: {1}",
- thread_info.first, error);
+ for (auto &&bp_addr : thread_info.second) {
+ Status error = RemoveBreakpoint(bp_addr);
+ if (error.Fail())
+ LLDB_LOG(log, "pid = {0} remove stepping breakpoint: {1}",
+ thread_info.first, error);
+ }
}
m_threads_stepping_with_breakpoint.clear();