Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llvm-mc -n -triple arm64-apple-darwin10 %s -filetype=obj -o - | llvm-readobj -r --expand-relocs | FileCheck %s
      2 
      3 	.text
      4 _fred:
      5 	bl	_func
      6 	bl	_func + 20
      7 
      8 	adrp	x3, _data@page
      9         ldr	w2, [x3, _data@pageoff]
     10 
     11         add	x3, x3, _data@pageoff + 4
     12 
     13 	adrp	x3, _data@page+1
     14         ldr	w2, [x3, _data@pageoff + 4]
     15 
     16 	adrp	x3, _data_ext@gotpage
     17         ldr	w2, [x3, _data_ext@gotpageoff]
     18         adrp    x0, L_.str@PAGE
     19 
     20 	.data
     21 _data:
     22         .quad _foo
     23         .quad _foo + 4
     24         .quad _foo - _bar
     25         .quad _foo - _bar + 4
     26 
     27         .long _foo - _bar
     28 
     29         .quad _foo@got
     30         .long _foo@got - .
     31 
     32         .section __TEXT,__cstring,cstring_literals
     33 L_.str:
     34         .asciz "foo"
     35 
     36 
     37 ; CHECK:     Relocations [
     38 ; CHECK-NEXT:  Section __text {
     39 ; CHECK-NEXT:    Relocation {
     40 ; CHECK-NEXT:       Offset: 0x24
     41 ; CHECK-NEXT:       PCRel: 1
     42 ; CHECK-NEXT:       Length: 2
     43 ; CHECK-NEXT:       Type: ARM64_RELOC_PAGE21 (3)
     44 ; CHECK-NEXT:       Symbol: L_.str
     45 ; CHECK-NEXT:     }
     46 ; CHECK-NEXT:    Relocation {
     47 ; CHECK-NEXT:       Offset: 0x20
     48 ; CHECK-NEXT:       PCRel: 0
     49 ; CHECK-NEXT:       Length: 2
     50 ; CHECK-NEXT:       Type: ARM64_RELOC_GOT_LOAD_PAGEOFF12 (6)
     51 ; CHECK-NEXT:       Symbol: _data_ext
     52 ; CHECK-NEXT:     }
     53 ; CHECK-NEXT:     Relocation {
     54 ; CHECK-NEXT:       Offset: 0x1C
     55 ; CHECK-NEXT:       PCRel: 1
     56 ; CHECK-NEXT:       Length: 2
     57 ; CHECK-NEXT:       Type: ARM64_RELOC_GOT_LOAD_PAGE21 (5)
     58 ; CHECK-NEXT:       Symbol: _data_ext
     59 ; CHECK-NEXT:     }
     60 ; CHECK-NEXT:     Relocation {
     61 ; CHECK-NEXT:       Offset: 0x18
     62 ; CHECK-NEXT:       PCRel: 0
     63 ; CHECK-NEXT:       Length: 2
     64 ; CHECK-NEXT:       Type: ARM64_RELOC_ADDEND (10)
     65 ; CHECK-NEXT:       Section: - (4)
     66 ; CHECK-NEXT:     }
     67 ; CHECK-NEXT:     Relocation {
     68 ; CHECK-NEXT:       Offset: 0x18
     69 ; CHECK-NEXT:       PCRel: 0
     70 ; CHECK-NEXT:       Length: 2
     71 ; CHECK-NEXT:       Type: ARM64_RELOC_PAGEOFF12 (4)
     72 ; CHECK-NEXT:       Symbol: _data
     73 ; CHECK-NEXT:     }
     74 ; CHECK-NEXT:     Relocation {
     75 ; CHECK-NEXT:       Offset: 0x14
     76 ; CHECK-NEXT:       PCRel: 0
     77 ; CHECK-NEXT:       Length: 2
     78 ; CHECK-NEXT:       Type: ARM64_RELOC_ADDEND (10)
     79 ; CHECK-NEXT:       Section: __text
     80 ; CHECK-NEXT:     }
     81 ; CHECK-NEXT:     Relocation {
     82 ; CHECK-NEXT:       Offset: 0x14
     83 ; CHECK-NEXT:       PCRel: 1
     84 ; CHECK-NEXT:       Length: 2
     85 ; CHECK-NEXT:       Type: ARM64_RELOC_PAGE21 (3)
     86 ; CHECK-NEXT:       Symbol: _data
     87 ; CHECK-NEXT:     }
     88 ; CHECK-NEXT:     Relocation {
     89 ; CHECK-NEXT:       Offset: 0x10
     90 ; CHECK-NEXT:       PCRel: 0
     91 ; CHECK-NEXT:       Length: 2
     92 ; CHECK-NEXT:       Type: ARM64_RELOC_ADDEND (10)
     93 ; CHECK-NEXT:       Section: - (4)
     94 ; CHECK-NEXT:     }
     95 ; CHECK-NEXT:     Relocation {
     96 ; CHECK-NEXT:       Offset: 0x10
     97 ; CHECK-NEXT:       PCRel: 0
     98 ; CHECK-NEXT:       Length: 2
     99 ; CHECK-NEXT:       Type: ARM64_RELOC_PAGEOFF12 (4)
    100 ; CHECK-NEXT:       Symbol: _data
    101 ; CHECK-NEXT:     }
    102 ; CHECK-NEXT:     Relocation {
    103 ; CHECK-NEXT:       Offset: 0xC
    104 ; CHECK-NEXT:       PCRel: 0
    105 ; CHECK-NEXT:       Length: 2
    106 ; CHECK-NEXT:       Type: ARM64_RELOC_PAGEOFF12 (4)
    107 ; CHECK-NEXT:       Symbol: _data
    108 ; CHECK-NEXT:     }
    109 ; CHECK-NEXT:     Relocation {
    110 ; CHECK-NEXT:       Offset: 0x8
    111 ; CHECK-NEXT:       PCRel: 1
    112 ; CHECK-NEXT:       Length: 2
    113 ; CHECK-NEXT:       Type: ARM64_RELOC_PAGE21 (3)
    114 ; CHECK-NEXT:       Symbol: _data
    115 ; CHECK-NEXT:     }
    116 ; CHECK-NEXT:     Relocation {
    117 ; CHECK-NEXT:       Offset: 0x4
    118 ; CHECK-NEXT:       PCRel: 0
    119 ; CHECK-NEXT:       Length: 2
    120 ; CHECK-NEXT:       Type: ARM64_RELOC_ADDEND (10)
    121 ; CHECK-NEXT:       Section: - (20)
    122 ; CHECK-NEXT:     }
    123 ; CHECK-NEXT:     Relocation {
    124 ; CHECK-NEXT:       Offset: 0x4
    125 ; CHECK-NEXT:       PCRel: 1
    126 ; CHECK-NEXT:       Length: 2
    127 ; CHECK-NEXT:       Type: ARM64_RELOC_BRANCH26 (2)
    128 ; CHECK-NEXT:       Symbol: _func
    129 ; CHECK-NEXT:     }
    130 ; CHECK-NEXT:     Relocation {
    131 ; CHECK-NEXT:       Offset: 0x0
    132 ; CHECK-NEXT:       PCRel: 1
    133 ; CHECK-NEXT:       Length: 2
    134 ; CHECK-NEXT:       Type: ARM64_RELOC_BRANCH26 (2)
    135 ; CHECK-NEXT:       Symbol: _func
    136 ; CHECK-NEXT:     }
    137 ; CHECK-NEXT:   }
    138 ; CHECK-NEXT:   Section __data {
    139 ; CHECK-NEXT:     Relocation {
    140 ; CHECK-NEXT:       Offset: 0x2C
    141 ; CHECK-NEXT:       PCRel: 1
    142 ; CHECK-NEXT:       Length: 2
    143 ; CHECK-NEXT:       Type: ARM64_RELOC_POINTER_TO_GOT (7)
    144 ; CHECK-NEXT:       Symbol: _foo
    145 ; CHECK-NEXT:     }
    146 ; CHECK-NEXT:     Relocation {
    147 ; CHECK-NEXT:       Offset: 0x24
    148 ; CHECK-NEXT:       PCRel: 0
    149 ; CHECK-NEXT:       Length: 3
    150 ; CHECK-NEXT:       Type: ARM64_RELOC_POINTER_TO_GOT (7)
    151 ; CHECK-NEXT:       Symbol: _foo
    152 ; CHECK-NEXT:     }
    153 ; CHECK-NEXT:     Relocation {
    154 ; CHECK-NEXT:       Offset: 0x20
    155 ; CHECK-NEXT:       PCRel: 0
    156 ; CHECK-NEXT:       Length: 2
    157 ; CHECK-NEXT:       Type: ARM64_RELOC_SUBTRACTOR (1)
    158 ; CHECK-NEXT:       Symbol: _bar
    159 ; CHECK-NEXT:     }
    160 ; CHECK-NEXT:     Relocation {
    161 ; CHECK-NEXT:       Offset: 0x20
    162 ; CHECK-NEXT:       PCRel: 0
    163 ; CHECK-NEXT:       Length: 2
    164 ; CHECK-NEXT:       Type: ARM64_RELOC_UNSIGNED (0)
    165 ; CHECK-NEXT:       Symbol: _foo
    166 ; CHECK-NEXT:     }
    167 ; CHECK-NEXT:     Relocation {
    168 ; CHECK-NEXT:       Offset: 0x18
    169 ; CHECK-NEXT:       PCRel: 0
    170 ; CHECK-NEXT:       Length: 3
    171 ; CHECK-NEXT:       Type: ARM64_RELOC_SUBTRACTOR (1)
    172 ; CHECK-NEXT:       Symbol: _bar
    173 ; CHECK-NEXT:     }
    174 ; CHECK-NEXT:     Relocation {
    175 ; CHECK-NEXT:       Offset: 0x18
    176 ; CHECK-NEXT:       PCRel: 0
    177 ; CHECK-NEXT:       Length: 3
    178 ; CHECK-NEXT:       Type: ARM64_RELOC_UNSIGNED (0)
    179 ; CHECK-NEXT:       Symbol: _foo
    180 ; CHECK-NEXT:     }
    181 ; CHECK-NEXT:     Relocation {
    182 ; CHECK-NEXT:       Offset: 0x10
    183 ; CHECK-NEXT:       PCRel: 0
    184 ; CHECK-NEXT:       Length: 3
    185 ; CHECK-NEXT:       Type: ARM64_RELOC_SUBTRACTOR (1)
    186 ; CHECK-NEXT:       Symbol: _bar
    187 ; CHECK-NEXT:     }
    188 ; CHECK-NEXT:     Relocation {
    189 ; CHECK-NEXT:       Offset: 0x10
    190 ; CHECK-NEXT:       PCRel: 0
    191 ; CHECK-NEXT:       Length: 3
    192 ; CHECK-NEXT:       Type: ARM64_RELOC_UNSIGNED (0)
    193 ; CHECK-NEXT:       Symbol: _foo
    194 ; CHECK-NEXT:     }
    195 ; CHECK-NEXT:     Relocation {
    196 ; CHECK-NEXT:       Offset: 0x8
    197 ; CHECK-NEXT:       PCRel: 0
    198 ; CHECK-NEXT:       Length: 3
    199 ; CHECK-NEXT:       Type: ARM64_RELOC_UNSIGNED (0)
    200 ; CHECK-NEXT:       Symbol: _foo
    201 ; CHECK-NEXT:     }
    202 ; CHECK-NEXT:     Relocation {
    203 ; CHECK-NEXT:       Offset: 0x0
    204 ; CHECK-NEXT:       PCRel: 0
    205 ; CHECK-NEXT:       Length: 3
    206 ; CHECK-NEXT:       Type: ARM64_RELOC_UNSIGNED (0)
    207 ; CHECK-NEXT:       Symbol: _foo
    208 ; CHECK-NEXT:     }
    209 ; CHECK-NEXT:   }
    210 ; CHECK-NEXT: ]
    211