[ELF] Refine isExported/isPreemptible condition
[llvm-project.git] / lld / test / ELF / aarch64-got-relocations-pauth.s
blob2d37123f1cca79fafca031bccf3ba2651a307eb2
1 # REQUIRES: aarch64
3 # RUN: rm -rf %t && split-file %s %t && cd %t
5 # RUN: llvm-mc -filetype=obj -triple=aarch64 %p/Inputs/shared.s -o a.o
6 # RUN: ld.lld -shared a.o -o a.so
8 #--- ok.s
9 # RUN: llvm-mc -filetype=obj -triple=aarch64 ok.s -o ok.o
11 # RUN: ld.lld ok.o a.so -pie -o ok1
12 # RUN: llvm-readelf -r -S -x .got ok1 | FileCheck %s --check-prefix=OK1
14 # RUN: ld.lld ok.o a.o -pie -o ok2
15 # RUN: llvm-readelf -r -S -x .got -s ok2 | FileCheck %s --check-prefix=OK2
17 # OK1: Offset Info Type Symbol's Value Symbol's Name + Addend
18 # OK1-NEXT: 0000000000020380 0000000100000412 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 bar + 0
19 # OK1-NEXT: 0000000000020388 0000000200000412 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 zed + 0
21 ## Symbol's values for bar and zed are equal since they contain no content (see Inputs/shared.s)
22 # OK2: Offset Info Type Symbol's Value Symbol's Name + Addend
23 # OK2-NEXT: 0000000000020320 0000000000000411 R_AARCH64_AUTH_RELATIVE 10260
24 # OK2-NEXT: 0000000000020328 0000000000000411 R_AARCH64_AUTH_RELATIVE 10260
26 # OK1: Hex dump of section '.got':
27 # OK1-NEXT: 0x00020380 00000000 00000080 00000000 000000a0
28 ## ^^
29 ## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA
30 ## ^^
31 ## 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA
33 # OK2: Symbol table '.symtab' contains {{.*}} entries:
34 # OK2: Num: Value Size Type Bind Vis Ndx Name
35 # OK2: 0000000000010260 0 FUNC GLOBAL DEFAULT 6 bar
36 # OK2: 0000000000010260 0 NOTYPE GLOBAL DEFAULT 6 zed
38 # OK2: Hex dump of section '.got':
39 # OK2-NEXT: 0x00020320 00000000 00000080 00000000 000000a0
40 ## ^^
41 ## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA
42 ## ^^
43 ## 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA
45 # RUN: llvm-objdump -d ok1 | FileCheck %s --check-prefix=OK1-ASM
47 # OK1-ASM: <_start>:
48 # OK1-ASM-NEXT: adrp x0, 0x20000
49 # OK1-ASM-NEXT: ldr x0, [x0, #0x380]
50 # OK1-ASM-NEXT: adrp x1, 0x20000
51 # OK1-ASM-NEXT: add x1, x1, #0x380
52 # OK1-ASM-NEXT: adrp x0, 0x20000
53 # OK1-ASM-NEXT: ldr x0, [x0, #0x388]
54 # OK1-ASM-NEXT: adrp x1, 0x20000
55 # OK1-ASM-NEXT: add x1, x1, #0x388
57 # RUN: llvm-objdump -d ok2 | FileCheck %s --check-prefix=OK2-ASM
59 # OK2-ASM: <_start>:
60 # OK2-ASM-NEXT: adrp x0, 0x20000
61 # OK2-ASM-NEXT: ldr x0, [x0, #0x320]
62 # OK2-ASM-NEXT: adrp x1, 0x20000
63 # OK2-ASM-NEXT: add x1, x1, #0x320
64 # OK2-ASM-NEXT: adrp x0, 0x20000
65 # OK2-ASM-NEXT: ldr x0, [x0, #0x328]
66 # OK2-ASM-NEXT: adrp x1, 0x20000
67 # OK2-ASM-NEXT: add x1, x1, #0x328
69 .globl _start
70 _start:
71 adrp x0, :got_auth:bar
72 ldr x0, [x0, :got_auth_lo12:bar]
73 adrp x1, :got_auth:bar
74 add x1, x1, :got_auth_lo12:bar
75 adrp x0, :got_auth:zed
76 ldr x0, [x0, :got_auth_lo12:zed]
77 adrp x1, :got_auth:zed
78 add x1, x1, :got_auth_lo12:zed
80 #--- ok-tiny.s
81 # RUN: llvm-mc -filetype=obj -triple=aarch64 ok-tiny.s -o ok-tiny.o
83 # RUN: ld.lld ok-tiny.o a.so -pie -o tiny1
84 # RUN: llvm-readelf -r -S -x .got tiny1 | FileCheck %s --check-prefix=TINY1
86 # RUN: ld.lld ok-tiny.o a.o -pie -o tiny2
87 # RUN: llvm-readelf -r -S -x .got -s tiny2 | FileCheck %s --check-prefix=TINY2
89 # TINY1: Offset Info Type Symbol's Value Symbol's Name + Addend
90 # TINY1-NEXT: 0000000000020368 0000000100000412 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 bar + 0
91 # TINY1-NEXT: 0000000000020370 0000000200000412 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 zed + 0
93 ## Symbol's values for bar and zed are equal since they contain no content (see Inputs/shared.s)
94 # TINY2: Offset Info Type Symbol's Value Symbol's Name + Addend
95 # TINY2-NEXT: 0000000000020308 0000000000000411 R_AARCH64_AUTH_RELATIVE 10248
96 # TINY2-NEXT: 0000000000020310 0000000000000411 R_AARCH64_AUTH_RELATIVE 10248
98 # TINY1: Hex dump of section '.got':
99 # TINY1-NEXT: 0x00020368 00000000 00000080 00000000 000000a0
100 ## ^^
101 ## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA
102 ## ^^
103 ## 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA
105 # TINY2: Symbol table '.symtab' contains {{.*}} entries:
106 # TINY2: Num: Value Size Type Bind Vis Ndx Name
107 # TINY2: 0000000000010248 0 FUNC GLOBAL DEFAULT 6 bar
108 # TINY2: 0000000000010248 0 NOTYPE GLOBAL DEFAULT 6 zed
110 # TINY2: Hex dump of section '.got':
111 # TINY2-NEXT: 0x00020308 00000000 00000080 00000000 000000a0
112 ## ^^
113 ## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA
114 ## ^^
115 ## 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA
117 # RUN: llvm-objdump -d tiny1 | FileCheck %s --check-prefix=TINY1-ASM
119 # TINY1-ASM: <_start>:
120 # TINY1-ASM-NEXT: adr x0, 0x20368
121 # TINY1-ASM-NEXT: ldr x1, 0x20370
123 # RUN: llvm-objdump -d tiny2 | FileCheck %s --check-prefix=TINY2-ASM
125 # TINY2-ASM: <_start>:
126 # TINY2-ASM-NEXT: adr x0, 0x20308
127 # TINY2-ASM-NEXT: ldr x1, 0x20310
129 .globl _start
130 _start:
131 adr x0, :got_auth:bar
132 ldr x1, :got_auth:zed
134 #--- err.s
135 # RUN: llvm-mc -filetype=obj -triple=aarch64 err.s -o err.o
136 # RUN: not ld.lld err.o a.so -pie 2>&1 | FileCheck %s --check-prefix=ERR --implicit-check-not=error:
137 # ERR: error: both AUTH and non-AUTH GOT entries for 'bar' requested, but only one type of GOT entry per symbol is supported
139 .globl _start
140 _start:
141 adrp x0, :got_auth:bar
142 ldr x0, [x0, :got_auth_lo12:bar]
143 adrp x0, :got:bar
144 ldr x0, [x0, :got_lo12:bar]