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