ELFSegmentFactory.h revision 87f34658dec9097d987d254a990ea7f311bfc95f
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 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 1487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 1587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <llvm/Support/DataTypes.h> 1687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <llvm/Support/ELF.h> 1787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <vector> 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2287f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass ELFSegment; 2387f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass LDSection; 2487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class ELFSegmentFactory 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief provide the interface to create and delete an ELFSegment 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 2887f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass ELFSegmentFactory 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 3187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines typedef std::vector<ELFSegment*> Segments; 3287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines typedef Segments::const_iterator const_iterator; 3387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines typedef Segments::iterator iterator; 3487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 3587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const_iterator begin() const { return m_Segments.begin(); } 3687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines iterator begin() { return m_Segments.begin(); } 3787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const_iterator end() const { return m_Segments.end(); } 3887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines iterator end() { return m_Segments.end(); } 3987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 4087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const ELFSegment* front() const { return m_Segments.front(); } 4187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ELFSegment* front() { return m_Segments.front(); } 4287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const ELFSegment* back() const { return m_Segments.back(); } 4387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ELFSegment* back() { return m_Segments.back(); } 4487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 4587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines size_t size() const { return m_Segments.size(); } 4687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 4787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines bool empty() const { return m_Segments.empty(); } 4887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 4987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines iterator find(uint32_t pType, uint32_t pFlagSet, uint32_t pFlagClear); 5087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 5187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const_iterator 5287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines find(uint32_t pType, uint32_t pFlagSet, uint32_t pFlagClear) const; 5387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 5487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines iterator find(uint32_t pType, const LDSection* pSection); 5587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 5687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const_iterator find(uint32_t pType, const LDSection* pSection) const; 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// produce - produce an empty ELF segment information. 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// this function will create an ELF segment 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// @param pType - p_type in ELF program header 61affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ELFSegment* produce(uint32_t pType, uint32_t pFlag = llvm::ELF::PF_R); 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 6387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines void erase(iterator pSegment); 64affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 6587f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesprivate: 6687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines Segments m_Segments; 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 72affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 73