[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