ELFObjectReader.h revision 22add6ff3426df1a85089fe6a6e1597ee3b6f300
1//===- ELFObjectReader.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_ELF_OBJECT_READER_H
10#define MCLD_ELF_OBJECT_READER_H
11#ifdef ENABLE_UNITTEST
12#include <gtest.h>
13#endif
14
15#include <mcld/LD/ObjectReader.h>
16#include <mcld/ADT/Flags.h>
17
18namespace mcld {
19
20class Module;
21class Input;
22class FragmentLinker;
23class GNULDBackend;
24class ELFReaderIF;
25class EhFrameReader;
26
27/** \lclass ELFObjectReader
28 *  \brief ELFObjectReader reads target-independent parts of ELF object file
29 */
30class ELFObjectReader : public ObjectReader
31{
32public:
33  enum ReadFlagType {
34    ParseEhFrame    = 0x1, ///< parse .eh_frame section if the bit is set.
35    NumOfReadFlags  = 1
36  };
37
38  typedef Flags<ReadFlagType> ReadFlag;
39
40public:
41  ELFObjectReader(GNULDBackend& pBackend, FragmentLinker& pLinker);
42
43  ~ELFObjectReader();
44
45  // -----  observers  ----- //
46  bool isMyFormat(Input &pFile) const;
47
48  // -----  readers  ----- //
49  bool readHeader(Input& pFile);
50
51  virtual bool readSections(Input& pFile);
52
53  virtual bool readSymbols(Input& pFile);
54
55  /// readRelocations - read relocation sections
56  ///
57  /// This function should be called after symbol resolution.
58  virtual bool readRelocations(Input& pFile);
59
60private:
61  ELFReaderIF* m_pELFReader;
62  EhFrameReader* m_pEhFrameReader;
63  FragmentLinker& m_Linker;
64  ReadFlag m_ReadFlag;
65  GNULDBackend& m_Backend;
66};
67
68} // namespace of mcld
69
70#endif
71
72