xref: /llvm-project/lld/test/ELF/linkerscript/data-segment-relro-ppc64.test (revision 72bbac47389918502f95423eaeb90733a6b8bb89)
1# REQUIRES: ppc
2# RUN: rm -rf %t && split-file %s %t
3# RUN: llvm-mc -filetype=obj -triple=powerpc64le %t/a.s -o %t/a.o
4# RUN: llvm-mc -filetype=obj -triple=powerpc64le %p/Inputs/shared.s -o %t/b.o
5# RUN: ld.lld -shared -soname=b %t/b.o -o %t/b.so
6
7# RUN: ld.lld -z max-page-size=65536 -z norelro %t/a.o %t/b.so -T %t/1.t -o %t/a1
8# RN: llvm-readelf -S -l %t/a1 | FileCheck %s --check-prefixes=CHECK1
9
10# RUN: ld.lld -z max-page-size=65536 -z relro %t/a.o %t/b.so -T %t/1.t -o %t/a2
11# RUN: llvm-readelf -S -l %t/a2 | FileCheck %s --check-prefixes=CHECK2
12
13## -z norelro suppresses the .relro_padding section.
14# CHECK1:      Name           Type     Address          Off      Size ES Flg
15# CHECK1:      .foo           PROGBITS
16# CHECK1-NEXT: .orphan.rw     PROGBITS
17# CHECK1-NEXT: .branch_lt     PROGBITS
18# CHECK1-NEXT: .got           PROGBITS
19# CHECK1-NEXT: .data          PROGBITS
20# CHECK1-NEXT: .bss           NOBITS
21
22# CHECK2:      Name           Type     Address          Off      Size ES Flg
23# CHECK2-NEXT:                NULL     {{.*}}
24# CHECK2:      .orphan.ro     PROGBITS {{.*}}                              A
25# CHECK2:      .dynamic       DYNAMIC  {{.*}}                             WA
26# CHECK2-NEXT: .branch_lt     PROGBITS {{.*}}                             WA
27# CHECK2-NEXT: .got           PROGBITS {{.*}}                             WA
28# CHECK2-NEXT: .relro_padding NOBITS   00000000000100f0 0100f0 000f10 00  WA
29# CHECK2-NEXT: .data          PROGBITS {{.*}}                             WA
30# CHECK2-NEXT: .foo           PROGBITS {{.*}}                             WA
31# CHECK2-NEXT: .orphan.rw     PROGBITS {{.*}}                             WA
32# CHECK2-NEXT: .bss           NOBITS   {{.*}}                             WA
33
34#--- a.s
35.global _start
36_start:
37  addis 3, 2, bar2@toc@ha
38  ld 12, bar2@toc@l(3)
39  mtctr 12
40  bctrl
41  b bar
42  nop
43
44.section .data,"aw"
45.quad 0
46
47.zero 4
48.section .foo,"aw"
49.section .bss,"",@nobits
50
51.section .orphan.ro,"a",@progbits
52.dc.a 0
53
54.section .orphan.rw,"aw",@progbits
55.dc.a .orphan.rw
56
57#--- 1.t
58SECTIONS {
59  . = SIZEOF_HEADERS;
60
61  .plt  : { *(.plt) }
62  .text : { *(.text) }
63
64  . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
65
66  .dynamic : { *(.dynamic) }
67  .branch_lt : { *(.branch_lt) }
68  .got : { *(.got) }
69
70  . = DATA_SEGMENT_RELRO_END (0, .);
71
72  .plt : { *(.plt) }
73  .data : { *(.data) }
74  .bss : { *(.bss) }
75
76  . = DATA_SEGMENT_END (.);
77
78  .comment 0 : { *(.comment) }
79}
80