diff options
author | Leonard Chan <leonardchan@google.com> | 2019-10-28 14:19:38 -0700 |
---|---|---|
committer | Leonard Chan <leonardchan@google.com> | 2019-10-28 14:19:38 -0700 |
commit | 85b718f53a3575bca2f1b7fdb1b3aaa6df7c10e3 (patch) | |
tree | 3392f2898f6d50b35c051340808fd52a665cd283 | |
parent | 91095fe0726e7d6bdd9c147a734f1287eb8eb8a4 (diff) | |
download | bcm5719-llvm-85b718f53a3575bca2f1b7fdb1b3aaa6df7c10e3.tar.gz bcm5719-llvm-85b718f53a3575bca2f1b7fdb1b3aaa6df7c10e3.zip |
[Driver] Enable ShadowCallStack, not SafeStack, by default on AArch64 Fuchsia
Submitted for mcgrathr.
On AArch64, Fuchsia fully supports both SafeStack and ShadowCallStack ABIs.
The latter is now preferred and will be the default. It's possible to
enable both simultaneously, but ShadowCallStack is believed to have most
of the practical benefit of SafeStack with less cost.
Differential Revision: https://reviews.llvm.org/D66712
-rw-r--r-- | clang/lib/Driver/ToolChains/Fuchsia.cpp | 7 | ||||
-rw-r--r-- | clang/test/Driver/fuchsia.c | 9 |
2 files changed, 11 insertions, 5 deletions
diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp b/clang/lib/Driver/ToolChains/Fuchsia.cpp index e7d38ff9f22..df2b4724dc2 100644 --- a/clang/lib/Driver/ToolChains/Fuchsia.cpp +++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp @@ -343,5 +343,10 @@ SanitizerMask Fuchsia::getSupportedSanitizers() const { } SanitizerMask Fuchsia::getDefaultSanitizers() const { - return SanitizerKind::SafeStack; + SanitizerMask Res; + if (getTriple().getArch() == llvm::Triple::aarch64) + Res |= SanitizerKind::ShadowCallStack; + else + Res |= SanitizerKind::SafeStack; + return Res; } diff --git a/clang/test/Driver/fuchsia.c b/clang/test/Driver/fuchsia.c index bf8e5a04dc9..b5f9c326ea6 100644 --- a/clang/test/Driver/fuchsia.c +++ b/clang/test/Driver/fuchsia.c @@ -13,7 +13,8 @@ // CHECK: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK: "-isysroot" "[[SYSROOT:[^"]+]]" // CHECK: "-internal-externc-isystem" "[[SYSROOT]]{{/|\\\\}}include" -// CHECK: "-fsanitize=safe-stack" +// CHECK-AARCH64: "-fsanitize=shadow-call-stack" +// CHECK-X86_64: "-fsanitize=safe-stack" // CHECK: "-stack-protector" "2" // CHECK: "-fno-common" // CHECK: {{.*}}ld.lld{{.*}}" "-z" "rodynamic" "-z" "separate-loadable-segments" @@ -102,7 +103,7 @@ // RUN: -fuse-ld=lld \ // RUN: | FileCheck %s -check-prefix=CHECK-ASAN-AARCH64 // CHECK-ASAN-AARCH64: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" -// CHECK-ASAN-AARCH64: "-fsanitize=address" +// CHECK-ASAN-AARCH64: "-fsanitize=address,shadow-call-stack" // CHECK-ASAN-AARCH64: "-fsanitize-address-globals-dead-stripping" // CHECK-ASAN-AARCH64: "-dynamic-linker" "asan/ld.so.1" // CHECK-ASAN-AARCH64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}aarch64-fuchsia{{/|\\\\}}libclang_rt.asan.so" @@ -134,7 +135,7 @@ // RUN: -fuse-ld=lld \ // RUN: | FileCheck %s -check-prefix=CHECK-FUZZER-AARCH64 // CHECK-FUZZER-AARCH64: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" -// CHECK-FUZZER-AARCH64: "-fsanitize=fuzzer,fuzzer-no-link,safe-stack" +// CHECK-FUZZER-AARCH64: "-fsanitize=fuzzer,fuzzer-no-link,shadow-call-stack" // CHECK-FUZZER-AARCH64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}aarch64-fuchsia{{/|\\\\}}libclang_rt.fuzzer.a" // RUN: %clang %s -### --target=x86_64-fuchsia \ @@ -153,7 +154,7 @@ // RUN: -fuse-ld=lld \ // RUN: | FileCheck %s -check-prefix=CHECK-SCUDO-AARCH64 // CHECK-SCUDO-AARCH64: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" -// CHECK-SCUDO-AARCH64: "-fsanitize=safe-stack,scudo" +// CHECK-SCUDO-AARCH64: "-fsanitize=shadow-call-stack,scudo" // CHECK-SCUDO-AARCH64: "-pie" // CHECK-SCUDO-AARCH64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}aarch64-fuchsia{{/|\\\\}}libclang_rt.scudo.so" |