Index: lld/trunk/ELF/Writer.cpp =================================================================== --- lld/trunk/ELF/Writer.cpp +++ lld/trunk/ELF/Writer.cpp @@ -701,10 +701,10 @@ RF_WRITE = 1 << 15, RF_EXEC_WRITE = 1 << 14, RF_EXEC = 1 << 13, - RF_NON_TLS_BSS = 1 << 12, - RF_NON_TLS_BSS_RO = 1 << 11, - RF_NOT_TLS = 1 << 10, - RF_ALLOC_FIRST = 1 << 9, + RF_PROGBITS_NOT_EXEC_OR_WRITE = 1 << 12, + RF_NON_TLS_BSS = 1 << 11, + RF_NON_TLS_BSS_RO = 1 << 10, + RF_NOT_TLS = 1 << 9, RF_BSS = 1 << 8, RF_NOTE = 1 << 7, RF_PPC_NOT_TOCBSS = 1 << 6, @@ -736,16 +736,6 @@ if (!(Sec->Flags & SHF_ALLOC)) return Rank | RF_NOT_ALLOC; - // Place .dynsym and .dynstr at the beginning of SHF_ALLOC - // sections. We want to do this to mitigate the possibility that - // huge .dynsym and .dynstr sections placed between ro-data and text - // sections cause relocation overflow. Note: .dynstr has SHT_STRTAB - // type and SHF_ALLOC attribute, whereas sections that only have - // SHT_STRTAB but without SHF_ALLOC is placed at the end. All "Sec" - // reaching here has SHF_ALLOC bit set. - if (Sec->Type == SHT_DYNSYM || Sec->Type == SHT_STRTAB) - return Rank | RF_ALLOC_FIRST; - // Sort sections based on their access permission in the following // order: R, RX, RWX, RW. This order is based on the following // considerations: @@ -768,6 +758,12 @@ } else { if (IsWrite) Rank |= RF_WRITE; + // Make non-executable and non-writable PROGBITS sections (e.g .rodata + // .eh_frame) closer to .text . They likely contain PC or GOT relative + // relocations and there could be relocation overflow if other huge sections + // (.dynstr .dynsym) were placed in between. + else if (Sec->Type == SHT_PROGBITS) + Rank |= RF_PROGBITS_NOT_EXEC_OR_WRITE; } // If we got here we know that both A and B are in the same PT_LOAD. Index: lld/trunk/test/ELF/aarch64-copy.s =================================================================== --- lld/trunk/test/ELF/aarch64-copy.s +++ lld/trunk/test/ELF/aarch64-copy.s @@ -90,4 +90,4 @@ // RODATA: Contents of section .rodata: // S(z) = 0x40014 -// RODATA-NEXT: 10246 14000400 +// RODATA-NEXT: 102e0 14000400 Index: lld/trunk/test/ELF/amdgpu-relocs.s =================================================================== --- lld/trunk/test/ELF/amdgpu-relocs.s +++ lld/trunk/test/ELF/amdgpu-relocs.s @@ -110,7 +110,7 @@ # CHECK-NEXT: ] # OBJDUMP: Contents of section .rodata: -# OBJDUMP: 28fbffff ffffffff +# OBJDUMP: d0f8ffff ffffffff # OBJDUMP: Contents of section nonalloc: # OBJDUMP-NEXT: 0000 00000000 04480000 00000000 08440000 Index: lld/trunk/test/ELF/arm-copy.s =================================================================== --- lld/trunk/test/ELF/arm-copy.s +++ lld/trunk/test/ELF/arm-copy.s @@ -33,7 +33,7 @@ // CHECK-NEXT: AddressAlignment: 16 // CHECK: Relocations [ -// CHECK-NEXT: Section (5) .rel.dyn { +// CHECK-NEXT: Section {{.*}} .rel.dyn { // CHECK-NEXT: Relocation { // CHECK-NEXT: Offset: 0x13000 // CHECK-NEXT: Type: R_ARM_COPY @@ -78,4 +78,4 @@ // RODATA: Contents of section .rodata: // S(z) = 0x13004 -// RODATA-NEXT: 10160 04300100 +// RODATA-NEXT: 10190 04300100 Index: lld/trunk/test/ELF/arm-execute-only.s =================================================================== --- lld/trunk/test/ELF/arm-execute-only.s +++ lld/trunk/test/ELF/arm-execute-only.s @@ -14,24 +14,24 @@ // RUN: llvm-readelf -l %t.so | FileCheck --check-prefix=DIFF %s // CHECK-NOT: LOAD -// CHECK: LOAD 0x000000 0x00000000 0x00000000 0x00170 0x00170 R 0x1000 +// CHECK: LOAD 0x000000 0x00000000 0x00000000 0x0016d 0x0016d R 0x1000 // CHECK: LOAD 0x001000 0x00001000 0x00001000 0x{{.*}} 0x{{.*}} R E 0x1000 // CHECK: LOAD 0x002000 0x00002000 0x00002000 0x{{.*}} 0x{{.*}} E 0x1000 // CHECK: LOAD 0x003000 0x00003000 0x00003000 0x00038 0x00038 RW 0x1000 // CHECK-NOT: LOAD -// CHECK: 01 .dynsym .dynstr .gnu.hash .hash +// CHECK: 01 .dynsym .gnu.hash .hash .dynstr // CHECK: 02 .text // CHECK: 03 .foo // CHECK: 04 .dynamic // DIFF-NOT: LOAD -// DIFF: LOAD 0x000000 0x00000000 0x00000000 0x00150 0x00150 R 0x1000 +// DIFF: LOAD 0x000000 0x00000000 0x00000000 0x0014d 0x0014d R 0x1000 // DIFF: LOAD 0x001000 0x00001000 0x00001000 0x0000c 0x0000c R E 0x1000 // DIFF: LOAD 0x002000 0x00002000 0x00002000 0x00038 0x00038 RW 0x1000 // DIFF-NOT: LOAD -// DIFF: 01 .dynsym .dynstr .gnu.hash .hash +// DIFF: 01 .dynsym .gnu.hash .hash .dynstr // DIFF: 02 .text .foo // DIFF: 03 .dynamic Index: lld/trunk/test/ELF/arm-exidx-shared.s =================================================================== --- lld/trunk/test/ELF/arm-exidx-shared.s +++ lld/trunk/test/ELF/arm-exidx-shared.s @@ -37,9 +37,9 @@ bx lr // CHECK: Relocations [ -// CHECK-NEXT: Section (6) .rel.plt { +// CHECK-NEXT: Section {{.*}} .rel.plt { // CHECK-NEXT: 0x200C R_ARM_JUMP_SLOT __gxx_personality_v0 // CHECK-EXTAB: Contents of section .ARM.extab: -// 01d8 + 0e58 = 0x1030 = __gxx_personality_v0(PLT) -// CHECK-EXTAB-NEXT: 01d8 580e0000 b0b0b000 00000000 +// 0x0210 + 0x0e20 = 0x1030 = __gxx_personality_v0(PLT) +// CHECK-EXTAB-NEXT: 0210 200e0000 b0b0b000 00000000 Index: lld/trunk/test/ELF/arm-target2.s =================================================================== --- lld/trunk/test/ELF/arm-target2.s +++ lld/trunk/test/ELF/arm-target2.s @@ -35,16 +35,16 @@ _ZTIi: .word 0 // CHECK: Contents of section .ARM.extab: -// 1011c + 1ee4 = 12000 = .got -// CHECK-NEXT: 10114 f00e0000 b0b0b000 e41e0000 +// 0x1012c + 0x1ed4 = 0x12000 = .got +// CHECK-NEXT: 10124 e00e0000 b0b0b000 d41e0000 // CHECK-ABS: Contents of section .ARM.extab: -// 100f0 = .rodata -// CHECK-ABS-NEXT: 100d4 300f0000 b0b0b000 f0000100 +// 0x100f0 = .rodata +// CHECK-ABS-NEXT: 100e4 200f0000 b0b0b000 f0000100 // CHECK-REL: Contents of section .ARM.extab: -// 100dc + c = 100e8 = .rodata -// CHECK-REL-NEXT: 100d4 300f0000 b0b0b000 14000000 +// 0x100ec + 4 = 0x100f0 = .rodata +// CHECK-REL-NEXT: 100e4 200f0000 b0b0b000 04000000 // CHECK: Contents of section .rodata: // CHECK-NEXT: 10130 00000000 Index: lld/trunk/test/ELF/basic-ppc.s =================================================================== --- lld/trunk/test/ELF/basic-ppc.s +++ lld/trunk/test/ELF/basic-ppc.s @@ -65,7 +65,7 @@ // CHECK-NEXT: Address: 0x114 // CHECK-NEXT: Offset: 0x114 // CHECK-NEXT: Size: 16 -// CHECK-NEXT: Link: 2 +// CHECK-NEXT: Link: 3 // CHECK-NEXT: Info: 1 // CHECK-NEXT: AddressAlignment: 4 // CHECK-NEXT: EntrySize: 16 @@ -75,38 +75,38 @@ // CHECK-NEXT: } // CHECK-NEXT: Section { // CHECK-NEXT: Index: 2 -// CHECK-NEXT: Name: .dynstr -// CHECK-NEXT: Type: SHT_STRTAB (0x3) +// CHECK-NEXT: Name: .hash +// CHECK-NEXT: Type: SHT_HASH (0x5) // CHECK-NEXT: Flags [ (0x2) // CHECK-NEXT: SHF_ALLOC (0x2) // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x124 // CHECK-NEXT: Offset: 0x124 -// CHECK-NEXT: Size: 1 -// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Size: 16 +// CHECK-NEXT: Link: 1 // CHECK-NEXT: Info: 0 -// CHECK-NEXT: AddressAlignment: 1 -// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: AddressAlignment: 4 +// CHECK-NEXT: EntrySize: 4 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 00 |.| +// CHECK-NEXT: 0000: 00000001 00000001 00000000 00000000 |................| // CHECK-NEXT: ) // CHECK-NEXT: } // CHECK-NEXT: Section { // CHECK-NEXT: Index: 3 -// CHECK-NEXT: Name: .hash -// CHECK-NEXT: Type: SHT_HASH (0x5) +// CHECK-NEXT: Name: .dynstr +// CHECK-NEXT: Type: SHT_STRTAB (0x3) // CHECK-NEXT: Flags [ (0x2) // CHECK-NEXT: SHF_ALLOC (0x2) // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x128 -// CHECK-NEXT: Offset: 0x128 -// CHECK-NEXT: Size: 16 -// CHECK-NEXT: Link: 1 +// CHECK-NEXT: Address: 0x134 +// CHECK-NEXT: Offset: 0x134 +// CHECK-NEXT: Size: 1 +// CHECK-NEXT: Link: 0 // CHECK-NEXT: Info: 0 -// CHECK-NEXT: AddressAlignment: 4 -// CHECK-NEXT: EntrySize: 4 +// CHECK-NEXT: AddressAlignment: 1 +// CHECK-NEXT: EntrySize: 0 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 00000001 00000001 00000000 00000000 |................| +// CHECK-NEXT: 0000: 00 |.| // CHECK-NEXT: ) // CHECK-NEXT: } // CHECK-NEXT: Section { @@ -139,14 +139,14 @@ // CHECK-NEXT: Address: 0x2000 // CHECK-NEXT: Offset: 0x2000 // CHECK-NEXT: Size: 48 -// CHECK-NEXT: Link: 2 +// CHECK-NEXT: Link: 3 // CHECK-NEXT: Info: 0 // CHECK-NEXT: AddressAlignment: 4 // CHECK-NEXT: EntrySize: 8 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 00000006 00000114 0000000B 00000010 |................| -// CHECK-NEXT: 0010: 00000005 00000124 0000000A 00000001 |.......$........| -// CHECK-NEXT: 0020: 00000004 00000128 00000000 00000000 |.......(........| +// CHECK-NEXT: 0000: 00000006 00000114 0000000B 00000010 +// CHECK-NEXT: 0010: 00000005 00000134 0000000A 00000001 +// CHECK-NEXT: 0020: 00000004 00000124 00000000 00000000 // CHECK-NEXT: ) // CHECK-NEXT: } // CHECK-NEXT: Section { @@ -200,8 +200,8 @@ // CHECK-NEXT: AddressAlignment: 1 // CHECK-NEXT: EntrySize: 0 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 002E6479 6E73796D 002E6479 6E737472 |..dynsym..dynstr| -// CHECK-NEXT: 0010: 002E6861 7368002E 74657874 002E6479 |..hash..text..dy| +// CHECK-NEXT: 0000: 002E6479 6E73796D 002E6861 7368002E |..dynsym..hash..| +// CHECK-NEXT: 0010: 64796E73 7472002E 74657874 002E6479 |dynstr..text..dy| // CHECK-NEXT: 0020: 6E616D69 63002E63 6F6D6D65 6E74002E |namic..comment..| // CHECK-NEXT: 0030: 73796D74 6162002E 73687374 72746162 |symtab..shstrtab| // CHECK-NEXT: 0040: 002E7374 72746162 00 |..strtab.| @@ -243,8 +243,8 @@ // CHECK-NEXT: Offset: 0x0 // CHECK-NEXT: VirtualAddress: 0x0 // CHECK-NEXT: PhysicalAddress: 0x0 -// CHECK-NEXT: FileSize: 312 -// CHECK-NEXT: MemSize: 312 +// CHECK-NEXT: FileSize: 309 +// CHECK-NEXT: MemSize: 309 // CHECK-NEXT: Flags [ (0x4) // CHECK-NEXT: PF_R (0x4) // CHECK-NEXT: ] Index: lld/trunk/test/ELF/basic-ppc64.s =================================================================== --- lld/trunk/test/ELF/basic-ppc64.s +++ lld/trunk/test/ELF/basic-ppc64.s @@ -66,7 +66,7 @@ // CHECK-NEXT: Address: 0x1C8 // CHECK-NEXT: Offset: 0x1C8 // CHECK-NEXT: Size: 24 -// CHECK-NEXT: Link: 2 +// CHECK-NEXT: Link: 3 // CHECK-NEXT: Info: 1 // CHECK-NEXT: AddressAlignment: 8 // CHECK-NEXT: EntrySize: 24 @@ -77,38 +77,38 @@ // CHECK-NEXT: } // CHECK-NEXT: Section { // CHECK-NEXT: Index: 2 -// CHECK-NEXT: Name: .dynstr (9) -// CHECK-NEXT: Type: SHT_STRTAB (0x3) +// CHECK-NEXT: Name: .hash (9) +// CHECK-NEXT: Type: SHT_HASH (0x5) // CHECK-NEXT: Flags [ (0x2) // CHECK-NEXT: SHF_ALLOC (0x2) // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x1E0 // CHECK-NEXT: Offset: 0x1E0 -// CHECK-NEXT: Size: 1 -// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Size: 16 +// CHECK-NEXT: Link: 1 // CHECK-NEXT: Info: 0 -// CHECK-NEXT: AddressAlignment: 1 -// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: AddressAlignment: 4 +// CHECK-NEXT: EntrySize: 4 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 00 |.| +// CHECK-NEXT: 0000: 01000000 01000000 00000000 00000000 |................| // CHECK-NEXT: ) // CHECK-NEXT: } // CHECK-NEXT: Section { // CHECK-NEXT: Index: 3 -// CHECK-NEXT: Name: .hash (17) -// CHECK-NEXT: Type: SHT_HASH (0x5) +// CHECK-NEXT: Name: .dynstr (15) +// CHECK-NEXT: Type: SHT_STRTAB (0x3) // CHECK-NEXT: Flags [ (0x2) // CHECK-NEXT: SHF_ALLOC (0x2) // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1E4 -// CHECK-NEXT: Offset: 0x1E4 -// CHECK-NEXT: Size: 16 -// CHECK-NEXT: Link: 1 +// CHECK-NEXT: Address: 0x1F0 +// CHECK-NEXT: Offset: 0x1F0 +// CHECK-NEXT: Size: 1 +// CHECK-NEXT: Link: 0 // CHECK-NEXT: Info: 0 -// CHECK-NEXT: AddressAlignment: 4 -// CHECK-NEXT: EntrySize: 4 +// CHECK-NEXT: AddressAlignment: 1 +// CHECK-NEXT: EntrySize: 0 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 01000000 01000000 00000000 00000000 |................| +// CHECK-NEXT: 0000: 00 |.| // CHECK-NEXT: ) // CHECK-NEXT: } // CHECK-NEXT: Section { @@ -141,16 +141,16 @@ // CHECK-NEXT: Address: 0x20000 // CHECK-NEXT: Offset: 0x20000 // CHECK-NEXT: Size: 96 -// CHECK-NEXT: Link: 2 +// CHECK-NEXT: Link: 3 // CHECK-NEXT: Info: 0 // CHECK-NEXT: AddressAlignment: 8 // CHECK-NEXT: EntrySize: 16 // CHECK-NEXT: SectionData ( // CHECK-NEXT: 0000: 06000000 00000000 C8010000 00000000 |................| // CHECK-NEXT: 0010: 0B000000 00000000 18000000 00000000 |................| -// CHECK-NEXT: 0020: 05000000 00000000 E0010000 00000000 |................| +// CHECK-NEXT: 0020: 05000000 00000000 F0010000 00000000 |................| // CHECK-NEXT: 0030: 0A000000 00000000 01000000 00000000 |................| -// CHECK-NEXT: 0040: 04000000 00000000 E4010000 00000000 |................| +// CHECK-NEXT: 0040: 04000000 00000000 E0010000 00000000 |................| // CHECK-NEXT: 0050: 00000000 00000000 00000000 00000000 |................| // CHECK-NEXT: ) // CHECK-NEXT: } @@ -206,8 +206,8 @@ // CHECK-NEXT: AddressAlignment: 1 // CHECK-NEXT: EntrySize: 0 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 002E6479 6E73796D 002E6479 6E737472 |..dynsym..dynstr| -// CHECK-NEXT: 0010: 002E6861 7368002E 74657874 002E6479 |..hash..text..dy| +// CHECK-NEXT: 0000: 002E6479 6E73796D 002E6861 7368002E |..dynsym..hash..| +// CHECK-NEXT: 0010: 64796E73 7472002E 74657874 002E6479 |dynstr..text..dy| // CHECK-NEXT: 0020: 6E616D69 63002E63 6F6D6D65 6E74002E |namic..comment..| // CHECK-NEXT: 0030: 73796D74 6162002E 73687374 72746162 |symtab..shstrtab| // CHECK-NEXT: 0040: 002E7374 72746162 00 |..strtab.| @@ -249,8 +249,8 @@ // CHECK-NEXT: Offset: 0x0 // CHECK-NEXT: VirtualAddress: 0x0 // CHECK-NEXT: PhysicalAddress: 0x0 -// CHECK-NEXT: FileSize: 500 -// CHECK-NEXT: MemSize: 500 +// CHECK-NEXT: FileSize: 497 +// CHECK-NEXT: MemSize: 497 // CHECK-NEXT: Flags [ (0x4) // CHECK-NEXT: PF_R (0x4) // CHECK-NEXT: ] Index: lld/trunk/test/ELF/dynamic-no-rosegment.s =================================================================== --- lld/trunk/test/ELF/dynamic-no-rosegment.s +++ lld/trunk/test/ELF/dynamic-no-rosegment.s @@ -7,9 +7,9 @@ # CHECK-NEXT: Tag Type Name/Value # CHECK-NEXT: 0x0000000000000006 SYMTAB 0x120 # CHECK-NEXT: 0x000000000000000B SYMENT 24 (bytes) -# CHECK-NEXT: 0x0000000000000005 STRTAB 0x138 +# CHECK-NEXT: 0x0000000000000005 STRTAB 0x1D8 # CHECK-NEXT: 0x000000000000000A STRSZ 1 (bytes) -# CHECK-NEXT: 0x000000006FFFFEF5 GNU_HASH 0x140 -# CHECK-NEXT: 0x0000000000000004 HASH 0x15C +# CHECK-NEXT: 0x000000006FFFFEF5 GNU_HASH 0x138 +# CHECK-NEXT: 0x0000000000000004 HASH 0x154 # CHECK-NEXT: 0x0000000000000000 NULL 0x0 # CHECK-NEXT: ] Index: lld/trunk/test/ELF/dynsec-at-beginning.s =================================================================== --- lld/trunk/test/ELF/dynsec-at-beginning.s +++ lld/trunk/test/ELF/dynsec-at-beginning.s @@ -1,16 +0,0 @@ -# REQUIRES: x86 -# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t - -# RUN: ld.lld --hash-style=gnu -o %t1 %t -shared -# RUN: llvm-readelf -s %t1 | FileCheck %s - -# Dynamic symbol and dynamic strtab sections are at the beginning of -# SHF_ALLOC sections. -# CHECK: .dynsym {{.*}} A -# CHECK-NEXT: .dynstr {{.*}} A -# CHECK-NEXT: foo {{.*}} A -# CHECK-NEXT: .hash {{.*}} A -# CHECK-NEXT: .text {{.*}} AX - -.section foo, "a" -.byte 0 Index: lld/trunk/test/ELF/gc-merge-local-sym.s =================================================================== --- lld/trunk/test/ELF/gc-merge-local-sym.s +++ lld/trunk/test/ELF/gc-merge-local-sym.s @@ -10,7 +10,7 @@ // CHECK-NEXT: SHF_MERGE // CHECK-NEXT: SHF_STRINGS // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1FD +// CHECK-NEXT: Address: 0x235 // CHECK-NEXT: Offset: // CHECK-NEXT: Size: 4 // CHECK-NEXT: Link: 0 Index: lld/trunk/test/ELF/gnu-ifunc-dyntags.s =================================================================== --- lld/trunk/test/ELF/gnu-ifunc-dyntags.s +++ lld/trunk/test/ELF/gnu-ifunc-dyntags.s @@ -8,7 +8,7 @@ ## when there are no other relocations except R_*_IRELATIVE. # CHECK: Name Size Address -# CHECK: .rela.plt 00000030 0000000000000218 +# CHECK: .rela.plt 00000030 0000000000000210 # CHECK: .got.plt 00000010 0000000000002000 # TAGS: Relocations [ @@ -19,7 +19,7 @@ # TAGS-NEXT: ] # TAGS: Tag Type Name/Value -# TAGS: 0x0000000000000017 JMPREL 0x218 +# TAGS: 0x0000000000000017 JMPREL 0x210 # TAGS: 0x0000000000000002 PLTRELSZ 48 # TAGS: 0x0000000000000003 PLTGOT 0x2000 # TAGS: 0x0000000000000014 PLTREL RELA Index: lld/trunk/test/ELF/i386-merge.s =================================================================== --- lld/trunk/test/ELF/i386-merge.s +++ lld/trunk/test/ELF/i386-merge.s @@ -9,7 +9,7 @@ // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: SHF_MERGE // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x128 +// CHECK-NEXT: Address: 0x158 // CHECK-NEXT: Offset: // CHECK-NEXT: Size: // CHECK-NEXT: Link: @@ -35,11 +35,10 @@ // CHECK-NEXT: AddressAlignment: 1 // CHECK-NEXT: EntrySize: 0 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 28010000 | +// CHECK-NEXT: 0000: 58010000 | // CHECK-NEXT: ) -// The content of .data should be the address of .mysec. 14010000 is 0x114 in -// little endian. +// The content of .data should be the address of .mysec. .data .long .mysec+4 Index: lld/trunk/test/ELF/linkerscript/align-empty.test =================================================================== --- lld/trunk/test/ELF/linkerscript/align-empty.test +++ lld/trunk/test/ELF/linkerscript/align-empty.test @@ -16,5 +16,7 @@ # CHECK-NEXT: Idx Name Size Address # CHECK-NEXT: 0 00000000 0000000000000000 # CHECK-NEXT: 1 .dynsym 00000018 0000000000000190 -# CHECK-NEXT: 2 .dynstr 00000001 00000000000001a8 -# CHECK-NEXT: 3 foo 00000001 0000000000001000 +# CHECK-NEXT: 2 .gnu.hash 0000001c 00000000000001a8 +# CHECK-NEXT: 3 .hash 00000010 00000000000001c4 +# CHECK-NEXT: 4 .dynstr 00000001 00000000000001d4 +# CHECK-NEXT: 5 foo 00000001 0000000000001000 Index: lld/trunk/test/ELF/linkerscript/implicit-program-header.test =================================================================== --- lld/trunk/test/ELF/linkerscript/implicit-program-header.test +++ lld/trunk/test/ELF/linkerscript/implicit-program-header.test @@ -7,7 +7,7 @@ # RUN: llvm-readelf -l %t1 | FileCheck %s # CHECK: Segment Sections... -# CHECK-NEXT: 00 .dynsym .dynstr .hash .bar .foo .text .dynamic +# CHECK-NEXT: 00 .dynsym .hash .dynstr .bar .foo .text .dynamic # CHECK-NEXT: 01 .bar .foo PHDRS { Index: lld/trunk/test/ELF/linkerscript/merge-sections-syms.s =================================================================== --- lld/trunk/test/ELF/linkerscript/merge-sections-syms.s +++ lld/trunk/test/ELF/linkerscript/merge-sections-syms.s @@ -20,7 +20,7 @@ # CHECK-NEXT: } # CHECK-NEXT: Symbol { # CHECK-NEXT: Name: A -# CHECK-NEXT: Value: 0x1E2 +# CHECK-NEXT: Value: 0x226 # CHECK-NEXT: Size: # CHECK-NEXT: Binding: # CHECK-NEXT: Type: @@ -29,7 +29,7 @@ # CHECK-NEXT: } # CHECK-NEXT: Symbol { # CHECK-NEXT: Name: B -# CHECK-NEXT: Value: 0x1E3 +# CHECK-NEXT: Value: 0x227 # CHECK-NEXT: Size: # CHECK-NEXT: Binding: # CHECK-NEXT: Type: Index: lld/trunk/test/ELF/linkerscript/merge-sections.s =================================================================== --- lld/trunk/test/ELF/linkerscript/merge-sections.s +++ lld/trunk/test/ELF/linkerscript/merge-sections.s @@ -28,8 +28,7 @@ # CHECK-NEXT: Value: 0x[[ADDR1]] # CHECK: Name: end -# 0x19E = begin + sizeof(.foo) = 0x190 + 0xE -# CHECK-NEXT: Value: 0x1F2 +# CHECK-NEXT: Value: 0x236 # Check that we don't crash with --gc-sections # RUN: ld.lld --gc-sections -o %t2 --script %t.script %t -shared Index: lld/trunk/test/ELF/linkerscript/no-space.s =================================================================== --- lld/trunk/test/ELF/linkerscript/no-space.s +++ lld/trunk/test/ELF/linkerscript/no-space.s @@ -18,7 +18,7 @@ # CHECK: Section to Segment mapping: # CHECK-NEXT: Segment Sections... -# CHECK-NEXT: 00 foo .hash .dynsym .dynstr +# CHECK-NEXT: 00 foo .dynsym .dynstr .hash .section foo, "a" .quad 0 Index: lld/trunk/test/ELF/linkerscript/non-absolute2.test =================================================================== --- lld/trunk/test/ELF/linkerscript/non-absolute2.test +++ lld/trunk/test/ELF/linkerscript/non-absolute2.test @@ -9,10 +9,9 @@ } # CHECK: Sections: -# CHECK-NEXT: Idx Name Size Address Type -# CHECK-NEXT: 0 00000000 0000000000000000 -# CHECK-NEXT: 1 .dynsym 00000030 0000000000001000 -# CHECK-NEXT: 2 .dynstr 00000003 0000000000001030 -# CHECK: 5 .text 00000000 0000000000001070 +# CHECK-NEXT: Idx Name Size Address +# CHECK-NEXT: 0 00000000 0000000000000000 +# CHECK-NEXT: 1 .dynsym 00000030 0000000000001000 +# CHECK: 5 .text 00000000 000000000000106c # CHECK: 0000000000000001 .dynsym 00000000 A Index: lld/trunk/test/ELF/linkerscript/non-alloc.s =================================================================== --- lld/trunk/test/ELF/linkerscript/non-alloc.s +++ lld/trunk/test/ELF/linkerscript/non-alloc.s @@ -15,7 +15,7 @@ # CHECK: Section to Segment mapping: # CHECK-NEXT: Segment Sections... -# CHECK-NEXT: 00 .dynsym .dynstr .hash .text +# CHECK-NEXT: 00 .dynsym .hash .dynstr .text # CHECK-NEXT: 01 .dynamic nop Index: lld/trunk/test/ELF/linkerscript/overlapping-sections.s =================================================================== --- lld/trunk/test/ELF/linkerscript/overlapping-sections.s +++ lld/trunk/test/ELF/linkerscript/overlapping-sections.s @@ -23,7 +23,7 @@ # BAD-LMA: .sec2 PROGBITS 0000000000008800 002800 000100 00 WA 0 0 1 # BAD-LMA-LABEL: Program Headers: # BAD-LMA-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align -# BAD-LMA-NEXT: LOAD 0x001000 0x0000000000000000 0x0000000000000000 0x000104 0x000104 R E 0x1000 +# BAD-LMA-NEXT: LOAD 0x001000 0x0000000000000000 0x0000000000000000 0x000100 0x000100 R E 0x1000 # BAD-LMA-NEXT: LOAD 0x002000 0x0000000000008000 0x0000000000008000 0x000100 0x000100 RW 0x1000 # BAD-LMA-NEXT: LOAD 0x002800 0x0000000000008800 0x0000000000008080 0x000170 0x000170 RW 0x1000 # BAD-LMA-LABEL: Section to Segment mapping: @@ -49,7 +49,7 @@ # BAD-VADDR: .sec2 PROGBITS 0000000000008020 003020 000100 00 WA 0 0 1 # BAD-VADDR-LABEL: Program Headers: # BAD-VADDR-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align -# BAD-VADDR-NEXT: LOAD 0x001000 0x0000000000000000 0x0000000000000000 0x000104 0x000104 R E 0x1000 +# BAD-VADDR-NEXT: LOAD 0x001000 0x0000000000000000 0x0000000000000000 0x000100 0x000100 R E 0x1000 # BAD-VADDR-NEXT: LOAD 0x002000 0x0000000000008000 0x0000000000008000 0x000100 0x000100 RW 0x1000 # BAD-VADDR-NEXT: LOAD 0x003020 0x0000000000008020 0x0000000000008800 0x000170 0x000170 RW 0x1000 # BAD-VADDR-LABEL: Section to Segment mapping: @@ -97,7 +97,7 @@ # BAD-BOTH: .sec2 PROGBITS 0000000000008040 002040 000100 00 WA 0 0 1 # BAD-BOTH-LABEL: Program Headers: # BAD-BOTH-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align -# BAD-BOTH-NEXT: LOAD 0x001000 0x0000000000000000 0x0000000000000000 0x000104 0x000104 R E 0x1000 +# BAD-BOTH-NEXT: LOAD 0x001000 0x0000000000000000 0x0000000000000000 0x000100 0x000100 R E 0x1000 # BAD-BOTH-NEXT: LOAD 0x002000 0x0000000000008000 0x0000000000008000 0x0001b0 0x0001b0 RW 0x1000 # BAD-BOTH-LABEL: Section to Segment mapping: # BAD-BOTH: 01 .sec1 .sec2 .dynamic Index: lld/trunk/test/ELF/linkerscript/sections-sort.s =================================================================== --- lld/trunk/test/ELF/linkerscript/sections-sort.s +++ lld/trunk/test/ELF/linkerscript/sections-sort.s @@ -17,9 +17,9 @@ # CHECK-NEXT: 0 # CHECK-NEXT: 1 .text # CHECK-NEXT: 2 .dynsym -# CHECK-NEXT: 3 .dynstr -# CHECK-NEXT: 4 foo -# CHECK-NEXT: 5 .hash +# CHECK-NEXT: 3 .hash +# CHECK-NEXT: 4 .dynstr +# CHECK-NEXT: 5 foo # CHECK-NEXT: 6 .dynamic # CHECK-NEXT: 7 .comment # CHECK-NEXT: 8 .symtab Index: lld/trunk/test/ELF/linkerscript/sort-non-script.s =================================================================== --- lld/trunk/test/ELF/linkerscript/sort-non-script.s +++ lld/trunk/test/ELF/linkerscript/sort-non-script.s @@ -6,8 +6,8 @@ # RUN: llvm-readelf -s %t | FileCheck %s # CHECK: .dynsym {{.*}} A -# CHECK-NEXT: .dynstr {{.*}} A # CHECK-NEXT: .hash {{.*}} A +# CHECK-NEXT: .dynstr {{.*}} A # CHECK-NEXT: .text {{.*}} AX # CHECK-NEXT: foo {{.*}} WA # CHECK-NEXT: .dynamic {{.*}} WA Index: lld/trunk/test/ELF/linkerscript/symbol-only.test =================================================================== --- lld/trunk/test/ELF/linkerscript/symbol-only.test +++ lld/trunk/test/ELF/linkerscript/symbol-only.test @@ -14,10 +14,8 @@ # CHECK: Sections: # CHECK-NEXT: Idx Name Size Address # CHECK-NEXT: 0 00000000 0000000000000000 -# CHECK: abc 00000000 [[ADDR:[0-9a-f]*]] BSS -# CHECK-NEXT: .dynsym 00000030 0000000000000190 -# CHECK-NEXT: .dynstr 00000005 00000000000001c0 -# CHECK-NEXT: bar 00000000 0000000000001000 DATA +# CHECK: abc 00000000 [[ADDR:[0-9a-f]*]] +# CHECK: bar 00000000 0000000000001000 # CHECK: SYMBOL TABLE: # CHECK: [[ADDR]] abc 00000000 foo Index: lld/trunk/test/ELF/linkerscript/unused-synthetic.s =================================================================== --- lld/trunk/test/ELF/linkerscript/unused-synthetic.s +++ lld/trunk/test/ELF/linkerscript/unused-synthetic.s @@ -11,8 +11,6 @@ # CHECK-NOT: .got # CHECK-NOT: .plt # CHECK: .dynsym -# CHECK-NEXT: .dynstr -# CHECK-NEXT: .gnu.hash # CHECK: .text # Test that the size of a removed unused synthetic input section is not added Index: lld/trunk/test/ELF/map-file.s =================================================================== --- lld/trunk/test/ELF/map-file.s +++ lld/trunk/test/ELF/map-file.s @@ -43,20 +43,20 @@ // CHECK: VMA LMA Size Align Out In Symbol // CHECK-NEXT: 2001c8 2001c8 78 8 .dynsym // CHECK-NEXT: 2001c8 2001c8 78 8 :(.dynsym) -// CHECK-NEXT: 200240 200240 31 1 .dynstr -// CHECK-NEXT: 200240 200240 31 1 :(.dynstr) -// CHECK-NEXT: 200278 200278 2c 8 .gnu.hash -// CHECK-NEXT: 200278 200278 2c 8 :(.gnu.hash) -// CHECK-NEXT: 2002a4 2002a4 30 4 .hash -// CHECK-NEXT: 2002a4 2002a4 30 4 :(.hash) -// CHECK-NEXT: 2002d8 2002d8 30 8 .rela.dyn -// CHECK-NEXT: 2002d8 2002d8 30 8 :(.rela.dyn) -// CHECK-NEXT: 200308 200308 30 8 .rela.plt -// CHECK-NEXT: 200308 200308 30 8 :(.rela.plt) -// CHECK-NEXT: 200338 200338 64 8 .eh_frame -// CHECK-NEXT: 200338 200338 2c 1 {{.*}}{{/|\\}}map-file.s.tmp1.o:(.eh_frame+0x0) -// CHECK-NEXT: 200368 200368 14 1 {{.*}}{{/|\\}}map-file.s.tmp1.o:(.eh_frame+0x2c) -// CHECK-NEXT: 200380 200380 18 1 {{.*}}{{/|\\}}map-file.s.tmp2.o:(.eh_frame+0x18) +// CHECK-NEXT: 200240 200240 2c 8 .gnu.hash +// CHECK-NEXT: 200240 200240 2c 8 :(.gnu.hash) +// CHECK-NEXT: 20026c 20026c 30 4 .hash +// CHECK-NEXT: 20026c 20026c 30 4 :(.hash) +// CHECK-NEXT: 20029c 20029c 31 1 .dynstr +// CHECK-NEXT: 20029c 20029c 31 1 :(.dynstr) +// CHECK-NEXT: 2002d0 2002d0 30 8 .rela.dyn +// CHECK-NEXT: 2002d0 2002d0 30 8 :(.rela.dyn) +// CHECK-NEXT: 200300 200300 30 8 .rela.plt +// CHECK-NEXT: 200300 200300 30 8 :(.rela.plt) +// CHECK-NEXT: 200330 200330 64 8 .eh_frame +// CHECK-NEXT: 200330 200330 2c 1 {{.*}}{{/|\\}}map-file.s.tmp1.o:(.eh_frame+0x0) +// CHECK-NEXT: 200360 200360 14 1 {{.*}}{{/|\\}}map-file.s.tmp1.o:(.eh_frame+0x2c) +// CHECK-NEXT: 200378 200378 18 1 {{.*}}{{/|\\}}map-file.s.tmp2.o:(.eh_frame+0x18) // CHECK-NEXT: 201000 201000 2d 4 .text // CHECK-NEXT: 201000 201000 28 4 {{.*}}{{/|\\}}map-file.s.tmp1.o:(.text) // CHECK-NEXT: 201000 201000 0 1 _start Index: lld/trunk/test/ELF/merge-gc-piece.s =================================================================== --- lld/trunk/test/ELF/merge-gc-piece.s +++ lld/trunk/test/ELF/merge-gc-piece.s @@ -10,7 +10,7 @@ # CHECK-NEXT: SHF_ALLOC # CHECK-NEXT: SHF_MERGE # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x1C8 +# CHECK-NEXT: Address: 0x200 # CHECK: Name: .bar # CHECK-NEXT: Type: SHT_PROGBITS @@ -24,7 +24,7 @@ # CHECK-NEXT: AddressAlignment: # CHECK-NEXT: EntrySize: # CHECK-NEXT: SectionData ( -# CHECK-NEXT: 0000: C9010000 00000000 CA010000 00000000 +# CHECK-NEXT: 0000: 01020000 00000000 02020000 00000000 # CHECK-NEXT: ) .section .foo,"aM",@progbits,8 Index: lld/trunk/test/ELF/merge-shared-str.s =================================================================== --- lld/trunk/test/ELF/merge-shared-str.s +++ lld/trunk/test/ELF/merge-shared-str.s @@ -19,10 +19,10 @@ // CHECK-NEXT: SHF_MERGE // CHECK-NEXT: SHF_STRINGS // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1E1 +// CHECK-NEXT: Address: 0x228 // CHECK: Relocations [ // CHECK-NEXT: Section ({{.*}}) .rela.dyn { -// CHECK-NEXT: 0x{{.*}} R_X86_64_RELATIVE - 0x1E2 +// CHECK-NEXT: 0x{{.*}} R_X86_64_RELATIVE - 0x229 // CHECK-NEXT: } // CHECK-NEXT: ] Index: lld/trunk/test/ELF/merge-shared.s =================================================================== --- lld/trunk/test/ELF/merge-shared.s +++ lld/trunk/test/ELF/merge-shared.s @@ -17,10 +17,10 @@ // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: SHF_MERGE // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1E4 +// CHECK-NEXT: Address: 0x228 // CHECK: Relocations [ // CHECK-NEXT: Section ({{.*}}) .rela.dyn { -// CHECK-NEXT: 0x{{.*}} R_X86_64_RELATIVE - 0x1E6 +// CHECK-NEXT: 0x{{.*}} R_X86_64_RELATIVE - 0x22A // CHECK-NEXT: } // CHECK-NEXT: ] Index: lld/trunk/test/ELF/merge-string.s =================================================================== --- lld/trunk/test/ELF/merge-string.s +++ lld/trunk/test/ELF/merge-string.s @@ -28,8 +28,8 @@ // CHECK-NEXT: SHF_MERGE // CHECK-NEXT: SHF_STRINGS // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1E1 -// CHECK-NEXT: Offset: 0x1E1 +// CHECK-NEXT: Address: 0x20D +// CHECK-NEXT: Offset: 0x20D // CHECK-NEXT: Size: 4 // CHECK-NEXT: Link: 0 // CHECK-NEXT: Info: 0 @@ -46,8 +46,8 @@ // NOTAIL-NEXT: SHF_MERGE // NOTAIL-NEXT: SHF_STRINGS // NOTAIL-NEXT: ] -// NOTAIL-NEXT: Address: 0x1E1 -// NOTAIL-NEXT: Offset: 0x1E1 +// NOTAIL-NEXT: Address: 0x20D +// NOTAIL-NEXT: Offset: 0x20D // NOTAIL-NEXT: Size: 7 // NOTAIL-NEXT: Link: 0 // NOTAIL-NEXT: Info: 0 @@ -64,8 +64,8 @@ // NOMERGE-NEXT: SHF_MERGE // NOMERGE-NEXT: SHF_STRINGS // NOMERGE-NEXT: ] -// NOMERGE-NEXT: Address: 0x1E1 -// NOMERGE-NEXT: Offset: 0x1E1 +// NOMERGE-NEXT: Address: 0x20D +// NOMERGE-NEXT: Offset: 0x20D // NOMERGE-NEXT: Size: 11 // NOMERGE-NEXT: Link: 0 // NOMERGE-NEXT: Info: 0 @@ -82,8 +82,8 @@ // CHECK-NEXT: SHF_MERGE // CHECK-NEXT: SHF_STRINGS // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1E6 -// CHECK-NEXT: Offset: 0x1E6 +// CHECK-NEXT: Address: 0x212 +// CHECK-NEXT: Offset: 0x212 // CHECK-NEXT: Size: 4 // CHECK-NEXT: Link: 0 // CHECK-NEXT: Info: 0 @@ -95,11 +95,11 @@ // CHECK: Name: bar -// CHECK-NEXT: Value: 0x1E2 +// CHECK-NEXT: Value: 0x20E // CHECK: Name: foo -// CHECK-NEXT: Value: 0x1E1 +// CHECK-NEXT: Value: 0x20D // CHECK: Name: zed -// CHECK-NEXT: Value: 0x1E6 +// CHECK-NEXT: Value: 0x212 // CHECK-NEXT: Size: 0 Index: lld/trunk/test/ELF/merge-sym.s =================================================================== --- lld/trunk/test/ELF/merge-sym.s +++ lld/trunk/test/ELF/merge-sym.s @@ -15,7 +15,7 @@ // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: SHF_MERGE // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1E4 +// CHECK-NEXT: Address: 0x210 // CHECK: Name: foo -// CHECK-NEXT: Value: 0x1E6 +// CHECK-NEXT: Value: 0x212 Index: lld/trunk/test/ELF/merge-to-non-alloc.s =================================================================== --- lld/trunk/test/ELF/merge-to-non-alloc.s +++ lld/trunk/test/ELF/merge-to-non-alloc.s @@ -15,11 +15,11 @@ // CHECK-NEXT: AddressAlignment: // CHECK-NEXT: EntrySize: // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: E4010000 00000000 EC010000 00000000 | +// CHECK-NEXT: 0000: 10020000 00000000 18020000 00000000 | // CHECK-NEXT: ) // CHECK: Name: foo -// CHECK-NEXT: Value: 0x1E4 +// CHECK-NEXT: Value: 0x210 .section .foo,"aM",@progbits,4 .align 4 Index: lld/trunk/test/ELF/mips-got-string.s =================================================================== --- lld/trunk/test/ELF/mips-got-string.s +++ lld/trunk/test/ELF/mips-got-string.s @@ -7,7 +7,7 @@ # CHECK: Symbol { # CHECK: Name: $.str -# CHECK-NEXT: Value: 0x105 +# CHECK-NEXT: Value: 0x1B1 # CHECK: } # CHECK: Local entries [ Index: lld/trunk/test/ELF/mips-gp-ext.s =================================================================== --- lld/trunk/test/ELF/mips-gp-ext.s +++ lld/trunk/test/ELF/mips-gp-ext.s @@ -26,8 +26,8 @@ # RUN: llvm-objdump -s -t %t.abs.so | FileCheck --check-prefix=ABS %s # REL: Contents of section .reginfo: -# REL-NEXT: 0040 10000104 00000000 00000000 00000000 -# REL-NEXT: 0050 00000000 000001ec +# REL-NEXT: 0018 10000104 00000000 00000000 00000000 +# REL-NEXT: 0028 00000000 000001ec # ^-- _gp # REL: Contents of section .text: @@ -47,8 +47,8 @@ # REL: 000001ec *ABS* 00000000 .hidden _gp # ABS: Contents of section .reginfo: -# ABS-NEXT: 0040 10000104 00000000 00000000 00000000 -# ABS-NEXT: 0050 00000000 00000200 +# ABS-NEXT: 0018 10000104 00000000 00000000 00000000 +# ABS-NEXT: 0028 00000000 00000200 # ^-- _gp # ABS: Contents of section .text: Index: lld/trunk/test/ELF/note-noalloc.s =================================================================== --- lld/trunk/test/ELF/note-noalloc.s +++ lld/trunk/test/ELF/note-noalloc.s @@ -25,7 +25,7 @@ // CHECK: Type: PT_NOTE // CHECK-NEXT: Offset: // CHECK-NEXT: VirtualAddress: 0x[[ADDR]] -// CHECK-NEXT: PhysicalAddress: 0x24C +// CHECK-NEXT: PhysicalAddress: 0x[[ADDR]] // CHECK-NEXT: FileSize: 16 // CHECK-NEXT: MemSize: 16 // CHECK-NOT: PT_NOTE Index: lld/trunk/test/ELF/relocation-shared.s =================================================================== --- lld/trunk/test/ELF/relocation-shared.s +++ lld/trunk/test/ELF/relocation-shared.s @@ -8,7 +8,7 @@ // CHECK-NEXT: Flags [ // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1E1 +// CHECK-NEXT: Address: 0x20D // CHECK-NEXT: Offset: // CHECK-NEXT: Size: 8 // CHECK-NEXT: Link: 0 @@ -16,8 +16,8 @@ // CHECK-NEXT: AddressAlignment: 1 // CHECK-NEXT: EntrySize: 0 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 1F0E0000 00000000 -// 0x1000 - 0x1E1 = 0xE1F +// CHECK-NEXT: 0000: F30D0000 00000000 +// 0x1000 - 0x20D = 0xDF3 // CHECK-NEXT: ) // CHECK: Name: .text Index: lld/trunk/test/ELF/relocation.s =================================================================== --- lld/trunk/test/ELF/relocation.s +++ lld/trunk/test/ELF/relocation.s @@ -113,16 +113,16 @@ .quad R_X86_64_64 // CHECK: Contents of section .R_X86_64_64: -// CHECK-NEXT: 20024d 4d022000 00000000 +// CHECK-NEXT: 2002c0 c0022000 00000000 .section .R_X86_64_GOTPCREL,"a",@progbits .global R_X86_64_GOTPCREL R_X86_64_GOTPCREL: .long zed@gotpcrel -// 0x2020F0(.got) - 0x200255(.R_X86_64_GOTPCREL) = 0x2e9b +// 0x2030F0(.got) - 0x2002c8(.R_X86_64_GOTPCREL) = 0x2e28 // CHECK: Contents of section .R_X86_64_GOTPCREL -// CHECK-NEXT: 200255 9b2e0000 +// CHECK-NEXT: 2002c8 282e0000 .section .R_X86_64_GOT32,"a",@progbits .global R_X86_64_GOT32 Index: lld/trunk/test/ELF/relro-omagic.s =================================================================== --- lld/trunk/test/ELF/relro-omagic.s +++ lld/trunk/test/ELF/relro-omagic.s @@ -10,8 +10,8 @@ # NORELRO-NEXT: Idx Name Size Address Type # NORELRO-NEXT: 0 00000000 0000000000000000 # NORELRO-NEXT: 1 .dynsym 00000048 0000000000200120 -# NORELRO-NEXT: 2 .dynstr 00000021 0000000000200168 -# NORELRO-NEXT: 3 .hash 00000020 000000000020018c +# NORELRO-NEXT: 2 .hash 00000020 0000000000200168 +# NORELRO-NEXT: 3 .dynstr 00000021 0000000000200188 # NORELRO-NEXT: 4 .rela.dyn 00000018 00000000002001b0 # NORELRO-NEXT: 5 .rela.plt 00000018 00000000002001c8 # NORELRO-NEXT: 6 .text 0000000a 00000000002001e0 TEXT Index: lld/trunk/test/ELF/section-layout.s =================================================================== --- lld/trunk/test/ELF/section-layout.s +++ lld/trunk/test/ELF/section-layout.s @@ -26,9 +26,10 @@ .section e,"awT" .section d,"ax",@nobits .section c,"ax" -.section b,"a",@nobits -.section a,"a" +.section a,"a",@nobits +.section b,"a" +// For non-executable and non-writable sections, PROGBITS appear after others. // CHECK: Name: a // CHECK: Name: b // CHECK: Name: c Index: lld/trunk/test/ELF/shared.s =================================================================== --- lld/trunk/test/ELF/shared.s +++ lld/trunk/test/ELF/shared.s @@ -59,24 +59,8 @@ // CHECK-NEXT: 0030: // CHECK-NEXT: ) // CHECK-NEXT: } -// CHECK: Index: [[DYNSTR]] -// CHECK-NEXT: Name: .dynstr -// CHECK-NEXT: Type: SHT_STRTAB -// CHECK-NEXT: Flags [ -// CHECK-NEXT: SHF_ALLOC -// CHECK-NEXT: ] -// CHECK-NEXT: Address: [[DYNSTRADDR:.*]] -// CHECK-NEXT: Offset: -// CHECK-NEXT: Size: -// CHECK-NEXT: Link: 0 -// CHECK-NEXT: Info: 0 -// CHECK-NEXT: AddressAlignment: 1 -// CHECK-NEXT: EntrySize: 0 -// CHECK-NEXT: SectionData ( -// CHECK: ) -// CHECK-NEXT: } // CHECK-NEXT: Section { -// CHECK-NEXT: Index: 4 +// CHECK-NEXT: Index: 3 // CHECK-NEXT: Name: .hash // CHECK-NEXT: Type: SHT_HASH // CHECK-NEXT: Flags [ @@ -89,6 +73,20 @@ // CHECK-NEXT: Info: 0 // CHECK-NEXT: AddressAlignment: 4 // CHECK-NEXT: EntrySize: 4 +// CHECK: Section { +// CHECK-NEXT: Index: [[DYNSTR]] +// CHECK-NEXT: Name: .dynstr +// CHECK-NEXT: Type: SHT_STRTAB +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_ALLOC +// CHECK-NEXT: ] +// CHECK-NEXT: Address: [[DYNSTRADDR:.*]] +// CHECK-NEXT: Offset: +// CHECK-NEXT: Size: +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 1 +// CHECK-NEXT: EntrySize: 0 // CHECK: Name: .rel.dyn // CHECK-NEXT: Type: SHT_REL Index: lld/trunk/test/ELF/sort-norosegment.s =================================================================== --- lld/trunk/test/ELF/sort-norosegment.s +++ lld/trunk/test/ELF/sort-norosegment.s @@ -5,8 +5,8 @@ # RUN: llvm-readelf -s %t | FileCheck %s # CHECK: .dynsym {{.*}} A -# CHECK-NEXT: .dynstr {{.*}} A # CHECK-NEXT: .hash {{.*}} A +# CHECK-NEXT: .dynstr {{.*}} A # CHECK-NEXT: .text {{.*}} AX # CHECK-NEXT: foo {{.*}} WA # CHECK-NEXT: .dynamic {{.*}} WA Index: lld/trunk/test/ELF/verdef-defaultver.s =================================================================== --- lld/trunk/test/ELF/verdef-defaultver.s +++ lld/trunk/test/ELF/verdef-defaultver.s @@ -55,8 +55,8 @@ # DSO-NEXT: ] # DSO-NEXT: Version symbols { # DSO-NEXT: Section Name: .gnu.version -# DSO-NEXT: Address: 0x256 -# DSO-NEXT: Offset: 0x256 +# DSO-NEXT: Address: 0x240 +# DSO-NEXT: Offset: 0x240 # DSO-NEXT: Link: 1 # DSO-NEXT: Symbols [ # DSO-NEXT: Symbol { @@ -150,8 +150,8 @@ # EXE-NEXT: ] # EXE-NEXT: Version symbols { # EXE-NEXT: Section Name: .gnu.version -# EXE-NEXT: Address: 0x20023C -# EXE-NEXT: Offset: 0x23C +# EXE-NEXT: Address: 0x200228 +# EXE-NEXT: Offset: 0x228 # EXE-NEXT: Link: 1 # EXE-NEXT: Symbols [ # EXE-NEXT: Symbol { Index: lld/trunk/test/ELF/verdef.s =================================================================== --- lld/trunk/test/ELF/verdef.s +++ lld/trunk/test/ELF/verdef.s @@ -8,8 +8,8 @@ # DSO: Version symbols { # DSO-NEXT: Section Name: .gnu.version -# DSO-NEXT: Address: 0x260 -# DSO-NEXT: Offset: 0x260 +# DSO-NEXT: Address: 0x228 +# DSO-NEXT: Offset: 0x228 # DSO-NEXT: Link: 1 # DSO-NEXT: Symbols [ # DSO-NEXT: Symbol { @@ -70,8 +70,8 @@ # MAIN: Version symbols { # MAIN-NEXT: Section Name: .gnu.version -# MAIN-NEXT: Address: 0x200260 -# MAIN-NEXT: Offset: 0x260 +# MAIN-NEXT: Address: 0x200228 +# MAIN-NEXT: Offset: 0x228 # MAIN-NEXT: Link: 1 # MAIN-NEXT: Symbols [ # MAIN-NEXT: Symbol { Index: lld/trunk/test/ELF/verneed.s =================================================================== --- lld/trunk/test/ELF/verneed.s +++ lld/trunk/test/ELF/verneed.s @@ -19,41 +19,20 @@ # CHECK-NEXT: Address: 0x2001C8 # CHECK-NEXT: Offset: 0x1C8 # CHECK-NEXT: Size: 96 -# CHECK-NEXT: Link: 2 +# CHECK-NEXT: Link: [[DYNSTR:.*]] # CHECK-NEXT: Info: 1 # CHECK-NEXT: AddressAlignment: 8 # CHECK-NEXT: EntrySize: 24 -# CHECK: Section { -# CHECK-NEXT: Index: 2 -# CHECK-NEXT: Name: .dynstr -# CHECK-NEXT: Type: SHT_STRTAB (0x3) -# CHECK-NEXT: Flags [ (0x2) -# CHECK-NEXT: SHF_ALLOC (0x2) -# CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x200228 -# CHECK-NEXT: Offset: 0x228 -# CHECK-NEXT: Size: 47 -# CHECK-NEXT: Link: 0 -# CHECK-NEXT: Info: 0 -# CHECK-NEXT: AddressAlignment: 1 -# CHECK-NEXT: EntrySize: 0 -# CHECK-NEXT: SectionData ( -# CHECK-NEXT: 0000: 00766572 6E656564 312E736F 2E300076 |.verneed1.so.0.v| -# CHECK-NEXT: 0010: 65726E65 6564322E 736F2E30 00663100 |erneed2.so.0.f1.| -# CHECK-NEXT: 0020: 76330066 32007632 00673100 763100 |v3.f2.v2.g1.v1.| -# CHECK-NEXT: ) -# CHECK-NEXT: } - # CHECK: Section { -# CHECK-NEXT: Index: 3 +# CHECK-NEXT: Index: 2 # CHECK-NEXT: Name: .gnu.version # CHECK-NEXT: Type: SHT_GNU_versym (0x6FFFFFFF) # CHECK-NEXT: Flags [ (0x2) # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x200258 -# CHECK-NEXT: Offset: 0x258 +# CHECK-NEXT: Address: [[VERSYM:.*]] +# CHECK-NEXT: Offset: [[VERSYM_OFFSET:.*]] # CHECK-NEXT: Size: 8 # CHECK-NEXT: Link: 1 # CHECK-NEXT: Info: 0 @@ -61,20 +40,40 @@ # CHECK-NEXT: EntrySize: 2 # CHECK: Section { -# CHECK-NEXT: Index: 4 +# CHECK-NEXT: Index: 3 # CHECK-NEXT: Name: .gnu.version_r # CHECK-NEXT: Type: SHT_GNU_verneed (0x6FFFFFFE) # CHECK-NEXT: Flags [ (0x2) # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x200260 -# CHECK-NEXT: Offset: 0x260 +# CHECK-NEXT: Address: [[VERNEED:.*]] +# CHECK-NEXT: Offset: 0x230 # CHECK-NEXT: Size: 80 -# CHECK-NEXT: Link: 2 +# CHECK-NEXT: Link: 5 # CHECK-NEXT: Info: 2 # CHECK-NEXT: AddressAlignment: 4 # CHECK-NEXT: EntrySize: 0 +# CHECK: Index: [[DYNSTR]] +# CHECK-NEXT: Name: .dynstr +# CHECK-NEXT: Type: SHT_STRTAB (0x3) +# CHECK-NEXT: Flags [ (0x2) +# CHECK-NEXT: SHF_ALLOC (0x2) +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x2002A8 +# CHECK-NEXT: Offset: 0x2A8 +# CHECK-NEXT: Size: 47 +# CHECK-NEXT: Link: 0 +# CHECK-NEXT: Info: 0 +# CHECK-NEXT: AddressAlignment: 1 +# CHECK-NEXT: EntrySize: 0 +# CHECK-NEXT: SectionData ( +# CHECK-NEXT: 0000: 00766572 6E656564 312E736F 2E300076 |.verneed1.so.0.v| +# CHECK-NEXT: 0010: 65726E65 6564322E 736F2E30 00663100 |erneed2.so.0.f1.| +# CHECK-NEXT: 0020: 76330066 32007632 00673100 763100 |v3.f2.v2.g1.v1.| +# CHECK-NEXT: ) +# CHECK-NEXT: } + # CHECK: DynamicSymbols [ # CHECK-NEXT: Symbol { # CHECK-NEXT: Name: @ @@ -114,14 +113,14 @@ # CHECK-NEXT: } # CHECK-NEXT: ] -# CHECK: 0x000000006FFFFFF0 VERSYM 0x200258 -# CHECK-NEXT: 0x000000006FFFFFFE VERNEED 0x200260 +# CHECK: 0x000000006FFFFFF0 VERSYM [[VERSYM]] +# CHECK-NEXT: 0x000000006FFFFFFE VERNEED [[VERNEED]] # CHECK-NEXT: 0x000000006FFFFFFF VERNEEDNUM 2 # CHECK: Version symbols { # CHECK-NEXT: Section Name: .gnu.version -# CHECK-NEXT: Address: 0x200258 -# CHECK-NEXT: Offset: 0x258 +# CHECK-NEXT: Address: [[VERSYM]] +# CHECK-NEXT: Offset: [[VERSYM_OFFSET]] # CHECK-NEXT: Link: 1 # CHECK-NEXT: Symbols [ # CHECK-NEXT: Symbol { Index: lld/trunk/test/ELF/version-script-extern.s =================================================================== --- lld/trunk/test/ELF/version-script-extern.s +++ lld/trunk/test/ELF/version-script-extern.s @@ -68,8 +68,8 @@ # DSO-NEXT: ] # DSO-NEXT: Version symbols { # DSO-NEXT: Section Name: .gnu.version -# DSO-NEXT: Address: 0x2BA -# DSO-NEXT: Offset: 0x2BA +# DSO-NEXT: Address: 0x258 +# DSO-NEXT: Offset: 0x258 # DSO-NEXT: Link: 1 # DSO-NEXT: Symbols [ # DSO-NEXT: Symbol {