15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- SectionMerger.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//===----------------------------------------------------------------------===// 95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef MCLD_SECTION_MERGER_H 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_SECTION_MERGER_H 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <vector> 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <string> 17cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDSection.h> 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDContext.h> 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/SectionMap.h> 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass MCLinker; 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class SectionMerger 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief maintain the mappings of substr of input section name to associated 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * output section (data) 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass SectionMerger 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao struct Mapping { 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao std::string inputSubStr; 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection* outputSection; 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao typedef std::vector<Mapping> LDSectionMapTy; 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao typedef LDSectionMapTy::iterator iterator; 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao typedef LDSectionMapTy::const_iterator const_iterator; 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao SectionMerger(SectionMap& pSectionMap, LDContext& pContext); 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ~SectionMerger(); 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// getOutputSectHdr - return a associated output section header 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSection* getOutputSectHdr(const std::string& pName); 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// getOutputSectData - return a associated output section data 50cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao SectionData* getOutputSectData(const std::string& pName); 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// addMapping - add a mapping as creating one new output LDSection 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// @param pName - a input section name 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// @param pSection - the output LDSection* 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool addMapping(const std::string& pName, LDSection* pSection); 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // ----- observers ----- // 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool empty() const 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_LDSectionMap.empty(); } 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t size() const 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_LDSectionMap.size(); } 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t capacity () const 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_LDSectionMap.capacity(); } 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // ----- iterators ----- // 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iterator find(const std::string& pName); 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iterator begin() 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_LDSectionMap.begin(); } 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iterator end() 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_LDSectionMap.end(); } 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const_iterator begin() const 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_LDSectionMap.begin(); } 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const_iterator end() const 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_LDSectionMap.end(); } 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate: 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// initOutputSectMap - initialize the map from input substr to associated 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// output LDSection* 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void initOutputSectMap(); 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate: 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao SectionMap& m_SectionNameMap; 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDContext& m_Output; 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSectionMapTy m_LDSectionMap; 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 98affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 99