diff options
| author | Kuba Brecka <kuba.brecka@gmail.com> | 2015-04-11 17:16:25 +0000 |
|---|---|---|
| committer | Kuba Brecka <kuba.brecka@gmail.com> | 2015-04-11 17:16:25 +0000 |
| commit | 93c6a668fc17c116cb1ae184d9969b15b5fa8f65 (patch) | |
| tree | cc786daf0aa1a38211c78b47ea883ac4965b211e /compiler-rt/lib/sanitizer_common | |
| parent | 80172372771ee46373965e5ea45240375b46154d (diff) | |
| download | bcm5719-llvm-93c6a668fc17c116cb1ae184d9969b15b5fa8f65.tar.gz bcm5719-llvm-93c6a668fc17c116cb1ae184d9969b15b5fa8f65.zip | |
[Sanitizer] Merge POSIXSymbolizer and WinSymbolizer
The two subclasses of Symbolizer now only define two virtual functions, PlatformDemangle and PlatformPrepareForSandboxing. Let's make these non-virtual and directly defined by individual platforms.
Reviewed at http://reviews.llvm.org/D8912
llvm-svn: 234690
Diffstat (limited to 'compiler-rt/lib/sanitizer_common')
3 files changed, 18 insertions, 29 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h index 11cce9dd21f..92332230f80 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h @@ -75,7 +75,7 @@ struct DataInfo { class SymbolizerTool; -class Symbolizer { +class Symbolizer final { public: /// Initialize and return platform-specific implementation of symbolizer /// (if it wasn't already initialized). @@ -146,8 +146,8 @@ class Symbolizer { bool modules_fresh_; // Platform-specific default demangler, must not return nullptr. - virtual const char *PlatformDemangle(const char *name) { UNIMPLEMENTED(); } - virtual void PlatformPrepareForSandboxing() { UNIMPLEMENTED(); } + const char *PlatformDemangle(const char *name); + void PlatformPrepareForSandboxing(); static Symbolizer *symbolizer_; static StaticSpinMutex init_mu_; @@ -160,7 +160,6 @@ class Symbolizer { typedef IntrusiveList<SymbolizerTool>::Iterator Iterator; IntrusiveList<SymbolizerTool> tools_; - protected: explicit Symbolizer(IntrusiveList<SymbolizerTool> tools); static LowLevelAllocator symbolizer_allocator_; diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc index 39e8f84ff71..6e714c7c67c 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc @@ -349,23 +349,16 @@ class InternalSymbolizer : public SymbolizerTool { #endif // SANITIZER_SUPPORTS_WEAK_HOOKS -class POSIXSymbolizer : public Symbolizer { - public: - explicit POSIXSymbolizer(IntrusiveList<SymbolizerTool> tools) - : Symbolizer(tools) {} - - private: - const char *PlatformDemangle(const char *name) override { - return DemangleCXXABI(name); - } +const char *Symbolizer::PlatformDemangle(const char *name) { + return DemangleCXXABI(name); +} - void PlatformPrepareForSandboxing() override { +void Symbolizer::PlatformPrepareForSandboxing() { #if SANITIZER_LINUX && !SANITIZER_ANDROID - // Cache /proc/self/exe on Linux. - CacheBinaryName(); + // Cache /proc/self/exe on Linux. + CacheBinaryName(); #endif - } -}; +} static SymbolizerTool *ChooseExternalSymbolizer(LowLevelAllocator *allocator) { const char *path = common_flags()->external_symbolizer_path; @@ -448,7 +441,7 @@ Symbolizer *Symbolizer::PlatformInit() { IntrusiveList<SymbolizerTool> list; list.clear(); ChooseSymbolizerTools(&list, &symbolizer_allocator_); - return new(symbolizer_allocator_) POSIXSymbolizer(list); + return new(symbolizer_allocator_) Symbolizer(list); } } // namespace __sanitizer diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.cc b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.cc index 5cf1200754b..31f374687e9 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.cc @@ -129,22 +129,19 @@ const char *WinSymbolizerTool::Demangle(const char *name) { return name; } -// TODO(kuba.brecka): To be merged with POSIXSymbolizer. -class WinSymbolizer : public Symbolizer { - public: - explicit WinSymbolizer(IntrusiveList<SymbolizerTool> tools) - : Symbolizer(tools) {} +const char *Symbolizer::PlatformDemangle(const char *name) { + return name; +} - private: - const char *PlatformDemangle(const char *name) override { return name; } - void PlatformPrepareForSandboxing() override { } -}; +void Symbolizer::PlatformPrepareForSandboxing() { + // Do nothing. +} Symbolizer *Symbolizer::PlatformInit() { IntrusiveList<SymbolizerTool> list; list.clear(); list.push_back(new(symbolizer_allocator_) WinSymbolizerTool()); - return new(symbolizer_allocator_) WinSymbolizer(list); + return new(symbolizer_allocator_) Symbolizer(list); } } // namespace __sanitizer |

