Skip to content

Commit 4007756

Browse files
committed
[ELF][test] Improve data-segment-relro.test
1 parent 03a3654 commit 4007756

File tree

2 files changed

+55
-51
lines changed

2 files changed

+55
-51
lines changed

lld/test/ELF/linkerscript/Inputs/data-segment-relro.s

Lines changed: 0 additions & 11 deletions
This file was deleted.
Lines changed: 55 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,62 @@
11
# REQUIRES: x86
2-
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/data-segment-relro.s -o %t1.o
3-
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2.o
4-
# RUN: ld.lld -shared %t2.o -o %t2.so
2+
# RUN: rm -rf %t && split-file %s %t
3+
# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/a.s -o %t/a.o
4+
# RUN: llvm-mc -filetype=obj -triple=x86_64 %p/Inputs/shared.s -o %t/b.o
5+
# RUN: ld.lld -shared -soname=b %t/b.o -o %t/b.so
56

67
## With relro or without DATA_SEGMENT_RELRO_END just aligns to
78
## page boundary.
89

9-
# RUN: ld.lld --hash-style=sysv -z norelro %t1.o %t2.so --script %s -o %t
10-
# RUN: llvm-readobj -S %t | FileCheck %s
10+
# RUN: ld.lld --hash-style=sysv -z norelro %t/a.o %t/b.so -T %t/1.t -o %t/a1
11+
# RUN: llvm-readelf -S -l %t/a1 | FileCheck %s --check-prefixes=CHECK,CHECK1
1112

12-
# RUN: ld.lld --hash-style=sysv -z relro %t1.o %t2.so --script %s -o %t2
13-
# RUN: llvm-readobj -S %t2 | FileCheck %s
13+
# RUN: ld.lld --hash-style=sysv -z relro %t/a.o %t/b.so -T %t/1.t -o %t/a2
14+
# RUN: llvm-readelf -S -l %t/a2 | FileCheck %s --check-prefixes=CHECK,CHECK2
1415

16+
# CHECK: Name Type Address Off Size ES Flg
17+
# CHECK-NEXT: NULL {{.*}}
18+
# CHECK: .dynamic DYNAMIC 0000000000001000 001000 0000f0 10 WA
19+
# CHECK-NEXT: .got PROGBITS 00000000000010f0 0010f0 000008 00 WA
20+
# CHECK-NEXT: __libc_atexit PROGBITS 0000000000002000 002000 000008 00 WA
21+
# CHECK-NEXT: .got.plt PROGBITS 0000000000002008 002008 000020 00 WA
22+
23+
# CHECK1: Program Headers:
24+
# CHECK1-NOT: GNU_RELRO
25+
26+
# CHECK2: Program Headers:
27+
# CHECK2-NEXT: Type
28+
# CHECK2-NEXT: PHDR
29+
# CHECK2-NEXT: LOAD
30+
# CHECK2-NEXT: LOAD
31+
# CHECK2-NEXT: LOAD
32+
# CHECK2-NEXT: LOAD
33+
# CHECK2-NEXT: DYNAMIC
34+
# CHECK2-NEXT: GNU_RELRO
35+
# CHECK2-NEXT: GNU_STACK
36+
37+
# CHECK2: Section to Segment mapping:
38+
# CHECK2: 06 .dynamic .got {{$}}
39+
40+
# RUN: sed '/DATA_SEGMENT_RELRO_END/d' %t/1.t > %t/2.t
41+
# RUN: ld.lld %t/a.o %t/b.so -T %t/2.t -o /dev/null
42+
43+
#--- a.s
44+
.global _start
45+
_start:
46+
.long bar
47+
jmp *bar2@GOTPCREL(%rip)
48+
49+
.section .data,"aw"
50+
.quad 0
51+
52+
.zero 4
53+
.section .foo,"aw"
54+
.section .bss,"",@nobits
55+
56+
.section __libc_atexit,"aw",@progbits
57+
.dc.a __libc_atexit
58+
59+
#--- 1.t
1560
SECTIONS {
1661
. = SIZEOF_HEADERS;
1762

@@ -25,42 +70,12 @@ SECTIONS {
2570

2671
. = DATA_SEGMENT_RELRO_END (1 ? 24 : 0, .);
2772

73+
__libc_atexit : { *(__libc_atexit) }
2874
.got.plt : { *(.got.plt) }
2975
.data : { *(.data) }
3076
.bss : { *(.bss) }
3177

3278
. = DATA_SEGMENT_END (.);
33-
}
3479

35-
# CHECK: Section {
36-
# CHECK: Index:
37-
# CHECK: Name: .got
38-
# CHECK-NEXT: Type: SHT_PROGBITS
39-
# CHECK-NEXT: Flags [
40-
# CHECK-NEXT: SHF_ALLOC
41-
# CHECK-NEXT: SHF_WRITE
42-
# CHECK-NEXT: ]
43-
# CHECK-NEXT: Address: 0x10F0
44-
# CHECK-NEXT: Offset: 0x10F0
45-
# CHECK-NEXT: Size:
46-
# CHECK-NEXT: Link:
47-
# CHECK-NEXT: Info:
48-
# CHECK-NEXT: AddressAlignment:
49-
# CHECK-NEXT: EntrySize:
50-
# CHECK-NEXT: }
51-
# CHECK-NEXT: Section {
52-
# CHECK-NEXT: Index:
53-
# CHECK-NEXT: Name: .got.plt
54-
# CHECK-NEXT: Type: SHT_PROGBITS
55-
# CHECK-NEXT: Flags [
56-
# CHECK-NEXT: SHF_ALLOC
57-
# CHECK-NEXT: SHF_WRITE
58-
# CHECK-NEXT: ]
59-
# CHECK-NEXT: Address: 0x2000
60-
# CHECK-NEXT: Offset: 0x2000
61-
# CHECK-NEXT: Size:
62-
# CHECK-NEXT: Link:
63-
# CHECK-NEXT: Info:
64-
# CHECK-NEXT: AddressAlignment:
65-
# CHECK-NEXT: EntrySize:
66-
# CHECK-NEXT: }
80+
.comment 0 : { *(.comment) }
81+
}

0 commit comments

Comments
 (0)