From f0d7a823c47ebdb9a3ab3af2924bcbdfd97c5b52 Mon Sep 17 00:00:00 2001 From: Jerome Duval Date: Tue, 14 Jul 2015 22:19:29 +0000 Subject: [PATCH] gcc: fix x86 host build. --- sys-devel/gcc/gcc-4.8.5_2015_07_11.recipe | 4 +- .../gcc-4.8.5_2015_07_11_for_x86.patchset | 127 ++++++++++++++++++ 2 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 sys-devel/gcc/patches/gcc-4.8.5_2015_07_11_for_x86.patchset diff --git a/sys-devel/gcc/gcc-4.8.5_2015_07_11.recipe b/sys-devel/gcc/gcc-4.8.5_2015_07_11.recipe index f038ad5a4..f5726dcd3 100644 --- a/sys-devel/gcc/gcc-4.8.5_2015_07_11.recipe +++ b/sys-devel/gcc/gcc-4.8.5_2015_07_11.recipe @@ -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" diff --git a/sys-devel/gcc/patches/gcc-4.8.5_2015_07_11_for_x86.patchset b/sys-devel/gcc/patches/gcc-4.8.5_2015_07_11_for_x86.patchset new file mode 100644 index 000000000..12f21bbe7 --- /dev/null +++ b/sys-devel/gcc/patches/gcc-4.8.5_2015_07_11_for_x86.patchset @@ -0,0 +1,127 @@ +From a5258ce3a2b1e87a6c56f2a41c3574fbd1dd9250 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +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 +