@@ -41,6 +41,16 @@ static llvm::symbolize::PrinterConfig getDefaultPrinterConfig() {
41
41
return Config;
42
42
}
43
43
44
+ static llvm::symbolize::ErrorHandler symbolize_error_handler (
45
+ llvm::raw_string_ostream &OS) {
46
+ return
47
+ [&](const llvm::ErrorInfoBase &ErrorInfo, llvm::StringRef ErrorBanner) {
48
+ OS << ErrorBanner;
49
+ ErrorInfo.log (OS);
50
+ OS << ' \n ' ;
51
+ };
52
+ }
53
+
44
54
namespace __sanitizer {
45
55
int internal_snprintf (char *buffer, uintptr_t length, const char *format,
46
56
...);
@@ -57,8 +67,8 @@ bool __sanitizer_symbolize_code(const char *ModuleName, uint64_t ModuleOffset,
57
67
llvm::raw_string_ostream OS (Result);
58
68
llvm::symbolize::PrinterConfig Config = getDefaultPrinterConfig ();
59
69
llvm::symbolize::Request Request{ModuleName, ModuleOffset};
60
- auto Printer =
61
- std::make_unique<llvm::symbolize::LLVMPrinter>( OS, OS , Config);
70
+ auto Printer = std::make_unique<llvm::symbolize::LLVMPrinter>(
71
+ OS, symbolize_error_handler (OS) , Config);
62
72
63
73
// TODO: it is neccessary to set proper SectionIndex here.
64
74
// object::SectionedAddress::UndefSection works for only absolute addresses.
@@ -86,8 +96,8 @@ bool __sanitizer_symbolize_data(const char *ModuleName, uint64_t ModuleOffset,
86
96
llvm::symbolize::PrinterConfig Config = getDefaultPrinterConfig ();
87
97
llvm::raw_string_ostream OS (Result);
88
98
llvm::symbolize::Request Request{ModuleName, ModuleOffset};
89
- auto Printer =
90
- std::make_unique<llvm::symbolize::LLVMPrinter>( OS, OS , Config);
99
+ auto Printer = std::make_unique<llvm::symbolize::LLVMPrinter>(
100
+ OS, symbolize_error_handler (OS) , Config);
91
101
92
102
// TODO: it is neccessary to set proper SectionIndex here.
93
103
// object::SectionedAddress::UndefSection works for only absolute addresses.
0 commit comments