[compiler-rt] 2652243 - [NFC][tsan] Move SkipInternalFrames into sanitizer_common (#77146)

via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 5 16:53:52 PST 2024


Author: Vitaly Buka
Date: 2024-01-05T16:53:48-08:00
New Revision: 2652243f19314cf0a7583402d37d28dbae9ec1e6

URL: https://github.com/llvm/llvm-project/commit/2652243f19314cf0a7583402d37d28dbae9ec1e6
DIFF: https://github.com/llvm/llvm-project/commit/2652243f19314cf0a7583402d37d28dbae9ec1e6.diff

LOG: [NFC][tsan] Move SkipInternalFrames into sanitizer_common (#77146)

Added: 
    

Modified: 
    compiler-rt/lib/sanitizer_common/sanitizer_common.h
    compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp
    compiler-rt/lib/tsan/rtl/tsan_report.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/sanitizer_common/sanitizer_common.h b/compiler-rt/lib/sanitizer_common/sanitizer_common.h
index 6b327a4aa16f0b..7d9d61de8b6175 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_common.h
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_common.h
@@ -32,6 +32,7 @@ struct AddressInfo;
 struct BufferedStackTrace;
 struct SignalContext;
 struct StackTrace;
+struct SymbolizedStack;
 
 // Constants.
 const uptr kWordSize = SANITIZER_WORDSIZE / 8;
@@ -393,6 +394,8 @@ void ReportErrorSummary(const char *error_type, const AddressInfo &info,
 // Same as above, but obtains AddressInfo by symbolizing top stack trace frame.
 void ReportErrorSummary(const char *error_type, const StackTrace *trace,
                         const char *alt_tool_name = nullptr);
+// Skips frames which we consider internal and not usefull to the users.
+SymbolizedStack *SkipInternalFrames(SymbolizedStack *frames);
 
 void ReportMmapWriteExec(int prot, int mflags);
 

diff  --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp
index 3e4417ae3f57e5..ec60dd3e0d6620 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp
@@ -28,6 +28,26 @@
 namespace __sanitizer {
 
 #if !SANITIZER_GO
+
+static bool FrameIsInternal(const SymbolizedStack *frame) {
+  if (!frame)
+    return true;
+  const char *file = frame->info.file;
+  const char *module = frame->info.module;
+  if (file && (internal_strstr(file, "/compiler-rt/lib/")))
+    return true;
+  if (module && (internal_strstr(module, "libclang_rt.")))
+    return true;
+  return false;
+}
+
+SymbolizedStack *SkipInternalFrames(SymbolizedStack *frames) {
+  for (SymbolizedStack *f = frames; f; f = f->next)
+    if (!FrameIsInternal(f))
+      return f;
+  return nullptr;
+}
+
 void ReportErrorSummary(const char *error_type, const AddressInfo &info,
                         const char *alt_tool_name) {
   if (!common_flags()->print_summary) return;

diff  --git a/compiler-rt/lib/tsan/rtl/tsan_report.cpp b/compiler-rt/lib/tsan/rtl/tsan_report.cpp
index c6b764bd891752..b1cee7ac8cbf83 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_report.cpp
+++ b/compiler-rt/lib/tsan/rtl/tsan_report.cpp
@@ -273,22 +273,9 @@ static ReportStack *ChooseSummaryStack(const ReportDesc *rep) {
   return 0;
 }
 
-static bool FrameIsInternal(const SymbolizedStack *frame) {
-  if (!frame)
-    return true;
-  const char *file = frame->info.file;
-  const char *module = frame->info.module;
-  if (file && (internal_strstr(file, "/compiler-rt/lib/")))
-    return true;
-  if (module && (internal_strstr(module, "libclang_rt.")))
-    return true;
-  return false;
-}
-
 static SymbolizedStack *SkipTsanInternalFrames(SymbolizedStack *frames) {
-  for (SymbolizedStack *f = frames; f; f = f->next)
-    if (!FrameIsInternal(f))
-      return f;
+  if (SymbolizedStack *f = SkipInternalFrames(frames))
+    return f;
   return frames;  // Fallback to the top frame.
 }
 


        


More information about the llvm-commits mailing list