153 lines
2.8 KiB
ArmAsm
153 lines
2.8 KiB
ArmAsm
|
// 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"
|