1 # RUN: llvm-mc -triple=arm64-apple-ios7.0.0 -code-model=small -relocation-model=pic -filetype=obj -o %T/foo.o %s
2 # RUN: llvm-rtdyld -triple=arm64-apple-ios7.0.0 -verify -check=%s %/T/foo.o
4 .section __TEXT,__text,regular,pure_instructions
12 .globl _test_branch_reloc
16 # Test ARM64_RELOC_BRANCH26 relocation. The branch instruction only encodes 26
17 # bits of the 28-bit possible branch range. The lower two bits are always zero
18 # and therefore ignored.
19 # rtdyld-check: decode_operand(br1, 0)[25:0] = (_foo - br1)[27:2]
26 # Test ARM64_RELOC_PAGE21 and ARM64_RELOC_PAGEOFF12 relocation. adrp encodes
27 # the PC-relative page (4 KiB) difference between the adrp instruction and the
28 # variable ptr. ldr encodes the offset of the variable within the page. The ldr
29 # instruction perfroms an implicit shift on the encoded immediate (imm<<3).
30 # rtdyld-check: decode_operand(adrp1, 1) = (_ptr[32:12] - adrp1[32:12])
31 # rtdyld-check: decode_operand(ldr1, 2) = _ptr[11:3]
38 ldr x0, [x0, _ptr@PAGEOFF]
41 # Test ARM64_RELOC_GOT_LOAD_PAGE21 and ARM64_RELOC_GOT_LOAD_PAGEOFF12
42 # relocation. adrp encodes the PC-relative page (4 KiB) difference between the
43 # adrp instruction and the GOT entry for ptr. ldr encodes the offset of the GOT
44 # entry within the page. The ldr instruction perfroms an implicit shift on the
45 # encoded immediate (imm<<3).
46 # rtdyld-check: *{8}(stub_addr(foo.o, __text, _ptr)) = _ptr
47 # rtdyld-check: decode_operand(adrp2, 1) = (stub_addr(foo.o, __text, _ptr)[32:12] - adrp2[32:12])
48 # rtdyld-check: decode_operand(ldr2, 2) = stub_addr(foo.o, __text, _ptr)[11:3]
55 ldr x0, [x0, _ptr@GOTPAGEOFF]
59 # Test ARM64_RELOC_UNSIGNED relocation. The absolute 64-bit address of the
60 # function should be stored at the 8-byte memory location.
61 # rtdyld-check: *{8}_ptr = _foo
62 .section __DATA,__data