Skip to content

Commit 7ba4447

Browse files
committed
change method
1 parent 4af5f3c commit 7ba4447

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

source/loader/layers/sanitizer/linux/symbolizer.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,18 @@
1212

1313
namespace ur_sanitizer_layer {
1414

15-
static auto *Symbolizer = new llvm::symbolize::LLVMSymbolizer{};
15+
static llvm::symbolize::LLVMSymbolizer *Symbolizer = nullptr;
1616

17-
// Let's destruct the symbolizer at the very end of exit process, at least
18-
// should be after the destructors of the SanitizerLayer since we may print
17+
llvm::symbolize::LLVMSymbolizer *GetSymbolizer() {
18+
static auto *Instance = []() {
19+
Symbolizer = new llvm::symbolize::LLVMSymbolizer{};
20+
return Symbolizer;
21+
}();
22+
return Instance;
23+
}
24+
25+
// Let's destruct the symbolizer at the very end of exit process, at least
26+
// should be after the destructors of the SanitizerLayer since we may print
1927
// some symbolized information in the SanitizerLayer destructor.
2028
__attribute__((destructor(101))) void DestructSymbolizer() {
2129
delete Symbolizer;
@@ -51,15 +59,15 @@ void SymbolizeCode(const char *ModuleName, uint64_t ModuleOffset,
5159
auto Printer =
5260
std::make_unique<llvm::symbolize::LLVMPrinter>(OS, EH, Config);
5361

54-
auto ResOrErr = ur_sanitizer_layer::Symbolizer->symbolizeInlinedCode(
62+
auto ResOrErr = ur_sanitizer_layer::GetSymbolizer()->symbolizeInlinedCode(
5563
ModuleName,
5664
{ModuleOffset, llvm::object::SectionedAddress::UndefSection});
5765

5866
if (!ResOrErr) {
5967
return;
6068
}
6169
Printer->print(Request, *ResOrErr);
62-
ur_sanitizer_layer::Symbolizer->pruneCache();
70+
ur_sanitizer_layer::GetSymbolizer()->pruneCache();
6371
if (RetSize) {
6472
*RetSize = Result.size() + 1;
6573
}

0 commit comments

Comments
 (0)