From fdcbcfb0403d092dd5f9e54a8e9a530b785b26af Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Wed, 7 Mar 2018 02:49:58 +0000 Subject: [PATCH] [Driver] Enable SafeStack by default on Fuchsia This is already used throughout the entire system, so make it a default. Differential Revision: https://reviews.llvm.org/D44065 llvm-svn: 326867 --- clang/lib/Driver/ToolChains/Fuchsia.cpp | 4 ++++ clang/lib/Driver/ToolChains/Fuchsia.h | 5 +++++ clang/test/Driver/fuchsia.c | 12 +++++++----- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp b/clang/lib/Driver/ToolChains/Fuchsia.cpp index 5f4995c..aa6b939 100644 --- a/clang/lib/Driver/ToolChains/Fuchsia.cpp +++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp @@ -284,3 +284,7 @@ SanitizerMask Fuchsia::getSupportedSanitizers() const { Res |= SanitizerKind::Scudo; return Res; } + +SanitizerMask Fuchsia::getDefaultSanitizers() const { + return SanitizerKind::SafeStack; +} diff --git a/clang/lib/Driver/ToolChains/Fuchsia.h b/clang/lib/Driver/ToolChains/Fuchsia.h index 6f438de..e61eddc 100644 --- a/clang/lib/Driver/ToolChains/Fuchsia.h +++ b/clang/lib/Driver/ToolChains/Fuchsia.h @@ -60,10 +60,15 @@ public: return llvm::DebuggerKind::GDB; } + unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override { + return 2; // SSPStrong + } + std::string ComputeEffectiveClangTriple(const llvm::opt::ArgList &Args, types::ID InputType) const override; SanitizerMask getSupportedSanitizers() const override; + SanitizerMask getDefaultSanitizers() const override; RuntimeLibType GetRuntimeLibType(const llvm::opt::ArgList &Args) const override; diff --git a/clang/test/Driver/fuchsia.c b/clang/test/Driver/fuchsia.c index 57dbc73..1ec7935 100644 --- a/clang/test/Driver/fuchsia.c +++ b/clang/test/Driver/fuchsia.c @@ -10,6 +10,8 @@ // CHECK: "-fuse-init-array" // CHECK: "-isysroot" "[[SYSROOT:[^"]+]]" // CHECK: "-internal-externc-isystem" "[[SYSROOT]]{{/|\\\\}}include" +// CHECK: "-fsanitize=safe-stack" +// CHECK: "-stack-protector" "2" // CHECK: "-fno-common" // CHECK: {{.*}}ld.lld{{.*}}" "-z" "rodynamic" // CHECK: "--sysroot=[[SYSROOT]]" @@ -84,31 +86,31 @@ // RUN: %clang %s -### --target=x86_64-fuchsia \ // RUN: -fsanitize=fuzzer 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK-FUZZER-X86 -// CHECK-FUZZER-X86: "-fsanitize=fuzzer,fuzzer-no-link" +// CHECK-FUZZER-X86: "-fsanitize=fuzzer,fuzzer-no-link,safe-stack" // CHECK-FUZZER-X86: "{{.*[/\\]}}libclang_rt.fuzzer-x86_64.a" // RUN: %clang %s -### --target=aarch64-fuchsia \ // RUN: -fsanitize=fuzzer 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK-FUZZER-AARCH64 -// CHECK-FUZZER-AARCH64: "-fsanitize=fuzzer,fuzzer-no-link" +// CHECK-FUZZER-AARCH64: "-fsanitize=fuzzer,fuzzer-no-link,safe-stack" // CHECK-FUZZER-AARCH64: "{{.*[/\\]}}libclang_rt.fuzzer-aarch64.a" // RUN: %clang %s -### --target=x86_64-fuchsia \ // RUN: -fsanitize=scudo 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK-SCUDO-X86 -// CHECK-SCUDO-X86: "-fsanitize=scudo" +// CHECK-SCUDO-X86: "-fsanitize=safe-stack,scudo" // CHECK-SCUDO-X86: "-pie" // CHECK-SCUDO-X86: "{{.*[/\\]}}libclang_rt.scudo-x86_64.so" // RUN: %clang %s -### --target=aarch64-fuchsia \ // RUN: -fsanitize=scudo 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK-SCUDO-AARCH64 -// CHECK-SCUDO-AARCH64: "-fsanitize=scudo" +// CHECK-SCUDO-AARCH64: "-fsanitize=safe-stack,scudo" // CHECK-SCUDO-AARCH64: "-pie" // CHECK-SCUDO-AARCH64: "{{.*[/\\]}}libclang_rt.scudo-aarch64.so" // RUN: %clang %s -### --target=x86_64-fuchsia \ // RUN: -fsanitize=scudo -fPIC -shared 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK-SCUDO-SHARED -// CHECK-SCUDO-SHARED: "-fsanitize=scudo" +// CHECK-SCUDO-SHARED: "-fsanitize=safe-stack,scudo" // CHECK-SCUDO-SHARED: "{{.*[/\\]}}libclang_rt.scudo-x86_64.so" -- 2.7.4