Home | History | Annotate | Download | only in LD
      1 //===- ELFSegmentFactory.h ------------------------------------------------===//
      2 //
      3 //                     The MCLinker Project
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 #ifndef MCLD_LD_ELFSEGMENTFACTORY_H_
     10 #define MCLD_LD_ELFSEGMENTFACTORY_H_
     11 
     12 #include <llvm/Support/DataTypes.h>
     13 #include <llvm/Support/ELF.h>
     14 
     15 #include <vector>
     16 
     17 namespace mcld {
     18 
     19 class ELFSegment;
     20 class LDSection;
     21 
     22 /** \class ELFSegmentFactory
     23  *  \brief provide the interface to create and delete an ELFSegment
     24  */
     25 class ELFSegmentFactory {
     26  public:
     27   typedef std::vector<ELFSegment*> Segments;
     28   typedef Segments::const_iterator const_iterator;
     29   typedef Segments::iterator iterator;
     30 
     31   const_iterator begin() const { return m_Segments.begin(); }
     32   iterator begin() { return m_Segments.begin(); }
     33   const_iterator end() const { return m_Segments.end(); }
     34   iterator end() { return m_Segments.end(); }
     35 
     36   const ELFSegment* front() const { return m_Segments.front(); }
     37   ELFSegment* front() { return m_Segments.front(); }
     38   const ELFSegment* back() const { return m_Segments.back(); }
     39   ELFSegment* back() { return m_Segments.back(); }
     40 
     41   size_t size() const { return m_Segments.size(); }
     42 
     43   bool empty() const { return m_Segments.empty(); }
     44 
     45   iterator find(uint32_t pType, uint32_t pFlagSet, uint32_t pFlagClear);
     46 
     47   const_iterator find(uint32_t pType,
     48                       uint32_t pFlagSet,
     49                       uint32_t pFlagClear) const;
     50 
     51   iterator find(uint32_t pType, const LDSection* pSection);
     52 
     53   const_iterator find(uint32_t pType, const LDSection* pSection) const;
     54 
     55   /// produce - produce an empty ELF segment information.
     56   /// this function will create an ELF segment
     57   /// @param pType - p_type in ELF program header
     58   ELFSegment* produce(uint32_t pType, uint32_t pFlag = llvm::ELF::PF_R);
     59 
     60   ELFSegment* insert(iterator pPosition,
     61                      uint32_t pType,
     62                      uint32_t pFlag = llvm::ELF::PF_R);
     63 
     64   void erase(iterator pSegment);
     65 
     66  private:
     67   Segments m_Segments;
     68 };
     69 
     70 }  // namespace mcld
     71 
     72 #endif  // MCLD_LD_ELFSEGMENTFACTORY_H_
     73