@@ -23,6 +23,16 @@ static llvm::symbolize::LLVMSymbolizer *getDefaultSymbolizer() {
23
23
return DefaultSymbolizer;
24
24
}
25
25
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
+
26
36
namespace __sanitizer {
27
37
int internal_snprintf (char *buffer, unsigned long length, const char *format,
28
38
...);
@@ -38,19 +48,24 @@ bool __sanitizer_symbolize_code(const char *ModuleName, uint64_t ModuleOffset,
38
48
std::string Result;
39
49
{
40
50
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
+
42
56
// TODO: it is neccessary to set proper SectionIndex here.
43
57
// object::SectionedAddress::UndefSection works for only absolute addresses.
44
58
if (SymbolizeInlineFrames) {
45
59
auto ResOrErr = getDefaultSymbolizer ()->symbolizeInlinedCode (
46
60
ModuleName,
47
61
{ModuleOffset, llvm::object::SectionedAddress::UndefSection});
48
- Printer << (ResOrErr ? ResOrErr.get () : llvm::DIInliningInfo ());
62
+ Printer->print (Request,
63
+ ResOrErr ? ResOrErr.get () : llvm::DIInliningInfo ());
49
64
} else {
50
65
auto ResOrErr = getDefaultSymbolizer ()->symbolizeCode (
51
66
ModuleName,
52
67
{ModuleOffset, llvm::object::SectionedAddress::UndefSection});
53
- Printer << ( ResOrErr ? ResOrErr.get () : llvm::DILineInfo ());
68
+ Printer-> print (Request, ResOrErr ? ResOrErr.get () : llvm::DILineInfo ());
54
69
}
55
70
}
56
71
return __sanitizer::internal_snprintf (Buffer, MaxLength, " %s" ,
@@ -61,14 +76,18 @@ bool __sanitizer_symbolize_data(const char *ModuleName, uint64_t ModuleOffset,
61
76
char *Buffer, int MaxLength) {
62
77
std::string Result;
63
78
{
79
+ llvm::symbolize::PrinterConfig Config = getDefaultPrinterConfig ();
64
80
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
+
66
85
// TODO: it is neccessary to set proper SectionIndex here.
67
86
// object::SectionedAddress::UndefSection works for only absolute addresses.
68
87
auto ResOrErr = getDefaultSymbolizer ()->symbolizeData (
69
88
ModuleName,
70
89
{ModuleOffset, llvm::object::SectionedAddress::UndefSection});
71
- Printer << ( ResOrErr ? ResOrErr.get () : llvm::DIGlobal ());
90
+ Printer-> print (Request, ResOrErr ? ResOrErr.get () : llvm::DIGlobal ());
72
91
}
73
92
return __sanitizer::internal_snprintf (Buffer, MaxLength, " %s" ,
74
93
Result.c_str ()) < MaxLength;
0 commit comments