mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-18 11:24:01 +00:00
[llvm-readobj] add support for macho universal binary.
Patch by Keyue Hu (Chilledheart)! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233107 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user