[ELF] Make non-writable non-executable PROGBITS sections closer to .text
This generalizes the old heuristic placing SHT_DYNSYM SHT_DYNSTR first in the readonly SHF_ALLOC segment. Reviewers: espindola Subscribers: emaste, arichardson, llvm-commits Differential Revision: https://reviews.llvm.org/D48406 llvm-svn: 335674
This commit is contained in:
parent
bf7b532cbc
commit
3d87323a7e
|
@ -701,10 +701,10 @@ enum RankFlags {
|
|||
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 @@ static unsigned getSectionRank(const OutputSection *Sec) {
|
|||
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 @@ static unsigned getSectionRank(const OutputSection *Sec) {
|
|||
} 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.
|
||||
|
|
|
@ -90,4 +90,4 @@ _start:
|
|||
|
||||
// RODATA: Contents of section .rodata:
|
||||
// S(z) = 0x40014
|
||||
// RODATA-NEXT: 10246 14000400
|
||||
// RODATA-NEXT: 102e0 14000400
|
||||
|
|
|
@ -110,7 +110,7 @@ foo:
|
|||
# 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
|
||||
|
|
|
@ -33,7 +33,7 @@ _start:
|
|||
// 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 @@ _start:
|
|||
|
||||
// RODATA: Contents of section .rodata:
|
||||
// S(z) = 0x13004
|
||||
// RODATA-NEXT: 10160 04300100
|
||||
// RODATA-NEXT: 10190 04300100
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -37,9 +37,9 @@ __aeabi_unwind_cpp_pr0:
|
|||
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
|
||||
|
|
|
@ -35,16 +35,16 @@ __gxx_personality_v0:
|
|||
_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
|
||||
|
|
|
@ -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,31 +75,13 @@
|
|||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: 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: 0x124
|
||||
// CHECK-NEXT: Offset: 0x124
|
||||
// CHECK-NEXT: Size: 1
|
||||
// CHECK-NEXT: Link: 0
|
||||
// CHECK-NEXT: Info: 0
|
||||
// CHECK-NEXT: AddressAlignment: 1
|
||||
// CHECK-NEXT: EntrySize: 0
|
||||
// CHECK-NEXT: SectionData (
|
||||
// CHECK-NEXT: 0000: 00 |.|
|
||||
// CHECK-NEXT: )
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: Section {
|
||||
// CHECK-NEXT: Index: 3
|
||||
// CHECK-NEXT: Name: .hash
|
||||
// CHECK-NEXT: Type: SHT_HASH (0x5)
|
||||
// CHECK-NEXT: Flags [ (0x2)
|
||||
// CHECK-NEXT: SHF_ALLOC (0x2)
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: Address: 0x128
|
||||
// CHECK-NEXT: Offset: 0x128
|
||||
// CHECK-NEXT: Address: 0x124
|
||||
// CHECK-NEXT: Offset: 0x124
|
||||
// CHECK-NEXT: Size: 16
|
||||
// CHECK-NEXT: Link: 1
|
||||
// CHECK-NEXT: Info: 0
|
||||
|
@ -110,6 +92,24 @@
|
|||
// CHECK-NEXT: )
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: Section {
|
||||
// CHECK-NEXT: Index: 3
|
||||
// CHECK-NEXT: Name: .dynstr
|
||||
// CHECK-NEXT: Type: SHT_STRTAB (0x3)
|
||||
// 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: Info: 0
|
||||
// CHECK-NEXT: AddressAlignment: 1
|
||||
// CHECK-NEXT: EntrySize: 0
|
||||
// CHECK-NEXT: SectionData (
|
||||
// CHECK-NEXT: 0000: 00 |.|
|
||||
// CHECK-NEXT: )
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: Section {
|
||||
// CHECK-NEXT: Index: 4
|
||||
// CHECK-NEXT: Name: .text
|
||||
// CHECK-NEXT: Type: SHT_PROGBITS (0x1)
|
||||
|
@ -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: ]
|
||||
|
|
|
@ -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,31 +77,13 @@
|
|||
// 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: Info: 0
|
||||
// CHECK-NEXT: AddressAlignment: 1
|
||||
// CHECK-NEXT: EntrySize: 0
|
||||
// CHECK-NEXT: SectionData (
|
||||
// CHECK-NEXT: 0000: 00 |.|
|
||||
// CHECK-NEXT: )
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: Section {
|
||||
// CHECK-NEXT: Index: 3
|
||||
// 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: 0x1E4
|
||||
// CHECK-NEXT: Offset: 0x1E4
|
||||
// CHECK-NEXT: Size: 16
|
||||
// CHECK-NEXT: Link: 1
|
||||
// CHECK-NEXT: Info: 0
|
||||
|
@ -112,6 +94,24 @@
|
|||
// CHECK-NEXT: )
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: Section {
|
||||
// CHECK-NEXT: Index: 3
|
||||
// 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: 0x1F0
|
||||
// CHECK-NEXT: Offset: 0x1F0
|
||||
// CHECK-NEXT: Size: 1
|
||||
// CHECK-NEXT: Link: 0
|
||||
// CHECK-NEXT: Info: 0
|
||||
// CHECK-NEXT: AddressAlignment: 1
|
||||
// CHECK-NEXT: EntrySize: 0
|
||||
// CHECK-NEXT: SectionData (
|
||||
// CHECK-NEXT: 0000: 00 |.|
|
||||
// CHECK-NEXT: )
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: Section {
|
||||
// CHECK-NEXT: Index: 4
|
||||
// CHECK-NEXT: Name: .text (23)
|
||||
// CHECK-NEXT: Type: SHT_PROGBITS (0x1)
|
||||
|
@ -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: ]
|
||||
|
|
|
@ -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: ]
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -16,5 +16,7 @@ SECTIONS {
|
|||
# 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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -9,10 +9,9 @@ SECTIONS {
|
|||
}
|
||||
|
||||
# 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -17,9 +17,9 @@ nop
|
|||
# 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -14,10 +14,8 @@ SECTIONS {
|
|||
# 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -43,20 +43,20 @@ labs = 0x1AB5
|
|||
// CHECK: VMA LMA Size Align Out In Symbol
|
||||
// CHECK-NEXT: 2001c8 2001c8 78 8 .dynsym
|
||||
// CHECK-NEXT: 2001c8 2001c8 78 8 <internal>:(.dynsym)
|
||||
// CHECK-NEXT: 200240 200240 31 1 .dynstr
|
||||
// CHECK-NEXT: 200240 200240 31 1 <internal>:(.dynstr)
|
||||
// CHECK-NEXT: 200278 200278 2c 8 .gnu.hash
|
||||
// CHECK-NEXT: 200278 200278 2c 8 <internal>:(.gnu.hash)
|
||||
// CHECK-NEXT: 2002a4 2002a4 30 4 .hash
|
||||
// CHECK-NEXT: 2002a4 2002a4 30 4 <internal>:(.hash)
|
||||
// CHECK-NEXT: 2002d8 2002d8 30 8 .rela.dyn
|
||||
// CHECK-NEXT: 2002d8 2002d8 30 8 <internal>:(.rela.dyn)
|
||||
// CHECK-NEXT: 200308 200308 30 8 .rela.plt
|
||||
// CHECK-NEXT: 200308 200308 30 8 <internal>:(.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 <internal>:(.gnu.hash)
|
||||
// CHECK-NEXT: 20026c 20026c 30 4 .hash
|
||||
// CHECK-NEXT: 20026c 20026c 30 4 <internal>:(.hash)
|
||||
// CHECK-NEXT: 20029c 20029c 31 1 .dynstr
|
||||
// CHECK-NEXT: 20029c 20029c 31 1 <internal>:(.dynstr)
|
||||
// CHECK-NEXT: 2002d0 2002d0 30 8 .rela.dyn
|
||||
// CHECK-NEXT: 2002d0 2002d0 30 8 <internal>:(.rela.dyn)
|
||||
// CHECK-NEXT: 200300 200300 30 8 .rela.plt
|
||||
// CHECK-NEXT: 200300 200300 30 8 <internal>:(.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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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: ]
|
||||
|
|
|
@ -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: ]
|
||||
|
|
|
@ -28,8 +28,8 @@ zed:
|
|||
// 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 @@ zed:
|
|||
// 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 @@ zed:
|
|||
// 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 @@ zed:
|
|||
// 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 @@ zed:
|
|||
|
||||
|
||||
// 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
|
||||
|
|
|
@ -15,7 +15,7 @@ foo:
|
|||
// 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
# CHECK: Symbol {
|
||||
# CHECK: Name: $.str
|
||||
# CHECK-NEXT: Value: 0x105
|
||||
# CHECK-NEXT: Value: 0x1B1
|
||||
# CHECK: }
|
||||
|
||||
# CHECK: Local entries [
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -113,16 +113,16 @@ R_X86_64_64:
|
|||
.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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -26,9 +26,10 @@ _start:
|
|||
.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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -19,20 +19,49 @@
|
|||
# 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: 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: [[VERSYM:.*]]
|
||||
# CHECK-NEXT: Offset: [[VERSYM_OFFSET:.*]]
|
||||
# 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: [[VERNEED:.*]]
|
||||
# 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: 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: 0x200228
|
||||
# CHECK-NEXT: Offset: 0x228
|
||||
# CHECK-NEXT: Address: 0x2002A8
|
||||
# CHECK-NEXT: Offset: 0x2A8
|
||||
# CHECK-NEXT: Size: 47
|
||||
# CHECK-NEXT: Link: 0
|
||||
# CHECK-NEXT: Info: 0
|
||||
|
@ -45,36 +74,6 @@
|
|||
# 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: 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: 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 {
|
||||
# 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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue