[llvm] r236145 - Write the section header string table directly to the output stream.

Rafael Espindola rafael.espindola at gmail.com
Wed Apr 29 13:25:24 PDT 2015


Author: rafael
Date: Wed Apr 29 15:25:24 2015
New Revision: 236145

URL: http://llvm.org/viewvc/llvm-project?rev=236145&view=rev
Log:
Write the section header string table directly to the output stream.

Instead of accumulating the content in a fragment first, just write it
to the output stream.

Also put it first in the section table, so that we never have to worry
about its index being >= SHN_LORESERVE.

Modified:
    llvm/trunk/lib/MC/ELFObjectWriter.cpp
    llvm/trunk/test/MC/ARM/eh-directive-section-comdat.s
    llvm/trunk/test/MC/ARM/eh-directive-section-multiple-func.s
    llvm/trunk/test/MC/ARM/eh-directive-section.s
    llvm/trunk/test/MC/ARM/eh-directive-text-section.s
    llvm/trunk/test/MC/ARM/eh-link.s
    llvm/trunk/test/MC/ELF/comdat-dup-group-name.s
    llvm/trunk/test/MC/ELF/comdat-reloc.s
    llvm/trunk/test/MC/ELF/comdat.s
    llvm/trunk/test/MC/ELF/empty.s
    llvm/trunk/test/MC/ELF/many-sections-2.s
    llvm/trunk/test/MC/ELF/many-sections.s
    llvm/trunk/test/MC/ELF/section-sym.s
    llvm/trunk/test/MC/ELF/section-unique.s

Modified: llvm/trunk/lib/MC/ELFObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/ELFObjectWriter.cpp?rev=236145&r1=236144&r2=236145&view=diff
==============================================================================
--- llvm/trunk/lib/MC/ELFObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/ELFObjectWriter.cpp Wed Apr 29 15:25:24 2015
@@ -247,6 +247,9 @@ class ELFObjectWriter : public MCObjectW
 
     void WriteRelocations(MCAssembler &Asm, const MCAsmLayout &Layout);
 
+    void
+    createSectionHeaderStringTable(MCAssembler &Asm,
+                                   std::vector<const MCSectionELF *> &Sections);
     void CreateMetadataSections(MCAssembler &Asm, const MCAsmLayout &Layout,
                                 std::vector<const MCSectionELF *> &Sections);
 
@@ -452,10 +455,8 @@ void ELFObjectWriter::WriteHeader(const
     Write16(NumberOfSections);
 
   // e_shstrndx  = Section # of '.shstrtab'
-  if (ShstrtabIndex >= ELF::SHN_LORESERVE)
-    Write16(ELF::SHN_XINDEX);
-  else
-    Write16(ShstrtabIndex);
+  assert(ShstrtabIndex < ELF::SHN_LORESERVE);
+  Write16(ShstrtabIndex);
 }
 
 uint64_t ELFObjectWriter::SymbolValue(MCSymbolData &Data,
@@ -1372,6 +1373,21 @@ void ELFObjectWriter::WriteRelocationsFr
   }
 }
 
+void ELFObjectWriter::createSectionHeaderStringTable(
+    MCAssembler &Asm, std::vector<const MCSectionELF *> &Sections) {
+  const MCSectionELF *ShstrtabSection = Sections[ShstrtabIndex - 1];
+
+  Asm.getOrCreateSectionData(*ShstrtabSection);
+
+  for (MCSectionData &SD : Asm) {
+    const MCSectionELF &Section =
+        static_cast<const MCSectionELF &>(SD.getSection());
+    ShStrTabBuilder.add(Section.getSectionName());
+  }
+  ShStrTabBuilder.finalize(StringTableBuilder::ELF);
+  OS << ShStrTabBuilder.data();
+}
+
 void ELFObjectWriter::CreateMetadataSections(
     MCAssembler &Asm, const MCAsmLayout &Layout,
     std::vector<const MCSectionELF *> &Sections) {
@@ -1380,14 +1396,6 @@ void ELFObjectWriter::CreateMetadataSect
 
   unsigned EntrySize = is64Bit() ? ELF::SYMENTRY_SIZE64 : ELF::SYMENTRY_SIZE32;
 
-  // We construct .shstrtab, .symtab and .strtab in this order to match gnu as.
-  const MCSectionELF *ShstrtabSection =
-      Ctx.getELFSection(".shstrtab", ELF::SHT_STRTAB, 0);
-  MCSectionData &ShstrtabSD = Asm.getOrCreateSectionData(*ShstrtabSection);
-  ShstrtabSD.setAlignment(1);
-  ShstrtabIndex = Sections.size() + 1;
-  Sections.push_back(ShstrtabSection);
-
   const MCSectionELF *SymtabSection =
     Ctx.getELFSection(".symtab", ELF::SHT_SYMTAB, 0,
                       EntrySize, "");
@@ -1410,18 +1418,6 @@ void ELFObjectWriter::CreateMetadataSect
   F = new MCDataFragment(&StrtabSD);
   F->getContents().append(StrTabBuilder.data().begin(),
                           StrTabBuilder.data().end());
-
-  F = new MCDataFragment(&ShstrtabSD);
-
-  // Section header string table.
-  for (auto it = Asm.begin(), ie = Asm.end(); it != ie; ++it) {
-    const MCSectionELF &Section =
-      static_cast<const MCSectionELF&>(it->getSection());
-    ShStrTabBuilder.add(Section.getSectionName());
-  }
-  ShStrTabBuilder.finalize(StringTableBuilder::ELF);
-  F->getContents().append(ShStrTabBuilder.data().begin(),
-                          ShStrTabBuilder.data().end());
 }
 
 void ELFObjectWriter::createIndexedSections(
@@ -1430,6 +1426,12 @@ void ELFObjectWriter::createIndexedSecti
     SectionIndexMapTy &SectionIndexMap) {
   MCContext &Ctx = Asm.getContext();
 
+  const MCSectionELF *ShstrtabSection =
+      Ctx.getELFSection(".shstrtab", ELF::SHT_STRTAB, 0);
+  Sections.push_back(ShstrtabSection);
+  ShstrtabIndex = Sections.size();
+  assert(ShstrtabIndex == 1);
+
   // Build the groups
   for (const MCSectionData &SD : Asm) {
     const MCSectionELF &Section =
@@ -1537,9 +1539,7 @@ void ELFObjectWriter::writeSectionHeader
   // Null section first.
   uint64_t FirstSectionSize =
       (NumSections + 1) >= ELF::SHN_LORESERVE ? NumSections + 1 : 0;
-  uint32_t FirstSectionLink =
-    ShstrtabIndex >= ELF::SHN_LORESERVE ? ShstrtabIndex : 0;
-  WriteSecHdrEntry(0, 0, 0, 0, 0, FirstSectionSize, FirstSectionLink, 0, 0, 0);
+  WriteSecHdrEntry(0, 0, 0, 0, 0, FirstSectionSize, 0, 0, 0, 0);
 
   for (unsigned i = 0; i < NumSections; ++i) {
     const MCSectionELF &Section = *Sections[i];
@@ -1576,15 +1576,16 @@ void ELFObjectWriter::WriteObject(MCAsse
 
   CreateMetadataSections(Asm, Layout, Sections);
 
-  unsigned NumSections = Asm.size();
+  unsigned NumSections = Asm.size() + 1;
   SectionOffsetsTy SectionOffsets;
 
   // Write out the ELF header ...
   WriteHeader(Asm, NumSections + 1);
 
   // ... then the sections ...
-  for (const MCSectionELF *Section : Sections) {
-    const MCSectionData &SD = Asm.getOrCreateSectionData(*Section);
+  SectionOffsets.push_back(std::make_pair(0, 0));
+  for (auto I = ++Sections.begin(), E = Sections.end(); I != E; ++I) {
+    const MCSectionData &SD = Asm.getOrCreateSectionData(**I);
     uint64_t Padding = OffsetToAlignment(OS.tell(), SD.getAlignment());
     WriteZeros(Padding);
 
@@ -1595,6 +1596,13 @@ void ELFObjectWriter::WriteObject(MCAsse
     SectionOffsets.push_back(std::make_pair(SecStart, SecEnd));
   }
 
+  {
+    uint64_t SecStart = OS.tell();
+    createSectionHeaderStringTable(Asm, Sections);
+    uint64_t SecEnd = OS.tell();
+    SectionOffsets[0] = std::make_pair(SecStart, SecEnd);
+  }
+
   uint64_t NaturalAlignment = is64Bit() ? 8 : 4;
   uint64_t Padding = OffsetToAlignment(OS.tell(), NaturalAlignment);
   WriteZeros(Padding);

Modified: llvm/trunk/test/MC/ARM/eh-directive-section-comdat.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/eh-directive-section-comdat.s?rev=236145&r1=236144&r2=236145&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/eh-directive-section-comdat.s (original)
+++ llvm/trunk/test/MC/ARM/eh-directive-section-comdat.s Wed Apr 29 15:25:24 2015
@@ -52,7 +52,7 @@ func1:
 @ The second, third, and fourth word should correspond to the section index
 @ of .TEST1, .ARM.extab.TEST1, and .ARM.exidx.TEST1.
 @-------------------------------------------------------------------------------
-@ CHECK:       0000: 01000000 05000000 06000000 07000000  |................|
+@ CHECK:       0000: 01000000 06000000 07000000 08000000  |................|
 @ CHECK:     )
 @ CHECK:   }
 
@@ -61,8 +61,8 @@ func1:
 @ Check the .TEST1 section
 @-------------------------------------------------------------------------------
 @ CHECK:   Section {
-@ CHECK:     Index: 5
-@ CHECK:     Name: .TEST1
+@ CHECK:     Index: 6
+@ CHECK-NEXT:     Name: .TEST1
 @ CHECK:     Type: SHT_PROGBITS (0x1)
 @-------------------------------------------------------------------------------
 @ The flags should contain SHF_GROUP.
@@ -79,8 +79,8 @@ func1:
 @ Check the .ARM.extab.TEST1 section
 @-------------------------------------------------------------------------------
 @ CHECK:   Section {
-@ CHECK:     Index: 6
-@ CHECK:     Name: .ARM.extab.TEST1
+@ CHECK:     Index: 7
+@ CHECK-NEXT:     Name: .ARM.extab.TEST1
 @ CHECK:     Type: SHT_PROGBITS (0x1)
 @-------------------------------------------------------------------------------
 @ The flags should contain SHF_GROUP.
@@ -96,8 +96,8 @@ func1:
 @ Check the .ARM.exidx.TEST1 section
 @-------------------------------------------------------------------------------
 @ CHECK:   Section {
-@ CHECK:     Index: 7
-@ CHECK:     Name: .ARM.exidx.TEST1
+@ CHECK:     Index: 8
+@ CHECK-NEXT:     Name: .ARM.exidx.TEST1
 @ CHECK:     Type: SHT_ARM_EXIDX (0x70000001)
 @-------------------------------------------------------------------------------
 @ The flags should contain SHF_GROUP.
@@ -107,7 +107,7 @@ func1:
 @ CHECK:       SHF_GROUP (0x200)
 @ CHECK:       SHF_LINK_ORDER (0x80)
 @ CHECK:     ]
-@ CHECK:     Link: 5
+@ CHECK:     Link: 6
 @ CHECK:   }
 @ CHECK: ]
 
@@ -121,6 +121,6 @@ func1:
 @ CHECK:     Name: func1
 @ CHECK:     Binding: Weak (0x2)
 @ CHECK:     Type: Function (0x2)
-@ CHECK:     Section: .TEST1 (0x5)
+@ CHECK:     Section: .TEST1
 @ CHECK:   }
 @ CHECK: ]

Modified: llvm/trunk/test/MC/ARM/eh-directive-section-multiple-func.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/eh-directive-section-multiple-func.s?rev=236145&r1=236144&r2=236145&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/eh-directive-section-multiple-func.s (original)
+++ llvm/trunk/test/MC/ARM/eh-directive-section-multiple-func.s Wed Apr 29 15:25:24 2015
@@ -54,7 +54,8 @@ func2:
 @ Check the .TEST1 section.  There should be two "bx lr" instructions.
 @-------------------------------------------------------------------------------
 @ CHECK:   Section {
-@ CHECK:     Name: .TEST1
+@ CHECK:     Index: 5
+@ CHECK-NEXT:     Name: .TEST1
 @ CHECK:     SectionData (
 @ CHECK:       0000: 1EFF2FE1 1EFF2FE1                    |../.../.|
 @ CHECK:     )
@@ -86,7 +87,7 @@ func2:
 @-------------------------------------------------------------------------------
 @ CHECK:   Section {
 @ CHECK:     Name: .ARM.exidx.TEST1
-@ CHECK:     Link: 4
+@ CHECK:     Link: 5
 @-------------------------------------------------------------------------------
 @ The first word should be the offset to .TEST1.
 @ The second word should be the offset to .ARM.extab.TEST1
@@ -123,7 +124,7 @@ func2:
 @ CHECK:     Binding: Global (0x1)
 @ CHECK:     Type: Function (0x2)
 @ CHECK:     Other: 0
-@ CHECK:     Section: .TEST1 (0x4)
+@ CHECK:     Section: .TEST1
 @ CHECK:   }
 @ CHECK:   Symbol {
 @ CHECK:     Name: func2
@@ -132,6 +133,6 @@ func2:
 @ CHECK:     Binding: Global (0x1)
 @ CHECK:     Type: Function (0x2)
 @ CHECK:     Other: 0
-@ CHECK:     Section: .TEST1 (0x4)
+@ CHECK:     Section: .TEST1
 @ CHECK:   }
 @ CHECK: ]

Modified: llvm/trunk/test/MC/ARM/eh-directive-section.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/eh-directive-section.s?rev=236145&r1=236144&r2=236145&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/eh-directive-section.s (original)
+++ llvm/trunk/test/MC/ARM/eh-directive-section.s Wed Apr 29 15:25:24 2015
@@ -50,8 +50,8 @@ func2:
 @-------------------------------------------------------------------------------
 @ CHECK: Sections [
 @ CHECK:   Section {
-@ CHECK:     Index: 4
-@ CHECK:     Name: .TEST1
+@ CHECK:     Index: 5
+@ CHECK-NEXT:     Name: .TEST1
 @ CHECK:     SectionData (
 @ CHECK:       0000: 1EFF2FE1                             |../.|
 @ CHECK:     )
@@ -84,7 +84,7 @@ func2:
 @-------------------------------------------------------------------------------
 @ This section should linked with .TEST1 section.
 @-------------------------------------------------------------------------------
-@ CHECK:     Link: 4
+@ CHECK:     Link: 5
 
 @-------------------------------------------------------------------------------
 @ The first word should be relocated to the code address in .TEST1 section.
@@ -109,8 +109,8 @@ func2:
 @ Check the TEST2 section (without the dot in the beginning)
 @-------------------------------------------------------------------------------
 @ CHECK:   Section {
-@ CHECK:     Index: 7
-@ CHECK:     Name: TEST2
+@ CHECK:     Index: 8
+@ CHECK-NEXT:     Name: TEST2
 @ CHECK:     SectionData (
 @ CHECK:       0000: 1EFF2FE1                             |../.|
 @ CHECK:     )
@@ -143,7 +143,7 @@ func2:
 @-------------------------------------------------------------------------------
 @ This section should linked with TEST2 section.
 @-------------------------------------------------------------------------------
-@ CHECK:     Link: 7
+@ CHECK:     Link: 8
 
 @-------------------------------------------------------------------------------
 @ The first word should be relocated to the code address in TEST2 section.
@@ -171,10 +171,10 @@ func2:
 @ CHECK: Symbols [
 @ CHECK:   Symbol {
 @ CHECK:     Name: func1
-@ CHECK:     Section: .TEST1 (0x4)
+@ CHECK:     Section: .TEST1
 @ CHECK:   }
 @ CHECK:   Symbol {
 @ CHECK:     Name: func2
-@ CHECK:     Section: TEST2 (0x7)
+@ CHECK:     Section: TEST2
 @ CHECK:   }
 @ CHECK: ]

Modified: llvm/trunk/test/MC/ARM/eh-directive-text-section.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/eh-directive-text-section.s?rev=236145&r1=236144&r2=236145&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/eh-directive-text-section.s (original)
+++ llvm/trunk/test/MC/ARM/eh-directive-text-section.s Wed Apr 29 15:25:24 2015
@@ -29,8 +29,8 @@ func1:
 @-------------------------------------------------------------------------------
 @ Check the index of .text section.  This will be used in .ARM.exidx.
 @-------------------------------------------------------------------------------
-@ CHECK:     Index: 1
-@ CHECK:     Name: .text
+@ CHECK:     Index: 2
+@ CHECK-NEXT:     Name: .text
 @ CHECK:     Type: SHT_PROGBITS (0x1)
 @ CHECK:     Flags [ (0x6)
 @ CHECK:       SHF_ALLOC (0x2)
@@ -58,7 +58,7 @@ func1:
 @ Check the linked section of the EXIDX section.  This should be the index
 @ of the .text section.
 @-------------------------------------------------------------------------------
-@ CHECK:     Link: 1
+@ CHECK:     Link: 2
 
 @-------------------------------------------------------------------------------
 @ The first word should be the offset to .text.  The second word should be

Modified: llvm/trunk/test/MC/ARM/eh-link.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/eh-link.s?rev=236145&r1=236144&r2=236145&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/eh-link.s (original)
+++ llvm/trunk/test/MC/ARM/eh-link.s Wed Apr 29 15:25:24 2015
@@ -8,7 +8,7 @@
 @ name first we could use a FileCheck variable.
 
 @ CHECK:      Section {
-@ CHECK:        Index: 6
+@ CHECK:        Index: 7
 @ CHECK-NEXT:   Name: .text
 @ CHECK-NEXT:   Type: SHT_PROGBITS
 @ CHECK-NEXT:   Flags [
@@ -25,7 +25,7 @@
 @ CHECK-NEXT:   EntrySize: 0
 @ CHECK-NEXT: }
 @ CHECK-NEXT: Section {
-@ CHECK-NEXT:   Index: 7
+@ CHECK-NEXT:   Index: 8
 @ CHECK-NEXT:   Name: .ARM.exidx
 @ CHECK-NEXT:   Type: SHT_ARM_EXIDX
 @ CHECK-NEXT:   Flags [
@@ -36,14 +36,14 @@
 @ CHECK-NEXT:   Address: 0x0
 @ CHECK-NEXT:   Offset: 0x58
 @ CHECK-NEXT:   Size: 8
-@ CHECK-NEXT:   Link: 6
+@ CHECK-NEXT:   Link: 7
 @ CHECK-NEXT:   Info: 0
 @ CHECK-NEXT:   AddressAlignment: 4
 @ CHECK-NEXT:   EntrySize: 0
 @ CHECK-NEXT: }
 
 @ CHECK:      Section {
-@ CHECK:        Index: 8
+@ CHECK:        Index: 9
 @ CHECK-NEXT:   Name: .text
 @ CHECK-NEXT:   Type: SHT_PROGBITS
 @ CHECK-NEXT:   Flags [
@@ -60,7 +60,7 @@
 @ CHECK-NEXT:   EntrySize: 0
 @ CHECK-NEXT: }
 @ CHECK-NEXT: Section {
-@ CHECK-NEXT:   Index: 9
+@ CHECK-NEXT:   Index: 10
 @ CHECK-NEXT:   Name: .ARM.exidx
 @ CHECK-NEXT:   Type: SHT_ARM_EXIDX
 @ CHECK-NEXT:   Flags [
@@ -71,7 +71,7 @@
 @ CHECK-NEXT:   Address: 0x0
 @ CHECK-NEXT:   Offset:
 @ CHECK-NEXT:   Size: 8
-@ CHECK-NEXT:   Link: 8
+@ CHECK-NEXT:   Link: 9
 @ CHECK-NEXT:   Info: 0
 @ CHECK-NEXT:   AddressAlignment: 4
 @ CHECK-NEXT:   EntrySize: 0

Modified: llvm/trunk/test/MC/ELF/comdat-dup-group-name.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/comdat-dup-group-name.s?rev=236145&r1=236144&r2=236145&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/comdat-dup-group-name.s (original)
+++ llvm/trunk/test/MC/ELF/comdat-dup-group-name.s Wed Apr 29 15:25:24 2015
@@ -2,35 +2,35 @@
 
 // Test that we produce two foo sections, each in separate groups
 
-// CHECK: Index: 1
+// CHECK: Index: 2
 // CHECK-NEXT: Name: .group
 
-// CHECK: Index: 2
+// CHECK: Index: 3
 // CHECK-NEXT: Name: .group
 
-// CHECK: Index: 6
+// CHECK: Index: 7
 // CHECK-NEXT: Name: .foo
 
-// CHECK: Index: 7
+// CHECK: Index: 8
 // CHECK-NEXT: Name: .foo
 
 // CHECK: Symbols [
 
 // CHECK: Name: f1
 // CHECK-NOT: }
-// CHECK: Section: .group (0x1)
+// CHECK: Section: .group (0x2)
 
 // CHECK: Name: f2
 // CHECK-NOT: }
-// CHECK: Section: .group (0x2)
+// CHECK: Section: .group (0x3)
 
 // CHECK: Name: .foo
 // CHECK-NOT: }
-// CHECK: Section: .foo (0x6)
+// CHECK: Section: .foo (0x7)
 
 // CHECK: Name: .foo
 // CHECK-NOT: }
-// CHECK: Section: .foo (0x7)
+// CHECK: Section: .foo (0x8)
 
 
 	.section	.foo,"axG", at progbits,f1,comdat

Modified: llvm/trunk/test/MC/ELF/comdat-reloc.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/comdat-reloc.s?rev=236145&r1=236144&r2=236145&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/comdat-reloc.s (original)
+++ llvm/trunk/test/MC/ELF/comdat-reloc.s Wed Apr 29 15:25:24 2015
@@ -16,14 +16,14 @@ world:
 // CHECK:  Name: .group
 // CHECK-NOT: SectionData
 // CHECK: SectionData
-// CHECK-NEXT: 0000: 01000000 05000000 07000000
+// CHECK-NEXT: 0000: 01000000 06000000 08000000
 
-// CHECK: Index: 5
+// CHECK: Index: 6
 // CHECK-NEXT: Name: .text.world
 // CHECK-NOT: Section {
 // CHECK: SHF_GROUP
 
-// CHECK: Index: 7
+// CHECK: Index: 8
 // CHECK-NEXT: Name: .rela.text.world
 // CHECK-NOT: Section {
 // CHECK: SHF_GROUP

Modified: llvm/trunk/test/MC/ELF/comdat.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/comdat.s?rev=236145&r1=236144&r2=236145&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/comdat.s (original)
+++ llvm/trunk/test/MC/ELF/comdat.s Wed Apr 29 15:25:24 2015
@@ -4,7 +4,7 @@
 // of the file.
 
 // CHECK:        Section {
-// CHECK:          Index: 1
+// CHECK:          Index: 2
 // CHECK-NEXT:     Name: .group
 // CHECK-NEXT:     Type: SHT_GROUP
 // CHECK-NEXT:     Flags [
@@ -12,13 +12,13 @@
 // CHECK-NEXT:     Address: 0x0
 // CHECK-NEXT:     Offset: 0x40
 // CHECK-NEXT:     Size: 12
-// CHECK-NEXT:     Link: 13
+// CHECK-NEXT:     Link:
 // CHECK-NEXT:     Info: 1
 // CHECK-NEXT:     AddressAlignment: 4
 // CHECK-NEXT:     EntrySize: 4
 // CHECK-NEXT:   }
 // CHECK-NEXT:   Section {
-// CHECK-NEXT:     Index: 2
+// CHECK-NEXT:     Index: 3
 // CHECK-NEXT:     Name: .group
 // CHECK-NEXT:     Type: SHT_GROUP
 // CHECK-NEXT:     Flags [
@@ -26,13 +26,13 @@
 // CHECK-NEXT:     Address: 0x0
 // CHECK-NEXT:     Offset: 0x4C
 // CHECK-NEXT:     Size: 8
-// CHECK-NEXT:     Link: 13
+// CHECK-NEXT:     Link:
 // CHECK-NEXT:     Info: 2
 // CHECK-NEXT:     AddressAlignment: 4
 // CHECK-NEXT:     EntrySize: 4
 // CHECK-NEXT:   }
 // CHECK-NEXT:   Section {
-// CHECK-NEXT:     Index: 3
+// CHECK-NEXT:     Index: 4
 // CHECK-NEXT:     Name: .group
 // CHECK-NEXT:     Type: SHT_GROUP
 // CHECK-NEXT:     Flags [
@@ -40,7 +40,7 @@
 // CHECK-NEXT:     Address: 0x0
 // CHECK-NEXT:     Offset: 0x54
 // CHECK-NEXT:     Size: 12
-// CHECK-NEXT:     Link: 13
+// CHECK-NEXT:     Link:
 // CHECK-NEXT:     Info: 10
 // CHECK-NEXT:     AddressAlignment: 4
 // CHECK-NEXT:     EntrySize: 4
@@ -55,7 +55,7 @@
 // CHECK-NEXT:     Binding: Local
 // CHECK-NEXT:     Type: None
 // CHECK-NEXT:     Other: 0
-// CHECK-NEXT:     Section: .foo (0x7)
+// CHECK-NEXT:     Section: .foo
 // CHECK-NEXT:   }
 // CHECK-NEXT:   Symbol {
 // CHECK-NEXT:     Name: g2
@@ -64,7 +64,7 @@
 // CHECK-NEXT:     Binding: Local
 // CHECK-NEXT:     Type: None
 // CHECK-NEXT:     Other: 0
-// CHECK-NEXT:     Section: .group (0x2)
+// CHECK-NEXT:     Section: .group (0x3)
 // CHECK-NEXT:   }
 
 // CHECK:        Symbol {

Modified: llvm/trunk/test/MC/ELF/empty.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/empty.s?rev=236145&r1=236144&r2=236145&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/empty.s (original)
+++ llvm/trunk/test/MC/ELF/empty.s Wed Apr 29 15:25:24 2015
@@ -1,9 +1,22 @@
 // RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s | FileCheck %s
 
 // Test that like gnu as we create text, data and bss by default. Also test
-// that shstrtab, symtab and strtab are listed in that order.
+// that shstrtab, symtab and strtab are listed.
 
 // CHECK:        Section {
+// CHECK:          Name: .shstrtab
+// CHECK-NEXT:     Type: SHT_STRTAB
+// CHECK-NEXT:     Flags [
+// CHECK-NEXT:     ]
+// CHECK-NEXT:     Address: 0x0
+// CHECK-NEXT:     Offset:
+// CHECK-NEXT:     Size: 44
+// CHECK-NEXT:     Link: 0
+// CHECK-NEXT:     Info: 0
+// CHECK-NEXT:     AddressAlignment: 1
+// CHECK-NEXT:     EntrySize: 0
+// CHECK-NEXT:   }
+// CHECK:        Section {
 // CHECK:          Name: .text
 // CHECK-NEXT:     Type: SHT_PROGBITS
 // CHECK-NEXT:     Flags [
@@ -49,19 +62,6 @@
 // CHECK-NEXT:     EntrySize: 0
 // CHECK-NEXT:   }
 // CHECK:        Section {
-// CHECK:          Name: .shstrtab
-// CHECK-NEXT:     Type: SHT_STRTAB
-// CHECK-NEXT:     Flags [
-// CHECK-NEXT:     ]
-// CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x40
-// CHECK-NEXT:     Size: 44
-// CHECK-NEXT:     Link: 0
-// CHECK-NEXT:     Info: 0
-// CHECK-NEXT:     AddressAlignment: 1
-// CHECK-NEXT:     EntrySize: 0
-// CHECK-NEXT:   }
-// CHECK:        Section {
 // CHECK:          Name: .symtab
 // CHECK-NEXT:     Type: SHT_SYMTAB
 // CHECK-NEXT:     Flags [
@@ -69,7 +69,7 @@
 // CHECK-NEXT:     Address: 0x0
 // CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size: 96
-// CHECK-NEXT:     Link: 6
+// CHECK-NEXT:     Link:
 // CHECK-NEXT:     Info: 4
 // CHECK-NEXT:     AddressAlignment: 8
 // CHECK-NEXT:     EntrySize: 24

Modified: llvm/trunk/test/MC/ELF/many-sections-2.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/many-sections-2.s?rev=236145&r1=236144&r2=236145&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/many-sections-2.s (original)
+++ llvm/trunk/test/MC/ELF/many-sections-2.s Wed Apr 29 15:25:24 2015
@@ -18,7 +18,7 @@
 // SYMBOLS-NEXT:    Binding: Local (0x0)
 // SYMBOLS-NEXT:    Type: None (0x0)
 // SYMBOLS-NEXT:    Other: 0
-// SYMBOLS-NEXT:    Section: last (0xFF00)
+// SYMBOLS-NEXT:    Section: dm (0xFF00)
 // SYMBOLS-NEXT:  }
 // SYMBOLS-NEXT:  Symbol {
 // SYMBOLS-NEXT:    Name: b
@@ -27,18 +27,18 @@
 // SYMBOLS-NEXT:    Binding: Local (0x0)
 // SYMBOLS-NEXT:    Type: None (0x0)
 // SYMBOLS-NEXT:    Other: 0
-// SYMBOLS-NEXT:    Section: last (0xFF00)
+// SYMBOLS-NEXT:    Section: dm (0xFF00)
 // SYMBOLS-NEXT:  }
 
 
 // Test that this file has one section too many.
-// SYMBOLS:         Name: last
+// SYMBOLS:         Name: dm
 // SYMBOLS-NEXT:    Value: 0x0
 // SYMBOLS-NEXT:    Size: 0
 // SYMBOLS-NEXT:    Binding: Local (0x0)
 // SYMBOLS-NEXT:    Type: Section (0x3)
 // SYMBOLS-NEXT:    Other: 0
-// SYMBOLS-NEXT:    Section: last (0xFF00)
+// SYMBOLS-NEXT:    Section: dm (0xFF00)
 // SYMBOLS-NEXT:  }
 // SYMBOLS-NEXT:]
 
@@ -128,6 +128,5 @@ gen_sections16 k
 gen_sections8 l
 gen_sections4 m
 
-.section last
 a:
 b = a + 1

Modified: llvm/trunk/test/MC/ELF/many-sections.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/many-sections.s?rev=236145&r1=236144&r2=236145&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/many-sections.s (original)
+++ llvm/trunk/test/MC/ELF/many-sections.s Wed Apr 29 15:25:24 2015
@@ -9,13 +9,13 @@
 
 // Check the last referenced section.
 
-// SYMBOLS:         Name: dm (0)
+// SYMBOLS:         Name: zed
 // SYMBOLS-NEXT:    Value: 0x0
 // SYMBOLS-NEXT:    Size: 0
 // SYMBOLS-NEXT:    Binding: Local (0x0)
 // SYMBOLS-NEXT:    Type: Section (0x3)
 // SYMBOLS-NEXT:    Other: 0
-// SYMBOLS-NEXT:    Section: dm (0xFEFF)
+// SYMBOLS-NEXT:    Section: zed (0xFEFF)
 // SYMBOLS-NEXT:  }
 // SYMBOLS-NEXT:]
 
@@ -103,4 +103,6 @@ gen_sections64 i
 gen_sections32 j
 gen_sections16 k
 gen_sections8 l
-gen_sections4 m
+        .section foo
+        .section bar
+        .section zed

Modified: llvm/trunk/test/MC/ELF/section-sym.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/section-sym.s?rev=236145&r1=236144&r2=236145&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/section-sym.s (original)
+++ llvm/trunk/test/MC/ELF/section-sym.s Wed Apr 29 15:25:24 2015
@@ -7,9 +7,9 @@
 
 // Test that the relocation points to the first section foo.
 
-// The first seciton foo has index 6
+// The first seciton foo has index 7
 // CHECK:      Section {
-// CHECK:        Index:   6
+// CHECK:        Index:   7
 // CHECK-NEXT:   Name:    foo (28)
 // CHECK-NEXT:   Type:    SHT_PROGBITS (0x1)
 // CHECK-NEXT:   Flags [ (0x202)
@@ -25,7 +25,7 @@
 // CHECK-NEXT:   EntrySize:       0
 // CHECK-NEXT: }
 // CHECK-NEXT: Section {
-// CHECK-NEXT:   Index:   7
+// CHECK-NEXT:   Index:   8
 // CHECK-NEXT:   Name:    foo (28)
 // CHECK-NEXT:   Type:    SHT_PROGBITS (0x1)
 // CHECK-NEXT:   Flags [ (0x200)
@@ -42,7 +42,7 @@
 
 // The relocation points to symbol 6
 // CHECK:      Relocations [
-// CHECK-NEXT:   Section (9) .relabar {
+// CHECK-NEXT:   Section ({{.*}}) .relabar {
 // CHECK-NEXT:     Relocation {
 // CHECK-NEXT:       Offset:  0x0
 // CHECK-NEXT:       Type:    R_X86_64_32 (10)
@@ -83,9 +83,9 @@
 // symbol 6
 // CHECK-NOT: Name
 // CHECK: Name:    foo
-// CHECK: Section: foo (0x6)
+// CHECK: Section: foo (0x7)
 
 // symbol 7
 // CHECK-NOT: Name
 // CHECK: Name:    foo
-// CHECK: Section: foo (0x7)
+// CHECK: Section: foo (0x8)

Modified: llvm/trunk/test/MC/ELF/section-unique.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/section-unique.s?rev=236145&r1=236144&r2=236145&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/section-unique.s (original)
+++ llvm/trunk/test/MC/ELF/section-unique.s Wed Apr 29 15:25:24 2015
@@ -26,7 +26,7 @@ g:
 // OBJ:   Binding: Global
 // OBJ:   Type:    None
 // OBJ:   Other:   0
-// OBJ:   Section: .text (0x4)
+// OBJ:   Section: .text (0x5)
 // OBJ: }
 // OBJ: Symbol {
 // OBJ:   Name:    g
@@ -35,5 +35,5 @@ g:
 // OBJ:   Binding: Global
 // OBJ:   Type:    None
 // OBJ:   Other:   0
-// OBJ:   Section: .text (0x5)
+// OBJ:   Section: .text (0x6)
 // OBJ: }





More information about the llvm-commits mailing list