https://github.com/mandlebug updated 
https://github.com/llvm/llvm-project/pull/139947

>From 21bbe51434af58e9a37e74a457a871ffb2e64d03 Mon Sep 17 00:00:00 2001
From: Sean Fertile <sd.fert...@gmail.com>
Date: Wed, 14 May 2025 14:52:48 -0400
Subject: [PATCH 1/2] [PPC] ROP protection won't be supported with the ELFV1
 ABI.

---
 clang/lib/Basic/Targets/PPC.cpp                     |  6 ++++++
 .../test/Driver/ppc-mrop-protection-support-check.c | 13 +++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/clang/lib/Basic/Targets/PPC.cpp b/clang/lib/Basic/Targets/PPC.cpp
index e6ef0ecc526ba..0cb43a24c8aff 100644
--- a/clang/lib/Basic/Targets/PPC.cpp
+++ b/clang/lib/Basic/Targets/PPC.cpp
@@ -685,6 +685,12 @@ bool PPCTargetInfo::initFeatureMap(
       return false;
     }
 
+    if (ABI == "elfv1") {
+      Diags.Report(diag::err_unsupported_abi_for_opt)
+          << "-mrop-protect" << "elfv2";
+      return false;
+    }
+
     if (!(ArchDefs & ArchDefinePwr8)) {
       // We can turn on ROP Protect on Power 8 and above.
       Diags.Report(diag::err_opt_not_valid_with_opt) << "-mrop-protect" << CPU;
diff --git a/clang/test/Driver/ppc-mrop-protection-support-check.c 
b/clang/test/Driver/ppc-mrop-protection-support-check.c
index f500e9e3e510c..34db142ef6796 100644
--- a/clang/test/Driver/ppc-mrop-protection-support-check.c
+++ b/clang/test/Driver/ppc-mrop-protection-support-check.c
@@ -6,11 +6,23 @@
 // RUN: not %clang -target powerpc64le-unknown-linux-gnu -fsyntax-only \
 // RUN:   -mcpu=pwr7 -mrop-protect %s 2>&1 | FileCheck %s --check-prefix=NOROP
 
+// RUN: not %clang -target powerpc64-unknown-linux-gnu -fsyntax-only \
+// RUN:   -mcpu=power8 -mrop-protect %s 2>&1 | FileCheck %s 
--check-prefix=ELFV1
+// RUN: not %clang -target powerpc64le-unknown-linux-gnu -fsyntax-only \
+// RUN:   -mcpu=power8 -mrop-protect -mabi=elfv1 %s 2>&1 | \
+// RUN:   FileCheck %s --check-prefix=ELFV1
+
 // RUN: not %clang -target powerpc-unknown-linux -fsyntax-only \
 // RUN: -mcpu=pwr8 -mrop-protect %s 2>&1 | FileCheck %s --check-prefix=32BIT
 // RUN: not %clang -target powerpc-unknown-aix -fsyntax-only \
 // RUN: -mcpu=pwr8 -mrop-protect %s 2>&1 | FileCheck %s --check-prefix=32BIT
 
+#ifdef __ROP_PROTECT__
+#if defined(__CALL_ELF) && __CALL_ELF == 1
+#error "ROP protection not supported with 64-bit elfv1 abi"
+#endif
+#endif
+
 #ifdef __ROP_PROTECT__
 static_assert(false, "ROP Protect enabled");
 #endif
@@ -20,3 +32,4 @@ static_assert(false, "ROP Protect enabled");
 // NOROP: option '-mrop-protect' cannot be specified with
 
 // 32BIT: option '-mrop-protect' cannot be specified on this target
+// ELFV1: '-mrop-protect' can only be used with the 'elfv2' ABI

>From 0a20e810b3339b161c45fdc7bb0ad0e39de65c3f Mon Sep 17 00:00:00 2001
From: Sean Fertile <sd.fert...@gmail.com>
Date: Wed, 6 Aug 2025 15:54:43 -0400
Subject: [PATCH 2/2] Explicitly specifiy which ABI to target when testing
 rop-protect.

The preprocessor init check was failing becuase of using rop-protect
with the default ABI which is ELFV1 for powerpc64. Also removed 2 of the
run lines as they only differ in the cpu level.
---
 clang/test/Preprocessor/init-ppc64.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/clang/test/Preprocessor/init-ppc64.c 
b/clang/test/Preprocessor/init-ppc64.c
index 7dffd4627481b..505a532fab0d1 100644
--- a/clang/test/Preprocessor/init-ppc64.c
+++ b/clang/test/Preprocessor/init-ppc64.c
@@ -697,9 +697,7 @@
 // RUN: %clang_cc1 -E -dM -ffreestanding -triple=powerpc64-none-none 
-target-feature +mma -target-cpu power10 -fno-signed-char < /dev/null | 
FileCheck -check-prefix PPC-MMA %s
 // PPC-MMA:#define __MMA__ 1
 //
-// RUN: %clang_cc1 -E -dM -ffreestanding -triple=powerpc64-none-none 
-target-feature +rop-protect -target-cpu power10 -fno-signed-char < /dev/null | 
FileCheck -check-prefix PPC-ROP %s
-// RUN: %clang_cc1 -E -dM -ffreestanding -triple=powerpc64-none-none 
-target-feature +rop-protect -target-cpu power9 -fno-signed-char < /dev/null | 
FileCheck -check-prefix PPC-ROP %s
-// RUN: %clang_cc1 -E -dM -ffreestanding -triple=powerpc64-none-none 
-target-feature +rop-protect -target-cpu power8 -fno-signed-char < /dev/null | 
FileCheck -check-prefix PPC-ROP %s
+// RUN: %clang_cc1 -E -dM -ffreestanding -triple=powerpc64-none-none 
-target-feature +rop-protect -target-abi elfv2 -target-cpu power8 
-fno-signed-char < /dev/null | FileCheck -check-prefix PPC-ROP %s
 // PPC-ROP:#define __ROP_PROTECT__ 1
 //
 // RUN: %clang_cc1 -E -dM -ffreestanding -triple=powerpc64-none-none 
-target-feature +float128 -target-cpu power9 -fno-signed-char < /dev/null | 
FileCheck -check-prefix PPC-FLOAT128 %s

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to