74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===- SectionSymbolSet.h -------------------------------------------------===//
 | |
| //
 | |
| //                     The MCLinker Project
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| #ifndef MCLD_LD_SECTIONSYMBOLSET_H_
 | |
| #define MCLD_LD_SECTIONSYMBOLSET_H_
 | |
| 
 | |
| #include "mcld/ADT/HashTable.h"
 | |
| #include "mcld/ADT/HashEntry.h"
 | |
| #include "mcld/MC/SymbolCategory.h"
 | |
| 
 | |
| namespace mcld {
 | |
| 
 | |
| class LDSection;
 | |
| class NamePool;
 | |
| class LDSymbol;
 | |
| 
 | |
| /** \class SectionSymbolSet
 | |
|  *  \brief SectionSymbolSet contains the section symbols defined by linker for
 | |
|  *   the output sections
 | |
|  */
 | |
| class SectionSymbolSet {
 | |
|  public:
 | |
|   typedef SymbolCategory SymbolTable;
 | |
| 
 | |
|  public:
 | |
|   SectionSymbolSet();
 | |
|   ~SectionSymbolSet();
 | |
| 
 | |
|   /// add - create and add an section symbol for the output
 | |
|   /// LDSection
 | |
|   bool add(LDSection& pOutSect, NamePool& pNamePool);
 | |
| 
 | |
|   /// finalize - set section symbols' fragmentRef and push it into the output
 | |
|   /// symbol table
 | |
|   bool finalize(LDSection& pOutSect, SymbolTable& pSymTab, bool relocatable);
 | |
| 
 | |
|   /// get - get the section symbol for section pOutpSect
 | |
|   LDSymbol* get(const LDSection& pOutSect);
 | |
|   const LDSymbol* get(const LDSection& pOutSect) const;
 | |
| 
 | |
|  private:
 | |
|   /// sectCompare - hash compare function for LDSection*
 | |
|   struct SectCompare {
 | |
|     bool operator()(const LDSection* X, const LDSection* Y) const {
 | |
|       return (X == Y);
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   /// SectPtrHash - hash function for LDSection*
 | |
|   struct SectPtrHash {
 | |
|     size_t operator()(const LDSection* pKey) const {
 | |
|       return (unsigned((uintptr_t)pKey) >> 4) ^
 | |
|              (unsigned((uintptr_t)pKey) >> 9);
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   typedef HashEntry<const LDSection*, LDSymbol*, SectCompare> SectHashEntryType;
 | |
|   typedef HashTable<SectHashEntryType,
 | |
|                     SectPtrHash,
 | |
|                     EntryFactory<SectHashEntryType> > SectHashTableType;
 | |
| 
 | |
|  private:
 | |
|   SectHashTableType* m_pSectionSymbolMap;
 | |
| };
 | |
| 
 | |
| }  // namespace mcld
 | |
| 
 | |
| #endif  // MCLD_LD_SECTIONSYMBOLSET_H_
 |