xref: /llvm-project/lld/test/COFF/export32.test (revision adcdc9cc3740adba3577b328fa3ba492cbccd3a5)
1# RUN: yaml2obj %s -o %t.obj
2#
3# RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2
4# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK1 %s
5#
6# RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2 /merge:.edata=.rdata
7# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK1 %s
8# RUN: llvm-readobj --file-headers --sections %t.dll | FileCheck -check-prefix=HEADER-MERGE %s
9
10# CHECK1:      Export Table:
11# CHECK1-NEXT: DLL name: export32.test.tmp.dll
12# CHECK1-NEXT: Ordinal base: 1
13# CHECK1-NEXT: Ordinal      RVA  Name
14# CHECK1-NEXT:       1   0x1008  exportfn1
15# CHECK1-NEXT:       2   0x1010  exportfn2
16
17# HEADER-MERGE: ExportTableRVA: 0x2000
18# HEADER-MERGE-NEXT: ExportTableSize: 0x7A
19# HEADER-MERGE: Name: .rdata
20# HEADER-MERGE-NEXT: VirtualSize: 0x7A
21# HEADER-MERGE-NEXT: VirtualAddress: 0x2000
22
23# RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /export:exportfn1,@5 \
24# RUN:   /export:exportfn2 /export:mangled
25# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK2 %s
26
27# CHECK2:      Export Table:
28# CHECK2-NEXT: DLL name: export32.test.tmp.dll
29# CHECK2-NEXT: Ordinal base: 5
30# CHECK2-NEXT: Ordinal      RVA  Name
31# CHECK2-NEXT:       5   0x1008  exportfn1
32# CHECK2-NEXT:       6   0x1010  exportfn2
33# CHECK2-NEXT:       7   0x1010  exportfn3
34# CHECK2-NEXT:       8   0x1010  mangled
35
36# RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /export:exportfn1,@5,noname /export:exportfn2
37# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK3 %s
38
39# CHECK3:      Export Table:
40# CHECK3-NEXT: DLL name: export32.test.tmp.dll
41# CHECK3-NEXT: Ordinal base: 5
42# CHECK3-NEXT: Ordinal      RVA  Name
43# CHECK3-NEXT:       5   0x1008
44# CHECK3-NEXT:       6   0x1010  exportfn2
45
46# RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /export:f1=exportfn1 /export:f2=exportfn2
47# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK4 %s
48
49# CHECK4:      Export Table:
50# CHECK4-NEXT: DLL name: export32.test.tmp.dll
51# CHECK4-NEXT: Ordinal base: 1
52# CHECK4-NEXT: Ordinal      RVA  Name
53# CHECK4-NEXT:       1   0x1010  exportfn3
54# CHECK4-NEXT:       2   0x1008  f1
55# CHECK4-NEXT:       3   0x1010  f2
56
57# RUN: echo "EXPORTS exportfn1 @3" > %t.def
58# RUN: echo "fn2=exportfn2 @2" >> %t.def
59# RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /def:%t.def
60# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK5 %s
61
62# RUN: echo "EXPORTS exportfn1 @ 3" > %t.def
63# RUN: echo "fn2=exportfn2 @ 2" >> %t.def
64# RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /def:%t.def
65# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK5 %s
66
67# CHECK5:      Export Table:
68# CHECK5-NEXT: DLL name: export32.test.tmp.dll
69# CHECK5-NEXT: Ordinal base: 2
70# CHECK5-NEXT: Ordinal      RVA  Name
71# CHECK5-NEXT:       2   0x1010  fn2
72# CHECK5-NEXT:       3   0x1008  exportfn1
73# CHECK5-NEXT:       4   0x1010  exportfn3
74
75# RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2 \
76# RUN:   /export:exportfn1 /export:exportfn2,@5 >& %t.log
77# RUN: FileCheck -check-prefix=CHECK6 %s < %t.log
78
79# CHECK6:     duplicate /export option: _exportfn2
80# CHECK6-NOT: duplicate /export option: _exportfn1
81
82# RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /export:foo=mangled
83# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK7 %s
84
85# CHECK7:      Export Table:
86# CHECK7-NEXT: DLL name: export32.test.tmp.dll
87# CHECK7-NEXT: Ordinal base: 1
88# CHECK7-NEXT: Ordinal      RVA  Name
89# CHECK7-NEXT:       1   0x1010  exportfn3
90# CHECK7-NEXT:       2   0x1010  foo
91
92--- !COFF
93header:
94  Machine:         IMAGE_FILE_MACHINE_I386
95  Characteristics: []
96sections:
97  - Name:            .text
98    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
99    Alignment:       4
100    SectionData:     B800000000506800000000680000000050E80000000050E800000000
101  - Name:            .drectve
102    Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
103    Alignment:       1
104    SectionData:     2f6578706f72743a5f6578706f7274666e3300  # /export:_exportfn3
105symbols:
106  - Name:            .text
107    Value:           0
108    SectionNumber:   1
109    SimpleType:      IMAGE_SYM_TYPE_NULL
110    ComplexType:     IMAGE_SYM_DTYPE_NULL
111    StorageClass:    IMAGE_SYM_CLASS_STATIC
112    SectionDefinition:
113      Length:          28
114      NumberOfRelocations: 4
115      NumberOfLinenumbers: 0
116      CheckSum:        0
117      Number:          0
118  - Name:            __DllMainCRTStartup@12
119    Value:           0
120    SectionNumber:   1
121    SimpleType:      IMAGE_SYM_TYPE_NULL
122    ComplexType:     IMAGE_SYM_DTYPE_NULL
123    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
124  - Name:            _exportfn1
125    Value:           8
126    SectionNumber:   1
127    SimpleType:      IMAGE_SYM_TYPE_NULL
128    ComplexType:     IMAGE_SYM_DTYPE_NULL
129    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
130  - Name:            _exportfn2@4
131    Value:           16
132    SectionNumber:   1
133    SimpleType:      IMAGE_SYM_TYPE_NULL
134    ComplexType:     IMAGE_SYM_DTYPE_NULL
135    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
136  - Name:            _exportfn3
137    Value:           16
138    SectionNumber:   1
139    SimpleType:      IMAGE_SYM_TYPE_NULL
140    ComplexType:     IMAGE_SYM_DTYPE_NULL
141    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
142  - Name:            '?mangled@@YAHXZ'
143    Value:           16
144    SectionNumber:   1
145    SimpleType:      IMAGE_SYM_TYPE_NULL
146    ComplexType:     IMAGE_SYM_DTYPE_NULL
147    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
148...
149