1# REQUIRES: aarch64
2
3# RUN: yaml2obj < %s > %t.obj
4# RUN: llvm-objdump -d %t.obj | FileCheck %s --check-prefix BEFORE
5# RUN: lld-link /entry:main /subsystem:console /out:%t.exe %t.obj %p/Inputs/library-arm64.lib
6# RUN: llvm-objdump -d %t.exe | FileCheck %s --check-prefix AFTER
7
8# BEFORE: Disassembly of section .text:
9# BEFORE-EMPTY:
10# BEFORE:        0:       fe 0f 1f f8     str     x30, [sp, #-16]!
11# BEFORE:        4:       00 00 00 90     adrp    x0, #0
12# BEFORE:        8:       00 08 00 91     add     x0, x0, #2
13# BEFORE:        c:       00 00 00 94     bl      0xc
14# BEFORE:       10:       00 01 40 39     ldrb    w0, [x8]
15# BEFORE:       14:       00 01 40 79     ldrh    w0, [x8]
16# BEFORE:       18:       00 01 40 b9     ldr     w0, [x8]
17# BEFORE:       1c:       00 01 40 f9     ldr     x0, [x8]
18# BEFORE:       20:       00 01 00 39     strb    w0, [x8]
19# BEFORE:       24:       00 01 00 79     strh    w0, [x8]
20# BEFORE:       28:       00 01 00 b9     str     w0, [x8]
21# BEFORE:       2c:       00 01 00 f9     str     x0, [x8]
22# BEFORE:       30:       00 01 40 3d     ldr     b0, [x8]
23# BEFORE:       34:       00 01 40 7d     ldr     h0, [x8]
24# BEFORE:       38:       00 01 40 bd     ldr     s0, [x8]
25# BEFORE:       3c:       00 01 40 fd     ldr     d0, [x8]
26# BEFORE:       40:       00 01 c0 3d     ldr     q0, [x8]
27# BEFORE:       44:       00 01 00 3d     str     b0, [x8]
28# BEFORE:       48:       00 01 00 7d     str     h0, [x8]
29# BEFORE:       4c:       00 01 00 bd     str     s0, [x8]
30# BEFORE:       50:       00 01 00 fd     str     d0, [x8]
31# BEFORE:       54:       00 01 80 3d     str     q0, [x8]
32# BEFORE:       58:       00 05 40 f9     ldr     x0, [x8, #8]
33# BEFORE:       5c:       20 1a 01 b0     adrp    x0, #36982784
34# BEFORE:       60:       00 fc 4f f9     ldr     x0, [x0, #8184]
35# BEFORE:       64:       e0 03 1f 2a     mov      w0, wzr
36# BEFORE:       68:       fe 07 41 f8     ldr     x30, [sp], #16
37# BEFORE:       6c:       c0 03 5f d6     ret
38# BEFORE:       70:       08 00 00 00     udf #8
39# BEFORE:       74:       00 00 00 00     udf #0
40# BEFORE:       78:       01 00 00 00     udf #1
41# BEFORE:       7c:       01 00 00 00     udf #1
42# BEFORE:       80:       00 00 00 91     add     x0, x0, #0
43# BEFORE:       84:       00 00 40 91     add     x0, x0, #0, lsl #12
44# BEFORE:       88:       00 00 40 f9     ldr     x0, [x0]
45# BEFORE:       8c:       01 00 00 00     udf #1
46# BEFORE:       90:       20 1a 09 30     adr x0, #74565
47# BEFORE:       94:       01 00 00 54     b.ne    0x94
48# BEFORE:       98:       00 00 00 36     tbz     w0, #0, 0x98
49# BEFORE:       9c:       01 00 00 00     udf #1
50
51# AFTER: Disassembly of section .text:
52# AFTER-EMPTY:
53# AFTER:  140001000:      fe 0f 1f f8     str     x30, [sp, #-16]!
54# AFTER:  140001004:      00 00 00 b0     adrp    x0, #4096
55# AFTER:  140001008:      00 18 00 91     add     x0, x0, #6
56# AFTER:  14000100c:      25 00 00 94     bl      0x1400010a0
57# AFTER:  140001010:      00 21 40 39     ldrb    w0, [x8, #8]
58# AFTER:  140001014:      00 11 40 79     ldrh    w0, [x8, #8]
59# AFTER:  140001018:      00 09 40 b9     ldr     w0, [x8, #8]
60# AFTER:  14000101c:      00 05 40 f9     ldr     x0, [x8, #8]
61# AFTER:  140001020:      00 21 00 39     strb    w0, [x8, #8]
62# AFTER:  140001024:      00 11 00 79     strh    w0, [x8, #8]
63# AFTER:  140001028:      00 09 00 b9     str     w0, [x8, #8]
64# AFTER:  14000102c:      00 05 00 f9     str     x0, [x8, #8]
65# AFTER:  140001030:      00 41 40 3d     ldr     b0, [x8, #16]
66# AFTER:  140001034:      00 21 40 7d     ldr     h0, [x8, #16]
67# AFTER:  140001038:      00 11 40 bd     ldr     s0, [x8, #16]
68# AFTER:  14000103c:      00 09 40 fd     ldr     d0, [x8, #16]
69# AFTER:  140001040:      00 05 c0 3d     ldr     q0, [x8, #16]
70# AFTER:  140001044:      00 41 00 3d     str     b0, [x8, #16]
71# AFTER:  140001048:      00 21 00 7d     str     h0, [x8, #16]
72# AFTER:  14000104c:      00 11 00 bd     str     s0, [x8, #16]
73# AFTER:  140001050:      00 09 00 fd     str     d0, [x8, #16]
74# AFTER:  140001054:      00 05 80 3d     str     q0, [x8, #16]
75# AFTER:  140001058:      00 09 40 f9     ldr     x0, [x8, #16]
76# AFTER:  14000105c:      00 00 00 f0     adrp    x0, #12288
77# AFTER:  140001060:      00 fc 47 f9     ldr     x0, [x0, #4088]
78# AFTER:  140001064:      e0 03 1f 2a     mov      w0, wzr
79# AFTER:  140001068:      fe 07 41 f8     ldr     x30, [sp], #16
80# AFTER:  14000106c:      c0 03 5f d6     ret
81# AFTER:  140001070:      10 20 00 40     <unknown>
82# AFTER:  140001074:      01 00 00 00     udf #1
83# AFTER:  140001078:      09 20 00 00     udf #8201
84# AFTER:  14000107c:      09 00 00 00     udf #9
85# AFTER:  140001080:      00 20 0e 91     add     x0, x0, #904
86# AFTER:  140001084:      00 04 40 91     add     x0, x0, #1, lsl #12
87# AFTER:  140001088:      00 c4 41 f9     ldr     x0, [x0, #904]
88# AFTER:  14000108c:      03 00 00 00     udf #3
89# AFTER:  140001090:      e0 95 09 30     adr     x0, #78525
90# AFTER:  140001094:      61 00 00 54     b.ne    0x1400010a0
91# AFTER:  140001098:      40 00 00 36     tbz     w0, #0, 0x1400010a0
92# AFTER:  14000109c:      61 ff ff ff     <unknown>
93# AFTER:  1400010a0:      10 00 00 b0     adrp    x16, #4096
94# AFTER:  1400010a4:      10 2a 40 f9     ldr     x16, [x16, #80]
95# AFTER:  1400010a8:      00 02 1f d6     br      x16
96
97--- !COFF
98header:
99  Machine:         IMAGE_FILE_MACHINE_ARM64
100  Characteristics: [  ]
101sections:
102  - Name:            .text
103    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
104    Alignment:       4
105    SectionData:     FE0F1FF80000009000080091000000940001403900014079000140B9000140F90001003900010079000100B9000100F90001403D0001407D000140BD000140FD0001C03D0001003D0001007D000100BD000100FD0001803D000540F9201A01B000FC4FF9E0031F2AFE0741F8C0035FD6080000000000000001000000010000000000009100004091000040f901000000201a0930010000540000003601000000
106    Relocations:
107      - VirtualAddress:  4
108        SymbolName:      .Lstr
109        Type:            IMAGE_REL_ARM64_PAGEBASE_REL21
110      - VirtualAddress:  8
111        SymbolName:      .Lstr
112        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12A
113      - VirtualAddress:  12
114        SymbolName:      function
115        Type:            IMAGE_REL_ARM64_BRANCH26
116      - VirtualAddress:  16
117        SymbolName:      .Lglobal
118        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
119      - VirtualAddress:  20
120        SymbolName:      .Lglobal
121        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
122      - VirtualAddress:  24
123        SymbolName:      .Lglobal
124        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
125      - VirtualAddress:  28
126        SymbolName:      .Lglobal
127        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
128      - VirtualAddress:  32
129        SymbolName:      .Lglobal
130        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
131      - VirtualAddress:  36
132        SymbolName:      .Lglobal
133        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
134      - VirtualAddress:  40
135        SymbolName:      .Lglobal
136        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
137      - VirtualAddress:  44
138        SymbolName:      .Lglobal
139        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
140      - VirtualAddress:  48
141        SymbolName:      .Lglobal16
142        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
143      - VirtualAddress:  52
144        SymbolName:      .Lglobal16
145        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
146      - VirtualAddress:  56
147        SymbolName:      .Lglobal16
148        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
149      - VirtualAddress:  60
150        SymbolName:      .Lglobal16
151        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
152      - VirtualAddress:  64
153        SymbolName:      .Lglobal16
154        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
155      - VirtualAddress:  68
156        SymbolName:      .Lglobal16
157        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
158      - VirtualAddress:  72
159        SymbolName:      .Lglobal16
160        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
161      - VirtualAddress:  76
162        SymbolName:      .Lglobal16
163        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
164      - VirtualAddress:  80
165        SymbolName:      .Lglobal16
166        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
167      - VirtualAddress:  84
168        SymbolName:      .Lglobal16
169        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
170      - VirtualAddress:  88
171        SymbolName:      .Lglobal
172        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
173      - VirtualAddress:  92
174        SymbolName:      .Lglobal16
175        Type:            IMAGE_REL_ARM64_PAGEBASE_REL21
176      - VirtualAddress:  96
177        SymbolName:      .Lglobal0
178        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
179      - VirtualAddress:  112
180        SymbolName:      .Lglobal
181        Type:            IMAGE_REL_ARM64_ADDR64
182      - VirtualAddress:  120
183        SymbolName:      .Lglobal
184        Type:            IMAGE_REL_ARM64_ADDR32NB
185      - VirtualAddress:  124
186        SymbolName:      .Lglobal
187        Type:            IMAGE_REL_ARM64_SECREL
188      - VirtualAddress:  128
189        SymbolName:      .Lglobal5000
190        Type:            IMAGE_REL_ARM64_SECREL_LOW12A
191      - VirtualAddress:  132
192        SymbolName:      .Lglobal5000
193        Type:            IMAGE_REL_ARM64_SECREL_HIGH12A
194      - VirtualAddress:  136
195        SymbolName:      .Lglobal5000
196        Type:            IMAGE_REL_ARM64_SECREL_LOW12L
197      - VirtualAddress:  140
198        SymbolName:      .Lglobal
199        Type:            IMAGE_REL_ARM64_SECTION
200      - VirtualAddress:  144
201        SymbolName:      .Lglobal
202        Type:            IMAGE_REL_ARM64_REL21
203      - VirtualAddress:  148
204        SymbolName:      function
205        Type:            IMAGE_REL_ARM64_BRANCH19
206      - VirtualAddress:  152
207        SymbolName:      function
208        Type:            IMAGE_REL_ARM64_BRANCH14
209      - VirtualAddress:  156
210        SymbolName:      main
211        Type:            IMAGE_REL_ARM64_REL32
212  - Name:            .data
213    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
214    Alignment:       4
215    SectionData:     ''
216  - Name:            .bss
217    Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
218    Alignment:       4
219    SectionData:     ''
220  - Name:            .rdata
221    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
222    Alignment:       1
223    SectionData:     00000000202068656C6C6F20776F726C6400
224symbols:
225  - Name:            .text
226    Value:           0
227    SectionNumber:   1
228    SimpleType:      IMAGE_SYM_TYPE_NULL
229    ComplexType:     IMAGE_SYM_DTYPE_NULL
230    StorageClass:    IMAGE_SYM_CLASS_STATIC
231    SectionDefinition:
232      Length:          28
233      NumberOfRelocations: 3
234      NumberOfLinenumbers: 0
235      CheckSum:        1438860354
236      Number:          1
237  - Name:            .rdata
238    Value:           0
239    SectionNumber:   4
240    SimpleType:      IMAGE_SYM_TYPE_NULL
241    ComplexType:     IMAGE_SYM_DTYPE_NULL
242    StorageClass:    IMAGE_SYM_CLASS_STATIC
243    SectionDefinition:
244      Length:          12
245      NumberOfRelocations: 0
246      NumberOfLinenumbers: 0
247      CheckSum:        872944732
248      Number:          4
249  - Name:            main
250    Value:           0
251    SectionNumber:   1
252    SimpleType:      IMAGE_SYM_TYPE_NULL
253    ComplexType:     IMAGE_SYM_DTYPE_NULL
254    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
255  - Name:            .Lstr
256    Value:           4
257    SectionNumber:   4
258    SimpleType:      IMAGE_SYM_TYPE_NULL
259    ComplexType:     IMAGE_SYM_DTYPE_NULL
260    StorageClass:    IMAGE_SYM_CLASS_STATIC
261  - Name:            .Lglobal
262    Value:           8
263    SectionNumber:   4
264    SimpleType:      IMAGE_SYM_TYPE_NULL
265    ComplexType:     IMAGE_SYM_DTYPE_NULL
266    StorageClass:    IMAGE_SYM_CLASS_STATIC
267  - Name:            .Lglobal16
268    Value:           16
269    SectionNumber:   4
270    SimpleType:      IMAGE_SYM_TYPE_NULL
271    ComplexType:     IMAGE_SYM_DTYPE_NULL
272    StorageClass:    IMAGE_SYM_CLASS_STATIC
273  - Name:            .Lglobal0
274    Value:           0
275    SectionNumber:   4
276    SimpleType:      IMAGE_SYM_TYPE_NULL
277    ComplexType:     IMAGE_SYM_DTYPE_NULL
278    StorageClass:    IMAGE_SYM_CLASS_STATIC
279  - Name:            function
280    Value:           0
281    SectionNumber:   0
282    SimpleType:      IMAGE_SYM_TYPE_NULL
283    ComplexType:     IMAGE_SYM_DTYPE_NULL
284    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
285  - Name:            .Lglobal5000
286    Value:           5000
287    SectionNumber:   4
288    SimpleType:      IMAGE_SYM_TYPE_NULL
289    ComplexType:     IMAGE_SYM_DTYPE_NULL
290    StorageClass:    IMAGE_SYM_CLASS_STATIC
291...
292