| // RUN: llvm-mc -arch=aarch64 -show-encoding < %s | FileCheck %s |
| // RUN: llvm-mc -arch=aarch64 -filetype=obj < %s -o %t |
| // RUN: elf-dump %t | FileCheck --check-prefix=CHECK-ELF %s |
| // RUN: llvm-objdump -r %t | FileCheck --check-prefix=CHECK-ELF-NAMES %s |
| |
| // CHECK-ELF: .rela.text |
| |
| // TLS local-dynamic forms |
| movz x1, #:dtprel_g2:var |
| movn x2, #:dtprel_g2:var |
| movz x3, #:dtprel_g2:var |
| movn x4, #:dtprel_g2:var |
| // CHECK: movz x1, #:dtprel_g2:var // encoding: [0x01'A',A,0xc0'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_a64_movw_dtprel_g2 |
| // CHECK-NEXT: movn x2, #:dtprel_g2:var // encoding: [0x02'A',A,0xc0'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_a64_movw_dtprel_g2 |
| // CHECK-NEXT: movz x3, #:dtprel_g2:var // encoding: [0x03'A',A,0xc0'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_a64_movw_dtprel_g2 |
| // CHECK-NEXT: movn x4, #:dtprel_g2:var // encoding: [0x04'A',A,0xc0'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_a64_movw_dtprel_g2 |
| |
| // CHECK-ELF: # Relocation 0 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000000) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM:0x[0-9a-f]+]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020b) |
| // CHECK-ELF: # Relocation 1 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000004) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020b) |
| // CHECK-ELF: # Relocation 2 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000008) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020b) |
| // CHECK-ELF: # Relocation 3 |
| // CHECK-ELF-NEXT: (('r_offset', 0x000000000000000c) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020b) |
| |
| // CHECK-ELF-NAMES: 0 R_AARCH64_TLSLD_MOVW_DTPREL_G2 |
| // CHECK-ELF-NAMES: 4 R_AARCH64_TLSLD_MOVW_DTPREL_G2 |
| // CHECK-ELF-NAMES: 8 R_AARCH64_TLSLD_MOVW_DTPREL_G2 |
| // CHECK-ELF-NAMES: 12 R_AARCH64_TLSLD_MOVW_DTPREL_G2 |
| |
| movz x5, #:dtprel_g1:var |
| movn x6, #:dtprel_g1:var |
| movz w7, #:dtprel_g1:var |
| movn w8, #:dtprel_g1:var |
| // CHECK: movz x5, #:dtprel_g1:var // encoding: [0x05'A',A,0xa0'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_a64_movw_dtprel_g1 |
| // CHECK-NEXT: movn x6, #:dtprel_g1:var // encoding: [0x06'A',A,0xa0'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_a64_movw_dtprel_g1 |
| // CHECK-NEXT: movz w7, #:dtprel_g1:var // encoding: [0x07'A',A,0xa0'A',0x12'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_a64_movw_dtprel_g1 |
| // CHECK-NEXT: movn w8, #:dtprel_g1:var // encoding: [0x08'A',A,0xa0'A',0x12'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_a64_movw_dtprel_g1 |
| |
| // CHECK-ELF: # Relocation 4 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000010) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020c) |
| // CHECK-ELF: # Relocation 5 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000014) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020c) |
| // CHECK-ELF: # Relocation 6 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000018) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020c) |
| // CHECK-ELF: # Relocation 7 |
| // CHECK-ELF-NEXT: (('r_offset', 0x000000000000001c) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020c) |
| |
| // CHECK-ELF-NAMES: 16 R_AARCH64_TLSLD_MOVW_DTPREL_G1 |
| // CHECK-ELF-NAMES: 20 R_AARCH64_TLSLD_MOVW_DTPREL_G1 |
| // CHECK-ELF-NAMES: 24 R_AARCH64_TLSLD_MOVW_DTPREL_G1 |
| // CHECK-ELF-NAMES: 28 R_AARCH64_TLSLD_MOVW_DTPREL_G1 |
| |
| movk x9, #:dtprel_g1_nc:var |
| movk w10, #:dtprel_g1_nc:var |
| // CHECK: movk x9, #:dtprel_g1_nc:var // encoding: [0x09'A',A,0xa0'A',0xf2'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g1_nc:var, kind: fixup_a64_movw_dtprel_g1_nc |
| // CHECK-NEXT: movk w10, #:dtprel_g1_nc:var // encoding: [0x0a'A',A,0xa0'A',0x72'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g1_nc:var, kind: fixup_a64_movw_dtprel_g1_nc |
| |
| // CHECK-ELF: # Relocation 8 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000020) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020d) |
| // CHECK-ELF: # Relocation 9 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000024) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020d) |
| |
| // CHECK-ELF-NAMES: 32 R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC |
| // CHECK-ELF-NAMES: 36 R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC |
| |
| movz x11, #:dtprel_g0:var |
| movn x12, #:dtprel_g0:var |
| movz w13, #:dtprel_g0:var |
| movn w14, #:dtprel_g0:var |
| // CHECK: movz x11, #:dtprel_g0:var // encoding: [0x0b'A',A,0x80'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_a64_movw_dtprel_g0 |
| // CHECK-NEXT: movn x12, #:dtprel_g0:var // encoding: [0x0c'A',A,0x80'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_a64_movw_dtprel_g0 |
| // CHECK-NEXT: movz w13, #:dtprel_g0:var // encoding: [0x0d'A',A,0x80'A',0x12'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_a64_movw_dtprel_g0 |
| // CHECK-NEXT: movn w14, #:dtprel_g0:var // encoding: [0x0e'A',A,0x80'A',0x12'A'] |
| |
| |
| // CHECK-ELF: # Relocation 10 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000028) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020e) |
| // CHECK-ELF: # Relocation 11 |
| // CHECK-ELF-NEXT: (('r_offset', 0x000000000000002c) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020e) |
| // CHECK-ELF: # Relocation 12 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000030) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020e) |
| // CHECK-ELF: # Relocation 13 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000034) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020e) |
| |
| // CHECK-ELF-NAMES: 40 R_AARCH64_TLSLD_MOVW_DTPREL_G0 |
| // CHECK-ELF-NAMES: 44 R_AARCH64_TLSLD_MOVW_DTPREL_G0 |
| // CHECK-ELF-NAMES: 48 R_AARCH64_TLSLD_MOVW_DTPREL_G0 |
| // CHECK-ELF-NAMES: 52 R_AARCH64_TLSLD_MOVW_DTPREL_G0 |
| |
| |
| movk x15, #:dtprel_g0_nc:var |
| movk w16, #:dtprel_g0_nc:var |
| // CHECK: movk x15, #:dtprel_g0_nc:var // encoding: [0x0f'A',A,0x80'A',0xf2'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g0_nc:var, kind: fixup_a64_movw_dtprel_g0_nc |
| // CHECK-NEXT: movk w16, #:dtprel_g0_nc:var // encoding: [0x10'A',A,0x80'A',0x72'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_g0_nc:var, kind: fixup_a64_movw_dtprel_g0_nc |
| |
| // CHECK-ELF: # Relocation 14 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000038) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020f) |
| // CHECK-ELF: # Relocation 15 |
| // CHECK-ELF-NEXT: (('r_offset', 0x000000000000003c) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000020f) |
| |
| // CHECK-ELF-NAMES: 56 R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC |
| // CHECK-ELF-NAMES: 60 R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC |
| |
| add x17, x18, #:dtprel_hi12:var, lsl #12 |
| add w19, w20, #:dtprel_hi12:var, lsl #12 |
| // CHECK: add x17, x18, #:dtprel_hi12:var, lsl #12 // encoding: [0x51'A',0x02'A',0x40'A',0x91'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_hi12:var, kind: fixup_a64_add_dtprel_hi12 |
| // CHECK-NEXT: add w19, w20, #:dtprel_hi12:var, lsl #12 // encoding: [0x93'A',0x02'A',0x40'A',0x11'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_hi12:var, kind: fixup_a64_add_dtprel_hi12 |
| |
| // CHECK-ELF: # Relocation 16 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000040) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000210) |
| // CHECK-ELF: # Relocation 17 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000044) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000210) |
| |
| // CHECK-ELF-NAMES: 64 R_AARCH64_TLSLD_ADD_DTPREL_HI12 |
| // CHECK-ELF-NAMES: 68 R_AARCH64_TLSLD_ADD_DTPREL_HI12 |
| |
| |
| add x21, x22, #:dtprel_lo12:var |
| add w23, w24, #:dtprel_lo12:var |
| // CHECK: add x21, x22, #:dtprel_lo12:var // encoding: [0xd5'A',0x02'A',A,0x91'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_add_dtprel_lo12 |
| // CHECK-NEXT: add w23, w24, #:dtprel_lo12:var // encoding: [0x17'A',0x03'A',A,0x11'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_add_dtprel_lo12 |
| |
| // CHECK-ELF: # Relocation 18 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000048) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000211) |
| // CHECK-ELF: # Relocation 19 |
| // CHECK-ELF-NEXT: (('r_offset', 0x000000000000004c) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000211) |
| |
| // CHECK-ELF-NAMES: 72 R_AARCH64_TLSLD_ADD_DTPREL_LO12 |
| // CHECK-ELF-NAMES: 76 R_AARCH64_TLSLD_ADD_DTPREL_LO12 |
| |
| add x25, x26, #:dtprel_lo12_nc:var |
| add w27, w28, #:dtprel_lo12_nc:var |
| // CHECK: add x25, x26, #:dtprel_lo12_nc:var // encoding: [0x59'A',0x03'A',A,0x91'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_add_dtprel_lo12_nc |
| // CHECK-NEXT: add w27, w28, #:dtprel_lo12_nc:var // encoding: [0x9b'A',0x03'A',A,0x11'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_add_dtprel_lo12_nc |
| |
| // CHECK-ELF: # Relocation 20 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000050) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000212) |
| // CHECK-ELF: # Relocation 21 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000054) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000212) |
| |
| // CHECK-ELF-NAMES: 80 R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC |
| // CHECK-ELF-NAMES: 84 R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC |
| |
| ldrb w29, [x30, #:dtprel_lo12:var] |
| ldrsb x29, [x28, #:dtprel_lo12_nc:var] |
| // CHECK: ldrb w29, [x30, #:dtprel_lo12:var] // encoding: [0xdd'A',0x03'A',0x40'A',0x39'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_ldst8_dtprel_lo12 |
| // CHECK-NEXT: ldrsb x29, [x28, #:dtprel_lo12_nc:var] // encoding: [0x9d'A',0x03'A',0x80'A',0x39'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_ldst8_dtprel_lo12_nc |
| |
| // CHECK-ELF: # Relocation 22 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000058) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000213) |
| // CHECK-ELF: # Relocation 23 |
| // CHECK-ELF-NEXT: (('r_offset', 0x000000000000005c) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000214) |
| |
| // CHECK-ELF-NAMES: 88 R_AARCH64_TLSLD_LDST8_DTPREL_LO12 |
| // CHECK-ELF-NAMES: 92 R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC |
| |
| strh w27, [x26, #:dtprel_lo12:var] |
| ldrsh x25, [x24, #:dtprel_lo12_nc:var] |
| // CHECK: strh w27, [x26, #:dtprel_lo12:var] // encoding: [0x5b'A',0x03'A',A,0x79'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_ldst16_dtprel_lo12 |
| // CHECK-NEXT: ldrsh x25, [x24, #:dtprel_lo12_nc:var] // encoding: [0x19'A',0x03'A',0x80'A',0x79'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_ldst16_dtprel_lo12_n |
| |
| // CHECK-ELF: # Relocation 24 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000060) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000215) |
| // CHECK-ELF: # Relocation 25 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000064) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000216) |
| |
| // CHECK-ELF-NAMES: 96 R_AARCH64_TLSLD_LDST16_DTPREL_LO12 |
| // CHECK-ELF-NAMES: 100 R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC |
| |
| ldr w23, [x22, #:dtprel_lo12:var] |
| ldrsw x21, [x20, #:dtprel_lo12_nc:var] |
| // CHECK: ldr w23, [x22, #:dtprel_lo12:var] // encoding: [0xd7'A',0x02'A',0x40'A',0xb9'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_ldst32_dtprel_lo12 |
| // CHECK-NEXT: ldrsw x21, [x20, #:dtprel_lo12_nc:var] // encoding: [0x95'A',0x02'A',0x80'A',0xb9'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_ldst32_dtprel_lo12_n |
| |
| // CHECK-ELF: # Relocation 26 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000068) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000217) |
| // CHECK-ELF: # Relocation 27 |
| // CHECK-ELF-NEXT: (('r_offset', 0x000000000000006c) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000218) |
| |
| // CHECK-ELF-NAMES: 104 R_AARCH64_TLSLD_LDST32_DTPREL_LO12 |
| // CHECK-ELF-NAMES: 108 R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC |
| |
| ldr x19, [x18, #:dtprel_lo12:var] |
| str x17, [x16, #:dtprel_lo12_nc:var] |
| // CHECK: ldr x19, [x18, #:dtprel_lo12:var] // encoding: [0x53'A',0x02'A',0x40'A',0xf9'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_ldst64_dtprel_lo12 |
| // CHECK-NEXT: str x17, [x16, #:dtprel_lo12_nc:var] // encoding: [0x11'A',0x02'A',A,0xf9'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_ldst64_dtprel_lo12_nc |
| |
| |
| // CHECK-ELF: # Relocation 28 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000070) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000219) |
| // CHECK-ELF: # Relocation 29 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000074) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000021a) |
| |
| // CHECK-ELF-NAMES: 112 R_AARCH64_TLSLD_LDST64_DTPREL_LO12 |
| // CHECK-ELF-NAMES: 116 R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC |
| |
| // TLS initial-exec forms |
| movz x15, #:gottprel_g1:var |
| movz w14, #:gottprel_g1:var |
| // CHECK: movz x15, #:gottprel_g1:var // encoding: [0x0f'A',A,0xa0'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :gottprel_g1:var, kind: fixup_a64_movw_gottprel_g1 |
| // CHECK-NEXT: movz w14, #:gottprel_g1:var // encoding: [0x0e'A',A,0xa0'A',0x12'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :gottprel_g1:var, kind: fixup_a64_movw_gottprel_g1 |
| |
| // CHECK-ELF: # Relocation 30 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000078) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000021b) |
| // CHECK-ELF: # Relocation 31 |
| // CHECK-ELF-NEXT: (('r_offset', 0x000000000000007c) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000021b) |
| |
| // CHECK-ELF-NAMES: 120 R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 |
| // CHECK-ELF-NAMES: 124 R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 |
| |
| movk x13, #:gottprel_g0_nc:var |
| movk w12, #:gottprel_g0_nc:var |
| // CHECK: movk x13, #:gottprel_g0_nc:var // encoding: [0x0d'A',A,0x80'A',0xf2'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :gottprel_g0_nc:var, kind: fixup_a64_movw_gottprel_g0_nc |
| // CHECK-NEXT: movk w12, #:gottprel_g0_nc:var // encoding: [0x0c'A',A,0x80'A',0x72'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :gottprel_g0_nc:var, kind: fixup_a64_movw_gottprel_g0_nc |
| |
| // CHECK-ELF: # Relocation 32 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000080) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000021c) |
| // CHECK-ELF: # Relocation 33 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000084) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000021c) |
| |
| // CHECK-ELF-NAMES: 128 R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC |
| // CHECK-ELF-NAMES: 132 R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC |
| |
| adrp x11, :gottprel:var |
| ldr x10, [x0, #:gottprel_lo12:var] |
| ldr x9, :gottprel:var |
| // CHECK: adrp x11, :gottprel:var // encoding: [0x0b'A',A,A,0x90'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :gottprel:var, kind: fixup_a64_adr_gottprel_page |
| // CHECK-NEXT: ldr x10, [x0, #:gottprel_lo12:var] // encoding: [0x0a'A',A,0x40'A',0xf9'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :gottprel_lo12:var, kind: fixup_a64_ld64_gottprel_lo12_nc |
| // CHECK-NEXT: ldr x9, :gottprel:var // encoding: [0x09'A',A,A,0x58'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :gottprel:var, kind: fixup_a64_ld_gottprel_prel19 |
| |
| // CHECK-ELF: # Relocation 34 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000088) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000021d) |
| // CHECK-ELF: # Relocation 35 |
| // CHECK-ELF-NEXT: (('r_offset', 0x000000000000008c) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000021e) |
| // CHECK-ELF: # Relocation 36 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000090) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000021f) |
| |
| // CHECK-ELF-NAMES: 136 R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE |
| // CHECK-ELF-NAMES: 140 R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC |
| // CHECK-ELF-NAMES: 144 R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 |
| |
| // TLS local-exec forms |
| movz x3, #:tprel_g2:var |
| movn x4, #:tprel_g2:var |
| // CHECK: movz x3, #:tprel_g2:var // encoding: [0x03'A',A,0xc0'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g2:var, kind: fixup_a64_movw_tprel_g2 |
| // CHECK-NEXT: movn x4, #:tprel_g2:var // encoding: [0x04'A',A,0xc0'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g2:var, kind: fixup_a64_movw_tprel_g2 |
| |
| // CHECK-ELF: # Relocation 37 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000094) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000220) |
| // CHECK-ELF: # Relocation 38 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000098) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000220) |
| |
| // CHECK-ELF-NAMES: 148 R_AARCH64_TLSLE_MOVW_TPREL_G2 |
| // CHECK-ELF-NAMES: 152 R_AARCH64_TLSLE_MOVW_TPREL_G2 |
| |
| movz x5, #:tprel_g1:var |
| movn x6, #:tprel_g1:var |
| movz w7, #:tprel_g1:var |
| movn w8, #:tprel_g1:var |
| // CHECK: movz x5, #:tprel_g1:var // encoding: [0x05'A',A,0xa0'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_a64_movw_tprel_g1 |
| // CHECK-NEXT: movn x6, #:tprel_g1:var // encoding: [0x06'A',A,0xa0'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_a64_movw_tprel_g1 |
| // CHECK-NEXT: movz w7, #:tprel_g1:var // encoding: [0x07'A',A,0xa0'A',0x12'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_a64_movw_tprel_g1 |
| // CHECK-NEXT: movn w8, #:tprel_g1:var // encoding: [0x08'A',A,0xa0'A',0x12'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_a64_movw_tprel_g1 |
| |
| // CHECK-ELF: # Relocation 39 |
| // CHECK-ELF-NEXT: (('r_offset', 0x000000000000009c) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000221) |
| // CHECK-ELF: # Relocation 40 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000a0) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000221) |
| // CHECK-ELF: # Relocation 41 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000a4) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000221) |
| // CHECK-ELF: # Relocation 42 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000a8) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000221) |
| |
| // CHECK-ELF-NAMES: 156 R_AARCH64_TLSLE_MOVW_TPREL_G1 |
| // CHECK-ELF-NAMES: 160 R_AARCH64_TLSLE_MOVW_TPREL_G1 |
| // CHECK-ELF-NAMES: 164 R_AARCH64_TLSLE_MOVW_TPREL_G1 |
| // CHECK-ELF-NAMES: 168 R_AARCH64_TLSLE_MOVW_TPREL_G1 |
| |
| movk x9, #:tprel_g1_nc:var |
| movk w10, #:tprel_g1_nc:var |
| // CHECK: movk x9, #:tprel_g1_nc:var // encoding: [0x09'A',A,0xa0'A',0xf2'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g1_nc:var, kind: fixup_a64_movw_tprel_g1_nc |
| // CHECK-NEXT: movk w10, #:tprel_g1_nc:var // encoding: [0x0a'A',A,0xa0'A',0x72'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g1_nc:var, kind: fixup_a64_movw_tprel_g1_nc |
| |
| // CHECK-ELF: # Relocation 43 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000ac) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000222) |
| // CHECK-ELF: # Relocation 44 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000b0) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000222) |
| |
| // CHECK-ELF-NAMES: 172 R_AARCH64_TLSLE_MOVW_TPREL_G1_NC |
| // CHECK-ELF-NAMES: 176 R_AARCH64_TLSLE_MOVW_TPREL_G1_NC |
| |
| movz x11, #:tprel_g0:var |
| movn x12, #:tprel_g0:var |
| movz w13, #:tprel_g0:var |
| movn w14, #:tprel_g0:var |
| // CHECK: movz x11, #:tprel_g0:var // encoding: [0x0b'A',A,0x80'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_a64_movw_tprel_g0 |
| // CHECK-NEXT: movn x12, #:tprel_g0:var // encoding: [0x0c'A',A,0x80'A',0x92'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_a64_movw_tprel_g0 |
| // CHECK-NEXT: movz w13, #:tprel_g0:var // encoding: [0x0d'A',A,0x80'A',0x12'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_a64_movw_tprel_g0 |
| // CHECK-NEXT: movn w14, #:tprel_g0:var // encoding: [0x0e'A',A,0x80'A',0x12'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_a64_movw_tprel_g0 |
| |
| // CHECK-ELF: # Relocation 45 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000b4) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000223) |
| // CHECK-ELF: # Relocation 46 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000b8) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000223) |
| // CHECK-ELF: # Relocation 47 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000bc) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000223) |
| // CHECK-ELF: # Relocation 48 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000c0) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000223) |
| |
| // CHECK-ELF-NAMES: 180 R_AARCH64_TLSLE_MOVW_TPREL_G0 |
| // CHECK-ELF-NAMES: 184 R_AARCH64_TLSLE_MOVW_TPREL_G0 |
| // CHECK-ELF-NAMES: 188 R_AARCH64_TLSLE_MOVW_TPREL_G0 |
| // CHECK-ELF-NAMES: 192 R_AARCH64_TLSLE_MOVW_TPREL_G0 |
| |
| movk x15, #:tprel_g0_nc:var |
| movk w16, #:tprel_g0_nc:var |
| // CHECK: movk x15, #:tprel_g0_nc:var // encoding: [0x0f'A',A,0x80'A',0xf2'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g0_nc:var, kind: fixup_a64_movw_tprel_g0_nc |
| // CHECK-NEXT: movk w16, #:tprel_g0_nc:var // encoding: [0x10'A',A,0x80'A',0x72'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_g0_nc:var, kind: fixup_a64_movw_tprel_g0_nc |
| |
| // CHECK-ELF: # Relocation 49 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000c4) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000224) |
| // CHECK-ELF: # Relocation 50 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000c8) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000224) |
| |
| // CHECK-ELF-NAMES: 196 R_AARCH64_TLSLE_MOVW_TPREL_G0_NC |
| // CHECK-ELF-NAMES: 200 R_AARCH64_TLSLE_MOVW_TPREL_G0_NC |
| |
| add x17, x18, #:tprel_hi12:var, lsl #12 |
| add w19, w20, #:tprel_hi12:var, lsl #12 |
| // CHECK: add x17, x18, #:tprel_hi12:var, lsl #12 // encoding: [0x51'A',0x02'A',0x40'A',0x91'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_hi12:var, kind: fixup_a64_add_tprel_hi12 |
| // CHECK-NEXT: add w19, w20, #:tprel_hi12:var, lsl #12 // encoding: [0x93'A',0x02'A',0x40'A',0x11'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_hi12:var, kind: fixup_a64_add_tprel_hi12 |
| |
| // CHECK-ELF: # Relocation 51 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000cc) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000225) |
| // CHECK-ELF: # Relocation 52 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000d0) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000225) |
| |
| // CHECK-ELF-NAMES: 204 R_AARCH64_TLSLE_ADD_TPREL_HI12 |
| // CHECK-ELF-NAMES: 208 R_AARCH64_TLSLE_ADD_TPREL_HI12 |
| |
| add x21, x22, #:tprel_lo12:var |
| add w23, w24, #:tprel_lo12:var |
| // CHECK: add x21, x22, #:tprel_lo12:var // encoding: [0xd5'A',0x02'A',A,0x91'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_add_tprel_lo12 |
| // CHECK-NEXT: add w23, w24, #:tprel_lo12:var // encoding: [0x17'A',0x03'A',A,0x11'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_add_tprel_lo12 |
| |
| // CHECK-ELF: # Relocation 53 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000d4) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000226) |
| // CHECK-ELF: # Relocation 54 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000d8) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000226) |
| |
| // CHECK-ELF-NAMES: 212 R_AARCH64_TLSLE_ADD_TPREL_LO12 |
| // CHECK-ELF-NAMES: 216 R_AARCH64_TLSLE_ADD_TPREL_LO12 |
| |
| add x25, x26, #:tprel_lo12_nc:var |
| add w27, w28, #:tprel_lo12_nc:var |
| // CHECK: add x25, x26, #:tprel_lo12_nc:var // encoding: [0x59'A',0x03'A',A,0x91'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_add_tprel_lo12_nc |
| // CHECK-NEXT: add w27, w28, #:tprel_lo12_nc:var // encoding: [0x9b'A',0x03'A',A,0x11'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_add_tprel_lo12_nc |
| |
| // CHECK-ELF: # Relocation 55 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000dc) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000227) |
| // CHECK-ELF: # Relocation 56 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000e0) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000227) |
| |
| |
| // CHECK-ELF-NAMES: 220 R_AARCH64_TLSLE_ADD_TPREL_LO12_NC |
| // CHECK-ELF-NAMES: 224 R_AARCH64_TLSLE_ADD_TPREL_LO12_NC |
| |
| ldrb w29, [x30, #:tprel_lo12:var] |
| ldrsb x29, [x28, #:tprel_lo12_nc:var] |
| // CHECK: ldrb w29, [x30, #:tprel_lo12:var] // encoding: [0xdd'A',0x03'A',0x40'A',0x39'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_ldst8_tprel_lo12 |
| // CHECK-NEXT: ldrsb x29, [x28, #:tprel_lo12_nc:var] // encoding: [0x9d'A',0x03'A',0x80'A',0x39'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_ldst8_tprel_lo12_nc |
| |
| // CHECK-ELF: # Relocation 57 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000e4) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000228) |
| // CHECK-ELF: # Relocation 58 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000e8) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000229) |
| |
| // CHECK-ELF-NAMES: 228 R_AARCH64_TLSLE_LDST8_TPREL_LO12 |
| // CHECK-ELF-NAMES: 232 R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC |
| |
| strh w27, [x26, #:tprel_lo12:var] |
| ldrsh x25, [x24, #:tprel_lo12_nc:var] |
| // CHECK: strh w27, [x26, #:tprel_lo12:var] // encoding: [0x5b'A',0x03'A',A,0x79'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_ldst16_tprel_lo12 |
| // CHECK-NEXT: ldrsh x25, [x24, #:tprel_lo12_nc:var] // encoding: [0x19'A',0x03'A',0x80'A',0x79'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_ldst16_tprel_lo12_n |
| |
| // CHECK-ELF: # Relocation 59 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000ec) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000022a) |
| // CHECK-ELF: # Relocation 60 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000f0) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000022b) |
| |
| // CHECK-ELF-NAMES: 236 R_AARCH64_TLSLE_LDST16_TPREL_LO12 |
| // CHECK-ELF-NAMES: 240 R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC |
| |
| ldr w23, [x22, #:tprel_lo12:var] |
| ldrsw x21, [x20, #:tprel_lo12_nc:var] |
| // CHECK: ldr w23, [x22, #:tprel_lo12:var] // encoding: [0xd7'A',0x02'A',0x40'A',0xb9'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_ldst32_tprel_lo12 |
| // CHECK-NEXT: ldrsw x21, [x20, #:tprel_lo12_nc:var] // encoding: [0x95'A',0x02'A',0x80'A',0xb9'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_ldst32_tprel_lo12_n |
| |
| // CHECK-ELF: # Relocation 61 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000f4) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000022c) |
| // CHECK-ELF: # Relocation 62 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000f8) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000022d) |
| |
| // CHECK-ELF-NAMES: 244 R_AARCH64_TLSLE_LDST32_TPREL_LO12 |
| // CHECK-ELF-NAMES: 248 R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC |
| |
| ldr x19, [x18, #:tprel_lo12:var] |
| str x17, [x16, #:tprel_lo12_nc:var] |
| // CHECK: ldr x19, [x18, #:tprel_lo12:var] // encoding: [0x53'A',0x02'A',0x40'A',0xf9'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_ldst64_tprel_lo12 |
| // CHECK-NEXT: str x17, [x16, #:tprel_lo12_nc:var] // encoding: [0x11'A',0x02'A',A,0xf9'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_ldst64_tprel_lo12_nc |
| |
| // CHECK-ELF: # Relocation 63 |
| // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000fc) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000022e) |
| // CHECK-ELF: # Relocation 64 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000100) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x0000022f) |
| |
| // CHECK-ELF-NAMES: 252 R_AARCH64_TLSLE_LDST64_TPREL_LO12 |
| // CHECK-ELF-NAMES: 256 R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC |
| |
| // TLS descriptor forms |
| adrp x8, :tlsdesc:var |
| ldr x7, [x6, :tlsdesc_lo12:var] |
| add x5, x4, #:tlsdesc_lo12:var |
| .tlsdesccall var |
| blr x3 |
| |
| // CHECK: adrp x8, :tlsdesc:var // encoding: [0x08'A',A,A,0x90'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tlsdesc:var, kind: fixup_a64_tlsdesc_adr_page |
| // CHECK-NEXT: ldr x7, [x6, #:tlsdesc_lo12:var] // encoding: [0xc7'A',A,0x40'A',0xf9'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tlsdesc_lo12:var, kind: fixup_a64_tlsdesc_ld64_lo12_nc |
| // CHECK-NEXT: add x5, x4, #:tlsdesc_lo12:var // encoding: [0x85'A',A,A,0x91'A'] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tlsdesc_lo12:var, kind: fixup_a64_tlsdesc_add_lo12_nc |
| // CHECK-NEXT: .tlsdesccall var // encoding: [] |
| // CHECK-NEXT: // fixup A - offset: 0, value: :tlsdesc:var, kind: fixup_a64_tlsdesc_call |
| // CHECK: blr x3 // encoding: [0x60,0x00,0x3f,0xd6] |
| |
| |
| // CHECK-ELF: # Relocation 65 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000104) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000232) |
| // CHECK-ELF: # Relocation 66 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000108) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000233) |
| // CHECK-ELF: # Relocation 67 |
| // CHECK-ELF-NEXT: (('r_offset', 0x000000000000010c) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000234) |
| // CHECK-ELF: # Relocation 68 |
| // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000110) |
| // CHECK-ELF-NEXT: ('r_sym', [[VARSYM]]) |
| // CHECK-ELF-NEXT: ('r_type', 0x00000239) |
| |
| // CHECK-ELF-NAMES: 260 R_AARCH64_TLSDESC_ADR_PAGE |
| // CHECK-ELF-NAMES: 264 R_AARCH64_TLSDESC_LD64_LO12_NC |
| // CHECK-ELF-NAMES: 268 R_AARCH64_TLSDESC_ADD_LO12_NC |
| // CHECK-ELF-NAMES: 272 R_AARCH64_TLSDESC_CALL |
| |
| |
| // Make sure symbol 5 has type STT_TLS: |
| |
| // CHECK-ELF: # Symbol 5 |
| // CHECK-ELF-NEXT: (('st_name', 0x00000006) # 'var' |
| // CHECK-ELF-NEXT: ('st_bind', 0x1) |
| // CHECK-ELF-NEXT: ('st_type', 0x6) |