llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: Charles Zablit (charles-zablit)

<details>
<summary>Changes</summary>

`g_watchme` was declared right next to `g_sigusr1_count`. Hardware watchpoints 
round the watched address to an alignment boundary, so a watchpoint on 
`g_watchme` could also end up covering `g_sigusr1_count`. When the signal 
thread's handler touches `g_sigusr1_count` while the watchpoint threads write 
`g_watchme`, that overlap causes a spurious hit and lldb can attribute the stop 
to the wrong thread.

See llvm.org/PR35228.

Fix: align `g_watchme` and pad after it so it can't share a watchpoint's range 
with another global.

Assisted by Claude.

---
Full diff: https://github.com/llvm/llvm-project/pull/221697.diff


1 Files Affected:

- (modified) lldb/test/API/functionalities/thread/concurrent_events/main.cpp 
(+3-1) 


``````````diff
diff --git a/lldb/test/API/functionalities/thread/concurrent_events/main.cpp 
b/lldb/test/API/functionalities/thread/concurrent_events/main.cpp
index 84d8c7015a796..ba4ab62d3fca9 100644
--- a/lldb/test/API/functionalities/thread/concurrent_events/main.cpp
+++ b/lldb/test/API/functionalities/thread/concurrent_events/main.cpp
@@ -19,7 +19,9 @@ typedef std::vector<pthread_t> thread_vector;
 pseudo_barrier_t g_barrier;
 int g_breakpoint = 0;
 int g_sigusr1_count = 0;
-uint32_t g_watchme;
+
+alignas(16) uint32_t g_watchme;
+uint32_t g_watchme_padding[4];
 
 struct action_args {
   int delay;

``````````

</details>


https://github.com/llvm/llvm-project/pull/221697
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to