131 lines · plain
1// RUN: llvm-mc -triple aarch64-windows -filetype obj -o %t.obj %s2// RUN: llvm-mc -triple arm64ec-windows -filetype obj -o %t-ec.obj %s3// RUN: llvm-readobj -r %t.obj | FileCheck %s --check-prefixes=CHECK,CHECK-ARM644// RUN: llvm-readobj -r %t-ec.obj | FileCheck %s --check-prefixes=CHECK,CHECK-ARM64EC5// RUN: llvm-objdump --no-print-imm-hex -d %t.obj | FileCheck %s --check-prefix=DISASM6// RUN: llvm-objdump --no-print-imm-hex -d %t-ec.obj | FileCheck %s --check-prefix=DISASM7// RUN: llvm-objdump -s %t.obj | FileCheck %s --check-prefix=DATA8// RUN: llvm-objdump -s %t-ec.obj | FileCheck %s --check-prefix=DATA9 10# RUN: not llvm-mc -triple=aarch64-windows -filetype=obj %s --defsym ERR=1 -o /dev/null 2>&1 | FileCheck %s --check-prefix=ERR --implicit-check-not=error:11 12// IMAGE_REL_ARM64_ADDR3213.Linfo_foo:14 .asciz "foo"15 .long foo16 17// IMAGE_REL_ARM64_ADDR32NB18.long func@IMGREL19 20// IMAGE_REL_ARM64_ADDR6421.globl struc22struc:23 .quad arr24 25// IMAGE_REL_ARM64_BRANCH2626b target27 28// IMAGE_REL_ARM64_PAGEBASE_REL2129adrp x0, foo30 31// IMAGE_REL_ARM64_PAGEOFFSET_12A32add x0, x0, :lo12:foo33 34// IMAGE_REL_ARM64_PAGEOFFSET_12L35ldr x0, [x0, :lo12:foo]36 37// IMAGE_REL_ARM64_PAGEBASE_REL21, even if the symbol offset is known38adrp x0, bar39bar:40 41// IMAGE_REL_ARM64_SECREL42.secrel32 .Linfo_bar43.Linfo_bar:44 45// IMAGE_REL_ARM64_SECTION46.secidx func47 48.align 249adrp x0, baz + 0x1234550baz:51add x0, x0, :lo12:foo + 0x1234552ldrb w0, [x0, :lo12:foo + 0x12345]53ldr x0, [x0, :lo12:foo + 0x12348]54 55// IMAGE_REL_ARM64_SECREL_LOW12A56add x0, x0, :secrel_lo12:foo57// IMAGE_REL_ARM64_SECREL_HIGH12A58add x0, x0, :secrel_hi12:foo59// IMAGE_REL_ARM64_SECREL_LOW12L60ldr x0, [x0, :secrel_lo12:foo]61 62// IMAGE_REL_ARM64_REL2163adr x0, foo + 0x1234564 65// IMAGE_REL_ARM64_BRANCH1966bne target67 68// IMAGE_REL_ARM64_BRANCH1469tbz x0, #0, target70 71.section .rdata, "dr"72.Ltable:73.word .Linfo_bar - .Ltable74.word .Linfo_foo - .Ltable75 76// As an extension, we allow 64-bit label differences. They lower to77// IMAGE_REL_ARM64_REL32 because IMAGE_REL_ARM64_REL64 does not exist.78.xword .Linfo_foo - .Ltable79 80// CHECK-ARM64: Format: COFF-ARM6481// CHECK-ARM64EC: Format: COFF-ARM64EC82// CHECK-ARM64: Arch: aarch6483// CHECK-ARM64EC: Arch: aarch6484// CHECK: AddressSize: 64bit85// CHECK: Relocations [86// CHECK: Section (1) .text {87// CHECK: 0x4 IMAGE_REL_ARM64_ADDR32 foo88// CHECK: 0x8 IMAGE_REL_ARM64_ADDR32NB func89// CHECK: 0xC IMAGE_REL_ARM64_ADDR64 arr90// CHECK: 0x14 IMAGE_REL_ARM64_BRANCH26 target91// CHECK: 0x18 IMAGE_REL_ARM64_PAGEBASE_REL21 foo92// CHECK: 0x1C IMAGE_REL_ARM64_PAGEOFFSET_12A foo93// CHECK: 0x20 IMAGE_REL_ARM64_PAGEOFFSET_12L foo94// CHECK: 0x24 IMAGE_REL_ARM64_PAGEBASE_REL21 bar95// CHECK: 0x28 IMAGE_REL_ARM64_SECREL .text96// CHECK: 0x2C IMAGE_REL_ARM64_SECTION func97// CHECK: 0x30 IMAGE_REL_ARM64_PAGEBASE_REL21 baz98// CHECK: 0x34 IMAGE_REL_ARM64_PAGEOFFSET_12A foo99// CHECK: 0x38 IMAGE_REL_ARM64_PAGEOFFSET_12L foo100// CHECK: 0x3C IMAGE_REL_ARM64_PAGEOFFSET_12L foo101// CHECK: 0x40 IMAGE_REL_ARM64_SECREL_LOW12A foo102// CHECK: 0x44 IMAGE_REL_ARM64_SECREL_HIGH12A foo103// CHECK: 0x48 IMAGE_REL_ARM64_SECREL_LOW12L foo104// CHECK: 0x4C IMAGE_REL_ARM64_REL21 foo105// CHECK: 0x50 IMAGE_REL_ARM64_BRANCH19 target106// CHECK: 0x54 IMAGE_REL_ARM64_BRANCH14 target107// CHECK: }108// CHECK: Section (4) .rdata {109// CHECK: 0x0 IMAGE_REL_ARM64_REL32 .text110// CHECK: 0x4 IMAGE_REL_ARM64_REL32 .text111// CHECK: 0x8 IMAGE_REL_ARM64_REL32 .text112// CHECK: }113// CHECK: ]114 115// DISASM: 30: b0091a20 adrp x0, 0x12345000116// DISASM: 34: 910d1400 add x0, x0, #837117// DISASM: 38: 394d1400 ldrb w0, [x0, #837]118// DISASM: 3c: f941a400 ldr x0, [x0, #840]119// DISASM: 40: 91000000 add x0, x0, #0120// DISASM: 44: 91400000 add x0, x0, #0, lsl #12121// DISASM: 48: f9400000 ldr x0, [x0]122// DISASM: 4c: 30091a20 adr x0, 0x12391123 124// DATA: Contents of section .rdata:125// DATA-NEXT: 0000 30000000 08000000126 127.ifdef ERR128# ERR: [[#@LINE+1]]:12: error: invalid variant 'plt'129.long func@plt130.endif131