summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Object/MachOUniversal.cpp
diff options
context:
space:
mode:
authorKevin Enderby <enderby@apple.com>2014-05-14 21:18:50 +0000
committerKevin Enderby <enderby@apple.com>2014-05-14 21:18:50 +0000
commite858a65323e1b3476ecda8b9a1c2677d165c5363 (patch)
treef44125cc2e25664e6c3b5e544c3d176aa60fba12 /llvm/lib/Object/MachOUniversal.cpp
parenta0653a3e6cbc820632050bdcf27704ac52fe0559 (diff)
downloadbcm5719-llvm-e858a65323e1b3476ecda8b9a1c2677d165c5363.tar.gz
bcm5719-llvm-e858a65323e1b3476ecda8b9a1c2677d165c5363.zip
Teach llvm-nm to know about fat archives (aka MachOUniversal files
containing archives). First step as other tools will be updated next. llvm-svn: 208812
Diffstat (limited to 'llvm/lib/Object/MachOUniversal.cpp')
-rw-r--r--llvm/lib/Object/MachOUniversal.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/lib/Object/MachOUniversal.cpp b/llvm/lib/Object/MachOUniversal.cpp
index 3f3731f22d8..5085efde5ec 100644
--- a/llvm/lib/Object/MachOUniversal.cpp
+++ b/llvm/lib/Object/MachOUniversal.cpp
@@ -14,6 +14,7 @@
#include "llvm/Object/MachOUniversal.h"
#include "llvm/Object/MachO.h"
#include "llvm/Object/ObjectFile.h"
+#include "llvm/Object/Archive.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Host.h"
#include "llvm/Support/MemoryBuffer.h"
@@ -90,6 +91,25 @@ error_code MachOUniversalBinary::ObjectForArch::getAsObjectFile(
return object_error::parse_failed;
}
+error_code MachOUniversalBinary::ObjectForArch::getAsArchive(
+ std::unique_ptr<Archive> &Result) const {
+ if (Parent) {
+ StringRef ParentData = Parent->getData();
+ StringRef ObjectData = ParentData.substr(Header.offset, Header.size);
+ std::string ObjectName =
+ Parent->getFileName().str() + ":" +
+ Triple::getArchTypeName(MachOObjectFile::getArch(Header.cputype));
+ MemoryBuffer *ObjBuffer = MemoryBuffer::getMemBuffer(
+ ObjectData, ObjectName, false);
+ ErrorOr<Archive *> Obj = Archive::create(ObjBuffer);
+ if (error_code EC = Obj.getError())
+ return EC;
+ Result.reset(Obj.get());
+ return object_error::success;
+ }
+ return object_error::parse_failed;
+}
+
void MachOUniversalBinary::anchor() { }
ErrorOr<MachOUniversalBinary *>
OpenPOWER on IntegriCloud