diff options
author | Cyndy Ishida <cyndy_ishida@apple.com> | 2019-09-11 00:00:53 +0000 |
---|---|---|
committer | Cyndy Ishida <cyndy_ishida@apple.com> | 2019-09-11 00:00:53 +0000 |
commit | f88f46358dbffa20af3b054a9346e5154789d50f (patch) | |
tree | 1d7d8f81728b921b5d9a497842bc2a60c7b1dffe /llvm/tools/llvm-nm/llvm-nm.cpp | |
parent | 8b83f50c034d1a48785e233874f621106c6f22a3 (diff) | |
download | bcm5719-llvm-f88f46358dbffa20af3b054a9346e5154789d50f.tar.gz bcm5719-llvm-f88f46358dbffa20af3b054a9346e5154789d50f.zip |
[llvm-nm] Add tapi file support
Summary:
This commit is the final one for adding tapi support to the llvm-nm implementation.
This commit also has accompanying tests the additions to lib/Object
Reviewers: ributzka, steven_wu
Reviewed By: ributzka
Subscribers: hiraditya, plotfi, dexonsmith, rupprecht, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D66160
llvm-svn: 371576
Diffstat (limited to 'llvm/tools/llvm-nm/llvm-nm.cpp')
-rw-r--r-- | llvm/tools/llvm-nm/llvm-nm.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index ee55722dc13..fafefb6084b 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -28,6 +28,8 @@ #include "llvm/Object/MachO.h" #include "llvm/Object/MachOUniversal.h" #include "llvm/Object/ObjectFile.h" +#include "llvm/Object/TapiFile.h" +#include "llvm/Object/TapiUniversal.h" #include "llvm/Object/Wasm.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/FileSystem.h" @@ -336,6 +338,8 @@ static char isSymbolList64Bit(SymbolicFile &Obj) { return false; if (isa<WasmObjectFile>(Obj)) return false; + if (TapiFile *Tapi = dyn_cast<TapiFile>(&Obj)) + return Tapi->is64Bit(); if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(&Obj)) return MachO->is64Bit(); return cast<ELFObjectFileBase>(Obj).getBytesInAddress() == 8; @@ -1041,6 +1045,10 @@ static char getSymbolNMTypeChar(MachOObjectFile &Obj, basic_symbol_iterator I) { return '?'; } +static char getSymbolNMTypeChar(TapiFile &Obj, basic_symbol_iterator I) { + return 's'; +} + static char getSymbolNMTypeChar(WasmObjectFile &Obj, basic_symbol_iterator I) { uint32_t Flags = I->getFlags(); if (Flags & SymbolRef::SF_Executable) @@ -1133,6 +1141,8 @@ static char getNMSectionTagAndName(SymbolicFile &Obj, basic_symbol_iterator I, Ret = getSymbolNMTypeChar(*MachO, I); else if (WasmObjectFile *Wasm = dyn_cast<WasmObjectFile>(&Obj)) Ret = getSymbolNMTypeChar(*Wasm, I); + else if (TapiFile *Tapi = dyn_cast<TapiFile>(&Obj)) + Ret = getSymbolNMTypeChar(*Tapi, I); else Ret = getSymbolNMTypeChar(cast<ELFObjectFileBase>(Obj), I); @@ -2063,6 +2073,26 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { } return; } + + if (TapiUniversal *TU = dyn_cast<TapiUniversal>(&Bin)) { + for (auto &I : TU->objects()) { + auto ObjOrErr = I.getAsObjectFile(); + if (ObjOrErr) { + auto &Obj = *ObjOrErr.get(); + outs() << "\n" + << Obj.getFileName() << " (for architecture " + << I.getArchFlagName() << ")" + << ":\n"; + dumpSymbolNamesFromObject(Obj, false, {}, I.getArchFlagName()); + } else if (auto E = + isNotObjectErrorInvalidFileType(ObjOrErr.takeError())) { + error(std::move(E), Filename, I.getArchFlagName()); + } + } + + return; + } + if (SymbolicFile *O = dyn_cast<SymbolicFile>(&Bin)) { if (!MachOPrintSizeWarning && PrintSize && isa<MachOObjectFile>(O)) { WithColor::warning(errs(), ToolName) |