diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2013-03-19 10:23:17 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2013-03-19 10:23:17 +0000 |
commit | 7fac284c9d3aab4c28b422315731b12a5af9fc4e (patch) | |
tree | 7b8ccda1b2c88ecfa42719dacf6c8452416042c6 /lib/sanitizer_common/sanitizer_symbolizer.cc | |
parent | b186c1905d471243cf2981ca754397bc16976392 (diff) |
tsan: symbolizer "flush caches" functinality
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@177388 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_symbolizer.cc')
-rw-r--r-- | lib/sanitizer_common/sanitizer_symbolizer.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/sanitizer_common/sanitizer_symbolizer.cc b/lib/sanitizer_common/sanitizer_symbolizer.cc index 5609e91cd..ea772b49c 100644 --- a/lib/sanitizer_common/sanitizer_symbolizer.cc +++ b/lib/sanitizer_common/sanitizer_symbolizer.cc @@ -128,6 +128,9 @@ class ExternalSymbolizer { return StartSymbolizerSubprocess(path_, &input_fd_, &output_fd_); } + void Flush() { + } + private: bool readFromSymbolizer(char *buffer, uptr max_length) { if (max_length == 0) @@ -184,11 +187,14 @@ bool __sanitizer_symbolize_code(const char *ModuleName, u64 ModuleOffset, SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE bool __sanitizer_symbolize_data(const char *ModuleName, u64 ModuleOffset, char *Buffer, int MaxLength); +SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE +void __sanitizer_symbolize_flush(); } // extern "C" class InternalSymbolizer { public: typedef bool (*SanitizerSymbolizeFn)(const char*, u64, char*, int); + static InternalSymbolizer *get() { if (__sanitizer_symbolize_code != 0 && __sanitizer_symbolize_data != 0) { @@ -197,6 +203,7 @@ class InternalSymbolizer { } return 0; } + char *SendCommand(bool is_data, const char *module_name, uptr module_offset) { SanitizerSymbolizeFn symbolize_fn = is_data ? __sanitizer_symbolize_data : __sanitizer_symbolize_code; @@ -205,6 +212,11 @@ class InternalSymbolizer { return 0; } + void Flush() { + if (__sanitizer_symbolize_flush) + __sanitizer_symbolize_flush(); + } + private: InternalSymbolizer() { } @@ -321,6 +333,13 @@ class Symbolizer { return internal_symbolizer_ || external_symbolizer_; } + void Flush() { + if (internal_symbolizer_) + internal_symbolizer_->Flush(); + if (external_symbolizer_) + external_symbolizer_->Flush(); + } + private: char *SendCommand(bool is_data, const char *module_name, uptr module_offset) { // First, try to use internal symbolizer. @@ -408,4 +427,8 @@ bool IsSymbolizerAvailable() { return symbolizer.IsSymbolizerAvailable(); } +void FlushSymbolizer() { + symbolizer.Flush(); +} + } // namespace __sanitizer |