[llvm-branch-commits] [NFC][lsan] Restructure loop in ProcessThreads (PR #112609)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Oct 16 13:09:51 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-compiler-rt-sanitizer
Author: Vitaly Buka (vitalybuka)
<details>
<summary>Changes</summary>
The goal is to move `SuspendedThreadsList` into
the begining of the loop, and prepare for
extraction the rest of the loop body into a
function.
---
Full diff: https://github.com/llvm/llvm-project/pull/112609.diff
1 Files Affected:
- (modified) compiler-rt/lib/lsan/lsan_common.cpp (+17-11)
``````````diff
diff --git a/compiler-rt/lib/lsan/lsan_common.cpp b/compiler-rt/lib/lsan/lsan_common.cpp
index 6510e0ac3bf6ab..a1a15bf98a1183 100644
--- a/compiler-rt/lib/lsan/lsan_common.cpp
+++ b/compiler-rt/lib/lsan/lsan_common.cpp
@@ -407,7 +407,20 @@ static void ProcessThreads(SuspendedThreadsList const &suspended_threads,
for (uptr i = 0; i < suspended_threads.ThreadCount(); i++) {
registers.clear();
extra_ranges.clear();
+
const tid_t os_id = static_cast<tid_t>(suspended_threads.GetThreadID(i));
+ uptr sp = 0;
+ PtraceRegistersStatus have_registers =
+ suspended_threads.GetRegistersAndSP(i, ®isters, &sp);
+ if (have_registers != REGISTERS_AVAILABLE) {
+ Report("Unable to get registers from thread %llu.\n", os_id);
+ // If unable to get SP, consider the entire stack to be reachable unless
+ // GetRegistersAndSP failed with ESRCH.
+ if (have_registers == REGISTERS_UNAVAILABLE_FATAL)
+ continue;
+ sp = 0;
+ }
+
LOG_THREADS("Processing thread %llu.\n", os_id);
uptr stack_begin, stack_end, tls_begin, tls_end, cache_begin, cache_end;
DTLS *dtls;
@@ -420,20 +433,13 @@ static void ProcessThreads(SuspendedThreadsList const &suspended_threads,
LOG_THREADS("Thread %llu not found in registry.\n", os_id);
continue;
}
- uptr sp;
- PtraceRegistersStatus have_registers =
- suspended_threads.GetRegistersAndSP(i, ®isters, &sp);
- if (have_registers != REGISTERS_AVAILABLE) {
- Report("Unable to get registers from thread %llu.\n", os_id);
- // If unable to get SP, consider the entire stack to be reachable unless
- // GetRegistersAndSP failed with ESRCH.
- if (have_registers == REGISTERS_UNAVAILABLE_FATAL)
- continue;
- sp = stack_begin;
- }
+
if (os_id == caller_tid)
sp = caller_sp;
+ if (!sp)
+ sp = stack_begin;
+
if (flags()->use_registers && have_registers) {
uptr registers_begin = reinterpret_cast<uptr>(registers.data());
uptr registers_end =
``````````
</details>
https://github.com/llvm/llvm-project/pull/112609
More information about the llvm-branch-commits
mailing list