diff options
author | Fangrui Song <i@maskray.me> | 2024-06-06 12:13:19 -0700 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2024-06-06 12:13:19 -0700 |
commit | 9ad0175ea0099351050e1dfb0074d9938f469404 (patch) | |
tree | 695fd7efeee97ec714678ae7ed8cfa5902439af5 /lld/test | |
parent | c771b670eabbd38867d43475dacd35a1b572e9b5 (diff) | |
download | llvm-9ad0175ea0099351050e1dfb0074d9938f469404.zip llvm-9ad0175ea0099351050e1dfb0074d9938f469404.tar.gz llvm-9ad0175ea0099351050e1dfb0074d9938f469404.tar.bz2 |
[ELF] Keep non-alloc orphan sections at the end
https://reviews.llvm.org/D85867 changed the way we assign file offsets
(alloc sections first, then non-alloc sections).
It also removed a non-alloc special case from `findOrphanPos`.
Looking at the memory-nonalloc-no-warn.test change, which would be
needed by #93761, it makes sense to restore the previous behavior: when
placing non-alloc orphan sections, keep these sections at the end so
that the section index order matches the file offset order.
This change is cosmetic. In sections-nonalloc.s, GNU ld places the
orphan `other3` in the middle and the orphan .symtab/.shstrtab/.strtab
at the end.
Pull Request: https://github.com/llvm/llvm-project/pull/94519
Diffstat (limited to 'lld/test')
-rw-r--r-- | lld/test/ELF/linkerscript/memory-nonalloc-no-warn.test | 22 | ||||
-rw-r--r-- | lld/test/ELF/linkerscript/sections-nonalloc.s | 28 | ||||
-rw-r--r-- | lld/test/ELF/linkerscript/sections.s | 4 |
3 files changed, 27 insertions, 27 deletions
diff --git a/lld/test/ELF/linkerscript/memory-nonalloc-no-warn.test b/lld/test/ELF/linkerscript/memory-nonalloc-no-warn.test index 2dcd0f8..eabdf75 100644 --- a/lld/test/ELF/linkerscript/memory-nonalloc-no-warn.test +++ b/lld/test/ELF/linkerscript/memory-nonalloc-no-warn.test @@ -16,20 +16,20 @@ ## The output file must include all sections. # RUN: llvm-readelf -S %t/a.elf | FileCheck %s -# CHECK: There are 12 section headers, starting at offset 0x2140: +# CHECK: There are 12 section headers, starting at offset 0x2138: # CHECK: [Nr] Name Type Address Off Size ES Flg Lk Inf Al # CHECK-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 # CHECK-NEXT: [ 1] .nonalloc PROGBITS 0000000000000000 001064 001000 00 W 0 0 1 -# CHECK-NEXT: [ 2] .comment PROGBITS 0000000000000000 {{.*}} {{.*}} 01 MS 0 0 1 -# CHECK-NEXT: [ 3] .symtab SYMTAB 0000000000000000 {{.*}} {{.*}} 18 5 1 8 -# CHECK-NEXT: [ 4] .shstrtab STRTAB 0000000000000000 {{.*}} {{.*}} 00 0 0 1 -# CHECK-NEXT: [ 5] .strtab STRTAB 0000000000000000 {{.*}} {{.*}} 00 0 0 1 -# CHECK-NEXT: [ 6] .dat PROGBITS 0000000000000000 002137 000004 00 W 0 0 1 -# CHECK-NEXT: [ 7] .intvec0_out PROGBITS 0000000000000000 00213b 000000 00 W 0 0 1 -# CHECK-NEXT: [ 8] .intvec1_out PROGBITS 0000000000000000 00213b 000000 00 W 0 0 1 -# CHECK-NEXT: [ 9] .intvec2_out PROGBITS 0000000000000000 00213b 000000 00 W 0 0 1 -# CHECK-NEXT: [10] .intvec3_out PROGBITS 00000000803fe060 001060 000004 00 AX 0 0 1 -# CHECK-NEXT: [11] .text PROGBITS 00000000803fe064 001064 000000 00 AX 0 0 4 +# CHECK-NEXT: [ 2] .dat PROGBITS 0000000000000000 002064 000004 00 W 0 0 1 +# CHECK-NEXT: [ 3] .intvec0_out PROGBITS 0000000000000000 002068 000000 00 W 0 0 1 +# CHECK-NEXT: [ 4] .intvec1_out PROGBITS 0000000000000000 002068 000000 00 W 0 0 1 +# CHECK-NEXT: [ 5] .intvec2_out PROGBITS 0000000000000000 002068 000000 00 W 0 0 1 +# CHECK-NEXT: [ 6] .intvec3_out PROGBITS 00000000803fe060 001060 000004 00 AX 0 0 1 +# CHECK-NEXT: [ 7] .text PROGBITS 00000000803fe064 001064 000000 00 AX 0 0 4 +# CHECK-NEXT: [ 8] .comment PROGBITS 0000000000000000 {{.*}} {{.*}} 01 MS 0 0 1 +# CHECK-NEXT: [ 9] .symtab SYMTAB 0000000000000000 {{.*}} {{.*}} 18 11 1 8 +# CHECK-NEXT: [10] .shstrtab STRTAB 0000000000000000 {{.*}} {{.*}} 00 0 0 1 +# CHECK-NEXT: [11] .strtab STRTAB 0000000000000000 {{.*}} {{.*}} 00 0 0 1 #--- a.s diff --git a/lld/test/ELF/linkerscript/sections-nonalloc.s b/lld/test/ELF/linkerscript/sections-nonalloc.s index 79765d3..b4fab8c 100644 --- a/lld/test/ELF/linkerscript/sections-nonalloc.s +++ b/lld/test/ELF/linkerscript/sections-nonalloc.s @@ -16,15 +16,15 @@ # CHECK-NEXT: [ 2] data1 PROGBITS 0000000000000001 001001 000001 00 WA 0 # CHECK-NEXT: [ 3] other1 PROGBITS 0000000000000000 001008 000001 00 0 # CHECK-NEXT: [ 4] other2 PROGBITS 0000000000000000 001010 000001 00 0 -## Orphan placement places other3, .symtab, .shstrtab and .strtab after other2. -# CHECK-NEXT: [ 5] other3 PROGBITS 0000000000000000 001020 000001 00 0 -# CHECK-NEXT: [ 6] .symtab SYMTAB 0000000000000000 001028 000030 18 8 -# CHECK-NEXT: [ 7] .shstrtab STRTAB 0000000000000000 001058 00004d 00 0 -# CHECK-NEXT: [ 8] .strtab STRTAB 0000000000000000 0010a5 000008 00 0 -# CHECK-NEXT: [ 9] data2 PROGBITS 0000000000000002 001002 000001 00 WA 0 +# CHECK-NEXT: [ 5] data2 PROGBITS 0000000000000002 001002 000001 00 WA 0 ## max{sortRank(data1),sortRank(data2)} <= sortRank(data3). data3 is placed after the latter. -# CHECK-NEXT: [10] data3 PROGBITS 0000000000000003 001003 000001 00 WA 0 -# CHECK-NEXT: [11] .text PROGBITS 0000000000000004 001004 000001 00 AX 0 +# CHECK-NEXT: [ 6] data3 PROGBITS 0000000000000003 001003 000001 00 WA 0 +# CHECK-NEXT: [ 7] .text PROGBITS 0000000000000004 001004 000001 00 AX 0 +## Non-alloc orphan sections other3, .symtab, .shstrtab and .strtab are placed at the end. +# CHECK-NEXT: [ 8] other3 PROGBITS 0000000000000000 001020 000001 00 0 +# CHECK-NEXT: [ 9] .symtab SYMTAB 0000000000000000 001028 000030 18 11 +# CHECK-NEXT: [10] .shstrtab STRTAB 0000000000000000 001058 00004d 00 0 +# CHECK-NEXT: [11] .strtab STRTAB 0000000000000000 0010a5 000008 00 0 # CHECK: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align # CHECK-NEXT: LOAD 0x001000 0x0000000000000000 0x0000000000000000 0x000004 0x000004 RW 0x1000 @@ -41,12 +41,12 @@ # CHECK1-NEXT: [ 3] data1 PROGBITS 00000000000000b2 0000b2 000001 00 WA 0 # CHECK1-NEXT: [ 4] other1 PROGBITS 0000000000000000 0000b8 000001 00 0 # CHECK1-NEXT: [ 5] other2 PROGBITS 0000000000000000 0000c0 000001 00 0 -# CHECK1-NEXT: [ 6] other3 PROGBITS 0000000000000000 0000d0 000001 00 0 -# CHECK1-NEXT: [ 7] .symtab SYMTAB 0000000000000000 0000d8 000030 18 9 -# CHECK1-NEXT: [ 8] .shstrtab STRTAB 0000000000000000 000108 00004d 00 0 -# CHECK1-NEXT: [ 9] .strtab STRTAB 0000000000000000 000155 000008 00 0 -# CHECK1-NEXT: [10] data2 PROGBITS 00000000000000b3 0000b3 000001 00 WA 0 -# CHECK1-NEXT: [11] data3 PROGBITS 00000000000000b4 0000b4 000001 00 WA 0 +# CHECK1-NEXT: [ 6] data2 PROGBITS 00000000000000b3 0000b3 000001 00 WA 0 +# CHECK1-NEXT: [ 7] data3 PROGBITS 00000000000000b4 0000b4 000001 00 WA 0 +# CHECK1-NEXT: [ 8] other3 PROGBITS 0000000000000000 0000d0 000001 00 0 +# CHECK1-NEXT: [ 9] .symtab SYMTAB 0000000000000000 0000d8 000030 18 11 +# CHECK1-NEXT: [10] .shstrtab STRTAB 0000000000000000 000108 00004d 00 0 +# CHECK1-NEXT: [11] .strtab STRTAB 0000000000000000 000155 000008 00 0 # CHECK1: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align # CHECK1-NEXT: LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x0000b5 0x0000b5 RWE 0x1000 # CHECK1-NEXT: 0x60000000 0x0000b8 0x0000000000000000 0x0000000000000000 0x000009 0x000001 0x8 diff --git a/lld/test/ELF/linkerscript/sections.s b/lld/test/ELF/linkerscript/sections.s index 5d6cc1f..fc03af8 100644 --- a/lld/test/ELF/linkerscript/sections.s +++ b/lld/test/ELF/linkerscript/sections.s @@ -79,8 +79,8 @@ # SEP-BY-NONALLOC: [ 1] .text PROGBITS 0000000000000000 001000 00000e 00 AX # SEP-BY-NONALLOC-NEXT: [ 2] .data PROGBITS 000000000000000e 00100e 000020 00 WA # SEP-BY-NONALLOC-NEXT: [ 3] .comment PROGBITS 0000000000000000 001031 000008 01 MS -# SEP-BY-NONALLOC: [ 7] other PROGBITS 000000000000002e 00102e 000003 00 WA -# SEP-BY-NONALLOC-NEXT: [ 8] .bss NOBITS 0000000000000031 001031 000002 00 WA +# SEP-BY-NONALLOC: [ 4] other PROGBITS 000000000000002e 00102e 000003 00 WA +# SEP-BY-NONALLOC-NEXT: [ 5] .bss NOBITS 0000000000000031 001031 000002 00 WA # SEP-BY-NONALLOC: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align # SEP-BY-NONALLOC-NEXT: LOAD 0x001000 0x0000000000000000 0x0000000000000000 0x00000e 0x00000e R E 0x1000 |