@@ -5,6 +5,8 @@ RUN: llvm-mc -filetype=obj -triple=arm64ec-windows arm64ec-func.s -o arm64ec-fun
5
5
RUN: llvm-mc -filetype=obj -triple=aarch64-windows arm64-func.s -o arm64-func.obj
6
6
RUN: llvm-mc -filetype=obj -triple=arm64ec-windows func-drectve.s -o arm64ec-drectve.obj
7
7
RUN: llvm-mc -filetype=obj -triple=aarch64-windows func-drectve.s -o arm64-drectve.obj
8
+ RUN: llvm-mc -filetype=obj -triple=aarch64-windows edata.s -o arm64-edata.obj
9
+ RUN: llvm-mc -filetype=obj -triple=arm64ec-windows edata.s -o arm64ec-edata.obj
8
10
RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj
9
11
RUN: llvm-mc -filetype=obj -triple=aarch64-windows %S/Inputs/loadconfig-arm64.s -o loadconfig-arm64.obj
10
12
@@ -36,6 +38,15 @@ RUN: llvm-readobj --headers --coff-exports out-cmd.dll | FileCheck --check-prefi
36
38
EXPORTS-EC: ExportTableRVA: 0x0
37
39
EXPORTS-EC-NEXT: ExportTableSize: 0x0
38
40
EXPORTS-EC-NOT: Name: func
41
+ EXPORTS-EC: HybridObject {
42
+ EXPORTS-EC: ExportTableRVA: 0x3{{.*}}
43
+ EXPORTS-EC-NEXT: ExportTableSize: 0x4{{.*}}
44
+ EXPORTS-EC: Export {
45
+ EXPORTS-EC-NEXT: Ordinal: 1
46
+ EXPORTS-EC-NEXT: Name: func
47
+ EXPORTS-EC-NEXT: RVA: 0x2000
48
+ EXPORTS-EC-NEXT: }
49
+ EXPORTS-EC-NEXT: }
39
50
40
51
# Export using the EC .drectve section.
41
52
@@ -44,6 +55,30 @@ RUN: loadconfig-arm64.obj loadconfig-arm64ec.obj arm64ec-drectve.obj -n
44
55
RUN: llvm-objdump -d out-drectve-ec.dll | FileCheck --check-prefix=DISASM-EC %s
45
56
RUN: llvm-readobj --headers --coff-exports out-drectve-ec.dll | FileCheck --check-prefix=EXPORTS-EC %s
46
57
58
+ # Export using the EC .edata section.
59
+
60
+ RUN: lld-link -machine:arm64x -dll -out:out-edata-ec.dll arm64ec-func.obj arm64-func.obj \
61
+ RUN: loadconfig-arm64.obj loadconfig-arm64ec.obj arm64ec-edata.obj -noentry
62
+
63
+ RUN: llvm-objdump -d out-edata-ec.dll | FileCheck --check-prefix=DISASM-EDATA-EC %s
64
+ DISASM-EDATA-EC: 0000000180001000 <.text>:
65
+ DISASM-EDATA-EC-NEXT: 180001000: 52800040 mov w0, #0x2 // =2
66
+ DISASM-EDATA-EC-NEXT: 180001004: d65f03c0 ret
67
+
68
+ RUN: llvm-readobj --headers --coff-exports out-edata-ec.dll | FileCheck --check-prefix=EXPORTS-EDATA-EC %s
69
+ EXPORTS-EDATA-EC: ExportTableRVA: 0x0
70
+ EXPORTS-EDATA-EC-NEXT: ExportTableSize: 0x0
71
+ EXPORTS-EDATA-EC-NOT: Name: func
72
+ EXPORTS-EDATA-EC: HybridObject {
73
+ EXPORTS-EDATA-EC: ExportTableRVA: 0x2{{.*}}
74
+ EXPORTS-EDATA-EC-NEXT: ExportTableSize: 0x4{{.*}}
75
+ EXPORTS-EDATA-EC: Export {
76
+ EXPORTS-EDATA-EC-NEXT: Ordinal: 1
77
+ EXPORTS-EDATA-EC-NEXT: Name: func
78
+ EXPORTS-EDATA-EC-NEXT: RVA: 0x1000
79
+ EXPORTS-EDATA-EC-NEXT: }
80
+ EXPORTS-EDATA-EC-NEXT: }
81
+
47
82
# Export using the native .drectve section.
48
83
49
84
RUN: lld-link -machine:arm64x -dll -out:out-drectve-native.dll arm64ec-func.obj arm64-func.obj \
@@ -64,6 +99,17 @@ EXPORTS-NATIVE-NEXT: Ordinal: 1
64
99
EXPORTS-NATIVE-NEXT: Name: func
65
100
EXPORTS-NATIVE-NEXT: RVA: 0x1000
66
101
EXPORTS-NATIVE-NEXT: }
102
+ EXPORTS-NATIVE: HybridObject {
103
+ EXPORTS-NATIVE: ExportTableRVA: 0x0
104
+ EXPORTS-NATIVE-NEXT: ExportTableSize: 0x0
105
+ EXPORTS-NATIVE-NOT: Name: func
106
+
107
+ # Export using the native .edata section.
108
+
109
+ RUN: lld-link -machine:arm64x -dll -out:out-edata.dll arm64ec-func.obj arm64-func.obj \
110
+ RUN: loadconfig-arm64.obj loadconfig-arm64ec.obj arm64-edata.obj -noentry
111
+ RUN: llvm-objdump -d out-edata.dll | FileCheck --check-prefix=DISASM-NATIVE %s
112
+ RUN: llvm-readobj --headers --coff-exports out-edata.dll | FileCheck --check-prefix=EXPORTS-NATIVE %s
67
113
68
114
# Export using both the native and EC .drectve sections.
69
115
@@ -99,6 +145,37 @@ EXPORTS-BOTH-NEXT: Ordinal: 1
99
145
EXPORTS-BOTH-NEXT: Name: func
100
146
EXPORTS-BOTH-NEXT: RVA: 0x1000
101
147
EXPORTS-BOTH-NEXT: }
148
+ EXPORTS-BOTH: HybridObject {
149
+ EXPORTS-BOTH: ExportTableRVA: 0x4{{.*}}
150
+ EXPORTS-BOTH-NEXT: ExportTableSize: 0x4{{.*}}
151
+ EXPORTS-BOTH: Export {
152
+ EXPORTS-BOTH-NEXT: Ordinal: 1
153
+ EXPORTS-BOTH-NEXT: Name: func
154
+ EXPORTS-BOTH-NEXT: RVA: 0x3000
155
+ EXPORTS-BOTH-NEXT: }
156
+ EXPORTS-BOTH-NEXT: }
157
+
158
+ # Export using both the native and EC .edata sections.
159
+
160
+ RUN: lld-link -machine:arm64x -dll -out:out-edata-both.dll arm64ec-func.obj arm64-func.obj \
161
+ RUN: loadconfig-arm64.obj loadconfig-arm64ec.obj arm64-edata.obj arm64ec-edata.obj -noentry
162
+ RUN: llvm-readobj --headers --coff-exports out-edata-both.dll | FileCheck --check-prefix=EXPORTS-EDATA-BOTH %s
163
+ EXPORTS-EDATA-BOTH: ExportTableRVA: 0x3{{.*}}
164
+ EXPORTS-EDATA-BOTH-NEXT: ExportTableSize: 0x4{{.*}}
165
+ EXPORTS-EDATA-BOTH: Export {
166
+ EXPORTS-EDATA-BOTH-NEXT: Ordinal: 1
167
+ EXPORTS-EDATA-BOTH-NEXT: Name: func
168
+ EXPORTS-EDATA-BOTH-NEXT: RVA: 0x1000
169
+ EXPORTS-EDATA-BOTH-NEXT: }
170
+ EXPORTS-EDATA-BOTH: HybridObject {
171
+ EXPORTS-EDATA-BOTH: ExportTableRVA: 0x3{{.*}}
172
+ EXPORTS-EDATA-BOTH-NEXT: ExportTableSize: 0x4{{.*}}
173
+ EXPORTS-EDATA-BOTH: Export {
174
+ EXPORTS-EDATA-BOTH-NEXT: Ordinal: 1
175
+ EXPORTS-EDATA-BOTH-NEXT: Name: func
176
+ EXPORTS-EDATA-BOTH-NEXT: RVA: 0x2000
177
+ EXPORTS-EDATA-BOTH-NEXT: }
178
+ EXPORTS-EDATA-BOTH-NEXT: }
102
179
103
180
#--- arm64-func.s
104
181
.section .text,"xr",discard,func
@@ -119,3 +196,34 @@ func:
119
196
#--- func-drectve.s
120
197
.section .drectve
121
198
.ascii "-export:func"
199
+
200
+ #--- edata.s
201
+ .section .edata, "dr"
202
+ .align 4
203
+ exports:
204
+ .long 0 // ExportFlags
205
+ .long 0 // TimeDateStamp
206
+ .long 0 // MajorVersion + MinorVersion
207
+ .rva name // NameRVA
208
+ .long 1 // OrdinalBase
209
+ .long 1 // AddressTableEntries
210
+ .long 1 // NumberOfNamePointers
211
+ .rva functions // ExportAddressTableRVA
212
+ .rva names // NamePointerRVA
213
+ .rva nameordinals // OrdinalTableRVA
214
+
215
+ names:
216
+ .rva funcname_func
217
+
218
+ nameordinals:
219
+ .short 0
220
+
221
+ functions:
222
+ .rva func
223
+ .long 0
224
+
225
+ funcname_func:
226
+ .asciz "func"
227
+
228
+ name:
229
+ .asciz "out-edata.dll"
0 commit comments