# REQUIRES: ppc # RUN: rm -rf %t && split-file %s %t # RUN: llvm-mc -filetype=obj -triple=powerpc64le %t/a.s -o %t/a.o # RUN: llvm-mc -filetype=obj -triple=powerpc64le %p/Inputs/shared.s -o %t/b.o # RUN: ld.lld -shared -soname=b %t/b.o -o %t/b.so # RUN: ld.lld -z max-page-size=65536 -z norelro %t/a.o %t/b.so -T %t/1.t -o %t/a1 # RN: llvm-readelf -S -l %t/a1 | FileCheck %s --check-prefixes=CHECK1 # RUN: ld.lld -z max-page-size=65536 -z relro %t/a.o %t/b.so -T %t/1.t -o %t/a2 # RUN: llvm-readelf -S -l %t/a2 | FileCheck %s --check-prefixes=CHECK2 ## -z norelro suppresses the .relro_padding section. # CHECK1: Name Type Address Off Size ES Flg # CHECK1: .foo PROGBITS # CHECK1-NEXT: .orphan.rw PROGBITS # CHECK1-NEXT: .branch_lt PROGBITS # CHECK1-NEXT: .got PROGBITS # CHECK1-NEXT: .data PROGBITS # CHECK1-NEXT: .bss NOBITS # CHECK2: Name Type Address Off Size ES Flg # CHECK2-NEXT: NULL {{.*}} # CHECK2: .orphan.ro PROGBITS {{.*}} A # CHECK2: .dynamic DYNAMIC {{.*}} WA # CHECK2-NEXT: .branch_lt PROGBITS {{.*}} WA # CHECK2-NEXT: .got PROGBITS {{.*}} WA # CHECK2-NEXT: .relro_padding NOBITS 00000000000100f0 0100f0 000f10 00 WA # CHECK2-NEXT: .data PROGBITS {{.*}} WA # CHECK2-NEXT: .foo PROGBITS {{.*}} WA # CHECK2-NEXT: .orphan.rw PROGBITS {{.*}} WA # CHECK2-NEXT: .bss NOBITS {{.*}} WA #--- a.s .global _start _start: addis 3, 2, bar2@toc@ha ld 12, bar2@toc@l(3) mtctr 12 bctrl b bar nop .section .data,"aw" .quad 0 .zero 4 .section .foo,"aw" .section .bss,"",@nobits .section .orphan.ro,"a",@progbits .dc.a 0 .section .orphan.rw,"aw",@progbits .dc.a .orphan.rw #--- 1.t SECTIONS { . = SIZEOF_HEADERS; .plt : { *(.plt) } .text : { *(.text) } . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); .dynamic : { *(.dynamic) } .branch_lt : { *(.branch_lt) } .got : { *(.got) } . = DATA_SEGMENT_RELRO_END (0, .); .plt : { *(.plt) } .data : { *(.data) } .bss : { *(.bss) } . = DATA_SEGMENT_END (.); .comment 0 : { *(.comment) } }