with variable length stack allocations on aarch64. Fixes CVE-2023-4039. [bsc#1214052] - Add gcc7-aarch64-untyped_call.patch to fix issue with __builtin_apply - Add gcc7-lra-elim.patch to fix internal compiler error when forming paired loads and stores on aarch64. OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gcc7?expand=0&rev=240
48 lines
1.5 KiB
Diff
48 lines
1.5 KiB
Diff
From 9cd11fd48509234e18122036bf504981f5a91b9a Mon Sep 17 00:00:00 2001
|
|
From: Richard Sandiford <richard.sandiford@arm.com>
|
|
Date: Thu, 31 Aug 2023 11:59:56 +0100
|
|
Subject: [PATCH] lra: Avoid unfolded plus-0
|
|
To: gcc-patches@gcc.gnu.org
|
|
|
|
While backporting another patch to an earlier release, I hit a
|
|
situation in which lra_eliminate_regs_1 would eliminate an address to:
|
|
|
|
(plus (reg:P R) (const_int 0))
|
|
|
|
This address compared not-equal to plain:
|
|
|
|
(reg:P R)
|
|
|
|
which caused an ICE in a later peephole2. (The ICE showed up in
|
|
gfortran.fortran-torture/compile/pr80464.f90 on the branch but seems
|
|
to be latent on trunk.)
|
|
|
|
These unfolded PLUSes shouldn't occur in the insn stream, and later code
|
|
in the same function tried to avoid them.
|
|
|
|
gcc/
|
|
* lra-eliminations.cc (lra_eliminate_regs_1): Use simplify_gen_binary
|
|
rather than gen_rtx_PLUS.
|
|
---
|
|
gcc/lra-eliminations.c | 4 ++--
|
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/gcc/lra-eliminations.c b/gcc/lra-eliminations.c
|
|
index 993da861cf9..a3daf443caf 100644
|
|
--- a/gcc/lra-eliminations.c
|
|
+++ b/gcc/lra-eliminations.c
|
|
@@ -391,8 +391,8 @@ lra_eliminate_regs_1 (rtx_insn *insn, rtx x, machine_mode mem_mode,
|
|
rtx to = subst_p ? ep->to_rtx : ep->from_rtx;
|
|
|
|
if (! update_p && ! full_p)
|
|
- return gen_rtx_PLUS (Pmode, to, XEXP (x, 1));
|
|
-
|
|
+ return simplify_gen_binary (PLUS, Pmode, to, XEXP (x, 1));
|
|
+
|
|
if (update_sp_offset != 0)
|
|
offset = ep->to_rtx == stack_pointer_rtx ? update_sp_offset : 0;
|
|
else
|
|
--
|
|
2.35.3
|
|
|