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//===----------------------------------------------------------------------===// 9cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#ifndef MCLD_ARCHIVE_H 10cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#define MCLD_ARCHIVE_H 11cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#ifdef ENABLE_UNITTEST 12cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <gtest.h> 13cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#endif 14cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 15cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <mcld/ADT/HashEntry.h> 16cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <mcld/ADT/HashTable.h> 17cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <mcld/ADT/StringHash.h> 18cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <mcld/Support/GCFactory.h> 19cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <mcld/MC/InputTree.h> 20cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 21cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <vector> 22cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <string> 23cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 24cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaonamespace mcld 25cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao{ 26cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoclass InputTree; 27cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoclass Input; 28cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 29cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao/** \class Archive 30cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao * \brief This class define the interfacee to Archive files 31cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao */ 32cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoclass Archive 33cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao{ 34cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaopublic: 35cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao static const char MAGIC[]; ///< magic string 36cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao static const char THIN_MAGIC[]; ///< magic of thin archive 37cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao static const size_t MAGIC_LEN; ///< length of magic string 38cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao static const char SVR4_SYMTAB_NAME[]; ///< SVR4 symtab entry name 39cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao static const char STRTAB_NAME[]; ///< Name of string table 40cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao static const char PAD[]; ///< inter-file align padding 41cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao static const char MEMBER_MAGIC[]; ///< fmag field magic # 42cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 43cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao struct MemberHeader 44cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao { 45cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao char name[16]; ///< Name of the file member. 46cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao char date[12]; ///< File date, decimal seconds since Epoch 47cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao char uid[6]; ///< user id in ASCII decimal 48cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao char gid[6]; ///< group id in ASCII decimal 49cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao char mode[8]; ///< file mode in ASCII octal 50cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao char size[10]; ///< file size in ASCII decimal 51cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao char fmag[2]; ///< Always contains ARFILE_MAGIC_TERMINATOR 52cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao }; 53cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 54cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoprivate: 55cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao template<typename OFFSET_TYPE> 56cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao struct OffsetCompare 57cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao { 58cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao bool operator()(OFFSET_TYPE X, OFFSET_TYPE Y) const 59cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao { return (X == Y); } 60cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao }; 61cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 62cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao struct MurmurHash3 63cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao { 64cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao size_t operator()(uint32_t pKey) const 65cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao { 66cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao size_t h; 67cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao h ^= h >> 16; 68cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao h *= 0x85ebca6b; 69cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao h ^= h >> 13; 70cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao h *= 0xc2b2ae35; 71cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao h ^= h >> 16; 72cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao return h; 73cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao } 74cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao }; 75cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 76cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao typedef HashEntry<uint32_t, 77cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao InputTree::iterator, 78cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao OffsetCompare<uint32_t> > ObjectMemberEntryType; 79cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaopublic: 80cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao typedef HashTable<ObjectMemberEntryType, 81cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao MurmurHash3, 82cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao EntryFactory<ObjectMemberEntryType> > ObjectMemberMapType; 83cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 84cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao struct ArchiveMember 85cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao { 86cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Input* file; 87cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao InputTree::iterator lastPos; 88cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao InputTree::Mover* move; 89cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao }; 90cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 91cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoprivate: 92cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao typedef HashEntry<const llvm::StringRef, 93cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ArchiveMember, 94cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao StringCompare<llvm::StringRef> > ArchiveMemberEntryType; 95cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 96cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaopublic: 97cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao typedef HashTable<ArchiveMemberEntryType, 98cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao StringHash<ELF>, 99cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao EntryFactory<ArchiveMemberEntryType> > ArchiveMemberMapType; 100cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 101cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao struct Symbol 102cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao { 103cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao public: 104cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao enum Status 105cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao { 106cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Include, 107cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Exclude, 108cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Unknown 109cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao }; 110cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 111cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Symbol(const char* pName, 112cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao uint32_t pOffset, 113cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao enum Status pStatus) 114cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao : name(pName), fileOffset(pOffset), status(pStatus) 115cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao {} 116cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 117cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ~Symbol() 118cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao {} 119cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 120cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao public: 121cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao std::string name; 122cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao uint32_t fileOffset; 123cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao enum Status status; 124cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao }; 125cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 126cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao typedef std::vector<Symbol*> SymTabType; 127cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 128cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaopublic: 129cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Archive(Input& pInputFile, InputFactory& pInputFactory); 130cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 131cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ~Archive(); 132cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 133cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getARFile - get the Input& of the archive file 134cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Input& getARFile(); 135cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 136cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getARFile - get the Input& of the archive file 137cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const Input& getARFile() const; 138cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 139cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// inputs - get the input tree built from this archive 140cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao InputTree& inputs(); 141cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 142cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// inputs - get the input tree built from this archive 143cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const InputTree& inputs() const; 144cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 145cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getObjectMemberMap - get the map that contains the included object files 146cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ObjectMemberMapType& getObjectMemberMap(); 147cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 148cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getObjectMemberMap - get the map that contains the included object files 149cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const ObjectMemberMapType& getObjectMemberMap() const; 150cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 151cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// numOfObjectMember - return the number of included object files 152cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao size_t numOfObjectMember() const; 153cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 154cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// addObjectMember - add a object in the object member map 155cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pFileOffset - file offset in symtab represents a object file 156cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pIter - the iterator in the input tree built from this archive 157cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao bool addObjectMember(uint32_t pFileOffset, InputTree::iterator pIter); 158cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 159cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// hasObjectMember - check if a object file is included or not 160cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pFileOffset - file offset in symtab represents a object file 161cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao bool hasObjectMember(uint32_t pFileOffset) const; 162cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 163cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getArchiveMemberMap - get the map that contains the included archive files 164cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ArchiveMemberMapType& getArchiveMemberMap(); 165cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 166cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getArchiveMemberMap - get the map that contains the included archive files 167cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const ArchiveMemberMapType& getArchiveMemberMap() const; 168cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 169cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// addArchiveMember - add an archive in the archive member map 170cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pName - the name of the new archive member 171cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pLastPos - this records the point to insert the next node in the 172cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// subtree of this archive member 173cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pMove - this records the direction to insert the next node in 174cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// the subtree of this archive member 175cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao bool addArchiveMember(const llvm::StringRef& pName, 176cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao InputTree::iterator pLastPos, 177cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao InputTree::Mover* pMove); 178cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 179cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// hasArchiveMember - check if an archive file is included or not 180cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao bool hasArchiveMember(const llvm::StringRef& pName) const; 181cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 182cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getArchiveMember - get a archive member 183cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ArchiveMember* getArchiveMember(const llvm::StringRef& pName); 184cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 185cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getSymbolTable - get the symtab 186cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao SymTabType& getSymbolTable(); 187cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 188cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getSymbolTable - get the symtab 189cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const SymTabType& getSymbolTable() const; 190cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 191cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// setSymTabSize - set the memory size of symtab 192cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void setSymTabSize(size_t pSize); 193cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 194cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getSymTabSize - get the memory size of symtab 195cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao size_t getSymTabSize() const; 196cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 197cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// numOfSymbols - return the number of symbols in symtab 198cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao size_t numOfSymbols() const; 199cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 200cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// addSymbol - add a symtab entry to symtab 201cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pName - symbol name 202cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// @param pFileOffset - file offset in symtab represents a object file 203cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void 204cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao addSymbol(const char* pName, 205cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao uint32_t pFileOffset, 206cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao enum Symbol::Status pStatus = Archive::Symbol::Unknown); 207cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 208cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getSymbolName - get the symbol name with the given index 209cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const std::string& getSymbolName(size_t pSymIdx) const; 210cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 211cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getObjFileOffset - get the file offset that represent a object file 212cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao uint32_t getObjFileOffset(size_t pSymIdx) const; 213cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 214cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getSymbolStatus - get the status of a symbol 215cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao enum Symbol::Status getSymbolStatus(size_t pSymIdx) const; 216cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 217cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// setSymbolStatus - set the status of a symbol 218cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void setSymbolStatus(size_t pSymIdx, enum Symbol::Status pStatus); 219cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 220cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getStrTable - get the extended name table 221cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao std::string& getStrTable(); 222cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 223cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao /// getStrTable - get the extended name table 224cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const std::string& getStrTable() const; 225cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 226cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoprivate: 227cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao typedef GCFactory<Symbol, 0> SymbolFactory; 228cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 229cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoprivate: 230cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Input& m_ArchiveFile; 231cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao InputTree *m_pInputTree; 232cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ObjectMemberMapType m_ObjectMemberMap; 233cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ArchiveMemberMapType m_ArchiveMemberMap; 234cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao SymbolFactory m_SymbolFactory; 235cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao SymTabType m_SymTab; 236cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao size_t m_SymTabSize; 237cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao std::string m_StrTab; 238cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao}; 239cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 240cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao} // namespace of mcld 241cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 242cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#endif 243cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 244