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
2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld {
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDSymbol;
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDSection;
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class LDContext
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  \brief LDContext stores the data which a object file should has
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDContext
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef std::vector<LDSection*> SectionTable;
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef SectionTable::iterator sect_iterator;
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef SectionTable::const_iterator const_sect_iterator;
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef std::vector<LDSymbol*> SymbolTable;
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef SymbolTable::iterator sym_iterator;
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef SymbolTable::const_iterator const_sym_iterator;
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // -----  sections  ----- //
4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  LDContext& appendSection(LDSection& pSection);
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const_sect_iterator sectBegin() const { return m_SectionTable.begin(); }
4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  sect_iterator       sectBegin()       { return m_SectionTable.begin(); }
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const_sect_iterator sectEnd() const { return m_SectionTable.end(); }
5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  sect_iterator       sectEnd()       { return m_SectionTable.end(); }
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection* getSection(unsigned int pIdx) const;
5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  LDSection*       getSection(unsigned int pIdx);
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSection* getSection(const std::string& pName) const;
5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  LDSection*       getSection(const std::string& pName);
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  size_t getSectionIdx(const std::string& pName) const;
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  size_t numOfSections() const
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return m_SectionTable.size(); }
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // -----  symbols  ----- //
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSymbol* getSymbol(unsigned int pIdx) const;
6722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  LDSymbol*       getSymbol(unsigned int pIdx);
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const LDSymbol* getSymbol(const llvm::StringRef& pName) const;
7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  LDSymbol*       getSymbol(const llvm::StringRef& pName);
715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  void addSymbol(LDSymbol* pSym)
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { m_SymTab.push_back(pSym); }
745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
7522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  // -----  relocations  ----- //
7622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const_sect_iterator relocSectBegin() const { return m_RelocSections.begin(); }
7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  sect_iterator       relocSectBegin()       { return m_RelocSections.begin(); }
7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
7922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const_sect_iterator relocSectEnd() const { return m_RelocSections.end(); }
8022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  sect_iterator       relocSectEnd()       { return m_RelocSections.end(); }
8122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate:
835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  SectionTable m_SectionTable;
845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  SymbolTable m_SymTab;
8522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  SectionTable m_RelocSections;
865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // FIXME : maintain a map<section name, section index>
885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld
925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
94affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
95