1# REQUIRES: aarch64 2# RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-freebsd %s -o %t 3# RUN: echo '.globl zero; zero = 0' | llvm-mc -filetype=obj -triple=aarch64-unknown-freebsd -o %t2.o 4# RUN: ld.lld %t %t2.o -o %t2 5# RUN: llvm-objdump -d %t2 | FileCheck %s 6 7.section .R_AARCH64_ADR_PREL_LO21,"ax",@progbits 8.globl _start 9_start: 10 adr x1,msg 11msg: .asciz "Hello, world\n" 12msgend: 13 14# CHECK: Disassembly of section .R_AARCH64_ADR_PREL_LO21: 15# CHECK-EMPTY: 16# CHECK: <_start>: 17# CHECK: 0: 21 00 00 10 adr x1, #4 18# CHECK: <msg>: 19# CHECK: 4: 20# #4 is the adr immediate value. 21 22.section .R_AARCH64_ADR_PREL_PG_H121,"ax",@progbits 23 adrp x1,mystr 24mystr: 25 .asciz "blah" 26 .size mystr, 4 27 28# PAGE(S + A) - PAGE(P) = PAGE(210136) - PAGE(0x210132) = 0 29# 30# CHECK: Disassembly of section .R_AARCH64_ADR_PREL_PG_H121: 31# CHECK-EMPTY: 32# CHECK-NEXT: <$x.2>: 33# CHECK-NEXT: 210132: 01 00 00 90 adrp x1, #0 34 35.section .R_AARCH64_ADD_ABS_LO12_NC,"ax",@progbits 36 add x0, x0, :lo12:.L.str 37.L.str: 38 .asciz "blah" 39 .size mystr, 4 40 41# S = 0x21013b, A = 0x4 42# R = (S + A) & 0xFFF = 319 43# 44# CHECK: Disassembly of section .R_AARCH64_ADD_ABS_LO12_NC: 45# CHECK-EMPTY: 46# CHECK-NEXT: <$x.4>: 47# CHECK-NEXT: 21013b: 00 fc 04 91 add x0, x0, #319 48 49.section .R_AARCH64_LDST64_ABS_LO12_NC,"ax",@progbits 50 ldr x28, [x27, :lo12:foo] 51foo: 52 .asciz "foo" 53 .size mystr, 3 54 55# S = 0x210144, A = 0x4 56# R = ((S + A) & 0xFFF) << 7 = 0x0000a400 57# 0x0000a400 | 0xf940177c = 0xf940a77c 58# CHECK: Disassembly of section .R_AARCH64_LDST64_ABS_LO12_NC: 59# CHECK-EMPTY: 60# CHECK-NEXT: <$x.6>: 61# CHECK-NEXT: 210144: 7c a7 40 f9 ldr x28, [x27, #328] 62 63.section .SUB,"ax",@progbits 64 nop 65sub: 66 nop 67 68# CHECK: Disassembly of section .SUB: 69# CHECK-EMPTY: 70# CHECK-NEXT: <$x.8>: 71# CHECK-NEXT: 21014c: 1f 20 03 d5 nop 72# CHECK: <sub>: 73# CHECK-NEXT: 210150: 1f 20 03 d5 nop 74 75.section .R_AARCH64_CALL26,"ax",@progbits 76call26: 77 bl sub 78 79# S = 0x21014c, A = 0x4, P = 0x210154 80# R = S + A - P = -0x4 = 0xfffffffc 81# (R & 0x0ffffffc) >> 2 = 0x03ffffff 82# 0x94000000 | 0x03ffffff = 0x97ffffff 83# CHECK: Disassembly of section .R_AARCH64_CALL26: 84# CHECK-EMPTY: 85# CHECK-NEXT: <call26>: 86# CHECK-NEXT: 210154: ff ff ff 97 bl 0x210150 87 88.section .R_AARCH64_JUMP26,"ax",@progbits 89jump26: 90 b sub 91 92# S = 0x21014c, A = 0x4, P = 0x210158 93# R = S + A - P = -0x8 = 0xfffffff8 94# (R & 0x0ffffffc) >> 2 = 0x03fffffe 95# 0x14000000 | 0x03fffffe = 0x17fffffe 96# CHECK: Disassembly of section .R_AARCH64_JUMP26: 97# CHECK-EMPTY: 98# CHECK-NEXT: <jump26>: 99# CHECK-NEXT: 210158: fe ff ff 17 b 0x210150 100 101.section .R_AARCH64_LDST32_ABS_LO12_NC,"ax",@progbits 102ldst32: 103 ldr s4, [x5, :lo12:foo32] 104foo32: 105 .asciz "foo" 106 .size mystr, 3 107 108# S = 0x21015c, A = 0x4 109# R = ((S + A) & 0xFFC) << 8 = 0x00016000 110# 0x00016000 | 0xbd4000a4 = 0xbd4160a4 111# CHECK: Disassembly of section .R_AARCH64_LDST32_ABS_LO12_NC: 112# CHECK-EMPTY: 113# CHECK-NEXT: <ldst32>: 114# CHECK-NEXT: 21015c: a4 60 41 bd ldr s4, [x5, #352] 115 116.section .R_AARCH64_LDST8_ABS_LO12_NC,"ax",@progbits 117ldst8: 118 ldrsb x11, [x13, :lo12:foo8] 119foo8: 120 .asciz "foo" 121 .size mystr, 3 122 123# S = 0x210164, A = 0x4 124# R = ((S + A) & 0xFFF) << 10 = 0x0005a000 125# 0x0005a000 | 0x398001ab = 0x3985a1ab 126# CHECK: Disassembly of section .R_AARCH64_LDST8_ABS_LO12_NC: 127# CHECK-EMPTY: 128# CHECK-NEXT: <ldst8>: 129# CHECK-NEXT: 210164: ab a1 85 39 ldrsb x11, [x13, #360] 130 131.section .R_AARCH64_LDST128_ABS_LO12_NC,"ax",@progbits 132ldst128: 133 ldr q20, [x19, #:lo12:foo128] 134foo128: 135 .asciz "foo" 136 .size mystr, 3 137 138# S = 0x21016c, A = 0x4 139# R = ((S + A) & 0xFF8) << 6 = 0x00005c00 140# 0x00005c00 | 0x3dc00274 = 0x3dc05e74 141# CHECK: Disassembly of section .R_AARCH64_LDST128_ABS_LO12_NC: 142# CHECK-EMPTY: 143# CHECK: <ldst128>: 144# CHECK: 21016c: 74 5e c0 3d ldr q20, [x19, #368] 145#foo128: 146# 210170: 66 6f 6f 00 .word 147 148.section .R_AARCH64_LDST16_ABS_LO12_NC,"ax",@progbits 149ldst16: 150 ldr h17, [x19, :lo12:foo16] 151 ldrh w1, [x19, :lo12:foo16] 152 ldrh w2, [x19, :lo12:foo16 + 2] 153foo16: 154 .asciz "foo" 155 .size mystr, 4 156 157# S = 0x210174, A = 0x4 158# R = ((S + A) & 0x0FFC) << 9 = 0x2f000 159# 0x2f000 | 0x7d400271 = 0x7d430271 160# CHECK: Disassembly of section .R_AARCH64_LDST16_ABS_LO12_NC: 161# CHECK-EMPTY: 162# CHECK-NEXT: <ldst16>: 163# CHECK-NEXT: 210174: 71 02 43 7d ldr h17, [x19, #384] 164# CHECK-NEXT: 210178: 61 02 43 79 ldrh w1, [x19, #384] 165# CHECK-NEXT: 21017c: 62 06 43 79 ldrh w2, [x19, #386] 166 167.section .R_AARCH64_MOVW_UABS,"ax",@progbits 168movz1: 169 movk x12, #:abs_g0:zero+0xC 170 movk x12, #:abs_g0_nc:zero+0xF000E000D000C 171 movk x13, #:abs_g1:zero+0xD000C 172 movk x13, #:abs_g1_nc:zero+0xF000E000D000C 173 movk x14, #:abs_g2:zero+0xE000D000C 174 movk x14, #:abs_g2_nc:zero+0xF000E000D000C 175 movz x15, #:abs_g3:zero+0xF000E000D000C 176 movk x16, #:abs_g3:zero+0xF000E000D000C 177 178## 4222124650659840 == (0xF << 48) 179# CHECK: Disassembly of section .R_AARCH64_MOVW_UABS: 180# CHECK-EMPTY: 181# CHECK-NEXT: <movz1>: 182# CHECK-NEXT: 8c 01 80 f2 movk x12, #12 183# CHECK-NEXT: 8c 01 80 f2 movk x12, #12 184# CHECK-NEXT: ad 01 a0 f2 movk x13, #13, lsl #16 185# CHECK-NEXT: ad 01 a0 f2 movk x13, #13, lsl #16 186# CHECK-NEXT: ce 01 c0 f2 movk x14, #14, lsl #32 187# CHECK-NEXT: ce 01 c0 f2 movk x14, #14, lsl #32 188# CHECK-NEXT: ef 01 e0 d2 mov x15, #4222124650659840 189# CHECK-NEXT: f0 01 e0 f2 movk x16, #15, lsl #48 190 191.section .R_AARCH64_MOVW_SABS,"ax",@progbits 192 movz x1, #:abs_g0_s:zero+1 193 movz x1, #:abs_g0_s:zero-1 194 movz x2, #:abs_g1_s:zero+0x20000 195 movz x2, #:abs_g1_s:zero-0x20000 196 movz x3, #:abs_g2_s:zero+0x300000000 197 movz x3, #:abs_g2_s:zero-0x300000000 198 199# CHECK: Disassembly of section .R_AARCH64_MOVW_SABS: 200# CHECK-EMPTY: 201# CHECK-NEXT: : 202# CHECK-NEXT: 21 00 80 d2 mov x1, #1 203# CHECK-NEXT: 01 00 80 92 mov x1, #-1 204# CHECK-NEXT: 42 00 a0 d2 mov x2, #131072 205## -65537 = 0xfffffffffffeffff 206# CHECK-NEXT: 22 00 a0 92 mov x2, #-65537 207## 12884901888 = 0x300000000 208# CHECK-NEXT: 63 00 c0 d2 mov x3, #12884901888 209## -8589934593 = #0xfffffffdffffffff 210# CHECK-NEXT: 43 00 c0 92 mov x3, #-8589934593 211 212.section .R_AARCH64_MOVW_PREL,"ax",@progbits 213 movz x1, #:prel_g0:.+1 214 movz x1, #:prel_g0_nc:.-1 215 movk x1, #:prel_g0:.+1 216 movk x1, #:prel_g0_nc:.-1 217 movz x2, #:prel_g1:.+0x20000 218 movz x2, #:prel_g1_nc:.-0x20000 219 movk x2, #:prel_g1:.+0x20000 220 movk x2, #:prel_g1_nc:.-0x20000 221 movz x3, #:prel_g2:.+0x300000000 222 movz x3, #:prel_g2_nc:.-0x300000000 223 movk x3, #:prel_g2:.+0x300000000 224 movk x3, #:prel_g2_nc:.-0x300000000 225 movz x3, #:prel_g2:.+0x300000000 226 movz x4, #:prel_g3:.+0x4000000000000 227 movz x4, #:prel_g3:.-0x4000000000000 228 movk x4, #:prel_g3:.+0x4000000000000 229 movk x4, #:prel_g3:.-0x4000000000000 230 231# CHECK: Disassembly of section .R_AARCH64_MOVW_PREL: 232# CHECK-EMPTY: 233# CHECK-NEXT: : 234# CHECK-NEXT: 2101bc: 21 00 80 d2 mov x1, #1 235# CHECK-NEXT: 2101c0: 01 00 80 92 mov x1, #-1 236# CHECK-NEXT: 2101c4: 21 00 80 f2 movk x1, #1 237# CHECK-NEXT: 2101c8: e1 ff 9f f2 movk x1, #65535 238# CHECK-NEXT: 2101cc: 42 00 a0 d2 mov x2, #131072 239## -65537 = 0xfffffffffffeffff 240# CHECK-NEXT: 2101d0: 22 00 a0 92 mov x2, #-65537 241# CHECK-NEXT: 2101d4: 42 00 a0 f2 movk x2, #2, lsl #16 242# CHECK-NEXT: 2101d8: c2 ff bf f2 movk x2, #65534, lsl #16 243## 12884901888 = 0x300000000 244# CHECK-NEXT: 2101dc: 63 00 c0 d2 mov x3, #12884901888 245## -8589934593 = #0xfffffffdffffffff 246# CHECK-NEXT: 2101e0: 43 00 c0 92 mov x3, #-8589934593 247# CHECK-NEXT: 2101e4: 63 00 c0 f2 movk x3, #3, lsl #32 248# CHECK-NEXT: 2101e8: a3 ff df f2 movk x3, #65533, lsl #32 249# CHECK-NEXT: 2101ec: 63 00 c0 d2 mov x3, #12884901888 250## 1125899906842624 = 0x4000000000000 251# CHECK-NEXT: 2101f0: 84 00 e0 d2 mov x4, #1125899906842624 252# CHECK-NEXT: 2101f4: 84 ff ff d2 mov x4, #-1125899906842624 253# CHECK-NEXT: 2101f8: 84 00 e0 f2 movk x4, #4, lsl #48 254# CHECK-NEXT: 2101fc: 84 ff ff f2 movk x4, #65532, lsl #48 255