forked from OSchip/llvm-project
[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
This commit is contained in:
parent
8017237277
commit
93c6a668fc
|
|
@ -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_;
|
||||
|
|
|
|||
|
|
@ -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) {}
|
||||
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<SymbolizerTool> list;
|
||||
list.clear();
|
||||
ChooseSymbolizerTools(&list, &symbolizer_allocator_);
|
||||
return new(symbolizer_allocator_) POSIXSymbolizer(list);
|
||||
return new(symbolizer_allocator_) Symbolizer(list);
|
||||
}
|
||||
|
||||
} // namespace __sanitizer
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue