]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/COFF/export.test
Vendor import of lld trunk r338150:
[FreeBSD/FreeBSD.git] / test / COFF / export.test
1 # RUN: yaml2obj < %p/Inputs/export.yaml > %t.obj
2 #
3 # RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2
4 # RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK1 %s
5
6 CHECK1:      Export Table:
7 CHECK1:      DLL name: export.test.tmp.dll
8 CHECK1:      Ordinal      RVA  Name
9 CHECK1-NEXT:       0        0
10 CHECK1-NEXT:       1   0x1008  exportfn1
11 CHECK1-NEXT:       2   0x1010  exportfn2
12
13 # RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1,@5 /export:exportfn2
14 # RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK2 %s
15
16 CHECK2:      Export Table:
17 CHECK2:      DLL name: export.test.tmp.dll
18 CHECK2:      Ordinal      RVA  Name
19 CHECK2-NEXT:       0        0
20 CHECK2-NEXT:       1        0
21 CHECK2-NEXT:       2        0
22 CHECK2-NEXT:       3        0
23 CHECK2-NEXT:       4        0
24 CHECK2-NEXT:       5   0x1008  exportfn1
25 CHECK2-NEXT:       6   0x1010  exportfn2
26 CHECK2-NEXT:       7   0x1010  exportfn3
27
28 # RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1,@5,noname /export:exportfn2
29 # RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK3 %s
30
31 CHECK3:      Export Table:
32 CHECK3:      DLL name: export.test.tmp.dll
33 CHECK3:      Ordinal      RVA  Name
34 CHECK3-NEXT:       0        0
35 CHECK3-NEXT:       1        0
36 CHECK3-NEXT:       2        0
37 CHECK3-NEXT:       3        0
38 CHECK3-NEXT:       4        0
39 CHECK3-NEXT:       5   0x1008
40 CHECK3-NEXT:       6   0x1010  exportfn2
41
42 # RUN: lld-link /out:%t.dll /dll %t.obj /export:f1=exportfn1 /export:f2=exportfn2 /implib:%t.lib
43 # RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK4 %s
44 # RUN: llvm-nm %t.lib | FileCheck -check-prefix=CHECK4-NM %s
45
46 CHECK4:      Export Table:
47 CHECK4:      DLL name: export.test.tmp.dll
48 CHECK4:      Ordinal      RVA  Name
49 CHECK4-NEXT:       0        0
50 CHECK4-NEXT:       1   0x1010  exportfn3
51 CHECK4-NEXT:       2   0x1008  f1
52 CHECK4-NEXT:       3   0x1010  f2
53 CHECK4-NM: 00000000 T f1
54 CHECK4-NM: 00000000 T f2
55
56 # RUN: echo "EXPORTS exportfn1 @3" > %t.def
57 # RUN: echo "fn2=exportfn2 @2" >> %t.def
58 # RUN: lld-link /out:%t.dll /dll %t.obj /def:%t.def
59 # RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK5 %s
60
61 CHECK5:      Export Table:
62 CHECK5:      DLL name: export.test.tmp.dll
63 CHECK5:      Ordinal      RVA  Name
64 CHECK5-NEXT:       0        0
65 CHECK5-NEXT:       1        0
66 CHECK5-NEXT:       2   0x1010  fn2
67 CHECK5-NEXT:       3   0x1008  exportfn1
68 CHECK5-NEXT:       4   0x1010  exportfn3
69
70 # RUN: lld-link /out:%t.DLL /dll %t.obj /export:exportfn1 /export:exportfn2 \
71 # RUN:   /export:exportfn1 /export:exportfn2,@5 >& %t.log
72 # RUN: FileCheck -check-prefix=CHECK6 %s < %t.log
73
74 CHECK6:     duplicate /export option: exportfn2
75 CHECK6-NOT: duplicate /export option: exportfn1
76
77 # RUN: llvm-nm -M %t.lib | FileCheck --check-prefix=SYMTAB %s
78
79 SYMTAB: __imp_exportfn1 in export.test.tmp.DLL
80 SYMTAB: exportfn1 in export.test.tmp.DLL
81 SYMTAB: __imp_exportfn2 in export.test.tmp.DLL
82 SYMTAB: exportfn2 in export.test.tmp.DLL
83 SYMTAB: __imp_exportfn3 in export.test.tmp.DLL
84 SYMTAB: exportfn3 in export.test.tmp.DLL
85
86 # RUN: lld-link /out:%t.dll /dll %t.obj /export:foo=kernel32.foobar
87 # RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=FORWARDER %s
88
89 # RUN: echo "EXPORTS foo=kernel32.foobar" > %t.def
90 # RUN: lld-link /out:%t.dll /dll %t.obj /def:%t.def
91 # RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=FORWARDER %s
92
93 FORWARDER: Export Table:
94 FORWARDER:  DLL name: export.test.tmp.dll
95 FORWARDER:  Ordinal base: 0
96 FORWARDER:  Ordinal      RVA  Name
97 FORWARDER:        0        0
98 FORWARDER:        1   0x1010  exportfn
99 FORWARDER:        2           foo (forwarded to kernel32.foobar)