This is similar to D143540 for import libraries. ARM64EC will need it for EC symbol table, but it should be fine for other targets as well and it improves MSVC compatibility. I left mingw case unchanged to be safe, although I think that it wouldn't hurt to change that as well. The visible effect in tests is a sorted symbol map. Revieved By: mstorsjo Differential Revision: https://reviews.llvm.org/D156473
98 lines
3.6 KiB
Plaintext
98 lines
3.6 KiB
Plaintext
# RUN: yaml2obj %p/Inputs/export.yaml -o %t.obj
|
|
#
|
|
# RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2
|
|
# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK1 %s
|
|
|
|
CHECK1: Export Table:
|
|
CHECK1-NEXT: DLL name: export.test.tmp.dll
|
|
CHECK1-NEXT: Ordinal base: 1
|
|
CHECK1-NEXT: Ordinal RVA Name
|
|
CHECK1-NEXT: 1 0x1008 exportfn1
|
|
CHECK1-NEXT: 2 0x1010 exportfn2
|
|
|
|
# RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1,@5 /export:exportfn2
|
|
# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK2 %s
|
|
|
|
CHECK2: Export Table:
|
|
CHECK2-NEXT: DLL name: export.test.tmp.dll
|
|
CHECK2-NEXT: Ordinal base: 5
|
|
CHECK2-NEXT: Ordinal RVA Name
|
|
CHECK2-NEXT: 5 0x1008 exportfn1
|
|
CHECK2-NEXT: 6 0x1010 exportfn2
|
|
CHECK2-NEXT: 7 0x1010 exportfn3
|
|
|
|
# RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1,@5,noname /export:exportfn2
|
|
# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK3 %s
|
|
|
|
CHECK3: Export Table:
|
|
CHECK3-NEXT: DLL name: export.test.tmp.dll
|
|
CHECK3-NEXT: Ordinal base: 5
|
|
CHECK3-NEXT: Ordinal RVA Name
|
|
CHECK3-NEXT: 5 0x1008
|
|
CHECK3-NEXT: 6 0x1010 exportfn2
|
|
|
|
# RUN: lld-link /out:%t.dll /dll %t.obj /export:f1=exportfn1 /export:f2=exportfn2 /implib:%t.lib
|
|
# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK4 %s
|
|
# RUN: llvm-nm %t.lib | FileCheck -check-prefix=CHECK4-NM %s
|
|
|
|
CHECK4: Export Table:
|
|
CHECK4-NEXT: DLL name: export.test.tmp.dll
|
|
CHECK4-NEXT: Ordinal base: 1
|
|
CHECK4-NEXT: Ordinal RVA Name
|
|
CHECK4-NEXT: 1 0x1010 exportfn3
|
|
CHECK4-NEXT: 2 0x1008 f1
|
|
CHECK4-NEXT: 3 0x1010 f2
|
|
CHECK4-NM: 00000000 T f1
|
|
CHECK4-NM: 00000000 T f2
|
|
|
|
# RUN: echo "EXPORTS exportfn1 @3" > %t.def
|
|
# RUN: echo "fn2=exportfn2 @2" >> %t.def
|
|
# RUN: lld-link /out:%t.dll /dll %t.obj /def:%t.def
|
|
# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK5 %s
|
|
|
|
CHECK5: Export Table:
|
|
CHECK5-NEXT: DLL name: export.test.tmp.dll
|
|
CHECK5-NEXT: Ordinal base: 2
|
|
CHECK5-NEXT: Ordinal RVA Name
|
|
CHECK5-NEXT: 2 0x1010 fn2
|
|
CHECK5-NEXT: 3 0x1008 exportfn1
|
|
CHECK5-NEXT: 4 0x1010 exportfn3
|
|
|
|
# RUN: lld-link /out:%t.DLL /dll %t.obj /export:exportfn1 /export:exportfn2 \
|
|
# RUN: /export:exportfn1 /export:exportfn2,@5 >& %t.log
|
|
# RUN: FileCheck -check-prefix=CHECK6 %s < %t.log
|
|
|
|
CHECK6: duplicate /export option: exportfn2
|
|
CHECK6-NOT: duplicate /export option: exportfn1
|
|
|
|
# RUN: llvm-nm -M %t.lib | FileCheck --check-prefix=SYMTAB %s
|
|
|
|
SYMTAB: __imp_exportfn1 in export.test.tmp.DLL
|
|
SYMTAB: __imp_exportfn2 in export.test.tmp.DLL
|
|
SYMTAB: __imp_exportfn3 in export.test.tmp.DLL
|
|
SYMTAB: exportfn1 in export.test.tmp.DLL
|
|
SYMTAB: exportfn2 in export.test.tmp.DLL
|
|
SYMTAB: exportfn3 in export.test.tmp.DLL
|
|
|
|
# RUN: lld-link /out:%t.dll /dll %t.obj /export:foo=kernel32.foobar
|
|
# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=FORWARDER %s
|
|
|
|
# RUN: echo "EXPORTS foo=kernel32.foobar" > %t.def
|
|
# RUN: lld-link /out:%t.dll /dll %t.obj /def:%t.def
|
|
# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=FORWARDER %s
|
|
|
|
FORWARDER: Export Table:
|
|
FORWARDER: DLL name: export.test.tmp.dll
|
|
FORWARDER: Ordinal base: 1
|
|
FORWARDER: Ordinal RVA Name
|
|
FORWARDER: 1 0x1010 exportfn
|
|
FORWARDER: 2 foo (forwarded to kernel32.foobar)
|
|
|
|
# RUN: lld-link /out:%t.dll /dll %t.obj /merge:.rdata=.text /export:exportfn1 /export:exportfn2
|
|
# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=MERGE --match-full-lines %s
|
|
|
|
MERGE: DLL name: export.test.tmp.dll
|
|
MERGE: Ordinal RVA Name
|
|
MERGE-NEXT: 1 0x1008 exportfn1
|
|
MERGE-NEXT: 2 0x1010 exportfn2
|