Index: ELF/Writer.cpp =================================================================== --- ELF/Writer.cpp +++ ELF/Writer.cpp @@ -697,11 +697,12 @@ RF_NOT_INTERP = 1 << 17, RF_NOT_ALLOC = 1 << 16, RF_WRITE = 1 << 15, - RF_EXEC_WRITE = 1 << 13, - RF_EXEC = 1 << 12, - RF_NON_TLS_BSS = 1 << 11, - RF_NON_TLS_BSS_RO = 1 << 10, - RF_NOT_TLS = 1 << 9, + 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_BSS = 1 << 8, RF_NOTE = 1 << 7, RF_PPC_NOT_TOCBSS = 1 << 6, @@ -732,6 +733,16 @@ 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: Index: test/ELF/aarch64-copy.s =================================================================== --- test/ELF/aarch64-copy.s +++ test/ELF/aarch64-copy.s @@ -1,7 +1,7 @@ // REQUIRES: aarch64 // RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %s -o %t.o // RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %p/Inputs/relocation-copy.s -o %t2.o -// RUN: ld.lld -shared %t2.o -o %t2.so +// RUN: ld.lld -shared %t2.o -soname fixed-length-string.so -o %t2.so // RUN: ld.lld %t.o %t2.so -o %t3 // RUN: llvm-readobj -s -r --expand-relocs -symbols %t3 | FileCheck %s // RUN: llvm-objdump -d %t3 | FileCheck -check-prefix=CODE %s @@ -90,4 +90,4 @@ // RODATA: Contents of section .rodata: // S(z) = 0x40014 -// RODATA-NEXT: 101c8 14000400 +// RODATA-NEXT: 10246 14000400 Index: test/ELF/aarch64-thunk-pi.s =================================================================== --- test/ELF/aarch64-thunk-pi.s +++ test/ELF/aarch64-thunk-pi.s @@ -33,13 +33,13 @@ // Expect range extension thunks for .text_low // adrp calculation is (PC + signed immediate) & (!0xfff) // CHECK: __AArch64ADRPThunk_high_target: -// CHECK-NEXT: 10: 10 00 08 90 adrp x16, #268435456 -// CHECK-NEXT: 14: 10 82 04 91 add x16, x16, #288 -// CHECK-NEXT: 18: 00 02 1f d6 br x16 +// CHECK-NEXT: 70: 10 00 08 90 adrp x16, #268435456 +// CHECK-NEXT: 74: 10 02 03 91 add x16, x16, #192 +// CHECK-NEXT: 78: 00 02 1f d6 br x16 // CHECK: __AArch64ADRPThunk_high_target2: -// CHECK-NEXT: 1c: 10 00 08 90 adrp x16, #268435456 -// CHECK-NEXT: 20: 10 22 00 91 add x16, x16, #8 -// CHECK-NEXT: 24: 00 02 1f d6 br x16 +// CHECK-NEXT: 7c: 10 00 08 90 adrp x16, #268435456 +// CHECK-NEXT: 80: 10 22 00 91 add x16, x16, #8 +// CHECK-NEXT: 84: 00 02 1f d6 br x16 .section .text_high, "ax", %progbits @@ -50,7 +50,7 @@ bl low_target ret // CHECK: high_target: -// CHECK-NEXT: 10000000: 4c 00 00 94 bl #304 +// CHECK-NEXT: 10000000: 34 00 00 94 bl #208 // CHECK-NEXT: 10000004: c0 03 5f d6 ret .hidden high_target2 @@ -68,24 +68,24 @@ // CHECK: __AArch64ADRPThunk_low_target2: // CHECK-NEXT: 10000010: 10 00 f8 90 adrp x16, #-268435456 -// CHECK-NEXT: 10000014: 10 22 00 91 add x16, x16, #8 +// CHECK-NEXT: 10000014: 10 a2 01 91 add x16, x16, #104 // CHECK-NEXT: 10000018: 00 02 1f d6 br x16 // CHECK: Disassembly of section .plt: // CHECK-NEXT: .plt: -// CHECK-NEXT: 10000100: f0 7b bf a9 stp x16, x30, [sp, #-16]! -// CHECK-NEXT: 10000104: 10 00 00 90 adrp x16, #0 -// CHECK-NEXT: 10000108: 11 aa 40 f9 ldr x17, [x16, #336] -// CHECK-NEXT: 1000010c: 10 42 05 91 add x16, x16, #336 -// CHECK-NEXT: 10000110: 20 02 1f d6 br x17 -// CHECK-NEXT: 10000114: 1f 20 03 d5 nop -// CHECK-NEXT: 10000118: 1f 20 03 d5 nop -// CHECK-NEXT: 1000011c: 1f 20 03 d5 nop -// CHECK-NEXT: 10000120: 10 00 00 90 adrp x16, #0 -// CHECK-NEXT: 10000124: 11 ae 40 f9 ldr x17, [x16, #344] -// CHECK-NEXT: 10000128: 10 62 05 91 add x16, x16, #344 -// CHECK-NEXT: 1000012c: 20 02 1f d6 br x17 -// CHECK-NEXT: 10000130: 10 00 00 90 adrp x16, #0 -// CHECK-NEXT: 10000134: 11 b2 40 f9 ldr x17, [x16, #352] -// CHECK-NEXT: 10000138: 10 82 05 91 add x16, x16, #352 -// CHECK-NEXT: 1000013c: 20 02 1f d6 br x17 +// CHECK-NEXT: 100000a0: f0 7b bf a9 stp x16, x30, [sp, #-16]! +// CHECK-NEXT: 100000a4: 10 00 00 90 adrp x16, #0 +// CHECK-NEXT: 100000a8: 11 7a 40 f9 ldr x17, [x16, #240] +// CHECK-NEXT: 100000ac: 10 c2 03 91 add x16, x16, #240 +// CHECK-NEXT: 100000b0: 20 02 1f d6 br x17 +// CHECK-NEXT: 100000b4: 1f 20 03 d5 nop +// CHECK-NEXT: 100000b8: 1f 20 03 d5 nop +// CHECK-NEXT: 100000bc: 1f 20 03 d5 nop +// CHECK-NEXT: 100000c0: 10 00 00 90 adrp x16, #0 +// CHECK-NEXT: 100000c4: 11 7e 40 f9 ldr x17, [x16, #248] +// CHECK-NEXT: 100000c8: 10 e2 03 91 add x16, x16, #248 +// CHECK-NEXT: 100000cc: 20 02 1f d6 br x17 +// CHECK-NEXT: 100000d0: 10 00 00 90 adrp x16, #0 +// CHECK-NEXT: 100000d4: 11 82 40 f9 ldr x17, [x16, #256] +// CHECK-NEXT: 100000d8: 10 02 04 91 add x16, x16, #256 +// CHECK-NEXT: 100000dc: 20 02 1f d6 br x17 Index: test/ELF/arm-copy.s =================================================================== --- test/ELF/arm-copy.s +++ test/ELF/arm-copy.s @@ -1,7 +1,7 @@ // REQUIRES: arm // RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t.o // RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %p/Inputs/relocation-copy-arm.s -o %t2.o -// RUN: ld.lld -shared %t2.o -o %t2.so +// RUN: ld.lld -shared %t2.o -soname fixed-length-string.so -o %t2.so // RUN: ld.lld --hash-style=sysv %t.o %t2.so -o %t3 // RUN: llvm-readobj -s -r --expand-relocs -symbols %t3 | FileCheck %s // RUN: llvm-objdump -d -triple=armv7a-none-linux-gnueabi %t3 | FileCheck -check-prefix=CODE %s @@ -78,4 +78,4 @@ // RODATA: Contents of section .rodata: // S(z) = 0x13004 -// RODATA-NEXT: 10114 04300100 +// RODATA-NEXT: 10160 04300100 Index: test/ELF/arm-execute-only.s =================================================================== --- test/ELF/arm-execute-only.s +++ 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 0x0016d 0x0016d R 0x1000 +// CHECK: LOAD 0x000000 0x00000000 0x00000000 0x00170 0x00170 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 .gnu.hash .hash .dynstr +// CHECK: 01 .dynsym .dynstr .gnu.hash .hash // CHECK: 02 .text // CHECK: 03 .foo // CHECK: 04 .dynamic // DIFF-NOT: LOAD -// DIFF: LOAD 0x000000 0x00000000 0x00000000 0x0014d 0x0014d R 0x1000 +// DIFF: LOAD 0x000000 0x00000000 0x00000000 0x00150 0x00150 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 .gnu.hash .hash .dynstr +// DIFF: 01 .dynsym .dynstr .gnu.hash .hash // DIFF: 02 .text .foo // DIFF: 03 .dynamic Index: test/ELF/arm-exidx-shared.s =================================================================== --- test/ELF/arm-exidx-shared.s +++ test/ELF/arm-exidx-shared.s @@ -41,5 +41,5 @@ // CHECK-NEXT: 0x200C R_ARM_JUMP_SLOT __gxx_personality_v0 // CHECK-EXTAB: Contents of section .ARM.extab: -// 014c + 0ee4 = 0x1030 = __gxx_personality_v0(PLT) -// CHECK-EXTAB-NEXT: 014c e40e0000 b0b0b000 00000000 +// 01d8 + 0e58 = 0x1030 = __gxx_personality_v0(PLT) +// CHECK-EXTAB-NEXT: 01d8 580e0000 b0b0b000 00000000 Index: test/ELF/basic-ppc.s =================================================================== --- test/ELF/basic-ppc.s +++ test/ELF/basic-ppc.s @@ -65,7 +65,7 @@ // CHECK-NEXT: Address: 0x114 // CHECK-NEXT: Offset: 0x114 // CHECK-NEXT: Size: 16 -// CHECK-NEXT: Link: 3 +// CHECK-NEXT: Link: 2 // 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: .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: 0x124 // CHECK-NEXT: Offset: 0x124 -// CHECK-NEXT: Size: 16 -// CHECK-NEXT: Link: 1 +// 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 { // CHECK-NEXT: Index: 3 -// 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: 0x134 -// CHECK-NEXT: Offset: 0x134 -// CHECK-NEXT: Size: 1 -// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Address: 0x128 +// CHECK-NEXT: Offset: 0x128 +// 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 { @@ -139,14 +139,14 @@ // CHECK-NEXT: Address: 0x2000 // CHECK-NEXT: Offset: 0x2000 // CHECK-NEXT: Size: 48 -// CHECK-NEXT: Link: 3 +// CHECK-NEXT: Link: 2 // 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 00000134 0000000A 00000001 |.......4........| -// CHECK-NEXT: 0020: 00000004 00000124 00000000 00000000 |.......$........| +// CHECK-NEXT: 0010: 00000005 00000124 0000000A 00000001 |.......$........| +// CHECK-NEXT: 0020: 00000004 00000128 00000000 00000000 |.......(........| // CHECK-NEXT: ) // CHECK-NEXT: } // CHECK-NEXT: Section { @@ -165,7 +165,7 @@ // CHECK-NEXT: AddressAlignment: 1 // CHECK-NEXT: EntrySize: 1 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 4C4C4420 312E3000 |LLD 1.0.| +// CHECK-NEXT: 0000: 4C4C4420 312E3000 |LLD 1.0.| // 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 002E6861 7368002E |..dynsym..hash..| -// CHECK-NEXT: 0010: 64796E73 7472002E 74657874 002E6479 |dynstr..text..dy| +// CHECK-NEXT: 0000: 002E6479 6E73796D 002E6479 6E737472 |..dynsym..dynstr| +// CHECK-NEXT: 0010: 002E6861 7368002E 74657874 002E6479 |..hash..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.| @@ -215,7 +215,7 @@ // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: 0x20A1 -// CHECK-NEXT: Size: 1 +// CHECK-NEXT: Size: 10 // CHECK-NEXT: Link: 0 // CHECK-NEXT: Info: 0 // CHECK-NEXT: AddressAlignment: 1 @@ -243,8 +243,8 @@ // CHECK-NEXT: Offset: 0x0 // CHECK-NEXT: VirtualAddress: 0x0 // CHECK-NEXT: PhysicalAddress: 0x0 -// CHECK-NEXT: FileSize: 309 -// CHECK-NEXT: MemSize: 309 +// CHECK-NEXT: FileSize: 312 +// CHECK-NEXT: MemSize: 312 // CHECK-NEXT: Flags [ (0x4) // CHECK-NEXT: PF_R (0x4) // CHECK-NEXT: ] Index: test/ELF/basic-ppc64.s =================================================================== --- test/ELF/basic-ppc64.s +++ test/ELF/basic-ppc64.s @@ -66,7 +66,7 @@ // CHECK-NEXT: Address: 0x1C8 // CHECK-NEXT: Offset: 0x1C8 // CHECK-NEXT: Size: 24 -// CHECK-NEXT: Link: 3 +// CHECK-NEXT: Link: 2 // 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: .hash (9) -// CHECK-NEXT: Type: SHT_HASH (0x5) +// CHECK-NEXT: Name: .dynstr (9) +// CHECK-NEXT: Type: SHT_STRTAB (0x3) // CHECK-NEXT: Flags [ (0x2) // CHECK-NEXT: SHF_ALLOC (0x2) // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x1E0 // CHECK-NEXT: Offset: 0x1E0 -// CHECK-NEXT: Size: 16 -// CHECK-NEXT: Link: 1 +// 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 { // CHECK-NEXT: Index: 3 -// CHECK-NEXT: Name: .dynstr (15) -// CHECK-NEXT: Type: SHT_STRTAB (0x3) +// CHECK-NEXT: Name: .hash (17) +// CHECK-NEXT: Type: SHT_HASH (0x5) // CHECK-NEXT: Flags [ (0x2) // CHECK-NEXT: SHF_ALLOC (0x2) // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1F0 -// CHECK-NEXT: Offset: 0x1F0 -// CHECK-NEXT: Size: 1 -// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Address: 0x1E4 +// CHECK-NEXT: Offset: 0x1E4 +// 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 { @@ -141,16 +141,16 @@ // CHECK-NEXT: Address: 0x20000 // CHECK-NEXT: Offset: 0x20000 // CHECK-NEXT: Size: 96 -// CHECK-NEXT: Link: 3 +// CHECK-NEXT: Link: 2 // 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 F0010000 00000000 |................| +// CHECK-NEXT: 0020: 05000000 00000000 E0010000 00000000 |................| // CHECK-NEXT: 0030: 0A000000 00000000 01000000 00000000 |................| -// CHECK-NEXT: 0040: 04000000 00000000 E0010000 00000000 |................| +// CHECK-NEXT: 0040: 04000000 00000000 E4010000 00000000 |................| // CHECK-NEXT: 0050: 00000000 00000000 00000000 00000000 |................| // CHECK-NEXT: ) // CHECK-NEXT: } @@ -170,7 +170,7 @@ // CHECK-NEXT: AddressAlignment: 1 // CHECK-NEXT: EntrySize: 1 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 4C4C4420 312E3000 |LLD 1.0.| +// CHECK-NEXT: 0000: 4C4C4420 312E3000 |LLD 1.0.| // CHECK-NEXT: ) // CHECK-NEXT: } // CHECK-NEXT: Section { @@ -206,8 +206,8 @@ // CHECK-NEXT: AddressAlignment: 1 // CHECK-NEXT: EntrySize: 0 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 002E6479 6E73796D 002E6861 7368002E |..dynsym..hash..| -// CHECK-NEXT: 0010: 64796E73 7472002E 74657874 002E6479 |dynstr..text..dy| +// CHECK-NEXT: 0000: 002E6479 6E73796D 002E6479 6E737472 |..dynsym..dynstr| +// CHECK-NEXT: 0010: 002E6861 7368002E 74657874 002E6479 |..hash..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: 497 -// CHECK-NEXT: MemSize: 497 +// CHECK-NEXT: FileSize: 500 +// CHECK-NEXT: MemSize: 500 // CHECK-NEXT: Flags [ (0x4) // CHECK-NEXT: PF_R (0x4) // CHECK-NEXT: ] Index: test/ELF/dynamic-no-rosegment.s =================================================================== --- test/ELF/dynamic-no-rosegment.s +++ 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 0x1D8 +# CHECK-NEXT: 0x0000000000000005 STRTAB 0x138 # CHECK-NEXT: 0x000000000000000A STRSZ 1 (bytes) -# CHECK-NEXT: 0x000000006FFFFEF5 GNU_HASH 0x138 -# CHECK-NEXT: 0x0000000000000004 HASH 0x154 +# CHECK-NEXT: 0x000000006FFFFEF5 GNU_HASH 0x140 +# CHECK-NEXT: 0x0000000000000004 HASH 0x15C # CHECK-NEXT: 0x0000000000000000 NULL 0x0 # CHECK-NEXT: ] Index: test/ELF/dynsec-at-beginning.s =================================================================== --- test/ELF/dynsec-at-beginning.s +++ test/ELF/dynsec-at-beginning.s @@ -0,0 +1,16 @@ +# 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-readobj -elf-output-style=GNU -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: test/ELF/eh-frame-padding-no-rosegment.s =================================================================== --- test/ELF/eh-frame-padding-no-rosegment.s +++ test/ELF/eh-frame-padding-no-rosegment.s @@ -58,7 +58,7 @@ // CHECK-NEXT: EntrySize: // CHECK-NEXT: SectionData ( // CHECK-NEXT: 0000: 1C000000 00000000 017A5052 00017810 -// CHECK-NEXT: 0010: 061BBEFF FFFF1B0C 07089001 00000000 -// CHECK-NEXT: 0020: 14000000 24000000 A8FFFFFF 00000000 +// CHECK-NEXT: 0010: 061BDAFF FFFF1B0C 07089001 00000000 +// CHECK-NEXT: 0020: 14000000 24000000 C4FFFFFF 00000000 // CHECK-NEXT: 0030: 00000000 00000000 // CHECK-NEXT: ) Index: test/ELF/gc-merge-local-sym.s =================================================================== --- test/ELF/gc-merge-local-sym.s +++ test/ELF/gc-merge-local-sym.s @@ -9,7 +9,7 @@ // CHECK-NEXT: SHF_MERGE // CHECK-NEXT: SHF_STRINGS // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1C8 +// CHECK-NEXT: Address: 0x1FD // CHECK-NEXT: Offset: // CHECK-NEXT: Size: 4 // CHECK-NEXT: Link: 0 Index: test/ELF/gnu-ifunc-dyntags.s =================================================================== --- test/ELF/gnu-ifunc-dyntags.s +++ 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 0000000000000210 +# CHECK: .rela.plt 00000030 0000000000000218 # CHECK: .got.plt 00000010 0000000000002000 # TAGS: Relocations [ @@ -19,7 +19,7 @@ # TAGS-NEXT: ] # TAGS: Tag Type Name/Value -# TAGS: 0x0000000000000017 JMPREL 0x210 +# TAGS: 0x0000000000000017 JMPREL 0x218 # TAGS: 0x0000000000000002 PLTRELSZ 48 # TAGS: 0x0000000000000003 PLTGOT 0x2000 # TAGS: 0x0000000000000014 PLTREL RELA Index: test/ELF/i386-merge.s =================================================================== --- test/ELF/i386-merge.s +++ test/ELF/i386-merge.s @@ -9,7 +9,7 @@ // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: SHF_MERGE // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x114 +// CHECK-NEXT: Address: 0x128 // CHECK-NEXT: Offset: // CHECK-NEXT: Size: // CHECK-NEXT: Link: @@ -35,7 +35,7 @@ // CHECK-NEXT: AddressAlignment: 1 // CHECK-NEXT: EntrySize: 0 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 14010000 | +// CHECK-NEXT: 0000: 28010000 | // CHECK-NEXT: ) // The content of .data should be the address of .mysec. 14010000 is 0x114 in Index: test/ELF/i386-retpoline-nopic-linkerscript.s =================================================================== --- test/ELF/i386-retpoline-nopic-linkerscript.s +++ test/ELF/i386-retpoline-nopic-linkerscript.s @@ -14,9 +14,9 @@ // CHECK: Disassembly of section .plt: // CHECK-NEXT: .plt: -// CHECK-NEXT: 10: ff 35 fc 00 00 00 pushl 252 +// CHECK-NEXT: 10: ff 35 cc 00 00 00 pushl 204 // CHECK-NEXT: 16: 50 pushl %eax -// CHECK-NEXT: 17: a1 00 01 00 00 movl 256, %eax +// CHECK-NEXT: 17: a1 d0 00 00 00 movl 208, %eax // CHECK-NEXT: 1c: e8 0f 00 00 00 calll 15 <.plt+0x20> // CHECK-NEXT: 21: f3 90 pause // CHECK-NEXT: 23: 0f ae e8 lfence @@ -37,7 +37,7 @@ // CHECK-NEXT: 3e: c3 retl // CHECK-NEXT: 3f: cc int3 // CHECK-NEXT: 40: 50 pushl %eax -// CHECK-NEXT: 41: a1 04 01 00 00 movl 260, %eax +// CHECK-NEXT: 41: a1 d4 00 00 00 movl 212, %eax // CHECK-NEXT: 46: e8 e5 ff ff ff calll -27 <.plt+0x20> // CHECK-NEXT: 4b: e9 d1 ff ff ff jmp -47 <.plt+0x11> // CHECK-NEXT: 50: 68 00 00 00 00 pushl $0 @@ -49,7 +49,7 @@ // CHECK-NEXT: 5e: cc int3 // CHECK-NEXT: 5f: cc int3 // CHECK-NEXT: 60: 50 pushl %eax -// CHECK-NEXT: 61: a1 08 01 00 00 movl 264, %eax +// CHECK-NEXT: 61: a1 d8 00 00 00 movl 216, %eax // CHECK-NEXT: 66: e8 c5 ff ff ff calll -59 <.plt+0x20> // CHECK-NEXT: 6b: e9 b1 ff ff ff jmp -79 <.plt+0x11> // CHECK-NEXT: 70: 68 08 00 00 00 pushl $8 Index: test/ELF/i386-retpoline-pic-linkerscript.s =================================================================== --- test/ELF/i386-retpoline-pic-linkerscript.s +++ test/ELF/i386-retpoline-pic-linkerscript.s @@ -14,9 +14,9 @@ // CHECK: Disassembly of section .plt: // CHECK-NEXT: .plt: -// CHECK-NEXT: 10: ff b3 fc 00 00 00 pushl 252(%ebx) +// CHECK-NEXT: 10: ff b3 cc 00 00 00 pushl 204(%ebx) // CHECK-NEXT: 16: 50 pushl %eax -// CHECK-NEXT: 17: 8b 83 00 01 00 00 movl 256(%ebx), %eax +// CHECK-NEXT: 17: 8b 83 d0 00 00 00 movl 208(%ebx), %eax // CHECK-NEXT: 1d: e8 0e 00 00 00 calll 14 <.plt+0x20> // CHECK-NEXT: 22: f3 90 pause // CHECK-NEXT: 24: 0f ae e8 lfence @@ -36,7 +36,7 @@ // CHECK-NEXT: 3e: c3 retl // CHECK-NEXT: 3f: cc int3 // CHECK-NEXT: 40: 50 pushl %eax -// CHECK-NEXT: 41: 8b 83 04 01 00 00 movl 260(%ebx), %eax +// CHECK-NEXT: 41: 8b 83 d4 00 00 00 movl 212(%ebx), %eax // CHECK-NEXT: 47: e8 e4 ff ff ff calll -28 <.plt+0x20> // CHECK-NEXT: 4c: e9 d1 ff ff ff jmp -47 <.plt+0x12> // CHECK-NEXT: 51: 68 00 00 00 00 pushl $0 @@ -47,7 +47,7 @@ // CHECK-NEXT: 5e: cc int3 // CHECK-NEXT: 5f: cc int3 // CHECK-NEXT: 60: 50 pushl %eax -// CHECK-NEXT: 61: 8b 83 08 01 00 00 movl 264(%ebx), %eax +// CHECK-NEXT: 61: 8b 83 d8 00 00 00 movl 216(%ebx), %eax // CHECK-NEXT: 67: e8 c4 ff ff ff calll -60 <.plt+0x20> // CHECK-NEXT: 6c: e9 b1 ff ff ff jmp -79 <.plt+0x12> // CHECK-NEXT: 71: 68 08 00 00 00 pushl $8 Index: test/ELF/linkerscript/addr-zero.test =================================================================== --- test/ELF/linkerscript/addr-zero.test +++ test/ELF/linkerscript/addr-zero.test @@ -8,7 +8,7 @@ # CHECK: Symbol { # CHECK: Name: foo -# CHECK-NEXT: Value: 0x0 +# CHECK-NEXT: Value: 0x38 # CHECK-NEXT: Size: 0 # CHECK-NEXT: Binding: Global # CHECK-NEXT: Type: None Index: test/ELF/linkerscript/align-empty.test =================================================================== --- test/ELF/linkerscript/align-empty.test +++ test/ELF/linkerscript/align-empty.test @@ -15,4 +15,6 @@ # CHECK: Sections: # CHECK-NEXT: Idx Name Size Address # CHECK-NEXT: 0 00000000 0000000000000000 -# CHECK-NEXT: 1 foo 00000001 0000000000001000 +# CHECK-NEXT: 1 .dynsym 00000018 0000000000000190 +# CHECK-NEXT: 2 .dynstr 00000001 00000000000001a8 +# CHECK-NEXT: 3 foo 00000001 0000000000001000 Index: test/ELF/linkerscript/dot-is-not-abs.s =================================================================== --- test/ELF/linkerscript/dot-is-not-abs.s +++ test/ELF/linkerscript/dot-is-not-abs.s @@ -26,7 +26,7 @@ # CHECK-NEXT: SHF_ALLOC # CHECK-NEXT: SHF_EXECINSTR # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x0 +# CHECK-NEXT: Address: 0x1C # CHECK-NEXT: Offset: # CHECK-NEXT: Size: 4 # CHECK-NEXT: Link: @@ -40,7 +40,7 @@ # CHECK: Symbol { # CHECK: Name: foo -# CHECK-NEXT: Value: 0x4 +# CHECK-NEXT: Value: 0x20 # CHECK-NEXT: Size: 0 # CHECK-NEXT: Binding: Local # CHECK-NEXT: Type: None Index: test/ELF/linkerscript/emit-reloc.s =================================================================== --- test/ELF/linkerscript/emit-reloc.s +++ test/ELF/linkerscript/emit-reloc.s @@ -9,9 +9,9 @@ # CHECK: Relocations [ # CHECK-NEXT: Section ({{.*}}) .rela.dyn { -# CHECK-NEXT: 0x66 R_X86_64_64 .foo 0x0 +# CHECK-NEXT: 0x68 R_X86_64_64 .foo 0x0 # CHECK-NEXT: } # CHECK-NEXT: Section ({{.*}}) .rela.data { -# CHECK-NEXT: 0x66 R_X86_64_64 .foo 0x0 +# CHECK-NEXT: 0x68 R_X86_64_64 .foo 0x0 # CHECK-NEXT: } # CHECK-NEXT: ] Index: test/ELF/linkerscript/expr-sections.test =================================================================== --- test/ELF/linkerscript/expr-sections.test +++ test/ELF/linkerscript/expr-sections.test @@ -13,11 +13,11 @@ } }; -# CHECK: 1 .text 00000000 0000000000000004 TEXT DATA +# CHECK: 3 .text 00000000 00000000000000d0 TEXT DATA -# CHECK: 0000000000000005 .text 00000000 foo1 -# CHECK: 0000000000000005 .text 00000000 bar1 +# CHECK: 00000000000000d1 .text 00000000 foo1 +# CHECK: 00000000000000d1 .text 00000000 bar1 # CHECK: 0000000000000000 .text 00000000 foo2 # CHECK: 0000000000000000 .text 00000000 bar2 -# CHECK: 0000000000000005 .text 00000000 foo3 -# CHECK: 0000000000000005 .text 00000000 bar3 +# CHECK: 00000000000000d1 .text 00000000 foo3 +# CHECK: 00000000000000d1 .text 00000000 bar3 Index: test/ELF/linkerscript/implicit-program-header.test =================================================================== --- test/ELF/linkerscript/implicit-program-header.test +++ test/ELF/linkerscript/implicit-program-header.test @@ -8,8 +8,8 @@ # RUN: llvm-readobj -elf-output-style=GNU -l %t1 | FileCheck %s # CHECK: Segment Sections... -# CHECK-NEXT: 00 .text .dynsym .hash .dynstr .dynamic -# CHECK-NEXT: 01 .bar .foo +# CHECK-NEXT: 00 .text .hash .dynamic +# CHECK-NEXT: 01 .bar .dynsym .dynstr .foo PHDRS { ph_write PT_LOAD FLAGS(2); Index: test/ELF/linkerscript/locationcountererr2.s =================================================================== --- test/ELF/linkerscript/locationcountererr2.s +++ test/ELF/linkerscript/locationcountererr2.s @@ -1,11 +1,11 @@ # REQUIRES: x86 # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o # RUN: echo "SECTIONS {" > %t.script -# RUN: echo ". = 0x20; . = 0x10; .text : {} }" >> %t.script +# RUN: echo ". = 0x150; . = 0x10; .text : {} }" >> %t.script # RUN: ld.lld %t.o --script %t.script -o %t -shared # RUN: llvm-objdump -section-headers %t | FileCheck %s # CHECK: Idx Name Size Address -# CHECK: 1 .text 00000000 0000000000000010 +# CHECK: 3 .text 00000000 0000000000000010 # RUN: echo "SECTIONS { . = 0x20; . = ASSERT(0x1, "foo"); }" > %t2.script # RUN: ld.lld %t.o --script %t2.script -o %t -shared Index: test/ELF/linkerscript/merge-sections-syms.s =================================================================== --- test/ELF/linkerscript/merge-sections-syms.s +++ test/ELF/linkerscript/merge-sections-syms.s @@ -20,7 +20,7 @@ # CHECK-NEXT: } # CHECK-NEXT: Symbol { # CHECK-NEXT: Name: A -# CHECK-NEXT: Value: 0x195 +# CHECK-NEXT: Value: 0x1E2 # 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: 0x196 +# CHECK-NEXT: Value: 0x1E3 # CHECK-NEXT: Size: # CHECK-NEXT: Binding: # CHECK-NEXT: Type: Index: test/ELF/linkerscript/merge-sections.s =================================================================== --- test/ELF/linkerscript/merge-sections.s +++ test/ELF/linkerscript/merge-sections.s @@ -29,7 +29,7 @@ # CHECK: Name: end # 0x19E = begin + sizeof(.foo) = 0x190 + 0xE -# CHECK-NEXT: Value: 0x19E +# CHECK-NEXT: Value: 0x1F2 # Check that we don't crash with --gc-sections # RUN: ld.lld --gc-sections -o %t2 --script %t.script %t -shared Index: test/ELF/linkerscript/no-space.s =================================================================== --- test/ELF/linkerscript/no-space.s +++ test/ELF/linkerscript/no-space.s @@ -1,11 +1,11 @@ # REQUIRES: x86 # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o -# RUN: echo "SECTIONS {foo 0 : {*(foo*)} }" > %t.script +# RUN: echo "SECTIONS {foo 0 : {*(foo*)} .dynsym : {*(.dynsym)} .dynstr : {*(.dynstr)} }" > %t.script # RUN: ld.lld --hash-style=sysv -o %t --script %t.script %t.o -shared # RUN: llvm-readobj -elf-output-style=GNU -l %t | FileCheck %s -# RUN: echo "SECTIONS {foo : {*(foo*)} }" > %t.script +# RUN: echo "SECTIONS {foo : {*(foo*)} .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } }" > %t.script # RUN: ld.lld --hash-style=sysv -o %t --script %t.script %t.o -shared # RUN: llvm-readobj -elf-output-style=GNU -l %t | FileCheck %s @@ -18,7 +18,7 @@ # CHECK: Section to Segment mapping: # CHECK-NEXT: Segment Sections... -# CHECK-NEXT: 00 foo .text .dynsym .hash .dynstr +# CHECK-NEXT: 00 foo .text .hash .dynsym .dynstr .section foo, "a" .quad 0 Index: test/ELF/linkerscript/non-absolute.s =================================================================== --- test/ELF/linkerscript/non-absolute.s +++ test/ELF/linkerscript/non-absolute.s @@ -7,7 +7,7 @@ # DUMP: Disassembly of section .text: # DUMP-NEXT: foo: -# DUMP-NEXT: 0: {{.*}} -21(%rip), %eax +# DUMP-NEXT: 50: {{.*}} -101(%rip), %eax # SYMBOL: Symbol { # SYMBOL: Name: B @@ -18,7 +18,7 @@ # SYMBOL-NEXT: Other [ # SYMBOL-NEXT: STV_HIDDEN # SYMBOL-NEXT: ] -# SYMBOL-NEXT: Section: .text +# SYMBOL-NEXT: Section: .dynsym # SYMBOL-NEXT: } .text Index: test/ELF/linkerscript/non-absolute2.test =================================================================== --- test/ELF/linkerscript/non-absolute2.test +++ test/ELF/linkerscript/non-absolute2.test @@ -9,8 +9,10 @@ } # CHECK: Sections: -# CHECK-NEXT: Idx Name Size Address -# CHECK-NEXT: 0 00000000 0000000000000000 -# CHECK-NEXT: 1 .text 00000000 0000000000001000 +# 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-NEXT: 3 .text 00000000 0000000000001034 -# CHECK: 0000000000000001 .text 00000000 A +# CHECK: 0000000000000001 .dynsym 00000000 A Index: test/ELF/linkerscript/non-alloc.s =================================================================== --- test/ELF/linkerscript/non-alloc.s +++ test/ELF/linkerscript/non-alloc.s @@ -15,7 +15,7 @@ # CHECK: Section to Segment mapping: # CHECK-NEXT: Segment Sections... -# CHECK-NEXT: 00 .text .dynsym .hash .dynstr +# CHECK-NEXT: 00 .dynsym .dynstr .text .hash # CHECK-NEXT: 01 .dynamic nop Index: test/ELF/linkerscript/orphan-first-cmd.test =================================================================== --- test/ELF/linkerscript/orphan-first-cmd.test +++ test/ELF/linkerscript/orphan-first-cmd.test @@ -17,4 +17,4 @@ # CHECK-NEXT: SHF_ALLOC # CHECK-NEXT: SHF_EXECINSTR # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x1000 +# CHECK-NEXT: Address: 0x1038 Index: test/ELF/linkerscript/out-of-order.s =================================================================== --- test/ELF/linkerscript/out-of-order.s +++ test/ELF/linkerscript/out-of-order.s @@ -1,19 +1,37 @@ # REQUIRES: x86 # RUN: llvm-mc -filetype=obj -triple=x86_64-linux %s -o %t.o -# RUN: echo "SECTIONS { .data 0x4000 : { *(.data) } .text 0x2000 : { *(.text) } }" > %t.script +# RUN: echo "SECTIONS { .data 0x4000 : {*(.data)} .dynsym 0x2000 : {*(.dynsym)} .dynstr : {*(.dynstr)} }" > %t.script # RUN: ld.lld --hash-style=sysv -o %t.so --script %t.script %t.o -shared # RUN: llvm-objdump -section-headers %t.so | FileCheck %s +# Note: how the layout is done: +# we need to layout 2 segments, each contains sections: +# seg1: .data .dynamic +# seg2: .dynsym .dynstr .text .hash +# for each segment, we start from the first section, regardless +# whether it is an orphan or not (sections that are not listed in the +# linkerscript are orphans): +# for seg1, we assign address: .data(0x4000), .dynamic(0x4008) +# for seg2, we assign address: .dynsym(0x2000), .dynstr(0x2018) ... +# .dynsym is not an orphan, so we take address from script, we assign +# .dynstr current address cursor, which is the end # of .dynsym and so +# on for later sections. + +# Also note, it is absolutely *illegal* to have section addresses of +# the same segment in none-increasing order, authors of linker scripts +# must take responsibility to make sure this does not happen. + # CHECK: Sections: # CHECK-NEXT: Idx Name Size Address Type # CHECK-NEXT: 0 00000000 0000000000000000 -# CHECK-NEXT: 1 .data 00000008 0000000000004000 DATA +# CHECK-NEXT: 1 .data 00000008 0000000000004000 # CHECK-NEXT: 2 .dynamic 00000060 0000000000004008 -# CHECK-NEXT: 3 .text 00000008 0000000000002000 TEXT DATA -# CHECK-NEXT: 4 .dynsym 00000018 0000000000002008 -# CHECK-NEXT: 5 .hash 00000010 0000000000002020 -# CHECK-NEXT: 6 .dynstr 00000001 0000000000002030 +# CHECK-NEXT: 3 .dynsym 00000018 0000000000002000 +# CHECK-NEXT: 4 .dynstr 00000001 0000000000002018 +# CHECK-NEXT: 5 .text 00000008 000000000000201c +# CHECK-NEXT: 6 .hash 00000010 0000000000002024 .quad 0 .data .quad 0 + Index: test/ELF/linkerscript/overlapping-sections.s =================================================================== --- test/ELF/linkerscript/overlapping-sections.s +++ 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 0x0000fd 0x0000fd R E 0x1000 +# BAD-LMA-NEXT: LOAD 0x001000 0x0000000000000000 0x0000000000000000 0x000104 0x000104 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 0x0000fd 0x0000fd R E 0x1000 +# BAD-VADDR-NEXT: LOAD 0x001000 0x0000000000000000 0x0000000000000000 0x000104 0x000104 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 0x0000fd 0x0000fd R E 0x1000 +# BAD-BOTH-NEXT: LOAD 0x001000 0x0000000000000000 0x0000000000000000 0x000104 0x000104 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: test/ELF/linkerscript/sections-sort.s =================================================================== --- test/ELF/linkerscript/sections-sort.s +++ test/ELF/linkerscript/sections-sort.s @@ -15,11 +15,11 @@ # CHECK: Id # CHECK-NEXT: 0 -# CHECK-NEXT: 1 .text -# CHECK-NEXT: 2 foo -# CHECK-NEXT: 3 .dynsym -# CHECK-NEXT: 4 .hash -# CHECK-NEXT: 5 .dynstr +# CHECK-NEXT: 1 .dynsym +# CHECK-NEXT: 2 .dynstr +# CHECK-NEXT: 3 .text +# CHECK-NEXT: 4 foo +# CHECK-NEXT: 5 .hash # CHECK-NEXT: 6 .dynamic # CHECK-NEXT: 7 .comment # CHECK-NEXT: 8 .symtab Index: test/ELF/linkerscript/sort-non-script.s =================================================================== --- test/ELF/linkerscript/sort-non-script.s +++ test/ELF/linkerscript/sort-non-script.s @@ -5,10 +5,10 @@ # RUN: ld.lld --hash-style=sysv -o %t1 --script %t.script %t -shared # RUN: llvm-readobj -elf-output-style=GNU -s %t1 | FileCheck %s -# CHECK: .text {{.*}} AX -# CHECK-NEXT: .dynsym {{.*}} A -# CHECK-NEXT: .hash {{.*}} A +# CHECK: .dynsym {{.*}} A # CHECK-NEXT: .dynstr {{.*}} A +# CHECK-NEXT: .text {{.*}} AX +# CHECK-NEXT: .hash {{.*}} A # CHECK-NEXT: foo {{.*}} WA # CHECK-NEXT: .dynamic {{.*}} WA Index: test/ELF/linkerscript/symbol-only.test =================================================================== --- test/ELF/linkerscript/symbol-only.test +++ test/ELF/linkerscript/symbol-only.test @@ -15,6 +15,8 @@ # 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: SYMBOL TABLE: Index: test/ELF/linkerscript/unused-synthetic.s =================================================================== --- test/ELF/linkerscript/unused-synthetic.s +++ test/ELF/linkerscript/unused-synthetic.s @@ -10,8 +10,10 @@ # RUN: llvm-objdump -section-headers %t.so | FileCheck %s # CHECK-NOT: .got # CHECK-NOT: .plt -# CHECK: .text -# CHECK-NEXT: .dynsym +# CHECK: .dynsym +# CHECK-NEXT: .dynstr +# CHECK-NEXT: .text +# CHECK-NEXT: .gnu.hash # Test that the size of a removed unused synthetic input section is not added # to the output section size. Adding a symbol assignment prevents removal of Index: test/ELF/map-file.s =================================================================== --- test/ELF/map-file.s +++ 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 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: 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: 201000 201000 2d 4 .text // CHECK-NEXT: 201000 201000 28 4 {{.*}}{{/|\\}}map-file.s.tmp1.o:(.text) // CHECK-NEXT: 201000 201000 0 1 _start @@ -95,6 +95,7 @@ // CHECK-NEXT: 0 0 6d 1 .strtab // CHECK-NEXT: 0 0 6d 1 :(.strtab) + // RUN: not ld.lld %t1.o %t2.o %t3.o %t4.a -o %t -Map=/ 2>&1 \ // RUN: | FileCheck -check-prefix=FAIL %s // FAIL: cannot open map file / Index: test/ELF/merge-gc-piece.s =================================================================== --- test/ELF/merge-gc-piece.s +++ test/ELF/merge-gc-piece.s @@ -10,7 +10,7 @@ # CHECK-NEXT: SHF_ALLOC # CHECK-NEXT: SHF_MERGE # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x190 +# CHECK-NEXT: Address: 0x1C8 # CHECK: Name: .bar # CHECK-NEXT: Type: SHT_PROGBITS @@ -24,7 +24,7 @@ # CHECK-NEXT: AddressAlignment: # CHECK-NEXT: EntrySize: # CHECK-NEXT: SectionData ( -# CHECK-NEXT: 0000: 91010000 00000000 92010000 00000000 +# CHECK-NEXT: 0000: C9010000 00000000 CA010000 00000000 # CHECK-NEXT: ) .section .foo,"aM",@progbits,8 Index: test/ELF/merge-shared-str.s =================================================================== --- test/ELF/merge-shared-str.s +++ test/ELF/merge-shared-str.s @@ -19,10 +19,10 @@ // CHECK-NEXT: SHF_MERGE // CHECK-NEXT: SHF_STRINGS // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1C8 +// CHECK-NEXT: Address: 0x1E1 // CHECK: Relocations [ // CHECK-NEXT: Section ({{.*}}) .rela.dyn { -// CHECK-NEXT: 0x{{.*}} R_X86_64_RELATIVE - 0x1C9 +// CHECK-NEXT: 0x{{.*}} R_X86_64_RELATIVE - 0x1E2 // CHECK-NEXT: } // CHECK-NEXT: ] Index: test/ELF/merge-shared.s =================================================================== --- test/ELF/merge-shared.s +++ test/ELF/merge-shared.s @@ -17,10 +17,10 @@ // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: SHF_MERGE // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1C8 +// CHECK-NEXT: Address: 0x1E4 // CHECK: Relocations [ // CHECK-NEXT: Section ({{.*}}) .rela.dyn { -// CHECK-NEXT: 0x{{.*}} R_X86_64_RELATIVE - 0x1CA +// CHECK-NEXT: 0x{{.*}} R_X86_64_RELATIVE - 0x1E6 // CHECK-NEXT: } // CHECK-NEXT: ] Index: test/ELF/merge-string.s =================================================================== --- test/ELF/merge-string.s +++ test/ELF/merge-string.s @@ -28,8 +28,8 @@ // CHECK-NEXT: SHF_MERGE // CHECK-NEXT: SHF_STRINGS // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1C8 -// CHECK-NEXT: Offset: 0x1C8 +// CHECK-NEXT: Address: 0x1E1 +// CHECK-NEXT: Offset: 0x1E1 // 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: 0x1C8 -// NOTAIL-NEXT: Offset: 0x1C8 +// NOTAIL-NEXT: Address: 0x1E1 +// NOTAIL-NEXT: Offset: 0x1E1 // 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: 0x1C8 -// NOMERGE-NEXT: Offset: 0x1C8 +// NOMERGE-NEXT: Address: 0x1E1 +// NOMERGE-NEXT: Offset: 0x1E1 // 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: 0x1CC -// CHECK-NEXT: Offset: 0x1CC +// CHECK-NEXT: Address: 0x1E6 +// CHECK-NEXT: Offset: 0x1E6 // CHECK-NEXT: Size: 4 // CHECK-NEXT: Link: 0 // CHECK-NEXT: Info: 0 @@ -95,11 +95,11 @@ // CHECK: Name: bar -// CHECK-NEXT: Value: 0x1C9 +// CHECK-NEXT: Value: 0x1E2 // CHECK: Name: foo -// CHECK-NEXT: Value: 0x1C8 +// CHECK-NEXT: Value: 0x1E1 // CHECK: Name: zed -// CHECK-NEXT: Value: 0x1CC +// CHECK-NEXT: Value: 0x1E6 // CHECK-NEXT: Size: 0 Index: test/ELF/merge-sym.s =================================================================== --- test/ELF/merge-sym.s +++ test/ELF/merge-sym.s @@ -15,7 +15,7 @@ // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: SHF_MERGE // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1C8 +// CHECK-NEXT: Address: 0x1E4 // CHECK: Name: foo -// CHECK-NEXT: Value: 0x1CA +// CHECK-NEXT: Value: 0x1E6 Index: test/ELF/merge-to-non-alloc.s =================================================================== --- test/ELF/merge-to-non-alloc.s +++ test/ELF/merge-to-non-alloc.s @@ -15,11 +15,11 @@ // CHECK-NEXT: AddressAlignment: // CHECK-NEXT: EntrySize: // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: C8010000 00000000 D0010000 00000000 | +// CHECK-NEXT: 0000: E4010000 00000000 EC010000 00000000 | // CHECK-NEXT: ) // CHECK: Name: foo -// CHECK-NEXT: Value: 0x1C8 +// CHECK-NEXT: Value: 0x1E4 .section .foo,"aM",@progbits,4 .align 4 Index: test/ELF/mips-got-string.s =================================================================== --- test/ELF/mips-got-string.s +++ test/ELF/mips-got-string.s @@ -8,7 +8,7 @@ # CHECK: Symbol { # CHECK: Name: $.str -# CHECK-NEXT: Value: 0xF4 +# CHECK-NEXT: Value: 0x105 # CHECK: } # CHECK: Local entries [ Index: test/ELF/mips-gp-ext.s =================================================================== --- test/ELF/mips-gp-ext.s +++ test/ELF/mips-gp-ext.s @@ -27,42 +27,42 @@ # REQUIRES: mips # REL: Contents of section .text: -# REL-NEXT: 0000 3c080000 2108010c 8f82fffc +# REL-NEXT: 0030 3c080000 2108010c 8f82ffcc # ^-- %hi(_gp_disp) # ^-- %lo(_gp_disp) # ^-- 8 - (0x10c - 0x100) # G - (GP - .got) # REL: Contents of section .reginfo: -# REL-NEXT: 0028 10000104 00000000 00000000 00000000 -# REL-NEXT: 0038 00000000 0000010c +# REL-NEXT: 0058 10000104 00000000 00000000 00000000 +# REL-NEXT: 0068 00000000 0000013c # ^-- _gp # REL: Contents of section .data: # REL-NEXT: 00f0 fffffef4 # ^-- 0-0x10c -# REL: 00000000 .text 00000000 foo +# REL: 00000030 .text 00000000 foo # REL: 00000000 *ABS* 00000000 .hidden _gp_disp -# REL: 0000010c *ABS* 00000000 .hidden _gp +# REL: 0000013c *ABS* 00000000 .hidden _gp # ABS: Contents of section .text: -# ABS-NEXT: 0000 3c080000 21080200 8f82ff08 +# ABS-NEXT: 0030 3c080000 210801d0 8f82ff08 # ^-- %hi(_gp_disp) # ^-- %lo(_gp_disp) # ^-- 8 - (0x200 - 0x100) # G - (GP - .got) # ABS: Contents of section .reginfo: -# ABS-NEXT: 0028 10000104 00000000 00000000 00000000 -# ABS-NEXT: 0038 00000000 00000200 +# ABS-NEXT: 0058 10000104 00000000 00000000 00000000 +# ABS-NEXT: 0068 00000000 00000200 # ^-- _gp # ABS: Contents of section .data: -# ABS-NEXT: 00f0 fffffe00 +# ABS-NEXT: 00f0 fffffe30 # ^-- 0-0x200 -# ABS: 00000000 .text 00000000 foo +# ABS: 00000030 .text 00000000 foo # ABS: 00000000 *ABS* 00000000 .hidden _gp_disp # ABS: 00000200 *ABS* 00000000 .hidden _gp Index: test/ELF/mips-gp-lowest.s =================================================================== --- test/ELF/mips-gp-lowest.s +++ test/ELF/mips-gp-lowest.s @@ -26,7 +26,7 @@ # CHECK-NEXT: SHF_MIPS_GPREL # CHECK-NEXT: SHF_WRITE # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0xE0 +# CHECK-NEXT: Address: 0xF0 # CHECK: } # CHECK: Section { # CHECK: Name: .got @@ -36,9 +36,9 @@ # CHECK-NEXT: SHF_MIPS_GPREL # CHECK-NEXT: SHF_WRITE # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0xF0 +# CHECK-NEXT: Address: 0x100 # CHECK: } # CHECK: Name: _gp (5) -# CHECK-NEXT: Value: 0x80D0 +# CHECK-NEXT: Value: 0x80E0 # ^-- 0xE0 + 0x7ff0 Index: test/ELF/note-noalloc.s =================================================================== --- test/ELF/note-noalloc.s +++ test/ELF/note-noalloc.s @@ -25,7 +25,7 @@ // CHECK: Type: PT_NOTE // CHECK-NEXT: Offset: // CHECK-NEXT: VirtualAddress: 0x[[ADDR]] -// CHECK-NEXT: PhysicalAddress: 0x245 +// CHECK-NEXT: PhysicalAddress: 0x24C // CHECK-NEXT: FileSize: 16 // CHECK-NEXT: MemSize: 16 // CHECK-NOT: PT_NOTE Index: test/ELF/relocation-shared.s =================================================================== --- test/ELF/relocation-shared.s +++ test/ELF/relocation-shared.s @@ -8,7 +8,7 @@ // CHECK-NEXT: Flags [ // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1C8 +// CHECK-NEXT: Address: 0x1E1 // 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: 380E0000 00000000 -// 0x1000 - 0x1C8 = 0xE38 +// CHECK-NEXT: 0000: 1F0E0000 00000000 +// 0x1000 - 0x1E1 = 0xE1F // CHECK-NEXT: ) // CHECK: Name: .text Index: test/ELF/relocation.s =================================================================== --- test/ELF/relocation.s +++ test/ELF/relocation.s @@ -1,6 +1,6 @@ // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/shared.s -o %t2 -// RUN: ld.lld %t2 -o %t2.so -shared +// RUN: ld.lld %t2 -soname fixed-length-string.so -o %t2.so -shared // RUN: ld.lld --hash-style=sysv %t %t2.so -o %t3 // RUN: llvm-readobj -s %t3 | FileCheck --check-prefix=SEC %s // RUN: llvm-objdump -s -d %t3 | FileCheck %s @@ -113,17 +113,16 @@ .quad R_X86_64_64 // CHECK: Contents of section .R_X86_64_64: -// CHECK-NEXT: 2001c8 c8012000 00000000 +// CHECK-NEXT: 20024d 4d022000 00000000 .section .R_X86_64_GOTPCREL,"a",@progbits .global R_X86_64_GOTPCREL R_X86_64_GOTPCREL: .long zed@gotpcrel -// 0x2020F8 - 0x2001D8 = 7952 -// 7952 = 0x101f0000 in little endian +// 0x2020F0(.got) - 0x200255(.R_X86_64_GOTPCREL) = 0x2e9b // CHECK: Contents of section .R_X86_64_GOTPCREL -// CHECK-NEXT: 2001d0 202f0000 +// CHECK-NEXT: 200255 9b2e0000 .section .R_X86_64_GOT32,"a",@progbits .global R_X86_64_GOT32 Index: test/ELF/relro-omagic.s =================================================================== --- test/ELF/relro-omagic.s +++ test/ELF/relro-omagic.s @@ -9,8 +9,8 @@ # NORELRO-NEXT: Idx Name Size Address Type # NORELRO-NEXT: 0 00000000 0000000000000000 # NORELRO-NEXT: 1 .dynsym 00000048 0000000000200120 -# NORELRO-NEXT: 2 .hash 00000020 0000000000200168 -# NORELRO-NEXT: 3 .dynstr 00000021 0000000000200188 +# NORELRO-NEXT: 2 .dynstr 00000021 0000000000200168 +# NORELRO-NEXT: 3 .hash 00000020 000000000020018c # NORELRO-NEXT: 4 .rela.dyn 00000018 00000000002001b0 # NORELRO-NEXT: 5 .rela.plt 00000018 00000000002001c8 # NORELRO-NEXT: 6 .text 0000000a 00000000002001e0 TEXT DATA Index: test/ELF/shared.s =================================================================== --- test/ELF/shared.s +++ test/ELF/shared.s @@ -59,21 +59,6 @@ // CHECK-NEXT: 0030: // CHECK-NEXT: ) // CHECK-NEXT: } -// CHECK-NEXT: Section { -// CHECK-NEXT: Index: 3 -// CHECK-NEXT: Name: .hash -// CHECK-NEXT: Type: SHT_HASH -// CHECK-NEXT: Flags [ -// CHECK-NEXT: SHF_ALLOC -// CHECK-NEXT: ] -// CHECK-NEXT: Address: [[HASHADDR:.*]] -// CHECK-NEXT: Offset: -// CHECK-NEXT: Size: -// CHECK-NEXT: Link: 2 -// CHECK-NEXT: Info: 0 -// CHECK-NEXT: AddressAlignment: 4 -// CHECK-NEXT: EntrySize: 4 - // CHECK: Index: [[DYNSTR]] // CHECK-NEXT: Name: .dynstr // CHECK-NEXT: Type: SHT_STRTAB @@ -90,6 +75,20 @@ // CHECK-NEXT: SectionData ( // CHECK: ) // CHECK-NEXT: } +// CHECK-NEXT: Section { +// CHECK-NEXT: Index: 4 +// CHECK-NEXT: Name: .hash +// CHECK-NEXT: Type: SHT_HASH +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_ALLOC +// CHECK-NEXT: ] +// CHECK-NEXT: Address: [[HASHADDR:.*]] +// CHECK-NEXT: Offset: +// CHECK-NEXT: Size: +// CHECK-NEXT: Link: 2 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 4 +// CHECK-NEXT: EntrySize: 4 // CHECK: Name: .rel.dyn // CHECK-NEXT: Type: SHT_REL Index: test/ELF/sort-norosegment.s =================================================================== --- test/ELF/sort-norosegment.s +++ test/ELF/sort-norosegment.s @@ -4,10 +4,10 @@ # RUN: ld.lld --hash-style=sysv -no-rosegment -o %t1 %t -shared # RUN: llvm-readobj -elf-output-style=GNU -s %t1 | FileCheck %s -# CHECK: .text {{.*}} AX -# CHECK-NEXT: .dynsym {{.*}} A -# CHECK-NEXT: .hash {{.*}} A +# CHECK: .dynsym {{.*}} A # CHECK-NEXT: .dynstr {{.*}} A +# CHECK-NEXT: .text {{.*}} AX +# CHECK-NEXT: .hash {{.*}} A # CHECK-NEXT: foo {{.*}} WA # CHECK-NEXT: .dynamic {{.*}} WA Index: test/ELF/synthetic-got.s =================================================================== --- test/ELF/synthetic-got.s +++ test/ELF/synthetic-got.s @@ -7,13 +7,13 @@ # RUN: | FileCheck %s --check-prefix=GOTDATA # GOT: Sections: -# GOT: 8 .got.plt 00000020 00000000000000e0 DATA -# GOT: 10 .got 00000008 00000000000001d0 DATA +# GOT: 8 .got.plt 00000020 00000000000000d0 DATA +# GOT: 10 .got 00000008 00000000000001c0 DATA # GOTDATA: Contents of section .got.plt: -# GOTDATA-NEXT: 00e0 00010000 00000000 00000000 00000000 -# GOTDATA-NEXT: 00f0 00000000 00000000 d6000000 00000000 +# GOTDATA-NEXT: 00d0 f0000000 00000000 00000000 00000000 +# GOTDATA-NEXT: 00e0 00000000 00000000 c6000000 00000000 # GOTDATA-NEXT: Contents of section .got: -# GOTDATA-NEXT: 01d0 00000000 00000000 +# GOTDATA-NEXT: 01c0 00000000 00000000 # RUN: echo "SECTIONS { .mygot : { *(.got) *(.got.plt) } }" > %t1.script # RUN: ld.lld --hash-style=sysv -shared %t.o -o %t1.out --script %t1.script @@ -21,12 +21,12 @@ # RUN: llvm-objdump -s -section=.mygot %t1.out | FileCheck %s --check-prefix=MYGOTDATA # MYGOT: Sections: -# MYGOT: 8 .mygot 00000028 00000000000000e0 DATA +# MYGOT: 8 .mygot 00000028 00000000000000d0 DATA # MYGOT-NOT: .got # MYGOT-NOT: .got.plt -# MYGOTDATA: 00e0 00000000 00000000 08010000 00000000 -# MYGOTDATA-NEXT: 00f0 00000000 00000000 00000000 00000000 -# MYGOTDATA-NEXT: 0100 d6000000 00000000 +# MYGOTDATA: 00d0 00000000 00000000 f8000000 00000000 +# MYGOTDATA-NEXT: 00e0 00000000 00000000 00000000 00000000 +# MYGOTDATA-NEXT: 00f0 c6000000 00000000 mov bar@gotpcrel(%rip), %rax call foo@plt Index: test/ELF/verdef-defaultver.s =================================================================== --- test/ELF/verdef-defaultver.s +++ test/ELF/verdef-defaultver.s @@ -55,8 +55,8 @@ # DSO-NEXT: ] # DSO-NEXT: Version symbols { # DSO-NEXT: Section Name: .gnu.version -# DSO-NEXT: Address: 0x240 -# DSO-NEXT: Offset: 0x240 +# DSO-NEXT: Address: 0x256 +# DSO-NEXT: Offset: 0x256 # 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: 0x200228 -# EXE-NEXT: Offset: 0x228 +# EXE-NEXT: Address: 0x20023C +# EXE-NEXT: Offset: 0x23C # EXE-NEXT: Link: 1 # EXE-NEXT: Symbols [ # EXE-NEXT: Symbol { Index: test/ELF/verdef.s =================================================================== --- test/ELF/verdef.s +++ test/ELF/verdef.s @@ -8,8 +8,8 @@ # DSO: Version symbols { # DSO-NEXT: Section Name: .gnu.version -# DSO-NEXT: Address: 0x228 -# DSO-NEXT: Offset: 0x228 +# DSO-NEXT: Address: 0x260 +# DSO-NEXT: Offset: 0x260 # 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: 0x200228 -# MAIN-NEXT: Offset: 0x228 +# MAIN-NEXT: Address: 0x200260 +# MAIN-NEXT: Offset: 0x260 # MAIN-NEXT: Link: 1 # MAIN-NEXT: Symbols [ # MAIN-NEXT: Symbol { Index: test/ELF/verneed.s =================================================================== --- test/ELF/verneed.s +++ test/ELF/verneed.s @@ -10,67 +10,70 @@ # RUN: llvm-readobj -V -sections -section-data -dyn-symbols -dynamic-table %t | FileCheck %s # CHECK: Section { -# CHECK: Index: 1 -# CHECK-NEXT: Name: .dynsym -# CHECK-NEXT: Type: SHT_DYNSYM (0xB) +# CHECK: Index: 1 +# CHECK-NEXT: Name: .dynsym +# CHECK-NEXT: Type: SHT_DYNSYM (0xB) +# CHECK-NEXT: Flags [ (0x2) +# CHECK-NEXT: SHF_ALLOC (0x2) +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x2001C8 +# CHECK-NEXT: Offset: 0x1C8 +# CHECK-NEXT: Size: 96 +# CHECK-NEXT: Link: 2 +# 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: Name: .gnu.version +# CHECK-NEXT: Type: SHT_GNU_versym (0x6FFFFFFF) # CHECK-NEXT: Flags [ (0x2) # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x2001C8 -# CHECK-NEXT: Offset: 0x1C8 -# CHECK-NEXT: Size: 96 -# CHECK-NEXT: Link: 5 -# CHECK-NEXT: Info: 1 -# CHECK-NEXT: AddressAlignment: 8 -# CHECK-NEXT: EntrySize: 24 -# CHECK: Section { -# 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: 0x200228 -# CHECK-NEXT: Offset: 0x228 -# CHECK-NEXT: Size: 8 -# CHECK-NEXT: Link: 1 -# CHECK-NEXT: Info: 0 -# CHECK-NEXT: AddressAlignment: 2 -# CHECK-NEXT: EntrySize: 2 +# CHECK-NEXT: Address: 0x200258 +# CHECK-NEXT: Offset: 0x258 +# CHECK-NEXT: Size: 8 +# CHECK-NEXT: Link: 1 +# CHECK-NEXT: Info: 0 +# CHECK-NEXT: AddressAlignment: 2 +# CHECK-NEXT: EntrySize: 2 + # CHECK: Section { -# 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: 0x200230 -# CHECK-NEXT: Offset: 0x230 -# CHECK-NEXT: Size: 80 -# CHECK-NEXT: Link: 5 -# CHECK-NEXT: Info: 2 -# CHECK-NEXT: AddressAlignment: 4 -# CHECK-NEXT: EntrySize: 0 -# CHECK: Section { -# CHECK: Index: 5 -# CHECK-NEXT: Name: .dynstr -# CHECK-NEXT: Type: SHT_STRTAB -# 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-NEXT: Index: 4 +# 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: Size: 80 +# CHECK-NEXT: Link: 2 +# CHECK-NEXT: Info: 2 +# CHECK-NEXT: AddressAlignment: 4 +# CHECK-NEXT: EntrySize: 0 # CHECK: DynamicSymbols [ # CHECK-NEXT: Symbol { @@ -111,14 +114,14 @@ # CHECK-NEXT: } # CHECK-NEXT: ] -# CHECK: 0x000000006FFFFFF0 VERSYM 0x200228 -# CHECK-NEXT: 0x000000006FFFFFFE VERNEED 0x200230 +# CHECK: 0x000000006FFFFFF0 VERSYM 0x200258 +# CHECK-NEXT: 0x000000006FFFFFFE VERNEED 0x200260 # CHECK-NEXT: 0x000000006FFFFFFF VERNEEDNUM 2 # CHECK: Version symbols { # CHECK-NEXT: Section Name: .gnu.version -# CHECK-NEXT: Address: 0x200228 -# CHECK-NEXT: Offset: 0x228 +# CHECK-NEXT: Address: 0x200258 +# CHECK-NEXT: Offset: 0x258 # CHECK-NEXT: Link: 1 # CHECK-NEXT: Symbols [ # CHECK-NEXT: Symbol { Index: test/ELF/version-script-extern.s =================================================================== --- test/ELF/version-script-extern.s +++ test/ELF/version-script-extern.s @@ -7,7 +7,7 @@ # RUN: echo "LIBSAMPLE_2.0 { global:" >> %t.script # RUN: echo ' extern "C" { _Z3bari; };' >> %t.script # RUN: echo "};" >> %t.script -# RUN: ld.lld --hash-style=sysv --version-script %t.script -shared %t.o -o %t.so +# RUN: ld.lld --hash-style=sysv --version-script %t.script -soname fixed-length-string -shared %t.o -o %t.so # RUN: llvm-readobj -V -dyn-symbols %t.so | FileCheck --check-prefix=DSO %s # DSO: DynamicSymbols [ @@ -68,8 +68,8 @@ # DSO-NEXT: ] # DSO-NEXT: Version symbols { # DSO-NEXT: Section Name: .gnu.version -# DSO-NEXT: Address: 0x258 -# DSO-NEXT: Offset: 0x258 +# DSO-NEXT: Address: 0x2BA +# DSO-NEXT: Offset: 0x2BA # DSO-NEXT: Link: 1 # DSO-NEXT: Symbols [ # DSO-NEXT: Symbol { Index: test/ELF/x86-64-retpoline-linkerscript.s =================================================================== --- test/ELF/x86-64-retpoline-linkerscript.s +++ test/ELF/x86-64-retpoline-linkerscript.s @@ -14,8 +14,8 @@ // CHECK: Disassembly of section .plt: // CHECK-NEXT: .plt: -// CHECK-NEXT: 10: ff 35 4a 01 00 00 pushq 330(%rip) -// CHECK-NEXT: 16: 4c 8b 1d 4b 01 00 00 movq 331(%rip), %r11 +// CHECK-NEXT: 10: ff 35 ea 00 00 00 pushq 234(%rip) +// CHECK-NEXT: 16: 4c 8b 1d eb 00 00 00 movq 235(%rip), %r11 // CHECK-NEXT: 1d: e8 0e 00 00 00 callq 14 <.plt+0x20> // CHECK-NEXT: 22: f3 90 pause // CHECK-NEXT: 24: 0f ae e8 lfence @@ -40,7 +40,7 @@ // CHECK-NEXT: 3d: cc int3 // CHECK-NEXT: 3e: cc int3 // CHECK-NEXT: 3f: cc int3 -// CHECK-NEXT: 40: 4c 8b 1d 29 01 00 00 movq 297(%rip), %r11 +// CHECK-NEXT: 40: 4c 8b 1d c9 00 00 00 movq 201(%rip), %r11 // CHECK-NEXT: 47: e8 e4 ff ff ff callq -28 <.plt+0x20> // CHECK-NEXT: 4c: e9 d1 ff ff ff jmp -47 <.plt+0x12> // CHECK-NEXT: 51: 68 00 00 00 00 pushq $0 @@ -50,7 +50,7 @@ // CHECK-NEXT: 5d: cc int3 // CHECK-NEXT: 5e: cc int3 // CHECK-NEXT: 5f: cc int3 -// CHECK-NEXT: 60: 4c 8b 1d 11 01 00 00 movq 273(%rip), %r11 +// CHECK-NEXT: 60: 4c 8b 1d b1 00 00 00 movq 177(%rip), %r11 // CHECK-NEXT: 67: e8 c4 ff ff ff callq -60 <.plt+0x20> // CHECK-NEXT: 6c: e9 b1 ff ff ff jmp -79 <.plt+0x12> // CHECK-NEXT: 71: 68 01 00 00 00 pushq $1 Index: test/ELF/x86-64-retpoline-znow-linkerscript.s =================================================================== --- test/ELF/x86-64-retpoline-znow-linkerscript.s +++ test/ELF/x86-64-retpoline-znow-linkerscript.s @@ -35,13 +35,13 @@ // CHECK-NEXT: 2d: cc int3 // CHECK-NEXT: 2e: cc int3 // CHECK-NEXT: 2f: cc int3 -// CHECK-NEXT: 30: 4c 8b 1d 09 01 00 00 movq 265(%rip), %r11 +// CHECK-NEXT: 30: 4c 8b 1d a9 00 00 00 movq 169(%rip), %r11 // CHECK-NEXT: 37: e9 d4 ff ff ff jmp -44 <.plt> // CHECK-NEXT: 3c: cc int3 // CHECK-NEXT: 3d: cc int3 // CHECK-NEXT: 3e: cc int3 // CHECK-NEXT: 3f: cc int3 -// CHECK-NEXT: 40: 4c 8b 1d 01 01 00 00 movq 257(%rip), %r11 +// CHECK-NEXT: 40: 4c 8b 1d a1 00 00 00 movq 161(%rip), %r11 // CHECK-NEXT: 47: e9 c4 ff ff ff jmp -60 <.plt> // CHECK-NEXT: 4c: cc int3 // CHECK-NEXT: 4d: cc int3