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
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// LDReader
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDContext::LDContext()
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDContext::~LDContext()
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDSection* LDContext::getSection(unsigned int pIdx)
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  if (pIdx >= m_SectionTable.size())
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return NULL;
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return m_SectionTable[pIdx];
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoconst LDSection* LDContext::getSection(unsigned int pIdx) const
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  if (pIdx >= m_SectionTable.size())
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return NULL;
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return m_SectionTable[pIdx];
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDSection* LDContext::getSection(const std::string& pName)
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  sect_iterator sect_iter, sect_end = sectEnd();
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  for (sect_iter = sectBegin(); sect_iter != sect_end; ++sect_iter) {
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    if(NULL != *sect_iter && (*sect_iter)->name() == pName)
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      return *sect_iter;
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return NULL;
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoconst LDSection* LDContext::getSection(const std::string& pName) const
515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const_sect_iterator sect_iter, sect_end = sectEnd();
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  for (sect_iter = sectBegin(); sect_iter != sect_end; ++sect_iter) {
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    if(NULL != *sect_iter && (*sect_iter)->name() == pName)
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      return *sect_iter;
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return NULL;
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaosize_t LDContext::getSectionIdx(const std::string& pName) const
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  size_t result = 1;
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  size_t size = m_SectionTable.size();
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  for (; result != size; ++result)
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    if (m_SectionTable[result]->name() == pName)
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      return result;
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return 0;
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDSymbol* LDContext::getSymbol(unsigned int pIdx)
715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  if (pIdx >= m_SymTab.size())
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return NULL;
745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return m_SymTab[pIdx];
755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoconst LDSymbol* LDContext::getSymbol(unsigned int pIdx) const
785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  if (pIdx >= m_SymTab.size())
805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return NULL;
815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return m_SymTab[pIdx];
825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDSymbol* LDContext::getSymbol(const llvm::StringRef& pName)
865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  size_t sym = 1;
885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  size_t size = m_SymTab.size();
895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  for (; sym < size; ++sym)
905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    if (m_SymTab[sym]->name() == pName)
915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      return m_SymTab[sym];
925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return NULL;
935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoconst LDSymbol* LDContext::getSymbol(const llvm::StringRef& pName) const
965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  size_t sym = 1;
985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  size_t size = m_SymTab.size();
995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  for (; sym < size; ++sym)
1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    if (m_SymTab[sym]->name() == pName)
1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      return m_SymTab[sym];
1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return NULL;
1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
104