ELFObjectReader.h revision d0fbbb227051be16931a1aa9b4a7722ac039c698
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 IRBuilder;
23class GNULDBackend;
24class ELFReaderIF;
25class EhFrameReader;
26class LinkerConfig;
27
28/** \lclass ELFObjectReader
29 *  \brief ELFObjectReader reads target-independent parts of ELF object file
30 */
31class ELFObjectReader : public ObjectReader
32{
33public:
34  enum ReadFlagType {
35    ParseEhFrame    = 0x1, ///< parse .eh_frame section if the bit is set.
36    NumOfReadFlags  = 1
37  };
38
39  typedef Flags<ReadFlagType> ReadFlag;
40
41public:
42  ELFObjectReader(GNULDBackend& pBackend,
43                  IRBuilder& pBuilder,
44                  const LinkerConfig& pConfig);
45
46  ~ELFObjectReader();
47
48  // -----  observers  ----- //
49  bool isMyFormat(Input &pFile) const;
50
51  // -----  readers  ----- //
52  bool readHeader(Input& pFile);
53
54  virtual bool readSections(Input& pFile);
55
56  virtual bool readSymbols(Input& pFile);
57
58  /// readRelocations - read relocation sections
59  ///
60  /// This function should be called after symbol resolution.
61  virtual bool readRelocations(Input& pFile);
62
63private:
64  ELFReaderIF* m_pELFReader;
65  EhFrameReader* m_pEhFrameReader;
66  IRBuilder& m_Builder;
67  ReadFlag m_ReadFlag;
68  GNULDBackend& m_Backend;
69  const LinkerConfig& m_Config;
70};
71
72} // namespace of mcld
73
74#endif
75
76