mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
Symbolize: Make DWPName a symbolizer option instead of an argument to symbolize{,Inlined}Code.
This makes the interface simpler and more consistent with the interface for .dSYM files and fixes a bug where llvm-symbolizer would not read the dwp if it was asked to symbolize data before symbolizing code. Differential Revision: https://reviews.llvm.org/D63114 llvm-svn: 363025
This commit is contained in:
parent
065d543b5b
commit
dfdd97351b
@ -42,6 +42,7 @@ public:
|
||||
std::string DefaultArch;
|
||||
std::vector<std::string> DsymHints;
|
||||
std::string FallbackDebugPath;
|
||||
std::string DWPName;
|
||||
};
|
||||
|
||||
LLVMSymbolizer() = default;
|
||||
@ -52,12 +53,10 @@ public:
|
||||
}
|
||||
|
||||
Expected<DILineInfo> symbolizeCode(const std::string &ModuleName,
|
||||
object::SectionedAddress ModuleOffset,
|
||||
StringRef DWPName = "");
|
||||
object::SectionedAddress ModuleOffset);
|
||||
Expected<DIInliningInfo>
|
||||
symbolizeInlinedCode(const std::string &ModuleName,
|
||||
object::SectionedAddress ModuleOffset,
|
||||
StringRef DWPName = "");
|
||||
object::SectionedAddress ModuleOffset);
|
||||
Expected<DIGlobal> symbolizeData(const std::string &ModuleName,
|
||||
object::SectionedAddress ModuleOffset);
|
||||
void flush();
|
||||
@ -76,7 +75,7 @@ private:
|
||||
/// only reported once. Subsequent calls to get module info for a module that
|
||||
/// failed to load will return nullptr.
|
||||
Expected<SymbolizableModule *>
|
||||
getOrCreateModuleInfo(const std::string &ModuleName, StringRef DWPName = "");
|
||||
getOrCreateModuleInfo(const std::string &ModuleName);
|
||||
|
||||
ObjectFile *lookUpDsymFile(const std::string &Path,
|
||||
const MachOObjectFile *ExeObj,
|
||||
|
@ -53,10 +53,9 @@ namespace symbolize {
|
||||
|
||||
Expected<DILineInfo>
|
||||
LLVMSymbolizer::symbolizeCode(const std::string &ModuleName,
|
||||
object::SectionedAddress ModuleOffset,
|
||||
StringRef DWPName) {
|
||||
object::SectionedAddress ModuleOffset) {
|
||||
SymbolizableModule *Info;
|
||||
if (auto InfoOrErr = getOrCreateModuleInfo(ModuleName, DWPName))
|
||||
if (auto InfoOrErr = getOrCreateModuleInfo(ModuleName))
|
||||
Info = InfoOrErr.get();
|
||||
else
|
||||
return InfoOrErr.takeError();
|
||||
@ -80,10 +79,9 @@ LLVMSymbolizer::symbolizeCode(const std::string &ModuleName,
|
||||
|
||||
Expected<DIInliningInfo>
|
||||
LLVMSymbolizer::symbolizeInlinedCode(const std::string &ModuleName,
|
||||
object::SectionedAddress ModuleOffset,
|
||||
StringRef DWPName) {
|
||||
object::SectionedAddress ModuleOffset) {
|
||||
SymbolizableModule *Info;
|
||||
if (auto InfoOrErr = getOrCreateModuleInfo(ModuleName, DWPName))
|
||||
if (auto InfoOrErr = getOrCreateModuleInfo(ModuleName))
|
||||
Info = InfoOrErr.get();
|
||||
else
|
||||
return InfoOrErr.takeError();
|
||||
@ -378,8 +376,7 @@ LLVMSymbolizer::getOrCreateObject(const std::string &Path,
|
||||
}
|
||||
|
||||
Expected<SymbolizableModule *>
|
||||
LLVMSymbolizer::getOrCreateModuleInfo(const std::string &ModuleName,
|
||||
StringRef DWPName) {
|
||||
LLVMSymbolizer::getOrCreateModuleInfo(const std::string &ModuleName) {
|
||||
const auto &I = Modules.find(ModuleName);
|
||||
if (I != Modules.end()) {
|
||||
return I->second.get();
|
||||
@ -425,8 +422,9 @@ LLVMSymbolizer::getOrCreateModuleInfo(const std::string &ModuleName,
|
||||
}
|
||||
}
|
||||
if (!Context)
|
||||
Context = DWARFContext::create(*Objects.second, nullptr,
|
||||
DWARFContext::defaultErrorHandler, DWPName);
|
||||
Context =
|
||||
DWARFContext::create(*Objects.second, nullptr,
|
||||
DWARFContext::defaultErrorHandler, Opts.DWPName);
|
||||
assert(Context);
|
||||
auto InfoOrErr =
|
||||
SymbolizableObjectFile::create(Objects.first, std::move(Context));
|
||||
|
@ -3,8 +3,9 @@ RUN: mkdir -p %t
|
||||
|
||||
RUN: cp %p/Inputs/split-dwarf-dwp.o %t/split-dwarf-dwp-different-name.o
|
||||
|
||||
RUN: llvm-symbolizer --dwp=%p/Inputs/split-dwarf-dwp.o.dwp \
|
||||
RUN: --obj=%t/split-dwarf-dwp-different-name.o 0x54 | FileCheck %s
|
||||
RUN: echo -e 'DATA 0\n0x54' | \
|
||||
RUN: llvm-symbolizer --dwp=%p/Inputs/split-dwarf-dwp.o.dwp \
|
||||
RUN: --obj=%t/split-dwarf-dwp-different-name.o | FileCheck %s
|
||||
|
||||
CHECK: f2
|
||||
CHECK-NEXT: split-dwarf-dwp.cpp:3:3
|
||||
|
@ -224,8 +224,7 @@ static void symbolizeInput(StringRef InputString, LLVMSymbolizer &Symbolizer,
|
||||
Printer << (error(ResOrErr) ? DIGlobal() : ResOrErr.get());
|
||||
} else if (ClPrintInlining) {
|
||||
auto ResOrErr = Symbolizer.symbolizeInlinedCode(
|
||||
ModuleName, {Offset, object::SectionedAddress::UndefSection},
|
||||
ClDwpName);
|
||||
ModuleName, {Offset, object::SectionedAddress::UndefSection});
|
||||
Printer << (error(ResOrErr) ? DIInliningInfo() : ResOrErr.get());
|
||||
} else if (ClOutputStyle == DIPrinter::OutputStyle::GNU) {
|
||||
// With ClPrintFunctions == FunctionNameKind::LinkageName (default)
|
||||
@ -235,13 +234,11 @@ static void symbolizeInput(StringRef InputString, LLVMSymbolizer &Symbolizer,
|
||||
// behavior of addr2line. Symbolizer.symbolizeInlinedCode() overrides only
|
||||
// the topmost function, which suits our needs better.
|
||||
auto ResOrErr = Symbolizer.symbolizeInlinedCode(
|
||||
ModuleName, {Offset, object::SectionedAddress::UndefSection},
|
||||
ClDwpName);
|
||||
ModuleName, {Offset, object::SectionedAddress::UndefSection});
|
||||
Printer << (error(ResOrErr) ? DILineInfo() : ResOrErr.get().getFrame(0));
|
||||
} else {
|
||||
auto ResOrErr = Symbolizer.symbolizeCode(
|
||||
ModuleName, {Offset, object::SectionedAddress::UndefSection},
|
||||
ClDwpName);
|
||||
ModuleName, {Offset, object::SectionedAddress::UndefSection});
|
||||
Printer << (error(ResOrErr) ? DILineInfo() : ResOrErr.get());
|
||||
}
|
||||
if (ClOutputStyle == DIPrinter::OutputStyle::LLVM)
|
||||
@ -275,6 +272,7 @@ int main(int argc, char **argv) {
|
||||
Opts.RelativeAddresses = ClUseRelativeAddress;
|
||||
Opts.DefaultArch = ClDefaultArch;
|
||||
Opts.FallbackDebugPath = ClFallbackDebugPath;
|
||||
Opts.DWPName = ClDwpName;
|
||||
|
||||
for (const auto &hint : ClDsymHint) {
|
||||
if (sys::path::extension(hint) == ".dSYM") {
|
||||
|
Loading…
Reference in New Issue
Block a user