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