[LLD][COFF] Align EC code ranges to page boundaries (#168222) · llvm/llvm-project@292dc2b (original) (raw)
`@@ -7,6 +7,7 @@ RUN: llvm-mc -filetype=obj -triple=arm64ec-windows arm64ec-func-sym2.s -o arm64e
`
7
7
`RUN: llvm-mc -filetype=obj -triple=arm64ec-windows data-sec.s -o data-sec.obj
`
8
8
`RUN: llvm-mc -filetype=obj -triple=arm64ec-windows data-sec2.s -o data-sec2.obj
`
9
9
`RUN: llvm-mc -filetype=obj -triple=arm64ec-windows empty-sec.s -o arm64ec-empty-sec.obj
`
``
10
`+
RUN: llvm-mc -filetype=obj -triple=arm64ec-windows entry-thunk.s -o entry-thunk.obj
`
10
11
`RUN: llvm-mc -filetype=obj -triple=x86_64-windows x86_64-func-sym.s -o x86_64-func-sym.obj
`
11
12
`RUN: llvm-mc -filetype=obj -triple=x86_64-windows empty-sec.s -o x86_64-empty-sec.obj
`
12
13
`RUN: llvm-mc -filetype=obj -triple=aarch64-windows %S/Inputs/loadconfig-arm64.s -o loadconfig-arm64.obj
`
`@@ -162,15 +163,17 @@ RUN: loadconfig-arm64ec.obj -dll -noentry -merge:test=.testdata -merge:
`
162
163
``
163
164
`RUN: llvm-readobj --coff-load-config testcm.dll | FileCheck -check-prefix=CODEMAPCM %s
`
164
165
`CODEMAPCM: CodeMap [
`
165
``
`-
CODEMAPCM-NEXT: 0x4008 - 0x4016 X64
`
``
166
`+
CODEMAPCM-NEXT: 0x4000 - 0x4016 X64
`
166
167
`CODEMAPCM-NEXT: ]
`
167
168
``
168
169
`RUN: llvm-objdump -d testcm.dll | FileCheck -check-prefix=DISASMCM %s
`
169
170
`DISASMCM: Disassembly of section .testdat:
`
170
171
`DISASMCM-EMPTY:
`
171
172
`DISASMCM-NEXT: 0000000180004000 <.testdat>:
`
172
``
`-
DISASMCM-NEXT: 180004000: 00000001 udf #0x1
`
173
``
`-
DISASMCM-NEXT: 180004004: 00000000 udf #0x0
`
``
173
`+
DISASMCM-NEXT: 180004000: 01 00 addl %eax, (%rax)
`
``
174
`+
DISASMCM-NEXT: 180004002: 00 00 addb %al, (%rax)
`
``
175
`+
DISASMCM-NEXT: 180004004: 00 00 addb %al, (%rax)
`
``
176
`+
DISASMCM-NEXT: 180004006: 00 00 addb %al, (%rax)
`
174
177
`DISASMCM-NEXT: 180004008: b8 03 00 00 00 movl $0x3, %eax
`
175
178
`DISASMCM-NEXT: 18000400d: c3 retq
`
176
179
`DISASMCM-NEXT: 18000400e: 00 00 addb %al, (%rax)
`
`@@ -207,6 +210,14 @@ DISASMMS-NEXT: 0000000180006000 :
`
207
210
`DISASMMS-NEXT: 180006000: 528000a0 mov w0, #0x5 // =5
`
208
211
`DISASMMS-NEXT: 180006004: d65f03c0 ret
`
209
212
``
``
213
`+
Test the code map that includes an ARM64EC function padded by its entry-thunk offset.
`
``
214
+
``
215
`+
RUN: lld-link -out:testpad.dll -machine:arm64ec entry-thunk.obj loadconfig-arm64ec.obj -dll -noentry -include:func
`
``
216
`+
RUN: llvm-readobj --coff-load-config testpad.dll | FileCheck -check-prefix=CODEMAPPAD %s
`
``
217
`+
CODEMAPPAD: CodeMap [
`
``
218
`+
CODEMAPPAD: 0x1000 - 0x1010 ARM64EC
`
``
219
`+
CODEMAPPAD-NEXT: ]
`
``
220
+
210
221
``
211
222
`#--- arm64-func-sym.s
`
212
223
` .text
`
`@@ -266,3 +277,22 @@ x86_64_func_sym2:
`
266
277
` .section .empty1, "xr"
`
267
278
` .section .empty2, "xr"
`
268
279
` .section .empty3, "xr"
`
``
280
+
``
281
`+
#--- entry-thunk.s
`
``
282
`+
.section .text,"xr",discard,func
`
``
283
`+
.globl func
`
``
284
`+
.p2align 2, 0x0
`
``
285
`+
func:
`
``
286
`+
mov w0, #1
`
``
287
`+
ret
`
``
288
+
``
289
`+
.section .wowthk$aa,"xr",discard,thunk
`
``
290
`+
.globl thunk
`
``
291
`+
.p2align 2
`
``
292
`+
thunk:
`
``
293
`+
ret
`
``
294
+
``
295
`+
.section .hybmp$x,"yi"
`
``
296
`+
.symidx func
`
``
297
`+
.symidx thunk
`
``
298
`+
.word 1 // entry thunk
`