diff options
author | Robert Widmann <devteam.codafi@gmail.com> | 2019-05-25 16:47:27 +0000 |
---|---|---|
committer | Robert Widmann <devteam.codafi@gmail.com> | 2019-05-25 16:47:27 +0000 |
commit | b0fd12b689297dfb3bb70a6d5dfabb6bebf93ed1 (patch) | |
tree | 5beb6c14152f2a342d30e92dafb252be0d0fee7b /llvm/lib/Object/Object.cpp | |
parent | d87eceda0e6d5de6b2d58430a0124b6f7428695d (diff) | |
download | bcm5719-llvm-b0fd12b689297dfb3bb70a6d5dfabb6bebf93ed1.tar.gz bcm5719-llvm-b0fd12b689297dfb3bb70a6d5dfabb6bebf93ed1.zip |
[LLVM-C] Add Accessor for Mach-O Universal Binary Slices
Summary: Allow for retrieving an object file corresponding to an architecture-specific slice in a Mach-O universal binary file.
Reviewers: whitequark, deadalnix
Reviewed By: whitequark
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D60378
llvm-svn: 361705
Diffstat (limited to 'llvm/lib/Object/Object.cpp')
-rw-r--r-- | llvm/lib/Object/Object.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Object/Object.cpp b/llvm/lib/Object/Object.cpp index e2511b7aed0..d84798cc6dd 100644 --- a/llvm/lib/Object/Object.cpp +++ b/llvm/lib/Object/Object.cpp @@ -15,6 +15,7 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/IR/LLVMContext.h" #include "llvm/Object/ObjectFile.h" +#include "llvm/Object/MachOUniversal.h" using namespace llvm; using namespace object; @@ -131,6 +132,20 @@ LLVMBinaryType LLVMBinaryGetType(LLVMBinaryRef BR) { return BinaryTypeMapper::mapBinaryTypeToLLVMBinaryType(unwrap(BR)->getType()); } +LLVMBinaryRef LLVMMachOUniversalBinaryCopyObjectForArch(LLVMBinaryRef BR, + const char *Arch, + size_t ArchLen, + char **ErrorMessage) { + auto universal = cast<MachOUniversalBinary>(unwrap(BR)); + Expected<std::unique_ptr<ObjectFile>> ObjOrErr( + universal->getObjectForArch({Arch, ArchLen})); + if (!ObjOrErr) { + *ErrorMessage = strdup(toString(ObjOrErr.takeError()).c_str()); + return nullptr; + } + return wrap(ObjOrErr.get().release()); +} + LLVMSectionIteratorRef LLVMObjectFileCopySectionIterator(LLVMBinaryRef BR) { auto OF = cast<ObjectFile>(unwrap(BR)); auto sections = OF->sections(); |