15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- ELFSegmentFactory.h ------------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#ifndef MCLD_LD_ELFSEGMENTFACTORY_H 1087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#define MCLD_LD_ELFSEGMENTFACTORY_H 1187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 1287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <llvm/Support/DataTypes.h> 1387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <llvm/Support/ELF.h> 1487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <vector> 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1987f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass ELFSegment; 2087f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass LDSection; 2187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class ELFSegmentFactory 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief provide the interface to create and delete an ELFSegment 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 2587f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass ELFSegmentFactory 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 2887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines typedef std::vector<ELFSegment*> Segments; 2987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines typedef Segments::const_iterator const_iterator; 3087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines typedef Segments::iterator iterator; 3187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 3287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const_iterator begin() const { return m_Segments.begin(); } 3387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines iterator begin() { return m_Segments.begin(); } 3487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const_iterator end() const { return m_Segments.end(); } 3587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines iterator end() { return m_Segments.end(); } 3687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 3787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const ELFSegment* front() const { return m_Segments.front(); } 3887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ELFSegment* front() { return m_Segments.front(); } 3987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const ELFSegment* back() const { return m_Segments.back(); } 4087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ELFSegment* back() { return m_Segments.back(); } 4187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 4287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines size_t size() const { return m_Segments.size(); } 4387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 4487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines bool empty() const { return m_Segments.empty(); } 4587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 4687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines iterator find(uint32_t pType, uint32_t pFlagSet, uint32_t pFlagClear); 4787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 4887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const_iterator 4987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines find(uint32_t pType, uint32_t pFlagSet, uint32_t pFlagClear) const; 5087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 5187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines iterator find(uint32_t pType, const LDSection* pSection); 5287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 5387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const_iterator find(uint32_t pType, const LDSection* pSection) const; 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// produce - produce an empty ELF segment information. 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// this function will create an ELF segment 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// @param pType - p_type in ELF program header 58affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ELFSegment* produce(uint32_t pType, uint32_t pFlag = llvm::ELF::PF_R); 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 6087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines void erase(iterator pSegment); 61affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 6287f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesprivate: 6387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines Segments m_Segments; 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 69affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 70