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//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/LDContext.h"
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/LDSection.h"
1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/LDSymbol.h"
1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <llvm/ADT/StringRef.h>
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld {
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===//
1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// LDContext
1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===//
2037b74a387bb3993387029859c2d9d051c41c724eStephen HinesLDContext& LDContext::appendSection(LDSection& pSection) {
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
2837b74a387bb3993387029859c2d9d051c41c724eStephen HinesLDSection* LDContext::getSection(unsigned int pIdx) {
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  if (pIdx >= m_SectionTable.size())
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return NULL;
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return m_SectionTable[pIdx];
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3437b74a387bb3993387029859c2d9d051c41c724eStephen Hinesconst LDSection* LDContext::getSection(unsigned int pIdx) const {
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
4037b74a387bb3993387029859c2d9d051c41c724eStephen HinesLDSection* LDContext::getSection(const std::string& pName) {
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  sect_iterator sect_iter, sect_end = sectEnd();
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  for (sect_iter = sectBegin(); sect_iter != sect_end; ++sect_iter) {
4337b74a387bb3993387029859c2d9d051c41c724eStephen Hines    if (*sect_iter != NULL && (*sect_iter)->name() == pName)
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      return *sect_iter;
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return NULL;
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4937b74a387bb3993387029859c2d9d051c41c724eStephen Hinesconst LDSection* LDContext::getSection(const std::string& pName) const {
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const_sect_iterator sect_iter, sect_end = sectEnd();
515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  for (sect_iter = sectBegin(); sect_iter != sect_end; ++sect_iter) {
5237b74a387bb3993387029859c2d9d051c41c724eStephen Hines    if (*sect_iter != NULL && (*sect_iter)->name() == pName)
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      return *sect_iter;
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return NULL;
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5837b74a387bb3993387029859c2d9d051c41c724eStephen Hinessize_t LDContext::getSectionIdx(const std::string& pName) const {
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  size_t result = 1;
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  size_t size = m_SectionTable.size();
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  for (; result != size; ++result)
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    if (m_SectionTable[result]->name() == pName)
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      return result;
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return 0;
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6737b74a387bb3993387029859c2d9d051c41c724eStephen HinesLDSymbol* LDContext::getSymbol(unsigned int pIdx) {
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  if (pIdx >= m_SymTab.size())
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return NULL;
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return m_SymTab[pIdx];
715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
7337b74a387bb3993387029859c2d9d051c41c724eStephen Hinesconst LDSymbol* LDContext::getSymbol(unsigned int pIdx) const {
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
7937b74a387bb3993387029859c2d9d051c41c724eStephen HinesLDSymbol* LDContext::getSymbol(const llvm::StringRef& pName) {
805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  size_t sym = 1;
815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  size_t size = m_SymTab.size();
825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  for (; sym < size; ++sym)
835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    if (m_SymTab[sym]->name() == pName)
845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      return m_SymTab[sym];
855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return NULL;
865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
8837b74a387bb3993387029859c2d9d051c41c724eStephen Hinesconst LDSymbol* LDContext::getSymbol(const llvm::StringRef& pName) const {
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}
9637b74a387bb3993387029859c2d9d051c41c724eStephen Hines
9737b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
98