15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- LDContext.h --------------------------------------------------------===//
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#ifndef MCLD_LDCONTEXT_H
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_LDCONTEXT_H
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h>
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <vector>
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDFileFormat.h>
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <llvm/Support/DataTypes.h>
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <string>
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <cassert>
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace llvm {
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass StringRef;
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDSymbol;
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDSection;
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class LDContext
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  \brief LDContext stores the data which a object file should has
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDContext
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef std::vector<LDSection*> SectionTable;
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef SectionTable::iterator sect_iterator;
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef SectionTable::const_iterator const_sect_iterator;
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef std::vector<LDSymbol*> SymbolTable;
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef SymbolTable::iterator sym_iterator;
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef SymbolTable::const_iterator const_sym_iterator;
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDContext();
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ~LDContext();
495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // -----  sections  ----- //
515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  SectionTable& getSectionTable()
525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return m_SectionTable; }
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const SectionTable& getSectionTable() const
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return m_SectionTable; }
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  sect_iterator sectBegin()
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return m_SectionTable.begin(); }
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  sect_iterator sectEnd()
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return m_SectionTable.end(); }
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const_sect_iterator sectBegin() const
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return m_SectionTable.begin(); }
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const_sect_iterator sectEnd() const
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return m_SectionTable.end(); }
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* getSection(unsigned int pIdx);
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection* getSection(unsigned int pIdx) const;
725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* getSection(const std::string& pName);
745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection* getSection(const std::string& pName) const;
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  size_t getSectionIdx(const std::string& pName) const;
785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  size_t numOfSections() const
805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return m_SectionTable.size(); }
815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // -----  symbols  ----- //
835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSymbol* getSymbol(unsigned int pIdx);
845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSymbol* getSymbol(unsigned int pIdx) const;
865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSymbol* getSymbol(const llvm::StringRef& pName);
885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSymbol* getSymbol(const llvm::StringRef& pName) const;
905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  void addSymbol(LDSymbol* pSym)
925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { m_SymTab.push_back(pSym); }
935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate:
955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  SectionTable m_SectionTable;
965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  SymbolTable m_SymTab;
975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // FIXME : maintain a map<section name, section index>
995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld
1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
105affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
106