From ab4a7afe98fcd86418bd1672f880b7d3672f4543 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Sun, 14 Nov 2010 03:12:24 +0000 Subject: [PATCH] Simplify getSymbolIndexInSymbolTable by setting the actual index of the symbols. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119022 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/ELFObjectWriter.cpp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index e019e185272..085b301b6ec 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/lib/MC/ELFObjectWriter.cpp @@ -159,8 +159,6 @@ namespace { /// @} - int NumRegularSections; - bool NeedsGOT; bool NeedsSymtabShndx; @@ -874,13 +872,7 @@ uint64_t ELFObjectWriter::getSymbolIndexInSymbolTable(const MCAssembler &Asm, const MCSymbol *S) { MCSymbolData &SD = Asm.getSymbolData(*S); - - // Local symbol. - if (!SD.isExternal() && !S->isUndefined()) - return SD.getIndex() + /* empty symbol */ 1; - - // External or undefined symbol. - return SD.getIndex() + NumRegularSections + /* empty symbol */ 1; + return SD.getIndex(); } static bool isInSymtab(const MCAssembler &Asm, const MCSymbolData &Data, @@ -957,7 +949,7 @@ void ELFObjectWriter::ComputeSymbolTable(MCAssembler &Asm, } // Build section lookup table. - NumRegularSections = Asm.size(); + int NumRegularSections = Asm.size(); // Index 0 is always the empty string. StringMap StringIndexMap; @@ -1033,9 +1025,12 @@ void ELFObjectWriter::ComputeSymbolTable(MCAssembler &Asm, // Set the symbol indices. Local symbols must come before all other // symbols with non-local bindings. - unsigned Index = 0; + unsigned Index = 1; for (unsigned i = 0, e = LocalSymbolData.size(); i != e; ++i) LocalSymbolData[i].SymbolData->setIndex(Index++); + + Index += NumRegularSections; + for (unsigned i = 0, e = ExternalSymbolData.size(); i != e; ++i) ExternalSymbolData[i].SymbolData->setIndex(Index++); for (unsigned i = 0, e = UndefinedSymbolData.size(); i != e; ++i)