| // 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" |