Merge redundant loops. NFC.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 28 May 2015 20:00:13 +0000 (20:00 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 28 May 2015 20:00:13 +0000 (20:00 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238471 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/ELFObjectWriter.cpp

index 639f8e7d032a6917581273dd9659ea1e1d453f46..e5a59968a09dccb32979800de7473b3704227e3b 100644 (file)
@@ -935,6 +935,11 @@ void ELFObjectWriter::computeSymbolTable(
 
   StrTabBuilder.finalize(StringTableBuilder::ELF);
 
 
   StrTabBuilder.finalize(StringTableBuilder::ELF);
 
+  for (const std::string &Name : FileNames)
+    Writer.writeSymbol(StrTabBuilder.getOffset(Name),
+                       ELF::STT_FILE | ELF::STB_LOCAL, 0, 0, ELF::STV_DEFAULT,
+                       ELF::SHN_ABS, true);
+
   // Symbols are required to be in lexicographic order.
   array_pod_sort(LocalSymbolData.begin(), LocalSymbolData.end());
   array_pod_sort(ExternalSymbolData.begin(), ExternalSymbolData.end());
   // Symbols are required to be in lexicographic order.
   array_pod_sort(LocalSymbolData.begin(), LocalSymbolData.end());
   array_pod_sort(ExternalSymbolData.begin(), ExternalSymbolData.end());
@@ -949,28 +954,15 @@ void ELFObjectWriter::computeSymbolTable(
                           ? 0
                           : StrTabBuilder.getOffset(MSD.Name);
     MSD.Symbol->setIndex(Index++);
                           ? 0
                           : StrTabBuilder.getOffset(MSD.Name);
     MSD.Symbol->setIndex(Index++);
-  }
-  for (ELFSymbolData &MSD : ExternalSymbolData) {
-    MSD.StringIndex = StrTabBuilder.getOffset(MSD.Name);
-    MSD.Symbol->setIndex(Index++);
-  }
-  for (ELFSymbolData &MSD : UndefinedSymbolData) {
-    MSD.StringIndex = StrTabBuilder.getOffset(MSD.Name);
-    MSD.Symbol->setIndex(Index++);
+    WriteSymbol(Writer, MSD, Layout);
   }
 
   }
 
-  for (const std::string &Name : FileNames)
-    Writer.writeSymbol(StrTabBuilder.getOffset(Name),
-                       ELF::STT_FILE | ELF::STB_LOCAL, 0, 0, ELF::STV_DEFAULT,
-                       ELF::SHN_ABS, true);
-
   // Write the symbol table entries.
   // Write the symbol table entries.
-  LastLocalSymbolIndex = FileNames.size() + LocalSymbolData.size() + 1;
-
-  for (ELFSymbolData &MSD : LocalSymbolData)
-    WriteSymbol(Writer, MSD, Layout);
+  LastLocalSymbolIndex = Index;
 
   for (ELFSymbolData &MSD : ExternalSymbolData) {
 
   for (ELFSymbolData &MSD : ExternalSymbolData) {
+    MSD.StringIndex = StrTabBuilder.getOffset(MSD.Name);
+    MSD.Symbol->setIndex(Index++);
     MCSymbolData &Data = MSD.Symbol->getData();
     assert(((Data.getFlags() & ELF_STB_Global) ||
             (Data.getFlags() & ELF_STB_Weak)) &&
     MCSymbolData &Data = MSD.Symbol->getData();
     assert(((Data.getFlags() & ELF_STB_Global) ||
             (Data.getFlags() & ELF_STB_Weak)) &&
@@ -978,8 +970,9 @@ void ELFObjectWriter::computeSymbolTable(
     WriteSymbol(Writer, MSD, Layout);
     assert(MCELF::GetBinding(Data) != ELF::STB_LOCAL);
   }
     WriteSymbol(Writer, MSD, Layout);
     assert(MCELF::GetBinding(Data) != ELF::STB_LOCAL);
   }
-
   for (ELFSymbolData &MSD : UndefinedSymbolData) {
   for (ELFSymbolData &MSD : UndefinedSymbolData) {
+    MSD.StringIndex = StrTabBuilder.getOffset(MSD.Name);
+    MSD.Symbol->setIndex(Index++);
     MCSymbolData &Data = MSD.Symbol->getData();
     WriteSymbol(Writer, MSD, Layout);
     assert(MCELF::GetBinding(Data) != ELF::STB_LOCAL);
     MCSymbolData &Data = MSD.Symbol->getData();
     WriteSymbol(Writer, MSD, Layout);
     assert(MCELF::GetBinding(Data) != ELF::STB_LOCAL);