[compiler-rt] 6ffd3bb - [nfc][lsan] Restructure loop in ProcessThreads (#112609)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 16 18:32:17 PDT 2024
Author: Vitaly Buka
Date: 2024-10-16T18:32:14-07:00
New Revision: 6ffd3bbcd7240f2a23cec99c11b7298cc28f54c5
URL: https://github.com/llvm/llvm-project/commit/6ffd3bbcd7240f2a23cec99c11b7298cc28f54c5
DIFF: https://github.com/llvm/llvm-project/commit/6ffd3bbcd7240f2a23cec99c11b7298cc28f54c5.diff
LOG: [nfc][lsan] Restructure loop in ProcessThreads (#112609)
The goal is to move `SuspendedThreadsList` related code into
the beginning of the loop, and prepare for extraction the rest
of the loop body into a function.
Added:
Modified:
compiler-rt/lib/lsan/lsan_common.cpp
Removed:
################################################################################
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 =
More information about the llvm-commits
mailing list