[compiler-rt] f6ee97d - [rt] Update DIPrinter usage in 'sanitizer_symbolize.cpp`.
Alexander Belyaev via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 6 03:32:07 PDT 2021
Author: Alexander Belyaev
Date: 2021-04-06T12:31:47+02:00
New Revision: f6ee97d8271e1dfd9b6572222fefe8f40433952e
URL: https://github.com/llvm/llvm-project/commit/f6ee97d8271e1dfd9b6572222fefe8f40433952e
DIFF: https://github.com/llvm/llvm-project/commit/f6ee97d8271e1dfd9b6572222fefe8f40433952e.diff
LOG: [rt] Update DIPrinter usage in 'sanitizer_symbolize.cpp`.
These changes were required after
https://github.com/llvm/llvm-project/commit/5f57793c4fe47aa3486a755768b43189351cbd15
Differential Revision: https://reviews.llvm.org/D99937
Added:
Modified:
compiler-rt/lib/sanitizer_common/symbolizer/sanitizer_symbolize.cpp
Removed:
################################################################################
diff --git a/compiler-rt/lib/sanitizer_common/symbolizer/sanitizer_symbolize.cpp b/compiler-rt/lib/sanitizer_common/symbolizer/sanitizer_symbolize.cpp
index 4902be0bf51e..cd257c7eaebf 100644
--- a/compiler-rt/lib/sanitizer_common/symbolizer/sanitizer_symbolize.cpp
+++ b/compiler-rt/lib/sanitizer_common/symbolizer/sanitizer_symbolize.cpp
@@ -23,6 +23,16 @@ static llvm::symbolize::LLVMSymbolizer *getDefaultSymbolizer() {
return DefaultSymbolizer;
}
+static llvm::symbolize::PrinterConfig getDefaultPrinterConfig() {
+ llvm::symbolize::PrinterConfig Config;
+ Config.Pretty = false;
+ Config.Verbose = false;
+ Config.PrintFunctions = true;
+ Config.PrintAddress = true;
+ Config.SourceContextLines = 0;
+ return Config;
+}
+
namespace __sanitizer {
int internal_snprintf(char *buffer, unsigned long length, const char *format,
...);
@@ -38,19 +48,24 @@ bool __sanitizer_symbolize_code(const char *ModuleName, uint64_t ModuleOffset,
std::string Result;
{
llvm::raw_string_ostream OS(Result);
- llvm::symbolize::DIPrinter Printer(OS);
+ llvm::symbolize::PrinterConfig Config = getDefaultPrinterConfig();
+ llvm::symbolize::Request Request{ModuleName, ModuleOffset};
+ auto Printer =
+ std::make_unique<llvm::symbolize::LLVMPrinter>(OS, OS, Config);
+
// TODO: it is neccessary to set proper SectionIndex here.
// object::SectionedAddress::UndefSection works for only absolute addresses.
if (SymbolizeInlineFrames) {
auto ResOrErr = getDefaultSymbolizer()->symbolizeInlinedCode(
ModuleName,
{ModuleOffset, llvm::object::SectionedAddress::UndefSection});
- Printer << (ResOrErr ? ResOrErr.get() : llvm::DIInliningInfo());
+ Printer->print(Request,
+ ResOrErr ? ResOrErr.get() : llvm::DIInliningInfo());
} else {
auto ResOrErr = getDefaultSymbolizer()->symbolizeCode(
ModuleName,
{ModuleOffset, llvm::object::SectionedAddress::UndefSection});
- Printer << (ResOrErr ? ResOrErr.get() : llvm::DILineInfo());
+ Printer->print(Request, ResOrErr ? ResOrErr.get() : llvm::DILineInfo());
}
}
return __sanitizer::internal_snprintf(Buffer, MaxLength, "%s",
@@ -61,14 +76,18 @@ bool __sanitizer_symbolize_data(const char *ModuleName, uint64_t ModuleOffset,
char *Buffer, int MaxLength) {
std::string Result;
{
+ llvm::symbolize::PrinterConfig Config = getDefaultPrinterConfig();
llvm::raw_string_ostream OS(Result);
- llvm::symbolize::DIPrinter Printer(OS);
+ llvm::symbolize::Request Request{ModuleName, ModuleOffset};
+ auto Printer =
+ std::make_unique<llvm::symbolize::LLVMPrinter>(OS, OS, Config);
+
// TODO: it is neccessary to set proper SectionIndex here.
// object::SectionedAddress::UndefSection works for only absolute addresses.
auto ResOrErr = getDefaultSymbolizer()->symbolizeData(
ModuleName,
{ModuleOffset, llvm::object::SectionedAddress::UndefSection});
- Printer << (ResOrErr ? ResOrErr.get() : llvm::DIGlobal());
+ Printer->print(Request, ResOrErr ? ResOrErr.get() : llvm::DIGlobal());
}
return __sanitizer::internal_snprintf(Buffer, MaxLength, "%s",
Result.c_str()) < MaxLength;
More information about the llvm-commits
mailing list