1cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao//===- Archive.h ----------------------------------------------------------===// 2cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// 3cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// The MCLinker Project 4cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// 5cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// This file is distributed under the University of Illinois Open Source 6cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// License. See LICENSE.TXT for details. 7cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// 8cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef MCLD_LD_ARCHIVE_H_ 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define MCLD_LD_ARCHIVE_H_ 11cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/InputTree.h" 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/ADT/HashEntry.h" 1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/ADT/HashTable.h" 1537b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/ADT/StringHash.h" 1637b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/GCFactory.h" 17cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 18cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <string> 1937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include <vector> 20cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 23cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoclass Input; 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass InputBuilder; 2537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass InputFactory; 26cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 27cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao/** \class Archive 28cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao * \brief This class define the interfacee to Archive files 29cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao */ 3037b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass Archive { 3137b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 3237b74a387bb3993387029859c2d9d051c41c724eStephen Hines static const char MAGIC[]; ///< magic string 3337b74a387bb3993387029859c2d9d051c41c724eStephen Hines static const char THIN_MAGIC[]; ///< magic of thin archive 3437b74a387bb3993387029859c2d9d051c41c724eStephen Hines static const size_t MAGIC_LEN; ///< length of magic string 3537b74a387bb3993387029859c2d9d051c41c724eStephen Hines static const char SVR4_SYMTAB_NAME[]; ///< SVR4 symtab entry name 3637b74a387bb3993387029859c2d9d051c41c724eStephen Hines static const char IRIX6_SYMTAB_NAME[]; ///< Irix6 symtab entry name 3737b74a387bb3993387029859c2d9d051c41c724eStephen Hines static const char STRTAB_NAME[]; ///< Name of string table 3837b74a387bb3993387029859c2d9d051c41c724eStephen Hines static const char PAD[]; ///< inter-file align padding 3937b74a387bb3993387029859c2d9d051c41c724eStephen Hines static const char MEMBER_MAGIC[]; ///< fmag field magic # 4037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 4137b74a387bb3993387029859c2d9d051c41c724eStephen Hines struct MemberHeader { 42cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao char name[16]; ///< Name of the file member. 43cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao char date[12]; ///< File date, decimal seconds since Epoch 44cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao char uid[6]; ///< user id in ASCII decimal 45cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao char gid[6]; ///< group id in ASCII decimal 46cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao char mode[8]; ///< file mode in ASCII octal 47cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao char size[10]; ///< file size in ASCII decimal 48cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao char fmag[2]; ///< Always contains ARFILE_MAGIC_TERMINATOR 49cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao }; 50cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 5137b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 5237b74a387bb3993387029859c2d9d051c41c724eStephen Hines template <typename OFFSET_TYPE> 5337b74a387bb3993387029859c2d9d051c41c724eStephen Hines struct OffsetCompare { 5437b74a387bb3993387029859c2d9d051c41c724eStephen Hines bool operator()(OFFSET_TYPE X, OFFSET_TYPE Y) const { return (X == Y); } 55cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao }; 56cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 5737b74a387bb3993387029859c2d9d051c41c724eStephen Hines struct MurmurHash3 { 5837b74a387bb3993387029859c2d9d051c41c724eStephen Hines size_t operator()(uint32_t pKey) const { 5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao pKey ^= pKey >> 16; 6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao pKey *= 0x85ebca6b; 6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao pKey ^= pKey >> 13; 6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao pKey *= 0xc2b2ae35; 6322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao pKey ^= pKey >> 16; 6422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return pKey; 65cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao } 66cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao }; 67cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 6837b74a387bb3993387029859c2d9d051c41c724eStephen Hines typedef HashEntry<uint32_t, InputTree::iterator, OffsetCompare<uint32_t> > 6937b74a387bb3993387029859c2d9d051c41c724eStephen Hines ObjectMemberEntryType; 7037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 7137b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 72cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao typedef HashTable<ObjectMemberEntryType, 73cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao MurmurHash3, 74cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao EntryFactory<ObjectMemberEntryType> > ObjectMemberMapType; 75cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 7637b74a387bb3993387029859c2d9d051c41c724eStephen Hines struct ArchiveMember { 77cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Input* file; 78cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao InputTree::iterator lastPos; 79cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao InputTree::Mover* move; 80cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao }; 81cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 8237b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 83cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao typedef HashEntry<const llvm::StringRef, 84cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ArchiveMember, 8537b74a387bb3993387029859c2d9d051c41c724eStephen Hines hash::StringCompare<llvm::StringRef> > 8637b74a387bb3993387029859c2d9d051c41c724eStephen Hines ArchiveMemberEntryType; 87cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 8837b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 89cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao typedef HashTable<ArchiveMemberEntryType, 9087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines hash::StringHash<hash::DJB>, 91cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao EntryFactory<ArchiveMemberEntryType> > ArchiveMemberMapType; 92cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 9337b74a387bb3993387029859c2d9d051c41c724eStephen Hines struct Symbol { 9437b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 9537b74a387bb3993387029859c2d9d051c41c724eStephen Hines enum Status { Include, Exclude, Unknown }; 9637b74a387bb3993387029859c2d9d051c41c724eStephen Hines 9737b74a387bb3993387029859c2d9d051c41c724eStephen Hines Symbol(const char* pName, uint32_t pOffset, enum Status pStatus) 9837b74a387bb3993387029859c2d9d051c41c724eStephen Hines : name(pName), fileOffset(pOffset), status(pStatus) {} 9937b74a387bb3993387029859c2d9d051c41c724eStephen Hines 10037b74a387bb3993387029859c2d9d051c41c724eStephen Hines ~Symbol() {} 10137b74a387bb3993387029859c2d9d051c41c724eStephen Hines 10237b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 103cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao std::string name; 104cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao uint32_t fileOffset; 105cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao enum Status status; 106cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao }; 107cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 108cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao typedef std::vector<Symbol*> SymTabType; 109cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 11037b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 11122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Archive(Input& pInputFile, InputBuilder& pBuilder); 112cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 113cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ~Archive(); 114cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 115cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getARFile - get the Input& of the archive file 116cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Input& getARFile(); 117cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 118cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getARFile - get the Input& of the archive file 119cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const Input& getARFile() const; 120cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 121cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// inputs - get the input tree built from this archive 122cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao InputTree& inputs(); 123cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 124cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// inputs - get the input tree built from this archive 125cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const InputTree& inputs() const; 126cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 127cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getObjectMemberMap - get the map that contains the included object files 128cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ObjectMemberMapType& getObjectMemberMap(); 129cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 130cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getObjectMemberMap - get the map that contains the included object files 131cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const ObjectMemberMapType& getObjectMemberMap() const; 132cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 133cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// numOfObjectMember - return the number of included object files 134cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao size_t numOfObjectMember() const; 135cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 136cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// addObjectMember - add a object in the object member map 137cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pFileOffset - file offset in symtab represents a object file 138cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pIter - the iterator in the input tree built from this archive 139cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao bool addObjectMember(uint32_t pFileOffset, InputTree::iterator pIter); 140cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 141cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// hasObjectMember - check if a object file is included or not 142cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pFileOffset - file offset in symtab represents a object file 143cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao bool hasObjectMember(uint32_t pFileOffset) const; 144cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 145cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getArchiveMemberMap - get the map that contains the included archive files 146cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ArchiveMemberMapType& getArchiveMemberMap(); 147cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 148cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getArchiveMemberMap - get the map that contains the included archive files 149cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const ArchiveMemberMapType& getArchiveMemberMap() const; 150cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 151cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// addArchiveMember - add an archive in the archive member map 152cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pName - the name of the new archive member 153cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pLastPos - this records the point to insert the next node in the 154cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// subtree of this archive member 155cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pMove - this records the direction to insert the next node in 156cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// the subtree of this archive member 157cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao bool addArchiveMember(const llvm::StringRef& pName, 158cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao InputTree::iterator pLastPos, 159cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao InputTree::Mover* pMove); 160cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 161cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// hasArchiveMember - check if an archive file is included or not 162cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao bool hasArchiveMember(const llvm::StringRef& pName) const; 163cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 164cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getArchiveMember - get a archive member 165cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ArchiveMember* getArchiveMember(const llvm::StringRef& pName); 166cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 167cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getSymbolTable - get the symtab 168cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao SymTabType& getSymbolTable(); 169cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 170cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getSymbolTable - get the symtab 171cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const SymTabType& getSymbolTable() const; 172cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 173cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// setSymTabSize - set the memory size of symtab 174cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void setSymTabSize(size_t pSize); 175cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 176cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getSymTabSize - get the memory size of symtab 177cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao size_t getSymTabSize() const; 178cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 179cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// numOfSymbols - return the number of symbols in symtab 180cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao size_t numOfSymbols() const; 181cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 182cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// addSymbol - add a symtab entry to symtab 183cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pName - symbol name 184cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pFileOffset - file offset in symtab represents a object file 18537b74a387bb3993387029859c2d9d051c41c724eStephen Hines void addSymbol(const char* pName, 18637b74a387bb3993387029859c2d9d051c41c724eStephen Hines uint32_t pFileOffset, 18737b74a387bb3993387029859c2d9d051c41c724eStephen Hines enum Symbol::Status pStatus = Archive::Symbol::Unknown); 188cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 189cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getSymbolName - get the symbol name with the given index 190cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const std::string& getSymbolName(size_t pSymIdx) const; 191cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 192cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getObjFileOffset - get the file offset that represent a object file 193cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao uint32_t getObjFileOffset(size_t pSymIdx) const; 194cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 195cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getSymbolStatus - get the status of a symbol 196cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao enum Symbol::Status getSymbolStatus(size_t pSymIdx) const; 197cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 198cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// setSymbolStatus - set the status of a symbol 199cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void setSymbolStatus(size_t pSymIdx, enum Symbol::Status pStatus); 200cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 201cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getStrTable - get the extended name table 202cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao std::string& getStrTable(); 203cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 204cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getStrTable - get the extended name table 205cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const std::string& getStrTable() const; 206cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 20722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// hasStrTable - return true if this archive has extended name table 20822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool hasStrTable() const; 20922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 21022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// getMemberFile - get the member file in an archive member 21122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// @param pArchiveFile - Input reference of the archive member 21222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// @param pIsThinAR - denote the archive menber is a Thin Archive or not 21322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// @param pName - the name of the member file we want to get 21422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// @param pPath - the path of the member file 21522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// @param pFileOffset - the file offset of the member file in a regular AR 21622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Input* getMemberFile(Input& pArchiveFile, 21722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool isThinAR, 21822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const std::string& pName, 21922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const sys::fs::Path& pPath, 22022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao off_t pFileOffset = 0); 22122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 22237b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 223cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao typedef GCFactory<Symbol, 0> SymbolFactory; 224cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 22537b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 226cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Input& m_ArchiveFile; 22737b74a387bb3993387029859c2d9d051c41c724eStephen Hines InputTree* m_pInputTree; 228cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ObjectMemberMapType m_ObjectMemberMap; 229cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ArchiveMemberMapType m_ArchiveMemberMap; 230cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao SymbolFactory m_SymbolFactory; 231cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao SymTabType m_SymTab; 232cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao size_t m_SymTabSize; 233cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao std::string m_StrTab; 23422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao InputBuilder& m_Builder; 235cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao}; 236cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 23737b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 238cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 23937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif // MCLD_LD_ARCHIVE_H_ 240