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 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits