From 7b83c26051b0474fb5f8b73ba6e74bd4f40324ba Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Wed, 25 Aug 2010 20:09:43 +0000 Subject: MCELF: Use precomputed symbol indices, patch by Roman Divacky. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112079 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/ELFObjectWriter.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) (limited to 'lib/MC') diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index 8fb6ff60f8..79bb52871d 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/lib/MC/ELFObjectWriter.cpp @@ -567,18 +567,14 @@ void ELFObjectWriterImpl::RecordRelocation(const MCAssembler &Asm, 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) { -- cgit v1.2.3