35 lines
1.2 KiB
Plaintext
35 lines
1.2 KiB
Plaintext
$OpenBSD: pp-gcc_cse_c,v 1.1 2005/01/04 23:06:33 espie Exp $
|
|
--- gcc/cse.c.orig Sun Mar 21 17:28:59 2004
|
|
+++ gcc/cse.c Mon Jan 3 10:17:42 2005
|
|
@@ -4309,7 +4309,14 @@ fold_rtx (x, insn)
|
|
|
|
if (new_const == 0)
|
|
break;
|
|
-
|
|
+#ifndef FRAME_GROWS_DOWNWARD
|
|
+ if (flag_propolice_protection
|
|
+ && GET_CODE (y) == PLUS
|
|
+ && XEXP (y, 0) == frame_pointer_rtx
|
|
+ && INTVAL (inner_const) > 0
|
|
+ && INTVAL (new_const) <= 0)
|
|
+ break;
|
|
+#endif
|
|
/* If we are associating shift operations, don't let this
|
|
produce a shift of the size of the object or larger.
|
|
This could occur when we follow a sign-extend by a right
|
|
@@ -4844,6 +4851,14 @@ cse_insn (insn, libcall_insn)
|
|
if (SET_DEST (x) == pc_rtx
|
|
&& GET_CODE (SET_SRC (x)) == LABEL_REF)
|
|
;
|
|
+ /* cut the reg propagation of stack-protected argument */
|
|
+ else if (x->volatil) {
|
|
+ rtx x1 = SET_DEST (x);
|
|
+ if (GET_CODE (x1) == SUBREG && GET_CODE (SUBREG_REG (x1)) == REG)
|
|
+ x1 = SUBREG_REG (x1);
|
|
+ if (! REGNO_QTY_VALID_P(REGNO (x1)))
|
|
+ make_new_qty (REGNO (x1), GET_MODE (x1));
|
|
+ }
|
|
|
|
/* Don't count call-insns, (set (reg 0) (call ...)), as a set.
|
|
The hard function value register is used only once, to copy to
|