X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FObject%2FMachOUniversal.h;h=93f665438821ac378ad5c7f94eed3cbfecab69f4;hb=f23883936ce24b16df2ee86559f6d24f51faecb6;hp=57432826b8c9edeed4c114f91db82711adc974e5;hpb=f69a29b23a116a3520f185054290c445abf9aa62;p=oota-llvm.git diff --git a/include/llvm/Object/MachOUniversal.h b/include/llvm/Object/MachOUniversal.h index 57432826b8c..93f66543882 100644 --- a/include/llvm/Object/MachOUniversal.h +++ b/include/llvm/Object/MachOUniversal.h @@ -14,17 +14,17 @@ #ifndef LLVM_OBJECT_MACHOUNIVERSAL_H #define LLVM_OBJECT_MACHOUNIVERSAL_H -#include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/Triple.h" +#include "llvm/Object/Archive.h" #include "llvm/Object/Binary.h" -#include "llvm/Object/MachOFormat.h" +#include "llvm/Object/MachO.h" +#include "llvm/Support/ErrorOr.h" +#include "llvm/Support/MachO.h" namespace llvm { namespace object { -class ObjectFile; - class MachOUniversalBinary : public Binary { virtual void anchor(); @@ -35,13 +35,13 @@ public: /// \brief Index of object in the universal binary. uint32_t Index; /// \brief Descriptor of the object. - macho::FatArchHeader Header; + MachO::fat_arch Header; public: ObjectForArch(const MachOUniversalBinary *Parent, uint32_t Index); void clear() { - Parent = 0; + Parent = nullptr; Index = 0; } @@ -50,9 +50,19 @@ public: } ObjectForArch getNext() const { return ObjectForArch(Parent, Index + 1); } - uint32_t getCPUType() const { return Header.CPUType; } + uint32_t getCPUType() const { return Header.cputype; } + uint32_t getCPUSubType() const { return Header.cpusubtype; } + uint32_t getOffset() const { return Header.offset; } + uint32_t getSize() const { return Header.size; } + uint32_t getAlign() const { return Header.align; } + std::string getArchTypeName() const { + Triple T = MachOObjectFile::getArch(Header.cputype, Header.cpusubtype); + return T.getArchName(); + } + + ErrorOr> getAsObjectFile() const; - error_code getAsObjectFile(OwningPtr &Result) const; + ErrorOr> getAsArchive() const; }; class object_iterator { @@ -76,13 +86,15 @@ public: } }; - MachOUniversalBinary(MemoryBuffer *Source, error_code &ec); + MachOUniversalBinary(MemoryBufferRef Souce, std::error_code &EC); + static ErrorOr> + create(MemoryBufferRef Source); object_iterator begin_objects() const { return ObjectForArch(this, 0); } object_iterator end_objects() const { - return ObjectForArch(0, 0); + return ObjectForArch(nullptr, 0); } uint32_t getNumberOfObjects() const { return NumberOfObjects; } @@ -92,8 +104,8 @@ public: return V->isMachOUniversalBinary(); } - error_code getObjectForArch(Triple::ArchType Arch, - OwningPtr &Result) const; + ErrorOr> + getObjectForArch(Triple::ArchType Arch) const; }; }