1 //===- LDContext.cpp ------------------------------------------------------===// 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 #include <mcld/LD/LDContext.h> 10 #include <mcld/LD/LDSection.h> 11 #include <mcld/LD/LDSymbol.h> 12 #include <llvm/ADT/StringRef.h> 13 14 using namespace mcld; 15 16 //========================== 17 // LDReader 18 LDContext::LDContext() 19 { 20 } 21 22 LDContext::~LDContext() 23 { 24 } 25 26 LDSection* LDContext::getSection(unsigned int pIdx) 27 { 28 if (pIdx >= m_SectionTable.size()) 29 return NULL; 30 return m_SectionTable[pIdx]; 31 } 32 33 const LDSection* LDContext::getSection(unsigned int pIdx) const 34 { 35 if (pIdx >= m_SectionTable.size()) 36 return NULL; 37 return m_SectionTable[pIdx]; 38 } 39 40 LDSection* LDContext::getSection(const std::string& pName) 41 { 42 sect_iterator sect_iter, sect_end = sectEnd(); 43 for (sect_iter = sectBegin(); sect_iter != sect_end; ++sect_iter) { 44 if(NULL != *sect_iter && (*sect_iter)->name() == pName) 45 return *sect_iter; 46 } 47 return NULL; 48 } 49 50 const LDSection* LDContext::getSection(const std::string& pName) const 51 { 52 const_sect_iterator sect_iter, sect_end = sectEnd(); 53 for (sect_iter = sectBegin(); sect_iter != sect_end; ++sect_iter) { 54 if(NULL != *sect_iter && (*sect_iter)->name() == pName) 55 return *sect_iter; 56 } 57 return NULL; 58 } 59 60 size_t LDContext::getSectionIdx(const std::string& pName) const 61 { 62 size_t result = 1; 63 size_t size = m_SectionTable.size(); 64 for (; result != size; ++result) 65 if (m_SectionTable[result]->name() == pName) 66 return result; 67 return 0; 68 } 69 70 LDSymbol* LDContext::getSymbol(unsigned int pIdx) 71 { 72 if (pIdx >= m_SymTab.size()) 73 return NULL; 74 return m_SymTab[pIdx]; 75 } 76 77 const LDSymbol* LDContext::getSymbol(unsigned int pIdx) const 78 { 79 if (pIdx >= m_SymTab.size()) 80 return NULL; 81 return m_SymTab[pIdx]; 82 } 83 84 85 LDSymbol* LDContext::getSymbol(const llvm::StringRef& pName) 86 { 87 size_t sym = 1; 88 size_t size = m_SymTab.size(); 89 for (; sym < size; ++sym) 90 if (m_SymTab[sym]->name() == pName) 91 return m_SymTab[sym]; 92 return NULL; 93 } 94 95 const LDSymbol* LDContext::getSymbol(const llvm::StringRef& pName) const 96 { 97 size_t sym = 1; 98 size_t size = m_SymTab.size(); 99 for (; sym < size; ++sym) 100 if (m_SymTab[sym]->name() == pName) 101 return m_SymTab[sym]; 102 return NULL; 103 } 104