gcc: fix x86 host build.

This commit is contained in:
Jerome Duval
2015-07-14 22:19:29 +00:00
parent 0b78cb358f
commit f0d7a823c4
2 changed files with 130 additions and 1 deletions

View File

@@ -8,7 +8,7 @@ HOMEPAGE="http://gcc.gnu.org"
srcGitRev="3801b878c2c2bfea5a115bcbd75b56d3da05bc3d"
SOURCE_URI="https://github.com/haiku/buildtools/archive/$srcGitRev.tar.gz"
CHECKSUM_SHA256="f2c5f2a71018b1669b7b88004fd21e0077bc7dffa2b21554d138b9848f2a17d9"
REVISION="1"
REVISION="2"
LICENSE="
GNU GPL v3
GNU LGPL v3
@@ -17,6 +17,8 @@ COPYRIGHT="1988-2015 Free Software Foundation, Inc."
if [ $effectiveTargetArchitecture = x86_64 ]; then
PATCHES="gcc-4.8.3_buildfixes_for_x86_64.patchset"
else
PATCHES="gcc-4.8.5_2015_07_11_for_x86.patchset"
fi
ARCHITECTURES="x86 x86_64 arm"

View File

@@ -0,0 +1,127 @@
From a5258ce3a2b1e87a6c56f2a41c3574fbd1dd9250 Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Tue, 14 Jul 2015 16:01:28 +0000
Subject: Revert 4.8.5 import of gcc/var-tracking.c
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index f228464..0db1562 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -592,39 +592,6 @@ static void vt_add_function_parameters (void);
static bool vt_initialize (void);
static void vt_finalize (void);
-/* Callback for stack_adjust_offset_pre_post, called via for_each_inc_dec. */
-
-static int
-stack_adjust_offset_pre_post_cb (rtx, rtx op, rtx dest, rtx src, rtx srcoff,
- void *arg)
-{
- if (dest != stack_pointer_rtx)
- return 0;
-
- switch (GET_CODE (op))
- {
- case PRE_INC:
- case PRE_DEC:
- ((HOST_WIDE_INT *)arg)[0] -= INTVAL (srcoff);
- return 0;
- case POST_INC:
- case POST_DEC:
- ((HOST_WIDE_INT *)arg)[1] -= INTVAL (srcoff);
- return 0;
- case PRE_MODIFY:
- case POST_MODIFY:
- /* We handle only adjustments by constant amount. */
- gcc_assert (GET_CODE (src) == PLUS
- && CONST_INT_P (XEXP (src, 1))
- && XEXP (src, 0) == stack_pointer_rtx);
- ((HOST_WIDE_INT *)arg)[GET_CODE (op) == POST_MODIFY]
- -= INTVAL (XEXP (src, 1));
- return 0;
- default:
- gcc_unreachable ();
- }
-}
-
/* Given a SET, calculate the amount of stack adjustment it contains
PRE- and POST-modifying stack pointer.
This function is similar to stack_adjust_offset. */
@@ -650,12 +617,68 @@ stack_adjust_offset_pre_post (rtx pattern, HOST_WIDE_INT *pre,
*post += INTVAL (XEXP (src, 1));
else
*post -= INTVAL (XEXP (src, 1));
- return;
}
- HOST_WIDE_INT res[2] = { 0, 0 };
- for_each_inc_dec (&pattern, stack_adjust_offset_pre_post_cb, res);
- *pre += res[0];
- *post += res[1];
+ else if (MEM_P (dest))
+ {
+ /* (set (mem (pre_dec (reg sp))) (foo)) */
+ src = XEXP (dest, 0);
+ code = GET_CODE (src);
+
+ switch (code)
+ {
+ case PRE_MODIFY:
+ case POST_MODIFY:
+ if (XEXP (src, 0) == stack_pointer_rtx)
+ {
+ rtx val = XEXP (XEXP (src, 1), 1);
+ /* We handle only adjustments by constant amount. */
+ gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS &&
+ CONST_INT_P (val));
+
+ if (code == PRE_MODIFY)
+ *pre -= INTVAL (val);
+ else
+ *post -= INTVAL (val);
+ break;
+ }
+ return;
+
+ case PRE_DEC:
+ if (XEXP (src, 0) == stack_pointer_rtx)
+ {
+ *pre += GET_MODE_SIZE (GET_MODE (dest));
+ break;
+ }
+ return;
+
+ case POST_DEC:
+ if (XEXP (src, 0) == stack_pointer_rtx)
+ {
+ *post += GET_MODE_SIZE (GET_MODE (dest));
+ break;
+ }
+ return;
+
+ case PRE_INC:
+ if (XEXP (src, 0) == stack_pointer_rtx)
+ {
+ *pre -= GET_MODE_SIZE (GET_MODE (dest));
+ break;
+ }
+ return;
+
+ case POST_INC:
+ if (XEXP (src, 0) == stack_pointer_rtx)
+ {
+ *post -= GET_MODE_SIZE (GET_MODE (dest));
+ break;
+ }
+ return;
+
+ default:
+ return;
+ }
+ }
}
/* Given an INSN, calculate the amount of stack adjustment it contains
--
1.8.3.4