15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- LDContext.cpp ------------------------------------------------------===// 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#include <mcld/LD/LDContext.h> 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDSection.h> 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDSymbol.h> 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <llvm/ADT/StringRef.h> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// LDContext 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoLDContext& LDContext::appendSection(LDSection& pSection) 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao if (LDFileFormat::Relocation == pSection.kind()) 2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_RelocSections.push_back(&pSection); 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao pSection.setIndex(m_SectionTable.size()); 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_SectionTable.push_back(&pSection); 2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return *this; 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDSection* LDContext::getSection(unsigned int pIdx) 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (pIdx >= m_SectionTable.size()) 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return NULL; 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_SectionTable[pIdx]; 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoconst LDSection* LDContext::getSection(unsigned int pIdx) const 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (pIdx >= m_SectionTable.size()) 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return NULL; 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_SectionTable[pIdx]; 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDSection* LDContext::getSection(const std::string& pName) 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao sect_iterator sect_iter, sect_end = sectEnd(); 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (sect_iter = sectBegin(); sect_iter != sect_end; ++sect_iter) { 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if(NULL != *sect_iter && (*sect_iter)->name() == pName) 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *sect_iter; 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return NULL; 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoconst LDSection* LDContext::getSection(const std::string& pName) const 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const_sect_iterator sect_iter, sect_end = sectEnd(); 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (sect_iter = sectBegin(); sect_iter != sect_end; ++sect_iter) { 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if(NULL != *sect_iter && (*sect_iter)->name() == pName) 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *sect_iter; 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return NULL; 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaosize_t LDContext::getSectionIdx(const std::string& pName) const 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t result = 1; 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t size = m_SectionTable.size(); 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (; result != size; ++result) 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (m_SectionTable[result]->name() == pName) 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return result; 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return 0; 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDSymbol* LDContext::getSymbol(unsigned int pIdx) 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (pIdx >= m_SymTab.size()) 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return NULL; 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_SymTab[pIdx]; 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoconst LDSymbol* LDContext::getSymbol(unsigned int pIdx) const 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (pIdx >= m_SymTab.size()) 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return NULL; 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_SymTab[pIdx]; 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDSymbol* LDContext::getSymbol(const llvm::StringRef& pName) 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t sym = 1; 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t size = m_SymTab.size(); 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (; sym < size; ++sym) 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (m_SymTab[sym]->name() == pName) 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_SymTab[sym]; 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return NULL; 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoconst LDSymbol* LDContext::getSymbol(const llvm::StringRef& pName) const 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t sym = 1; 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t size = m_SymTab.size(); 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (; sym < size; ++sym) 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (m_SymTab[sym]->name() == pName) 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_SymTab[sym]; 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return NULL; 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 106