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 12 #include <mcld/LD/ObjectReader.h> 13 #include <mcld/ADT/Flags.h> 14 15 namespace mcld { 16 17 class Module; 18 class Input; 19 class IRBuilder; 20 class GNULDBackend; 21 class ELFReaderIF; 22 class EhFrameReader; 23 class LinkerConfig; 24 25 /** \lclass ELFObjectReader 26 * \brief ELFObjectReader reads target-independent parts of ELF object file 27 */ 28 class ELFObjectReader : public ObjectReader 29 { 30 public: 31 enum ReadFlagType { 32 ParseEhFrame = 0x1, ///< parse .eh_frame section if the bit is set. 33 NumOfReadFlags = 1 34 }; 35 36 typedef Flags<ReadFlagType> ReadFlag; 37 38 public: 39 ELFObjectReader(GNULDBackend& pBackend, 40 IRBuilder& pBuilder, 41 const LinkerConfig& pConfig); 42 43 ~ELFObjectReader(); 44 45 // ----- observers ----- // 46 bool isMyFormat(Input &pFile, bool &pContinue) 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 60 private: 61 ELFReaderIF* m_pELFReader; 62 EhFrameReader* m_pEhFrameReader; 63 IRBuilder& m_Builder; 64 ReadFlag m_ReadFlag; 65 GNULDBackend& m_Backend; 66 const LinkerConfig& m_Config; 67 }; 68 69 } // namespace of mcld 70 71 #endif 72 73