• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
LDContext()18 LDContext::LDContext()
19 {
20 }
21 
~LDContext()22 LDContext::~LDContext()
23 {
24 }
25 
getSection(unsigned int pIdx)26 LDSection* LDContext::getSection(unsigned int pIdx)
27 {
28   if (pIdx >= m_SectionTable.size())
29     return NULL;
30   return m_SectionTable[pIdx];
31 }
32 
getSection(unsigned int pIdx) const33 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 
getSection(const std::string & pName)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 
getSection(const std::string & pName) const50 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 
getSectionIdx(const std::string & pName) const60 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 
getSymbol(unsigned int pIdx)70 LDSymbol* LDContext::getSymbol(unsigned int pIdx)
71 {
72   if (pIdx >= m_SymTab.size())
73     return NULL;
74   return m_SymTab[pIdx];
75 }
76 
getSymbol(unsigned int pIdx) const77 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 
getSymbol(const llvm::StringRef & pName)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 
getSymbol(const llvm::StringRef & pName) const95 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