blob: cf59330b2354377e4eb8aef47a8c9030edd25829 [file] [log] [blame]
Jacek Caban72c6ca62023-12-05 10:59:431REQUIRES: aarch64, x86
2RUN: split-file %s %t.dir && cd %t.dir
3
4Test handlign of hybrid .pdata section on ARM64EC target.
5
6RUN: llvm-mc -filetype=obj -triple=arm64-windows arm64-func-sym.s -o arm64-func-sym.obj
7RUN: llvm-mc -filetype=obj -triple=arm64ec-windows arm64ec-func-sym.s -o arm64ec-func-sym.obj
8RUN: llvm-mc -filetype=obj -triple=x86_64-windows x86_64-func-sym.s -o x86_64-func-sym.obj
Jacek Caban659e66e2025-01-21 21:24:009RUN: llvm-mc -filetype=obj -triple=aarch64-windows %S/Inputs/loadconfig-arm64.s -o loadconfig-arm64.obj
Jacek Caban72c6ca62023-12-05 10:59:4310RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %p/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj
11
12Only arm64ec code:
13
14RUN: lld-link -out:test1.dll -machine:arm64ec arm64ec-func-sym.obj loadconfig-arm64ec.obj -dll -noentry
15
16RUN: llvm-readobj --coff-load-config test1.dll | FileCheck -check-prefix=LOADCFG %s
17LOADCFG: ExtraRFETable: 0x4000
18LOADCFG-NEXT: ExtraRFETableSize: 0x8
19
20RUN: llvm-readobj --headers test1.dll | FileCheck -check-prefix=NODIR %s
21NODIR: ExceptionTableSize: 0x0
22
23RUN: llvm-objdump -s --section=.pdata test1.dll | FileCheck -check-prefix=DATA %s
24DATA: 180004000 00100000 11000001
25
26Only x86_64 code:
27
28RUN: lld-link -out:test2.dll -machine:arm64ec x86_64-func-sym.obj loadconfig-arm64ec.obj -dll -noentry
29
30RUN: llvm-readobj --coff-load-config test2.dll | FileCheck -check-prefix=NOLOADCFG %s
31NOLOADCFG: ExtraRFETableSize: 0x0
32
33RUN: llvm-readobj --headers test2.dll | FileCheck -check-prefix=DIR %s
34DIR: ExceptionTableRVA: 0x4000
35DIR-NEXT: ExceptionTableSize: 0xC
36
37RUN: llvm-objdump -s --section=.pdata test2.dll | FileCheck -check-prefix=DATA2 %s
38DATA2: 180004000 00100000 0e100000
39
40Mixed arm64ec and x86_64 code:
41
42RUN: lld-link -out:test3.dll -machine:arm64ec arm64ec-func-sym.obj x86_64-func-sym.obj \
43RUN: loadconfig-arm64ec.obj -dll -noentry
44
45RUN: llvm-readobj --coff-load-config test3.dll | FileCheck -check-prefix=LOADCFG2 %s
46LOADCFG2: ExtraRFETable: 0x5000
47LOADCFG2-NEXT: ExtraRFETableSize: 0x8
48
49RUN: llvm-readobj --headers test3.dll | FileCheck -check-prefix=DIR2 %s
50DIR2: ExceptionTableRVA: 0x5008
51DIR2-NEXT: ExceptionTableSize: 0xC
52
53RUN: llvm-objdump -s --section=.pdata test3.dll | FileCheck -check-prefix=DATA3 %s
54DATA3: 180005000 00100000 11000001 00200000 0e200000
55
56Mixed arm64x code:
57
58RUN: lld-link -out:test4.dll -machine:arm64x arm64-func-sym.obj arm64ec-func-sym.obj \
Jacek Caban659e66e2025-01-21 21:24:0059RUN: x86_64-func-sym.obj loadconfig-arm64.obj loadconfig-arm64ec.obj -dll -noentry
Jacek Caban72c6ca62023-12-05 10:59:4360
Jacek Caban8252e0e2025-02-13 18:22:5761RUN: llvm-readobj --headers --coff-load-config test4.dll | FileCheck -check-prefix=DIR3 %s
Jacek Caban659e66e2025-01-21 21:24:0062DIR3: ImageOptionalHeader {
63DIR3: DataDirectory {
64DIR3: ExceptionTableRVA: 0x6000
65DIR3-NEXT: ExceptionTableSize: 0x10
66DIR3: }
67DIR3: }
Jacek Caban8252e0e2025-02-13 18:22:5768DIR3: CHPEMetadata [
69DIR3: ExtraRFETable: 0x6010
70DIR3-NEXT: ExtraRFETableSize: 0xC
71DIR3: ]
Jacek Caban659e66e2025-01-21 21:24:0072DIR3: HybridObject {
73DIR3: ImageOptionalHeader {
74DIR3: ExceptionTableRVA: 0x6010
75DIR3-NEXT: ExceptionTableSize: 0xC
76DIR3: }
Jacek Caban8252e0e2025-02-13 18:22:5777DIR3: CHPEMetadata [
78DIR3: ExtraRFETable: 0x6000
79DIR3-NEXT: ExtraRFETableSize: 0x10
80DIR3: ]
Jacek Caban659e66e2025-01-21 21:24:0081DIR3: }
Jacek Caban72c6ca62023-12-05 10:59:4382
83RUN: llvm-objdump -s --section=.pdata test4.dll | FileCheck -check-prefix=DATA4 %s
84DATA4: 180006000 00100000 11000001 00200000 11000001 ......... ......
85DATA4: 180006010 00300000 0e300000
86
87Order of inputs doesn't matter, the data is sorted by type and RVA:
88
89RUN: lld-link -out:test5.dll -machine:arm64ec x86_64-func-sym.obj arm64ec-func-sym.obj \
90RUN: loadconfig-arm64ec.obj -dll -noentry
91RUN: llvm-readobj --coff-load-config test5.dll | FileCheck -check-prefix=LOADCFG2 %s
92RUN: llvm-readobj --headers test5.dll | FileCheck -check-prefix=DIR2 %s
93RUN: llvm-objdump -s --section=.pdata test5.dll | FileCheck -check-prefix=DATA3 %s
94
95RUN: lld-link -out:test6.dll -machine:arm64x arm64ec-func-sym.obj x86_64-func-sym.obj \
Jacek Caban659e66e2025-01-21 21:24:0096RUN: arm64-func-sym.obj loadconfig-arm64.obj loadconfig-arm64ec.obj -dll -noentry
Jacek Caban8252e0e2025-02-13 18:22:5797RUN: llvm-readobj --headers --coff-load-config test6.dll | FileCheck -check-prefix=DIR3 %s
Jacek Caban72c6ca62023-12-05 10:59:4398RUN: llvm-objdump -s --section=.pdata test6.dll | FileCheck -check-prefix=DATA4 %s
99
100RUN: lld-link -out:test7.dll -machine:arm64x x86_64-func-sym.obj arm64ec-func-sym.obj \
Jacek Caban659e66e2025-01-21 21:24:00101RUN: arm64-func-sym.obj loadconfig-arm64.obj loadconfig-arm64ec.obj -dll -noentry
Jacek Caban8252e0e2025-02-13 18:22:57102RUN: llvm-readobj --headers --coff-load-config test7.dll | FileCheck -check-prefix=DIR3 %s
Jacek Caban72c6ca62023-12-05 10:59:43103RUN: llvm-objdump -s --section=.pdata test7.dll | FileCheck -check-prefix=DATA4 %s
104
105#--- arm64-func-sym.s
106 .text
107 .globl arm64_func_sym
108 .p2align 2, 0x0
109arm64_func_sym:
110 .seh_proc arm64_func_sym
111 sub sp, sp, #32
112 .seh_stackalloc 32
113 .seh_endprologue
114 mov w0, #2
115 .seh_startepilogue
116 add sp, sp, #32
117 .seh_stackalloc 32
118 .seh_endepilogue
119 ret
120 .seh_endproc
121
122#--- arm64ec-func-sym.s
123 .text
124 .globl arm64ec_func_sym
125 .p2align 2, 0x0
126arm64ec_func_sym:
127 .seh_proc arm64ec_func_sym
128 sub sp, sp, #32
129 .seh_stackalloc 32
130 .seh_endprologue
131 mov w0, #3
132 .seh_startepilogue
133 add sp, sp, #32
134 .seh_stackalloc 32
135 .seh_endepilogue
136 ret
137 .seh_endproc
138
139#--- x86_64-func-sym.s
140 .text
141 .globl x86_64_func_sym
142 .p2align 2, 0x0
143x86_64_func_sym:
144 .seh_proc x86_64_func_sym
145 subq $40, %rsp
146 .seh_stackalloc 40
147 .seh_endprologue
148 movl $4, %eax
149 addq $40, %rsp
150 retq
151 .seh_endproc