| ; RUN: llvm-mc -n -triple arm64-apple-darwin10 %s -filetype=obj -o - | llvm-readobj -r --expand-relocs | FileCheck %s |
| |
| .text |
| _fred: |
| bl _func |
| bl _func + 20 |
| |
| adrp x3, _data@page |
| ldr w2, [x3, _data@pageoff] |
| |
| add x3, x3, _data@pageoff + 4 |
| |
| adrp x3, _data@page+1 |
| ldr w2, [x3, _data@pageoff + 4] |
| |
| adrp x3, _data_ext@gotpage |
| ldr w2, [x3, _data_ext@gotpageoff] |
| adrp x0, L_.str@PAGE |
| |
| .data |
| _data: |
| .quad _foo |
| .quad _foo + 4 |
| .quad _foo - _bar |
| .quad _foo - _bar + 4 |
| |
| .long _foo - _bar |
| |
| .quad _foo@got |
| .long _foo@got - . |
| |
| .section __TEXT,__cstring,cstring_literals |
| L_.str: |
| .asciz "foo" |
| |
| |
| ; CHECK: Relocations [ |
| ; CHECK-NEXT: Section __text { |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x24 |
| ; CHECK-NEXT: PCRel: 1 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_PAGE21 (3) |
| ; CHECK-NEXT: Symbol: L_.str |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x20 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_GOT_LOAD_PAGEOFF12 (6) |
| ; CHECK-NEXT: Symbol: _data_ext |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x1C |
| ; CHECK-NEXT: PCRel: 1 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_GOT_LOAD_PAGE21 (5) |
| ; CHECK-NEXT: Symbol: _data_ext |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x18 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_ADDEND (10) |
| ; CHECK-NEXT: Section: - (4) |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x18 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_PAGEOFF12 (4) |
| ; CHECK-NEXT: Symbol: _data |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x14 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_ADDEND (10) |
| ; CHECK-NEXT: Section: __text |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x14 |
| ; CHECK-NEXT: PCRel: 1 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_PAGE21 (3) |
| ; CHECK-NEXT: Symbol: _data |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x10 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_ADDEND (10) |
| ; CHECK-NEXT: Section: - (4) |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x10 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_PAGEOFF12 (4) |
| ; CHECK-NEXT: Symbol: _data |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0xC |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_PAGEOFF12 (4) |
| ; CHECK-NEXT: Symbol: _data |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x8 |
| ; CHECK-NEXT: PCRel: 1 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_PAGE21 (3) |
| ; CHECK-NEXT: Symbol: _data |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x4 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_ADDEND (10) |
| ; CHECK-NEXT: Section: - (20) |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x4 |
| ; CHECK-NEXT: PCRel: 1 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_BRANCH26 (2) |
| ; CHECK-NEXT: Symbol: _func |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x0 |
| ; CHECK-NEXT: PCRel: 1 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_BRANCH26 (2) |
| ; CHECK-NEXT: Symbol: _func |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Section __data { |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x2C |
| ; CHECK-NEXT: PCRel: 1 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_POINTER_TO_GOT (7) |
| ; CHECK-NEXT: Symbol: _foo |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x24 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 3 |
| ; CHECK-NEXT: Type: ARM64_RELOC_POINTER_TO_GOT (7) |
| ; CHECK-NEXT: Symbol: _foo |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x20 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_SUBTRACTOR (1) |
| ; CHECK-NEXT: Symbol: _bar |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x20 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 2 |
| ; CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0) |
| ; CHECK-NEXT: Symbol: _foo |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x18 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 3 |
| ; CHECK-NEXT: Type: ARM64_RELOC_SUBTRACTOR (1) |
| ; CHECK-NEXT: Symbol: _bar |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x18 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 3 |
| ; CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0) |
| ; CHECK-NEXT: Symbol: _foo |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x10 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 3 |
| ; CHECK-NEXT: Type: ARM64_RELOC_SUBTRACTOR (1) |
| ; CHECK-NEXT: Symbol: _bar |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x10 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 3 |
| ; CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0) |
| ; CHECK-NEXT: Symbol: _foo |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x8 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 3 |
| ; CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0) |
| ; CHECK-NEXT: Symbol: _foo |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: Relocation { |
| ; CHECK-NEXT: Offset: 0x0 |
| ; CHECK-NEXT: PCRel: 0 |
| ; CHECK-NEXT: Length: 3 |
| ; CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0) |
| ; CHECK-NEXT: Symbol: _foo |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: } |
| ; CHECK-NEXT: ] |