[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, &registers, &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, &registers, &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