From 93c6a668fc17c116cb1ae184d9969b15b5fa8f65 Mon Sep 17 00:00:00 2001 From: Kuba Brecka Date: Sat, 11 Apr 2015 17:16:25 +0000 Subject: [PATCH] [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 --- .../sanitizer_common/sanitizer_symbolizer.h | 7 +++--- .../sanitizer_symbolizer_posix_libcdep.cc | 23 +++++++------------ .../sanitizer_symbolizer_win.cc | 17 ++++++-------- 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 11cce9dd21ff..92332230f80a 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::Iterator Iterator; IntrusiveList tools_; - protected: explicit Symbolizer(IntrusiveList 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 39e8f84ff71e..6e714c7c67cd 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 tools) - : Symbolizer(tools) {} +const char *Symbolizer::PlatformDemangle(const char *name) { + return DemangleCXXABI(name); +} - private: - const char *PlatformDemangle(const char *name) override { - 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 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 5cf1200754b2..31f374687e96 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 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 list; list.clear(); list.push_back(new(symbolizer_allocator_) WinSymbolizerTool()); - return new(symbolizer_allocator_) WinSymbolizer(list); + return new(symbolizer_allocator_) Symbolizer(list); } } // namespace __sanitizer