summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-readobj/llvm-readobj.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-03-24 20:26:55 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-03-24 20:26:55 +0000
commit8448a243805dc7c850476ecd2a7fc58a763fa172 (patch)
tree92d45d172074aa0fa78a0eb9c9ca6fc737d197bd /llvm/tools/llvm-readobj/llvm-readobj.cpp
parentb2a2539cc7bcb69c5609f6ce799863711b80dad7 (diff)
downloadbcm5719-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.cpp17
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
OpenPOWER on IntegriCloud