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
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
29 ## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA
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
41 ## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA
43 ## 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA
45 # RUN: llvm-objdump -d ok1 | FileCheck %s --check-prefix=OK1-ASM
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
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
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
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
101 ## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA
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
113 ## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA
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
131 adr x0
, :got_auth
:bar
132 ldr x1
, :got_auth
:zed
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
141 adrp x0
, :got_auth
:bar
142 ldr x0
, [x0
, :got_auth_lo12
:bar
]
144 ldr x0
, [x0
, :got_lo12
:bar
]