diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-03-24 20:26:55 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-03-24 20:26:55 +0000 |
commit | 8448a243805dc7c850476ecd2a7fc58a763fa172 (patch) | |
tree | 92d45d172074aa0fa78a0eb9c9ca6fc737d197bd /llvm/tools/llvm-readobj/llvm-readobj.cpp | |
parent | b2a2539cc7bcb69c5609f6ce799863711b80dad7 (diff) | |
download | bcm5719-llvm-8448a243805dc7c850476ecd2a7fc58a763fa172.tar.gz bcm5719-llvm-8448a243805dc7c850476ecd2a7fc58a763fa172.zip |
[llvm-readobj] add support for macho universal binary.
Patch by Keyue Hu (Chilledheart)!
llvm-svn: 233107
Diffstat (limited to 'llvm/tools/llvm-readobj/llvm-readobj.cpp')
-rw-r--r-- | llvm/tools/llvm-readobj/llvm-readobj.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp index f8f3086d840..32db723fa6f 100644 --- a/llvm/tools/llvm-readobj/llvm-readobj.cpp +++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -25,6 +25,7 @@ #include "StreamWriter.h" #include "llvm/Object/Archive.h" #include "llvm/Object/ELFObjectFile.h" +#include "llvm/Object/MachOUniversal.h" #include "llvm/Object/ObjectFile.h" #include "llvm/Support/Casting.h" #include "llvm/Support/CommandLine.h" @@ -320,6 +321,19 @@ static void dumpArchive(const Archive *Arc) { } } +/// @brief Dumps each object file in \a MachO Universal Binary; +static void dumpMachOUniversalBinary(const MachOUniversalBinary *UBinary) { + for (const MachOUniversalBinary::ObjectForArch &Obj : UBinary->objects()) { + ErrorOr<std::unique_ptr<MachOObjectFile>> ObjOrErr = Obj.getAsObjectFile(); + if (std::error_code EC = ObjOrErr.getError()) { + reportError(UBinary->getFileName(), EC.message()); + continue; + } + + if (MachOObjectFile *MachOObj = ObjOrErr.get().get()) + dumpObject(MachOObj); + } +} /// @brief Opens \a File and dumps it. static void dumpInput(StringRef File) { @@ -339,6 +353,9 @@ static void dumpInput(StringRef File) { if (Archive *Arc = dyn_cast<Archive>(&Binary)) dumpArchive(Arc); + else if (MachOUniversalBinary *UBinary = + dyn_cast<MachOUniversalBinary>(&Binary)) + dumpMachOUniversalBinary(UBinary); else if (ObjectFile *Obj = dyn_cast<ObjectFile>(&Binary)) dumpObject(Obj); else |