# RUN: yaml2obj %s -o %t.obj # # RUN: lld-link /out:%t.dll /dll %t.obj # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK1 %s # # CHECK1: Export Table: # CHECK1: DLL name: ordinals-override.test.tmp.dll # CHECK1: Ordinal base: 1 # CHECK1: Ordinal RVA Name # CHECK1-NEXT: 1 0x1010 ?bar@@YAXXZ # CHECK1-NEXT: 2 0x1000 ?foo@@YAXXZ # CHECK1-NEXT: 3 0x1020 baz # # RUN: lld-link /out:%t.dll /dll %t.obj /EXPORT:?foo@@YAXXZ,@55 # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK2 %s # # CHECK2: Export Table: # CHECK2: DLL name: ordinals-override.test.tmp.dll # CHECK2: Ordinal base: 55 # CHECK2: Ordinal RVA Name # CHECK2-NEXT: 55 0x1000 ?foo@@YAXXZ # CHECK2-NEXT: 56 0x1010 ?bar@@YAXXZ # CHECK2-NEXT: 57 0x1020 baz # # RUN: lld-link /out:%t.dll /dll %t.obj /EXPORT:?foo@@YAXXZ,@55 /EXPORT:?bar@@YAXXZ,@122 # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK3 %s # # CHECK3: Export Table: # CHECK3: DLL name: ordinals-override.test.tmp.dll # CHECK3: Ordinal base: 55 # CHECK3: Ordinal RVA Name # CHECK3-NEXT: 55 0x1000 ?foo@@YAXXZ # CHECK3-NEXT: 122 0x1010 ?bar@@YAXXZ # CHECK3-NEXT: 123 0x1020 baz # # RUN: echo "EXPORTS" > %t.def # RUN: echo "?foo@@YAXXZ @55" >> %t.def # RUN: echo "?bar@@YAXXZ @122" >> %t.def # RUN: lld-link /out:%t.dll /dll %t.obj /DEF:%t.def 2>&1 | FileCheck --check-prefix=WARN --allow-empty %s # WARN-NOT: lld-link: warning # # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK3 %s # # RUN: lld-link /out:%t.dll /dll %t.obj /DEF:%t.def /EXPORT:?foo@@YAXXZ,@10000 2>&1 | FileCheck --check-prefix=DUPLICATED %s # DUPLICATED: lld-link: warning: duplicate export: ?foo@@YAXXZ first seen in /export, now in /def # # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK4 %s # # CHECK4: Export Table: # CHECK4: DLL name: ordinals-override.test.tmp.dll # CHECK4: Ordinal base: 122 # CHECK4: Ordinal RVA Name # CHECK4-NEXT: 122 0x1010 ?bar@@YAXXZ # CHECK4-NEXT: 10000 0x1000 ?foo@@YAXXZ # CHECK4-NEXT: 10001 0x1020 baz # The .drectve section below contains the following: # # Linker Directives # ----------------- # /export:baz=?baz@@YAXXZ # /EXPORT:?foo@@YAXXZ # /EXPORT:?bar@@YAXXZ --- !COFF header: Machine: IMAGE_FILE_MACHINE_AMD64 Characteristics: [ ] sections: - Name: .drectve Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ] Alignment: 1 SectionData: 2f6578706f72743a62617a3d3f62617a4040594158585a202f4558504f52543a3f666f6f4040594158585a202f4558504f52543a3f6261724040594158585a - Name: '.text$mn' Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] Alignment: 16 SectionData: C20000CCCCCCCCCCCCCCCCCCCCCCCCCCC20000CCCCCCCCCCCCCCCCCCCCCCCCCCC20000 symbols: - Name: '.text$mn' Value: 0 SectionNumber: 2 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_STATIC SectionDefinition: Length: 35 NumberOfRelocations: 0 NumberOfLinenumbers: 0 CheckSum: 0 Number: 0 - Name: _DllMainCRTStartup Value: 0 SectionNumber: 2 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_EXTERNAL - Name: '?foo@@YAXXZ' Value: 0 SectionNumber: 2 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_FUNCTION StorageClass: IMAGE_SYM_CLASS_EXTERNAL - Name: '?bar@@YAXXZ' Value: 16 SectionNumber: 2 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_FUNCTION StorageClass: IMAGE_SYM_CLASS_EXTERNAL - Name: '?baz@@YAXXZ' Value: 32 SectionNumber: 2 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_FUNCTION StorageClass: IMAGE_SYM_CLASS_EXTERNAL ...