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 SymbolizerTool;
|
||||||
|
|
||||||
class Symbolizer {
|
class Symbolizer final {
|
||||||
public:
|
public:
|
||||||
/// Initialize and return platform-specific implementation of symbolizer
|
/// Initialize and return platform-specific implementation of symbolizer
|
||||||
/// (if it wasn't already initialized).
|
/// (if it wasn't already initialized).
|
||||||
|
|
@ -146,8 +146,8 @@ class Symbolizer {
|
||||||
bool modules_fresh_;
|
bool modules_fresh_;
|
||||||
|
|
||||||
// Platform-specific default demangler, must not return nullptr.
|
// Platform-specific default demangler, must not return nullptr.
|
||||||
virtual const char *PlatformDemangle(const char *name) { UNIMPLEMENTED(); }
|
const char *PlatformDemangle(const char *name);
|
||||||
virtual void PlatformPrepareForSandboxing() { UNIMPLEMENTED(); }
|
void PlatformPrepareForSandboxing();
|
||||||
|
|
||||||
static Symbolizer *symbolizer_;
|
static Symbolizer *symbolizer_;
|
||||||
static StaticSpinMutex init_mu_;
|
static StaticSpinMutex init_mu_;
|
||||||
|
|
@ -160,7 +160,6 @@ class Symbolizer {
|
||||||
typedef IntrusiveList<SymbolizerTool>::Iterator Iterator;
|
typedef IntrusiveList<SymbolizerTool>::Iterator Iterator;
|
||||||
IntrusiveList<SymbolizerTool> tools_;
|
IntrusiveList<SymbolizerTool> tools_;
|
||||||
|
|
||||||
protected:
|
|
||||||
explicit Symbolizer(IntrusiveList<SymbolizerTool> tools);
|
explicit Symbolizer(IntrusiveList<SymbolizerTool> tools);
|
||||||
|
|
||||||
static LowLevelAllocator symbolizer_allocator_;
|
static LowLevelAllocator symbolizer_allocator_;
|
||||||
|
|
|
||||||
|
|
@ -349,23 +349,16 @@ class InternalSymbolizer : public SymbolizerTool {
|
||||||
|
|
||||||
#endif // SANITIZER_SUPPORTS_WEAK_HOOKS
|
#endif // SANITIZER_SUPPORTS_WEAK_HOOKS
|
||||||
|
|
||||||
class POSIXSymbolizer : public Symbolizer {
|
const char *Symbolizer::PlatformDemangle(const char *name) {
|
||||||
public:
|
return DemangleCXXABI(name);
|
||||||
explicit POSIXSymbolizer(IntrusiveList<SymbolizerTool> tools)
|
}
|
||||||
: Symbolizer(tools) {}
|
|
||||||
|
|
||||||
private:
|
void Symbolizer::PlatformPrepareForSandboxing() {
|
||||||
const char *PlatformDemangle(const char *name) override {
|
|
||||||
return DemangleCXXABI(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlatformPrepareForSandboxing() override {
|
|
||||||
#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
||||||
// Cache /proc/self/exe on Linux.
|
// Cache /proc/self/exe on Linux.
|
||||||
CacheBinaryName();
|
CacheBinaryName();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
static SymbolizerTool *ChooseExternalSymbolizer(LowLevelAllocator *allocator) {
|
static SymbolizerTool *ChooseExternalSymbolizer(LowLevelAllocator *allocator) {
|
||||||
const char *path = common_flags()->external_symbolizer_path;
|
const char *path = common_flags()->external_symbolizer_path;
|
||||||
|
|
@ -448,7 +441,7 @@ Symbolizer *Symbolizer::PlatformInit() {
|
||||||
IntrusiveList<SymbolizerTool> list;
|
IntrusiveList<SymbolizerTool> list;
|
||||||
list.clear();
|
list.clear();
|
||||||
ChooseSymbolizerTools(&list, &symbolizer_allocator_);
|
ChooseSymbolizerTools(&list, &symbolizer_allocator_);
|
||||||
return new(symbolizer_allocator_) POSIXSymbolizer(list);
|
return new(symbolizer_allocator_) Symbolizer(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace __sanitizer
|
} // namespace __sanitizer
|
||||||
|
|
|
||||||
|
|
@ -129,22 +129,19 @@ const char *WinSymbolizerTool::Demangle(const char *name) {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(kuba.brecka): To be merged with POSIXSymbolizer.
|
const char *Symbolizer::PlatformDemangle(const char *name) {
|
||||||
class WinSymbolizer : public Symbolizer {
|
return name;
|
||||||
public:
|
}
|
||||||
explicit WinSymbolizer(IntrusiveList<SymbolizerTool> tools)
|
|
||||||
: Symbolizer(tools) {}
|
|
||||||
|
|
||||||
private:
|
void Symbolizer::PlatformPrepareForSandboxing() {
|
||||||
const char *PlatformDemangle(const char *name) override { return name; }
|
// Do nothing.
|
||||||
void PlatformPrepareForSandboxing() override { }
|
}
|
||||||
};
|
|
||||||
|
|
||||||
Symbolizer *Symbolizer::PlatformInit() {
|
Symbolizer *Symbolizer::PlatformInit() {
|
||||||
IntrusiveList<SymbolizerTool> list;
|
IntrusiveList<SymbolizerTool> list;
|
||||||
list.clear();
|
list.clear();
|
||||||
list.push_back(new(symbolizer_allocator_) WinSymbolizerTool());
|
list.push_back(new(symbolizer_allocator_) WinSymbolizerTool());
|
||||||
return new(symbolizer_allocator_) WinSymbolizer(list);
|
return new(symbolizer_allocator_) Symbolizer(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace __sanitizer
|
} // namespace __sanitizer
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue