Don't create empty sections just to look like gas.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 3 Nov 2015 20:02:22 +0000 (20:02 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 3 Nov 2015 20:02:22 +0000 (20:02 +0000)
We are long past the time when this much bug for bug compatibility was
useful.

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

16 files changed:
lib/MC/MCELFStreamer.cpp
test/MC/ARM/eh-directive-section-comdat.s
test/MC/ARM/eh-directive-section-multiple-func.s
test/MC/ARM/eh-directive-section.s
test/MC/ARM/eh-link.s
test/MC/ELF/align.s
test/MC/ELF/comdat-dup-group-name.s
test/MC/ELF/comdat-reloc.s
test/MC/ELF/comdat.s
test/MC/ELF/empty.s
test/MC/ELF/many-sections-2.s
test/MC/ELF/many-sections-3.s
test/MC/ELF/many-sections.s
test/MC/ELF/section-sym.s
test/MC/ELF/section-unique.s
test/MC/ELF/strtab-suffix-opt.s

index 7b45506a3493e8c133555fdef87d4f0115ced7cc..06d161bccab48579fe318aa7be88faef6ca5d297 100644 (file)
@@ -86,20 +86,10 @@ void MCELFStreamer::mergeFragment(MCDataFragment *DF,
 }
 
 void MCELFStreamer::InitSections(bool NoExecStack) {
-  // This emulates the same behavior of GNU as. This makes it easier
-  // to compare the output as the major sections are in the same order.
   MCContext &Ctx = getContext();
   SwitchSection(Ctx.getObjectFileInfo()->getTextSection());
   EmitCodeAlignment(4);
 
-  SwitchSection(Ctx.getObjectFileInfo()->getDataSection());
-  EmitCodeAlignment(4);
-
-  SwitchSection(Ctx.getObjectFileInfo()->getBSSSection());
-  EmitCodeAlignment(4);
-
-  SwitchSection(Ctx.getObjectFileInfo()->getTextSection());
-
   if (NoExecStack)
     SwitchSection(Ctx.getAsmInfo()->getNonexecutableStackSection(Ctx));
 }
index 9c7160ea5e74ec4bad87be07b703761c97733e05..8b7f32eaece99e39a4a20b8e08c2bac82d895b74 100644 (file)
@@ -53,8 +53,8 @@ func1:
 @ These are the section indexes of .TEST1, .ARM.extab.TEST1, .ARM.exidx.TEST1,
 @ .rel.ARM.extab.TEST1, and .rel.ARM.exidx.TEST1.
 @-------------------------------------------------------------------------------
-@ CHECK-NEXT:     0000: 01000000 06000000 07000000 08000000
-@ CHECK-NEXT:     0010: 09000000 0A000000
+@ CHECK-NEXT:     0000: 01000000 04000000 05000000 06000000
+@ CHECK-NEXT:     0010: 07000000 08000000
 @ CHECK-NEXT:     )
 @ CHECK:   }
 
@@ -63,7 +63,7 @@ func1:
 @ Check the .TEST1 section
 @-------------------------------------------------------------------------------
 @ CHECK:   Section {
-@ CHECK:     Index: 6
+@ CHECK:     Index: 4
 @ CHECK-NEXT:     Name: .TEST1
 @ CHECK:     Type: SHT_PROGBITS (0x1)
 @-------------------------------------------------------------------------------
@@ -81,7 +81,7 @@ func1:
 @ Check the .ARM.extab.TEST1 section
 @-------------------------------------------------------------------------------
 @ CHECK:   Section {
-@ CHECK:     Index: 7
+@ CHECK:     Index: 5
 @ CHECK-NEXT:     Name: .ARM.extab.TEST1
 @ CHECK:     Type: SHT_PROGBITS (0x1)
 @-------------------------------------------------------------------------------
@@ -94,7 +94,7 @@ func1:
 @ CHECK:   }
 
 @ CHECK:   Section {
-@ CHECK:     Index: 8
+@ CHECK:     Index: 6
 @ CHECK-NEXT:     Name: .rel.ARM.extab.TEST1
 @ CHECK: }
 
@@ -102,7 +102,7 @@ func1:
 @ Check the .ARM.exidx.TEST1 section
 @-------------------------------------------------------------------------------
 @ CHECK:   Section {
-@ CHECK:     Index: 9
+@ CHECK:     Index: 7
 @ CHECK-NEXT:     Name: .ARM.exidx.TEST1
 @ CHECK:     Type: SHT_ARM_EXIDX (0x70000001)
 @-------------------------------------------------------------------------------
@@ -113,12 +113,12 @@ func1:
 @ CHECK:       SHF_GROUP (0x200)
 @ CHECK:       SHF_LINK_ORDER (0x80)
 @ CHECK:     ]
-@ CHECK:     Link: 6
+@ CHECK:     Link: 4
 @ CHECK:   }
 
 
 @ CHECK:   Section {
-@ CHECK:     Index: 10
+@ CHECK:     Index: 8
 @ CHECK-NEXT:     Name: .rel.ARM.exidx.TEST1
 @ CHECK: }
 
index e5307cf9190cd0a1fc6579fd8ac81c3501e9612e..53c498ab87be83d2008ca8de0b464eac7aef08ed 100644 (file)
@@ -54,7 +54,7 @@ func2:
 @ Check the .TEST1 section.  There should be two "bx lr" instructions.
 @-------------------------------------------------------------------------------
 @ CHECK:   Section {
-@ CHECK:     Index: 5
+@ CHECK:     Index: 3
 @ CHECK-NEXT:     Name: .TEST1
 @ CHECK:     SectionData (
 @ CHECK:       0000: 1EFF2FE1 1EFF2FE1                    |../.../.|
@@ -87,7 +87,7 @@ func2:
 @-------------------------------------------------------------------------------
 @ CHECK:   Section {
 @ CHECK:     Name: .ARM.exidx.TEST1
-@ CHECK:     Link: 5
+@ CHECK:     Link: 3
 @-------------------------------------------------------------------------------
 @ The first word should be the offset to .TEST1.
 @ The second word should be the offset to .ARM.extab.TEST1
index e36d9a99aaf5fbc79f041210644696fa7311f03f..bd41fbe5eeea4d129f57e16dadc291ecaf1afcab 100644 (file)
@@ -50,7 +50,7 @@ func2:
 @-------------------------------------------------------------------------------
 @ CHECK: Sections [
 @ CHECK:   Section {
-@ CHECK:     Index: 5
+@ CHECK:     Index: 3
 @ CHECK-NEXT:     Name: .TEST1
 @ CHECK:     SectionData (
 @ CHECK:       0000: 1EFF2FE1                             |../.|
@@ -84,7 +84,7 @@ func2:
 @-------------------------------------------------------------------------------
 @ This section should linked with .TEST1 section.
 @-------------------------------------------------------------------------------
-@ CHECK:     Link: 5
+@ CHECK:     Link: 3
 
 @-------------------------------------------------------------------------------
 @ The first word should be relocated to the code address in .TEST1 section.
@@ -109,7 +109,7 @@ func2:
 @ Check the TEST2 section (without the dot in the beginning)
 @-------------------------------------------------------------------------------
 @ CHECK:   Section {
-@ CHECK:     Index: 10
+@ CHECK:     Index: 8
 @ CHECK-NEXT:     Name: TEST2
 @ CHECK:     SectionData (
 @ CHECK:       0000: 1EFF2FE1                             |../.|
@@ -143,7 +143,7 @@ func2:
 @-------------------------------------------------------------------------------
 @ This section should linked with TEST2 section.
 @-------------------------------------------------------------------------------
-@ CHECK:     Link: 10
+@ CHECK:     Link: 8
 
 @-------------------------------------------------------------------------------
 @ The first word should be relocated to the code address in TEST2 section.
index e14fb0638b91c8330acc76f1396d4b20d61cad72..19fe14db5f30c1f06b844bfb87d1c7e7c40cde7a 100644 (file)
@@ -8,7 +8,7 @@
 @ name first we could use a FileCheck variable.
 
 @ CHECK:      Section {
-@ CHECK:        Index: 6
+@ CHECK:        Index: 4
 @ 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: 5
 @ CHECK-NEXT:   Name: .ARM.exidx
 @ CHECK-NEXT:   Type: SHT_ARM_EXIDX
 @ CHECK-NEXT:   Flags [
 @ CHECK-NEXT:   Address: 0x0
 @ CHECK-NEXT:   Offset:
 @ CHECK-NEXT:   Size: 8
-@ CHECK-NEXT:   Link: 6
+@ CHECK-NEXT:   Link: 4
 @ CHECK-NEXT:   Info: 0
 @ CHECK-NEXT:   AddressAlignment: 4
 @ CHECK-NEXT:   EntrySize: 0
 @ CHECK-NEXT: }
 
 @ CHECK:      Section {
-@ CHECK:        Index: 10
+@ CHECK:        Index: 8
 @ 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: 11
+@ CHECK-NEXT:   Index: 9
 @ 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: 10
+@ CHECK-NEXT:   Link: 8
 @ CHECK-NEXT:   Info: 0
 @ CHECK-NEXT:   AddressAlignment: 4
 @ CHECK-NEXT:   EntrySize: 0
index 43f5b548d9eea64329f000da8ce8f87581589531..7e78298540f51e0d51d288bb80406e910e1fd94c 100644 (file)
@@ -1,22 +1,22 @@
 // RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s | FileCheck %s
 
 // Test that the alignment of rodata doesn't force a alignment of the
-// previous section (.bss)
+// previous section (.text)
 
        nop
        .section        .rodata,"a",@progbits
        .align  8
 
 // CHECK:        Section {
-// CHECK:          Name: .bss
-// CHECK-NEXT:     Type: SHT_NOBITS
+// CHECK:          Name: .text
+// CHECK-NEXT:     Type:
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:       SHF_ALLOC
-// CHECK-NEXT:       SHF_WRITE
+// CHECK-NEXT:       SHF_EXECINSTR
 // CHECK-NEXT:     ]
-// CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x44
-// CHECK-NEXT:     Size: 0
+// CHECK-NEXT:     Address:
+// CHECK-NEXT:     Offset:
+// CHECK-NEXT:     Size:
 // CHECK-NEXT:     Link: 0
 // CHECK-NEXT:     Info: 0
 // CHECK-NEXT:     AddressAlignment: 4
index e52f3dcc04d1cfd844b110b33acd40a8dd597bf3..e11cba62b4028c1a7f821e22f14b09e18947fad8 100644 (file)
@@ -2,27 +2,27 @@
 
 // Test that we produce two foo sections, each in separate groups
 
-// CHECK: Index: 5
+// CHECK: Index: 3
 // CHECK-NEXT: Name: .group
 
-// CHECK: Index: 6
+// CHECK: Index: 4
 // CHECK-NEXT: Name: .foo
 
-// CHECK: Index: 7
+// CHECK: Index: 5
 // CHECK-NEXT: Name: .group
 
-// CHECK: Index: 8
+// CHECK: Index: 6
 // CHECK-NEXT: Name: .foo
 
 // CHECK: Symbols [
 
 // CHECK: Name: f1
 // CHECK-NOT: }
-// CHECK: Section: .group (0x5)
+// CHECK: Section: .group (0x3)
 
 // CHECK: Name: f2
 // CHECK-NOT: }
-// CHECK: Section: .group (0x7)
+// CHECK: Section: .group (0x5)
 
        .section        .foo,"axG",@progbits,f1,comdat
         nop
index 1ea3d1e57efaf29f30d0d96a21254701e86cb766..bc126f67fee0f28f5461cbecbd1594a0387f618e 100644 (file)
@@ -16,14 +16,14 @@ world:
 // CHECK:  Name: .group
 // CHECK-NOT: SectionData
 // CHECK: SectionData
-// CHECK-NEXT: 0000: 01000000 07000000 08000000
+// CHECK-NEXT: 0000: 01000000 05000000 06000000
 
-// CHECK: Index: 7
+// CHECK: Index: 5
 // CHECK-NEXT: Name: .text.world
 // CHECK-NOT: Section {
 // CHECK: SHF_GROUP
 
-// CHECK: Index: 8
+// CHECK: Index: 6
 // CHECK-NEXT: Name: .rela.text.world
 // CHECK-NOT: Section {
 // CHECK: SHF_GROUP
index 18da17e6118cd4f9beee54eea32d7a2a4a99e764..5e6fc64bac41795c26f00c30dfd7b80170ec70e4 100644 (file)
@@ -3,7 +3,7 @@
 // Test that we produce the group sections and that they are before the members
 
 // CHECK:        Section {
-// CHECK:          Index: 5
+// CHECK:          Index: 3
 // CHECK-NEXT:     Name: .group
 // CHECK-NEXT:     Type: SHT_GROUP
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     AddressAlignment: 4
 // CHECK-NEXT:     EntrySize: 4
 // CHECK-NEXT:     SectionData (
-// CHECK-NEXT:       0000:    01000000 06000000 07000000
+// CHECK-NEXT:       0000:    01000000 04000000 05000000
 // CHECK-NEXT:     )
 // CHECK-NEXT:   }
 // CHECK:        Section {
-// CHECK:          Index: 8
+// CHECK:          Index: 6
 // CHECK-NEXT:     Name: .group
 // CHECK-NEXT:     Type: SHT_GROUP
 // CHECK-NEXT:     Flags [
 // CHECK-NEXT:     AddressAlignment: 4
 // CHECK-NEXT:     EntrySize: 4
 // CHECK-NEXT:     SectionData (
-// CHECK-NEXT:       0000:    01000000 09000000
+// CHECK-NEXT:       0000:    01000000 07000000
 // CHECK-NEXT:     )
 // CHECK-NEXT:   }
 // CHECK:        Section {
-// CHECK:          Index: 10
+// CHECK:          Index: 8
 // CHECK-NEXT:     Name: .group
 // CHECK-NEXT:     Type: SHT_GROUP
 // CHECK-NEXT:     Flags [
@@ -50,7 +50,7 @@
 // CHECK-NEXT:     AddressAlignment: 4
 // CHECK-NEXT:     EntrySize: 4
 // CHECK-NEXT:     SectionData (
-// CHECK-NEXT:       0000:    01000000 0B000000 0C000000
+// CHECK-NEXT:       0000:    01000000 09000000 0A000000
 // CHECK-NEXT:     )
 // CHECK-NEXT:   }
 
@@ -72,7 +72,7 @@
 // CHECK-NEXT:     Binding: Local
 // CHECK-NEXT:     Type: None
 // CHECK-NEXT:     Other: 0
-// CHECK-NEXT:     Section: .group (0x8)
+// CHECK-NEXT:     Section: .group
 // CHECK-NEXT:   }
 
 // CHECK:        Symbol {
index 7b686fef3a2347c0165814ff9a311ed3d1e4b06e..ea88803a31d3550985ecd419daedc859ca9c8f9a 100644 (file)
@@ -10,8 +10,8 @@
 // DARWIN-NEXT:  Arch: x86_64
 // WINDOWS-NEXT: Arch: x86_64
 
-// Test that like gnu as we create text, data and bss by default. Also test
-// that symtab and strtab are listed.
+// Test that we create text by default. Also test that symtab and strtab are
+// listed.
 
 // CHECK:        Section {
 // CHECK:          Name: .strtab
@@ -20,7 +20,7 @@
 // CHECK-NEXT:     ]
 // CHECK-NEXT:     Address: 0x0
 // CHECK-NEXT:     Offset:
-// CHECK-NEXT:     Size: 34
+// CHECK-NEXT:     Size: 23
 // CHECK-NEXT:     Link: 0
 // CHECK-NEXT:     Info: 0
 // CHECK-NEXT:     AddressAlignment: 1
 // CHECK-NEXT:     EntrySize: 0
 // CHECK-NEXT:   }
 // CHECK:        Section {
-// CHECK:          Name: .data
-// CHECK-NEXT:     Type: SHT_PROGBITS
-// CHECK-NEXT:     Flags [
-// CHECK-NEXT:       SHF_ALLOC
-// CHECK-NEXT:       SHF_WRITE
-// CHECK-NEXT:     ]
-// CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x40
-// CHECK-NEXT:     Size: 0
-// CHECK-NEXT:     Link: 0
-// CHECK-NEXT:     Info: 0
-// CHECK-NEXT:     AddressAlignment: 4
-// CHECK-NEXT:     EntrySize: 0
-// CHECK-NEXT:   }
-// CHECK:        Section {
-// CHECK:          Name: .bss
-// CHECK-NEXT:     Type: SHT_NOBITS
-// CHECK-NEXT:     Flags [
-// CHECK-NEXT:       SHF_ALLOC
-// CHECK-NEXT:       SHF_WRITE
-// CHECK-NEXT:     ]
-// CHECK-NEXT:     Address: 0x0
-// CHECK-NEXT:     Offset: 0x40
-// CHECK-NEXT:     Size: 0
-// CHECK-NEXT:     Link: 0
-// CHECK-NEXT:     Info: 0
-// CHECK-NEXT:     AddressAlignment: 4
-// CHECK-NEXT:     EntrySize: 0
-// CHECK-NEXT:   }
-// CHECK:        Section {
 // CHECK:          Name: .symtab
 // CHECK-NEXT:     Type: SHT_SYMTAB
 // CHECK-NEXT:     Flags [
index 0077552ef313064decd89ff9b7d2acb79b8602bf..2c3e4b87bb89314ac8a1ede94a07862491ebbc74 100644 (file)
         gen_sections16384 b\x
 .endm
 
+        .section foo
+        .section bar
+
 gen_sections32768 a
 gen_sections16384 b
 gen_sections8192 c
index 02d30a60523b93699ac1586bf7a4d2999b988e4a..ec198480916cd7110d2ac4e519f2cd784be18f13 100644 (file)
@@ -102,6 +102,8 @@ gen_sections8 l
 gen_sections4 m
 
         .section foo
+        .section foo2
+        .section foo3
         .section bar, "a"
 
 a:
index 2db6abb9321bf30127da7d3894513e514a8eb656..b1348f3b7c3647cd7cf8b047d163117aed6aeb1b 100644 (file)
@@ -103,7 +103,6 @@ gen_sections64 i
 gen_sections32 j
 gen_sections16 k
 gen_sections8 l
-        .section foo
-        .section bar
+gen_sections4 m
         .section zed
 .long zed
index 4a9484d9b77922d8c91b602c7a969d1b34757ffd..9e660526b7adfc8914962f5c3f1aadf34d947888 100644 (file)
@@ -9,8 +9,8 @@
 
 // The first seciton foo has index 6
 // CHECK:      Section {
-// CHECK:        Index:   6
-// CHECK-NEXT:   Name:    foo (28)
+// CHECK:        Index:   4
+// CHECK-NEXT:   Name:    foo
 // CHECK-NEXT:   Type:    SHT_PROGBITS (0x1)
 // CHECK-NEXT:   Flags [ (0x202)
 // CHECK-NEXT:     SHF_ALLOC (0x2)
@@ -25,8 +25,8 @@
 // CHECK-NEXT:   EntrySize:       0
 // CHECK-NEXT: }
 // CHECK:      Section {
-// CHECK:        Index:   8
-// CHECK-NEXT:   Name:    foo (28)
+// CHECK:        Index:   6
+// CHECK-NEXT:   Name:    foo
 // CHECK-NEXT:   Type:    SHT_PROGBITS (0x1)
 // CHECK-NEXT:   Flags [ (0x200)
 // CHECK-NEXT:     SHF_GROUP (0x200)
 // CHECK-NEXT:    Section: Undefined (0x0)
 // CHECK-NEXT:  }
 // CHECK-NEXT:  Symbol {
-// CHECK-NEXT:    Name: f1 (57)
+// CHECK-NEXT:    Name: f1
 // CHECK-NEXT:    Value: 0x0
 // CHECK-NEXT:    Size: 0
 // CHECK-NEXT:    Binding: Local (0x0)
 // CHECK-NEXT:    Type: None (0x0)
 // CHECK-NEXT:    Other: 0
-// CHECK-NEXT:    Section: .group (0x5)
+// CHECK-NEXT:    Section: .group
 // CHECK-NEXT:  }
 // CHECK-NEXT:  Symbol {
-// CHECK-NEXT:    Name: f2 (54)
+// CHECK-NEXT:    Name: f2
 // CHECK-NEXT:    Value: 0x0
 // CHECK-NEXT:    Size: 0
 // CHECK-NEXT:    Binding: Local (0x0)
 // CHECK-NEXT:    Type: None (0x0)
 // CHECK-NEXT:    Other: 0
-// CHECK-NEXT:    Section: .group (0x7)
+// CHECK-NEXT:    Section: .group
 // CHECK-NEXT:  }
 // CHECK-NEXT:  Symbol {
 // CHECK-NEXT:    Name:  (0)
@@ -88,6 +88,6 @@
 // CHECK-NEXT:    Binding: Local (0x0)
 // CHECK-NEXT:    Type: Section (0x3)
 // CHECK-NEXT:    Other: 0
-// CHECK-NEXT:    Section: foo (0x6)
+// CHECK-NEXT:    Section: foo (0x4)
 // CHECK-NEXT:  }
 // CHECK-NEXT: ]
index bd15148f6d83283da3eb62ec84c059313e3ff9e7..b56666130fdf330bfc80a445e88474c7a8df9c21 100644 (file)
@@ -26,7 +26,7 @@ g:
 // OBJ:   Binding: Global
 // OBJ:   Type:    None
 // OBJ:   Other:   0
-// OBJ:   Section: .text (0x5)
+// OBJ:   Section: .text (0x3)
 // OBJ: }
 // OBJ: Symbol {
 // OBJ:   Name:    g
@@ -35,5 +35,5 @@ g:
 // OBJ:   Binding: Global
 // OBJ:   Type:    None
 // OBJ:   Other:   0
-// OBJ:   Section: .text (0x6)
+// OBJ:   Section: .text (0x4)
 // OBJ: }
index 96d15005c618570d5b3fd69f8c373fa4cacb48a0..69aa0933c9967b130bb758023806f25197ccdcca 100644 (file)
@@ -16,6 +16,6 @@ foobar:
 .Ltmp3:
        .size   foobar, .Ltmp3-foobar
 
-// CHECK:     Name: bar (19)
-// CHECK:     Name: foo (23)
-// CHECK:     Name: foobar (16)
+// CHECK:     Name: bar (14)
+// CHECK:     Name: foo (18)
+// CHECK:     Name: foobar (11)