diff --git a/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch b/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch new file mode 100644 index 0000000..9ab7078 --- /dev/null +++ b/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch @@ -0,0 +1,59 @@ +From 8af8f327457738620d2c85bd65db8cc5594585db Mon Sep 17 00:00:00 2001 +From: Yuta Saito +Date: Wed, 27 Dec 2023 06:22:45 +0000 +Subject: [PATCH 1/2] [Bug #20085] Use consistent default options for + `-mbranch-protection` + +We need to use the same options for both C compiler and assembler +when `-mbranch-protection` is guessed by configure. Otherwise, +`coroutine/arm64/Context.{h,S}` will use incompatible PAC strategies. +--- + configure.ac | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 9286946fc1..18b4247991 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -830,7 +830,10 @@ AS_IF([test "$GCC" = yes], [ + AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [ + RUBY_TRY_CFLAGS(option, [branch_protection=yes], [branch_protection=no]) + AS_IF([test "x$branch_protection" = xyes], [ ++ # C compiler and assembler must be consistent for -mbranch-protection ++ # since they both check `__ARM_FEATURE_PAC_DEFAULT` definition. + RUBY_APPEND_OPTION(XCFLAGS, option) ++ RUBY_APPEND_OPTION(ASFLAGS, option) + break + ]) + ]) +-- +2.43.0 + + +From 80281e14e411e8e5fe4955effbb2c650a2f52667 Mon Sep 17 00:00:00 2001 +From: Jarek Prokop +Date: Fri, 12 Jan 2024 18:33:34 +0100 +Subject: [PATCH 2/2] aarch64: Prepend -mbranch-protection=standard option when + checking branch protection. + +Related Upstream issue: https://bugs.ruby-lang.org/issues/20154 +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 18b4247991..5ea8ada8f7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -827,7 +827,7 @@ AS_IF([test "$GCC" = yes], [ + + # aarch64 branch protection + AS_CASE(["$target_cpu"], [aarch64], [ +- AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [ ++ AS_FOR(option, opt, [-mbranch-protection=standard -mbranch-protection=pac-ret -msign-return-address=all], [ + RUBY_TRY_CFLAGS(option, [branch_protection=yes], [branch_protection=no]) + AS_IF([test "x$branch_protection" = xyes], [ + # C compiler and assembler must be consistent for -mbranch-protection +-- +2.43.0 + diff --git a/ruby.spec b/ruby.spec index 3307d6b..f75caf5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -167,7 +167,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 1%{?dist} +Release: 2%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -239,6 +239,10 @@ Patch10: ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patc # https://github.com/ruby/ruby/commit/d3933fc753187a055a4904af82f5f3794c88c416 # https://bugs.ruby-lang.org/issues/20106 Patch11: ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch +# Armv8.3+ capable CPUs might segfault with incorrect compilation options. +# See related upstream report: https://bugs.ruby-lang.org/issues/20085 +# https://bugs.ruby-lang.org/issues/20154 +Patch12: ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -710,6 +714,7 @@ analysis result in RBS format, a standard type description format for Ruby %patch 9 -p1 %patch 10 -p1 %patch 11 -p1 +%patch 12 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1645,6 +1650,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Mon Jan 15 2024 Jarek Prokop - 3.3.0-2 +- Fix compiling coroutines with aarch64's branch protection. + * Tue Jan 02 2024 Vít Ondruch - 3.3.0-1 - Upgrade to Ruby 3.3.0. Resolves: rhbz#2255918