diff options
| author | Roland McGrath <mcgrathr@google.com> | 2025-10-28 14:02:54 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-28 14:02:54 -0700 |
| commit | c25a4a97875012a6cf00f68e0d56b8680d80bdd2 (patch) | |
| tree | 19cab3b19e466fe0957633c3ce0cb03db731d0e6 | |
| parent | 10afda0796cf543390fa5670d757b3ff7a558224 (diff) | |
| download | llvm-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.cpp | 4 | ||||
| -rw-r--r-- | clang/test/Driver/fuchsia.c | 5 |
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" |
