diff options
author | Zachary Turner <zturner@google.com> | 2018-08-20 22:18:21 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2018-08-20 22:18:21 +0000 |
commit | 030ad37ef46a298287da6a5c78d62d54e2d77599 (patch) | |
tree | f07c8d6f4b5a1c87f3a1b46b4afdc83db27fa735 /llvm/tools/llvm-objdump/COFFDump.cpp | |
parent | 79d50a04c060af23642cc1f290299defb3032405 (diff) | |
download | bcm5719-llvm-030ad37ef46a298287da6a5c78d62d54e2d77599.tar.gz bcm5719-llvm-030ad37ef46a298287da6a5c78d62d54e2d77599.zip |
[llvm-objdump] Add ability to demangle COFF symbols.
llvm-svn: 340221
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()) { |