[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