[compiler-rt] 8f53100 - [sanitizer] Backup errno calling symbolizer

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 15 13:43:11 PDT 2023


Author: Vitaly Buka
Date: 2023-08-15T13:43:00-07:00
New Revision: 8f531007d8ff55143cc5f180c53b4b7c0265fac3

URL: https://github.com/llvm/llvm-project/commit/8f531007d8ff55143cc5f180c53b4b7c0265fac3
DIFF: https://github.com/llvm/llvm-project/commit/8f531007d8ff55143cc5f180c53b4b7c0265fac3.diff

LOG: [sanitizer] Backup errno calling symbolizer

ScopedThread::Impl::HandleEvent checks that errno is unchanged.
As is it's reproducible only with internal symbolizer, but I see
no disadvantages in doing that for all symbolizers.

Reviewed By: kstoimenov

Differential Revision: https://reviews.llvm.org/D157945

Added: 
    

Modified: 
    compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.cpp
    compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.cpp
index d3cffaa6eeff66..519f768f896947 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.cpp
@@ -10,6 +10,8 @@
 // run-time libraries.
 //===----------------------------------------------------------------------===//
 
+#include <errno.h>
+
 #include "sanitizer_allocator_internal.h"
 #include "sanitizer_common.h"
 #include "sanitizer_internal_defs.h"
@@ -128,7 +130,7 @@ Symbolizer::Symbolizer(IntrusiveList<SymbolizerTool> tools)
       start_hook_(0), end_hook_(0) {}
 
 Symbolizer::SymbolizerScope::SymbolizerScope(const Symbolizer *sym)
-    : sym_(sym) {
+    : sym_(sym), errno_(errno) {
   if (sym_->start_hook_)
     sym_->start_hook_();
 }
@@ -136,6 +138,7 @@ Symbolizer::SymbolizerScope::SymbolizerScope(const Symbolizer *sym)
 Symbolizer::SymbolizerScope::~SymbolizerScope() {
   if (sym_->end_hook_)
     sym_->end_hook_();
+  errno = errno_;
 }
 
 }  // namespace __sanitizer

diff  --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h
index bad4761e345fec..df24aaca3abf64 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h
@@ -212,6 +212,7 @@ class Symbolizer final {
     ~SymbolizerScope();
    private:
     const Symbolizer *sym_;
+    int errno_;  // Backup errno in case symbolizer change the value.
   };
 };
 


        


More information about the llvm-commits mailing list