| //===--- OpenBSD.h - OpenBSD ToolChain Implementations ----------*- C++ -*-===// | 
 | // | 
 | //                     The LLVM Compiler Infrastructure | 
 | // | 
 | // This file is distributed under the University of Illinois Open Source | 
 | // License. See LICENSE.TXT for details. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_OPENBSD_H | 
 | #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_OPENBSD_H | 
 |  | 
 | #include "Gnu.h" | 
 | #include "clang/Driver/Tool.h" | 
 | #include "clang/Driver/ToolChain.h" | 
 |  | 
 | namespace clang { | 
 | namespace driver { | 
 | namespace tools { | 
 |  | 
 | /// openbsd -- Directly call GNU Binutils assembler and linker | 
 | namespace openbsd { | 
 | class LLVM_LIBRARY_VISIBILITY Assembler : public GnuTool { | 
 | public: | 
 |   Assembler(const ToolChain &TC) | 
 |       : GnuTool("openbsd::Assembler", "assembler", TC) {} | 
 |  | 
 |   bool hasIntegratedCPP() const override { return false; } | 
 |  | 
 |   void ConstructJob(Compilation &C, const JobAction &JA, | 
 |                     const InputInfo &Output, const InputInfoList &Inputs, | 
 |                     const llvm::opt::ArgList &TCArgs, | 
 |                     const char *LinkingOutput) const override; | 
 | }; | 
 |  | 
 | class LLVM_LIBRARY_VISIBILITY Linker : public GnuTool { | 
 | public: | 
 |   Linker(const ToolChain &TC) : GnuTool("openbsd::Linker", "linker", TC) {} | 
 |  | 
 |   bool hasIntegratedCPP() const override { return false; } | 
 |   bool isLinkJob() const override { return true; } | 
 |  | 
 |   void ConstructJob(Compilation &C, const JobAction &JA, | 
 |                     const InputInfo &Output, const InputInfoList &Inputs, | 
 |                     const llvm::opt::ArgList &TCArgs, | 
 |                     const char *LinkingOutput) const override; | 
 | }; | 
 | } // end namespace openbsd | 
 | } // end namespace tools | 
 |  | 
 | namespace toolchains { | 
 |  | 
 | class LLVM_LIBRARY_VISIBILITY OpenBSD : public Generic_ELF { | 
 | public: | 
 |   OpenBSD(const Driver &D, const llvm::Triple &Triple, | 
 |           const llvm::opt::ArgList &Args); | 
 |  | 
 |   bool IsMathErrnoDefault() const override { return false; } | 
 |   bool IsObjCNonFragileABIDefault() const override { return true; } | 
 |   bool isPIEDefault() const override { return true; } | 
 |   void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, | 
 |                            llvm::opt::ArgStringList &CmdArgs) const override; | 
 |  | 
 |   unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override { | 
 |     return 2; | 
 |   } | 
 |   unsigned GetDefaultDwarfVersion() const override { return 2; } | 
 |  | 
 |   SanitizerMask getSupportedSanitizers() const override; | 
 |  | 
 | protected: | 
 |   Tool *buildAssembler() const override; | 
 |   Tool *buildLinker() const override; | 
 | }; | 
 |  | 
 | } // end namespace toolchains | 
 | } // end namespace driver | 
 | } // end namespace clang | 
 |  | 
 | #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_OPENBSD_H |