llvm-readobj: teach it to handle MachO Universal Archive correctly

Patch by Chilledheart (rwindz0@gmail.com).

Reviewed By: rafael

Differential Revision: http://reviews.llvm.org/D8773

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234758 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Blaikie
2015-04-13 16:05:49 +00:00
parent 79ccb55981
commit 2d35a46ea5
3 changed files with 162 additions and 7 deletions

View File

@@ -325,13 +325,12 @@ static void dumpArchive(const Archive *Arc) {
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);
if (ObjOrErr)
dumpObject(&*ObjOrErr.get());
else if (ErrorOr<std::unique_ptr<Archive>> AOrErr = Obj.getAsArchive())
dumpArchive(&*AOrErr.get());
else
reportError(UBinary->getFileName(), ObjOrErr.getError().message());
}
}