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
116 lines
3.7 KiB
C++
116 lines
3.7 KiB
C++
//===--- PS4CPU.h - PS4CPU 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_PS4CPU_H
|
|
#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_PS4CPU_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 {
|
|
|
|
namespace PS4cpu {
|
|
|
|
void addProfileRTArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CmdArgs);
|
|
|
|
void addSanitizerArgs(const ToolChain &TC, llvm::opt::ArgStringList &CmdArgs);
|
|
|
|
class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
|
|
public:
|
|
Assemble(const ToolChain &TC) : Tool("PS4cpu::Assemble", "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 Link : public Tool {
|
|
public:
|
|
Link(const ToolChain &TC) : Tool("PS4cpu::Link", "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 PS4cpu
|
|
} // namespace tools
|
|
|
|
namespace toolchains {
|
|
|
|
class LLVM_LIBRARY_VISIBILITY PS4CPU : public Generic_ELF {
|
|
public:
|
|
PS4CPU(const Driver &D, const llvm::Triple &Triple,
|
|
const llvm::opt::ArgList &Args);
|
|
|
|
// No support for finding a C++ standard library yet.
|
|
void addLibCxxIncludePaths(
|
|
const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CC1Args) const override {}
|
|
void addLibStdCxxIncludePaths(
|
|
const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CC1Args) const override {}
|
|
|
|
bool IsMathErrnoDefault() const override { return false; }
|
|
bool IsObjCNonFragileABIDefault() const override { return true; }
|
|
bool HasNativeLLVMSupport() const override;
|
|
bool isPICDefault() const override;
|
|
|
|
LangOptions::StackProtectorMode
|
|
GetDefaultStackProtectorLevel(bool KernelOrKext) const override {
|
|
return LangOptions::SSPStrong;
|
|
}
|
|
|
|
llvm::DebuggerKind getDefaultDebuggerTuning() const override {
|
|
return llvm::DebuggerKind::SCE;
|
|
}
|
|
|
|
SanitizerMask getSupportedSanitizers() const override;
|
|
|
|
// PS4 toolchain uses legacy thin LTO API, which is not
|
|
// capable of unit splitting.
|
|
bool canSplitThinLTOUnit() const override { return false; }
|
|
|
|
void addClangTargetOptions(
|
|
const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CC1Args,
|
|
Action::OffloadKind DeviceOffloadingKind) const override;
|
|
|
|
llvm::DenormalMode getDefaultDenormalModeForType(
|
|
const llvm::opt::ArgList &DriverArgs, const JobAction &JA,
|
|
const llvm::fltSemantics *FPType) const override {
|
|
// DAZ and FTZ are on by default.
|
|
return llvm::DenormalMode::getPreserveSign();
|
|
}
|
|
|
|
bool useRelaxRelocations() const override { return true; }
|
|
|
|
protected:
|
|
Tool *buildAssembler() const override;
|
|
Tool *buildLinker() const override;
|
|
};
|
|
|
|
} // end namespace toolchains
|
|
} // end namespace driver
|
|
} // end namespace clang
|
|
|
|
#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_PS4CPU_H
|