!106 Support stack clash protection
From: @wcleungaj Reviewed-by: @cf-zhao Signed-off-by: @cf-zhao
This commit is contained in:
commit
fc1c056ee3
@ -0,0 +1,99 @@
|
|||||||
|
From da192e499e442fc433ef8ab2290cf0021e214c85 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Momchil Velikov <momchil.velikov@arm.com>
|
||||||
|
Date: Thu, 30 Nov 2023 11:18:02 +0000
|
||||||
|
Subject: [PATCH 2/7] [clang][AArch64] Pass down stack clash protection options
|
||||||
|
to LLVM/Backend (#68993)
|
||||||
|
|
||||||
|
---
|
||||||
|
clang/lib/CodeGen/CodeGenModule.cpp | 13 +++++++++++++
|
||||||
|
clang/lib/Driver/ToolChains/Clang.cpp | 2 +-
|
||||||
|
clang/test/CodeGen/stack-clash-protection.c | 18 +++++++++++-------
|
||||||
|
3 files changed, 25 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
|
||||||
|
index f09d1129b128..eabc4aabea06 100644
|
||||||
|
--- a/clang/lib/CodeGen/CodeGenModule.cpp
|
||||||
|
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
|
||||||
|
@@ -1067,6 +1067,15 @@ void CodeGenModule::Release() {
|
||||||
|
"sign-return-address-with-bkey", 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (CodeGenOpts.StackClashProtector)
|
||||||
|
+ getModule().addModuleFlag(
|
||||||
|
+ llvm::Module::Override, "probe-stack",
|
||||||
|
+ llvm::MDString::get(TheModule.getContext(), "inline-asm"));
|
||||||
|
+
|
||||||
|
+ if (CodeGenOpts.StackProbeSize && CodeGenOpts.StackProbeSize != 4096)
|
||||||
|
+ getModule().addModuleFlag(llvm::Module::Min, "stack-probe-size",
|
||||||
|
+ CodeGenOpts.StackProbeSize);
|
||||||
|
+
|
||||||
|
if (!CodeGenOpts.MemoryProfileOutput.empty()) {
|
||||||
|
llvm::LLVMContext &Ctx = TheModule.getContext();
|
||||||
|
getModule().addModuleFlag(
|
||||||
|
@@ -2261,6 +2270,10 @@ void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
|
||||||
|
if (CodeGenOpts.StackClashProtector)
|
||||||
|
B.addAttribute("probe-stack", "inline-asm");
|
||||||
|
|
||||||
|
+ if (CodeGenOpts.StackProbeSize && CodeGenOpts.StackProbeSize != 4096)
|
||||||
|
+ B.addAttribute("stack-probe-size",
|
||||||
|
+ std::to_string(CodeGenOpts.StackProbeSize));
|
||||||
|
+
|
||||||
|
if (!hasUnwindExceptions(LangOpts))
|
||||||
|
B.addAttribute(llvm::Attribute::NoUnwind);
|
||||||
|
|
||||||
|
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
|
||||||
|
index 6b5930990f11..25627c72f858 100644
|
||||||
|
--- a/clang/lib/Driver/ToolChains/Clang.cpp
|
||||||
|
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
|
||||||
|
@@ -3473,7 +3473,7 @@ static void RenderSCPOptions(const ToolChain &TC, const ArgList &Args,
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!EffectiveTriple.isX86() && !EffectiveTriple.isSystemZ() &&
|
||||||
|
- !EffectiveTriple.isPPC64())
|
||||||
|
+ !EffectiveTriple.isPPC64() && !EffectiveTriple.isAArch64())
|
||||||
|
return;
|
||||||
|
|
||||||
|
Args.addOptInFlag(CmdArgs, options::OPT_fstack_clash_protection,
|
||||||
|
diff --git a/clang/test/CodeGen/stack-clash-protection.c b/clang/test/CodeGen/stack-clash-protection.c
|
||||||
|
index 67571f5cdb2c..dab9ee768c28 100644
|
||||||
|
--- a/clang/test/CodeGen/stack-clash-protection.c
|
||||||
|
+++ b/clang/test/CodeGen/stack-clash-protection.c
|
||||||
|
@@ -1,8 +1,9 @@
|
||||||
|
// Check the correct function attributes are generated
|
||||||
|
-// RUN: %clang_cc1 -triple x86_64-linux -O0 -S -emit-llvm -o- %s -fstack-clash-protection | FileCheck %s
|
||||||
|
-// RUN: %clang_cc1 -triple s390x-linux-gnu -O0 -S -emit-llvm -o- %s -fstack-clash-protection | FileCheck %s
|
||||||
|
-// RUN: %clang_cc1 -triple powerpc64le-linux-gnu -O0 -S -emit-llvm -o- %s -fstack-clash-protection | FileCheck %s
|
||||||
|
-// RUN: %clang_cc1 -triple powerpc64-linux-gnu -O0 -S -emit-llvm -o- %s -fstack-clash-protection | FileCheck %s
|
||||||
|
+// RUN: %clang_cc1 -triple x86_64-linux -O0 -S -emit-llvm -o- %s -fstack-clash-protection -mstack-probe-size=8192 | FileCheck %s
|
||||||
|
+// RUN: %clang_cc1 -triple s390x-linux-gnu -O0 -S -emit-llvm -o- %s -fstack-clash-protection -mstack-probe-size=8192 | FileCheck %s
|
||||||
|
+// RUN: %clang_cc1 -triple powerpc64le-linux-gnu -O0 -S -emit-llvm -o- %s -fstack-clash-protection -mstack-probe-size=8192 | FileCheck %s
|
||||||
|
+// RUN: %clang_cc1 -triple powerpc64-linux-gnu -O0 -S -emit-llvm -o- %s -fstack-clash-protection -mstack-probe-size=8192 | FileCheck %s
|
||||||
|
+// RUN: %clang_cc1 -triple aarch64-linux-gnu -O0 -S -emit-llvm -o- %s -fstack-clash-protection -mstack-probe-size=8192 | FileCheck %s
|
||||||
|
|
||||||
|
// CHECK: define{{.*}} void @large_stack() #[[A:.*]] {
|
||||||
|
void large_stack(void) {
|
||||||
|
@@ -11,15 +12,18 @@ void large_stack(void) {
|
||||||
|
stack[i] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
-// CHECK: define{{.*}} void @vla({{.*}}) #[[A:.*]] {
|
||||||
|
+// CHECK: define{{.*}} void @vla({{.*}}) #[[A]] {
|
||||||
|
void vla(int n) {
|
||||||
|
volatile int vla[n];
|
||||||
|
__builtin_memset(&vla[0], 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
-// CHECK: define{{.*}} void @builtin_alloca({{.*}}) #[[A:.*]] {
|
||||||
|
+// CHECK: define{{.*}} void @builtin_alloca({{.*}}) #[[A]] {
|
||||||
|
void builtin_alloca(int n) {
|
||||||
|
volatile void *mem = __builtin_alloca(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
-// CHECK: attributes #[[A]] = {{.*}} "probe-stack"="inline-asm"
|
||||||
|
+// CHECK: attributes #[[A]] = {{.*}}"probe-stack"="inline-asm" {{.*}}"stack-probe-size"="8192"
|
||||||
|
+
|
||||||
|
+// CHECK: !{i32 4, !"probe-stack", !"inline-asm"}
|
||||||
|
+// CHECK: !{i32 8, !"stack-probe-size", i32 8192}
|
||||||
|
--
|
||||||
|
2.42.0.windows.2
|
||||||
|
|
||||||
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
Name: %{pkg_name}
|
Name: %{pkg_name}
|
||||||
Version: %{clang_version}
|
Version: %{clang_version}
|
||||||
Release: 16
|
Release: 17
|
||||||
Summary: A C language family front-end for LLVM
|
Summary: A C language family front-end for LLVM
|
||||||
|
|
||||||
License: NCSA
|
License: NCSA
|
||||||
@ -60,6 +60,7 @@ Patch11: 0011-Add-the-support-for-classic-flang.patch
|
|||||||
Patch12: 0012-Fix-declaration-definition-mismatch-for-classic-flang.patch
|
Patch12: 0012-Fix-declaration-definition-mismatch-for-classic-flang.patch
|
||||||
Patch13: 0013-Ignored-option-Wa-generate-missing-build-notes.patch
|
Patch13: 0013-Ignored-option-Wa-generate-missing-build-notes.patch
|
||||||
Patch14: 0014-Update-llvm-lit-config-to-support-build_for_openeule.patch
|
Patch14: 0014-Update-llvm-lit-config-to-support-build_for_openeule.patch
|
||||||
|
Patch15: 0015-Backport-clang-AArch64-Pass-down-stack-clash-protection-options-to-LLVM-Backend.patch
|
||||||
|
|
||||||
# Patches for clang-tools-extra
|
# Patches for clang-tools-extra
|
||||||
# See https://reviews.llvm.org/D120301
|
# See https://reviews.llvm.org/D120301
|
||||||
@ -394,6 +395,9 @@ LD_LIBRARY_PATH=%{buildroot}/%{install_libdir} %{__ninja} check-all -C ./_build
|
|||||||
%{install_bindir}/git-clang-format
|
%{install_bindir}/git-clang-format
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri May 10 2024 rickyleung <leung.wing.chung@huawei.com> - 17.0.6-17
|
||||||
|
- Backport the patch to support stack clash protection
|
||||||
|
|
||||||
* Mon Apr 29 2024 wangqiang <wangqiang1@kylinos.cn> - 17.0.6-16
|
* Mon Apr 29 2024 wangqiang <wangqiang1@kylinos.cn> - 17.0.6-16
|
||||||
- Ignored the `-Wa,--generate-missing-build-notes=` option, update llvm-lit config to support macro `build_for_openeuler`
|
- Ignored the `-Wa,--generate-missing-build-notes=` option, update llvm-lit config to support macro `build_for_openeuler`
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user