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