From 6161b38dbc3ea873de87743c536a379031bdef89 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Tue, 12 Jan 2016 23:28:42 +0000 Subject: COFF: Teach llvm-objdump how to dump DLL forwarder symbols. llvm-svn: 257539 --- llvm/tools/llvm-objdump/COFFDump.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'llvm/tools/llvm-objdump/COFFDump.cpp') diff --git a/llvm/tools/llvm-objdump/COFFDump.cpp b/llvm/tools/llvm-objdump/COFFDump.cpp index f286351614a..5d21b3320e7 100644 --- a/llvm/tools/llvm-objdump/COFFDump.cpp +++ b/llvm/tools/llvm-objdump/COFFDump.cpp @@ -358,13 +358,30 @@ static void printExportTable(const COFFObjectFile *Obj) { uint32_t RVA; if (I->getExportRVA(RVA)) return; - outs() << format(" % 4d %# 8x", Ordinal, RVA); + bool IsForwarder; + if (I->isForwarder(IsForwarder)) + return; + + if (IsForwarder) { + // Export table entries can be used to re-export symbols that + // this COFF file is imported from some DLLs. This is rare. + // In most cases IsForwarder is false. + outs() << format(" % 4d ", Ordinal); + } else { + outs() << format(" % 4d %# 8x", Ordinal, RVA); + } StringRef Name; if (I->getSymbolName(Name)) continue; if (!Name.empty()) outs() << " " << Name; + if (IsForwarder) { + StringRef S; + if (I->getForwardTo(S)) + return; + outs() << " (forwarded to " << S << ")"; + } outs() << "\n"; } } -- cgit v1.2.3