diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-11-14 03:12:24 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-11-14 03:12:24 +0000 |
commit | 0e3decfcf7d366f85b1bd48b2b0131a27fa05945 (patch) | |
tree | f75a864859dd0a6fec0ab58f1084f9ca2bd91f16 /llvm/lib/MC/ELFObjectWriter.cpp | |
parent | eba90226524cba0f4bfbdb9c122fc7af01323b80 (diff) | |
download | bcm5719-llvm-0e3decfcf7d366f85b1bd48b2b0131a27fa05945.tar.gz bcm5719-llvm-0e3decfcf7d366f85b1bd48b2b0131a27fa05945.zip |
Simplify getSymbolIndexInSymbolTable by setting the actual index of
the symbols.
llvm-svn: 119022
Diffstat (limited to 'llvm/lib/MC/ELFObjectWriter.cpp')
-rw-r--r-- | llvm/lib/MC/ELFObjectWriter.cpp | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index e019e185272..085b301b6ec 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/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<uint64_t> 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) |