Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / lld / test / COFF / arm64ec-codemap.test
blob84b40536ee51efabda368127d77403cfd8e9993a
1 REQUIRES: aarch64, x86
2 RUN: split-file %s %t.dir && cd %t.dir
4 RUN: llvm-mc -filetype=obj -triple=arm64-windows arm64-func-sym.s -o arm64-func-sym.obj
5 RUN: llvm-mc -filetype=obj -triple=arm64ec-windows arm64ec-func-sym.s -o arm64ec-func-sym.obj
6 RUN: llvm-mc -filetype=obj -triple=arm64ec-windows data-sec.s -o data-sec.obj
7 RUN: llvm-mc -filetype=obj -triple=x86_64-windows x86_64-func-sym.s -o x86_64-func-sym.obj
8 RUN: llvm-mc -filetype=obj -triple=arm64ec-windows codemap.s -o codemap.obj
9 RUN: llvm-mc -filetype=obj -triple=arm64ec-windows codemap2.s -o codemap2.obj
10 RUN: llvm-mc -filetype=obj -triple=arm64ec-windows codemap3.s -o codemap3.obj
11 RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj
13 Link ARM64EC DLL and verify that the code is arranged as expected.
15 RUN: lld-link -out:test.dll -machine:arm64ec arm64ec-func-sym.obj x86_64-func-sym.obj \
16 RUN:          codemap.obj loadconfig-arm64ec.obj -dll -noentry
18 RUN: llvm-readobj --coff-load-config test.dll | FileCheck -check-prefix=CODEMAP %s
19 CODEMAP:       CodeMap [
20 CODEMAP-NEXT:    0x1000 - 0x1008  ARM64EC
21 CODEMAP-NEXT:    0x2000 - 0x2006  X64
22 CODEMAP-NEXT:    0x5000 - 0x5008  ARM64EC
23 CODEMAP-NEXT:    0x6000 - 0x6006  X64
24 CODEMAP-NEXT:  ]
26 RUN: llvm-objdump -d test.dll | FileCheck -check-prefix=DISASM %s
27 DISASM:      Disassembly of section .text:
28 DISASM-EMPTY:
29 DISASM-NEXT: 0000000180001000 <.text>:
30 DISASM-NEXT: 180001000: 52800040     mov     w0, #0x2
31 DISASM-NEXT: 180001004: d65f03c0     ret
32 DISASM-NEXT:                 ...
33 DISASM-NEXT: 180002000: b8 03 00 00 00               movl    $0x3, %eax
34 DISASM-NEXT: 180002005: c3                           retq
35 DISASM-EMPTY:
36 DISASM-NEXT: Disassembly of section test:
37 DISASM-EMPTY:
38 DISASM-NEXT: 0000000180005000 <test>:
39 DISASM-NEXT: 180005000: 528000a0     mov     w0, #0x5
40 DISASM-NEXT: 180005004: d65f03c0     ret
41 DISASM-NEXT:                 ...
42 DISASM-NEXT: 180006000: b8 06 00 00 00               movl    $0x6, %eax
43 DISASM-NEXT: 180006005: c3                           retq
45 Order of arguments doesn't matter in this case, chunks are sorted by target type anyway.
47 RUN: lld-link -out:test2.dll -machine:arm64ec x86_64-func-sym.obj arm64ec-func-sym.obj \
48 RUN:          codemap.obj loadconfig-arm64ec.obj -dll -noentry
49 RUN: llvm-readobj --coff-load-config test2.dll | FileCheck -check-prefix=CODEMAP %s
50 RUN: llvm-objdump -d test2.dll | FileCheck -check-prefix=DISASM %s
52 RUN: lld-link -out:testx.dll -machine:arm64x arm64-func-sym.obj arm64ec-func-sym.obj \
53 RUN:          x86_64-func-sym.obj codemap2.obj loadconfig-arm64ec.obj -dll -noentry
55 Do the same with ARM64X target.
57 RUN: llvm-readobj --coff-load-config testx.dll | FileCheck -check-prefix=CODEMAPX %s
58 CODEMAPX:       CodeMap [
59 CODEMAPX-NEXT:    0x1000 - 0x1008  ARM64
60 CODEMAPX-NEXT:    0x2000 - 0x2008  ARM64EC
61 CODEMAPX-NEXT:    0x3000 - 0x3006  X64
62 CODEMAPX-NEXT:    0x6000 - 0x6008  ARM64EC
63 CODEMAPX-NEXT:    0x7000 - 0x7006  X64
64 CODEMAPX-NEXT:  ]
66 RUN: llvm-objdump -d testx.dll | FileCheck -check-prefix=DISASMX %s
67 DISASMX:      Disassembly of section .text:
68 DISASMX-EMPTY:
69 DISASMX-NEXT: 0000000180001000 <.text>:
70 DISASMX-NEXT: 180001000: 528000e0     mov     w0, #0x7
71 DISASMX-NEXT: 180001004: d65f03c0     ret
72 DISASMX-NEXT:                 ...
73 DISASMX-NEXT: 180002000: 52800040     mov     w0, #0x2
74 DISASMX-NEXT: 180002004: d65f03c0     ret
75 DISASMX-NEXT:                 ...
76 DISASMX-NEXT: 180003000: b8 03 00 00 00               movl    $0x3, %eax
77 DISASMX-NEXT: 180003005: c3                           retq
78 DISASMX-EMPTY:
79 DISASMX-NEXT: Disassembly of section test:
80 DISASMX-EMPTY:
81 DISASMX-NEXT: 0000000180006000 <test>:
82 DISASMX-NEXT: 180006000: 528000a0     mov     w0, #0x5
83 DISASMX-NEXT: 180006004: d65f03c0     ret
84 DISASMX-NEXT:                 ...
85 DISASMX-NEXT: 180007000: b8 06 00 00 00               movl    $0x6, %eax
86 DISASMX-NEXT: 180007005: c3                           retq
88 Test merged sections.
90 RUN: lld-link -out:testm.dll -machine:arm64ec arm64ec-func-sym.obj x86_64-func-sym.obj \
91 RUN:          codemap3.obj loadconfig-arm64ec.obj -dll -noentry -merge:test=.text
93 RUN: llvm-readobj --coff-load-config testm.dll | FileCheck -check-prefix=CODEMAPM %s
94 CODEMAPM:      CodeMap [
95 CODEMAPM-NEXT:   0x1000 - 0x1010  ARM64EC
96 CODEMAPM-NEXT:   0x2000 - 0x3004  X64
97 CODEMAPM-NEXT: ]
99 RUN: llvm-objdump -d testm.dll | FileCheck -check-prefix=DISASMM %s
100 DISASMM:      Disassembly of section .text:
101 DISASMM-EMPTY:
102 DISASMM-NEXT: 0000000180001000 <.text>:
103 DISASMM-NEXT: 180001000: 52800040     mov     w0, #0x2
104 DISASMM-NEXT: 180001004: d65f03c0     ret
105 DISASMM-NEXT: 180001008: 528000a0     mov     w0, #0x5
106 DISASMM-NEXT: 18000100c: d65f03c0     ret
107 DISASMM-NEXT:                 ...
108 DISASMM-NEXT: 180002000: b8 03 00 00 00               movl    $0x3, %eax
109 DISASMM-NEXT: 180002005: c3                           retq
110 DISASMM-NEXT:                 ...
111 DISASMM-NEXT: 180002ffe: 00 00                        addb    %al, (%rax)
112 DISASMM-NEXT: 180003000: b8 06 00 00 00               movl    $0x6, %eax
114 Merging data sections into code sections causes data to be separated from the code when sorting chunks.
116 RUN: lld-link -out:testdm.dll -machine:arm64ec arm64ec-func-sym.obj x86_64-func-sym.obj codemap.obj \
117 RUN:          data-sec.obj loadconfig-arm64ec.obj -dll -noentry -merge:.testdata=.text -merge:.rdata=test
119 RUN: llvm-readobj --coff-load-config testdm.dll | FileCheck -check-prefix=CODEMAPDM %s
120 CODEMAPDM:      CodeMap [
121 CODEMAPDM-NEXT:     0x2000 - 0x2008  ARM64EC
122 CODEMAPDM-NEXT:     0x3000 - 0x3006  X64
123 CODEMAPDM-NEXT:     0x5200 - 0x5208  ARM64EC
124 CODEMAPDM-NEXT:     0x6000 - 0x6006  X64
125 CODEMAPDM-NEXT: ]
127 RUN: llvm-objdump -d testdm.dll | FileCheck -check-prefix=DISASMDM %s
128 DISASMDM:      Disassembly of section .text:
129 DISASMDM-EMPTY:
130 DISASMDM-NEXT: 0000000180001000 <.text>:
131 DISASMDM-NEXT: 180001000: 00000001     udf     #0x1
132 DISASMDM-NEXT:                 ...
133 DISASMDM-NEXT: 180002000: 52800040     mov     w0, #0x2
134 DISASMDM-NEXT: 180002004: d65f03c0     ret
135 DISASMDM-NEXT:                 ...
136 DISASMDM-NEXT: 180003000: b8 03 00 00 00               movl    $0x3, %eax
137 DISASMDM-NEXT: 180003005: c3                           retq
138 DISASMDM-EMPTY:
139 DISASMDM-NEXT: Disassembly of section test:
140 DISASMDM-EMPTY:
141 DISASMDM-NEXT: 0000000180005000 <test>:
142 DISASMDM:      180005200: 528000a0     mov     w0, #0x5
143 DISASMDM-NEXT: 180005204: d65f03c0     ret
144 DISASMDM-NEXT:                 ...
145 DISASMDM-NEXT: 180006000: b8 06 00 00 00               movl    $0x6, %eax
146 DISASMDM-NEXT: 180006005: c3                           retq
148 #--- arm64-func-sym.s
149     .text
150     .globl arm64_func_sym
151     .p2align 2, 0x0
152 arm64_func_sym:
153     mov w0, #7
154     ret
156 #--- arm64ec-func-sym.s
157     .text
158     .globl arm64ec_func_sym
159     .p2align 12, 0x0
160 arm64ec_func_sym:
161     mov w0, #2
162     ret
164     .section test, "xr"
165     .globl arm64ec_func_sym2
166     .p2align 2, 0x0
167 arm64ec_func_sym2:
168     mov w0, #5
169     ret
171 #--- x86_64-func-sym.s
172     .text
173     .globl x86_64_func_sym
174     .p2align 12, 0x0
175 x86_64_func_sym:
176     movl $3, %eax
177     retq
179     .section test, "xr"
180     .globl x86_64_func_sym2
181     .p2align 12, 0x0
182 x86_64_func_sym2:
183     movl $6, %eax
184     retq
186 #--- data-sec.s
187     .section .testdata, "rd"
188     .xword 1
190 #--- codemap.s
191     .section .rdata,"dr"
192     .globl code_map
193 code_map:
194     .rva arm64ec_func_sym + 1
195     .word 8
196     .rva x86_64_func_sym + 2
197     .word 6
198     .rva arm64ec_func_sym2 + 1
199     .word 8
200     .rva x86_64_func_sym2 + 2
201     .word 6
203     .globl code_map_count
204 code_map_count = 4
206 #--- codemap2.s
207     .section .rdata,"dr"
208     .globl code_map
209 code_map:
210     .rva arm64_func_sym
211     .word 8
212     .rva arm64ec_func_sym + 1
213     .word 8
214     .rva x86_64_func_sym + 2
215     .word 6
216     .rva arm64ec_func_sym2 + 1
217     .word 8
218     .rva x86_64_func_sym2 + 2
219     .word 6
221     .globl code_map_count
222 code_map_count = 5
224 #--- codemap3.s
225     .section .rdata,"dr"
226     .globl code_map
227 code_map:
228     .rva arm64ec_func_sym + 1
229     .word 16
230     .rva x86_64_func_sym + 2
231     .word 0x1004
233     .globl code_map_count
234 code_map_count = 2