diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp --- a/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -960,6 +960,7 @@ void printRelrReloc(const Elf_Relr &R) override; void printDynamicReloc(const Relocation &R) override; + void printRelRelaReloc(const Relocation &R, StringRef SymbolName); void printSymbols(); void printDynamicSymbols(); void printSymbolSection(const Elf_Sym *Symbol, const Elf_Sym *First); @@ -6156,7 +6157,12 @@ return; } - std::string TargetName = Target->Name; + printRelRelaReloc(R, Target->Name); +} + +template +void LLVMStyle::printRelRelaReloc(const Relocation &R, + StringRef SymbolName) { SmallString<32> RelocName; this->Obj.getRelocationTypeName(R.Type, RelocName); @@ -6165,12 +6171,12 @@ DictScope Group(W, "Relocation"); W.printHex("Offset", R.Offset); W.printNumber("Type", RelocName, R.Type); - W.printNumber("Symbol", !TargetName.empty() ? TargetName : "-", R.Symbol); + W.printNumber("Symbol", !SymbolName.empty() ? SymbolName : "-", R.Symbol); W.printHex("Addend", Addend); } else { raw_ostream &OS = W.startLine(); OS << W.hex(R.Offset) << " " << RelocName << " " - << (!TargetName.empty() ? TargetName : "-") << " " << W.hex(Addend) + << (!SymbolName.empty() ? SymbolName : "-") << " " << W.hex(Addend) << "\n"; } } @@ -6362,24 +6368,9 @@ template void LLVMStyle::printDynamicReloc(const Relocation &R) { - SmallString<32> RelocName; - this->Obj.getRelocationTypeName(R.Type, RelocName); - std::string SymbolName = - getSymbolForReloc(this->Obj, this->FileName, this->dumper(), R).Name; - - uintX_t Addend = R.Addend.getValueOr(0); - if (opts::ExpandRelocs) { - DictScope Group(W, "Relocation"); - W.printHex("Offset", R.Offset); - W.printNumber("Type", RelocName, R.Type); - W.printString("Symbol", !SymbolName.empty() ? SymbolName : "-"); - W.printHex("Addend", Addend); - } else { - raw_ostream &OS = W.startLine(); - OS << W.hex(R.Offset) << " " << RelocName << " " - << (!SymbolName.empty() ? SymbolName : "-") << " " << W.hex(Addend) - << "\n"; - } + RelSymbol S = + getSymbolForReloc(this->Obj, this->FileName, this->dumper(), R); + printRelRelaReloc(R, S.Name); } template