diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2016-08-18 16:39:19 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2016-08-18 16:39:19 +0000 |
commit | c6bf547564088ad0ba0b2f281ffa813974f66bda (patch) | |
tree | b324aee5a585bf13f72204ffc556374ea4695d52 /llvm/tools/llvm-objdump/COFFDump.cpp | |
parent | 28671c83d6dc6221a5680b180e4ac9f41f26a50b (diff) | |
download | bcm5719-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.cpp | 24 |
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); |