# RUN: yaml2obj %s -o %t.obj # # RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2 # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK1 %s # # RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2 /merge:.edata=.rdata # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK1 %s # RUN: llvm-readobj --file-headers --sections %t.dll | FileCheck -check-prefix=HEADER-MERGE %s # CHECK1: Export Table: # CHECK1: DLL name: export32.test.tmp.dll # CHECK1: Ordinal RVA Name # CHECK1-NEXT: 0 0 # CHECK1-NEXT: 1 0x1008 exportfn1 # CHECK1-NEXT: 2 0x1010 exportfn2 # HEADER-MERGE: ExportTableRVA: 0x2000 # HEADER-MERGE-NEXT: ExportTableSize: 0x7E # HEADER-MERGE: Name: .rdata # HEADER-MERGE-NEXT: VirtualSize: 0x7E # HEADER-MERGE-NEXT: VirtualAddress: 0x2000 # RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /export:exportfn1,@5 \ # RUN: /export:exportfn2 /export:mangled # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK2 %s # CHECK2: Export Table: # CHECK2: DLL name: export32.test.tmp.dll # CHECK2: Ordinal RVA Name # CHECK2-NEXT: 0 0 # CHECK2-NEXT: 1 0 # CHECK2-NEXT: 2 0 # CHECK2-NEXT: 3 0 # CHECK2-NEXT: 4 0 # CHECK2-NEXT: 5 0x1008 exportfn1 # CHECK2-NEXT: 6 0x1010 exportfn2 # CHECK2-NEXT: 7 0x1010 exportfn3 # CHECK2-NEXT: 8 0x1010 mangled # RUN: lld-link -safeseh:no /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: DLL name: export32.test.tmp.dll # CHECK3: Ordinal RVA Name # CHECK3-NEXT: 0 0 # CHECK3-NEXT: 1 0 # CHECK3-NEXT: 2 0 # CHECK3-NEXT: 3 0 # CHECK3-NEXT: 4 0 # CHECK3-NEXT: 5 0x1008 # CHECK3-NEXT: 6 0x1010 exportfn2 # RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /export:f1=exportfn1 /export:f2=exportfn2 # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK4 %s # CHECK4: Export Table: # CHECK4: DLL name: export32.test.tmp.dll # CHECK4: Ordinal RVA Name # CHECK4-NEXT: 0 0 # CHECK4-NEXT: 1 0x1010 exportfn3 # CHECK4-NEXT: 2 0x1008 f1 # CHECK4-NEXT: 3 0x1010 f2 # RUN: echo "EXPORTS exportfn1 @3" > %t.def # RUN: echo "fn2=exportfn2 @2" >> %t.def # RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /def:%t.def # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK5 %s # RUN: echo "EXPORTS exportfn1 @ 3" > %t.def # RUN: echo "fn2=exportfn2 @ 2" >> %t.def # RUN: lld-link -safeseh:no /out:%t.dll /dll %t.obj /def:%t.def # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK5 %s # CHECK5: Export Table: # CHECK5: DLL name: export32.test.tmp.dll # CHECK5: Ordinal RVA Name # CHECK5-NEXT: 0 0 # CHECK5-NEXT: 1 0 # CHECK5-NEXT: 2 0x1010 fn2 # CHECK5-NEXT: 3 0x1008 exportfn1 # CHECK5-NEXT: 4 0x1010 exportfn3 # RUN: lld-link -safeseh:no /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: lld-link -safeseh:no /out:%t.dll /dll %t.obj /export:foo=mangled # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK7 %s # CHECK7: Export Table: # CHECK7: DLL name: export32.test.tmp.dll # CHECK7: Ordinal RVA Name # CHECK7-NEXT: 0 0 # CHECK7-NEXT: 1 0 # CHECK7-NEXT: 2 0x1010 foo --- !COFF header: Machine: IMAGE_FILE_MACHINE_I386 Characteristics: [] sections: - Name: .text Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] Alignment: 4 SectionData: B800000000506800000000680000000050E80000000050E800000000 - Name: .drectve Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ] Alignment: 1 SectionData: 2f6578706f72743a5f6578706f7274666e3300 # /export:_exportfn3 symbols: - Name: .text Value: 0 SectionNumber: 1 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_STATIC SectionDefinition: Length: 28 NumberOfRelocations: 4 NumberOfLinenumbers: 0 CheckSum: 0 Number: 0 - Name: __DllMainCRTStartup@12 Value: 0 SectionNumber: 1 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_EXTERNAL - Name: _exportfn1 Value: 8 SectionNumber: 1 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_EXTERNAL - Name: _exportfn2@4 Value: 16 SectionNumber: 1 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_EXTERNAL - Name: _exportfn3 Value: 16 SectionNumber: 1 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_EXTERNAL - Name: '?mangled@@YAHXZ' Value: 16 SectionNumber: 1 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_EXTERNAL ...