// RUN: llvm-mc -triple aarch64-windows -filetype obj -o %t.obj %s
// RUN: llvm-rtdyld -triple aarch64-windows -dummy-extern dummy=0x79563413 -dummy-extern dummyA=0x78566879 -target-addr-start=40960000000000 -verify -check %s %t.obj
.text
.def _bnamed
.scl 2
.type 32
.endef
.globl _bnamed
.align 2
_bnamed:
ret
.def _foo
.scl 2
.type 32
.endef
.globl _foo
.align 2
_foo:
movz w0, #0
ret
.globl _test_adr_relocation
.align 2
# IMAGE_REL_ARM64_REL21
# rtdyld-check: decode_operand(adr1, 1) = (_const[20:0] - adr1[20:0])
_test_adr_relocation:
adr1:
adr x0, _const
ret
.globl _test_branch26_reloc
.align 2
# IMAGE_REL_ARM64_BRANCH26, test long branch
# rtdyld-check: decode_operand(brel, 0)[25:0] = (stub_addr(COFF_AArch64.s.tmp.obj/.text, dummy) - brel)[27:2]
_test_branch26_reloc:
brel:
b dummy
ret
.globl _test_branch19_reloc
.align 2
# IMAGE_REL_ARM64_BRANCH19
# rtdyld-check: decode_operand(bcond, 1)[18:0] = (_foo - bcond)[20:2]
_test_branch19_reloc:
mov x0, #3
cmp x0, #2
bcond:
bne _foo
ret
.globl _test_branch14_reloc
.align 2
# IMAGE_REL_ARM64_BRANCH14
# rtdyld-check: decode_operand(tbz_branch, 2)[13:0] = (_bnamed - tbz_branch)[15:2]
_test_branch14_reloc:
mov x1, #0
tbz_branch:
tbz x1, #0, _bnamed
ret
.globl _test_adrp_ldr_reloc
.align 2
# IMAGE_REL_ARM64_PAGEBASE_REL21
# rtdyld-check: decode_operand(adrp1, 1) = (_const[32:12] - adrp1[32:12])
_test_adrp_ldr_reloc:
adrp1:
adrp x0, _const
# IMAGE_REL_ARM64_PAGEOFFSET_12L
# rtdyld-check: decode_operand(ldr1, 2) = _const[11:3]
ldr1:
ldr x0, [x0, #:lo12:_const]
ret
.globl _test_add_reloc
.align 2
# IMAGE_REL_ARM64_PAGEOFFSET_12A
# rtdyld-check: decode_operand(add1, 2) = (tgt+4)[11:0]
_test_add_reloc:
add1:
add x0, x0, tgt@PAGEOFF+4
ret
.section .data
.globl _test_addr64_reloc
.align 2
# IMAGE_REL_ARM64_ADDR64
# rtdyld-check: *{8}addr64 = tgt+4
_test_addr64_reloc:
addr64:
.quad tgt+4
# IMAGE_REL_ARM64_ADDR32
# rtdyld-check: *{4}_test_addr32_reloc = 0x78566879
_test_addr32_reloc:
.long dummyA
.globl _relocations
.align 2
# IMAGE_REL_ARM64_ADDR32NB, RVA of the target
# rtdyld-check: *{4}_relocations = _foo - 40960000000000
_relocations:
.long _foo@IMGREL
# IMAGE_REL_ARM64_ADDR32NB
# rtdyld-check: *{4}imgrel2 = _string - 40960000000000+5
imgrel2:
.long _string@IMGREL+5
# IMAGE_REL_ARM64_SECTION
# rtdyld-check: *{2}secindex = 1
secindex:
.secidx _test_addr32_reloc
# IMAGE_REL_ARM64_SECREL
# rtdyld-check: *{4}secrel = string - section_addr(COFF_AArch64.s.tmp.obj, .data)
secrel:
.secrel32 string
.globl _const
.align 3
_const:
.quad 4614256650576692846
tgt:
.word 1
.word 2
.word 3
.word 4
.word 5
.globl string
.align 2
string:
.asciz "Hello World\n"
.section .rdata,"dr"
.globl _string
.align 2
_string:
.asciz "Hello World\n"