[llvm-commits] [llvm] r112079 - /llvm/trunk/lib/MC/ELFObjectWriter.cpp
Benjamin Kramer
benny.kra at googlemail.com
Wed Aug 25 13:09:43 PDT 2010
Author: d0k
Date: Wed Aug 25 15:09:43 2010
New Revision: 112079
URL: http://llvm.org/viewvc/llvm-project?rev=112079&view=rev
Log:
MCELF: Use precomputed symbol indices, patch by Roman Divacky.
Modified:
llvm/trunk/lib/MC/ELFObjectWriter.cpp
Modified: llvm/trunk/lib/MC/ELFObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/ELFObjectWriter.cpp?rev=112079&r1=112078&r2=112079&view=diff
==============================================================================
--- llvm/trunk/lib/MC/ELFObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/ELFObjectWriter.cpp Wed Aug 25 15:09:43 2010
@@ -567,18 +567,14 @@
uint64_t
ELFObjectWriterImpl::getSymbolIndexInSymbolTable(const MCAssembler &Asm,
const MCSymbol *S) {
- for (unsigned i = 0, e = LocalSymbolData.size(); i != e; ++i)
- if (&LocalSymbolData[i].SymbolData->getSymbol() == S)
- return i + /* empty symbol */ 1;
- for (unsigned i = 0, e = ExternalSymbolData.size(); i != e; ++i)
- if (&ExternalSymbolData[i].SymbolData->getSymbol() == S)
- return i + LocalSymbolData.size() + Asm.size() + /* empty symbol */ 1;
- for (unsigned i = 0, e = UndefinedSymbolData.size(); i != e; ++i)
- if (&UndefinedSymbolData[i].SymbolData->getSymbol() == S)
- return i + LocalSymbolData.size() + ExternalSymbolData.size() +
- Asm.size() + /* empty symbol */ 1;
+ MCSymbolData &SD = Asm.getSymbolData(*S);
+
+ // Local symbol.
+ if (!SD.isExternal() && !S->isUndefined())
+ return SD.getIndex() + /* empty symbol */ 1;
- llvm_unreachable("Cannot find symbol which should exist!");
+ // External or undefined symbol.
+ return SD.getIndex() + Asm.size() + /* empty symbol */ 1;
}
void ELFObjectWriterImpl::ComputeSymbolTable(MCAssembler &Asm) {
More information about the llvm-commits
mailing list