Skip to content

Commit f6ee97d

Browse files
committed
[rt] Update DIPrinter usage in 'sanitizer_symbolize.cpp`.
These changes were required after llvm@5f57793 Differential Revision: https://reviews.llvm.org/D99937
1 parent 34f8a7f commit f6ee97d

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

compiler-rt/lib/sanitizer_common/symbolizer/sanitizer_symbolize.cpp

+24-5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ static llvm::symbolize::LLVMSymbolizer *getDefaultSymbolizer() {
2323
return DefaultSymbolizer;
2424
}
2525

26+
static llvm::symbolize::PrinterConfig getDefaultPrinterConfig() {
27+
llvm::symbolize::PrinterConfig Config;
28+
Config.Pretty = false;
29+
Config.Verbose = false;
30+
Config.PrintFunctions = true;
31+
Config.PrintAddress = true;
32+
Config.SourceContextLines = 0;
33+
return Config;
34+
}
35+
2636
namespace __sanitizer {
2737
int internal_snprintf(char *buffer, unsigned long length, const char *format,
2838
...);
@@ -38,19 +48,24 @@ bool __sanitizer_symbolize_code(const char *ModuleName, uint64_t ModuleOffset,
3848
std::string Result;
3949
{
4050
llvm::raw_string_ostream OS(Result);
41-
llvm::symbolize::DIPrinter Printer(OS);
51+
llvm::symbolize::PrinterConfig Config = getDefaultPrinterConfig();
52+
llvm::symbolize::Request Request{ModuleName, ModuleOffset};
53+
auto Printer =
54+
std::make_unique<llvm::symbolize::LLVMPrinter>(OS, OS, Config);
55+
4256
// TODO: it is neccessary to set proper SectionIndex here.
4357
// object::SectionedAddress::UndefSection works for only absolute addresses.
4458
if (SymbolizeInlineFrames) {
4559
auto ResOrErr = getDefaultSymbolizer()->symbolizeInlinedCode(
4660
ModuleName,
4761
{ModuleOffset, llvm::object::SectionedAddress::UndefSection});
48-
Printer << (ResOrErr ? ResOrErr.get() : llvm::DIInliningInfo());
62+
Printer->print(Request,
63+
ResOrErr ? ResOrErr.get() : llvm::DIInliningInfo());
4964
} else {
5065
auto ResOrErr = getDefaultSymbolizer()->symbolizeCode(
5166
ModuleName,
5267
{ModuleOffset, llvm::object::SectionedAddress::UndefSection});
53-
Printer << (ResOrErr ? ResOrErr.get() : llvm::DILineInfo());
68+
Printer->print(Request, ResOrErr ? ResOrErr.get() : llvm::DILineInfo());
5469
}
5570
}
5671
return __sanitizer::internal_snprintf(Buffer, MaxLength, "%s",
@@ -61,14 +76,18 @@ bool __sanitizer_symbolize_data(const char *ModuleName, uint64_t ModuleOffset,
6176
char *Buffer, int MaxLength) {
6277
std::string Result;
6378
{
79+
llvm::symbolize::PrinterConfig Config = getDefaultPrinterConfig();
6480
llvm::raw_string_ostream OS(Result);
65-
llvm::symbolize::DIPrinter Printer(OS);
81+
llvm::symbolize::Request Request{ModuleName, ModuleOffset};
82+
auto Printer =
83+
std::make_unique<llvm::symbolize::LLVMPrinter>(OS, OS, Config);
84+
6685
// TODO: it is neccessary to set proper SectionIndex here.
6786
// object::SectionedAddress::UndefSection works for only absolute addresses.
6887
auto ResOrErr = getDefaultSymbolizer()->symbolizeData(
6988
ModuleName,
7089
{ModuleOffset, llvm::object::SectionedAddress::UndefSection});
71-
Printer << (ResOrErr ? ResOrErr.get() : llvm::DIGlobal());
90+
Printer->print(Request, ResOrErr ? ResOrErr.get() : llvm::DIGlobal());
7291
}
7392
return __sanitizer::internal_snprintf(Buffer, MaxLength, "%s",
7493
Result.c_str()) < MaxLength;

0 commit comments

Comments
 (0)