diff --git a/SOURCES/gcc-11.4.1-20231218.tar.xz b/SOURCES/gcc-11.4.1-20231218.tar.xz
new file mode 100644
index 0000000..86f1f6d
Binary files /dev/null and b/SOURCES/gcc-11.4.1-20231218.tar.xz differ
diff --git a/SOURCES/gcc11-bind-now.patch b/SOURCES/gcc11-bind-now.patch
index e0b99a9..cdba02e 100644
--- a/SOURCES/gcc11-bind-now.patch
+++ b/SOURCES/gcc11-bind-now.patch
@@ -47,15 +47,15 @@ index c1aceb8404a..25432b5040d 100755
--- a/c++tools/configure
+++ b/c++tools/configure
@@ -631,6 +631,7 @@ ac_ct_CC
- CFLAGS
- CC
+ GREP
+ CXXCPP
LD_PICFLAG
+enable_host_bind_now
PICFLAG
MAINTAINER
CXX_AUX_TOOLS
@@ -704,6 +705,7 @@ enable_c___tools
- enable_maintainer_mode
+ enable_checking
enable_default_pie
enable_host_pie
+enable_host_bind_now
@@ -63,7 +63,7 @@ index c1aceb8404a..25432b5040d 100755
'
ac_precious_vars='build_alias
@@ -1336,6 +1338,7 @@ Optional Features:
- configurey bits
+ yes,no,all,none,release.
--enable-default-pie enable Position Independent Executable as default
--enable-host-pie build host code as PIE
+ --enable-host-bind-now link host code as BIND_NOW
@@ -84,7 +84,7 @@ index c1aceb8404a..25432b5040d 100755
+
# Check if O_CLOEXEC is defined by fcntl
- ac_ext=c
+
diff --git a/c++tools/configure.ac b/c++tools/configure.ac
index 1e42689f2eb..d3f23f66f00 100644
--- a/c++tools/configure.ac
diff --git a/SOURCES/gcc11-libstdc++-docs.patch b/SOURCES/gcc11-libstdc++-docs.patch
index b044a4d..353ab27 100644
--- a/SOURCES/gcc11-libstdc++-docs.patch
+++ b/SOURCES/gcc11-libstdc++-docs.patch
@@ -4,7 +4,7 @@
FSF
-+ Release 11.3.1
++ Release 11.4.1
+
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
@@ -17,7 +17,7 @@
- The API documentation, rendered into HTML, can be viewed online
+ The API documentation, rendered into HTML, can be viewed locally
-+ for the 11.3.1 release,
++ for the 11.4.1 release,
+ online
for each GCC release
and
diff --git a/SOURCES/gcc11-pie.patch b/SOURCES/gcc11-pie.patch
index 728d048..71ae8d9 100644
--- a/SOURCES/gcc11-pie.patch
+++ b/SOURCES/gcc11-pie.patch
@@ -121,32 +121,32 @@ index 742816e4253..88087009383 100755
--- a/c++tools/configure
+++ b/c++tools/configure
@@ -630,7 +630,8 @@ CPP
- ac_ct_CC
- CFLAGS
- CC
+ EGREP
+ GREP
+ CXXCPP
-PIEFLAG
+LD_PICFLAG
+PICFLAG
MAINTAINER
CXX_AUX_TOOLS
AUTOHEADER
-@@ -702,6 +703,7 @@ enable_option_checking
- enable_c___tools
+@@ -700,6 +701,7 @@ enable_c___tools
enable_maintainer_mode
+ enable_checking
enable_default_pie
+enable_host_pie
with_gcc_major_version_only
'
ac_precious_vars='build_alias
@@ -1333,6 +1335,7 @@ Optional Features:
- enable maintainer mode. Add rules to rebuild
- configurey bits
+ only specific categories of checks. Categories are:
+ yes,no,all,none,release.
--enable-default-pie enable Position Independent Executable as default
+ --enable-host-pie build host code as PIE
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
-@@ -2992,12 +2995,20 @@ test "$maintainer_mode" = yes && MAINTAI
+@@ -2990,12 +2993,20 @@ fi
# Check whether --enable-default-pie was given.
# Check whether --enable-default-pie was given.
if test "${enable_default_pie+set}" = set; then :
@@ -168,7 +168,7 @@ index 742816e4253..88087009383 100755
+
# Check if O_CLOEXEC is defined by fcntl
- ac_ext=c
+
diff --git a/c++tools/configure.ac b/c++tools/configure.ac
index 6662b5ad7c9..1e42689f2eb 100644
--- a/c++tools/configure.ac
diff --git a/SOURCES/gcc11-pr111039.patch b/SOURCES/gcc11-pr111039.patch
new file mode 100644
index 0000000..3fab07e
--- /dev/null
+++ b/SOURCES/gcc11-pr111039.patch
@@ -0,0 +1,59 @@
+commit 482551a79a3d3f107f6239679ee74655cfe8707e
+Author: Richard Biener
+Date: Thu Aug 17 13:10:14 2023 +0200
+
+ tree-optimization/111039 - abnormals and bit test merging
+
+ The following guards the bit test merging code in if-combine against
+ the appearance of SSA names used in abnormal PHIs.
+
+ PR tree-optimization/111039
+ * tree-ssa-ifcombine.cc (ifcombine_ifandif): Check for
+ SSA_NAME_OCCURS_IN_ABNORMAL_PHI.
+
+ * gcc.dg/pr111039.c: New testcase.
+
+diff --git a/gcc/testsuite/gcc.dg/pr111039.c b/gcc/testsuite/gcc.dg/pr111039.c
+new file mode 100644
+index 00000000000..bec9983b35f
+--- /dev/null
++++ b/gcc/testsuite/gcc.dg/pr111039.c
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++/* { dg-options "-O" } */
++
++int _setjmp ();
++void abcd ();
++void abcde ();
++void compiler_corruption_function(int flags)
++{
++ int nowait = flags & 1048576, isexpand = flags & 8388608;
++ abcd();
++ _setjmp(flags);
++ if (nowait && isexpand)
++ flags &= 0;
++ abcde();
++}
+--- a/gcc/tree-ssa-ifcombine.c
++++ b/gcc/tree-ssa-ifcombine.c
+@@ -430,6 +430,9 @@ ifcombine_ifandif (basic_block inner_cond_bb, bool inner_inv,
+ {
+ tree t, t2;
+
++ if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1))
++ return false;
++
+ /* Do it. */
+ gsi = gsi_for_stmt (inner_cond);
+ t = fold_build2 (LSHIFT_EXPR, TREE_TYPE (name1),
+@@ -486,6 +489,10 @@ ifcombine_ifandif (basic_block inner_cond_bb, bool inner_inv,
+ gimple_stmt_iterator gsi;
+ tree t;
+
++ if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1)
++ || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name2))
++ return false;
++
+ /* Find the common name which is bit-tested. */
+ if (name1 == name2)
+ ;
diff --git a/SOURCES/gcc11-pr111070.patch b/SOURCES/gcc11-pr111070.patch
new file mode 100644
index 0000000..b5a0241
--- /dev/null
+++ b/SOURCES/gcc11-pr111070.patch
@@ -0,0 +1,66 @@
+commit 966b0a96523fb7adbf498ac71df5e033c70dc546
+Author: Richard Biener
+Date: Mon Aug 21 09:01:00 2023 +0200
+
+ tree-optimization/111070 - fix ICE with recent ifcombine fix
+
+ We now got test coverage for non-SSA name bits so the following amends
+ the SSA_NAME_OCCURS_IN_ABNORMAL_PHI checks.
+
+ PR tree-optimization/111070
+ * tree-ssa-ifcombine.cc (ifcombine_ifandif): Check we have
+ an SSA name before checking SSA_NAME_OCCURS_IN_ABNORMAL_PHI.
+
+ * gcc.dg/pr111070.c: New testcase.
+
+diff --git a/gcc/testsuite/gcc.dg/pr111070.c b/gcc/testsuite/gcc.dg/pr111070.c
+new file mode 100644
+index 00000000000..1ebc7adf782
+--- /dev/null
++++ b/gcc/testsuite/gcc.dg/pr111070.c
+@@ -0,0 +1,20 @@
++/* { dg-do compile } */
++/* { dg-options "-O" } */
++
++/* common */
++char c;
++/* arrays must be 8 byte aligned, regardless of size */
++char c_ary[1];
++
++/* data */
++char d = 1;
++char d_ary[1] = {1};
++
++int main ()
++{
++ if (((unsigned long)&c_ary[0] & 7) != 0)
++ return 1;
++ if (((unsigned long)&d_ary[0] & 7) != 0)
++ return 1;
++ return 0;
++}
+--- a/gcc/tree-ssa-ifcombine.c
++++ b/gcc/tree-ssa-ifcombine.c
+@@ -430,7 +430,8 @@ ifcombine_ifandif (basic_block inner_cond_bb, bool inner_inv,
+ {
+ tree t, t2;
+
+- if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1))
++ if (TREE_CODE (name1) == SSA_NAME
++ && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1))
+ return false;
+
+ /* Do it. */
+@@ -489,8 +490,10 @@ ifcombine_ifandif (basic_block inner_cond_bb, bool inner_inv,
+ gimple_stmt_iterator gsi;
+ tree t;
+
+- if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1)
+- || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name2))
++ if ((TREE_CODE (name1) == SSA_NAME
++ && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1))
++ || (TREE_CODE (name2) == SSA_NAME
++ && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name2)))
+ return false;
+
+ /* Find the common name which is bit-tested. */
diff --git a/SOURCES/gcc11-s390x-regarg-1.patch b/SOURCES/gcc11-s390x-regarg-1.patch
new file mode 100644
index 0000000..b8de714
--- /dev/null
+++ b/SOURCES/gcc11-s390x-regarg-1.patch
@@ -0,0 +1,91 @@
+commit ef5f7b89bbc352255595069eb870d6f30f1f9134
+Author: Andreas Krebbel
+Date: Wed Feb 1 08:59:41 2023 +0100
+
+ New reg note REG_CFA_NORESTORE
+
+ This patch introduces a new reg note which can be used to tell the CFI
+ verification in dwarf2cfi that a register is stored without intending
+ to restore from it.
+
+ This is useful when storing e.g. register contents to the stack and
+ generate CFI for it although the register is not really supposed to be
+ restored.
+
+ gcc/ChangeLog:
+
+ * dwarf2cfi.c (dwarf2out_frame_debug_cfa_restore): Add
+ EMIT_CFI parameter.
+ (dwarf2out_frame_debug): Add case for REG_CFA_NORESTORE.
+ * reg-notes.def (REG_CFA_NOTE): New reg note definition.
+
+--- a/gcc/dwarf2cfi.c
++++ b/gcc/dwarf2cfi.c
+@@ -1496,10 +1496,12 @@ dwarf2out_frame_debug_cfa_val_expression (rtx set)
+ update_row_reg_save (cur_row, dwf_regno (dest), cfi);
+ }
+
+-/* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note. */
++/* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE
++ note. When called with EMIT_CFI set to false emitting a CFI
++ statement is suppressed. */
+
+ static void
+-dwarf2out_frame_debug_cfa_restore (rtx reg)
++dwarf2out_frame_debug_cfa_restore (rtx reg, bool emit_cfi)
+ {
+ gcc_assert (REG_P (reg));
+
+@@ -1507,7 +1509,8 @@ dwarf2out_frame_debug_cfa_restore (rtx reg)
+ if (!span)
+ {
+ unsigned int regno = dwf_regno (reg);
+- add_cfi_restore (regno);
++ if (emit_cfi)
++ add_cfi_restore (regno);
+ update_row_reg_save (cur_row, regno, NULL);
+ }
+ else
+@@ -1522,7 +1525,8 @@ dwarf2out_frame_debug_cfa_restore (rtx reg)
+ reg = XVECEXP (span, 0, par_index);
+ gcc_assert (REG_P (reg));
+ unsigned int regno = dwf_regno (reg);
+- add_cfi_restore (regno);
++ if (emit_cfi)
++ add_cfi_restore (regno);
+ update_row_reg_save (cur_row, regno, NULL);
+ }
+ }
+@@ -2309,6 +2313,7 @@ dwarf2out_frame_debug (rtx_insn *insn)
+ break;
+
+ case REG_CFA_RESTORE:
++ case REG_CFA_NO_RESTORE:
+ n = XEXP (note, 0);
+ if (n == NULL)
+ {
+@@ -2317,7 +2322,7 @@ dwarf2out_frame_debug (rtx_insn *insn)
+ n = XVECEXP (n, 0, 0);
+ n = XEXP (n, 0);
+ }
+- dwarf2out_frame_debug_cfa_restore (n);
++ dwarf2out_frame_debug_cfa_restore (n, REG_NOTE_KIND (note) == REG_CFA_RESTORE);
+ handled_one = true;
+ break;
+
+diff --git a/gcc/reg-notes.def b/gcc/reg-notes.def
+index 23de1f13ee9..1f74a605b3e 100644
+--- a/gcc/reg-notes.def
++++ b/gcc/reg-notes.def
+@@ -157,6 +157,11 @@ REG_CFA_NOTE (CFA_VAL_EXPRESSION)
+ first pattern is the register to be restored. */
+ REG_CFA_NOTE (CFA_RESTORE)
+
++/* Like CFA_RESTORE but without actually emitting CFI. This can be
++ used to tell the verification infrastructure that a register is
++ saved without intending to restore it. */
++REG_CFA_NOTE (CFA_NO_RESTORE)
++
+ /* Attached to insns that are RTX_FRAME_RELATED_P, marks insn that sets
+ vDRAP from DRAP. If vDRAP is a register, vdrap_reg is initalized
+ to the argument, if it is a MEM, it is ignored. */
diff --git a/SOURCES/gcc11-s390x-regarg-2.patch b/SOURCES/gcc11-s390x-regarg-2.patch
new file mode 100644
index 0000000..c4ae464
--- /dev/null
+++ b/SOURCES/gcc11-s390x-regarg-2.patch
@@ -0,0 +1,92 @@
+commit 36ffb2e0293d1bbef30e3553a431679de00549b9
+Author: Andreas Krebbel
+Date: Wed Feb 1 08:59:42 2023 +0100
+
+ IBM zSystems: Make stack_tie to work with hard frame pointer
+
+ With this patch a scheduling barrier is created to prevent the insn
+ setting up the frame-pointer and instructions which save GPRs to the
+ stack to be swapped. Otherwise broken CFI information would be
+ generated since the stack save insns would use a base register which
+ is not currently declared as holding the CFA.
+
+ Without -mpreserve-args this did not happen because the store multiple
+ we used for saving the GPRs would also cover the frame-pointer
+ register and therefore creates a dependency on the frame-pointer
+ hardreg. However, with this patch the stack_tie is emitted regardless
+ of -mpreserve-args since this in general appears to be the safer
+ approach.
+
+ * config/s390/s390.c (save_gprs): Use gen_frame_mem.
+ (restore_gprs): Likewise.
+ (s390_emit_stack_tie): Make the stack_tie to be dependent on the
+ frame pointer if a frame-pointer is used.
+ (s390_emit_prologue): Emit stack_tie when frame-pointer is needed.
+ * config/s390/s390.md (stack_tie): Add a register operand and
+ rename to ...
+ (@stack_tie): ... this.
+
+--- a/gcc/config/s390/s390.c
++++ b/gcc/config/s390/s390.c
+@@ -10898,9 +10898,7 @@ save_gprs (rtx base, int offset, int first, int last)
+ int i;
+
+ addr = plus_constant (Pmode, base, offset);
+- addr = gen_rtx_MEM (Pmode, addr);
+-
+- set_mem_alias_set (addr, get_frame_alias_set ());
++ addr = gen_frame_mem (Pmode, addr);
+
+ /* Special-case single register. */
+ if (first == last)
+@@ -11012,8 +11010,7 @@ restore_gprs (rtx base, int offset, int first, int last)
+ rtx addr, insn;
+
+ addr = plus_constant (Pmode, base, offset);
+- addr = gen_rtx_MEM (Pmode, addr);
+- set_mem_alias_set (addr, get_frame_alias_set ());
++ addr = gen_frame_mem (Pmode, addr);
+
+ /* Special-case single register. */
+ if (first == last)
+@@ -11062,10 +11059,11 @@ s390_load_got (void)
+ static void
+ s390_emit_stack_tie (void)
+ {
+- rtx mem = gen_frame_mem (BLKmode,
+- gen_rtx_REG (Pmode, STACK_POINTER_REGNUM));
+-
+- emit_insn (gen_stack_tie (mem));
++ rtx mem = gen_frame_mem (BLKmode, stack_pointer_rtx);
++ if (frame_pointer_needed)
++ emit_insn (gen_stack_tie (Pmode, mem, hard_frame_pointer_rtx));
++ else
++ emit_insn (gen_stack_tie (Pmode, mem, stack_pointer_rtx));
+ }
+
+ /* Copy GPRS into FPR save slots. */
+@@ -11676,6 +11674,7 @@ s390_emit_prologue (void)
+
+ if (frame_pointer_needed)
+ {
++ s390_emit_stack_tie ();
+ insn = emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx);
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
+index 4828aa08be6..00d39608e1d 100644
+--- a/gcc/config/s390/s390.md
++++ b/gcc/config/s390/s390.md
+@@ -11590,9 +11590,10 @@ (define_insn "stack_protect_test"
+ ; This is used in s390_emit_prologue in order to prevent insns
+ ; adjusting the stack pointer to be moved over insns writing stack
+ ; slots using a copy of the stack pointer in a different register.
+-(define_insn "stack_tie"
++(define_insn "@stack_tie"
+ [(set (match_operand:BLK 0 "memory_operand" "+m")
+- (unspec:BLK [(match_dup 0)] UNSPEC_TIE))]
++ (unspec:BLK [(match_dup 0)
++ (match_operand:P 1 "register_operand" "r")] UNSPEC_TIE))]
+ ""
+ ""
+ [(set_attr "length" "0")])
diff --git a/SOURCES/gcc11-s390x-regarg-3.patch b/SOURCES/gcc11-s390x-regarg-3.patch
new file mode 100644
index 0000000..f24a9da
--- /dev/null
+++ b/SOURCES/gcc11-s390x-regarg-3.patch
@@ -0,0 +1,545 @@
+commit 8091199cdf4d0aa9c28e4526548ddc25d02898ca
+Author: Andreas Krebbel
+Date: Wed Feb 1 08:59:42 2023 +0100
+
+ IBM zSystems: Save argument registers to the stack -mpreserve-args
+
+ This adds support for preserving the content of parameter registers to
+ the stack and emit CFI for it. This useful for applications which want
+ to implement their own stack unwinding and need access to function
+ arguments.
+
+ With the -mpreserve-args option GPRs and FPRs are save to the stack
+ slots which are reserved for stdargs in the register save area.
+
+ gcc/ChangeLog:
+
+ * config/s390/s390.c (s390_restore_gpr_p): New function.
+ (s390_preserve_gpr_arg_in_range_p): New function.
+ (s390_preserve_gpr_arg_p): New function.
+ (s390_preserve_fpr_arg_p): New function.
+ (s390_register_info_stdarg_fpr): Rename to ...
+ (s390_register_info_arg_fpr): ... this. Add -mpreserve-args handling.
+ (s390_register_info_stdarg_gpr): Rename to ...
+ (s390_register_info_arg_gpr): ... this. Add -mpreserve-args handling.
+ (s390_register_info): Use the renamed functions above.
+ (s390_optimize_register_info): Likewise.
+ (save_fpr): Generate CFI for -mpreserve-args.
+ (save_gprs): Generate CFI for -mpreserve-args. Drop return value.
+ (s390_emit_prologue): Adjust to changed calling convention of save_gprs.
+ (s390_optimize_prologue): Likewise.
+ * config/s390/s390.opt: New option -mpreserve-args
+
+ gcc/testsuite/ChangeLog:
+
+ * gcc.target/s390/preserve-args-1.c: New test.
+ * gcc.target/s390/preserve-args-2.c: New test.
+
+--- a/gcc/config/s390/s390.c
++++ b/gcc/config/s390/s390.c
+@@ -411,6 +411,45 @@ struct s390_address
+ #define FP_ARG_NUM_REG (TARGET_64BIT? 4 : 2)
+ #define VEC_ARG_NUM_REG 8
+
++/* Return TRUE if GPR REGNO is supposed to be restored in the function
++ epilogue. */
++static inline bool
++s390_restore_gpr_p (int regno)
++{
++ return (cfun_frame_layout.first_restore_gpr != -1
++ && regno >= cfun_frame_layout.first_restore_gpr
++ && regno <= cfun_frame_layout.last_restore_gpr);
++}
++
++/* Return TRUE if any of the registers in range [FIRST, LAST] is saved
++ because of -mpreserve-args. */
++static inline bool
++s390_preserve_gpr_arg_in_range_p (int first, int last)
++{
++ int num_arg_regs = MIN (crtl->args.info.gprs + cfun->va_list_gpr_size,
++ GP_ARG_NUM_REG);
++ return (num_arg_regs
++ && s390_preserve_args_p
++ && first <= GPR2_REGNUM + num_arg_regs - 1
++ && last >= GPR2_REGNUM);
++}
++
++static inline bool
++s390_preserve_gpr_arg_p (int regno)
++{
++ return s390_preserve_gpr_arg_in_range_p (regno, regno);
++}
++
++static inline bool
++s390_preserve_fpr_arg_p (int regno)
++{
++ int num_arg_regs = MIN (crtl->args.info.fprs + cfun->va_list_fpr_size,
++ FP_ARG_NUM_REG);
++ return (s390_preserve_args_p
++ && regno <= FPR0_REGNUM + num_arg_regs - 1
++ && regno >= FPR0_REGNUM);
++}
++
+ /* A couple of shortcuts. */
+ #define CONST_OK_FOR_J(x) \
+ CONST_OK_FOR_CONSTRAINT_P((x), 'J', "J")
+@@ -9893,61 +9932,89 @@ s390_register_info_gprtofpr ()
+ }
+
+ /* Set the bits in fpr_bitmap for FPRs which need to be saved due to
+- stdarg.
++ stdarg or -mpreserve-args.
+ This is a helper routine for s390_register_info. */
+-
+ static void
+-s390_register_info_stdarg_fpr ()
++s390_register_info_arg_fpr ()
+ {
+ int i;
+- int min_fpr;
+- int max_fpr;
++ int min_stdarg_fpr = INT_MAX, max_stdarg_fpr = -1;
++ int min_preserve_fpr = INT_MAX, max_preserve_fpr = -1;
++ int min_fpr, max_fpr;
+
+ /* Save the FP argument regs for stdarg. f0, f2 for 31 bit and
+ f0-f4 for 64 bit. */
+- if (!cfun->stdarg
+- || !TARGET_HARD_FLOAT
+- || !cfun->va_list_fpr_size
+- || crtl->args.info.fprs >= FP_ARG_NUM_REG)
+- return;
++ if (cfun->stdarg
++ && TARGET_HARD_FLOAT
++ && cfun->va_list_fpr_size
++ && crtl->args.info.fprs < FP_ARG_NUM_REG)
++ {
++ min_stdarg_fpr = crtl->args.info.fprs;
++ max_stdarg_fpr = min_stdarg_fpr + cfun->va_list_fpr_size - 1;
++ if (max_stdarg_fpr >= FP_ARG_NUM_REG)
++ max_stdarg_fpr = FP_ARG_NUM_REG - 1;
++
++ /* FPR argument regs start at f0. */
++ min_stdarg_fpr += FPR0_REGNUM;
++ max_stdarg_fpr += FPR0_REGNUM;
++ }
+
+- min_fpr = crtl->args.info.fprs;
+- max_fpr = min_fpr + cfun->va_list_fpr_size - 1;
+- if (max_fpr >= FP_ARG_NUM_REG)
+- max_fpr = FP_ARG_NUM_REG - 1;
++ if (s390_preserve_args_p && crtl->args.info.fprs)
++ {
++ min_preserve_fpr = FPR0_REGNUM;
++ max_preserve_fpr = MIN (FPR0_REGNUM + FP_ARG_NUM_REG - 1,
++ FPR0_REGNUM + crtl->args.info.fprs - 1);
++ }
+
+- /* FPR argument regs start at f0. */
+- min_fpr += FPR0_REGNUM;
+- max_fpr += FPR0_REGNUM;
++ min_fpr = MIN (min_stdarg_fpr, min_preserve_fpr);
++ max_fpr = MAX (max_stdarg_fpr, max_preserve_fpr);
++
++ if (max_fpr == -1)
++ return;
+
+ for (i = min_fpr; i <= max_fpr; i++)
+ cfun_set_fpr_save (i);
+ }
+
++
+ /* Reserve the GPR save slots for GPRs which need to be saved due to
+- stdarg.
++ stdarg or -mpreserve-args.
+ This is a helper routine for s390_register_info. */
+
+ static void
+-s390_register_info_stdarg_gpr ()
++s390_register_info_arg_gpr ()
+ {
+ int i;
+- int min_gpr;
+- int max_gpr;
++ int min_stdarg_gpr = INT_MAX, max_stdarg_gpr = -1;
++ int min_preserve_gpr = INT_MAX, max_preserve_gpr = -1;
++ int min_gpr, max_gpr;
+
+- if (!cfun->stdarg
+- || !cfun->va_list_gpr_size
+- || crtl->args.info.gprs >= GP_ARG_NUM_REG)
+- return;
++ if (cfun->stdarg
++ && cfun->va_list_gpr_size
++ && crtl->args.info.gprs < GP_ARG_NUM_REG)
++ {
++ min_stdarg_gpr = crtl->args.info.gprs;
++ max_stdarg_gpr = min_stdarg_gpr + cfun->va_list_gpr_size - 1;
++ if (max_stdarg_gpr >= GP_ARG_NUM_REG)
++ max_stdarg_gpr = GP_ARG_NUM_REG - 1;
++
++ /* GPR argument regs start at r2. */
++ min_stdarg_gpr += GPR2_REGNUM;
++ max_stdarg_gpr += GPR2_REGNUM;
++ }
++
++ if (s390_preserve_args_p && crtl->args.info.gprs)
++ {
++ min_preserve_gpr = GPR2_REGNUM;
++ max_preserve_gpr = MIN (GPR6_REGNUM,
++ GPR2_REGNUM + crtl->args.info.gprs - 1);
++ }
+
+- min_gpr = crtl->args.info.gprs;
+- max_gpr = min_gpr + cfun->va_list_gpr_size - 1;
+- if (max_gpr >= GP_ARG_NUM_REG)
+- max_gpr = GP_ARG_NUM_REG - 1;
++ min_gpr = MIN (min_stdarg_gpr, min_preserve_gpr);
++ max_gpr = MAX (max_stdarg_gpr, max_preserve_gpr);
+
+- /* GPR argument regs start at r2. */
+- min_gpr += GPR2_REGNUM;
+- max_gpr += GPR2_REGNUM;
++ if (max_gpr == -1)
++ return;
+
+ /* If r6 was supposed to be saved into an FPR and now needs to go to
+ the stack for vararg we have to adjust the restore range to make
+@@ -10079,14 +10146,14 @@ s390_register_info ()
+ if (clobbered_regs[i])
+ cfun_gpr_save_slot (i) = SAVE_SLOT_STACK;
+
+- s390_register_info_stdarg_fpr ();
++ s390_register_info_arg_fpr ();
+ s390_register_info_gprtofpr ();
+ s390_register_info_set_ranges ();
+- /* stdarg functions might need to save GPRs 2 to 6. This might
+- override the GPR->FPR save decision made by
+- s390_register_info_gprtofpr for r6 since vararg regs must go to
+- the stack. */
+- s390_register_info_stdarg_gpr ();
++
++ /* Forcing argument registers to be saved on the stack might
++ override the GPR->FPR save decision for r6 so this must come
++ last. */
++ s390_register_info_arg_gpr ();
+ }
+
+ /* Return true if REGNO is a global register, but not one
+@@ -10141,7 +10208,7 @@ s390_optimize_register_info ()
+ cfun_gpr_save_slot (i) = SAVE_SLOT_NONE;
+
+ s390_register_info_set_ranges ();
+- s390_register_info_stdarg_gpr ();
++ s390_register_info_arg_gpr ();
+ }
+
+ /* Fill cfun->machine with info about frame of current function. */
+@@ -10864,14 +10931,28 @@ static rtx
+ save_fpr (rtx base, int offset, int regnum)
+ {
+ rtx addr;
++ rtx insn;
++
+ addr = gen_rtx_MEM (DFmode, plus_constant (Pmode, base, offset));
+
+- if (regnum >= 16 && regnum <= (16 + FP_ARG_NUM_REG))
++ if (regnum >= FPR0_REGNUM && regnum <= (FPR0_REGNUM + FP_ARG_NUM_REG))
+ set_mem_alias_set (addr, get_varargs_alias_set ());
+ else
+ set_mem_alias_set (addr, get_frame_alias_set ());
+
+- return emit_move_insn (addr, gen_rtx_REG (DFmode, regnum));
++ insn = emit_move_insn (addr, gen_rtx_REG (DFmode, regnum));
++
++ if (!call_used_regs[regnum] || s390_preserve_fpr_arg_p (regnum))
++ RTX_FRAME_RELATED_P (insn) = 1;
++
++ if (s390_preserve_fpr_arg_p (regnum) && !cfun_fpr_save_p (regnum))
++ {
++ rtx reg = gen_rtx_REG (DFmode, regnum);
++ add_reg_note (insn, REG_CFA_NO_RESTORE, reg);
++ add_reg_note (insn, REG_CFA_OFFSET, gen_rtx_SET (addr, reg));
++ }
++
++ return insn;
+ }
+
+ /* Emit insn to restore fpr REGNUM from offset OFFSET relative
+@@ -10891,10 +10972,11 @@ restore_fpr (rtx base, int offset, int regnum)
+ the register save area located at offset OFFSET
+ relative to register BASE. */
+
+-static rtx
+-save_gprs (rtx base, int offset, int first, int last)
++static void
++save_gprs (rtx base, int offset, int first, int last, rtx_insn *before = NULL)
+ {
+ rtx addr, insn, note;
++ rtx_insn *out_insn;
+ int i;
+
+ addr = plus_constant (Pmode, base, offset);
+@@ -10910,7 +10992,15 @@ save_gprs (rtx base, int offset, int first, int last)
+
+ if (!global_not_special_regno_p (first))
+ RTX_FRAME_RELATED_P (insn) = 1;
+- return insn;
++
++ if (s390_preserve_gpr_arg_p (first) && !s390_restore_gpr_p (first))
++ {
++ rtx reg = gen_rtx_REG (Pmode, first);
++ add_reg_note (insn, REG_CFA_NO_RESTORE, reg);
++ add_reg_note (insn, REG_CFA_OFFSET, gen_rtx_SET (addr, reg));
++ }
++
++ goto emit;
+ }
+
+
+@@ -10939,7 +11029,12 @@ save_gprs (rtx base, int offset, int first, int last)
+ set, even if it does not. Therefore we emit a new pattern
+ without those registers as REG_FRAME_RELATED_EXPR note. */
+
+- if (first >= 6 && !global_not_special_regno_p (first))
++ /* In these cases all of the sets are marked as frame related:
++ 1. call-save GPR saved and restored
++ 2. argument GPR saved because of -mpreserve-args */
++ if ((first >= GPR6_REGNUM && !global_not_special_regno_p (first))
++ || s390_preserve_gpr_arg_in_range_p (first, last))
++
+ {
+ rtx pat = PATTERN (insn);
+
+@@ -10950,6 +11045,24 @@ save_gprs (rtx base, int offset, int first, int last)
+ RTX_FRAME_RELATED_P (XVECEXP (pat, 0, i)) = 1;
+
+ RTX_FRAME_RELATED_P (insn) = 1;
++
++ /* For the -mpreserve-args register saves no restore operations
++ will be emitted. CFI checking would complain about this. We
++ manually generate the REG_CFA notes here to be able to mark
++ those operations with REG_CFA_NO_RESTORE. */
++ if (s390_preserve_gpr_arg_in_range_p (first, last))
++ {
++ for (int regno = first; regno <= last; regno++)
++ {
++ rtx reg = gen_rtx_REG (Pmode, regno);
++ rtx reg_addr = plus_constant (Pmode, base,
++ offset + (regno - first) * UNITS_PER_LONG);
++ if (!s390_restore_gpr_p (regno))
++ add_reg_note (insn, REG_CFA_NO_RESTORE, reg);
++ add_reg_note (insn, REG_CFA_OFFSET,
++ gen_rtx_SET (gen_frame_mem (Pmode, reg_addr), reg));
++ }
++ }
+ }
+ else if (last >= 6)
+ {
+@@ -10960,7 +11073,7 @@ save_gprs (rtx base, int offset, int first, int last)
+ break;
+
+ if (start > last)
+- return insn;
++ goto emit;
+
+ addr = plus_constant (Pmode, base,
+ offset + (start - first) * UNITS_PER_LONG);
+@@ -10978,7 +11091,7 @@ save_gprs (rtx base, int offset, int first, int last)
+ add_reg_note (insn, REG_FRAME_RELATED_EXPR, note);
+ RTX_FRAME_RELATED_P (insn) = 1;
+
+- return insn;
++ goto emit;
+ }
+
+ note = gen_store_multiple (gen_rtx_MEM (Pmode, addr),
+@@ -10997,9 +11110,15 @@ save_gprs (rtx base, int offset, int first, int last)
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+
+- return insn;
++ emit:
++ if (before != NULL_RTX)
++ out_insn = emit_insn_before (insn, before);
++ else
++ out_insn = emit_insn (insn);
++ INSN_ADDRESSES_NEW (out_insn, -1);
+ }
+
++
+ /* Generate insn to restore registers FIRST to LAST from
+ the register save area located at offset OFFSET
+ relative to register BASE. */
+@@ -11423,12 +11542,12 @@ s390_emit_prologue (void)
+ /* Save call saved gprs. */
+ if (cfun_frame_layout.first_save_gpr != -1)
+ {
+- insn = save_gprs (stack_pointer_rtx,
+- cfun_frame_layout.gprs_offset +
+- UNITS_PER_LONG * (cfun_frame_layout.first_save_gpr
+- - cfun_frame_layout.first_save_gpr_slot),
+- cfun_frame_layout.first_save_gpr,
+- cfun_frame_layout.last_save_gpr);
++ save_gprs (stack_pointer_rtx,
++ cfun_frame_layout.gprs_offset +
++ UNITS_PER_LONG * (cfun_frame_layout.first_save_gpr
++ - cfun_frame_layout.first_save_gpr_slot),
++ cfun_frame_layout.first_save_gpr,
++ cfun_frame_layout.last_save_gpr);
+
+ /* This is not 100% correct. If we have more than one register saved,
+ then LAST_PROBE_OFFSET can move even closer to sp. */
+@@ -11436,8 +11555,6 @@ s390_emit_prologue (void)
+ = (cfun_frame_layout.gprs_offset +
+ UNITS_PER_LONG * (cfun_frame_layout.first_save_gpr
+ - cfun_frame_layout.first_save_gpr_slot));
+-
+- emit_insn (insn);
+ }
+
+ /* Dummy insn to mark literal pool slot. */
+@@ -11467,15 +11584,10 @@ s390_emit_prologue (void)
+ {
+ if (cfun_fpr_save_p (i))
+ {
+- insn = save_fpr (stack_pointer_rtx, offset, i);
++ save_fpr (stack_pointer_rtx, offset, i);
+ if (offset < last_probe_offset)
+ last_probe_offset = offset;
+ offset += 8;
+-
+- /* If f4 and f6 are call clobbered they are saved due to
+- stdargs and therefore are not frame related. */
+- if (!call_used_regs[i])
+- RTX_FRAME_RELATED_P (insn) = 1;
+ }
+ else if (!TARGET_PACKED_STACK || call_used_regs[i])
+ offset += 8;
+@@ -11491,11 +11603,10 @@ s390_emit_prologue (void)
+ for (i = FPR15_REGNUM; i >= FPR8_REGNUM && offset >= 0; i--)
+ if (cfun_fpr_save_p (i))
+ {
+- insn = save_fpr (stack_pointer_rtx, offset, i);
++ save_fpr (stack_pointer_rtx, offset, i);
+ if (offset < last_probe_offset)
+ last_probe_offset = offset;
+
+- RTX_FRAME_RELATED_P (insn) = 1;
+ offset -= 8;
+ }
+ if (offset >= cfun_frame_layout.f8_offset)
+@@ -11663,7 +11774,6 @@ s390_emit_prologue (void)
+
+ insn = save_fpr (temp_reg, offset, i);
+ offset += 8;
+- RTX_FRAME_RELATED_P (insn) = 1;
+ add_reg_note (insn, REG_FRAME_RELATED_EXPR,
+ gen_rtx_SET (gen_rtx_MEM (DFmode, addr),
+ gen_rtx_REG (DFmode, i)));
+@@ -14158,15 +14268,11 @@ s390_optimize_prologue (void)
+ continue;
+
+ if (cfun_frame_layout.first_save_gpr != -1)
+- {
+- rtx s_pat = save_gprs (base,
+- off + (cfun_frame_layout.first_save_gpr
+- - first) * UNITS_PER_LONG,
+- cfun_frame_layout.first_save_gpr,
+- cfun_frame_layout.last_save_gpr);
+- new_insn = emit_insn_before (s_pat, insn);
+- INSN_ADDRESSES_NEW (new_insn, -1);
+- }
++ save_gprs (base,
++ off + (cfun_frame_layout.first_save_gpr
++ - first) * UNITS_PER_LONG,
++ cfun_frame_layout.first_save_gpr,
++ cfun_frame_layout.last_save_gpr, insn);
+
+ remove_insn (insn);
+ continue;
+diff --git a/gcc/config/s390/s390.opt b/gcc/config/s390/s390.opt
+index 57d1b95bd65..344aa551f44 100644
+--- a/gcc/config/s390/s390.opt
++++ b/gcc/config/s390/s390.opt
+@@ -321,3 +321,7 @@ and the default behavior is to emit separate multiplication and addition
+ instructions for long doubles in vector registers, because measurements show
+ that this improves performance. This option allows overriding it for testing
+ purposes.
++
++mpreserve-args
++Target Var(s390_preserve_args_p) Init(0)
++Store all argument registers on the stack.
+diff --git a/gcc/testsuite/gcc.target/s390/preserve-args-1.c b/gcc/testsuite/gcc.target/s390/preserve-args-1.c
+new file mode 100644
+index 00000000000..24dcf547432
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/s390/preserve-args-1.c
+@@ -0,0 +1,17 @@
++/* Functional tests for the -mpreserve-args cmdline option. */
++
++/* { dg-do compile } */
++/* { dg-options "-O3 -march=z900 -mpreserve-args" } */
++
++
++int
++foo (int a, int b, int c, double d, double e)
++{
++ return a + c + (int)d + (int)e;
++}
++
++/* { dg-final { scan-assembler "stmg\t%r2,%r4,\[0-9\]*\\(%r15\\)" { target lp64 } } } */
++/* { dg-final { scan-assembler "stm\t%r2,%r4,\[0-9\]*\\(%r15\\)" { target { ! lp64 } } } } */
++
++/* { dg-final { scan-assembler "std\t%f0,\[0-9\]*\\(%r15\\)" } } */
++/* { dg-final { scan-assembler "std\t%f2,\[0-9\]*\\(%r15\\)" } } */
+diff --git a/gcc/testsuite/gcc.target/s390/preserve-args-2.c b/gcc/testsuite/gcc.target/s390/preserve-args-2.c
+new file mode 100644
+index 00000000000..006aad9c371
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/s390/preserve-args-2.c
+@@ -0,0 +1,19 @@
++/* This test requires special handling of a GPR which is saved because
++ of -mpreserve-args but not restored. dwarf2cfi used to ICE for
++ this in maybe_record_trace_start. The solution was to introduce a
++ REG_CFA_NORESTORE reg note. */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=z900 -mpreserve-args" } */
++
++void *foo (void *);
++void bar ();
++int x;
++void *
++baz (void *y)
++{
++ if (__builtin_expect (x, 0))
++ return foo (y);
++ bar ();
++ return foo (y);
++}
+diff --git a/gcc/testsuite/gcc.target/s390/preserve-args-3.c b/gcc/testsuite/gcc.target/s390/preserve-args-3.c
+new file mode 100644
+index 00000000000..f4b135ab8e6
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/s390/preserve-args-3.c
+@@ -0,0 +1,19 @@
++/* Functional tests for the -mpreserve-args cmdline option. */
++
++/* { dg-do compile } */
++/* { dg-options "-O3 -march=z900 -mpreserve-args" } */
++
++#include
++int
++foo (int a, int, int c, double d, ...)
++{
++ va_list argp;
++ va_start(argp, d);
++ return a + c + va_arg(argp, int) + va_arg(argp, int) + (int)va_arg(argp, double);
++}
++
++/* { dg-final { scan-assembler "stmg\t%r2,%r15,\[0-9\]*\\(%r15\\)" { target lp64 } } } */
++/* { dg-final { scan-assembler "stm\t%r2,%r15,\[0-9\]*\\(%r15\\)" { target { ! lp64 } } } } */
++
++/* { dg-final { scan-assembler "std\t%f0,\[0-9\]*\\(%r15\\)" } } */
++/* { dg-final { scan-assembler "std\t%f2,\[0-9\]*\\(%r15\\)" } } */
diff --git a/SOURCES/gcc11-testsuite-aarch64-add-fno-stack-protector.patch b/SOURCES/gcc11-testsuite-aarch64-add-fno-stack-protector.patch
new file mode 100644
index 0000000..0ab9be8
--- /dev/null
+++ b/SOURCES/gcc11-testsuite-aarch64-add-fno-stack-protector.patch
@@ -0,0 +1,348 @@
+From 3439b79cb7f97464d65316a94d40d49505fb2150 Mon Sep 17 00:00:00 2001
+From: Marek Polacek
+Date: Wed, 6 Dec 2023 15:34:24 -0500
+Subject: [PATCH] aarch64: add -fno-stack-protector to tests
+
+These tests fail when the testsuite is executed with -fstack-protector-strong.
+To avoid this, this patch adds -fno-stack-protector to dg-options.
+
+---
+ gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/stack-check-12.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c | 4 ++--
+ gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c | 4 ++--
+ gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/test_frame_1.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/test_frame_10.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/test_frame_11.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/test_frame_13.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/test_frame_15.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/test_frame_2.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/test_frame_4.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/test_frame_6.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/test_frame_7.c | 2 +-
+ gcc/testsuite/gcc.target/aarch64/test_frame_8.c | 2 +-
+ 30 files changed, 32 insertions(+), 32 deletions(-)
+
+diff --git a/gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c b/gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c
+index 1e46755a39a..50d7d7a2d5d 100644
+--- a/gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c
++++ b/gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c
+@@ -1,4 +1,4 @@
+-/* { dg-options "-O2 -fomit-frame-pointer" } */
++/* { dg-options "-O2 -fomit-frame-pointer -fno-stack-protector" } */
+
+ /* Check that we split unaligned LDP/STP into base and aligned offset. */
+
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-12.c b/gcc/testsuite/gcc.target/aarch64/stack-check-12.c
+index be5a57a9ec6..e1a4c67b041 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-12.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-12.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-asynchronous-unwind-tables -fno-unwind-tables" } */
++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-asynchronous-unwind-tables -fno-unwind-tables -fno-stack-protector" } */
+ /* { dg-require-effective-target supports_stack_clash_protection } */
+
+ typedef unsigned __attribute__((mode(DI))) uint64_t;
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c
+index 741f2f5fadc..d57aece05bb 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */
++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */
+ /* { dg-require-effective-target supports_stack_clash_protection } */
+
+ #define SIZE (6 * 64 * 1024) + (1 * 32 * 1024)
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c
+index ece68003ade..895d130e4fa 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer" } */
++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer -fno-stack-protector" } */
+ /* { dg-require-effective-target supports_stack_clash_protection } */
+
+ void
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c
+index 0fc900c6943..1f1a6c497be 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer" } */
++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer -fno-stack-protector" } */
+ /* { dg-require-effective-target supports_stack_clash_protection } */
+
+ void h (void) __attribute__ ((noreturn));
+@@ -17,4 +17,4 @@ f (void)
+
+ /* SIZE is more than 1 guard-size, but only one 64KB page is used, expect only 1
+ probe. Leaf function and omitting leaf pointers, tail call to noreturn which
+- may only omit an epilogue and not a prologue. Checking for LR saving. */
+\ No newline at end of file
++ may only omit an epilogue and not a prologue. Checking for LR saving. */
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c
+index ea733f861e7..facb3cb72a7 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer" } */
++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer -fno-stack-protector" } */
+ /* { dg-require-effective-target supports_stack_clash_protection } */
+
+ void h (void) __attribute__ ((noreturn));
+@@ -21,4 +21,4 @@ f (void)
+ probe at 1024 and one implicit probe due to LR being saved. Leaf function
+ and omitting leaf pointers, tail call to noreturn which may only omit an
+ epilogue and not a prologue and control flow in between. Checking for
+- LR saving. */
+\ No newline at end of file
++ LR saving. */
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c
+index 63df4a5609a..f2ac60a6214 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer" } */
++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer -fno-stack-protector" } */
+ /* { dg-require-effective-target supports_stack_clash_protection } */
+
+ void g (volatile int *x) ;
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
+index f0ec1389771..1cf6fbbb085 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
+@@ -1,4 +1,4 @@
+-/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12" } */
++/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12 -fno-stack-protector" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+
+ void f(int, ...);
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
+index 6383bec5ebc..2e06346c158 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
+@@ -1,4 +1,4 @@
+-/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12" } */
++/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12 -fno-stack-protector" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+
+ void f(int, ...);
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c
+index 61c52a251a7..b37f62cad27 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */
++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */
+ /* { dg-require-effective-target supports_stack_clash_protection } */
+
+ #define SIZE 2 * 1024
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c
+index 2ee16350127..34a438671d0 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */
++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */
+ /* { dg-require-effective-target supports_stack_clash_protection } */
+
+ #define SIZE 64 * 1024
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c
+index 3c9b606cbe0..a4e34e2fe6a 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */
++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */
+ /* { dg-require-effective-target supports_stack_clash_protection } */
+
+ #define SIZE 65 * 1024
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c
+index 333f5fcc360..277dce4c71e 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */
++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */
+ /* { dg-require-effective-target supports_stack_clash_protection } */
+
+ #define SIZE 128 * 1024
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c
+index a3ff89b5581..a21305541c1 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */
++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */
+ /* { dg-require-effective-target supports_stack_clash_protection } */
+
+ #define SIZE 6 * 64 * 1024
+diff --git a/gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c b/gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c
+index 68a9d5e3d2e..19be6de0c2e 100644
+--- a/gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c
++++ b/gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c
+@@ -1,6 +1,6 @@
+ /* { dg-do compile } */
+ /* { dg-require-effective-target supports_stack_clash_protection } */
+-/* { dg-options "-O3 -fopenmp-simd -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */
++/* { dg-options "-O3 -fopenmp-simd -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */
+
+ #include
+
+diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_1.c b/gcc/testsuite/gcc.target/aarch64/test_frame_1.c
+index f906b073545..c9b8822b4b1 100644
+--- a/gcc/testsuite/gcc.target/aarch64/test_frame_1.c
++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_1.c
+@@ -6,7 +6,7 @@
+ * optimized code should use "str !" for stack adjustment. */
+
+ /* { dg-do run } */
+-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
++/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */
+
+ #include "test_frame_common.h"
+
+diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_10.c b/gcc/testsuite/gcc.target/aarch64/test_frame_10.c
+index c54ab2d0ccb..fe5cbd9ed05 100644
+--- a/gcc/testsuite/gcc.target/aarch64/test_frame_10.c
++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_10.c
+@@ -7,7 +7,7 @@
+ * Use a single stack adjustment, no writeback. */
+
+ /* { dg-do run } */
+-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
++/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */
+
+ #include "test_frame_common.h"
+
+diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_11.c b/gcc/testsuite/gcc.target/aarch64/test_frame_11.c
+index f162cc091e0..11cf471168d 100644
+--- a/gcc/testsuite/gcc.target/aarch64/test_frame_11.c
++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_11.c
+@@ -5,7 +5,7 @@
+ * optimized code should use "stp !" for stack adjustment. */
+
+ /* { dg-do run } */
+-/* { dg-options "-O2 --save-temps" } */
++/* { dg-options "-O2 --save-temps -fno-stack-protector" } */
+
+ #include "test_frame_common.h"
+
+diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_13.c b/gcc/testsuite/gcc.target/aarch64/test_frame_13.c
+index 74b3370fa46..ec56963c038 100644
+--- a/gcc/testsuite/gcc.target/aarch64/test_frame_13.c
++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_13.c
+@@ -5,7 +5,7 @@
+ * Use a single stack adjustment, no writeback. */
+
+ /* { dg-do run } */
+-/* { dg-options "-O2 --save-temps" } */
++/* { dg-options "-O2 --save-temps -fno-stack-protector" } */
+
+ #include "test_frame_common.h"
+
+diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_15.c b/gcc/testsuite/gcc.target/aarch64/test_frame_15.c
+index bed6714b4fe..4247008de8e 100644
+--- a/gcc/testsuite/gcc.target/aarch64/test_frame_15.c
++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_15.c
+@@ -6,7 +6,7 @@
+ * Use a single stack adjustment, no writeback. */
+
+ /* { dg-do run } */
+-/* { dg-options "-O2 --save-temps" } */
++/* { dg-options "-O2 --save-temps -fno-stack-protector" } */
+
+ #include "test_frame_common.h"
+
+diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_2.c b/gcc/testsuite/gcc.target/aarch64/test_frame_2.c
+index 0d715314cb8..9c4243b6480 100644
+--- a/gcc/testsuite/gcc.target/aarch64/test_frame_2.c
++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_2.c
+@@ -6,7 +6,7 @@
+ * optimized code should use "stp !" for stack adjustment. */
+
+ /* { dg-do run } */
+-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
++/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */
+
+ #include "test_frame_common.h"
+
+diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_4.c b/gcc/testsuite/gcc.target/aarch64/test_frame_4.c
+index b41229c42f4..8d0bed93e44 100644
+--- a/gcc/testsuite/gcc.target/aarch64/test_frame_4.c
++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_4.c
+@@ -6,7 +6,7 @@
+ * we can use "stp !" to optimize stack adjustment. */
+
+ /* { dg-do run } */
+-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
++/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */
+
+ #include "test_frame_common.h"
+
+diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_6.c b/gcc/testsuite/gcc.target/aarch64/test_frame_6.c
+index 56259c945d2..2944a8bbe16 100644
+--- a/gcc/testsuite/gcc.target/aarch64/test_frame_6.c
++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_6.c
+@@ -6,7 +6,7 @@
+ * use a single stack adjustment, no writeback. */
+
+ /* { dg-do run } */
+-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
++/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */
+
+ #include "test_frame_common.h"
+
+diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_7.c b/gcc/testsuite/gcc.target/aarch64/test_frame_7.c
+index 5702656a5da..ca371632d81 100644
+--- a/gcc/testsuite/gcc.target/aarch64/test_frame_7.c
++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_7.c
+@@ -6,7 +6,7 @@
+ * use a single stack adjustment, no writeback. */
+
+ /* { dg-do run } */
+-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
++/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */
+
+ #include "test_frame_common.h"
+
+diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_8.c b/gcc/testsuite/gcc.target/aarch64/test_frame_8.c
+index 75a68b41e08..084e8fac373 100644
+--- a/gcc/testsuite/gcc.target/aarch64/test_frame_8.c
++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_8.c
+@@ -5,7 +5,7 @@
+ * number of callee-saved reg == 1. */
+
+ /* { dg-do run } */
+-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
++/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */
+
+ #include "test_frame_common.h"
+
+
+base-commit: 1bd15d87031e8bf8fe9585fbc166b315303f676c
+--
+2.43.0
+
diff --git a/SOURCES/gcc11-testsuite-fixes-2.patch b/SOURCES/gcc11-testsuite-fixes-2.patch
new file mode 100644
index 0000000..38ef12f
--- /dev/null
+++ b/SOURCES/gcc11-testsuite-fixes-2.patch
@@ -0,0 +1,134 @@
+commit 74833b3165865a9373506f447720cf20f29c20c8
+Author: Christophe Lyon
+Date: Tue Jan 17 13:10:10 2023 +0000
+
+ aarch64: add -fno-stack-protector to some tests [PR108411]
+
+ As discussed in the PR, these recently added tests fail when the
+ testsuite is executed with -fstack-protector-strong. To avoid this,
+ this patch adds -fno-stack-protector to dg-options.
+
+ PR target/108411
+ gcc/testsuite
+ * g++.target/aarch64/bitfield-abi-warning-align16-O2-extra.C: Add
+ -fno-stack-protector.
+ * g++.target/aarch64/bitfield-abi-warning-align16-O2.C: Likewise.
+ * g++.target/aarch64/bitfield-abi-warning-align32-O2-extra.C: Likewise.
+ * g++.target/aarch64/bitfield-abi-warning-align32-O2.C: Likewise.
+ * g++.target/aarch64/bitfield-abi-warning-align8-O2.C: Likewise.
+ * gcc.target/aarch64/bitfield-abi-warning-align16-O2-extra.c: Likewise.
+ * gcc.target/aarch64/bitfield-abi-warning-align16-O2.c: Likewise.
+ * gcc.target/aarch64/bitfield-abi-warning-align32-O2-extra.c: Likewise.
+ * gcc.target/aarch64/bitfield-abi-warning-align32-O2.c: Likewise.
+ * gcc.target/aarch64/bitfield-abi-warning-align8-O2.c: Likewise.
+
+diff --git a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2-extra.C b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2-extra.C
+index 443cd458b4c..52f9cdd1ee9 100644
+--- a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2-extra.C
++++ b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2-extra.C
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -save-temps -Wno-narrowing" } */
++/* { dg-options "-O2 -fno-stack-protector -save-temps -Wno-narrowing" } */
+
+ #define ALIGN 16
+ //#define EXTRA
+diff --git a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2.C b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2.C
+index 76a7e3d0ad4..9ff4e46645b 100644
+--- a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2.C
++++ b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2.C
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -save-temps -Wno-narrowing" } */
++/* { dg-options "-O2 -fno-stack-protector -save-temps -Wno-narrowing" } */
+
+ #define ALIGN 16
+ #define EXTRA
+diff --git a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2-extra.C b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2-extra.C
+index 6f8f54f41ff..55dcbfe4b7c 100644
+--- a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2-extra.C
++++ b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2-extra.C
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -save-temps -Wno-narrowing" } */
++/* { dg-options "-O2 -fno-stack-protector -save-temps -Wno-narrowing" } */
+
+ #define ALIGN 32
+ //#define EXTRA
+diff --git a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2.C b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2.C
+index 6b8ad5fbea1..6bb8778ee90 100644
+--- a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2.C
++++ b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2.C
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -save-temps -Wno-narrowing" } */
++/* { dg-options "-O2 -fno-stack-protector -save-temps -Wno-narrowing" } */
+
+ #define ALIGN 32
+ #define EXTRA
+diff --git a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align8-O2.C b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align8-O2.C
+index b1764d97ea0..41bcc894a2b 100644
+--- a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align8-O2.C
++++ b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align8-O2.C
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -save-temps -Wno-narrowing" } */
++/* { dg-options "-O2 -fno-stack-protector -save-temps -Wno-narrowing" } */
+
+ #define ALIGN 8
+ #define EXTRA
+diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2-extra.c b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2-extra.c
+index f248a129509..3b2c932ac23 100644
+--- a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2-extra.c
++++ b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2-extra.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -save-temps" } */
++/* { dg-options "-O2 -fno-stack-protector -save-temps" } */
+
+ #define ALIGN 16
+ //#define EXTRA
+diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2.c b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2.c
+index 22ee5ec4c92..ee5d6faa428 100644
+--- a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2.c
++++ b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -save-temps" } */
++/* { dg-options "-O2 -fno-stack-protector -save-temps" } */
+
+ #define ALIGN 16
+ #define EXTRA
+diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2-extra.c b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2-extra.c
+index a8a50b35e8e..6d4a883a96e 100644
+--- a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2-extra.c
++++ b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2-extra.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -save-temps" } */
++/* { dg-options "-O2 -fno-stack-protector -save-temps" } */
+
+ #define ALIGN 32
+ //#define EXTRA
+diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2.c b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2.c
+index e872de3dbe0..331daba354c 100644
+--- a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2.c
++++ b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -save-temps" } */
++/* { dg-options "-O2 -fno-stack-protector -save-temps" } */
+
+ #define ALIGN 32
+ #define EXTRA
+diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align8-O2.c b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align8-O2.c
+index cb2a945a819..e6d45f5dd5c 100644
+--- a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align8-O2.c
++++ b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align8-O2.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -save-temps" } */
++/* { dg-options "-O2 -fno-stack-protector -save-temps" } */
+
+ #define ALIGN 8
+ #define EXTRA
diff --git a/SOURCES/gcc11-testsuite-fixes.patch b/SOURCES/gcc11-testsuite-fixes.patch
new file mode 100644
index 0000000..e5a2afc
--- /dev/null
+++ b/SOURCES/gcc11-testsuite-fixes.patch
@@ -0,0 +1,22 @@
+diff --git a/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc b/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc
+index b0277b3f4d1..425daff317a 100644
+--- a/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc
++++ b/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc
+@@ -53,3 +53,6 @@ test01()
+ // { dg-prune-output "does not have integral type" }
+ // { dg-prune-output "non-integral type" }
+ // { dg-prune-output "invalid specialization" }
++// These show up with -Wp,-D_GLIBCXX_ASSERTIONS.
++// { dg-prune-output "invalid operands" }
++// { dg-prune-output "wrong type argument" }
+diff --git a/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc b/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc
+index 8cabfe2ea2f..a14d373c461 100644
+--- a/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc
++++ b/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc
+@@ -53,3 +53,6 @@ test01()
+ // { dg-prune-output "does not have integral type" }
+ // { dg-prune-output "non-integral type" }
+ // { dg-prune-output "invalid specialization" }
++// These show up with -Wp,-D_GLIBCXX_ASSERTIONS.
++// { dg-prune-output "invalid operands" }
++// { dg-prune-output "wrong type argument" }
diff --git a/SOURCES/isl-0.18.tar.bz2 b/SOURCES/isl-0.18.tar.bz2
old mode 100755
new mode 100644
diff --git a/SPECS/gcc.spec b/SPECS/gcc.spec
index 1f99ee8..78d772e 100644
--- a/SPECS/gcc.spec
+++ b/SPECS/gcc.spec
@@ -1,10 +1,10 @@
-%global DATE 20221121
-%global gitrev 643e61c61b308f9c572da4ccd5f730fb
-%global gcc_version 11.3.1
+%global DATE 20231218
+%global gitrev 9e6808abff4d96f3f09474a2a744ef5f56df3e28
+%global gcc_version 11.4.1
%global gcc_major 11
# Note, gcc_release must be integer, if you want to add suffixes to
# %%{release}, append them after %%{gcc_release} on Release: line.
-%global gcc_release 4
+%global gcc_release 3
%global nvptx_tools_gitrev 5f6f343a302d620b0868edab376c00b15741e39e
%global newlib_cygwin_gitrev 50e2a63b04bdd018484605fbb954fd1bd5147fa0
%global _unpackaged_files_terminate_build 0
@@ -23,7 +23,7 @@
%if 0%{?fedora} < 32 && 0%{?rhel} < 8
%global multilib_64_archs sparc64 ppc64 ppc64p7 s390x x86_64
%else
-%global multilib_64_archs sparc64 ppc64p7
+%global multilib_64_archs sparc64 ppc64 ppc64p7 x86_64
%endif
%if 0%{?rhel} > 7
%global build_ada 0
@@ -42,7 +42,7 @@
%else
%global build_go 0
%endif
-%ifarch %{ix86} x86_64 %{arm} aarch64 ppc64 ppc64le %{mips} s390 s390x riscv64
+%ifarch %{ix86} x86_64 ppc64 ppc64le %{arm} aarch64 %{mips} s390 s390x riscv64
%global build_d 1
%else
%global build_d 0
@@ -107,15 +107,15 @@
%ifarch sparc64
%global multilib_32_arch sparcv9
%endif
-%ifarch ppc64p7
+%ifarch ppc64 ppc64p7
%global multilib_32_arch ppc
%endif
-%ifarch i686
+%ifarch x86_64
%global multilib_32_arch i686
%endif
%if 0%{?rhel} == 9
-%ifarch x86_64 ppc64le ppc64
-%global build_cross 0
+%ifarch x86_64
+%global build_cross 1
%else
%global build_cross 0
%endif
@@ -123,12 +123,12 @@
%dnl rhel != 9
%global build_cross 0
%endif
-# TODO: Add ppc64le-redhat-linux s390x-redhat-linux later.
+# TODO: Add ppc64le-powerel-linux s390x-powerel-linux later.
%global cross_targets aarch64-powerel-linux
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.3%{?dist}
+Release: %{gcc_release}%{?dist}
# libgcc, libgfortran, libgomp, libstdc++ and crtstuff have
# GCC Runtime Exception.
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
@@ -287,6 +287,14 @@ Patch23: gcc11-pie.patch
Patch24: gcc11-bind-now.patch
Patch25: gcc11-detect-sapphirerapids.patch
Patch26: gcc11-Wmismatched-dealloc-doc.patch
+Patch27: gcc11-s390x-regarg-1.patch
+Patch28: gcc11-s390x-regarg-2.patch
+Patch29: gcc11-s390x-regarg-3.patch
+Patch30: gcc11-testsuite-fixes.patch
+Patch32: gcc11-testsuite-fixes-2.patch
+Patch33: gcc11-pr111039.patch
+Patch34: gcc11-pr111070.patch
+Patch35: gcc11-testsuite-aarch64-add-fno-stack-protector.patch
Patch100: gcc11-fortran-fdec-duplicates.patch
Patch101: gcc11-fortran-flogical-as-integer.patch
@@ -879,6 +887,14 @@ mark them as cross compiled.
%patch24 -p1 -b .now~
%patch25 -p1 -b .detect-spr~
%patch26 -p1 -b .Wmismatched-dealloc-doc~
+%patch27 -p1 -b .s390x-regarg-1~
+%patch28 -p1 -b .s390x-regarg-2~
+%patch29 -p1 -b .s390x-regarg-3~
+%patch30 -p1 -b .testsuite~
+%patch32 -p1 -b .testsuite2~
+%patch33 -p1 -b .pr111039~
+%patch34 -p1 -b .pr111070~
+%patch35 -p1 -b .testsuite3~
%if 0%{?rhel} >= 9
%patch100 -p1 -b .fortran-fdec-duplicates~
@@ -897,8 +913,8 @@ mark them as cross compiled.
rm -f gcc/testsuite/go.test/test/fixedbugs/issue19182.go
%endif
-echo 'PowerEL %{version}-%{gcc_release}' > gcc/DEV-PHASE.native
-echo 'PowerEL %{version}-%{gcc_release} cross from %{_arch}' > gcc/DEV-PHASE.cross
+echo 'PowerEL9 %{version}-%{gcc_release}' > gcc/DEV-PHASE.native
+echo 'PowerEL9 %{version}-%{gcc_release} cross from %{_arch}' > gcc/DEV-PHASE.cross
cp -p gcc/DEV-PHASE{.native,}
cp -a libstdc++-v3/config/cpu/i{4,3}86/atomicity.h
@@ -1074,18 +1090,14 @@ CONFIGURE_OPTS_NATIVE="\
%ifarch ppc64
--enable-targets=powerpc-linux \
%endif
-%ifarch %{mips} s390x
-%ifarch s390x
+%ifarch ppc64le %{mips} s390x
%if 0%{?fedora} < 32 && 0%{?rhel} < 8
--enable-multilib \
%else
--disable-multilib \
%endif
%else
- --disable-multilib \
-%endif
-%else
- --disable-multilib \
+ --enable-multilib \
%endif
%ifnarch %{mips}
--with-linker-hash-style=gnu \
@@ -1118,17 +1130,9 @@ CONFIGURE_OPTS_NATIVE="\
--host=%{gcc_target_platform} --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=v7
%endif
%ifarch ppc ppc64p7
-%if 0%{?rhel} >= 7
- --with-cpu-32=power7 --with-tune-32=power7 --with-cpu-64=power7 --with-tune-64=power7 \
-%endif
-%if 0%{?rhel} == 6
- --with-cpu-32=power4 --with-tune-32=power6 --with-cpu-64=power4 --with-tune-64=power6 \
-%endif
-%endif
-%ifarch ppc64
- --with-cpu-32=%{cpuarch} --with-tune-32=%{cpuarch} --with-cpu-64=%{cpuarch} --with-tune-64=%{cpuarch} \
+ --with-cpu-32=power4 --with-tune-32=power4 --with-cpu-64=power4 --with-tune-64=power4 \
%endif
-%ifarch ppc64le
+%ifarch ppc64 ppc64le
--with-cpu-32=%{cpuarch} --with-tune-32=%{cpuarch} --with-cpu-64=%{cpuarch} --with-tune-64=%{cpuarch} \
%endif
%ifarch ppc
@@ -1157,27 +1161,7 @@ CONFIGURE_OPTS_NATIVE="\
%endif
%endif
%ifarch s390 s390x
-%if 0%{?rhel} >= 7
-%if 0%{?rhel} > 7
-%if 0%{?rhel} > 8
-%if 0%{?rhel} == 9
- --with-arch=z14 --with-tune=z15 \
-%else
--with-arch=z13 --with-tune=arch13 \
-%endif
-%else
- --with-arch=z13 --with-tune=z14 \
-%endif
-%else
- --with-arch=z196 --with-tune=zEC12 \
-%endif
-%else
-%if 0%{?fedora} >= 26
- --with-arch=zEC12 --with-tune=z13 \
-%else
- --with-arch=z9-109 --with-tune=z10 \
-%endif
-%endif
--enable-decimal-float \
%endif
%ifarch armv7hl
@@ -3574,6 +3558,97 @@ end
%endif
%changelog
+* Mon Dec 18 2023 Marek Polacek 11.4.1-3
+- update from releases/gcc-11-branch (RHEL-17638)
+ - PRs c++/106310, c++/106890, c++/109666, c++/109761, c++/111357,
+ c++/111512, c++/112795, d/108842, d/110359, d/110511, d/110516,
+ debug/110295, fortran/95947, fortran/103506, fortran/107397,
+ fortran/110288, fortran/110585, fortran/110658, fortran/111837,
+ fortran/111880, libstdc++/95048, libstdc++/99327, libstdc++/104161,
+ libstdc++/104242, libstdc++/108178, libstdc++/111050,
+ libstdc++/111511, libstdc++/112314, libstdc++/112491,
+ middle-end/110200, middle-end/111699, middle-end/111818,
+ middle-end/112733, rtl-optimization/110237, sanitizer/112727,
+ target/96762, target/101177, target/101469, target/105325,
+ target/109800, target/109932, target/110011, target/110044,
+ target/110170, target/110309, target/110741, target/111001,
+ target/111340, target/111367, target/111408, target/111815,
+ target/112672, target/112816, target/112837, target/112845,
+ target/112891, testsuite/66005, tree-optimization/110298,
+ tree-optimization/110731, tree-optimization/110914,
+ tree-optimization/111015, tree-optimization/111614,
+ tree-optimization/111764, tree-optimization/111917
+- use -fno-stack-protector in some aarch64 tests
+
+* Tue Oct 3 2023 Marek Polacek 11.4.1-2.3
+- fix member vs global template (RHEL-2607)
+
+* Mon Oct 2 2023 Marek Polacek 11.4.1-2.2
+- guard the bit test merging code in if-combine (RHEL-6068)
+
+* Fri Jun 9 2023 Marek Polacek 11.4.1-2.1
+- fix ICE on pr96024.f90 on big-endian hosts (PR fortran/96024, #2213211)
+- use -fno-stack-protector to fix bit-field aarch64 tests (#2213221)
+
+* Mon Jun 5 2023 Marek Polacek 11.4.1-2
+- update from releases/gcc-11-branch (#2193180)
+ - GCC 11.4 release
+ - PRs bootstrap/90543, c++/53932, c++/69410, c++/92752, c++/98056,
+ c++/98821, c++/100295, c++/100474, c++/101118, c++/101869,
+ c++/102780, c++/103871, c++/104527, c++/105406, c++/105996,
+ c++/106188, c++/106675, c++/106713, c++/106740, c++/107065,
+ c++/107163, c++/107179, c++/107558, c++/107579, c++/107864,
+ c++/108138, c++/108180, c++/108365, c++/108468, c++/108474,
+ c++/108607, c++/108975, c++/108998, c++/109096, c++/109164, c/107127,
+ c/107465, c/109151, d/107592, d/108050, d/108877, d/109108,
+ debug/106719, debug/108573, debug/108716, debug/108967, driver/106624,
+ fortran/85877, fortran/95107, fortran/96024, fortran/96025,
+ fortran/99036, fortran/103259, fortran/104332, fortran/106209,
+ fortran/106945, fortran/107576, fortran/107872, fortran/108131,
+ fortran/108349, fortran/108420, fortran/108421, fortran/108451,
+ fortran/108453, fortran/108501, fortran/108502, fortran/108527,
+ fortran/108529, fortran/108609, fortran/108937, fortran/109186,
+ fortran/109511, fortran/109846, ipa/105685, ipa/106124, ipa/107944,
+ libquadmath/87204, libquadmath/94756, libstdc++/91456,
+ libstdc++/103934, libstdc++/104866, libstdc++/104875,
+ libstdc++/105844, libstdc++/106183, libstdc++/107801,
+ libstdc++/107814, libstdc++/108030, libstdc++/108118,
+ libstdc++/108265, libstdc++/108636, libstdc++/108856,
+ libstdc++/108952, libstdc++/109064, libstdc++/109261,
+ libstdc++/109949, lto/109263, middle-end/104450, middle-end/104464,
+ middle-end/106190, middle-end/107317, middle-end/108237,
+ middle-end/108264, middle-end/108435, middle-end/108459,
+ middle-end/108546, middle-end/108625, middle-end/108685,
+ middle-end/108854, other/108560, other/109306,
+ rtl-optimization/106751, rtl-optimization/107482,
+ rtl-optimization/108193, rtl-optimization/108596,
+ rtl-optimization/109585, target/70243, target/90458, target/96373,
+ target/98776, target/100758, target/104871, target/104921,
+ target/105554, target/105599, target/106736, target/106875,
+ target/107568, target/107714, target/107863, target/108272,
+ target/108348, target/108589, target/108699, target/108807,
+ target/108812, target/108881, target/109067, target/109140,
+ target/109276, testsuite/47334, testsuite/103823, testsuite/108151,
+ testsuite/108973, testsuite/108985, tree-optimization/105484,
+ tree-optimization/106809, tree-optimization/107107,
+ tree-optimization/107212, tree-optimization/107254,
+ tree-optimization/107323, tree-optimization/107451,
+ tree-optimization/107554, tree-optimization/107898,
+ tree-optimization/107997, tree-optimization/108068,
+ tree-optimization/108076, tree-optimization/108095,
+ tree-optimization/108199, tree-optimization/108498,
+ tree-optimization/108688, tree-optimization/108692,
+ tree-optimization/108821, tree-optimization/108950,
+ tree-optimization/109176, tree-optimization/109410,
+ tree-optimization/109473, tree-optimization/109491,
+ tree-optimization/109502, tree-optimization/109573,
+ tree-optimization/109724, tree-optimization/109778
+ - PRs fortran/100607, libstdc++/109822, target/109954,
+ tree-optimization/109505
+
+* Wed Mar 29 2023 Marek Polacek 11.3.1-4.4
+- s390x: add support for register arguments preserving (#2168204)
+
* Wed Dec 21 2022 Marek Polacek 11.3.1-4.3
- compile the cross binaries as PIE/-z now (#2155452)