llvm/llvm/test/ExecutionEngine/RuntimeDyld/AArch64/COFF_AArch64.s

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