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