//===- MCTargetOptions.h - MC Target Options --------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_MC_MCTARGETOPTIONS_H #define LLVM_MC_MCTARGETOPTIONS_H #include "llvm/ADT/ArrayRef.h" #include "llvm/Support/Compression.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 Wasm, ///< WebAssembly Exception Handling AIX, ///< AIX Exception Handling }; enum class EmitDwarfUnwindType { Always, // Always emit dwarf unwind NoCompactUnwind, // Only emit if compact unwind isn't available Default, // Default behavior is based on the target }; class StringRef; class MCTargetOptions { public: enum AsmInstrumentation { AsmInstrumentationNone, AsmInstrumentationAddress }; bool MCRelaxAll : 1; bool MCNoExecStack : 1; bool MCFatalWarnings : 1; bool MCNoWarn : 1; bool MCNoDeprecatedWarn : 1; bool MCNoTypeCheck : 1; bool MCSaveTempLabels : 1; bool MCIncrementalLinkerCompatible : 1; bool ShowMCEncoding : 1; bool ShowMCInst : 1; bool AsmVerbose : 1; /// Preserve Comments in Assembly. bool PreserveAsmComments : 1; bool Dwarf64 : 1; EmitDwarfUnwindType EmitDwarfUnwind; int DwarfVersion = 0; enum DwarfDirectory { // Force disable DisableDwarfDirectory, // Force enable, for assemblers that support // `.file fileno directory filename' syntax EnableDwarfDirectory, // Default is based on the target DefaultDwarfDirectory }; DwarfDirectory MCUseDwarfDirectory; std::string ABIName; std::string AssemblyLanguage; std::string SplitDwarfFile; std::string AsSecureLogFile; const char *Argv0 = nullptr; ArrayRef CommandLineArgs; /// Additional paths to search for `.include` directives when using the /// integrated assembler. std::vector IASSearchPaths; MCTargetOptions(); /// 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; /// getAssemblyLanguage - If this returns a non-empty string this represents /// the textual name of the assembly language that we will use for this /// target, e.g. masm. StringRef getAssemblyLanguage() const; }; } // end namespace llvm #endif // LLVM_MC_MCTARGETOPTIONS_H