Write the section header in the end.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 8 Apr 2015 11:41:24 +0000 (11:41 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 8 Apr 2015 11:41:24 +0000 (11:41 +0000)
One could make the argument for writing it immediately after the ELF header,
but writing it in the middle of the sections like we were doing just makes
it harder for no reason.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234400 91177308-0d34-0410-b5e6-96231b3b80d8

21 files changed:
lib/MC/ELFObjectWriter.cpp
test/MC/ARM/elf-movt.s
test/MC/ELF/cfi-adjust-cfa-offset.s
test/MC/ELF/cfi-advance-loc2.s
test/MC/ELF/cfi-def-cfa-offset.s
test/MC/ELF/cfi-def-cfa-register.s
test/MC/ELF/cfi-def-cfa.s
test/MC/ELF/cfi-escape.s
test/MC/ELF/cfi-offset.s
test/MC/ELF/cfi-register.s
test/MC/ELF/cfi-rel-offset.s
test/MC/ELF/cfi-rel-offset2.s
test/MC/ELF/cfi-remember.s
test/MC/ELF/cfi-restore.s
test/MC/ELF/cfi-same-value.s
test/MC/ELF/cfi-undefined.s
test/MC/ELF/cfi-window-save.s
test/MC/ELF/cfi-zero-addr-delta.s
test/MC/ELF/cfi.s
test/MC/ELF/relocation-pc.s
test/MC/ELF/rename.s

index b3ae4a545f17e98e89689f2bc157e71140d6e616..f6b209009111af738d4fd70ed5d43eadff981eef 100644 (file)
@@ -1676,8 +1676,6 @@ void ELFObjectWriter::WriteObject(MCAssembler &Asm,
   createIndexedSections(Asm, const_cast<MCAsmLayout &>(Layout), GroupMap,
                         RevGroupMap, SectionIndexMap);
 
-  unsigned NumRegularSections = Asm.size();
-
   // Compute symbol table information.
   computeSymbolTable(Asm, Layout, SectionIndexMap, RevGroupMap);
 
@@ -1696,7 +1694,8 @@ void ELFObjectWriter::WriteObject(MCAssembler &Asm,
   ComputeSectionOrder(Asm, Sections);
   unsigned NumSections = Sections.size();
   SectionOffsetMapTy SectionOffsetMap;
-  for (unsigned i = 0; i < NumRegularSections + 1; ++i) {
+  for (unsigned i = 0; i < NumSections; ++i) {
+
     const MCSectionELF &Section = *Sections[i];
     const MCSectionData &SD = Asm.getOrCreateSectionData(Section);
 
@@ -1713,29 +1712,11 @@ void ELFObjectWriter::WriteObject(MCAssembler &Asm,
 
   const unsigned SectionHeaderOffset = FileOff;
 
-  uint64_t SectionHeaderEntrySize = is64Bit() ?
-    sizeof(ELF::Elf64_Shdr) : sizeof(ELF::Elf32_Shdr);
-  FileOff += (NumSections + 1) * SectionHeaderEntrySize;
-
-  for (unsigned i = NumRegularSections + 1; i < NumSections; ++i) {
-    const MCSectionELF &Section = *Sections[i];
-    const MCSectionData &SD = Asm.getOrCreateSectionData(Section);
-
-    FileOff = RoundUpToAlignment(FileOff, SD.getAlignment());
-
-    // Remember the offset into the file for this section.
-    SectionOffsetMap[&Section] = FileOff;
-
-    // Get the size of the section in the output file (including padding).
-    FileOff += GetSectionFileSize(Layout, SD);
-  }
-
   // Write out the ELF header ...
   WriteHeader(Asm, SectionHeaderOffset, NumSections + 1);
 
-  // ... then the regular sections ...
-  // + because of .shstrtab
-  for (unsigned i = 0; i < NumRegularSections + 1; ++i)
+  // ... then the sections ...
+  for (unsigned i = 0; i < NumSections; ++i)
     WriteDataSectionData(Asm, Layout, *Sections[i]);
 
   uint64_t Padding = OffsetToAlignment(OS.tell(), NaturalAlignment);
@@ -1743,10 +1724,6 @@ void ELFObjectWriter::WriteObject(MCAssembler &Asm,
 
   // ... then the section header table ...
   writeSectionHeader(Asm, GroupMap, Layout, SectionIndexMap, SectionOffsetMap);
-
-  // ... and then the remaining sections ...
-  for (unsigned i = NumRegularSections + 1; i < NumSections; ++i)
-    WriteDataSectionData(Asm, Layout, *Sections[i]);
 }
 
 bool ELFObjectWriter::IsSymbolRefDifferenceFullyResolvedImpl(
index 0080db4ac8a04e231f0b070d01094dfa06c8b976..7f7590f426f7c1b89212c2cfe69c133b51f47dac 100644 (file)
@@ -42,7 +42,7 @@ barf:                                   @ @barf
 @ OBJ-NEXT:     Flags [ (0x0)
 @ OBJ-NEXT:     ]
 @ OBJ-NEXT:     Address: 0x0
-@ OBJ-NEXT:     Offset: 0x22C
+@ OBJ-NEXT:     Offset:
 @ OBJ-NEXT:     Size: 16
 @ OBJ-NEXT:     Link: 6
 @ OBJ-NEXT:     Info: 1
index 200f897d2e15d47bc61636539a894f198e54b624..bbaa785056616d954f1cd7a77d10b0dcf43d0073 100644 (file)
@@ -53,7 +53,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x3C8
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 72
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index 98caa0185f59f4758d2924084a5d93ec89a3d38f..be14a431a1d38c2865acfe72ce66e9518b42b640 100644 (file)
@@ -38,7 +38,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x490
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index 59f740055d47253f3252c2d0a4e693104106f07b..d84ab829bb30a320e10d9db809b4bf681c513fb7 100644 (file)
@@ -40,7 +40,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x398
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index 178ba32882dcafbe4be1f6a83354f6c0e5c59029..1efe0b29eaa5cd2c78ef78597012e5759be0f01d 100644 (file)
@@ -35,7 +35,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x390
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index dfb0d4b59396254ffbbb02d16047a68799647976..5e185d5d981663d2f24563aa339146ceb7c0303d 100644 (file)
@@ -35,7 +35,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x390
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index 5394ee414aa771add8603d895a53ebefed9d976d..5c427d62304edadbb36bafa034c8bd317c10aeb3 100644 (file)
@@ -36,7 +36,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x390
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index a65b4fc783c7166a6832907fe28e0bf2f2d80c31..ad73b502535196c743ac7431337ff4f477cba8cb 100644 (file)
@@ -35,7 +35,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x390
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index 94417702c13ca7fafabf366acd6d7eb497798c8c..48fd87953b688e74be3d68ab3a7178f058e03a3f 100644 (file)
@@ -36,7 +36,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x390
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index 0dc69c89cf4c0f94e0d02950884fd8d52c1567d6..15e1f9eac15d05ab26727cb1485ede6ff86ef1fe 100644 (file)
@@ -44,7 +44,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x3A0
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index 360e7b0ea0f5807faaf386adbf3c491bf7b57edd..53c207576a355c386d7983249d394d4be2f93755 100644 (file)
@@ -35,7 +35,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x390
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index 3a38948b6a3ec3d4403e04dfc6c65325c6bd4384..d9de0ff170b86e685ea38758721b63155c4271ea 100644 (file)
@@ -38,7 +38,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x390
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index e225797f54d66cf182f81931b25b2d3c5fe9b928..19e16247cea3ffe5a6062c9f413cffc310e09b87 100644 (file)
@@ -36,7 +36,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x390
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index 2d37f4d0b43e4a0f54df40770734e8e92b91e9f8..53da4dc2494105199568f8c0466aafcad6c1a20b 100644 (file)
@@ -36,7 +36,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x390
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index 568b3159cc44ca11aaa6966fb41822976d8f5d1f..7afeea68101351c6aca5c7476cb97a900e93bbbb 100644 (file)
@@ -36,7 +36,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x390
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index b083901c137ae8902f67f39aaaf1fef7b308b92f..00fd37f7fb1c7cb9887459dbbda49553c05bef92 100644 (file)
@@ -38,7 +38,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x390
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index 8662839b5274a48567793a83154302eed1a395a7..85aa3e126dffbb1bb2088ee712bab99209ffd1bb 100644 (file)
@@ -43,7 +43,7 @@ f:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x398
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index 21be615c5f39d2d823741cc41cb33fb069213b3c..dc61dca7ca6a451e9461a5768ff3693da2e33ac9 100644 (file)
@@ -355,7 +355,7 @@ f37:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0xE70
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 1752
 // CHECK-NEXT:     Link: 7
 // CHECK-NEXT:     Info: 4
index 0ce32010cf0ebf2a2ddbdf028d1c910aa1bd34dc..dc60c1ae4a244477b2deaae79d7b72d28a868772 100644 (file)
@@ -19,7 +19,7 @@
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x2E8
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 48
 // CHECK-NEXT:     Link: 6
 // CHECK-NEXT:     Info: 1
index 5364dde9f4609190e12723b7e21ba008ec5c6f44..7031c013862db528338c94a27c3caec4496f1fa9 100644 (file)
@@ -41,7 +41,7 @@ defined3:
 // CHECK-NEXT:     Flags [ (0x0)
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x320
+// CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 24
 // CHECK-NEXT:     Link: 6
 // CHECK-NEXT:     Info: 1