1 //===- TargetOptions.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_TARGETOPTIONS_H_ 10 #define MCLD_TARGETOPTIONS_H_ 11 12 #include <llvm/ADT/Triple.h> 13 14 #include <string> 15 16 namespace mcld { 17 18 /** \class TargetOptions 19 * \brief TargetOptions collects the options that dependent on a target 20 * backend. 21 */ 22 class TargetOptions { 23 public: 24 enum Endian { Little, Big, Unknown }; 25 26 public: 27 TargetOptions(); 28 29 explicit TargetOptions(const std::string& pTriple); 30 31 ~TargetOptions(); 32 triple()33 const llvm::Triple& triple() const { return m_Triple; } 34 35 void setTriple(const std::string& pTriple); 36 37 void setTriple(const llvm::Triple& pTriple); 38 getArch()39 const std::string& getArch() const { return m_ArchName; } 40 41 void setArch(const std::string& pArchName); 42 getTargetCPU()43 const std::string& getTargetCPU() const { return m_TargetCPU; } 44 45 void setTargetCPU(const std::string& pCPU); 46 endian()47 Endian endian() const { return m_Endian; } 48 setEndian(Endian pEndian)49 void setEndian(Endian pEndian) { m_Endian = pEndian; } 50 isLittleEndian()51 bool isLittleEndian() const { return (Little == m_Endian); } isBigEndian()52 bool isBigEndian() const { return (Big == m_Endian); } 53 bitclass()54 unsigned int bitclass() const { return m_BitClass; } 55 setBitClass(unsigned int pBitClass)56 void setBitClass(unsigned int pBitClass) { m_BitClass = pBitClass; } 57 is32Bits()58 bool is32Bits() const { return (32 == m_BitClass); } is64Bits()59 bool is64Bits() const { return (64 == m_BitClass); } 60 61 // -G, max GP size option setGPSize(unsigned pGPSize)62 void setGPSize(unsigned pGPSize) { m_GPSize = pGPSize; } 63 getGPSize()64 unsigned getGPSize() const { return m_GPSize; } 65 setStubGroupSize(unsigned pSize)66 void setStubGroupSize(unsigned pSize) { m_StubGroupSize = pSize; } 67 getStubGroupSize()68 unsigned getStubGroupSize() const { return m_StubGroupSize; } 69 70 void setFixCA53Erratum835769(bool pEnable = true) { 71 m_FixCA53Erratum835769 = pEnable; 72 } 73 fixCA53Erratum835769()74 bool fixCA53Erratum835769() const { return m_FixCA53Erratum835769; } 75 76 void setFixCA53Erratum843419(bool pEnable = true) { 77 m_FixCA53Erratum843419 = pEnable; 78 } 79 fixCA53Erratum843419()80 bool fixCA53Erratum843419() const { return m_FixCA53Erratum843419; } 81 82 private: 83 llvm::Triple m_Triple; 84 std::string m_ArchName; 85 std::string m_TargetCPU; 86 Endian m_Endian; 87 unsigned int m_BitClass; 88 unsigned m_GPSize; // -G, --gpsize 89 unsigned m_StubGroupSize; 90 bool m_FixCA53Erratum835769 : 1; 91 bool m_FixCA53Erratum843419 : 1; 92 }; 93 94 } // namespace mcld 95 96 #endif // MCLD_TARGETOPTIONS_H_ 97