diff options
Diffstat (limited to 'llvm/tools/llvm-objdump/COFFDump.cpp')
-rw-r--r-- | llvm/tools/llvm-objdump/COFFDump.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/llvm/tools/llvm-objdump/COFFDump.cpp b/llvm/tools/llvm-objdump/COFFDump.cpp index 7ca5d04593f..7a437b1be9a 100644 --- a/llvm/tools/llvm-objdump/COFFDump.cpp +++ b/llvm/tools/llvm-objdump/COFFDump.cpp @@ -16,6 +16,7 @@ //===----------------------------------------------------------------------===// #include "llvm-objdump.h" +#include "llvm/Demangle/Demangle.h" #include "llvm/Object/COFF.h" #include "llvm/Object/COFFImportFile.h" #include "llvm/Object/ObjectFile.h" @@ -646,10 +647,24 @@ void llvm::printCOFFSymbolTable(const COFFObjectFile *coff) { << "(sec " << format("%2d", int(Symbol->getSectionNumber())) << ")" << "(fl 0x00)" // Flag bits, which COFF doesn't have. << "(ty " << format("%3x", unsigned(Symbol->getType())) << ")" - << "(scl " << format("%3x", unsigned(Symbol->getStorageClass())) << ") " + << "(scl " << format("%3x", unsigned(Symbol->getStorageClass())) + << ") " << "(nx " << unsigned(Symbol->getNumberOfAuxSymbols()) << ") " << "0x" << format("%08x", unsigned(Symbol->getValue())) << " " - << Name << "\n"; + << Name; + if (Demangle && Name.startswith("?")) { + char *DemangledSymbol = nullptr; + size_t Size = 0; + int Status = -1; + DemangledSymbol = + microsoftDemangle(Name.data(), DemangledSymbol, &Size, &Status); + + if (Status == 0 && DemangledSymbol) { + outs() << " (" << StringRef(DemangledSymbol) << ")"; + std::free(DemangledSymbol); + } + } + outs() << "\n"; for (unsigned AI = 0, AE = Symbol->getNumberOfAuxSymbols(); AI < AE; ++AI, ++SI) { if (Symbol->isSectionDefinition()) { |