1// REQUIRES: x86 2 3// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o 4// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2.o 5// RUN: ld.lld -shared %t2.o -o %t2.so 6 7// RUN: ld.lld %t.o %t2.so -z now -z norelro -z relro -o %t 8// RUN: llvm-readelf -l %t | FileCheck --check-prefix=CHECK --check-prefix=FULLRELRO %s 9 10// RUN: ld.lld %t.o %t2.so -z norelro -z relro -o %t 11// RUN: llvm-readelf -l %t | FileCheck --check-prefix=CHECK --check-prefix=PARTRELRO %s 12 13// RUN: ld.lld %t.o %t2.so -z norelro -o %t 14// RUN: llvm-readelf -l %t | FileCheck --check-prefix=NORELRO %s 15 16// CHECK: Program Headers: 17// CHECK-NEXT: Type 18// CHECK-NEXT: PHDR 19// CHECK-NEXT: LOAD 20// CHECK-NEXT: LOAD 21// CHECK-NEXT: LOAD 22// CHECK-NEXT: LOAD 23// CHECK-NEXT: DYNAMIC 24// CHECK-NEXT: GNU_RELRO 25// CHECK: Section to Segment mapping: 26 27// FULLRELRO: 03 .openbsd.randomdata .dynamic .got .got.plt {{$}} 28// PARTRELRO: 03 .openbsd.randomdata .dynamic .got {{$}} 29 30 31// NORELRO-NOT: GNU_RELRO 32 33.global _start 34_start: 35 .long bar 36 jmp *bar2@GOTPCREL(%rip) 37 38.section .data,"aw" 39.quad 0 40 41.zero 4 42.section .foo,"aw" 43.section .bss,"",@nobits 44 45.section .openbsd.randomdata, "aw" 46.quad 0 47