summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-objdump/COFFDump.cpp
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2016-08-18 16:39:19 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2016-08-18 16:39:19 +0000
commitc6bf547564088ad0ba0b2f281ffa813974f66bda (patch)
treeb324aee5a585bf13f72204ffc556374ea4695d52 /llvm/tools/llvm-objdump/COFFDump.cpp
parent28671c83d6dc6221a5680b180e4ac9f41f26a50b (diff)
downloadbcm5719-llvm-c6bf547564088ad0ba0b2f281ffa813974f66bda.tar.gz
bcm5719-llvm-c6bf547564088ad0ba0b2f281ffa813974f66bda.zip
llvm-objdump: add coff import library symbol listing support
This adds behaviour similar to binutils' objdump which can show symbols in an import library. Differences from that stem around the fact that we do not create section symbols nor the all import import descriptor symbol reference. However, this does mean that the tool can serve as a possible replacement for the existing tool. llvm-svn: 279088
Diffstat (limited to 'llvm/tools/llvm-objdump/COFFDump.cpp')
-rw-r--r--llvm/tools/llvm-objdump/COFFDump.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/tools/llvm-objdump/COFFDump.cpp b/llvm/tools/llvm-objdump/COFFDump.cpp
index b7ab86024b4..e95de86f861 100644
--- a/llvm/tools/llvm-objdump/COFFDump.cpp
+++ b/llvm/tools/llvm-objdump/COFFDump.cpp
@@ -17,6 +17,7 @@
#include "llvm-objdump.h"
#include "llvm/Object/COFF.h"
+#include "llvm/Object/COFFImportFile.h"
#include "llvm/Object/ObjectFile.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/SourceMgr.h"
@@ -617,6 +618,29 @@ void llvm::printCOFFFileHeader(const object::ObjectFile *Obj) {
printExportTable(file);
}
+void llvm::printCOFFSymbolTable(const object::COFFImportFile *i) {
+ unsigned Index = 0;
+ bool IsCode = i->getCOFFImportHeader()->getType() == COFF::IMPORT_CODE;
+
+ for (const object::BasicSymbolRef &Sym : i->symbols()) {
+ std::string Name;
+ raw_string_ostream NS(Name);
+
+ Sym.printName(NS);
+ NS.flush();
+
+ outs() << "[" << format("%2d", Index) << "]"
+ << "(sec " << format("%2d", 0) << ")"
+ << "(fl 0x00)" // Flag bits, which COFF doesn't have.
+ << "(ty " << format("%3x", (IsCode && Index) ? 32 : 0) << ")"
+ << "(scl " << format("%3x", 0) << ") "
+ << "(nx " << 0 << ") "
+ << "0x" << format("%08x", 0) << " " << Name << '\n';
+
+ ++Index;
+ }
+}
+
void llvm::printCOFFSymbolTable(const COFFObjectFile *coff) {
for (unsigned SI = 0, SE = coff->getNumberOfSymbols(); SI != SE; ++SI) {
ErrorOr<COFFSymbolRef> Symbol = coff->getSymbol(SI);
OpenPOWER on IntegriCloud