//===- MCTargetOptions.h - MC Target Options -------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef LLVM_MC_MCTARGETOPTIONS_H #define LLVM_MC_MCTARGETOPTIONS_H #include #include namespace llvm { enum class ExceptionHandling { None, /// No exception support DwarfCFI, /// DWARF-like instruction based exceptions SjLj, /// setjmp/longjmp based exceptions ARM, /// ARM EHABI WinEH, /// Windows Exception Handling }; class StringRef; class MCTargetOptions { public: enum AsmInstrumentation { AsmInstrumentationNone, AsmInstrumentationAddress }; /// Enables AddressSanitizer instrumentation at machine level. bool SanitizeAddress : 1; bool MCRelaxAll : 1; bool MCNoExecStack : 1; bool MCFatalWarnings : 1; bool MCNoWarn : 1; bool MCNoDeprecatedWarn : 1; bool MCSaveTempLabels : 1; bool MCUseDwarfDirectory : 1; bool MCIncrementalLinkerCompatible : 1; bool MCPIECopyRelocations : 1; bool ShowMCEncoding : 1; bool ShowMCInst : 1; bool AsmVerbose : 1; /// Preserve Comments in Assembly. bool PreserveAsmComments : 1; int DwarfVersion; /// getABIName - If this returns a non-empty string this represents the /// textual name of the ABI that we want the backend to use, e.g. o32, or /// aapcs-linux. StringRef getABIName() const; std::string ABIName; /// Additional paths to search for `.include` directives when using the /// integrated assembler. std::vector IASSearchPaths; MCTargetOptions(); }; inline bool operator==(const MCTargetOptions &LHS, const MCTargetOptions &RHS) { #define ARE_EQUAL(X) LHS.X == RHS.X return (ARE_EQUAL(SanitizeAddress) && ARE_EQUAL(MCRelaxAll) && ARE_EQUAL(MCNoExecStack) && ARE_EQUAL(MCFatalWarnings) && ARE_EQUAL(MCNoWarn) && ARE_EQUAL(MCNoDeprecatedWarn) && ARE_EQUAL(MCSaveTempLabels) && ARE_EQUAL(MCUseDwarfDirectory) && ARE_EQUAL(MCIncrementalLinkerCompatible) && ARE_EQUAL(MCPIECopyRelocations) && ARE_EQUAL(ShowMCEncoding) && ARE_EQUAL(ShowMCInst) && ARE_EQUAL(AsmVerbose) && ARE_EQUAL(DwarfVersion) && ARE_EQUAL(ABIName) && ARE_EQUAL(IASSearchPaths)); #undef ARE_EQUAL } inline bool operator!=(const MCTargetOptions &LHS, const MCTargetOptions &RHS) { return !(LHS == RHS); } } // end namespace llvm #endif