diff --git a/lld/test/COFF/export.test b/lld/test/COFF/export.test --- a/lld/test/COFF/export.test +++ b/lld/test/COFF/export.test @@ -4,8 +4,9 @@ # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK1 %s CHECK1: Export Table: -CHECK1: DLL name: export.test.tmp.dll -CHECK1: Ordinal RVA Name +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 @@ -13,12 +14,9 @@ # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK2 %s CHECK2: Export Table: -CHECK2: DLL name: export.test.tmp.dll -CHECK2: Ordinal RVA Name -CHECK2-NEXT: 1 0 -CHECK2-NEXT: 2 0 -CHECK2-NEXT: 3 0 -CHECK2-NEXT: 4 0 +CHECK2-NEXT: DLL name: export.test.tmp.dll +CHECK2-NEXT: Ordinal base: 1 +CHECK2-NEXT: Ordinal RVA Name CHECK2-NEXT: 5 0x1008 exportfn1 CHECK2-NEXT: 6 0x1010 exportfn2 CHECK2-NEXT: 7 0x1010 exportfn3 @@ -27,12 +25,9 @@ # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK3 %s CHECK3: Export Table: -CHECK3: DLL name: export.test.tmp.dll -CHECK3: Ordinal RVA Name -CHECK3-NEXT: 1 0 -CHECK3-NEXT: 2 0 -CHECK3-NEXT: 3 0 -CHECK3-NEXT: 4 0 +CHECK3-NEXT: DLL name: export.test.tmp.dll +CHECK3-NEXT: Ordinal base: 1 +CHECK3-NEXT: Ordinal RVA Name CHECK3-NEXT: 5 0x1008 CHECK3-NEXT: 6 0x1010 exportfn2 @@ -41,8 +36,9 @@ # RUN: llvm-nm %t.lib | FileCheck -check-prefix=CHECK4-NM %s CHECK4: Export Table: -CHECK4: DLL name: export.test.tmp.dll -CHECK4: Ordinal RVA Name +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 @@ -55,9 +51,9 @@ # RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=CHECK5 %s CHECK5: Export Table: -CHECK5: DLL name: export.test.tmp.dll -CHECK5: Ordinal RVA Name -CHECK5-NEXT: 1 0 +CHECK5-NEXT: DLL name: export.test.tmp.dll +CHECK5-NEXT: Ordinal base: 1 +CHECK5-NEXT: Ordinal RVA Name CHECK5-NEXT: 2 0x1010 fn2 CHECK5-NEXT: 3 0x1008 exportfn1 CHECK5-NEXT: 4 0x1010 exportfn3 diff --git a/lld/test/COFF/export32.test b/lld/test/COFF/export32.test --- a/lld/test/COFF/export32.test +++ b/lld/test/COFF/export32.test @@ -8,8 +8,9 @@ # 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: DLL name: export32.test.tmp.dll +# CHECK1-NEXT: Ordinal base: 1 +# CHECK1-NEXT: Ordinal RVA Name # CHECK1-NEXT: 1 0x1008 exportfn1 # CHECK1-NEXT: 2 0x1010 exportfn2 @@ -24,12 +25,9 @@ # 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: 1 0 -# CHECK2-NEXT: 2 0 -# CHECK2-NEXT: 3 0 -# CHECK2-NEXT: 4 0 +# CHECK2-NEXT: DLL name: export32.test.tmp.dll +# CHECK2-NEXT: Ordinal base: 1 +# CHECK2-NEXT: Ordinal RVA Name # CHECK2-NEXT: 5 0x1008 exportfn1 # CHECK2-NEXT: 6 0x1010 exportfn2 # CHECK2-NEXT: 7 0x1010 exportfn3 @@ -39,12 +37,9 @@ # 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: 1 0 -# CHECK3-NEXT: 2 0 -# CHECK3-NEXT: 3 0 -# CHECK3-NEXT: 4 0 +# CHECK3-NEXT: DLL name: export32.test.tmp.dll +# CHECK3-NEXT: Ordinal base: 1 +# CHECK3-NEXT: Ordinal RVA Name # CHECK3-NEXT: 5 0x1008 # CHECK3-NEXT: 6 0x1010 exportfn2 @@ -52,8 +47,9 @@ # 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: DLL name: export32.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 @@ -69,9 +65,9 @@ # 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: 1 0 +# CHECK5-NEXT: DLL name: export32.test.tmp.dll +# CHECK5-NEXT: Ordinal base: 1 +# CHECK5-NEXT: Ordinal RVA Name # CHECK5-NEXT: 2 0x1010 fn2 # CHECK5-NEXT: 3 0x1008 exportfn1 # CHECK5-NEXT: 4 0x1010 exportfn3 @@ -87,8 +83,9 @@ # 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: DLL name: export32.test.tmp.dll +# CHECK7-NEXT: Ordinal base: 1 +# CHECK7-NEXT: Ordinal RVA Name # CHECK7-NEXT: 1 0x1010 exportfn3 # CHECK7-NEXT: 2 0x1010 foo diff --git a/llvm/tools/llvm-objdump/COFFDump.cpp b/llvm/tools/llvm-objdump/COFFDump.cpp --- a/llvm/tools/llvm-objdump/COFFDump.cpp +++ b/llvm/tools/llvm-objdump/COFFDump.cpp @@ -545,12 +545,18 @@ outs() << " Ordinal base: " << OrdinalBase << "\n"; outs() << " Ordinal RVA Name\n"; for (; I != E; I = ++I) { - uint32_t Ordinal; - if (I->getOrdinal(Ordinal)) - return; uint32_t RVA; if (I->getExportRVA(RVA)) return; + StringRef Name; + if (I->getSymbolName(Name)) + continue; + if (!RVA && Name.empty()) + continue; + + uint32_t Ordinal; + if (I->getOrdinal(Ordinal)) + return; bool IsForwarder; if (I->isForwarder(IsForwarder)) return; @@ -564,9 +570,6 @@ outs() << format(" %5d %# 8x", Ordinal, RVA); } - StringRef Name; - if (I->getSymbolName(Name)) - continue; if (!Name.empty()) outs() << " " << Name; if (IsForwarder) {