@@ -5,6 +5,8 @@ RUN: llvm-mc -filetype=obj -triple=arm64ec-windows arm64ec-func.s -o arm64ec-fun
55RUN: llvm-mc -filetype=obj -triple=aarch64-windows arm64-func.s -o arm64-func.obj
66RUN: llvm-mc -filetype=obj -triple=arm64ec-windows func-drectve.s -o arm64ec-drectve.obj
77RUN: 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
810RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj
911RUN: llvm-mc -filetype=obj -triple=aarch64-windows %S/Inputs/loadconfig-arm64.s -o loadconfig-arm64.obj
1012
@@ -36,6 +38,15 @@ RUN: llvm-readobj --headers --coff-exports out-cmd.dll | FileCheck --check-prefi
3638EXPORTS-EC: ExportTableRVA: 0x0
3739EXPORTS-EC-NEXT: ExportTableSize: 0x0
3840EXPORTS-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: }
3950
4051# Export using the EC .drectve section.
4152
@@ -44,6 +55,30 @@ RUN: loadconfig-arm64.obj loadconfig-arm64ec.obj arm64ec-drectve.obj -n
4455RUN: llvm-objdump -d out-drectve-ec.dll | FileCheck --check-prefix=DISASM-EC %s
4556RUN: llvm-readobj --headers --coff-exports out-drectve-ec.dll | FileCheck --check-prefix=EXPORTS-EC %s
4657
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+
4782# Export using the native .drectve section.
4883
4984RUN: 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
6499EXPORTS-NATIVE-NEXT: Name: func
65100EXPORTS-NATIVE-NEXT: RVA: 0x1000
66101EXPORTS-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
67113
68114# Export using both the native and EC .drectve sections.
69115
@@ -99,6 +145,37 @@ EXPORTS-BOTH-NEXT: Ordinal: 1
99145EXPORTS-BOTH-NEXT: Name: func
100146EXPORTS-BOTH-NEXT: RVA: 0x1000
101147EXPORTS-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: }
102179
103180#--- arm64-func.s
104181 .section .text,"xr",discard,func
@@ -119,3 +196,34 @@ func:
119196#--- func-drectve.s
120197.section .drectve
121198 .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