Make the virtual method Toolchain::GetDefaultStackProtectorLevel() return an explict enum value rather than an integral constant. This makes the code subjectively easier to read, and should help prevent bugs that may (or may never) arise from changing the enum values. Previously, these were just kept in sync via a comment, which is brittle. The trade off is including a additional header in a few new places. It is not necessary, but in my opinion helps the readability. Split off from https://reviews.llvm.org/D90194 to help cut down on lines changed in code review. Reviewed By: phosek Differential Revision: https://reviews.llvm.org/D90271
101 lines
3.4 KiB
C++
101 lines
3.4 KiB
C++
//===--- OpenBSD.h - OpenBSD ToolChain Implementations ----------*- 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_CLANG_LIB_DRIVER_TOOLCHAINS_OPENBSD_H
|
|
#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_OPENBSD_H
|
|
|
|
#include "Gnu.h"
|
|
#include "clang/Basic/LangOptions.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 Tool {
|
|
public:
|
|
Assembler(const ToolChain &TC)
|
|
: Tool("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 Tool {
|
|
public:
|
|
Linker(const ToolChain &TC) : Tool("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 HasNativeLLVMSupport() const override;
|
|
|
|
bool IsMathErrnoDefault() const override { return false; }
|
|
bool IsObjCNonFragileABIDefault() const override { return true; }
|
|
bool isPIEDefault() const override { return true; }
|
|
|
|
RuntimeLibType GetDefaultRuntimeLibType() const override {
|
|
return ToolChain::RLT_CompilerRT;
|
|
}
|
|
CXXStdlibType GetDefaultCXXStdlibType() const override {
|
|
return ToolChain::CST_Libcxx;
|
|
}
|
|
|
|
void
|
|
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CC1Args) const override;
|
|
|
|
void addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CC1Args) const override;
|
|
void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CmdArgs) const override;
|
|
|
|
std::string getCompilerRT(const llvm::opt::ArgList &Args, StringRef Component,
|
|
FileType Type = ToolChain::FT_Static) const override;
|
|
|
|
LangOptions::StackProtectorMode
|
|
GetDefaultStackProtectorLevel(bool KernelOrKext) const override {
|
|
return LangOptions::SSPStrong;
|
|
}
|
|
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
|