diff options
author | Sam Clegg <sbc@chromium.org> | 2017-04-14 19:50:44 +0000 |
---|---|---|
committer | Sam Clegg <sbc@chromium.org> | 2017-04-14 19:50:44 +0000 |
commit | 135a4b8ea1cdba8b7ee28782be21e7c172700d43 (patch) | |
tree | 3c10e7340111cde2533e72de036d742150904174 /llvm/tools/llvm-nm/llvm-nm.cpp | |
parent | 7cfe41659c15c911129e2229b8ab460886886bf0 (diff) | |
download | bcm5719-llvm-135a4b8ea1cdba8b7ee28782be21e7c172700d43.tar.gz bcm5719-llvm-135a4b8ea1cdba8b7ee28782be21e7c172700d43.zip |
[WebAssembly] Improve readobj and nm support for wasm
Now that the libObect support for wasm is better we can
have readobj and nm produce more useful output too.
Differential Revision: https://reviews.llvm.org/D31514
llvm-svn: 300365
Diffstat (limited to 'llvm/tools/llvm-nm/llvm-nm.cpp')
-rw-r--r-- | llvm/tools/llvm-nm/llvm-nm.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index 2bdda318ebf..a07fcef35eb 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -29,6 +29,7 @@ #include "llvm/Object/MachO.h" #include "llvm/Object/MachOUniversal.h" #include "llvm/Object/ObjectFile.h" +#include "llvm/Object/Wasm.h" #include "llvm/Support/COFF.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/FileSystem.h" @@ -270,6 +271,8 @@ static char isSymbolList64Bit(SymbolicFile &Obj) { return Triple(IRObj->getTargetTriple()).isArch64Bit(); if (isa<COFFObjectFile>(Obj)) return false; + if (isa<WasmObjectFile>(Obj)) + return false; if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(&Obj)) return MachO->is64Bit(); return cast<ELFObjectFileBase>(Obj).getBytesInAddress() == 8; @@ -883,6 +886,13 @@ static char getSymbolNMTypeChar(MachOObjectFile &Obj, basic_symbol_iterator I) { return '?'; } +static char getSymbolNMTypeChar(WasmObjectFile &Obj, basic_symbol_iterator I) { + uint32_t Flags = I->getFlags(); + if (Flags & SymbolRef::SF_Executable) + return 't'; + return 'd'; +} + static char getSymbolNMTypeChar(IRObjectFile &Obj, basic_symbol_iterator I) { uint32_t Flags = I->getFlags(); // FIXME: should we print 'b'? At the IR level we cannot be sure if this @@ -924,6 +934,8 @@ static char getNMTypeChar(SymbolicFile &Obj, basic_symbol_iterator I) { Ret = getSymbolNMTypeChar(*COFF, I); else if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(&Obj)) Ret = getSymbolNMTypeChar(*MachO, I); + else if (WasmObjectFile *Wasm = dyn_cast<WasmObjectFile>(&Obj)) + Ret = getSymbolNMTypeChar(*Wasm, I); else Ret = getSymbolNMTypeChar(cast<ELFObjectFileBase>(Obj), I); |