LDContext.h revision affc150dc44fab1911775a49636d0ce85333b634
1//===- LDContext.h --------------------------------------------------------===//
2//
3//                     The MCLinker Project
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9#ifndef MCLD_LDCONTEXT_H
10#define MCLD_LDCONTEXT_H
11#ifdef ENABLE_UNITTEST
12#include <gtest.h>
13#endif
14
15#include <vector>
16#include <mcld/LD/LDFileFormat.h>
17#include <llvm/Support/DataTypes.h>
18#include <string>
19#include <cassert>
20
21namespace llvm {
22class StringRef;
23}
24
25namespace mcld
26{
27
28class LDSymbol;
29class LDSection;
30
31/** \class LDContext
32 *  \brief LDContext stores the data which a object file should has
33 */
34class LDContext
35{
36public:
37  typedef std::vector<LDSection*> SectionTable;
38  typedef SectionTable::iterator sect_iterator;
39  typedef SectionTable::const_iterator const_sect_iterator;
40
41  typedef std::vector<LDSymbol*> SymbolTable;
42  typedef SymbolTable::iterator sym_iterator;
43  typedef SymbolTable::const_iterator const_sym_iterator;
44
45public:
46  LDContext();
47
48  ~LDContext();
49
50  // -----  sections  ----- //
51  SectionTable& getSectionTable()
52  { return m_SectionTable; }
53
54  const SectionTable& getSectionTable() const
55  { return m_SectionTable; }
56
57  sect_iterator sectBegin()
58  { return m_SectionTable.begin(); }
59
60  sect_iterator sectEnd()
61  { return m_SectionTable.end(); }
62
63  const_sect_iterator sectBegin() const
64  { return m_SectionTable.begin(); }
65
66  const_sect_iterator sectEnd() const
67  { return m_SectionTable.end(); }
68
69  LDSection* getSection(unsigned int pIdx);
70
71  const LDSection* getSection(unsigned int pIdx) const;
72
73  LDSection* getSection(const std::string& pName);
74
75  const LDSection* getSection(const std::string& pName) const;
76
77  size_t getSectionIdx(const std::string& pName) const;
78
79  size_t numOfSections() const
80  { return m_SectionTable.size(); }
81
82  // -----  symbols  ----- //
83  LDSymbol* getSymbol(unsigned int pIdx);
84
85  const LDSymbol* getSymbol(unsigned int pIdx) const;
86
87  LDSymbol* getSymbol(const llvm::StringRef& pName);
88
89  const LDSymbol* getSymbol(const llvm::StringRef& pName) const;
90
91  void addSymbol(LDSymbol* pSym)
92  { m_SymTab.push_back(pSym); }
93
94private:
95  SectionTable m_SectionTable;
96  SymbolTable m_SymTab;
97
98  // FIXME : maintain a map<section name, section index>
99};
100
101
102} // namespace of mcld
103
104#endif
105
106