diff options
author | Kevin Enderby <enderby@apple.com> | 2014-05-14 21:18:50 +0000 |
---|---|---|
committer | Kevin Enderby <enderby@apple.com> | 2014-05-14 21:18:50 +0000 |
commit | e858a65323e1b3476ecda8b9a1c2677d165c5363 (patch) | |
tree | f44125cc2e25664e6c3b5e544c3d176aa60fba12 /llvm/lib/Object/MachOUniversal.cpp | |
parent | a0653a3e6cbc820632050bdcf27704ac52fe0559 (diff) | |
download | bcm5719-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.cpp | 20 |
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 *> |