From: Fangrui Song Date: Thu, 23 May 2019 16:01:59 +0000 (+0000) Subject: [Object] object::ELFObjectFile::symbol_begin(): skip symbol index 0 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e48c7bddaea835f376635446d16cc7b4c356047c;p=llvm [Object] object::ELFObjectFile::symbol_begin(): skip symbol index 0 For clients iterating the symbol table, none expects to handle index 0 (STN_UNDEF). Skip it to improve consistency with other binary formats. Clients that need STN_UNDEF (e.g. lld) can use getSectionContentsAsArray(). A test will be added in D62148. Reviewed By: mtrent Differential Revision: https://reviews.llvm.org/D62296 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@361506 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Object/ELFObjectFile.h b/include/llvm/Object/ELFObjectFile.h index 0aa6c935a83..ed54ad02ccf 100644 --- a/include/llvm/Object/ELFObjectFile.h +++ b/include/llvm/Object/ELFObjectFile.h @@ -982,7 +982,9 @@ ELFObjectFile::ELFObjectFile(ELFObjectFile &&Other) template basic_symbol_iterator ELFObjectFile::symbol_begin() const { - DataRefImpl Sym = toDRI(DotSymtabSec, 0); + DataRefImpl Sym = + toDRI(DotSymtabSec, + DotSymtabSec && DotSymtabSec->sh_size >= sizeof(Elf_Sym) ? 1 : 0); return basic_symbol_iterator(SymbolRef(Sym, this)); } diff --git a/tools/llvm-objdump/llvm-objdump.cpp b/tools/llvm-objdump/llvm-objdump.cpp index 318e0ade942..1312ea8bbd1 100644 --- a/tools/llvm-objdump/llvm-objdump.cpp +++ b/tools/llvm-objdump/llvm-objdump.cpp @@ -1643,11 +1643,6 @@ void printSymbolTable(const ObjectFile *O, StringRef ArchiveName, const StringRef FileName = O->getFileName(); for (auto I = O->symbol_begin(), E = O->symbol_end(); I != E; ++I) { - // Skip printing the special zero symbol when dumping an ELF file. - // This makes the output consistent with the GNU objdump. - if (I == O->symbol_begin() && isa(O)) - continue; - const SymbolRef &Symbol = *I; uint64_t Address = unwrapOrError(Symbol.getAddress(), ArchiveName, FileName, ArchitectureName);