aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <mcgrathr@google.com>2025-10-28 14:02:54 -0700
committerGitHub <noreply@github.com>2025-10-28 14:02:54 -0700
commitc25a4a97875012a6cf00f68e0d56b8680d80bdd2 (patch)
tree19cab3b19e466fe0957633c3ce0cb03db731d0e6
parent10afda0796cf543390fa5670d757b3ff7a558224 (diff)
downloadllvm-c25a4a97875012a6cf00f68e0d56b8680d80bdd2.zip
llvm-c25a4a97875012a6cf00f68e0d56b8680d80bdd2.tar.gz
llvm-c25a4a97875012a6cf00f68e0d56b8680d80bdd2.tar.bz2
[Clang] Restore SafeStack support for x86-32 Fuchsia (#165471)
Fuchsia does not fully support an x86-32 (i?86-fuchsia) target. But the x86_64-fuchsia target in -m32 mode is used when building some kernel / boot-loader related code. This narrow use of an (effective) i?86-fuchsia target still supports SafeStack using the same Fuchsia-specific ABI as x86_64-fuchsia.
-rw-r--r--clang/lib/Driver/ToolChains/Fuchsia.cpp4
-rw-r--r--clang/test/Driver/fuchsia.c5
2 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp b/clang/lib/Driver/ToolChains/Fuchsia.cpp
index 31c2f3f..507cc03 100644
--- a/clang/lib/Driver/ToolChains/Fuchsia.cpp
+++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp
@@ -483,7 +483,8 @@ SanitizerMask Fuchsia::getSupportedSanitizers() const {
Res |= SanitizerKind::Leak;
Res |= SanitizerKind::Scudo;
Res |= SanitizerKind::Thread;
- if (getTriple().getArch() == llvm::Triple::x86_64) {
+ if (getTriple().getArch() == llvm::Triple::x86_64 ||
+ getTriple().getArch() == llvm::Triple::x86) {
Res |= SanitizerKind::SafeStack;
}
return Res;
@@ -496,6 +497,7 @@ SanitizerMask Fuchsia::getDefaultSanitizers() const {
case llvm::Triple::riscv64:
Res |= SanitizerKind::ShadowCallStack;
break;
+ case llvm::Triple::x86:
case llvm::Triple::x86_64:
Res |= SanitizerKind::SafeStack;
break;
diff --git a/clang/test/Driver/fuchsia.c b/clang/test/Driver/fuchsia.c
index d0fec18..99e5018 100644
--- a/clang/test/Driver/fuchsia.c
+++ b/clang/test/Driver/fuchsia.c
@@ -130,6 +130,11 @@
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
// RUN: -fuse-ld=ld \
// RUN: | FileCheck %s -check-prefix=CHECK-SAFESTACK
+// RUN: %clang -### %s --target=x86_64-unknown-fuchsia -m32 \
+// RUN: -fsanitize=safe-stack 2>&1 \
+// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
+// RUN: -fuse-ld=ld \
+// RUN: | FileCheck %s -check-prefix=CHECK-SAFESTACK
// CHECK-SAFESTACK: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
// CHECK-SAFESTACK: "-fsanitize=safe-stack"
// CHECK-SAFESTACK-NOT: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}libclang_rt.safestack.a"