1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -triple=arm64-none-linux-gnu -show-encoding < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -triple=arm64-none-linux-gnu -filetype=obj < %s -o - | \ 3*9880d681SAndroid Build Coastguard Worker// RUN: llvm-readobj -r -t | FileCheck --check-prefix=CHECK-ELF %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker//////////////////////////////////////////////////////////////////////////////// 7*9880d681SAndroid Build Coastguard Worker// TLS initial-exec forms 8*9880d681SAndroid Build Coastguard Worker//////////////////////////////////////////////////////////////////////////////// 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker movz x15, #:gottprel_g1:var 11*9880d681SAndroid Build Coastguard Worker// CHECK: movz x15, #:gottprel_g1:var // encoding: [0bAAA01111,A,0b101AAAAA,0x92] 12*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :gottprel_g1:var, kind: fixup_aarch64_movw 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker// CHECK-ELF: {{0x[0-9A-F]+}} R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 [[VARSYM:[^ ]+]] 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker movk x13, #:gottprel_g0_nc:var 18*9880d681SAndroid Build Coastguard Worker// CHECK: movk x13, #:gottprel_g0_nc:var // encoding: [0bAAA01101,A,0b100AAAAA,0xf2] 19*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :gottprel_g0_nc:var, kind: fixup_aarch64_movw 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC [[VARSYM]] 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker adrp x11, :gottprel:var 25*9880d681SAndroid Build Coastguard Worker ldr x10, [x0, #:gottprel_lo12:var] 26*9880d681SAndroid Build Coastguard Worker ldr x9, :gottprel:var 27*9880d681SAndroid Build Coastguard Worker// CHECK: adrp x11, :gottprel:var // encoding: [0x0b'A',A,A,0x90'A'] 28*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :gottprel:var, kind: fixup_aarch64_pcrel_adrp_imm21 29*9880d681SAndroid Build Coastguard Worker// CHECK: ldr x10, [x0, :gottprel_lo12:var] // encoding: [0x0a,0bAAAAAA00,0b01AAAAAA,0xf9] 30*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :gottprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale8 31*9880d681SAndroid Build Coastguard Worker// CHECK: ldr x9, :gottprel:var // encoding: [0bAAA01001,A,A,0x58] 32*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :gottprel:var, kind: fixup_aarch64_ldr_pcrel_imm19 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 [[VARSYM]] 35*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC [[VARSYM]] 36*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 [[VARSYM]] 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker//////////////////////////////////////////////////////////////////////////////// 40*9880d681SAndroid Build Coastguard Worker// TLS local-exec forms 41*9880d681SAndroid Build Coastguard Worker//////////////////////////////////////////////////////////////////////////////// 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker movz x3, #:tprel_g2:var 44*9880d681SAndroid Build Coastguard Worker movn x4, #:tprel_g2:var 45*9880d681SAndroid Build Coastguard Worker// CHECK: movz x3, #:tprel_g2:var // encoding: [0bAAA00011,A,0b110AAAAA,0x92] 46*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g2:var, kind: fixup_aarch64_movw 47*9880d681SAndroid Build Coastguard Worker// CHECK: movn x4, #:tprel_g2:var // encoding: [0bAAA00100,A,0b110AAAAA,0x92] 48*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g2:var, kind: fixup_aarch64_movw 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G2 [[VARSYM]] 51*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G2 [[VARSYM]] 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker movz x5, #:tprel_g1:var 55*9880d681SAndroid Build Coastguard Worker movn x6, #:tprel_g1:var 56*9880d681SAndroid Build Coastguard Worker movz w7, #:tprel_g1:var 57*9880d681SAndroid Build Coastguard Worker// CHECK: movz x5, #:tprel_g1:var // encoding: [0bAAA00101,A,0b101AAAAA,0x92] 58*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_aarch64_movw 59*9880d681SAndroid Build Coastguard Worker// CHECK: movn x6, #:tprel_g1:var // encoding: [0bAAA00110,A,0b101AAAAA,0x92] 60*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_aarch64_movw 61*9880d681SAndroid Build Coastguard Worker// CHECK: movz w7, #:tprel_g1:var // encoding: [0bAAA00111,A,0b101AAAAA,0x12] 62*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_aarch64_movw 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1 [[VARSYM]] 65*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1 [[VARSYM]] 66*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1 [[VARSYM]] 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Worker movk x9, #:tprel_g1_nc:var 70*9880d681SAndroid Build Coastguard Worker movk w10, #:tprel_g1_nc:var 71*9880d681SAndroid Build Coastguard Worker// CHECK: movk x9, #:tprel_g1_nc:var // encoding: [0bAAA01001,A,0b101AAAAA,0xf2] 72*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g1_nc:var, kind: fixup_aarch64_movw 73*9880d681SAndroid Build Coastguard Worker// CHECK: movk w10, #:tprel_g1_nc:var // encoding: [0bAAA01010,A,0b101AAAAA,0x72] 74*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g1_nc:var, kind: fixup_aarch64_movw 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1_NC [[VARSYM]] 77*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1_NC [[VARSYM]] 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker movz x11, #:tprel_g0:var 81*9880d681SAndroid Build Coastguard Worker movn x12, #:tprel_g0:var 82*9880d681SAndroid Build Coastguard Worker movz w13, #:tprel_g0:var 83*9880d681SAndroid Build Coastguard Worker// CHECK: movz x11, #:tprel_g0:var // encoding: [0bAAA01011,A,0b100AAAAA,0x92] 84*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_aarch64_movw 85*9880d681SAndroid Build Coastguard Worker// CHECK: movn x12, #:tprel_g0:var // encoding: [0bAAA01100,A,0b100AAAAA,0x92] 86*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_aarch64_movw 87*9880d681SAndroid Build Coastguard Worker// CHECK: movz w13, #:tprel_g0:var // encoding: [0bAAA01101,A,0b100AAAAA,0x12] 88*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_aarch64_movw 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0 [[VARSYM]] 91*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0 [[VARSYM]] 92*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0 [[VARSYM]] 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Worker movk x15, #:tprel_g0_nc:var 96*9880d681SAndroid Build Coastguard Worker movk w16, #:tprel_g0_nc:var 97*9880d681SAndroid Build Coastguard Worker// CHECK: movk x15, #:tprel_g0_nc:var // encoding: [0bAAA01111,A,0b100AAAAA,0xf2] 98*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g0_nc:var, kind: fixup_aarch64_movw 99*9880d681SAndroid Build Coastguard Worker// CHECK: movk w16, #:tprel_g0_nc:var // encoding: [0bAAA10000,A,0b100AAAAA,0x72] 100*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g0_nc:var, kind: fixup_aarch64_movw 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0_NC [[VARSYM]] 103*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0_NC [[VARSYM]] 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Worker 106*9880d681SAndroid Build Coastguard Worker add x21, x22, #:tprel_lo12:var 107*9880d681SAndroid Build Coastguard Worker// CHECK: add x21, x22, :tprel_lo12:var // encoding: [0xd5,0bAAAAAA10,0b00AAAAAA,0x91] 108*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_aarch64_add_imm12 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_ADD_TPREL_LO12 [[VARSYM]] 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Worker add x25, x26, #:tprel_lo12_nc:var 114*9880d681SAndroid Build Coastguard Worker// CHECK: add x25, x26, :tprel_lo12_nc:var // encoding: [0x59,0bAAAAAA11,0b00AAAAAA,0x91] 115*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_aarch64_add_imm12 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_ADD_TPREL_LO12_NC [[VARSYM]] 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker ldrb w29, [x30, #:tprel_lo12:var] 121*9880d681SAndroid Build Coastguard Worker ldrsb x29, [x28, #:tprel_lo12_nc:var] 122*9880d681SAndroid Build Coastguard Worker// CHECK: ldrb w29, [x30, :tprel_lo12:var] // encoding: [0xdd,0bAAAAAA11,0b01AAAAAA,0x39] 123*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale1 124*9880d681SAndroid Build Coastguard Worker// CHECK: ldrsb x29, [x28, :tprel_lo12_nc:var] // encoding: [0x9d,0bAAAAAA11,0b10AAAAAA,0x39] 125*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale1 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST8_TPREL_LO12 [[VARSYM]] 128*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC [[VARSYM]] 129*9880d681SAndroid Build Coastguard Worker 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Worker strh w27, [x26, #:tprel_lo12:var] 132*9880d681SAndroid Build Coastguard Worker ldrsh x25, [x24, #:tprel_lo12_nc:var] 133*9880d681SAndroid Build Coastguard Worker// CHECK: strh w27, [x26, :tprel_lo12:var] // encoding: [0x5b,0bAAAAAA11,0b00AAAAAA,0x79] 134*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale2 135*9880d681SAndroid Build Coastguard Worker// CHECK: ldrsh x25, [x24, :tprel_lo12_nc:var] // encoding: [0x19,0bAAAAAA11,0b10AAAAAA,0x79] 136*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale2 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST16_TPREL_LO12 [[VARSYM]] 139*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC [[VARSYM]] 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker ldr w23, [x22, #:tprel_lo12:var] 143*9880d681SAndroid Build Coastguard Worker ldrsw x21, [x20, #:tprel_lo12_nc:var] 144*9880d681SAndroid Build Coastguard Worker// CHECK: ldr w23, [x22, :tprel_lo12:var] // encoding: [0xd7,0bAAAAAA10,0b01AAAAAA,0xb9] 145*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale4 146*9880d681SAndroid Build Coastguard Worker// CHECK: ldrsw x21, [x20, :tprel_lo12_nc:var] // encoding: [0x95,0bAAAAAA10,0b10AAAAAA,0xb9] 147*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale4 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST32_TPREL_LO12 [[VARSYM]] 150*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC [[VARSYM]] 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Worker ldr x19, [x18, #:tprel_lo12:var] 153*9880d681SAndroid Build Coastguard Worker str x17, [x16, #:tprel_lo12_nc:var] 154*9880d681SAndroid Build Coastguard Worker// CHECK: ldr x19, [x18, :tprel_lo12:var] // encoding: [0x53,0bAAAAAA10,0b01AAAAAA,0xf9] 155*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale8 156*9880d681SAndroid Build Coastguard Worker// CHECK: str x17, [x16, :tprel_lo12_nc:var] // encoding: [0x11,0bAAAAAA10,0b00AAAAAA,0xf9] 157*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale8 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST64_TPREL_LO12 [[VARSYM]] 160*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC [[VARSYM]] 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Worker//////////////////////////////////////////////////////////////////////////////// 164*9880d681SAndroid Build Coastguard Worker// TLS local-dynamic forms 165*9880d681SAndroid Build Coastguard Worker//////////////////////////////////////////////////////////////////////////////// 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Worker movz x3, #:dtprel_g2:var 168*9880d681SAndroid Build Coastguard Worker movn x4, #:dtprel_g2:var 169*9880d681SAndroid Build Coastguard Worker// CHECK: movz x3, #:dtprel_g2:var // encoding: [0bAAA00011,A,0b110AAAAA,0x92] 170*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_aarch64_movw 171*9880d681SAndroid Build Coastguard Worker// CHECK: movn x4, #:dtprel_g2:var // encoding: [0bAAA00100,A,0b110AAAAA,0x92] 172*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_aarch64_movw 173*9880d681SAndroid Build Coastguard Worker 174*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G2 [[VARSYM]] 175*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G2 [[VARSYM]] 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard Worker 178*9880d681SAndroid Build Coastguard Worker movz x5, #:dtprel_g1:var 179*9880d681SAndroid Build Coastguard Worker movn x6, #:dtprel_g1:var 180*9880d681SAndroid Build Coastguard Worker movz w7, #:dtprel_g1:var 181*9880d681SAndroid Build Coastguard Worker// CHECK: movz x5, #:dtprel_g1:var // encoding: [0bAAA00101,A,0b101AAAAA,0x92] 182*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_aarch64_movw 183*9880d681SAndroid Build Coastguard Worker// CHECK: movn x6, #:dtprel_g1:var // encoding: [0bAAA00110,A,0b101AAAAA,0x92] 184*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_aarch64_movw 185*9880d681SAndroid Build Coastguard Worker// CHECK: movz w7, #:dtprel_g1:var // encoding: [0bAAA00111,A,0b101AAAAA,0x12] 186*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_aarch64_movw 187*9880d681SAndroid Build Coastguard Worker 188*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1 [[VARSYM]] 189*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1 [[VARSYM]] 190*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1 [[VARSYM]] 191*9880d681SAndroid Build Coastguard Worker 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Worker movk x9, #:dtprel_g1_nc:var 194*9880d681SAndroid Build Coastguard Worker movk w10, #:dtprel_g1_nc:var 195*9880d681SAndroid Build Coastguard Worker// CHECK: movk x9, #:dtprel_g1_nc:var // encoding: [0bAAA01001,A,0b101AAAAA,0xf2] 196*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g1_nc:var, kind: fixup_aarch64_movw 197*9880d681SAndroid Build Coastguard Worker// CHECK: movk w10, #:dtprel_g1_nc:var // encoding: [0bAAA01010,A,0b101AAAAA,0x72] 198*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g1_nc:var, kind: fixup_aarch64_movw 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC [[VARSYM]] 201*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC [[VARSYM]] 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Worker movz x11, #:dtprel_g0:var 205*9880d681SAndroid Build Coastguard Worker movn x12, #:dtprel_g0:var 206*9880d681SAndroid Build Coastguard Worker movz w13, #:dtprel_g0:var 207*9880d681SAndroid Build Coastguard Worker// CHECK: movz x11, #:dtprel_g0:var // encoding: [0bAAA01011,A,0b100AAAAA,0x92] 208*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_aarch64_movw 209*9880d681SAndroid Build Coastguard Worker// CHECK: movn x12, #:dtprel_g0:var // encoding: [0bAAA01100,A,0b100AAAAA,0x92] 210*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_aarch64_movw 211*9880d681SAndroid Build Coastguard Worker// CHECK: movz w13, #:dtprel_g0:var // encoding: [0bAAA01101,A,0b100AAAAA,0x12] 212*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_aarch64_movw 213*9880d681SAndroid Build Coastguard Worker 214*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0 [[VARSYM]] 215*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0 [[VARSYM]] 216*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0 [[VARSYM]] 217*9880d681SAndroid Build Coastguard Worker 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Worker movk x15, #:dtprel_g0_nc:var 220*9880d681SAndroid Build Coastguard Worker movk w16, #:dtprel_g0_nc:var 221*9880d681SAndroid Build Coastguard Worker// CHECK: movk x15, #:dtprel_g0_nc:var // encoding: [0bAAA01111,A,0b100AAAAA,0xf2] 222*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g0_nc:var, kind: fixup_aarch64_movw 223*9880d681SAndroid Build Coastguard Worker// CHECK: movk w16, #:dtprel_g0_nc:var // encoding: [0bAAA10000,A,0b100AAAAA,0x72] 224*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g0_nc:var, kind: fixup_aarch64_movw 225*9880d681SAndroid Build Coastguard Worker 226*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC [[VARSYM]] 227*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC [[VARSYM]] 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Worker 230*9880d681SAndroid Build Coastguard Worker add x21, x22, #:dtprel_lo12:var 231*9880d681SAndroid Build Coastguard Worker// CHECK: add x21, x22, :dtprel_lo12:var // encoding: [0xd5,0bAAAAAA10,0b00AAAAAA,0x91] 232*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_aarch64_add_imm12 233*9880d681SAndroid Build Coastguard Worker 234*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_ADD_DTPREL_LO12 [[VARSYM]] 235*9880d681SAndroid Build Coastguard Worker 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Worker add x25, x26, #:dtprel_lo12_nc:var 238*9880d681SAndroid Build Coastguard Worker// CHECK: add x25, x26, :dtprel_lo12_nc:var // encoding: [0x59,0bAAAAAA11,0b00AAAAAA,0x91] 239*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_aarch64_add_imm12 240*9880d681SAndroid Build Coastguard Worker 241*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC [[VARSYM]] 242*9880d681SAndroid Build Coastguard Worker 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Worker ldrb w29, [x30, #:dtprel_lo12:var] 245*9880d681SAndroid Build Coastguard Worker ldrsb x29, [x28, #:dtprel_lo12_nc:var] 246*9880d681SAndroid Build Coastguard Worker// CHECK: ldrb w29, [x30, :dtprel_lo12:var] // encoding: [0xdd,0bAAAAAA11,0b01AAAAAA,0x39] 247*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale1 248*9880d681SAndroid Build Coastguard Worker// CHECK: ldrsb x29, [x28, :dtprel_lo12_nc:var] // encoding: [0x9d,0bAAAAAA11,0b10AAAAAA,0x39] 249*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale1 250*9880d681SAndroid Build Coastguard Worker 251*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST8_DTPREL_LO12 [[VARSYM]] 252*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC [[VARSYM]] 253*9880d681SAndroid Build Coastguard Worker 254*9880d681SAndroid Build Coastguard Worker 255*9880d681SAndroid Build Coastguard Worker strh w27, [x26, #:dtprel_lo12:var] 256*9880d681SAndroid Build Coastguard Worker ldrsh x25, [x24, #:dtprel_lo12_nc:var] 257*9880d681SAndroid Build Coastguard Worker// CHECK: strh w27, [x26, :dtprel_lo12:var] // encoding: [0x5b,0bAAAAAA11,0b00AAAAAA,0x79] 258*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale2 259*9880d681SAndroid Build Coastguard Worker// CHECK: ldrsh x25, [x24, :dtprel_lo12_nc:var] // encoding: [0x19,0bAAAAAA11,0b10AAAAAA,0x79] 260*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale2 261*9880d681SAndroid Build Coastguard Worker 262*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST16_DTPREL_LO12 [[VARSYM]] 263*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC [[VARSYM]] 264*9880d681SAndroid Build Coastguard Worker 265*9880d681SAndroid Build Coastguard Worker 266*9880d681SAndroid Build Coastguard Worker ldr w23, [x22, #:dtprel_lo12:var] 267*9880d681SAndroid Build Coastguard Worker ldrsw x21, [x20, #:dtprel_lo12_nc:var] 268*9880d681SAndroid Build Coastguard Worker// CHECK: ldr w23, [x22, :dtprel_lo12:var] // encoding: [0xd7,0bAAAAAA10,0b01AAAAAA,0xb9] 269*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale4 270*9880d681SAndroid Build Coastguard Worker// CHECK: ldrsw x21, [x20, :dtprel_lo12_nc:var] // encoding: [0x95,0bAAAAAA10,0b10AAAAAA,0xb9] 271*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale4 272*9880d681SAndroid Build Coastguard Worker 273*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST32_DTPREL_LO12 [[VARSYM]] 274*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC [[VARSYM]] 275*9880d681SAndroid Build Coastguard Worker 276*9880d681SAndroid Build Coastguard Worker ldr x19, [x18, #:dtprel_lo12:var] 277*9880d681SAndroid Build Coastguard Worker str x17, [x16, #:dtprel_lo12_nc:var] 278*9880d681SAndroid Build Coastguard Worker// CHECK: ldr x19, [x18, :dtprel_lo12:var] // encoding: [0x53,0bAAAAAA10,0b01AAAAAA,0xf9] 279*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale8 280*9880d681SAndroid Build Coastguard Worker// CHECK: str x17, [x16, :dtprel_lo12_nc:var] // encoding: [0x11,0bAAAAAA10,0b00AAAAAA,0xf9] 281*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale8 282*9880d681SAndroid Build Coastguard Worker 283*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST64_DTPREL_LO12 [[VARSYM]] 284*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC [[VARSYM]] 285*9880d681SAndroid Build Coastguard Worker 286*9880d681SAndroid Build Coastguard Worker//////////////////////////////////////////////////////////////////////////////// 287*9880d681SAndroid Build Coastguard Worker// TLS descriptor forms 288*9880d681SAndroid Build Coastguard Worker//////////////////////////////////////////////////////////////////////////////// 289*9880d681SAndroid Build Coastguard Worker 290*9880d681SAndroid Build Coastguard Worker adrp x8, :tlsdesc:var 291*9880d681SAndroid Build Coastguard Worker ldr x7, [x6, #:tlsdesc_lo12:var] 292*9880d681SAndroid Build Coastguard Worker add x5, x4, #:tlsdesc_lo12:var 293*9880d681SAndroid Build Coastguard Worker .tlsdesccall var 294*9880d681SAndroid Build Coastguard Worker blr x3 295*9880d681SAndroid Build Coastguard Worker 296*9880d681SAndroid Build Coastguard Worker// CHECK: adrp x8, :tlsdesc:var // encoding: [0x08'A',A,A,0x90'A'] 297*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tlsdesc:var, kind: fixup_aarch64_pcrel_adrp_imm21 298*9880d681SAndroid Build Coastguard Worker// CHECK: ldr x7, [x6, :tlsdesc_lo12:var] // encoding: [0xc7,0bAAAAAA00,0b01AAAAAA,0xf9] 299*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tlsdesc_lo12:var, kind: fixup_aarch64_ldst_imm12_scale8 300*9880d681SAndroid Build Coastguard Worker// CHECK: add x5, x4, :tlsdesc_lo12:var // encoding: [0x85,0bAAAAAA00,0b00AAAAAA,0x91] 301*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: :tlsdesc_lo12:var, kind: fixup_aarch64_add_imm12 302*9880d681SAndroid Build Coastguard Worker// CHECK: .tlsdesccall var // encoding: [] 303*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: // fixup A - offset: 0, value: var, kind: fixup_aarch64_tlsdesc_call 304*9880d681SAndroid Build Coastguard Worker// CHECK: blr x3 // encoding: [0x60,0x00,0x3f,0xd6] 305*9880d681SAndroid Build Coastguard Worker 306*9880d681SAndroid Build Coastguard Worker 307*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSDESC_ADR_PAGE21 [[VARSYM]] 308*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSDESC_LD64_LO12_NC [[VARSYM]] 309*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSDESC_ADD_LO12_NC [[VARSYM]] 310*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: {{0x[0-9A-F]+}} R_AARCH64_TLSDESC_CALL [[VARSYM]] 311*9880d681SAndroid Build Coastguard Worker 312*9880d681SAndroid Build Coastguard Worker // Make sure symbol 5 has type STT_TLS: 313*9880d681SAndroid Build Coastguard Worker 314*9880d681SAndroid Build Coastguard Worker// CHECK-ELF: Symbols [ 315*9880d681SAndroid Build Coastguard Worker// CHECK-ELF: Symbol { 316*9880d681SAndroid Build Coastguard Worker// CHECK-ELF: Name: var 317*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: Value: 318*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: Size: 319*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: Binding: Global 320*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT: Type: TLS 321