Skip to content

Commit 09373ff

Browse files
authored
Merge pull request #2237 from yingcong-wu/yc/1024-devasan-bug-symbolizer-destruct-too-early
[DeviceAsan] Symbolizer may destruct before SanitizerInterceptor
2 parents 19913ae + 44bd2d4 commit 09373ff

File tree

1 file changed

+7
-17
lines changed

1 file changed

+7
-17
lines changed

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

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,7 @@
1010
#include "llvm/DebugInfo/Symbolize/DIPrinter.h"
1111
#include "llvm/DebugInfo/Symbolize/Symbolize.h"
1212

13-
namespace ur_sanitizer_layer {
14-
15-
llvm::symbolize::LLVMSymbolizer *GetSymbolizer() {
16-
static llvm::symbolize::LLVMSymbolizer Symbolizer;
17-
return &Symbolizer;
18-
}
19-
20-
llvm::symbolize::PrinterConfig GetPrinterConfig() {
13+
static llvm::symbolize::PrinterConfig GetPrinterConfig() {
2114
llvm::symbolize::PrinterConfig Config;
2215
Config.Pretty = false;
2316
Config.PrintAddress = false;
@@ -27,35 +20,32 @@ llvm::symbolize::PrinterConfig GetPrinterConfig() {
2720
return Config;
2821
}
2922

30-
} // namespace ur_sanitizer_layer
31-
3223
extern "C" {
3324

3425
void SymbolizeCode(const char *ModuleName, uint64_t ModuleOffset,
3526
char *ResultString, size_t ResultSize, size_t *RetSize) {
3627
std::string Result;
3728
llvm::raw_string_ostream OS(Result);
3829
llvm::symbolize::Request Request{ModuleName, ModuleOffset};
39-
llvm::symbolize::PrinterConfig Config =
40-
ur_sanitizer_layer::GetPrinterConfig();
30+
llvm::symbolize::PrinterConfig Config = GetPrinterConfig();
4131
llvm::symbolize::ErrorHandler EH = [&](const llvm::ErrorInfoBase &ErrorInfo,
4232
llvm::StringRef ErrorBanner) {
4333
OS << ErrorBanner;
4434
ErrorInfo.log(OS);
4535
OS << '\n';
4636
};
47-
auto Printer =
48-
std::make_unique<llvm::symbolize::LLVMPrinter>(OS, EH, Config);
37+
llvm::symbolize::LLVMSymbolizer Symbolizer;
38+
llvm::symbolize::LLVMPrinter Printer(OS, EH, Config);
4939

50-
auto ResOrErr = ur_sanitizer_layer::GetSymbolizer()->symbolizeInlinedCode(
40+
auto ResOrErr = Symbolizer.symbolizeInlinedCode(
5141
ModuleName,
5242
{ModuleOffset, llvm::object::SectionedAddress::UndefSection});
5343

5444
if (!ResOrErr) {
5545
return;
5646
}
57-
Printer->print(Request, *ResOrErr);
58-
ur_sanitizer_layer::GetSymbolizer()->pruneCache();
47+
Printer.print(Request, *ResOrErr);
48+
Symbolizer.pruneCache();
5949
if (RetSize) {
6050
*RetSize = Result.size() + 1;
6151
}

0 commit comments

Comments
 (0)