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 @@ -595,6 +595,7 @@ void printDynamicRelocation(const ELFO *Obj, Elf_Rela Rel); void printSymbols(const ELFO *Obj); void printDynamicSymbols(const ELFO *Obj); + void printSymbolSection(const Elf_Sym *Symbol, const Elf_Sym *First); void printSymbol(const ELFO *Obj, const Elf_Sym *Symbol, const Elf_Sym *First, StringRef StrTable, bool IsDynamic, bool /*NonVisibilityBitsUsed*/) override; @@ -5439,14 +5440,20 @@ } } +template +void LLVMStyle::printSymbolSection(const Elf_Sym *Symbol, + const Elf_Sym *First) { + unsigned SectionIndex = 0; + StringRef SectionName; + this->dumper()->getSectionNameIndex(Symbol, First, SectionName, SectionIndex); + W.printHex("Section", SectionName, SectionIndex); +} + template void LLVMStyle::printSymbol(const ELFO *Obj, const Elf_Sym *Symbol, const Elf_Sym *First, StringRef StrTable, bool IsDynamic, bool /*NonVisibilityBitsUsed*/) { - unsigned SectionIndex = 0; - StringRef SectionName; - this->dumper()->getSectionNameIndex(Symbol, First, SectionName, SectionIndex); std::string FullSymbolName = this->dumper()->getFullSymbolName(Symbol, StrTable, IsDynamic); unsigned char SymbolType = Symbol->getType(); @@ -5483,7 +5490,7 @@ } W.printFlags("Other", Symbol->st_other, makeArrayRef(SymOtherFlags), 0x3u); } - W.printHex("Section", SectionName, SectionIndex); + printSymbolSection(Symbol, First); } template @@ -6036,13 +6043,7 @@ const Elf_Sym *Sym = Parser.getGotSym(&E); W.printHex("Value", Sym->st_value); W.printEnum("Type", Sym->getType(), makeArrayRef(ElfSymbolTypes)); - - unsigned SectionIndex = 0; - StringRef SectionName; - this->dumper()->getSectionNameIndex( - Sym, this->dumper()->dynamic_symbols().begin(), SectionName, - SectionIndex); - W.printHex("Section", SectionName, SectionIndex); + printSymbolSection(Sym, this->dumper()->dynamic_symbols().begin()); std::string SymName = this->dumper()->getFullSymbolName( Sym, this->dumper()->getDynamicStringTable(), true); @@ -6086,13 +6087,7 @@ const Elf_Sym *Sym = Parser.getPltSym(&E); W.printHex("Value", Sym->st_value); W.printEnum("Type", Sym->getType(), makeArrayRef(ElfSymbolTypes)); - - unsigned SectionIndex = 0; - StringRef SectionName; - this->dumper()->getSectionNameIndex( - Sym, this->dumper()->dynamic_symbols().begin(), SectionName, - SectionIndex); - W.printHex("Section", SectionName, SectionIndex); + printSymbolSection(Sym, this->dumper()->dynamic_symbols().begin()); std::string SymName = this->dumper()->getFullSymbolName(Sym, Parser.getPltStrTable(), true);