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