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