X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FObject%2FArchive.h;h=e5d59d832e31b13cac567a2f0bf611a2fb1c4915;hb=00552e3875ee5f382db6c98286a241a7d0efe1b8;hp=8da6919a46555cf515e8ab379c87f2bf47fcf9a1;hpb=cd52a7a381a73c53ec4ef517ad87f19808cb1a28;p=oota-llvm.git diff --git a/include/llvm/Object/Archive.h b/include/llvm/Object/Archive.h index 8da6919a465..e5d59d832e3 100644 --- a/include/llvm/Object/Archive.h +++ b/include/llvm/Object/Archive.h @@ -74,6 +74,7 @@ public: return Data.begin() < other.Data.begin(); } + const Archive *getParent() const { return Parent; } Child getNext() const; ErrorOr getName() const; @@ -94,9 +95,7 @@ public: /// \return the size in the archive header for this member. uint64_t getRawSize() const; - StringRef getBuffer() const { - return StringRef(Data.data() + StartOfFile, getSize()); - } + ErrorOr getBuffer() const; uint64_t getChildOffset() const; ErrorOr getMemoryBufferRef() const; @@ -183,6 +182,7 @@ public: }; Kind kind() const { return (Kind)Format; } + bool isThin() const { return IsThin; } child_iterator child_begin(bool SkipInternal = true) const; child_iterator child_end() const; @@ -207,6 +207,11 @@ public: bool hasSymbolTable() const; child_iterator getSymbolTableChild() const { return SymbolTable; } + StringRef getSymbolTable() const { + // We know that the symbol table is not an external file, + // so we just assert there is no error. + return *SymbolTable->getBuffer(); + } uint32_t getNumberOfSymbols() const; private: @@ -215,6 +220,7 @@ private: child_iterator FirstRegular; unsigned Format : 2; unsigned IsThin : 1; + mutable std::vector> ThinBuffers; }; }