From patchwork Fri Apr 13 12:44:45 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gustavo Zacarias X-Patchwork-Id: 152296 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from fraxinus.osuosl.org (fraxinus.osuosl.org [140.211.166.137]) by ozlabs.org (Postfix) with ESMTP id 86AF4B7012 for ; Fri, 13 Apr 2012 22:45:09 +1000 (EST) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 0C05F102B72; Fri, 13 Apr 2012 12:45:08 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id SJHP7pfEaR51; Fri, 13 Apr 2012 12:44:59 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by fraxinus.osuosl.org (Postfix) with ESMTP id 4212F10249B; Fri, 13 Apr 2012 12:44:59 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from whitealder.osuosl.org (whitealder.osuosl.org [140.211.166.138]) by ash.osuosl.org (Postfix) with ESMTP id 372008F75B for ; Fri, 13 Apr 2012 12:44:58 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 2C863904E7 for ; Fri, 13 Apr 2012 12:44:58 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4BY1M-P7MCdS for ; Fri, 13 Apr 2012 12:44:54 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from loknar.toptech.com.ar (loknar.toptech.com.ar [74.118.36.95]) by whitealder.osuosl.org (Postfix) with ESMTPS id 42657904E5 for ; Fri, 13 Apr 2012 12:44:53 +0000 (UTC) Received: from asgard (host9.190-138-181.telecom.net.ar [190.138.181.9]) (authenticated bits=0) by loknar.toptech.com.ar (8.14.4/8.14.4) with ESMTP id q3DCikVM018991 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 13 Apr 2012 09:44:48 -0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=zacarias.com.ar; s=dkey; t=1334321092; bh=carZ4bpaoR5LT6lbe2H8rOiqAkeQYAcxlgCGsVf1QmI=; h=From:To:Cc:Subject:Date:Message-Id; b=nok8QW9qvXzNcIMD4SzZHf8KVCB19cNl93aneicj5byrrfOQbR2sIRFyRtZKMk3I4 nyaJddWpCiMBuFkB8YJic2s6pPkks10ltLNIHGH/Ip/EDYkij4G+C+pRzBsY6lSA/M 6rstR0vzsWOdsCFLNTXVmsKHrC3iZ2VrAkk20XDo= Received: by asgard (sSMTP sendmail emulation); Fri, 13 Apr 2012 09:44:45 -0300 From: Gustavo Zacarias To: buildroot@busybox.net Date: Fri, 13 Apr 2012 09:44:45 -0300 Message-Id: <1334321085-16458-1-git-send-email-gustavo@zacarias.com.ar> X-Mailer: git-send-email 1.7.3.4 X-Virus-Scanned: clamav-milter 0.97.3 at loknar X-Virus-Status: Clean Subject: [Buildroot] [PATCH] toolchain/gcc: add 4.7.x series X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: buildroot-bounces@busybox.net Sender: buildroot-bounces@busybox.net Add gcc 4.7.0 to the toolchain options. Signed-off-by: Gustavo Zacarias --- target/Config.in.arch | 1 + .../gcc/0001-toolchain-gcc-add-4.7.x-series.txt | 659 ++++++++++++++++++++ toolchain/gcc/4.7.0/100-uclibc-conf.patch | 33 + toolchain/gcc/4.7.0/200-gcc-pr52734.patch | 115 ++++ toolchain/gcc/4.7.0/301-missing-execinfo_h.patch | 11 + toolchain/gcc/4.7.0/302-c99-snprintf.patch | 13 + .../gcc/4.7.0/305-libmudflap-susv3-legacy.patch | 49 ++ toolchain/gcc/4.7.0/810-arm-softfloat-libgcc.patch | 25 + toolchain/gcc/4.7.0/830-arm_unbreak_armv4t.patch | 13 + .../powerpc-link-with-math-lib.patch.conditional | 125 ++++ toolchain/gcc/Config.in | 5 + toolchain/gcc/Config.in.2 | 2 +- toolchain/gcc/gcc-uclibc-4.x.mk | 10 + 13 files changed, 1060 insertions(+), 1 deletions(-) create mode 100644 toolchain/gcc/0001-toolchain-gcc-add-4.7.x-series.txt create mode 100644 toolchain/gcc/4.7.0/100-uclibc-conf.patch create mode 100644 toolchain/gcc/4.7.0/200-gcc-pr52734.patch create mode 100644 toolchain/gcc/4.7.0/301-missing-execinfo_h.patch create mode 100644 toolchain/gcc/4.7.0/302-c99-snprintf.patch create mode 100644 toolchain/gcc/4.7.0/305-libmudflap-susv3-legacy.patch create mode 100644 toolchain/gcc/4.7.0/810-arm-softfloat-libgcc.patch create mode 100644 toolchain/gcc/4.7.0/830-arm_unbreak_armv4t.patch create mode 100644 toolchain/gcc/4.7.0/powerpc-link-with-math-lib.patch.conditional diff --git a/target/Config.in.arch b/target/Config.in.arch index a2c0037..f8ab84e 100644 --- a/target/Config.in.arch +++ b/target/Config.in.arch @@ -221,6 +221,7 @@ config BR2_ARM_EABI bool "EABI" config BR2_ARM_OABI bool "OABI" + depends on !BR2_GCC_VERSION_4_7_X endchoice choice diff --git a/toolchain/gcc/0001-toolchain-gcc-add-4.7.x-series.txt b/toolchain/gcc/0001-toolchain-gcc-add-4.7.x-series.txt new file mode 100644 index 0000000..a80fffd --- /dev/null +++ b/toolchain/gcc/0001-toolchain-gcc-add-4.7.x-series.txt @@ -0,0 +1,659 @@ +From 14c5bc2ae9c03569e6ff1bf670cc2bb743d1e73e Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Thu, 12 Apr 2012 13:42:43 -0300 +Subject: [PATCH] toolchain/gcc: add 4.7.x series + +Signed-off-by: Gustavo Zacarias +--- + target/Config.in.arch | 1 + + toolchain/gcc/4.7.0/100-uclibc-conf.patch | 33 +++ + toolchain/gcc/4.7.0/200-gcc-pr52734.patch | 241 ++++++++++++++++++++ + toolchain/gcc/4.7.0/301-missing-execinfo_h.patch | 11 + + toolchain/gcc/4.7.0/302-c99-snprintf.patch | 13 + + .../gcc/4.7.0/305-libmudflap-susv3-legacy.patch | 49 ++++ + toolchain/gcc/4.7.0/810-arm-softfloat-libgcc.patch | 25 ++ + toolchain/gcc/4.7.0/830-arm_unbreak_armv4t.patch | 13 + + .../powerpc-link-with-math-lib.patch.conditional | 125 ++++++++++ + toolchain/gcc/Config.in | 5 + + toolchain/gcc/Config.in.2 | 2 +- + toolchain/gcc/gcc-uclibc-4.x.mk | 10 + + 12 files changed, 527 insertions(+), 1 deletions(-) + create mode 100644 toolchain/gcc/4.7.0/100-uclibc-conf.patch + create mode 100644 toolchain/gcc/4.7.0/200-gcc-pr52734.patch + create mode 100644 toolchain/gcc/4.7.0/301-missing-execinfo_h.patch + create mode 100644 toolchain/gcc/4.7.0/302-c99-snprintf.patch + create mode 100644 toolchain/gcc/4.7.0/305-libmudflap-susv3-legacy.patch + create mode 100644 toolchain/gcc/4.7.0/810-arm-softfloat-libgcc.patch + create mode 100644 toolchain/gcc/4.7.0/830-arm_unbreak_armv4t.patch + create mode 100644 toolchain/gcc/4.7.0/powerpc-link-with-math-lib.patch.conditional + +diff --git a/target/Config.in.arch b/target/Config.in.arch +index a2c0037..f8ab84e 100644 +--- a/target/Config.in.arch ++++ b/target/Config.in.arch +@@ -221,6 +221,7 @@ config BR2_ARM_EABI + bool "EABI" + config BR2_ARM_OABI + bool "OABI" ++ depends on !BR2_GCC_VERSION_4_7_X + endchoice + + choice +diff --git a/toolchain/gcc/4.7.0/100-uclibc-conf.patch b/toolchain/gcc/4.7.0/100-uclibc-conf.patch +new file mode 100644 +index 0000000..cca8c82 +--- /dev/null ++++ b/toolchain/gcc/4.7.0/100-uclibc-conf.patch +@@ -0,0 +1,33 @@ ++--- gcc/gcc/config/--- gcc/contrib/regression/objs-gcc.sh +++++ gcc/contrib/regression/objs-gcc.sh ++@@ -105,6 +105,10 @@ ++ then ++ make all-gdb all-dejagnu all-ld || exit 1 ++ make install-gdb install-dejagnu install-ld || exit 1 +++elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-uclibc ] +++ then +++ make all-gdb all-dejagnu all-ld || exit 1 +++ make install-gdb install-dejagnu install-ld || exit 1 ++ elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then ++ make bootstrap || exit 1 ++ make install || exit 1 ++--- gcc/libjava/classpath/ltconfig +++++ gcc/libjava/classpath/ltconfig ++@@ -603,7 +603,7 @@ ++ ++ # Transform linux* to *-*-linux-gnu*, to support old configure scripts. ++ case $host_os in ++-linux-gnu*) ;; +++linux-gnu*|linux-uclibc*) ;; ++ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` ++ esac ++ ++@@ -1251,7 +1251,7 @@ ++ ;; ++ ++ # This must be Linux ELF. ++-linux-gnu*) +++linux*) ++ version_type=linux ++ need_lib_prefix=no ++ need_version=no +diff --git a/toolchain/gcc/4.7.0/200-gcc-pr52734.patch b/toolchain/gcc/4.7.0/200-gcc-pr52734.patch +new file mode 100644 +index 0000000..b21b6d0 +--- /dev/null ++++ b/toolchain/gcc/4.7.0/200-gcc-pr52734.patch +@@ -0,0 +1,241 @@ ++--- a/gcc/tree-ssa-tail-merge.c (revision 185028) +++++ b/gcc/tree-ssa-tail-merge.c (working copy) ++@@ -1033,7 +1033,7 @@ set_cluster (basic_block bb1, basic_bloc ++ gimple_bb (s2) are members of SAME_SUCC. */ ++ ++ static bool ++-gimple_equal_p (same_succ same_succ, gimple s1, gimple s2) +++gimple_equal_p (same_succ same_succ, gimple s1, gimple s2, bool *gvn_used) ++ { ++ unsigned int i; ++ tree lhs1, lhs2; ++@@ -1069,7 +1069,10 @@ gimple_equal_p (same_succ same_succ, gim ++ if (operand_equal_p (t1, t2, 0)) ++ continue; ++ if (gvn_uses_equal (t1, t2)) ++- continue; +++ { +++ *gvn_used = true; +++ continue; +++ } ++ equal = false; ++ break; ++ } ++@@ -1083,12 +1086,16 @@ gimple_equal_p (same_succ same_succ, gim ++ if (lhs1 == NULL_TREE || lhs2 == NULL_TREE) ++ return false; ++ if (TREE_CODE (lhs1) == SSA_NAME && TREE_CODE (lhs2) == SSA_NAME) ++- return vn_valueize (lhs1) == vn_valueize (lhs2); +++ { +++ *gvn_used = true; +++ return vn_valueize (lhs1) == vn_valueize (lhs2); +++ } ++ return operand_equal_p (lhs1, lhs2, 0); ++ ++ case GIMPLE_ASSIGN: ++ lhs1 = gimple_get_lhs (s1); ++ lhs2 = gimple_get_lhs (s2); +++ *gvn_used = true; ++ return (TREE_CODE (lhs1) == SSA_NAME ++ && TREE_CODE (lhs2) == SSA_NAME ++ && vn_valueize (lhs1) == vn_valueize (lhs2)); ++@@ -1096,15 +1103,23 @@ gimple_equal_p (same_succ same_succ, gim ++ case GIMPLE_COND: ++ t1 = gimple_cond_lhs (s1); ++ t2 = gimple_cond_lhs (s2); ++- if (!operand_equal_p (t1, t2, 0) ++- && !gvn_uses_equal (t1, t2)) ++- return false; +++ if (!operand_equal_p (t1, t2, 0)) +++ { +++ if (gvn_uses_equal (t1, t2)) +++ *gvn_used = true; +++ else +++ return false; +++ } ++ ++ t1 = gimple_cond_rhs (s1); ++ t2 = gimple_cond_rhs (s2); ++- if (!operand_equal_p (t1, t2, 0) ++- && !gvn_uses_equal (t1, t2)) ++- return false; +++ if (!operand_equal_p (t1, t2, 0)) +++ { +++ if (gvn_uses_equal (t1, t2)) +++ *gvn_used = true; +++ else +++ return false; +++ } ++ ++ code1 = gimple_expr_code (s1); ++ code2 = gimple_expr_code (s2); ++@@ -1126,18 +1141,25 @@ gimple_equal_p (same_succ same_succ, gim ++ /* Let GSI skip backwards over local defs. */ ++ ++ static void ++-gsi_advance_bw_nondebug_nonlocal (gimple_stmt_iterator *gsi) +++gsi_advance_bw_nondebug_nonlocal (gimple_stmt_iterator *gsi, tree *vuse) ++ { ++ gimple stmt; +++ tree lvuse; ++ ++ while (true) ++ { ++ if (gsi_end_p (*gsi)) ++ return; ++ stmt = gsi_stmt (*gsi); +++ +++ lvuse = gimple_vuse (stmt); +++ if (lvuse != NULL_TREE) +++ *vuse = lvuse; +++ ++ if (!(is_gimple_assign (stmt) && local_def (gimple_get_lhs (stmt)) ++ && !gimple_has_side_effects (stmt))) ++ return; +++ ++ gsi_prev_nondebug (gsi); ++ } ++ } ++@@ -1146,28 +1168,34 @@ gsi_advance_bw_nondebug_nonlocal (gimple ++ clusters them. */ ++ ++ static void ++-find_duplicate (same_succ same_succ, basic_block bb1, basic_block bb2) +++find_duplicate (same_succ same_succ, basic_block bb1, basic_block bb2, +++ bool gvn_used) ++ { ++ gimple_stmt_iterator gsi1 = gsi_last_nondebug_bb (bb1); ++ gimple_stmt_iterator gsi2 = gsi_last_nondebug_bb (bb2); +++ tree vuse1 = NULL_TREE, vuse2 = NULL_TREE; ++ ++- gsi_advance_bw_nondebug_nonlocal (&gsi1); ++- gsi_advance_bw_nondebug_nonlocal (&gsi2); +++ gsi_advance_bw_nondebug_nonlocal (&gsi1, &vuse1); +++ gsi_advance_bw_nondebug_nonlocal (&gsi2, &vuse2); ++ ++ while (!gsi_end_p (gsi1) && !gsi_end_p (gsi2)) ++ { ++- if (!gimple_equal_p (same_succ, gsi_stmt (gsi1), gsi_stmt (gsi2))) +++ if (!gimple_equal_p (same_succ, gsi_stmt (gsi1), gsi_stmt (gsi2), +++ &gvn_used)) ++ return; ++ ++ gsi_prev_nondebug (&gsi1); ++ gsi_prev_nondebug (&gsi2); ++- gsi_advance_bw_nondebug_nonlocal (&gsi1); ++- gsi_advance_bw_nondebug_nonlocal (&gsi2); +++ gsi_advance_bw_nondebug_nonlocal (&gsi1, &vuse1); +++ gsi_advance_bw_nondebug_nonlocal (&gsi2, &vuse2); ++ } ++ ++ if (!(gsi_end_p (gsi1) && gsi_end_p (gsi2))) ++ return; ++ +++ if (gvn_used && vuse1 != vuse2) +++ return; +++ ++ if (dump_file) ++ fprintf (dump_file, "find_duplicates: duplicate of \n", ++ bb1->index, bb2->index); ++@@ -1179,7 +1207,7 @@ find_duplicate (same_succ same_succ, bas ++ E2 are equal. */ ++ ++ static bool ++-same_phi_alternatives_1 (basic_block dest, edge e1, edge e2) +++same_phi_alternatives_1 (basic_block dest, edge e1, edge e2, bool *gvn_used) ++ { ++ int n1 = e1->dest_idx, n2 = e2->dest_idx; ++ gimple_stmt_iterator gsi; ++@@ -1197,7 +1225,10 @@ same_phi_alternatives_1 (basic_block des ++ if (operand_equal_for_phi_arg_p (val1, val2)) ++ continue; ++ if (gvn_uses_equal (val1, val2)) ++- continue; +++ { +++ *gvn_used = true; +++ continue; +++ } ++ ++ return false; ++ } ++@@ -1209,7 +1240,8 @@ same_phi_alternatives_1 (basic_block des ++ phi alternatives for BB1 and BB2 are equal. */ ++ ++ static bool ++-same_phi_alternatives (same_succ same_succ, basic_block bb1, basic_block bb2) +++same_phi_alternatives (same_succ same_succ, basic_block bb1, basic_block bb2, +++ bool *gvn_used) ++ { ++ unsigned int s; ++ bitmap_iterator bs; ++@@ -1227,7 +1259,7 @@ same_phi_alternatives (same_succ same_su ++ ++ /* For all phis in bb, the phi alternatives for e1 and e2 need to have ++ the same value. */ ++- if (!same_phi_alternatives_1 (succ, e1, e2)) +++ if (!same_phi_alternatives_1 (succ, e1, e2, gvn_used)) ++ return false; ++ } ++ ++@@ -1301,6 +1333,7 @@ find_clusters_1 (same_succ same_succ) ++ bitmap_iterator bi, bj; ++ int nr_comparisons; ++ int max_comparisons = PARAM_VALUE (PARAM_MAX_TAIL_MERGE_COMPARISONS); +++ bool gvn_used; ++ ++ EXECUTE_IF_SET_IN_BITMAP (same_succ->bbs, 0, i, bi) ++ { ++@@ -1333,10 +1366,11 @@ find_clusters_1 (same_succ same_succ) ++ if (!deps_ok_for_redirect (bb1, bb2)) ++ continue; ++ ++- if (!(same_phi_alternatives (same_succ, bb1, bb2))) +++ gvn_used = false; +++ if (!(same_phi_alternatives (same_succ, bb1, bb2, &gvn_used))) ++ continue; ++ ++- find_duplicate (same_succ, bb1, bb2); +++ find_duplicate (same_succ, bb1, bb2, gvn_used); ++ } ++ } ++ } ++Index: gcc/testsuite/gcc.dg/pr52734.c ++=================================================================== ++--- a/dev/null (new file) +++++ b/gcc/testsuite/gcc.dg/pr52734.c (revision 0) ++@@ -0,0 +1,35 @@ +++/* { dg-do run } */ +++/* { dg-options "-O2" } */ +++ +++int bbb = 0; +++ +++int __attribute__((noinline,noclone)) aaa(void) +++{ +++ ++bbb; +++ return 0; +++} +++ +++int __attribute__((noinline,noclone)) ccc(void) +++{ +++ int ddd; +++ /* bbb == 0 */ +++ if (aaa()) +++ return bbb; +++ +++ /* bbb == 1 */ +++ ddd = bbb; +++ /* bbb == ddd == 1 */ +++ if (aaa ()) +++ return 0; +++ /* bbb == 2, ddd == 1 */ +++ +++ return ddd; +++} +++ +++int main(void) +++{ +++ if (ccc() != 1) +++ __builtin_abort(); +++ return 0; +++} +++ +diff --git a/toolchain/gcc/4.7.0/301-missing-execinfo_h.patch b/toolchain/gcc/4.7.0/301-missing-execinfo_h.patch +new file mode 100644 +index 0000000..0e2092f +--- /dev/null ++++ b/toolchain/gcc/4.7.0/301-missing-execinfo_h.patch +@@ -0,0 +1,11 @@ ++--- gcc-4.0.0/boehm-gc/include/gc.h-orig 2005-04-28 22:28:57.000000000 -0500 +++++ gcc-4.0.0/boehm-gc/include/gc.h 2005-04-28 22:30:38.000000000 -0500 ++@@ -500,7 +500,7 @@ ++ #ifdef __linux__ ++ # include ++ # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \ ++- && !defined(__ia64__) +++ && !defined(__ia64__) && !defined(__UCLIBC__) ++ # ifndef GC_HAVE_BUILTIN_BACKTRACE ++ # define GC_HAVE_BUILTIN_BACKTRACE ++ # endif +diff --git a/toolchain/gcc/4.7.0/302-c99-snprintf.patch b/toolchain/gcc/4.7.0/302-c99-snprintf.patch +new file mode 100644 +index 0000000..ba51a0e +--- /dev/null ++++ b/toolchain/gcc/4.7.0/302-c99-snprintf.patch +@@ -0,0 +1,13 @@ ++Index: gcc-4.3.0/libstdc++-v3/include/c_global/cstdio ++=================================================================== ++--- gcc-4.3.0/libstdc++-v3/include/c_global/cstdio (revision 129202) +++++ gcc-4.3.0/libstdc++-v3/include/c_global/cstdio (working copy) ++@@ -144,7 +144,7 @@ ++ ++ _GLIBCXX_END_NAMESPACE ++ ++-#if _GLIBCXX_USE_C99 +++#if _GLIBCXX_USE_C99 || defined __UCLIBC__ ++ ++ #undef snprintf ++ #undef vfscanf +diff --git a/toolchain/gcc/4.7.0/305-libmudflap-susv3-legacy.patch b/toolchain/gcc/4.7.0/305-libmudflap-susv3-legacy.patch +new file mode 100644 +index 0000000..374b1f8 +--- /dev/null ++++ b/toolchain/gcc/4.7.0/305-libmudflap-susv3-legacy.patch +@@ -0,0 +1,49 @@ ++Index: gcc-4.2/libmudflap/mf-hooks2.c ++=================================================================== ++--- gcc-4.2/libmudflap/mf-hooks2.c (revision 119834) +++++ gcc-4.2/libmudflap/mf-hooks2.c (working copy) ++@@ -427,7 +427,7 @@ ++ { ++ TRACE ("%s\n", __PRETTY_FUNCTION__); ++ MF_VALIDATE_EXTENT(s, n, __MF_CHECK_WRITE, "bzero region"); ++- bzero (s, n); +++ memset (s, 0, n); ++ } ++ ++ ++@@ -437,7 +437,7 @@ ++ TRACE ("%s\n", __PRETTY_FUNCTION__); ++ MF_VALIDATE_EXTENT(src, n, __MF_CHECK_READ, "bcopy src"); ++ MF_VALIDATE_EXTENT(dest, n, __MF_CHECK_WRITE, "bcopy dest"); ++- bcopy (src, dest, n); +++ memmove (dest, src, n); ++ } ++ ++ ++@@ -447,7 +447,7 @@ ++ TRACE ("%s\n", __PRETTY_FUNCTION__); ++ MF_VALIDATE_EXTENT(s1, n, __MF_CHECK_READ, "bcmp 1st arg"); ++ MF_VALIDATE_EXTENT(s2, n, __MF_CHECK_READ, "bcmp 2nd arg"); ++- return bcmp (s1, s2, n); +++ return n == 0 ? 0 : memcmp (s1, s2, n); ++ } ++ ++ ++@@ -456,7 +456,7 @@ ++ size_t n = strlen (s); ++ TRACE ("%s\n", __PRETTY_FUNCTION__); ++ MF_VALIDATE_EXTENT(s, CLAMPADD(n, 1), __MF_CHECK_READ, "index region"); ++- return index (s, c); +++ return strchr (s, c); ++ } ++ ++ ++@@ -465,7 +465,7 @@ ++ size_t n = strlen (s); ++ TRACE ("%s\n", __PRETTY_FUNCTION__); ++ MF_VALIDATE_EXTENT(s, CLAMPADD(n, 1), __MF_CHECK_READ, "rindex region"); ++- return rindex (s, c); +++ return strrchr (s, c); ++ } ++ ++ /* XXX: stpcpy, memccpy */ +diff --git a/toolchain/gcc/4.7.0/810-arm-softfloat-libgcc.patch b/toolchain/gcc/4.7.0/810-arm-softfloat-libgcc.patch +new file mode 100644 +index 0000000..a3d7db0 +--- /dev/null ++++ b/toolchain/gcc/4.7.0/810-arm-softfloat-libgcc.patch +@@ -0,0 +1,25 @@ ++--- a/gcc/config/arm/linux-elf.h +++++ b/gcc/config/arm/linux-elf.h ++@@ -57,7 +57,7 @@ ++ %{shared:-lc} \ ++ %{!shared:%{profile:-lc_p}%{!profile:-lc}}" ++ ++-#define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc" +++#define LIBGCC_SPEC "-lgcc" ++ ++ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" ++ ++--- a/libgcc/config/arm/t-linux +++++ b/libgcc/config/arm/t-linux ++@@ -1,6 +1,10 @@ ++ LIB1ASMSRC = arm/lib1funcs.S ++ LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx _clzsi2 _clzdi2 \ ++- _arm_addsubdf3 _arm_addsubsf3 +++ _arm_addsubdf3 _arm_addsubsf3 \ +++ _arm_negdf2 _arm_muldivdf3 _arm_cmpdf2 _arm_unorddf2 \ +++ _arm_fixdfsi _arm_fixunsdfsi _arm_truncdfsf2 \ +++ _arm_negsf2 _arm_muldivsf3 _arm_cmpsf2 _arm_unordsf2 \ +++ _arm_fixsfsi _arm_fixunssfsi ++ ++ # Just for these, we omit the frame pointer since it makes such a big ++ # difference. +diff --git a/toolchain/gcc/4.7.0/830-arm_unbreak_armv4t.patch b/toolchain/gcc/4.7.0/830-arm_unbreak_armv4t.patch +new file mode 100644 +index 0000000..37f8f2a +--- /dev/null ++++ b/toolchain/gcc/4.7.0/830-arm_unbreak_armv4t.patch +@@ -0,0 +1,13 @@ ++http://sourceware.org/ml/crossgcc/2008-05/msg00009.html ++ ++--- a/gcc/config/arm/linux-eabi.h +++++ b/gcc/config/arm/linux-eabi.h ++@@ -45,7 +45,7 @@ ++ The ARM10TDMI core is the default for armv5t, so set ++ SUBTARGET_CPU_DEFAULT to achieve this. */ ++ #undef SUBTARGET_CPU_DEFAULT ++-#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi +++#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9tdmi ++ ++ /* TARGET_BIG_ENDIAN_DEFAULT is set in ++ config.gcc for big endian configurations. */ +diff --git a/toolchain/gcc/4.7.0/powerpc-link-with-math-lib.patch.conditional b/toolchain/gcc/4.7.0/powerpc-link-with-math-lib.patch.conditional +new file mode 100644 +index 0000000..7e75e87 +--- /dev/null ++++ b/toolchain/gcc/4.7.0/powerpc-link-with-math-lib.patch.conditional +@@ -0,0 +1,125 @@ ++http://gcc.gnu.org/ml/gcc-patches/2008-10/msg00269.html ++ ++On glibc the libc.so carries a copy of the math function copysignl() but ++on uClibc math functions like copysignl() live in libm. Since libgcc_s ++contains unresolved symbols, any attempt to link against libgcc_s ++without explicitely specifying -lm fails, resulting in a broken ++bootstrap of the compiler. ++ ++Forward port to gcc 4.5.1 by Gustavo Zacarias ++ ++diff -Nura gcc-4.5.1.orig/gcc/config/t-slibgcc-elf-ver gcc-4.5.1/gcc/config/t-slibgcc-elf-ver ++--- gcc-4.5.1.orig/gcc/config/t-slibgcc-elf-ver 2010-11-03 14:35:08.644904042 -0300 +++++ gcc-4.5.1/gcc/config/t-slibgcc-elf-ver 2010-11-03 14:35:56.332904024 -0300 ++@@ -27,7 +27,7 @@ ++ SHLIB_OBJS = @shlib_objs@ ++ SHLIB_DIR = @multilib_dir@ ++ SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@ ++-SHLIB_LC = -lc +++SHLIB_LC = @libgcc_libm@ -lc ++ SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK) ++ SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \ ++ $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK) ++diff -Nura gcc-4.5.1.orig/libgcc/Makefile.in gcc-4.5.1/libgcc/Makefile.in ++--- gcc-4.5.1.orig/libgcc/Makefile.in 2010-11-03 14:32:44.272904042 -0300 +++++ gcc-4.5.1/libgcc/Makefile.in 2010-11-03 14:37:03.893904042 -0300 ++@@ -39,6 +39,7 @@ ++ decimal_float = @decimal_float@ ++ enable_decimal_float = @enable_decimal_float@ ++ fixed_point = @fixed_point@ +++LIBGCC_LIBM = @LIBGCC_LIBM@ ++ ++ host_noncanonical = @host_noncanonical@ ++ ++@@ -798,9 +799,10 @@ ++ @multilib_dir@,$(MULTIDIR),$(subst \ ++ @shlib_objs@,$(objects),$(subst \ ++ @shlib_base_name@,libgcc_s,$(subst \ +++ @libgcc_libm@,$(LIBGCC_LIBM),$(subst \ ++ @shlib_map_file@,$(mapfile),$(subst \ ++ @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \ ++- @shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK)))))))) +++ @shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK))))))))) ++ ++ libunwind$(SHLIB_EXT): $(libunwind-s-objects) $(extra-parts) ++ # @multilib_flags@ is still needed because this may use ++diff -Nura gcc-4.5.1.orig/libgcc/configure gcc-4.5.1/libgcc/configure ++--- gcc-4.5.1.orig/libgcc/configure 2010-11-03 14:32:44.283904042 -0300 +++++ gcc-4.5.1/libgcc/configure 2010-11-03 14:39:48.685904042 -0300 ++@@ -557,6 +557,7 @@ ++ extra_parts ++ tmake_file ++ set_use_emutls +++LIBGCC_LIBM ++ set_have_cc_tls ++ vis_hide ++ fixed_point ++@@ -3847,6 +3848,37 @@ ++ set_use_emutls="-DUSE_EMUTLS" ++ fi ++ +++# On powerpc libgcc_s references copysignl which is a libm function but +++# glibc apparently also provides it via libc as opposed to uClibc where +++# it lives in libm. +++echo "$as_me:$LINENO: checking for library containing copysignl" >&5 +++echo $ECHO_N "checking for library containing copysignl... $ECHO_C" >&6 +++if test "${libgcc_cv_copysignl_lib+set}" = set; then +++ echo $ECHO_N "(cached) $ECHO_C" >&6 +++else +++ +++ echo '#include ' > conftest.c +++ echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c +++ libgcc_cv_copysignl_lib="-lc" +++ if { ac_try='${CC-cc} -S conftest.c -o conftest.s 1>&5' +++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +++ (eval $ac_try) 2>&5 +++ ac_status=$? +++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 +++ (exit $ac_status); }; } +++ then +++ libgcc_cv_copysignl_lib="-lm" +++ fi +++ rm -f conftest.* +++ +++fi +++echo "$as_me:$LINENO: result: $libgcc_cv_copysignl_lib" >&5 +++echo "${ECHO_T}$libgcc_cv_copysignl_lib" >&6 +++ +++case /${libgcc_cv_copysignl_lib}/ in +++ /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;; +++ *) LIBGCC_LIBM= ;; +++esac ++ ++ # Conditionalize the makefile for this target machine. ++ tmake_file_= ++diff -Nura gcc-4.5.1.orig/libgcc/configure.ac gcc-4.5.1/libgcc/configure.ac ++--- gcc-4.5.1.orig/libgcc/configure.ac 2010-11-03 14:32:44.735904042 -0300 +++++ gcc-4.5.1/libgcc/configure.ac 2010-11-03 14:42:11.278904045 -0300 ++@@ -238,6 +238,27 @@ ++ fi ++ AC_SUBST(set_have_cc_tls) ++ +++# On powerpc libgcc_s references copysignl which is a libm function but +++# glibc apparently also provides it via libc as opposed to uClibc where +++# it lives in libm. +++AC_CACHE_CHECK +++ libgcc_cv_copysignl_lib, +++ echo '#include ' > conftest.c +++ echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c +++ libgcc_cv_copysignl_lib="-lc" +++ if AC_TRY_COMMAND(${CC-cc} -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD) +++ then +++ libgcc_cv_copysignl_lib="-lm" +++ fi +++ rm -f conftest.* +++ ]) +++ +++case /${libgcc_cv_copysignl_lib}/ in +++ /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;; +++ *) LIBGCC_LIBM= ;; +++esac +++AC_SUBST(LIBGCC_LIBM) +++ ++ # See if we have emulated thread-local storage. ++ GCC_CHECK_EMUTLS ++ set_use_emutls= +diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in +index a4ca054..4bff885 100644 +--- a/toolchain/gcc/Config.in ++++ b/toolchain/gcc/Config.in +@@ -30,6 +30,10 @@ choice + depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 + bool "gcc 4.6.x" + ++ config BR2_GCC_VERSION_4_7_X ++ depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 ++ bool "gcc 4.7.x" ++ + config BR2_GCC_VERSION_SNAP + depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 + bool "gcc snapshot" +@@ -60,6 +64,7 @@ config BR2_GCC_VERSION + default "4.4.7" if BR2_GCC_VERSION_4_4_X + default "4.5.3" if BR2_GCC_VERSION_4_5_X + default "4.6.3" if BR2_GCC_VERSION_4_6_X ++ default "4.7.0" if BR2_GCC_VERSION_4_7_X + default $BR2_GCC_SNAP_DATE if BR2_GCC_VERSION_SNAP + + config BR2_EXTRA_GCC_CONFIG_OPTIONS +diff --git a/toolchain/gcc/Config.in.2 b/toolchain/gcc/Config.in.2 +index c76d125..d060a80 100644 +--- a/toolchain/gcc/Config.in.2 ++++ b/toolchain/gcc/Config.in.2 +@@ -3,7 +3,7 @@ config BR2_PACKAGE_GCC_TARGET + depends on BR2_HAVE_DEVFILES && BR2_TOOLCHAIN_BUILDROOT + select BR2_PACKAGE_BINUTILS + select BR2_PACKAGE_BINUTILS_TARGET +- select BR2_PACKAGE_MPC if (BR2_GCC_VERSION_4_5_X || BR2_GCC_VERSION_4_6_X || BR2_GCC_VERSION_SNAP) ++ select BR2_PACKAGE_MPC if (BR2_GCC_VERSION_4_5_X || BR2_GCC_VERSION_4_6_X || BR2_GCC_VERSION_4_7_X || BR2_GCC_VERSION_SNAP) + select BR2_PACKAGE_MPFR + select BR2_PACKAGE_GMP + help +diff --git a/toolchain/gcc/gcc-uclibc-4.x.mk b/toolchain/gcc/gcc-uclibc-4.x.mk +index 2c8b11f..ed2216f 100644 +--- a/toolchain/gcc/gcc-uclibc-4.x.mk ++++ b/toolchain/gcc/gcc-uclibc-4.x.mk +@@ -120,6 +120,16 @@ endif + GCC_HOST_PREREQ += host-mpc + endif + ++# GCC 4.7.x prerequisites ++ifeq ($(findstring x4.7.,x$(GCC_VERSION)),x4.7.) ++GCC_WITH_HOST_MPC = --with-mpc=$(HOST_DIR)/usr ++GCC_TARGET_PREREQ += mpc ++ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y) ++HOST_SOURCE += host-mpc-source ++endif ++GCC_HOST_PREREQ += host-mpc ++endif ++ + # GCC snapshot prerequisites + # Since we don't know and it can be quite new just ask for everything known + ifneq ($(GCC_SNAP_DATE),) +-- +1.7.3.4 + diff --git a/toolchain/gcc/4.7.0/100-uclibc-conf.patch b/toolchain/gcc/4.7.0/100-uclibc-conf.patch new file mode 100644 index 0000000..cca8c82 --- /dev/null +++ b/toolchain/gcc/4.7.0/100-uclibc-conf.patch @@ -0,0 +1,33 @@ +--- gcc/gcc/config/--- gcc/contrib/regression/objs-gcc.sh ++++ gcc/contrib/regression/objs-gcc.sh +@@ -105,6 +105,10 @@ + then + make all-gdb all-dejagnu all-ld || exit 1 + make install-gdb install-dejagnu install-ld || exit 1 ++elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-uclibc ] ++ then ++ make all-gdb all-dejagnu all-ld || exit 1 ++ make install-gdb install-dejagnu install-ld || exit 1 + elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then + make bootstrap || exit 1 + make install || exit 1 +--- gcc/libjava/classpath/ltconfig ++++ gcc/libjava/classpath/ltconfig +@@ -603,7 +603,7 @@ + + # Transform linux* to *-*-linux-gnu*, to support old configure scripts. + case $host_os in +-linux-gnu*) ;; ++linux-gnu*|linux-uclibc*) ;; + linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` + esac + +@@ -1251,7 +1251,7 @@ + ;; + + # This must be Linux ELF. +-linux-gnu*) ++linux*) + version_type=linux + need_lib_prefix=no + need_version=no diff --git a/toolchain/gcc/4.7.0/200-gcc-pr52734.patch b/toolchain/gcc/4.7.0/200-gcc-pr52734.patch new file mode 100644 index 0000000..a1ac601 --- /dev/null +++ b/toolchain/gcc/4.7.0/200-gcc-pr52734.patch @@ -0,0 +1,115 @@ +Index: gcc/tree-ssa-tail-merge.c +=================================================================== +--- a/gcc/tree-ssa-tail-merge.c (revision 185028) ++++ b/gcc/tree-ssa-tail-merge.c (working copy) +@@ -1123,18 +1123,31 @@ gimple_equal_p (same_succ same_succ, gim + } + } + +-/* Let GSI skip backwards over local defs. */ ++/* Let GSI skip backwards over local defs. Return the earliest vuse in VUSE. ++ Return true in VUSE_ESCAPED if the vuse influenced a SSA_OP_DEF of one of the ++ processed statements. */ + + static void +-gsi_advance_bw_nondebug_nonlocal (gimple_stmt_iterator *gsi) ++gsi_advance_bw_nondebug_nonlocal (gimple_stmt_iterator *gsi, tree *vuse, ++ bool *vuse_escaped) + { + gimple stmt; ++ tree lvuse; + + while (true) + { + if (gsi_end_p (*gsi)) + return; + stmt = gsi_stmt (*gsi); ++ ++ lvuse = gimple_vuse (stmt); ++ if (lvuse != NULL_TREE) ++ { ++ *vuse = lvuse; ++ if (!ZERO_SSA_OPERANDS (stmt, SSA_OP_DEF)) ++ *vuse_escaped = true; ++ } ++ + if (!(is_gimple_assign (stmt) && local_def (gimple_get_lhs (stmt)) + && !gimple_has_side_effects (stmt))) + return; +@@ -1150,9 +1163,11 @@ find_duplicate (same_succ same_succ, bas + { + gimple_stmt_iterator gsi1 = gsi_last_nondebug_bb (bb1); + gimple_stmt_iterator gsi2 = gsi_last_nondebug_bb (bb2); ++ tree vuse1 = NULL_TREE, vuse2 = NULL_TREE; ++ bool vuse_escaped = false; + +- gsi_advance_bw_nondebug_nonlocal (&gsi1); +- gsi_advance_bw_nondebug_nonlocal (&gsi2); ++ gsi_advance_bw_nondebug_nonlocal (&gsi1, &vuse1, &vuse_escaped); ++ gsi_advance_bw_nondebug_nonlocal (&gsi2, &vuse2, &vuse_escaped); + + while (!gsi_end_p (gsi1) && !gsi_end_p (gsi2)) + { +@@ -1161,13 +1176,20 @@ find_duplicate (same_succ same_succ, bas + + gsi_prev_nondebug (&gsi1); + gsi_prev_nondebug (&gsi2); +- gsi_advance_bw_nondebug_nonlocal (&gsi1); +- gsi_advance_bw_nondebug_nonlocal (&gsi2); ++ gsi_advance_bw_nondebug_nonlocal (&gsi1, &vuse1, &vuse_escaped); ++ gsi_advance_bw_nondebug_nonlocal (&gsi2, &vuse2, &vuse_escaped); + } + + if (!(gsi_end_p (gsi1) && gsi_end_p (gsi2))) + return; + ++ /* If the incoming vuses are not the same, and the vuse escaped into an ++ SSA_OP_DEF, then merging the 2 blocks will change the value of the def, ++ which potentially means the semantics of one of the blocks will be changed. ++ TODO: make this check more precise. */ ++ if (vuse_escaped && vuse1 != vuse2) ++ return; ++ + if (dump_file) + fprintf (dump_file, "find_duplicates: duplicate of \n", + bb1->index, bb2->index); +Index: gcc/testsuite/gcc.dg/pr52734.c +=================================================================== +--- a/dev/null (new file) ++++ b/gcc/testsuite/gcc.dg/pr52734.c (revision 0) +@@ -0,0 +1,35 @@ ++/* { dg-do run } */ ++/* { dg-options "-O2" } */ ++ ++int bbb = 0; ++ ++int __attribute__((noinline,noclone)) aaa(void) ++{ ++ ++bbb; ++ return 0; ++} ++ ++int __attribute__((noinline,noclone)) ccc(void) ++{ ++ int ddd; ++ /* bbb == 0 */ ++ if (aaa()) ++ return bbb; ++ ++ /* bbb == 1 */ ++ ddd = bbb; ++ /* bbb == ddd == 1 */ ++ if (aaa ()) ++ return 0; ++ /* bbb == 2, ddd == 1 */ ++ ++ return ddd; ++} ++ ++int main(void) ++{ ++ if (ccc() != 1) ++ __builtin_abort(); ++ return 0; ++} ++ diff --git a/toolchain/gcc/4.7.0/301-missing-execinfo_h.patch b/toolchain/gcc/4.7.0/301-missing-execinfo_h.patch new file mode 100644 index 0000000..0e2092f --- /dev/null +++ b/toolchain/gcc/4.7.0/301-missing-execinfo_h.patch @@ -0,0 +1,11 @@ +--- gcc-4.0.0/boehm-gc/include/gc.h-orig 2005-04-28 22:28:57.000000000 -0500 ++++ gcc-4.0.0/boehm-gc/include/gc.h 2005-04-28 22:30:38.000000000 -0500 +@@ -500,7 +500,7 @@ + #ifdef __linux__ + # include + # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \ +- && !defined(__ia64__) ++ && !defined(__ia64__) && !defined(__UCLIBC__) + # ifndef GC_HAVE_BUILTIN_BACKTRACE + # define GC_HAVE_BUILTIN_BACKTRACE + # endif diff --git a/toolchain/gcc/4.7.0/302-c99-snprintf.patch b/toolchain/gcc/4.7.0/302-c99-snprintf.patch new file mode 100644 index 0000000..ba51a0e --- /dev/null +++ b/toolchain/gcc/4.7.0/302-c99-snprintf.patch @@ -0,0 +1,13 @@ +Index: gcc-4.3.0/libstdc++-v3/include/c_global/cstdio +=================================================================== +--- gcc-4.3.0/libstdc++-v3/include/c_global/cstdio (revision 129202) ++++ gcc-4.3.0/libstdc++-v3/include/c_global/cstdio (working copy) +@@ -144,7 +144,7 @@ + + _GLIBCXX_END_NAMESPACE + +-#if _GLIBCXX_USE_C99 ++#if _GLIBCXX_USE_C99 || defined __UCLIBC__ + + #undef snprintf + #undef vfscanf diff --git a/toolchain/gcc/4.7.0/305-libmudflap-susv3-legacy.patch b/toolchain/gcc/4.7.0/305-libmudflap-susv3-legacy.patch new file mode 100644 index 0000000..374b1f8 --- /dev/null +++ b/toolchain/gcc/4.7.0/305-libmudflap-susv3-legacy.patch @@ -0,0 +1,49 @@ +Index: gcc-4.2/libmudflap/mf-hooks2.c +=================================================================== +--- gcc-4.2/libmudflap/mf-hooks2.c (revision 119834) ++++ gcc-4.2/libmudflap/mf-hooks2.c (working copy) +@@ -427,7 +427,7 @@ + { + TRACE ("%s\n", __PRETTY_FUNCTION__); + MF_VALIDATE_EXTENT(s, n, __MF_CHECK_WRITE, "bzero region"); +- bzero (s, n); ++ memset (s, 0, n); + } + + +@@ -437,7 +437,7 @@ + TRACE ("%s\n", __PRETTY_FUNCTION__); + MF_VALIDATE_EXTENT(src, n, __MF_CHECK_READ, "bcopy src"); + MF_VALIDATE_EXTENT(dest, n, __MF_CHECK_WRITE, "bcopy dest"); +- bcopy (src, dest, n); ++ memmove (dest, src, n); + } + + +@@ -447,7 +447,7 @@ + TRACE ("%s\n", __PRETTY_FUNCTION__); + MF_VALIDATE_EXTENT(s1, n, __MF_CHECK_READ, "bcmp 1st arg"); + MF_VALIDATE_EXTENT(s2, n, __MF_CHECK_READ, "bcmp 2nd arg"); +- return bcmp (s1, s2, n); ++ return n == 0 ? 0 : memcmp (s1, s2, n); + } + + +@@ -456,7 +456,7 @@ + size_t n = strlen (s); + TRACE ("%s\n", __PRETTY_FUNCTION__); + MF_VALIDATE_EXTENT(s, CLAMPADD(n, 1), __MF_CHECK_READ, "index region"); +- return index (s, c); ++ return strchr (s, c); + } + + +@@ -465,7 +465,7 @@ + size_t n = strlen (s); + TRACE ("%s\n", __PRETTY_FUNCTION__); + MF_VALIDATE_EXTENT(s, CLAMPADD(n, 1), __MF_CHECK_READ, "rindex region"); +- return rindex (s, c); ++ return strrchr (s, c); + } + + /* XXX: stpcpy, memccpy */ diff --git a/toolchain/gcc/4.7.0/810-arm-softfloat-libgcc.patch b/toolchain/gcc/4.7.0/810-arm-softfloat-libgcc.patch new file mode 100644 index 0000000..a3d7db0 --- /dev/null +++ b/toolchain/gcc/4.7.0/810-arm-softfloat-libgcc.patch @@ -0,0 +1,25 @@ +--- a/gcc/config/arm/linux-elf.h ++++ b/gcc/config/arm/linux-elf.h +@@ -57,7 +57,7 @@ + %{shared:-lc} \ + %{!shared:%{profile:-lc_p}%{!profile:-lc}}" + +-#define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc" ++#define LIBGCC_SPEC "-lgcc" + + #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" + +--- a/libgcc/config/arm/t-linux ++++ b/libgcc/config/arm/t-linux +@@ -1,6 +1,10 @@ + LIB1ASMSRC = arm/lib1funcs.S + LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx _clzsi2 _clzdi2 \ +- _arm_addsubdf3 _arm_addsubsf3 ++ _arm_addsubdf3 _arm_addsubsf3 \ ++ _arm_negdf2 _arm_muldivdf3 _arm_cmpdf2 _arm_unorddf2 \ ++ _arm_fixdfsi _arm_fixunsdfsi _arm_truncdfsf2 \ ++ _arm_negsf2 _arm_muldivsf3 _arm_cmpsf2 _arm_unordsf2 \ ++ _arm_fixsfsi _arm_fixunssfsi + + # Just for these, we omit the frame pointer since it makes such a big + # difference. diff --git a/toolchain/gcc/4.7.0/830-arm_unbreak_armv4t.patch b/toolchain/gcc/4.7.0/830-arm_unbreak_armv4t.patch new file mode 100644 index 0000000..37f8f2a --- /dev/null +++ b/toolchain/gcc/4.7.0/830-arm_unbreak_armv4t.patch @@ -0,0 +1,13 @@ +http://sourceware.org/ml/crossgcc/2008-05/msg00009.html + +--- a/gcc/config/arm/linux-eabi.h ++++ b/gcc/config/arm/linux-eabi.h +@@ -45,7 +45,7 @@ + The ARM10TDMI core is the default for armv5t, so set + SUBTARGET_CPU_DEFAULT to achieve this. */ + #undef SUBTARGET_CPU_DEFAULT +-#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi ++#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9tdmi + + /* TARGET_BIG_ENDIAN_DEFAULT is set in + config.gcc for big endian configurations. */ diff --git a/toolchain/gcc/4.7.0/powerpc-link-with-math-lib.patch.conditional b/toolchain/gcc/4.7.0/powerpc-link-with-math-lib.patch.conditional new file mode 100644 index 0000000..7e75e87 --- /dev/null +++ b/toolchain/gcc/4.7.0/powerpc-link-with-math-lib.patch.conditional @@ -0,0 +1,125 @@ +http://gcc.gnu.org/ml/gcc-patches/2008-10/msg00269.html + +On glibc the libc.so carries a copy of the math function copysignl() but +on uClibc math functions like copysignl() live in libm. Since libgcc_s +contains unresolved symbols, any attempt to link against libgcc_s +without explicitely specifying -lm fails, resulting in a broken +bootstrap of the compiler. + +Forward port to gcc 4.5.1 by Gustavo Zacarias + +diff -Nura gcc-4.5.1.orig/gcc/config/t-slibgcc-elf-ver gcc-4.5.1/gcc/config/t-slibgcc-elf-ver +--- gcc-4.5.1.orig/gcc/config/t-slibgcc-elf-ver 2010-11-03 14:35:08.644904042 -0300 ++++ gcc-4.5.1/gcc/config/t-slibgcc-elf-ver 2010-11-03 14:35:56.332904024 -0300 +@@ -27,7 +27,7 @@ + SHLIB_OBJS = @shlib_objs@ + SHLIB_DIR = @multilib_dir@ + SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@ +-SHLIB_LC = -lc ++SHLIB_LC = @libgcc_libm@ -lc + SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK) + SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \ + $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK) +diff -Nura gcc-4.5.1.orig/libgcc/Makefile.in gcc-4.5.1/libgcc/Makefile.in +--- gcc-4.5.1.orig/libgcc/Makefile.in 2010-11-03 14:32:44.272904042 -0300 ++++ gcc-4.5.1/libgcc/Makefile.in 2010-11-03 14:37:03.893904042 -0300 +@@ -39,6 +39,7 @@ + decimal_float = @decimal_float@ + enable_decimal_float = @enable_decimal_float@ + fixed_point = @fixed_point@ ++LIBGCC_LIBM = @LIBGCC_LIBM@ + + host_noncanonical = @host_noncanonical@ + +@@ -798,9 +799,10 @@ + @multilib_dir@,$(MULTIDIR),$(subst \ + @shlib_objs@,$(objects),$(subst \ + @shlib_base_name@,libgcc_s,$(subst \ ++ @libgcc_libm@,$(LIBGCC_LIBM),$(subst \ + @shlib_map_file@,$(mapfile),$(subst \ + @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \ +- @shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK)))))))) ++ @shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK))))))))) + + libunwind$(SHLIB_EXT): $(libunwind-s-objects) $(extra-parts) + # @multilib_flags@ is still needed because this may use +diff -Nura gcc-4.5.1.orig/libgcc/configure gcc-4.5.1/libgcc/configure +--- gcc-4.5.1.orig/libgcc/configure 2010-11-03 14:32:44.283904042 -0300 ++++ gcc-4.5.1/libgcc/configure 2010-11-03 14:39:48.685904042 -0300 +@@ -557,6 +557,7 @@ + extra_parts + tmake_file + set_use_emutls ++LIBGCC_LIBM + set_have_cc_tls + vis_hide + fixed_point +@@ -3847,6 +3848,37 @@ + set_use_emutls="-DUSE_EMUTLS" + fi + ++# On powerpc libgcc_s references copysignl which is a libm function but ++# glibc apparently also provides it via libc as opposed to uClibc where ++# it lives in libm. ++echo "$as_me:$LINENO: checking for library containing copysignl" >&5 ++echo $ECHO_N "checking for library containing copysignl... $ECHO_C" >&6 ++if test "${libgcc_cv_copysignl_lib+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ++ echo '#include ' > conftest.c ++ echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c ++ libgcc_cv_copysignl_lib="-lc" ++ if { ac_try='${CC-cc} -S conftest.c -o conftest.s 1>&5' ++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 ++ (eval $ac_try) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; } ++ then ++ libgcc_cv_copysignl_lib="-lm" ++ fi ++ rm -f conftest.* ++ ++fi ++echo "$as_me:$LINENO: result: $libgcc_cv_copysignl_lib" >&5 ++echo "${ECHO_T}$libgcc_cv_copysignl_lib" >&6 ++ ++case /${libgcc_cv_copysignl_lib}/ in ++ /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;; ++ *) LIBGCC_LIBM= ;; ++esac + + # Conditionalize the makefile for this target machine. + tmake_file_= +diff -Nura gcc-4.5.1.orig/libgcc/configure.ac gcc-4.5.1/libgcc/configure.ac +--- gcc-4.5.1.orig/libgcc/configure.ac 2010-11-03 14:32:44.735904042 -0300 ++++ gcc-4.5.1/libgcc/configure.ac 2010-11-03 14:42:11.278904045 -0300 +@@ -238,6 +238,27 @@ + fi + AC_SUBST(set_have_cc_tls) + ++# On powerpc libgcc_s references copysignl which is a libm function but ++# glibc apparently also provides it via libc as opposed to uClibc where ++# it lives in libm. ++AC_CACHE_CHECK ++ libgcc_cv_copysignl_lib, ++ echo '#include ' > conftest.c ++ echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c ++ libgcc_cv_copysignl_lib="-lc" ++ if AC_TRY_COMMAND(${CC-cc} -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD) ++ then ++ libgcc_cv_copysignl_lib="-lm" ++ fi ++ rm -f conftest.* ++ ]) ++ ++case /${libgcc_cv_copysignl_lib}/ in ++ /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;; ++ *) LIBGCC_LIBM= ;; ++esac ++AC_SUBST(LIBGCC_LIBM) ++ + # See if we have emulated thread-local storage. + GCC_CHECK_EMUTLS + set_use_emutls= diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in index a4ca054..4bff885 100644 --- a/toolchain/gcc/Config.in +++ b/toolchain/gcc/Config.in @@ -30,6 +30,10 @@ choice depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 bool "gcc 4.6.x" + config BR2_GCC_VERSION_4_7_X + depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 + bool "gcc 4.7.x" + config BR2_GCC_VERSION_SNAP depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 bool "gcc snapshot" @@ -60,6 +64,7 @@ config BR2_GCC_VERSION default "4.4.7" if BR2_GCC_VERSION_4_4_X default "4.5.3" if BR2_GCC_VERSION_4_5_X default "4.6.3" if BR2_GCC_VERSION_4_6_X + default "4.7.0" if BR2_GCC_VERSION_4_7_X default $BR2_GCC_SNAP_DATE if BR2_GCC_VERSION_SNAP config BR2_EXTRA_GCC_CONFIG_OPTIONS diff --git a/toolchain/gcc/Config.in.2 b/toolchain/gcc/Config.in.2 index c76d125..d060a80 100644 --- a/toolchain/gcc/Config.in.2 +++ b/toolchain/gcc/Config.in.2 @@ -3,7 +3,7 @@ config BR2_PACKAGE_GCC_TARGET depends on BR2_HAVE_DEVFILES && BR2_TOOLCHAIN_BUILDROOT select BR2_PACKAGE_BINUTILS select BR2_PACKAGE_BINUTILS_TARGET - select BR2_PACKAGE_MPC if (BR2_GCC_VERSION_4_5_X || BR2_GCC_VERSION_4_6_X || BR2_GCC_VERSION_SNAP) + select BR2_PACKAGE_MPC if (BR2_GCC_VERSION_4_5_X || BR2_GCC_VERSION_4_6_X || BR2_GCC_VERSION_4_7_X || BR2_GCC_VERSION_SNAP) select BR2_PACKAGE_MPFR select BR2_PACKAGE_GMP help diff --git a/toolchain/gcc/gcc-uclibc-4.x.mk b/toolchain/gcc/gcc-uclibc-4.x.mk index 2c8b11f..ed2216f 100644 --- a/toolchain/gcc/gcc-uclibc-4.x.mk +++ b/toolchain/gcc/gcc-uclibc-4.x.mk @@ -120,6 +120,16 @@ endif GCC_HOST_PREREQ += host-mpc endif +# GCC 4.7.x prerequisites +ifeq ($(findstring x4.7.,x$(GCC_VERSION)),x4.7.) +GCC_WITH_HOST_MPC = --with-mpc=$(HOST_DIR)/usr +GCC_TARGET_PREREQ += mpc +ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y) +HOST_SOURCE += host-mpc-source +endif +GCC_HOST_PREREQ += host-mpc +endif + # GCC snapshot prerequisites # Since we don't know and it can be quite new just ask for everything known ifneq ($(GCC_SNAP_DATE),)