diff options
Diffstat (limited to 'contrib/llvm-project/clang/lib/Driver/ToolChains/Fuchsia.cpp')
-rw-r--r-- | contrib/llvm-project/clang/lib/Driver/ToolChains/Fuchsia.cpp | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/contrib/llvm-project/clang/lib/Driver/ToolChains/Fuchsia.cpp b/contrib/llvm-project/clang/lib/Driver/ToolChains/Fuchsia.cpp index e7d38ff9f227..808d0408d0d4 100644 --- a/contrib/llvm-project/clang/lib/Driver/ToolChains/Fuchsia.cpp +++ b/contrib/llvm-project/clang/lib/Driver/ToolChains/Fuchsia.cpp @@ -46,6 +46,9 @@ void fuchsia::Linker::ConstructJob(Compilation &C, const JobAction &JA, // handled somewhere else. Args.ClaimAllArgs(options::OPT_w); + CmdArgs.push_back("-z"); + CmdArgs.push_back("now"); + const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath()); if (llvm::sys::path::filename(Exec).equals_lower("ld.lld") || llvm::sys::path::stem(Exec).equals_lower("ld.lld")) { @@ -224,7 +227,7 @@ Fuchsia::Fuchsia(const Driver &D, const llvm::Triple &Triple, std::string Fuchsia::ComputeEffectiveClangTriple(const ArgList &Args, types::ID InputType) const { llvm::Triple Triple(ComputeLLVMTriple(Args, InputType)); - return (Triple.getArchName() + "-" + Triple.getOSName()).str(); + return Triple.str(); } Tool *Fuchsia::buildLinker() const { @@ -258,9 +261,9 @@ Fuchsia::GetCXXStdlibType(const ArgList &Args) const { void Fuchsia::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args, Action::OffloadKind) const { - if (DriverArgs.hasFlag(options::OPT_fuse_init_array, - options::OPT_fno_use_init_array, true)) - CC1Args.push_back("-fuse-init-array"); + if (!DriverArgs.hasFlag(options::OPT_fuse_init_array, + options::OPT_fno_use_init_array, true)) + CC1Args.push_back("-fno-use-init-array"); } void Fuchsia::AddClangSystemIncludeArgs(const ArgList &DriverArgs, @@ -343,5 +346,17 @@ SanitizerMask Fuchsia::getSupportedSanitizers() const { } SanitizerMask Fuchsia::getDefaultSanitizers() const { - return SanitizerKind::SafeStack; + SanitizerMask Res; + switch (getTriple().getArch()) { + case llvm::Triple::aarch64: + Res |= SanitizerKind::ShadowCallStack; + break; + case llvm::Triple::x86_64: + Res |= SanitizerKind::SafeStack; + break; + default: + // TODO: Enable SafeStack on RISC-V once tested. + break; + } + return Res; } |