1 //===- MCTargetOptions.h - MC Target Options --------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef LLVM_MC_MCTARGETOPTIONS_H 11 #define LLVM_MC_MCTARGETOPTIONS_H 12 13 #include <string> 14 #include <vector> 15 16 namespace llvm { 17 18 enum class ExceptionHandling { 19 None, /// No exception support 20 DwarfCFI, /// DWARF-like instruction based exceptions 21 SjLj, /// setjmp/longjmp based exceptions 22 ARM, /// ARM EHABI 23 WinEH, /// Windows Exception Handling 24 Wasm, /// WebAssembly Exception Handling 25 }; 26 27 enum class DebugCompressionType { 28 None, /// No compression 29 GNU, /// zlib-gnu style compression 30 Z, /// zlib style complession 31 }; 32 33 class StringRef; 34 35 class MCTargetOptions { 36 public: 37 enum AsmInstrumentation { 38 AsmInstrumentationNone, 39 AsmInstrumentationAddress 40 }; 41 42 /// Enables AddressSanitizer instrumentation at machine level. 43 bool SanitizeAddress : 1; 44 45 bool MCRelaxAll : 1; 46 bool MCNoExecStack : 1; 47 bool MCFatalWarnings : 1; 48 bool MCNoWarn : 1; 49 bool MCNoDeprecatedWarn : 1; 50 bool MCSaveTempLabels : 1; 51 bool MCUseDwarfDirectory : 1; 52 bool MCIncrementalLinkerCompatible : 1; 53 bool MCPIECopyRelocations : 1; 54 bool ShowMCEncoding : 1; 55 bool ShowMCInst : 1; 56 bool AsmVerbose : 1; 57 58 /// Preserve Comments in Assembly. 59 bool PreserveAsmComments : 1; 60 61 int DwarfVersion = 0; 62 63 std::string ABIName; 64 std::string SplitDwarfFile; 65 66 /// Additional paths to search for `.include` directives when using the 67 /// integrated assembler. 68 std::vector<std::string> IASSearchPaths; 69 70 MCTargetOptions(); 71 72 /// getABIName - If this returns a non-empty string this represents the 73 /// textual name of the ABI that we want the backend to use, e.g. o32, or 74 /// aapcs-linux. 75 StringRef getABIName() const; 76 }; 77 78 } // end namespace llvm 79 80 #endif // LLVM_MC_MCTARGETOPTIONS_H 81