summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/gcc/gcc-4.7
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.7')
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/0001-Makefile.in-vis_hide-gen-hide-list-Do-not-make-defin.patch93
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/0001-crtstuff.c-USE_PT_GNU_EH_FRAME-Define-for-systems-us.patch49
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/100-uclibc-conf.patch39
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/200-uclibc-locale.patch2810
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/203-uclibc-locale-no__x.patch235
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/204-uclibc-locale-wchar_fix.patch54
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/205-uclibc-locale-update.patch521
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/301-missing-execinfo_h.patch15
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/302-c99-snprintf.patch15
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/303-c99-complex-ugly-hack.patch16
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/304-index_macro.patch30
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/305-libmudflap-susv3-legacy.patch51
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/306-libstdc++-namespace.patch40
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch63
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/740-sh-pr24836.patch31
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/800-arm-bigendian.patch36
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/COLLECT_GCC_OPTIONS.patch25
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/GLIBC_DYNAMIC_LINKER.patch165
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/add-install-ptest-to-Makefile.patch162
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/arm-hard-float-loader.patch48
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/avoid-oob-array-access.patch45
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/cpp-honor-sysroot.patch40
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/define_insn_reservation.patch118
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/disable-texinfo-5.patch107
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/disable_relax_pic_calls_flag.patch48
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/disablesdt.patch32
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/fix-g++-sysroot.patch428
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/fortran-cross-compile-hack.patch32
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch33
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch116
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/gcc-argument-list-too-long.patch33
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/gcc-armv4-pass-fix-v4bx-to-ld.patch31
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/gcc-poison-dir-extend.patch27
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/gcc-poison-system-directories.patch223
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/gcc-uclibc-locale-ctype_touplow_t.patch72
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/libgcc-sjlj-check.patch61
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/libtool.patch29
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/mips64-default-n64.patch19
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/optional_libstdc.patch86
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/ppc_no_crtsavres.patch72
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/ppc_with_cpu.patch752
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/ppce5500-e6500-support.patch713
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/pr32219.patch72
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/rs6000-tables.patch135
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/run-ptest3
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/use-defaults.h-and-t-oe-in-B.patch77
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/use-ml-conf-files-from-B.patch87
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/wcast-qual-PR55383.patch43
48 files changed, 8032 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/0001-Makefile.in-vis_hide-gen-hide-list-Do-not-make-defin.patch b/meta/recipes-devtools/gcc/gcc-4.7/0001-Makefile.in-vis_hide-gen-hide-list-Do-not-make-defin.patch
new file mode 100644
index 0000000000..b6f8f94378
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/0001-Makefile.in-vis_hide-gen-hide-list-Do-not-make-defin.patch
@@ -0,0 +1,93 @@
1From b78f422ee83d279a83c62491b252cfec5b94e92a Mon Sep 17 00:00:00 2001
2From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
3Date: Wed, 22 Aug 2012 08:36:23 +0000
4Subject: [PATCH] * Makefile.in (vis_hide, gen-hide-list): Do not make
5 definitions depend on --enable-shared.
6 ($(lib1asmfuncs-o)): Use %.vis files independent of
7 --enable-shared. * static-object.mk
8 ($(base)$(objext), $(base).vis)
9 ($(base)_s$(objext)): Use same rules for visibility
10 handling as in shared-object.mk.
11
12git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190588 138bc75d-0d04-0410-961f-82ee72b054a4
13---
14 libgcc/ChangeLog | 10 ++++++++++
15 libgcc/Makefile.in | 16 ++++------------
16 libgcc/static-object.mk | 10 ++++++++--
17 3 files changed, 22 insertions(+), 14 deletions(-)
18
19Upstream-Status: Backport
20
21-Khem
2205-Sep-2012
23
24Index: gcc-4_7-branch/libgcc/Makefile.in
25===================================================================
26--- gcc-4_7-branch.orig/libgcc/Makefile.in 2012-08-21 22:33:20.000000000 -0700
27+++ gcc-4_7-branch/libgcc/Makefile.in 2012-09-05 17:30:28.572998745 -0700
28@@ -362,6 +362,7 @@
29 ifneq ($(LIBUNWIND),)
30 install-libunwind = install-libunwind
31 endif
32+endif
33
34 # For -fvisibility=hidden. We need both a -fvisibility=hidden on
35 # the command line, and a #define to prevent libgcc2.h etc from
36@@ -385,11 +386,8 @@
37 gen-hide-list = echo > $@
38 endif
39
40-else
41-# Not enable_shared.
42+ifneq ($(enable_shared),yes)
43 iterator = $(srcdir)/empty.mk $(patsubst %,$(srcdir)/static-object.mk,$(iter-items))
44-vis_hide =
45-gen-hide-list = echo > \$@
46 endif
47
48 LIB2ADD += enable-execute-stack.c
49@@ -438,7 +436,6 @@
50 $(LIB2_DIVMOD_FUNCS))
51
52 # Build "libgcc1" (assembly) components.
53-ifeq ($(enable_shared),yes)
54
55 lib1asmfuncs-o = $(patsubst %,%$(objext),$(LIB1ASMFUNCS))
56 $(lib1asmfuncs-o): %$(objext): $(srcdir)/config/$(LIB1ASMSRC) %.vis
57@@ -450,14 +447,9 @@
58 lib1asmfuncs-s-o = $(patsubst %,%_s$(objext),$(LIB1ASMFUNCS))
59 $(lib1asmfuncs-s-o): %_s$(objext): $(srcdir)/config/$(LIB1ASMSRC)
60 $(gcc_s_compile) -DL$* -xassembler-with-cpp -c $<
61-libgcc-s-objects += $(lib1asmfuncs-s-o)
62-
63-else
64+ifeq ($(enable_shared),yes)
65
66-lib1asmfuncs-o = $(patsubst %,%$(objext),$(LIB1ASMFUNCS))
67-$(lib1asmfuncs-o): %$(objext): $(srcdir)/config/$(LIB1ASMSRC)
68- $(gcc_compile) -DL$* -xassembler-with-cpp -c $<
69-libgcc-objects += $(lib1asmfuncs-o)
70+libgcc-s-objects += $(lib1asmfuncs-s-o)
71
72 endif
73
74Index: gcc-4_7-branch/libgcc/static-object.mk
75===================================================================
76--- gcc-4_7-branch.orig/libgcc/static-object.mk 2012-08-21 22:33:20.000000000 -0700
77+++ gcc-4_7-branch/libgcc/static-object.mk 2012-09-05 17:30:28.572998745 -0700
78@@ -24,7 +24,13 @@
79 endif
80 endif
81
82-$(base)$(objext): $o
83- $(gcc_compile) -c -xassembler-with-cpp $<
84+$(base)$(objext): $o $(base).vis
85+ $(gcc_compile) -c -xassembler-with-cpp -include $*.vis $<
86+
87+$(base).vis: $(base)_s$(objext)
88+ $(gen-hide-list)
89+
90+$(base)_s$(objext): $o
91+ $(gcc_s_compile) -c -xassembler-with-cpp $<
92
93 endif
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/0001-crtstuff.c-USE_PT_GNU_EH_FRAME-Define-for-systems-us.patch b/meta/recipes-devtools/gcc/gcc-4.7/0001-crtstuff.c-USE_PT_GNU_EH_FRAME-Define-for-systems-us.patch
new file mode 100644
index 0000000000..15034f7da2
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/0001-crtstuff.c-USE_PT_GNU_EH_FRAME-Define-for-systems-us.patch
@@ -0,0 +1,49 @@
1From 935475158f45b9c55a54647543c0402b4b3043ae Mon Sep 17 00:00:00 2001
2From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
3Date: Sun, 19 Aug 2012 15:11:40 +0000
4Subject: [PATCH] * crtstuff.c (USE_PT_GNU_EH_FRAME): Define for
5 systems using glibc even if inhibit_libc.
6
7git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190517 138bc75d-0d04-0410-961f-82ee72b054a4
8---
9 libgcc/ChangeLog | 5 +++++
10 libgcc/crtstuff.c | 16 +++++++++++++++-
11 2 files changed, 20 insertions(+), 1 deletion(-)
12
13Upstream-Status: Backport
14
15-Khem 05-Sep-2012
16Index: gcc-4_7-branch/libgcc/crtstuff.c
17===================================================================
18--- gcc-4_7-branch.orig/libgcc/crtstuff.c 2012-08-21 22:33:20.000000000 -0700
19+++ gcc-4_7-branch/libgcc/crtstuff.c 2012-09-05 17:28:49.248994968 -0700
20@@ -1,7 +1,7 @@
21 /* Specialized bits of code needed to support construction and
22 destruction of file-scope objects in C++ code.
23 Copyright (C) 1991, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
24- 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
25+ 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012
26 Free Software Foundation, Inc.
27 Contributed by Ron Guilmette (rfg@monkeys.com).
28
29@@ -113,6 +113,20 @@
30 # define USE_PT_GNU_EH_FRAME
31 # endif
32 #endif
33+
34+#if defined(OBJECT_FORMAT_ELF) \
35+ && !defined(OBJECT_FORMAT_FLAT) \
36+ && defined(HAVE_LD_EH_FRAME_HDR) \
37+ && !defined(CRTSTUFFT_O) \
38+ && defined(inhibit_libc) \
39+ && (defined(__GLIBC__) || defined(__gnu_linux__) || defined(__GNU__))
40+/* On systems using glibc, an inhibit_libc build of libgcc is only
41+ part of a bootstrap process. Build the same crt*.o as would be
42+ built with headers present, so that it is not necessary to build
43+ glibc more than once for the bootstrap to converge. */
44+# define USE_PT_GNU_EH_FRAME
45+#endif
46+
47 #if defined(EH_FRAME_SECTION_NAME) && !defined(USE_PT_GNU_EH_FRAME)
48 # define USE_EH_FRAME_REGISTRY
49 #endif
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/100-uclibc-conf.patch b/meta/recipes-devtools/gcc/gcc-4.7/100-uclibc-conf.patch
new file mode 100644
index 0000000000..b2981e0791
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/100-uclibc-conf.patch
@@ -0,0 +1,39 @@
1Upstream-Status: Pending
2
3Index: gcc-4.6.0/contrib/regression/objs-gcc.sh
4===================================================================
5--- gcc-4.6.0.orig/contrib/regression/objs-gcc.sh
6+++ gcc-4.6.0/contrib/regression/objs-gcc.sh
7@@ -106,6 +106,10 @@ if [ $H_REAL_TARGET = $H_REAL_HOST -a $H
8 then
9 make all-gdb all-dejagnu all-ld || exit 1
10 make install-gdb install-dejagnu install-ld || exit 1
11+elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-uclibc ]
12+ then
13+ make all-gdb all-dejagnu all-ld || exit 1
14+ make install-gdb install-dejagnu install-ld || exit 1
15 elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then
16 make bootstrap || exit 1
17 make install || exit 1
18Index: gcc-4.6.0/libjava/classpath/ltconfig
19===================================================================
20--- gcc-4.6.0.orig/libjava/classpath/ltconfig
21+++ gcc-4.6.0/libjava/classpath/ltconfig
22@@ -603,7 +603,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-
23
24 # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
25 case $host_os in
26-linux-gnu*) ;;
27+linux-gnu*|linux-uclibc*) ;;
28 linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
29 esac
30
31@@ -1247,7 +1247,7 @@ linux-gnuoldld* | linux-gnuaout* | linux
32 ;;
33
34 # This must be Linux ELF.
35-linux-gnu*)
36+linux*)
37 version_type=linux
38 need_lib_prefix=no
39 need_version=no
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/200-uclibc-locale.patch b/meta/recipes-devtools/gcc/gcc-4.7/200-uclibc-locale.patch
new file mode 100644
index 0000000000..df22c54406
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/200-uclibc-locale.patch
@@ -0,0 +1,2810 @@
1Upstream-Status: Pending
2
3Index: gcc-4_7-branch/libstdc++-v3/acinclude.m4
4===================================================================
5--- gcc-4_7-branch.orig/libstdc++-v3/acinclude.m4 2012-04-10 10:19:50.395337128 -0700
6+++ gcc-4_7-branch/libstdc++-v3/acinclude.m4 2012-04-10 10:30:37.327368356 -0700
7@@ -1924,6 +1924,9 @@
8 # Default to "generic".
9 if test $enable_clocale_flag = auto; then
10 case ${target_os} in
11+ *-uclibc*)
12+ enable_clocale_flag=uclibc
13+ ;;
14 linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
15 enable_clocale_flag=gnu
16 ;;
17@@ -2085,6 +2088,40 @@
18 CTIME_CC=config/locale/generic/time_members.cc
19 CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
20 ;;
21+ uclibc)
22+ AC_MSG_RESULT(uclibc)
23+
24+ # Declare intention to use gettext, and add support for specific
25+ # languages.
26+ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
27+ ALL_LINGUAS="de fr"
28+
29+ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
30+ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
31+ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
32+ USE_NLS=yes
33+ fi
34+ # Export the build objects.
35+ for ling in $ALL_LINGUAS; do \
36+ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
37+ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
38+ done
39+ AC_SUBST(glibcxx_MOFILES)
40+ AC_SUBST(glibcxx_POFILES)
41+
42+ CLOCALE_H=config/locale/uclibc/c_locale.h
43+ CLOCALE_CC=config/locale/uclibc/c_locale.cc
44+ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
45+ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
46+ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
47+ CMESSAGES_H=config/locale/uclibc/messages_members.h
48+ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
49+ CMONEY_CC=config/locale/uclibc/monetary_members.cc
50+ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
51+ CTIME_H=config/locale/uclibc/time_members.h
52+ CTIME_CC=config/locale/uclibc/time_members.cc
53+ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
54+ ;;
55 esac
56
57 # This is where the testsuite looks for locale catalogs, using the
58Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
59===================================================================
60--- /dev/null 1970-01-01 00:00:00.000000000 +0000
61+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2012-04-10 10:30:37.327368356 -0700
62@@ -0,0 +1,63 @@
63+// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
64+
65+// Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
66+//
67+// This file is part of the GNU ISO C++ Library. This library is free
68+// software; you can redistribute it and/or modify it under the
69+// terms of the GNU General Public License as published by the
70+// Free Software Foundation; either version 2, or (at your option)
71+// any later version.
72+
73+// This library is distributed in the hope that it will be useful,
74+// but WITHOUT ANY WARRANTY; without even the implied warranty of
75+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
76+// GNU General Public License for more details.
77+
78+// You should have received a copy of the GNU General Public License along
79+// with this library; see the file COPYING. If not, write to the Free
80+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
81+// USA.
82+
83+// As a special exception, you may use this file as part of a free software
84+// library without restriction. Specifically, if other files instantiate
85+// templates or use macros or inline functions from this file, or you compile
86+// this file and link it with other files to produce an executable, this
87+// file does not by itself cause the resulting executable to be covered by
88+// the GNU General Public License. This exception does not however
89+// invalidate any other reasons why the executable file might be covered by
90+// the GNU General Public License.
91+
92+// Written by Jakub Jelinek <jakub@redhat.com>
93+
94+#include <bits/c++config.h>
95+#include <clocale>
96+
97+#ifdef __UCLIBC_MJN3_ONLY__
98+#warning clean this up
99+#endif
100+
101+#ifdef __UCLIBC_HAS_XLOCALE__
102+
103+extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
104+extern "C" __typeof(strcoll_l) __strcoll_l;
105+extern "C" __typeof(strftime_l) __strftime_l;
106+extern "C" __typeof(strtod_l) __strtod_l;
107+extern "C" __typeof(strtof_l) __strtof_l;
108+extern "C" __typeof(strtold_l) __strtold_l;
109+extern "C" __typeof(strxfrm_l) __strxfrm_l;
110+extern "C" __typeof(newlocale) __newlocale;
111+extern "C" __typeof(freelocale) __freelocale;
112+extern "C" __typeof(duplocale) __duplocale;
113+extern "C" __typeof(uselocale) __uselocale;
114+
115+#ifdef _GLIBCXX_USE_WCHAR_T
116+extern "C" __typeof(iswctype_l) __iswctype_l;
117+extern "C" __typeof(towlower_l) __towlower_l;
118+extern "C" __typeof(towupper_l) __towupper_l;
119+extern "C" __typeof(wcscoll_l) __wcscoll_l;
120+extern "C" __typeof(wcsftime_l) __wcsftime_l;
121+extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
122+extern "C" __typeof(wctype_l) __wctype_l;
123+#endif
124+
125+#endif // GLIBC 2.3 and later
126Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/c_locale.cc
127===================================================================
128--- /dev/null 1970-01-01 00:00:00.000000000 +0000
129+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/c_locale.cc 2012-04-10 10:30:37.327368356 -0700
130@@ -0,0 +1,160 @@
131+// Wrapper for underlying C-language localization -*- C++ -*-
132+
133+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
134+//
135+// This file is part of the GNU ISO C++ Library. This library is free
136+// software; you can redistribute it and/or modify it under the
137+// terms of the GNU General Public License as published by the
138+// Free Software Foundation; either version 2, or (at your option)
139+// any later version.
140+
141+// This library is distributed in the hope that it will be useful,
142+// but WITHOUT ANY WARRANTY; without even the implied warranty of
143+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
144+// GNU General Public License for more details.
145+
146+// You should have received a copy of the GNU General Public License along
147+// with this library; see the file COPYING. If not, write to the Free
148+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
149+// USA.
150+
151+// As a special exception, you may use this file as part of a free software
152+// library without restriction. Specifically, if other files instantiate
153+// templates or use macros or inline functions from this file, or you compile
154+// this file and link it with other files to produce an executable, this
155+// file does not by itself cause the resulting executable to be covered by
156+// the GNU General Public License. This exception does not however
157+// invalidate any other reasons why the executable file might be covered by
158+// the GNU General Public License.
159+
160+//
161+// ISO C++ 14882: 22.8 Standard locale categories.
162+//
163+
164+// Written by Benjamin Kosnik <bkoz@redhat.com>
165+
166+#include <cerrno> // For errno
167+#include <locale>
168+#include <stdexcept>
169+#include <langinfo.h>
170+#include <bits/c++locale_internal.h>
171+
172+#ifndef __UCLIBC_HAS_XLOCALE__
173+#define __strtol_l(S, E, B, L) strtol((S), (E), (B))
174+#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B))
175+#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B))
176+#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B))
177+#define __strtof_l(S, E, L) strtof((S), (E))
178+#define __strtod_l(S, E, L) strtod((S), (E))
179+#define __strtold_l(S, E, L) strtold((S), (E))
180+#warning should dummy __newlocale check for C|POSIX ?
181+#define __newlocale(a, b, c) NULL
182+#define __freelocale(a) ((void)0)
183+#define __duplocale(a) __c_locale()
184+#endif
185+
186+namespace std
187+{
188+ template<>
189+ void
190+ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
191+ const __c_locale& __cloc)
192+ {
193+ if (!(__err & ios_base::failbit))
194+ {
195+ char* __sanity;
196+ errno = 0;
197+ float __f = __strtof_l(__s, &__sanity, __cloc);
198+ if (__sanity != __s && errno != ERANGE)
199+ __v = __f;
200+ else
201+ __err |= ios_base::failbit;
202+ }
203+ }
204+
205+ template<>
206+ void
207+ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
208+ const __c_locale& __cloc)
209+ {
210+ if (!(__err & ios_base::failbit))
211+ {
212+ char* __sanity;
213+ errno = 0;
214+ double __d = __strtod_l(__s, &__sanity, __cloc);
215+ if (__sanity != __s && errno != ERANGE)
216+ __v = __d;
217+ else
218+ __err |= ios_base::failbit;
219+ }
220+ }
221+
222+ template<>
223+ void
224+ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
225+ const __c_locale& __cloc)
226+ {
227+ if (!(__err & ios_base::failbit))
228+ {
229+ char* __sanity;
230+ errno = 0;
231+ long double __ld = __strtold_l(__s, &__sanity, __cloc);
232+ if (__sanity != __s && errno != ERANGE)
233+ __v = __ld;
234+ else
235+ __err |= ios_base::failbit;
236+ }
237+ }
238+
239+ void
240+ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
241+ __c_locale __old)
242+ {
243+ __cloc = __newlocale(1 << LC_ALL, __s, __old);
244+#ifdef __UCLIBC_HAS_XLOCALE__
245+ if (!__cloc)
246+ {
247+ // This named locale is not supported by the underlying OS.
248+ __throw_runtime_error(__N("locale::facet::_S_create_c_locale "
249+ "name not valid"));
250+ }
251+#endif
252+ }
253+
254+ void
255+ locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
256+ {
257+ if (_S_get_c_locale() != __cloc)
258+ __freelocale(__cloc);
259+ }
260+
261+ __c_locale
262+ locale::facet::_S_clone_c_locale(__c_locale& __cloc)
263+ { return __duplocale(__cloc); }
264+} // namespace std
265+
266+namespace __gnu_cxx
267+{
268+ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
269+ {
270+ "LC_CTYPE",
271+ "LC_NUMERIC",
272+ "LC_TIME",
273+ "LC_COLLATE",
274+ "LC_MONETARY",
275+ "LC_MESSAGES",
276+#if _GLIBCXX_NUM_CATEGORIES != 0
277+ "LC_PAPER",
278+ "LC_NAME",
279+ "LC_ADDRESS",
280+ "LC_TELEPHONE",
281+ "LC_MEASUREMENT",
282+ "LC_IDENTIFICATION"
283+#endif
284+ };
285+}
286+
287+namespace std
288+{
289+ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
290+} // namespace std
291Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/c_locale.h
292===================================================================
293--- /dev/null 1970-01-01 00:00:00.000000000 +0000
294+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/c_locale.h 2012-04-10 10:30:37.327368356 -0700
295@@ -0,0 +1,117 @@
296+// Wrapper for underlying C-language localization -*- C++ -*-
297+
298+// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
299+//
300+// This file is part of the GNU ISO C++ Library. This library is free
301+// software; you can redistribute it and/or modify it under the
302+// terms of the GNU General Public License as published by the
303+// Free Software Foundation; either version 2, or (at your option)
304+// any later version.
305+
306+// This library is distributed in the hope that it will be useful,
307+// but WITHOUT ANY WARRANTY; without even the implied warranty of
308+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
309+// GNU General Public License for more details.
310+
311+// You should have received a copy of the GNU General Public License along
312+// with this library; see the file COPYING. If not, write to the Free
313+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
314+// USA.
315+
316+// As a special exception, you may use this file as part of a free software
317+// library without restriction. Specifically, if other files instantiate
318+// templates or use macros or inline functions from this file, or you compile
319+// this file and link it with other files to produce an executable, this
320+// file does not by itself cause the resulting executable to be covered by
321+// the GNU General Public License. This exception does not however
322+// invalidate any other reasons why the executable file might be covered by
323+// the GNU General Public License.
324+
325+//
326+// ISO C++ 14882: 22.8 Standard locale categories.
327+//
328+
329+// Written by Benjamin Kosnik <bkoz@redhat.com>
330+
331+#ifndef _C_LOCALE_H
332+#define _C_LOCALE_H 1
333+
334+#pragma GCC system_header
335+
336+#include <cstring> // get std::strlen
337+#include <cstdio> // get std::snprintf or std::sprintf
338+#include <clocale>
339+#include <langinfo.h> // For codecvt
340+#ifdef __UCLIBC_MJN3_ONLY__
341+#warning fix this
342+#endif
343+#ifdef __UCLIBC_HAS_LOCALE__
344+#include <iconv.h> // For codecvt using iconv, iconv_t
345+#endif
346+#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
347+#include <libintl.h> // For messages
348+#endif
349+
350+#ifdef __UCLIBC_MJN3_ONLY__
351+#warning what is _GLIBCXX_C_LOCALE_GNU for
352+#endif
353+#define _GLIBCXX_C_LOCALE_GNU 1
354+
355+#ifdef __UCLIBC_MJN3_ONLY__
356+#warning fix categories
357+#endif
358+// #define _GLIBCXX_NUM_CATEGORIES 6
359+#define _GLIBCXX_NUM_CATEGORIES 0
360+
361+#ifdef __UCLIBC_HAS_XLOCALE__
362+namespace __gnu_cxx
363+{
364+ extern "C" __typeof(uselocale) __uselocale;
365+}
366+#endif
367+
368+namespace std
369+{
370+#ifdef __UCLIBC_HAS_XLOCALE__
371+ typedef __locale_t __c_locale;
372+#else
373+ typedef int* __c_locale;
374+#endif
375+
376+ // Convert numeric value of type _Tv to string and return length of
377+ // string. If snprintf is available use it, otherwise fall back to
378+ // the unsafe sprintf which, in general, can be dangerous and should
379+ // be avoided.
380+ template<typename _Tv>
381+ int
382+ __convert_from_v(char* __out,
383+ const int __size __attribute__ ((__unused__)),
384+ const char* __fmt,
385+#ifdef __UCLIBC_HAS_XCLOCALE__
386+ _Tv __v, const __c_locale& __cloc, int __prec)
387+ {
388+ __c_locale __old = __gnu_cxx::__uselocale(__cloc);
389+#else
390+ _Tv __v, const __c_locale&, int __prec)
391+ {
392+# ifdef __UCLIBC_HAS_LOCALE__
393+ char* __old = std::setlocale(LC_ALL, NULL);
394+ char* __sav = new char[std::strlen(__old) + 1];
395+ std::strcpy(__sav, __old);
396+ std::setlocale(LC_ALL, "C");
397+# endif
398+#endif
399+
400+ const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
401+
402+#ifdef __UCLIBC_HAS_XCLOCALE__
403+ __gnu_cxx::__uselocale(__old);
404+#elif defined __UCLIBC_HAS_LOCALE__
405+ std::setlocale(LC_ALL, __sav);
406+ delete [] __sav;
407+#endif
408+ return __ret;
409+ }
410+}
411+
412+#endif
413Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
414===================================================================
415--- /dev/null 1970-01-01 00:00:00.000000000 +0000
416+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 2012-04-10 10:30:37.327368356 -0700
417@@ -0,0 +1,308 @@
418+// std::codecvt implementation details, GNU version -*- C++ -*-
419+
420+// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
421+//
422+// This file is part of the GNU ISO C++ Library. This library is free
423+// software; you can redistribute it and/or modify it under the
424+// terms of the GNU General Public License as published by the
425+// Free Software Foundation; either version 2, or (at your option)
426+// any later version.
427+
428+// This library is distributed in the hope that it will be useful,
429+// but WITHOUT ANY WARRANTY; without even the implied warranty of
430+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
431+// GNU General Public License for more details.
432+
433+// You should have received a copy of the GNU General Public License along
434+// with this library; see the file COPYING. If not, write to the Free
435+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
436+// USA.
437+
438+// As a special exception, you may use this file as part of a free software
439+// library without restriction. Specifically, if other files instantiate
440+// templates or use macros or inline functions from this file, or you compile
441+// this file and link it with other files to produce an executable, this
442+// file does not by itself cause the resulting executable to be covered by
443+// the GNU General Public License. This exception does not however
444+// invalidate any other reasons why the executable file might be covered by
445+// the GNU General Public License.
446+
447+//
448+// ISO C++ 14882: 22.2.1.5 - Template class codecvt
449+//
450+
451+// Written by Benjamin Kosnik <bkoz@redhat.com>
452+
453+#include <locale>
454+#include <cstdlib> // For MB_CUR_MAX
455+#include <climits> // For MB_LEN_MAX
456+#include <bits/c++locale_internal.h>
457+
458+namespace std
459+{
460+ // Specializations.
461+#ifdef _GLIBCXX_USE_WCHAR_T
462+ codecvt_base::result
463+ codecvt<wchar_t, char, mbstate_t>::
464+ do_out(state_type& __state, const intern_type* __from,
465+ const intern_type* __from_end, const intern_type*& __from_next,
466+ extern_type* __to, extern_type* __to_end,
467+ extern_type*& __to_next) const
468+ {
469+ result __ret = ok;
470+ state_type __tmp_state(__state);
471+
472+#ifdef __UCLIBC_HAS_XLOCALE__
473+ __c_locale __old = __uselocale(_M_c_locale_codecvt);
474+#endif
475+
476+ // wcsnrtombs is *very* fast but stops if encounters NUL characters:
477+ // in case we fall back to wcrtomb and then continue, in a loop.
478+ // NB: wcsnrtombs is a GNU extension
479+ for (__from_next = __from, __to_next = __to;
480+ __from_next < __from_end && __to_next < __to_end
481+ && __ret == ok;)
482+ {
483+ const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
484+ __from_end - __from_next);
485+ if (!__from_chunk_end)
486+ __from_chunk_end = __from_end;
487+
488+ __from = __from_next;
489+ const size_t __conv = wcsnrtombs(__to_next, &__from_next,
490+ __from_chunk_end - __from_next,
491+ __to_end - __to_next, &__state);
492+ if (__conv == static_cast<size_t>(-1))
493+ {
494+ // In case of error, in order to stop at the exact place we
495+ // have to start again from the beginning with a series of
496+ // wcrtomb.
497+ for (; __from < __from_next; ++__from)
498+ __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
499+ __state = __tmp_state;
500+ __ret = error;
501+ }
502+ else if (__from_next && __from_next < __from_chunk_end)
503+ {
504+ __to_next += __conv;
505+ __ret = partial;
506+ }
507+ else
508+ {
509+ __from_next = __from_chunk_end;
510+ __to_next += __conv;
511+ }
512+
513+ if (__from_next < __from_end && __ret == ok)
514+ {
515+ extern_type __buf[MB_LEN_MAX];
516+ __tmp_state = __state;
517+ const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
518+ if (__conv > static_cast<size_t>(__to_end - __to_next))
519+ __ret = partial;
520+ else
521+ {
522+ memcpy(__to_next, __buf, __conv);
523+ __state = __tmp_state;
524+ __to_next += __conv;
525+ ++__from_next;
526+ }
527+ }
528+ }
529+
530+#ifdef __UCLIBC_HAS_XLOCALE__
531+ __uselocale(__old);
532+#endif
533+
534+ return __ret;
535+ }
536+
537+ codecvt_base::result
538+ codecvt<wchar_t, char, mbstate_t>::
539+ do_in(state_type& __state, const extern_type* __from,
540+ const extern_type* __from_end, const extern_type*& __from_next,
541+ intern_type* __to, intern_type* __to_end,
542+ intern_type*& __to_next) const
543+ {
544+ result __ret = ok;
545+ state_type __tmp_state(__state);
546+
547+#ifdef __UCLIBC_HAS_XLOCALE__
548+ __c_locale __old = __uselocale(_M_c_locale_codecvt);
549+#endif
550+
551+ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
552+ // in case we store a L'\0' and then continue, in a loop.
553+ // NB: mbsnrtowcs is a GNU extension
554+ for (__from_next = __from, __to_next = __to;
555+ __from_next < __from_end && __to_next < __to_end
556+ && __ret == ok;)
557+ {
558+ const extern_type* __from_chunk_end;
559+ __from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
560+ __from_end
561+ - __from_next));
562+ if (!__from_chunk_end)
563+ __from_chunk_end = __from_end;
564+
565+ __from = __from_next;
566+ size_t __conv = mbsnrtowcs(__to_next, &__from_next,
567+ __from_chunk_end - __from_next,
568+ __to_end - __to_next, &__state);
569+ if (__conv == static_cast<size_t>(-1))
570+ {
571+ // In case of error, in order to stop at the exact place we
572+ // have to start again from the beginning with a series of
573+ // mbrtowc.
574+ for (;; ++__to_next, __from += __conv)
575+ {
576+ __conv = mbrtowc(__to_next, __from, __from_end - __from,
577+ &__tmp_state);
578+ if (__conv == static_cast<size_t>(-1)
579+ || __conv == static_cast<size_t>(-2))
580+ break;
581+ }
582+ __from_next = __from;
583+ __state = __tmp_state;
584+ __ret = error;
585+ }
586+ else if (__from_next && __from_next < __from_chunk_end)
587+ {
588+ // It is unclear what to return in this case (see DR 382).
589+ __to_next += __conv;
590+ __ret = partial;
591+ }
592+ else
593+ {
594+ __from_next = __from_chunk_end;
595+ __to_next += __conv;
596+ }
597+
598+ if (__from_next < __from_end && __ret == ok)
599+ {
600+ if (__to_next < __to_end)
601+ {
602+ // XXX Probably wrong for stateful encodings
603+ __tmp_state = __state;
604+ ++__from_next;
605+ *__to_next++ = L'\0';
606+ }
607+ else
608+ __ret = partial;
609+ }
610+ }
611+
612+#ifdef __UCLIBC_HAS_XLOCALE__
613+ __uselocale(__old);
614+#endif
615+
616+ return __ret;
617+ }
618+
619+ int
620+ codecvt<wchar_t, char, mbstate_t>::
621+ do_encoding() const throw()
622+ {
623+ // XXX This implementation assumes that the encoding is
624+ // stateless and is either single-byte or variable-width.
625+ int __ret = 0;
626+#ifdef __UCLIBC_HAS_XLOCALE__
627+ __c_locale __old = __uselocale(_M_c_locale_codecvt);
628+#endif
629+ if (MB_CUR_MAX == 1)
630+ __ret = 1;
631+#ifdef __UCLIBC_HAS_XLOCALE__
632+ __uselocale(__old);
633+#endif
634+ return __ret;
635+ }
636+
637+ int
638+ codecvt<wchar_t, char, mbstate_t>::
639+ do_max_length() const throw()
640+ {
641+#ifdef __UCLIBC_HAS_XLOCALE__
642+ __c_locale __old = __uselocale(_M_c_locale_codecvt);
643+#endif
644+ // XXX Probably wrong for stateful encodings.
645+ int __ret = MB_CUR_MAX;
646+#ifdef __UCLIBC_HAS_XLOCALE__
647+ __uselocale(__old);
648+#endif
649+ return __ret;
650+ }
651+
652+ int
653+ codecvt<wchar_t, char, mbstate_t>::
654+ do_length(state_type& __state, const extern_type* __from,
655+ const extern_type* __end, size_t __max) const
656+ {
657+ int __ret = 0;
658+ state_type __tmp_state(__state);
659+
660+#ifdef __UCLIBC_HAS_XLOCALE__
661+ __c_locale __old = __uselocale(_M_c_locale_codecvt);
662+#endif
663+
664+ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
665+ // in case we advance past it and then continue, in a loop.
666+ // NB: mbsnrtowcs is a GNU extension
667+
668+ // A dummy internal buffer is needed in order for mbsnrtocws to consider
669+ // its fourth parameter (it wouldn't with NULL as first parameter).
670+ wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
671+ * __max));
672+ while (__from < __end && __max)
673+ {
674+ const extern_type* __from_chunk_end;
675+ __from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
676+ __end
677+ - __from));
678+ if (!__from_chunk_end)
679+ __from_chunk_end = __end;
680+
681+ const extern_type* __tmp_from = __from;
682+ size_t __conv = mbsnrtowcs(__to, &__from,
683+ __from_chunk_end - __from,
684+ __max, &__state);
685+ if (__conv == static_cast<size_t>(-1))
686+ {
687+ // In case of error, in order to stop at the exact place we
688+ // have to start again from the beginning with a series of
689+ // mbrtowc.
690+ for (__from = __tmp_from;; __from += __conv)
691+ {
692+ __conv = mbrtowc(NULL, __from, __end - __from,
693+ &__tmp_state);
694+ if (__conv == static_cast<size_t>(-1)
695+ || __conv == static_cast<size_t>(-2))
696+ break;
697+ }
698+ __state = __tmp_state;
699+ __ret += __from - __tmp_from;
700+ break;
701+ }
702+ if (!__from)
703+ __from = __from_chunk_end;
704+
705+ __ret += __from - __tmp_from;
706+ __max -= __conv;
707+
708+ if (__from < __end && __max)
709+ {
710+ // XXX Probably wrong for stateful encodings
711+ __tmp_state = __state;
712+ ++__from;
713+ ++__ret;
714+ --__max;
715+ }
716+ }
717+
718+#ifdef __UCLIBC_HAS_XLOCALE__
719+ __uselocale(__old);
720+#endif
721+
722+ return __ret;
723+ }
724+#endif
725+}
726Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/collate_members.cc
727===================================================================
728--- /dev/null 1970-01-01 00:00:00.000000000 +0000
729+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/collate_members.cc 2012-04-10 10:30:37.327368356 -0700
730@@ -0,0 +1,80 @@
731+// std::collate implementation details, GNU version -*- C++ -*-
732+
733+// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
734+//
735+// This file is part of the GNU ISO C++ Library. This library is free
736+// software; you can redistribute it and/or modify it under the
737+// terms of the GNU General Public License as published by the
738+// Free Software Foundation; either version 2, or (at your option)
739+// any later version.
740+
741+// This library is distributed in the hope that it will be useful,
742+// but WITHOUT ANY WARRANTY; without even the implied warranty of
743+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
744+// GNU General Public License for more details.
745+
746+// You should have received a copy of the GNU General Public License along
747+// with this library; see the file COPYING. If not, write to the Free
748+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
749+// USA.
750+
751+// As a special exception, you may use this file as part of a free software
752+// library without restriction. Specifically, if other files instantiate
753+// templates or use macros or inline functions from this file, or you compile
754+// this file and link it with other files to produce an executable, this
755+// file does not by itself cause the resulting executable to be covered by
756+// the GNU General Public License. This exception does not however
757+// invalidate any other reasons why the executable file might be covered by
758+// the GNU General Public License.
759+
760+//
761+// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
762+//
763+
764+// Written by Benjamin Kosnik <bkoz@redhat.com>
765+
766+#include <locale>
767+#include <bits/c++locale_internal.h>
768+
769+#ifndef __UCLIBC_HAS_XLOCALE__
770+#define __strcoll_l(S1, S2, L) strcoll((S1), (S2))
771+#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N))
772+#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2))
773+#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N))
774+#endif
775+
776+namespace std
777+{
778+ // These are basically extensions to char_traits, and perhaps should
779+ // be put there instead of here.
780+ template<>
781+ int
782+ collate<char>::_M_compare(const char* __one, const char* __two) const
783+ {
784+ int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
785+ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
786+ }
787+
788+ template<>
789+ size_t
790+ collate<char>::_M_transform(char* __to, const char* __from,
791+ size_t __n) const
792+ { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
793+
794+#ifdef _GLIBCXX_USE_WCHAR_T
795+ template<>
796+ int
797+ collate<wchar_t>::_M_compare(const wchar_t* __one,
798+ const wchar_t* __two) const
799+ {
800+ int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
801+ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
802+ }
803+
804+ template<>
805+ size_t
806+ collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
807+ size_t __n) const
808+ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
809+#endif
810+}
811Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/ctype_members.cc
812===================================================================
813--- /dev/null 1970-01-01 00:00:00.000000000 +0000
814+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2012-04-10 10:30:37.331368420 -0700
815@@ -0,0 +1,300 @@
816+// std::ctype implementation details, GNU version -*- C++ -*-
817+
818+// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
819+//
820+// This file is part of the GNU ISO C++ Library. This library is free
821+// software; you can redistribute it and/or modify it under the
822+// terms of the GNU General Public License as published by the
823+// Free Software Foundation; either version 2, or (at your option)
824+// any later version.
825+
826+// This library is distributed in the hope that it will be useful,
827+// but WITHOUT ANY WARRANTY; without even the implied warranty of
828+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
829+// GNU General Public License for more details.
830+
831+// You should have received a copy of the GNU General Public License along
832+// with this library; see the file COPYING. If not, write to the Free
833+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
834+// USA.
835+
836+// As a special exception, you may use this file as part of a free software
837+// library without restriction. Specifically, if other files instantiate
838+// templates or use macros or inline functions from this file, or you compile
839+// this file and link it with other files to produce an executable, this
840+// file does not by itself cause the resulting executable to be covered by
841+// the GNU General Public License. This exception does not however
842+// invalidate any other reasons why the executable file might be covered by
843+// the GNU General Public License.
844+
845+//
846+// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
847+//
848+
849+// Written by Benjamin Kosnik <bkoz@redhat.com>
850+
851+#define _LIBC
852+#include <locale>
853+#undef _LIBC
854+#include <bits/c++locale_internal.h>
855+
856+#ifndef __UCLIBC_HAS_XLOCALE__
857+#define __wctype_l(S, L) wctype((S))
858+#define __towupper_l(C, L) towupper((C))
859+#define __towlower_l(C, L) towlower((C))
860+#define __iswctype_l(C, M, L) iswctype((C), (M))
861+#endif
862+
863+namespace std
864+{
865+ // NB: The other ctype<char> specializations are in src/locale.cc and
866+ // various /config/os/* files.
867+ template<>
868+ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
869+ : ctype<char>(0, false, __refs)
870+ {
871+ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
872+ {
873+ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
874+ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
875+#ifdef __UCLIBC_HAS_XLOCALE__
876+ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
877+ this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
878+ this->_M_table = this->_M_c_locale_ctype->__ctype_b;
879+#endif
880+ }
881+ }
882+
883+#ifdef _GLIBCXX_USE_WCHAR_T
884+ ctype<wchar_t>::__wmask_type
885+ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
886+ {
887+ __wmask_type __ret;
888+ switch (__m)
889+ {
890+ case space:
891+ __ret = __wctype_l("space", _M_c_locale_ctype);
892+ break;
893+ case print:
894+ __ret = __wctype_l("print", _M_c_locale_ctype);
895+ break;
896+ case cntrl:
897+ __ret = __wctype_l("cntrl", _M_c_locale_ctype);
898+ break;
899+ case upper:
900+ __ret = __wctype_l("upper", _M_c_locale_ctype);
901+ break;
902+ case lower:
903+ __ret = __wctype_l("lower", _M_c_locale_ctype);
904+ break;
905+ case alpha:
906+ __ret = __wctype_l("alpha", _M_c_locale_ctype);
907+ break;
908+ case digit:
909+ __ret = __wctype_l("digit", _M_c_locale_ctype);
910+ break;
911+ case punct:
912+ __ret = __wctype_l("punct", _M_c_locale_ctype);
913+ break;
914+ case xdigit:
915+ __ret = __wctype_l("xdigit", _M_c_locale_ctype);
916+ break;
917+ case alnum:
918+ __ret = __wctype_l("alnum", _M_c_locale_ctype);
919+ break;
920+ case graph:
921+ __ret = __wctype_l("graph", _M_c_locale_ctype);
922+ break;
923+ default:
924+ __ret = __wmask_type();
925+ }
926+ return __ret;
927+ }
928+
929+ wchar_t
930+ ctype<wchar_t>::do_toupper(wchar_t __c) const
931+ { return __towupper_l(__c, _M_c_locale_ctype); }
932+
933+ const wchar_t*
934+ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
935+ {
936+ while (__lo < __hi)
937+ {
938+ *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
939+ ++__lo;
940+ }
941+ return __hi;
942+ }
943+
944+ wchar_t
945+ ctype<wchar_t>::do_tolower(wchar_t __c) const
946+ { return __towlower_l(__c, _M_c_locale_ctype); }
947+
948+ const wchar_t*
949+ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
950+ {
951+ while (__lo < __hi)
952+ {
953+ *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
954+ ++__lo;
955+ }
956+ return __hi;
957+ }
958+
959+ bool
960+ ctype<wchar_t>::
961+ do_is(mask __m, wchar_t __c) const
962+ {
963+ // Highest bitmask in ctype_base == 10, but extra in "C"
964+ // library for blank.
965+ bool __ret = false;
966+ const size_t __bitmasksize = 11;
967+ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
968+ if (__m & _M_bit[__bitcur]
969+ && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
970+ {
971+ __ret = true;
972+ break;
973+ }
974+ return __ret;
975+ }
976+
977+ const wchar_t*
978+ ctype<wchar_t>::
979+ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
980+ {
981+ for (; __lo < __hi; ++__vec, ++__lo)
982+ {
983+ // Highest bitmask in ctype_base == 10, but extra in "C"
984+ // library for blank.
985+ const size_t __bitmasksize = 11;
986+ mask __m = 0;
987+ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
988+ if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
989+ __m |= _M_bit[__bitcur];
990+ *__vec = __m;
991+ }
992+ return __hi;
993+ }
994+
995+ const wchar_t*
996+ ctype<wchar_t>::
997+ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
998+ {
999+ while (__lo < __hi && !this->do_is(__m, *__lo))
1000+ ++__lo;
1001+ return __lo;
1002+ }
1003+
1004+ const wchar_t*
1005+ ctype<wchar_t>::
1006+ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
1007+ {
1008+ while (__lo < __hi && this->do_is(__m, *__lo) != 0)
1009+ ++__lo;
1010+ return __lo;
1011+ }
1012+
1013+ wchar_t
1014+ ctype<wchar_t>::
1015+ do_widen(char __c) const
1016+ { return _M_widen[static_cast<unsigned char>(__c)]; }
1017+
1018+ const char*
1019+ ctype<wchar_t>::
1020+ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
1021+ {
1022+ while (__lo < __hi)
1023+ {
1024+ *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
1025+ ++__lo;
1026+ ++__dest;
1027+ }
1028+ return __hi;
1029+ }
1030+
1031+ char
1032+ ctype<wchar_t>::
1033+ do_narrow(wchar_t __wc, char __dfault) const
1034+ {
1035+ if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
1036+ return _M_narrow[__wc];
1037+#ifdef __UCLIBC_HAS_XLOCALE__
1038+ __c_locale __old = __uselocale(_M_c_locale_ctype);
1039+#endif
1040+ const int __c = wctob(__wc);
1041+#ifdef __UCLIBC_HAS_XLOCALE__
1042+ __uselocale(__old);
1043+#endif
1044+ return (__c == EOF ? __dfault : static_cast<char>(__c));
1045+ }
1046+
1047+ const wchar_t*
1048+ ctype<wchar_t>::
1049+ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
1050+ char* __dest) const
1051+ {
1052+#ifdef __UCLIBC_HAS_XLOCALE__
1053+ __c_locale __old = __uselocale(_M_c_locale_ctype);
1054+#endif
1055+ if (_M_narrow_ok)
1056+ while (__lo < __hi)
1057+ {
1058+ if (*__lo >= 0 && *__lo < 128)
1059+ *__dest = _M_narrow[*__lo];
1060+ else
1061+ {
1062+ const int __c = wctob(*__lo);
1063+ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
1064+ }
1065+ ++__lo;
1066+ ++__dest;
1067+ }
1068+ else
1069+ while (__lo < __hi)
1070+ {
1071+ const int __c = wctob(*__lo);
1072+ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
1073+ ++__lo;
1074+ ++__dest;
1075+ }
1076+#ifdef __UCLIBC_HAS_XLOCALE__
1077+ __uselocale(__old);
1078+#endif
1079+ return __hi;
1080+ }
1081+
1082+ void
1083+ ctype<wchar_t>::_M_initialize_ctype()
1084+ {
1085+#ifdef __UCLIBC_HAS_XLOCALE__
1086+ __c_locale __old = __uselocale(_M_c_locale_ctype);
1087+#endif
1088+ wint_t __i;
1089+ for (__i = 0; __i < 128; ++__i)
1090+ {
1091+ const int __c = wctob(__i);
1092+ if (__c == EOF)
1093+ break;
1094+ else
1095+ _M_narrow[__i] = static_cast<char>(__c);
1096+ }
1097+ if (__i == 128)
1098+ _M_narrow_ok = true;
1099+ else
1100+ _M_narrow_ok = false;
1101+ for (size_t __j = 0;
1102+ __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
1103+ _M_widen[__j] = btowc(__j);
1104+
1105+ for (size_t __k = 0; __k <= 11; ++__k)
1106+ {
1107+ _M_bit[__k] = static_cast<mask>(_ISbit(__k));
1108+ _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
1109+ }
1110+#ifdef __UCLIBC_HAS_XLOCALE__
1111+ __uselocale(__old);
1112+#endif
1113+ }
1114+#endif // _GLIBCXX_USE_WCHAR_T
1115+}
1116Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/messages_members.cc
1117===================================================================
1118--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1119+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/messages_members.cc 2012-04-10 10:30:37.331368420 -0700
1120@@ -0,0 +1,100 @@
1121+// std::messages implementation details, GNU version -*- C++ -*-
1122+
1123+// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
1124+//
1125+// This file is part of the GNU ISO C++ Library. This library is free
1126+// software; you can redistribute it and/or modify it under the
1127+// terms of the GNU General Public License as published by the
1128+// Free Software Foundation; either version 2, or (at your option)
1129+// any later version.
1130+
1131+// This library is distributed in the hope that it will be useful,
1132+// but WITHOUT ANY WARRANTY; without even the implied warranty of
1133+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1134+// GNU General Public License for more details.
1135+
1136+// You should have received a copy of the GNU General Public License along
1137+// with this library; see the file COPYING. If not, write to the Free
1138+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
1139+// USA.
1140+
1141+// As a special exception, you may use this file as part of a free software
1142+// library without restriction. Specifically, if other files instantiate
1143+// templates or use macros or inline functions from this file, or you compile
1144+// this file and link it with other files to produce an executable, this
1145+// file does not by itself cause the resulting executable to be covered by
1146+// the GNU General Public License. This exception does not however
1147+// invalidate any other reasons why the executable file might be covered by
1148+// the GNU General Public License.
1149+
1150+//
1151+// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
1152+//
1153+
1154+// Written by Benjamin Kosnik <bkoz@redhat.com>
1155+
1156+#include <locale>
1157+#include <bits/c++locale_internal.h>
1158+
1159+#ifdef __UCLIBC_MJN3_ONLY__
1160+#warning fix gettext stuff
1161+#endif
1162+#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
1163+extern "C" char *__dcgettext(const char *domainname,
1164+ const char *msgid, int category);
1165+#undef gettext
1166+#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
1167+#else
1168+#undef gettext
1169+#define gettext(msgid) (msgid)
1170+#endif
1171+
1172+namespace std
1173+{
1174+ // Specializations.
1175+ template<>
1176+ string
1177+ messages<char>::do_get(catalog, int, int, const string& __dfault) const
1178+ {
1179+#ifdef __UCLIBC_HAS_XLOCALE__
1180+ __c_locale __old = __uselocale(_M_c_locale_messages);
1181+ const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
1182+ __uselocale(__old);
1183+ return string(__msg);
1184+#elif defined __UCLIBC_HAS_LOCALE__
1185+ char* __old = strdup(setlocale(LC_ALL, NULL));
1186+ setlocale(LC_ALL, _M_name_messages);
1187+ const char* __msg = gettext(__dfault.c_str());
1188+ setlocale(LC_ALL, __old);
1189+ free(__old);
1190+ return string(__msg);
1191+#else
1192+ const char* __msg = gettext(__dfault.c_str());
1193+ return string(__msg);
1194+#endif
1195+ }
1196+
1197+#ifdef _GLIBCXX_USE_WCHAR_T
1198+ template<>
1199+ wstring
1200+ messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
1201+ {
1202+# ifdef __UCLIBC_HAS_XLOCALE__
1203+ __c_locale __old = __uselocale(_M_c_locale_messages);
1204+ char* __msg = gettext(_M_convert_to_char(__dfault));
1205+ __uselocale(__old);
1206+ return _M_convert_from_char(__msg);
1207+# elif defined __UCLIBC_HAS_LOCALE__
1208+ char* __old = strdup(setlocale(LC_ALL, NULL));
1209+ setlocale(LC_ALL, _M_name_messages);
1210+ char* __msg = gettext(_M_convert_to_char(__dfault));
1211+ setlocale(LC_ALL, __old);
1212+ free(__old);
1213+ return _M_convert_from_char(__msg);
1214+# else
1215+ char* __msg = gettext(_M_convert_to_char(__dfault));
1216+ return _M_convert_from_char(__msg);
1217+# endif
1218+ }
1219+#endif
1220+}
1221Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/messages_members.h
1222===================================================================
1223--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1224+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/messages_members.h 2012-04-10 10:30:37.331368420 -0700
1225@@ -0,0 +1,118 @@
1226+// std::messages implementation details, GNU version -*- C++ -*-
1227+
1228+// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
1229+//
1230+// This file is part of the GNU ISO C++ Library. This library is free
1231+// software; you can redistribute it and/or modify it under the
1232+// terms of the GNU General Public License as published by the
1233+// Free Software Foundation; either version 2, or (at your option)
1234+// any later version.
1235+
1236+// This library is distributed in the hope that it will be useful,
1237+// but WITHOUT ANY WARRANTY; without even the implied warranty of
1238+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1239+// GNU General Public License for more details.
1240+
1241+// You should have received a copy of the GNU General Public License along
1242+// with this library; see the file COPYING. If not, write to the Free
1243+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
1244+// USA.
1245+
1246+// As a special exception, you may use this file as part of a free software
1247+// library without restriction. Specifically, if other files instantiate
1248+// templates or use macros or inline functions from this file, or you compile
1249+// this file and link it with other files to produce an executable, this
1250+// file does not by itself cause the resulting executable to be covered by
1251+// the GNU General Public License. This exception does not however
1252+// invalidate any other reasons why the executable file might be covered by
1253+// the GNU General Public License.
1254+
1255+//
1256+// ISO C++ 14882: 22.2.7.1.2 messages functions
1257+//
1258+
1259+// Written by Benjamin Kosnik <bkoz@redhat.com>
1260+
1261+#ifdef __UCLIBC_MJN3_ONLY__
1262+#warning fix prototypes for *textdomain funcs
1263+#endif
1264+#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
1265+extern "C" char *__textdomain(const char *domainname);
1266+extern "C" char *__bindtextdomain(const char *domainname,
1267+ const char *dirname);
1268+#else
1269+#undef __textdomain
1270+#undef __bindtextdomain
1271+#define __textdomain(D) ((void)0)
1272+#define __bindtextdomain(D,P) ((void)0)
1273+#endif
1274+
1275+ // Non-virtual member functions.
1276+ template<typename _CharT>
1277+ messages<_CharT>::messages(size_t __refs)
1278+ : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
1279+ _M_name_messages(_S_get_c_name())
1280+ { }
1281+
1282+ template<typename _CharT>
1283+ messages<_CharT>::messages(__c_locale __cloc, const char* __s,
1284+ size_t __refs)
1285+ : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
1286+ _M_name_messages(__s)
1287+ {
1288+ char* __tmp = new char[std::strlen(__s) + 1];
1289+ std::strcpy(__tmp, __s);
1290+ _M_name_messages = __tmp;
1291+ }
1292+
1293+ template<typename _CharT>
1294+ typename messages<_CharT>::catalog
1295+ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
1296+ const char* __dir) const
1297+ {
1298+ __bindtextdomain(__s.c_str(), __dir);
1299+ return this->do_open(__s, __loc);
1300+ }
1301+
1302+ // Virtual member functions.
1303+ template<typename _CharT>
1304+ messages<_CharT>::~messages()
1305+ {
1306+ if (_M_name_messages != _S_get_c_name())
1307+ delete [] _M_name_messages;
1308+ _S_destroy_c_locale(_M_c_locale_messages);
1309+ }
1310+
1311+ template<typename _CharT>
1312+ typename messages<_CharT>::catalog
1313+ messages<_CharT>::do_open(const basic_string<char>& __s,
1314+ const locale&) const
1315+ {
1316+ // No error checking is done, assume the catalog exists and can
1317+ // be used.
1318+ __textdomain(__s.c_str());
1319+ return 0;
1320+ }
1321+
1322+ template<typename _CharT>
1323+ void
1324+ messages<_CharT>::do_close(catalog) const
1325+ { }
1326+
1327+ // messages_byname
1328+ template<typename _CharT>
1329+ messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
1330+ : messages<_CharT>(__refs)
1331+ {
1332+ if (this->_M_name_messages != locale::facet::_S_get_c_name())
1333+ delete [] this->_M_name_messages;
1334+ char* __tmp = new char[std::strlen(__s) + 1];
1335+ std::strcpy(__tmp, __s);
1336+ this->_M_name_messages = __tmp;
1337+
1338+ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
1339+ {
1340+ this->_S_destroy_c_locale(this->_M_c_locale_messages);
1341+ this->_S_create_c_locale(this->_M_c_locale_messages, __s);
1342+ }
1343+ }
1344Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/monetary_members.cc
1345===================================================================
1346--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1347+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2012-04-10 10:30:37.331368420 -0700
1348@@ -0,0 +1,692 @@
1349+// std::moneypunct implementation details, GNU version -*- C++ -*-
1350+
1351+// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
1352+//
1353+// This file is part of the GNU ISO C++ Library. This library is free
1354+// software; you can redistribute it and/or modify it under the
1355+// terms of the GNU General Public License as published by the
1356+// Free Software Foundation; either version 2, or (at your option)
1357+// any later version.
1358+
1359+// This library is distributed in the hope that it will be useful,
1360+// but WITHOUT ANY WARRANTY; without even the implied warranty of
1361+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1362+// GNU General Public License for more details.
1363+
1364+// You should have received a copy of the GNU General Public License along
1365+// with this library; see the file COPYING. If not, write to the Free
1366+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
1367+// USA.
1368+
1369+// As a special exception, you may use this file as part of a free software
1370+// library without restriction. Specifically, if other files instantiate
1371+// templates or use macros or inline functions from this file, or you compile
1372+// this file and link it with other files to produce an executable, this
1373+// file does not by itself cause the resulting executable to be covered by
1374+// the GNU General Public License. This exception does not however
1375+// invalidate any other reasons why the executable file might be covered by
1376+// the GNU General Public License.
1377+
1378+//
1379+// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
1380+//
1381+
1382+// Written by Benjamin Kosnik <bkoz@redhat.com>
1383+
1384+#define _LIBC
1385+#include <locale>
1386+#undef _LIBC
1387+#include <bits/c++locale_internal.h>
1388+
1389+#ifdef __UCLIBC_MJN3_ONLY__
1390+#warning optimize this for uclibc
1391+#warning tailor for stub locale support
1392+#endif
1393+
1394+#ifndef __UCLIBC_HAS_XLOCALE__
1395+#define __nl_langinfo_l(N, L) nl_langinfo((N))
1396+#endif
1397+
1398+namespace std
1399+{
1400+ // Construct and return valid pattern consisting of some combination of:
1401+ // space none symbol sign value
1402+ money_base::pattern
1403+ money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
1404+ {
1405+ pattern __ret;
1406+
1407+ // This insanely complicated routine attempts to construct a valid
1408+ // pattern for use with monyepunct. A couple of invariants:
1409+
1410+ // if (__precedes) symbol -> value
1411+ // else value -> symbol
1412+
1413+ // if (__space) space
1414+ // else none
1415+
1416+ // none == never first
1417+ // space never first or last
1418+
1419+ // Any elegant implementations of this are welcome.
1420+ switch (__posn)
1421+ {
1422+ case 0:
1423+ case 1:
1424+ // 1 The sign precedes the value and symbol.
1425+ __ret.field[0] = sign;
1426+ if (__space)
1427+ {
1428+ // Pattern starts with sign.
1429+ if (__precedes)
1430+ {
1431+ __ret.field[1] = symbol;
1432+ __ret.field[3] = value;
1433+ }
1434+ else
1435+ {
1436+ __ret.field[1] = value;
1437+ __ret.field[3] = symbol;
1438+ }
1439+ __ret.field[2] = space;
1440+ }
1441+ else
1442+ {
1443+ // Pattern starts with sign and ends with none.
1444+ if (__precedes)
1445+ {
1446+ __ret.field[1] = symbol;
1447+ __ret.field[2] = value;
1448+ }
1449+ else
1450+ {
1451+ __ret.field[1] = value;
1452+ __ret.field[2] = symbol;
1453+ }
1454+ __ret.field[3] = none;
1455+ }
1456+ break;
1457+ case 2:
1458+ // 2 The sign follows the value and symbol.
1459+ if (__space)
1460+ {
1461+ // Pattern either ends with sign.
1462+ if (__precedes)
1463+ {
1464+ __ret.field[0] = symbol;
1465+ __ret.field[2] = value;
1466+ }
1467+ else
1468+ {
1469+ __ret.field[0] = value;
1470+ __ret.field[2] = symbol;
1471+ }
1472+ __ret.field[1] = space;
1473+ __ret.field[3] = sign;
1474+ }
1475+ else
1476+ {
1477+ // Pattern ends with sign then none.
1478+ if (__precedes)
1479+ {
1480+ __ret.field[0] = symbol;
1481+ __ret.field[1] = value;
1482+ }
1483+ else
1484+ {
1485+ __ret.field[0] = value;
1486+ __ret.field[1] = symbol;
1487+ }
1488+ __ret.field[2] = sign;
1489+ __ret.field[3] = none;
1490+ }
1491+ break;
1492+ case 3:
1493+ // 3 The sign immediately precedes the symbol.
1494+ if (__precedes)
1495+ {
1496+ __ret.field[0] = sign;
1497+ __ret.field[1] = symbol;
1498+ if (__space)
1499+ {
1500+ __ret.field[2] = space;
1501+ __ret.field[3] = value;
1502+ }
1503+ else
1504+ {
1505+ __ret.field[2] = value;
1506+ __ret.field[3] = none;
1507+ }
1508+ }
1509+ else
1510+ {
1511+ __ret.field[0] = value;
1512+ if (__space)
1513+ {
1514+ __ret.field[1] = space;
1515+ __ret.field[2] = sign;
1516+ __ret.field[3] = symbol;
1517+ }
1518+ else
1519+ {
1520+ __ret.field[1] = sign;
1521+ __ret.field[2] = symbol;
1522+ __ret.field[3] = none;
1523+ }
1524+ }
1525+ break;
1526+ case 4:
1527+ // 4 The sign immediately follows the symbol.
1528+ if (__precedes)
1529+ {
1530+ __ret.field[0] = symbol;
1531+ __ret.field[1] = sign;
1532+ if (__space)
1533+ {
1534+ __ret.field[2] = space;
1535+ __ret.field[3] = value;
1536+ }
1537+ else
1538+ {
1539+ __ret.field[2] = value;
1540+ __ret.field[3] = none;
1541+ }
1542+ }
1543+ else
1544+ {
1545+ __ret.field[0] = value;
1546+ if (__space)
1547+ {
1548+ __ret.field[1] = space;
1549+ __ret.field[2] = symbol;
1550+ __ret.field[3] = sign;
1551+ }
1552+ else
1553+ {
1554+ __ret.field[1] = symbol;
1555+ __ret.field[2] = sign;
1556+ __ret.field[3] = none;
1557+ }
1558+ }
1559+ break;
1560+ default:
1561+ ;
1562+ }
1563+ return __ret;
1564+ }
1565+
1566+ template<>
1567+ void
1568+ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc,
1569+ const char*)
1570+ {
1571+ if (!_M_data)
1572+ _M_data = new __moneypunct_cache<char, true>;
1573+
1574+ if (!__cloc)
1575+ {
1576+ // "C" locale
1577+ _M_data->_M_decimal_point = '.';
1578+ _M_data->_M_thousands_sep = ',';
1579+ _M_data->_M_grouping = "";
1580+ _M_data->_M_grouping_size = 0;
1581+ _M_data->_M_curr_symbol = "";
1582+ _M_data->_M_curr_symbol_size = 0;
1583+ _M_data->_M_positive_sign = "";
1584+ _M_data->_M_positive_sign_size = 0;
1585+ _M_data->_M_negative_sign = "";
1586+ _M_data->_M_negative_sign_size = 0;
1587+ _M_data->_M_frac_digits = 0;
1588+ _M_data->_M_pos_format = money_base::_S_default_pattern;
1589+ _M_data->_M_neg_format = money_base::_S_default_pattern;
1590+
1591+ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
1592+ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
1593+ }
1594+ else
1595+ {
1596+ // Named locale.
1597+ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
1598+ __cloc));
1599+ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
1600+ __cloc));
1601+ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
1602+ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
1603+ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
1604+ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
1605+
1606+ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
1607+ if (!__nposn)
1608+ _M_data->_M_negative_sign = "()";
1609+ else
1610+ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
1611+ __cloc);
1612+ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
1613+
1614+ // _Intl == true
1615+ _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
1616+ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
1617+ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
1618+ __cloc));
1619+ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
1620+ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
1621+ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
1622+ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
1623+ __pposn);
1624+ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
1625+ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
1626+ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
1627+ __nposn);
1628+ }
1629+ }
1630+
1631+ template<>
1632+ void
1633+ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc,
1634+ const char*)
1635+ {
1636+ if (!_M_data)
1637+ _M_data = new __moneypunct_cache<char, false>;
1638+
1639+ if (!__cloc)
1640+ {
1641+ // "C" locale
1642+ _M_data->_M_decimal_point = '.';
1643+ _M_data->_M_thousands_sep = ',';
1644+ _M_data->_M_grouping = "";
1645+ _M_data->_M_grouping_size = 0;
1646+ _M_data->_M_curr_symbol = "";
1647+ _M_data->_M_curr_symbol_size = 0;
1648+ _M_data->_M_positive_sign = "";
1649+ _M_data->_M_positive_sign_size = 0;
1650+ _M_data->_M_negative_sign = "";
1651+ _M_data->_M_negative_sign_size = 0;
1652+ _M_data->_M_frac_digits = 0;
1653+ _M_data->_M_pos_format = money_base::_S_default_pattern;
1654+ _M_data->_M_neg_format = money_base::_S_default_pattern;
1655+
1656+ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
1657+ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
1658+ }
1659+ else
1660+ {
1661+ // Named locale.
1662+ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
1663+ __cloc));
1664+ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
1665+ __cloc));
1666+ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
1667+ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
1668+ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
1669+ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
1670+
1671+ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
1672+ if (!__nposn)
1673+ _M_data->_M_negative_sign = "()";
1674+ else
1675+ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
1676+ __cloc);
1677+ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
1678+
1679+ // _Intl == false
1680+ _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
1681+ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
1682+ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
1683+ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
1684+ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
1685+ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
1686+ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
1687+ __pposn);
1688+ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
1689+ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
1690+ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
1691+ __nposn);
1692+ }
1693+ }
1694+
1695+ template<>
1696+ moneypunct<char, true>::~moneypunct()
1697+ { delete _M_data; }
1698+
1699+ template<>
1700+ moneypunct<char, false>::~moneypunct()
1701+ { delete _M_data; }
1702+
1703+#ifdef _GLIBCXX_USE_WCHAR_T
1704+ template<>
1705+ void
1706+ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc,
1707+#ifdef __UCLIBC_HAS_XLOCALE__
1708+ const char*)
1709+#else
1710+ const char* __name)
1711+#endif
1712+ {
1713+ if (!_M_data)
1714+ _M_data = new __moneypunct_cache<wchar_t, true>;
1715+
1716+ if (!__cloc)
1717+ {
1718+ // "C" locale
1719+ _M_data->_M_decimal_point = L'.';
1720+ _M_data->_M_thousands_sep = L',';
1721+ _M_data->_M_grouping = "";
1722+ _M_data->_M_grouping_size = 0;
1723+ _M_data->_M_curr_symbol = L"";
1724+ _M_data->_M_curr_symbol_size = 0;
1725+ _M_data->_M_positive_sign = L"";
1726+ _M_data->_M_positive_sign_size = 0;
1727+ _M_data->_M_negative_sign = L"";
1728+ _M_data->_M_negative_sign_size = 0;
1729+ _M_data->_M_frac_digits = 0;
1730+ _M_data->_M_pos_format = money_base::_S_default_pattern;
1731+ _M_data->_M_neg_format = money_base::_S_default_pattern;
1732+
1733+ // Use ctype::widen code without the facet...
1734+ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
1735+ _M_data->_M_atoms[__i] =
1736+ static_cast<wchar_t>(money_base::_S_atoms[__i]);
1737+ }
1738+ else
1739+ {
1740+ // Named locale.
1741+#ifdef __UCLIBC_HAS_XLOCALE__
1742+ __c_locale __old = __uselocale(__cloc);
1743+#else
1744+ // Switch to named locale so that mbsrtowcs will work.
1745+ char* __old = strdup(setlocale(LC_ALL, NULL));
1746+ setlocale(LC_ALL, __name);
1747+#endif
1748+
1749+#ifdef __UCLIBC_MJN3_ONLY__
1750+#warning fix this... should be monetary
1751+#endif
1752+#ifdef __UCLIBC__
1753+# ifdef __UCLIBC_HAS_XLOCALE__
1754+ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
1755+ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
1756+# else
1757+ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
1758+ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
1759+# endif
1760+#else
1761+ union { char *__s; wchar_t __w; } __u;
1762+ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
1763+ _M_data->_M_decimal_point = __u.__w;
1764+
1765+ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
1766+ _M_data->_M_thousands_sep = __u.__w;
1767+#endif
1768+ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
1769+ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
1770+
1771+ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
1772+ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
1773+ const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
1774+
1775+ wchar_t* __wcs_ps = 0;
1776+ wchar_t* __wcs_ns = 0;
1777+ const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
1778+ try
1779+ {
1780+ mbstate_t __state;
1781+ size_t __len = strlen(__cpossign);
1782+ if (__len)
1783+ {
1784+ ++__len;
1785+ memset(&__state, 0, sizeof(mbstate_t));
1786+ __wcs_ps = new wchar_t[__len];
1787+ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
1788+ _M_data->_M_positive_sign = __wcs_ps;
1789+ }
1790+ else
1791+ _M_data->_M_positive_sign = L"";
1792+ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
1793+
1794+ __len = strlen(__cnegsign);
1795+ if (!__nposn)
1796+ _M_data->_M_negative_sign = L"()";
1797+ else if (__len)
1798+ {
1799+ ++__len;
1800+ memset(&__state, 0, sizeof(mbstate_t));
1801+ __wcs_ns = new wchar_t[__len];
1802+ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
1803+ _M_data->_M_negative_sign = __wcs_ns;
1804+ }
1805+ else
1806+ _M_data->_M_negative_sign = L"";
1807+ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
1808+
1809+ // _Intl == true.
1810+ __len = strlen(__ccurr);
1811+ if (__len)
1812+ {
1813+ ++__len;
1814+ memset(&__state, 0, sizeof(mbstate_t));
1815+ wchar_t* __wcs = new wchar_t[__len];
1816+ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
1817+ _M_data->_M_curr_symbol = __wcs;
1818+ }
1819+ else
1820+ _M_data->_M_curr_symbol = L"";
1821+ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
1822+ }
1823+ catch (...)
1824+ {
1825+ delete _M_data;
1826+ _M_data = 0;
1827+ delete __wcs_ps;
1828+ delete __wcs_ns;
1829+#ifdef __UCLIBC_HAS_XLOCALE__
1830+ __uselocale(__old);
1831+#else
1832+ setlocale(LC_ALL, __old);
1833+ free(__old);
1834+#endif
1835+ __throw_exception_again;
1836+ }
1837+
1838+ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
1839+ __cloc));
1840+ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
1841+ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
1842+ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
1843+ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
1844+ __pposn);
1845+ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
1846+ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
1847+ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
1848+ __nposn);
1849+
1850+#ifdef __UCLIBC_HAS_XLOCALE__
1851+ __uselocale(__old);
1852+#else
1853+ setlocale(LC_ALL, __old);
1854+ free(__old);
1855+#endif
1856+ }
1857+ }
1858+
1859+ template<>
1860+ void
1861+ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
1862+#ifdef __UCLIBC_HAS_XLOCALE__
1863+ const char*)
1864+#else
1865+ const char* __name)
1866+#endif
1867+ {
1868+ if (!_M_data)
1869+ _M_data = new __moneypunct_cache<wchar_t, false>;
1870+
1871+ if (!__cloc)
1872+ {
1873+ // "C" locale
1874+ _M_data->_M_decimal_point = L'.';
1875+ _M_data->_M_thousands_sep = L',';
1876+ _M_data->_M_grouping = "";
1877+ _M_data->_M_grouping_size = 0;
1878+ _M_data->_M_curr_symbol = L"";
1879+ _M_data->_M_curr_symbol_size = 0;
1880+ _M_data->_M_positive_sign = L"";
1881+ _M_data->_M_positive_sign_size = 0;
1882+ _M_data->_M_negative_sign = L"";
1883+ _M_data->_M_negative_sign_size = 0;
1884+ _M_data->_M_frac_digits = 0;
1885+ _M_data->_M_pos_format = money_base::_S_default_pattern;
1886+ _M_data->_M_neg_format = money_base::_S_default_pattern;
1887+
1888+ // Use ctype::widen code without the facet...
1889+ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
1890+ _M_data->_M_atoms[__i] =
1891+ static_cast<wchar_t>(money_base::_S_atoms[__i]);
1892+ }
1893+ else
1894+ {
1895+ // Named locale.
1896+#ifdef __UCLIBC_HAS_XLOCALE__
1897+ __c_locale __old = __uselocale(__cloc);
1898+#else
1899+ // Switch to named locale so that mbsrtowcs will work.
1900+ char* __old = strdup(setlocale(LC_ALL, NULL));
1901+ setlocale(LC_ALL, __name);
1902+#endif
1903+
1904+#ifdef __UCLIBC_MJN3_ONLY__
1905+#warning fix this... should be monetary
1906+#endif
1907+#ifdef __UCLIBC__
1908+# ifdef __UCLIBC_HAS_XLOCALE__
1909+ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
1910+ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
1911+# else
1912+ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
1913+ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
1914+# endif
1915+#else
1916+ union { char *__s; wchar_t __w; } __u;
1917+ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
1918+ _M_data->_M_decimal_point = __u.__w;
1919+
1920+ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
1921+ _M_data->_M_thousands_sep = __u.__w;
1922+#endif
1923+ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
1924+ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
1925+
1926+ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
1927+ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
1928+ const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
1929+
1930+ wchar_t* __wcs_ps = 0;
1931+ wchar_t* __wcs_ns = 0;
1932+ const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
1933+ try
1934+ {
1935+ mbstate_t __state;
1936+ size_t __len;
1937+ __len = strlen(__cpossign);
1938+ if (__len)
1939+ {
1940+ ++__len;
1941+ memset(&__state, 0, sizeof(mbstate_t));
1942+ __wcs_ps = new wchar_t[__len];
1943+ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
1944+ _M_data->_M_positive_sign = __wcs_ps;
1945+ }
1946+ else
1947+ _M_data->_M_positive_sign = L"";
1948+ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
1949+
1950+ __len = strlen(__cnegsign);
1951+ if (!__nposn)
1952+ _M_data->_M_negative_sign = L"()";
1953+ else if (__len)
1954+ {
1955+ ++__len;
1956+ memset(&__state, 0, sizeof(mbstate_t));
1957+ __wcs_ns = new wchar_t[__len];
1958+ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
1959+ _M_data->_M_negative_sign = __wcs_ns;
1960+ }
1961+ else
1962+ _M_data->_M_negative_sign = L"";
1963+ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
1964+
1965+ // _Intl == true.
1966+ __len = strlen(__ccurr);
1967+ if (__len)
1968+ {
1969+ ++__len;
1970+ memset(&__state, 0, sizeof(mbstate_t));
1971+ wchar_t* __wcs = new wchar_t[__len];
1972+ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
1973+ _M_data->_M_curr_symbol = __wcs;
1974+ }
1975+ else
1976+ _M_data->_M_curr_symbol = L"";
1977+ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
1978+ }
1979+ catch (...)
1980+ {
1981+ delete _M_data;
1982+ _M_data = 0;
1983+ delete __wcs_ps;
1984+ delete __wcs_ns;
1985+#ifdef __UCLIBC_HAS_XLOCALE__
1986+ __uselocale(__old);
1987+#else
1988+ setlocale(LC_ALL, __old);
1989+ free(__old);
1990+#endif
1991+ __throw_exception_again;
1992+ }
1993+
1994+ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
1995+ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
1996+ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
1997+ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
1998+ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
1999+ __pposn);
2000+ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
2001+ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
2002+ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
2003+ __nposn);
2004+
2005+#ifdef __UCLIBC_HAS_XLOCALE__
2006+ __uselocale(__old);
2007+#else
2008+ setlocale(LC_ALL, __old);
2009+ free(__old);
2010+#endif
2011+ }
2012+ }
2013+
2014+ template<>
2015+ moneypunct<wchar_t, true>::~moneypunct()
2016+ {
2017+ if (_M_data->_M_positive_sign_size)
2018+ delete [] _M_data->_M_positive_sign;
2019+ if (_M_data->_M_negative_sign_size
2020+ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
2021+ delete [] _M_data->_M_negative_sign;
2022+ if (_M_data->_M_curr_symbol_size)
2023+ delete [] _M_data->_M_curr_symbol;
2024+ delete _M_data;
2025+ }
2026+
2027+ template<>
2028+ moneypunct<wchar_t, false>::~moneypunct()
2029+ {
2030+ if (_M_data->_M_positive_sign_size)
2031+ delete [] _M_data->_M_positive_sign;
2032+ if (_M_data->_M_negative_sign_size
2033+ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
2034+ delete [] _M_data->_M_negative_sign;
2035+ if (_M_data->_M_curr_symbol_size)
2036+ delete [] _M_data->_M_curr_symbol;
2037+ delete _M_data;
2038+ }
2039+#endif
2040+}
2041Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/numeric_members.cc
2042===================================================================
2043--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2044+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2012-04-10 10:30:37.331368420 -0700
2045@@ -0,0 +1,160 @@
2046+// std::numpunct implementation details, GNU version -*- C++ -*-
2047+
2048+// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
2049+//
2050+// This file is part of the GNU ISO C++ Library. This library is free
2051+// software; you can redistribute it and/or modify it under the
2052+// terms of the GNU General Public License as published by the
2053+// Free Software Foundation; either version 2, or (at your option)
2054+// any later version.
2055+
2056+// This library is distributed in the hope that it will be useful,
2057+// but WITHOUT ANY WARRANTY; without even the implied warranty of
2058+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2059+// GNU General Public License for more details.
2060+
2061+// You should have received a copy of the GNU General Public License along
2062+// with this library; see the file COPYING. If not, write to the Free
2063+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
2064+// USA.
2065+
2066+// As a special exception, you may use this file as part of a free software
2067+// library without restriction. Specifically, if other files instantiate
2068+// templates or use macros or inline functions from this file, or you compile
2069+// this file and link it with other files to produce an executable, this
2070+// file does not by itself cause the resulting executable to be covered by
2071+// the GNU General Public License. This exception does not however
2072+// invalidate any other reasons why the executable file might be covered by
2073+// the GNU General Public License.
2074+
2075+//
2076+// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
2077+//
2078+
2079+// Written by Benjamin Kosnik <bkoz@redhat.com>
2080+
2081+#define _LIBC
2082+#include <locale>
2083+#undef _LIBC
2084+#include <bits/c++locale_internal.h>
2085+
2086+#ifdef __UCLIBC_MJN3_ONLY__
2087+#warning tailor for stub locale support
2088+#endif
2089+#ifndef __UCLIBC_HAS_XLOCALE__
2090+#define __nl_langinfo_l(N, L) nl_langinfo((N))
2091+#endif
2092+
2093+namespace std
2094+{
2095+ template<>
2096+ void
2097+ numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
2098+ {
2099+ if (!_M_data)
2100+ _M_data = new __numpunct_cache<char>;
2101+
2102+ if (!__cloc)
2103+ {
2104+ // "C" locale
2105+ _M_data->_M_grouping = "";
2106+ _M_data->_M_grouping_size = 0;
2107+ _M_data->_M_use_grouping = false;
2108+
2109+ _M_data->_M_decimal_point = '.';
2110+ _M_data->_M_thousands_sep = ',';
2111+
2112+ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
2113+ _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
2114+
2115+ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
2116+ _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
2117+ }
2118+ else
2119+ {
2120+ // Named locale.
2121+ _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT,
2122+ __cloc));
2123+ _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP,
2124+ __cloc));
2125+
2126+ // Check for NULL, which implies no grouping.
2127+ if (_M_data->_M_thousands_sep == '\0')
2128+ _M_data->_M_grouping = "";
2129+ else
2130+ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
2131+ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
2132+ }
2133+
2134+ // NB: There is no way to extact this info from posix locales.
2135+ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
2136+ _M_data->_M_truename = "true";
2137+ _M_data->_M_truename_size = 4;
2138+ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
2139+ _M_data->_M_falsename = "false";
2140+ _M_data->_M_falsename_size = 5;
2141+ }
2142+
2143+ template<>
2144+ numpunct<char>::~numpunct()
2145+ { delete _M_data; }
2146+
2147+#ifdef _GLIBCXX_USE_WCHAR_T
2148+ template<>
2149+ void
2150+ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
2151+ {
2152+ if (!_M_data)
2153+ _M_data = new __numpunct_cache<wchar_t>;
2154+
2155+ if (!__cloc)
2156+ {
2157+ // "C" locale
2158+ _M_data->_M_grouping = "";
2159+ _M_data->_M_grouping_size = 0;
2160+ _M_data->_M_use_grouping = false;
2161+
2162+ _M_data->_M_decimal_point = L'.';
2163+ _M_data->_M_thousands_sep = L',';
2164+
2165+ // Use ctype::widen code without the facet...
2166+ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
2167+ _M_data->_M_atoms_out[__i] =
2168+ static_cast<wchar_t>(__num_base::_S_atoms_out[__i]);
2169+
2170+ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
2171+ _M_data->_M_atoms_in[__j] =
2172+ static_cast<wchar_t>(__num_base::_S_atoms_in[__j]);
2173+ }
2174+ else
2175+ {
2176+ // Named locale.
2177+ // NB: In the GNU model wchar_t is always 32 bit wide.
2178+ union { char *__s; wchar_t __w; } __u;
2179+ __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
2180+ _M_data->_M_decimal_point = __u.__w;
2181+
2182+ __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
2183+ _M_data->_M_thousands_sep = __u.__w;
2184+
2185+ if (_M_data->_M_thousands_sep == L'\0')
2186+ _M_data->_M_grouping = "";
2187+ else
2188+ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
2189+ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
2190+ }
2191+
2192+ // NB: There is no way to extact this info from posix locales.
2193+ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
2194+ _M_data->_M_truename = L"true";
2195+ _M_data->_M_truename_size = 4;
2196+ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
2197+ _M_data->_M_falsename = L"false";
2198+ _M_data->_M_falsename_size = 5;
2199+ }
2200+
2201+ template<>
2202+ numpunct<wchar_t>::~numpunct()
2203+ { delete _M_data; }
2204+ #endif
2205+}
2206Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/time_members.cc
2207===================================================================
2208--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2209+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/time_members.cc 2012-04-10 10:30:37.331368420 -0700
2210@@ -0,0 +1,406 @@
2211+// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
2212+
2213+// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
2214+//
2215+// This file is part of the GNU ISO C++ Library. This library is free
2216+// software; you can redistribute it and/or modify it under the
2217+// terms of the GNU General Public License as published by the
2218+// Free Software Foundation; either version 2, or (at your option)
2219+// any later version.
2220+
2221+// This library is distributed in the hope that it will be useful,
2222+// but WITHOUT ANY WARRANTY; without even the implied warranty of
2223+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2224+// GNU General Public License for more details.
2225+
2226+// You should have received a copy of the GNU General Public License along
2227+// with this library; see the file COPYING. If not, write to the Free
2228+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
2229+// USA.
2230+
2231+// As a special exception, you may use this file as part of a free software
2232+// library without restriction. Specifically, if other files instantiate
2233+// templates or use macros or inline functions from this file, or you compile
2234+// this file and link it with other files to produce an executable, this
2235+// file does not by itself cause the resulting executable to be covered by
2236+// the GNU General Public License. This exception does not however
2237+// invalidate any other reasons why the executable file might be covered by
2238+// the GNU General Public License.
2239+
2240+//
2241+// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
2242+// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
2243+//
2244+
2245+// Written by Benjamin Kosnik <bkoz@redhat.com>
2246+
2247+#include <locale>
2248+#include <bits/c++locale_internal.h>
2249+
2250+#ifdef __UCLIBC_MJN3_ONLY__
2251+#warning tailor for stub locale support
2252+#endif
2253+#ifndef __UCLIBC_HAS_XLOCALE__
2254+#define __nl_langinfo_l(N, L) nl_langinfo((N))
2255+#endif
2256+
2257+namespace std
2258+{
2259+ template<>
2260+ void
2261+ __timepunct<char>::
2262+ _M_put(char* __s, size_t __maxlen, const char* __format,
2263+ const tm* __tm) const
2264+ {
2265+#ifdef __UCLIBC_HAS_XLOCALE__
2266+ const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
2267+ _M_c_locale_timepunct);
2268+#else
2269+ char* __old = strdup(setlocale(LC_ALL, NULL));
2270+ setlocale(LC_ALL, _M_name_timepunct);
2271+ const size_t __len = strftime(__s, __maxlen, __format, __tm);
2272+ setlocale(LC_ALL, __old);
2273+ free(__old);
2274+#endif
2275+ // Make sure __s is null terminated.
2276+ if (__len == 0)
2277+ __s[0] = '\0';
2278+ }
2279+
2280+ template<>
2281+ void
2282+ __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
2283+ {
2284+ if (!_M_data)
2285+ _M_data = new __timepunct_cache<char>;
2286+
2287+ if (!__cloc)
2288+ {
2289+ // "C" locale
2290+ _M_c_locale_timepunct = _S_get_c_locale();
2291+
2292+ _M_data->_M_date_format = "%m/%d/%y";
2293+ _M_data->_M_date_era_format = "%m/%d/%y";
2294+ _M_data->_M_time_format = "%H:%M:%S";
2295+ _M_data->_M_time_era_format = "%H:%M:%S";
2296+ _M_data->_M_date_time_format = "";
2297+ _M_data->_M_date_time_era_format = "";
2298+ _M_data->_M_am = "AM";
2299+ _M_data->_M_pm = "PM";
2300+ _M_data->_M_am_pm_format = "";
2301+
2302+ // Day names, starting with "C"'s Sunday.
2303+ _M_data->_M_day1 = "Sunday";
2304+ _M_data->_M_day2 = "Monday";
2305+ _M_data->_M_day3 = "Tuesday";
2306+ _M_data->_M_day4 = "Wednesday";
2307+ _M_data->_M_day5 = "Thursday";
2308+ _M_data->_M_day6 = "Friday";
2309+ _M_data->_M_day7 = "Saturday";
2310+
2311+ // Abbreviated day names, starting with "C"'s Sun.
2312+ _M_data->_M_aday1 = "Sun";
2313+ _M_data->_M_aday2 = "Mon";
2314+ _M_data->_M_aday3 = "Tue";
2315+ _M_data->_M_aday4 = "Wed";
2316+ _M_data->_M_aday5 = "Thu";
2317+ _M_data->_M_aday6 = "Fri";
2318+ _M_data->_M_aday7 = "Sat";
2319+
2320+ // Month names, starting with "C"'s January.
2321+ _M_data->_M_month01 = "January";
2322+ _M_data->_M_month02 = "February";
2323+ _M_data->_M_month03 = "March";
2324+ _M_data->_M_month04 = "April";
2325+ _M_data->_M_month05 = "May";
2326+ _M_data->_M_month06 = "June";
2327+ _M_data->_M_month07 = "July";
2328+ _M_data->_M_month08 = "August";
2329+ _M_data->_M_month09 = "September";
2330+ _M_data->_M_month10 = "October";
2331+ _M_data->_M_month11 = "November";
2332+ _M_data->_M_month12 = "December";
2333+
2334+ // Abbreviated month names, starting with "C"'s Jan.
2335+ _M_data->_M_amonth01 = "Jan";
2336+ _M_data->_M_amonth02 = "Feb";
2337+ _M_data->_M_amonth03 = "Mar";
2338+ _M_data->_M_amonth04 = "Apr";
2339+ _M_data->_M_amonth05 = "May";
2340+ _M_data->_M_amonth06 = "Jun";
2341+ _M_data->_M_amonth07 = "Jul";
2342+ _M_data->_M_amonth08 = "Aug";
2343+ _M_data->_M_amonth09 = "Sep";
2344+ _M_data->_M_amonth10 = "Oct";
2345+ _M_data->_M_amonth11 = "Nov";
2346+ _M_data->_M_amonth12 = "Dec";
2347+ }
2348+ else
2349+ {
2350+ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
2351+
2352+ _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
2353+ _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
2354+ _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
2355+ _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
2356+ _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
2357+ _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT,
2358+ __cloc);
2359+ _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
2360+ _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
2361+ _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
2362+
2363+ // Day names, starting with "C"'s Sunday.
2364+ _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
2365+ _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
2366+ _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
2367+ _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
2368+ _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
2369+ _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
2370+ _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
2371+
2372+ // Abbreviated day names, starting with "C"'s Sun.
2373+ _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
2374+ _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
2375+ _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
2376+ _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
2377+ _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
2378+ _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
2379+ _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
2380+
2381+ // Month names, starting with "C"'s January.
2382+ _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
2383+ _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
2384+ _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
2385+ _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
2386+ _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
2387+ _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
2388+ _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
2389+ _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
2390+ _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
2391+ _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
2392+ _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
2393+ _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
2394+
2395+ // Abbreviated month names, starting with "C"'s Jan.
2396+ _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
2397+ _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
2398+ _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
2399+ _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
2400+ _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
2401+ _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
2402+ _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
2403+ _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
2404+ _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
2405+ _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
2406+ _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
2407+ _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
2408+ }
2409+ }
2410+
2411+#ifdef _GLIBCXX_USE_WCHAR_T
2412+ template<>
2413+ void
2414+ __timepunct<wchar_t>::
2415+ _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
2416+ const tm* __tm) const
2417+ {
2418+#ifdef __UCLIBC_HAS_XLOCALE__
2419+ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
2420+ const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
2421+ _M_c_locale_timepunct);
2422+#else
2423+ char* __old = strdup(setlocale(LC_ALL, NULL));
2424+ setlocale(LC_ALL, _M_name_timepunct);
2425+ const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
2426+ setlocale(LC_ALL, __old);
2427+ free(__old);
2428+#endif
2429+ // Make sure __s is null terminated.
2430+ if (__len == 0)
2431+ __s[0] = L'\0';
2432+ }
2433+
2434+ template<>
2435+ void
2436+ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
2437+ {
2438+ if (!_M_data)
2439+ _M_data = new __timepunct_cache<wchar_t>;
2440+
2441+#warning wide time stuff
2442+// if (!__cloc)
2443+ {
2444+ // "C" locale
2445+ _M_c_locale_timepunct = _S_get_c_locale();
2446+
2447+ _M_data->_M_date_format = L"%m/%d/%y";
2448+ _M_data->_M_date_era_format = L"%m/%d/%y";
2449+ _M_data->_M_time_format = L"%H:%M:%S";
2450+ _M_data->_M_time_era_format = L"%H:%M:%S";
2451+ _M_data->_M_date_time_format = L"";
2452+ _M_data->_M_date_time_era_format = L"";
2453+ _M_data->_M_am = L"AM";
2454+ _M_data->_M_pm = L"PM";
2455+ _M_data->_M_am_pm_format = L"";
2456+
2457+ // Day names, starting with "C"'s Sunday.
2458+ _M_data->_M_day1 = L"Sunday";
2459+ _M_data->_M_day2 = L"Monday";
2460+ _M_data->_M_day3 = L"Tuesday";
2461+ _M_data->_M_day4 = L"Wednesday";
2462+ _M_data->_M_day5 = L"Thursday";
2463+ _M_data->_M_day6 = L"Friday";
2464+ _M_data->_M_day7 = L"Saturday";
2465+
2466+ // Abbreviated day names, starting with "C"'s Sun.
2467+ _M_data->_M_aday1 = L"Sun";
2468+ _M_data->_M_aday2 = L"Mon";
2469+ _M_data->_M_aday3 = L"Tue";
2470+ _M_data->_M_aday4 = L"Wed";
2471+ _M_data->_M_aday5 = L"Thu";
2472+ _M_data->_M_aday6 = L"Fri";
2473+ _M_data->_M_aday7 = L"Sat";
2474+
2475+ // Month names, starting with "C"'s January.
2476+ _M_data->_M_month01 = L"January";
2477+ _M_data->_M_month02 = L"February";
2478+ _M_data->_M_month03 = L"March";
2479+ _M_data->_M_month04 = L"April";
2480+ _M_data->_M_month05 = L"May";
2481+ _M_data->_M_month06 = L"June";
2482+ _M_data->_M_month07 = L"July";
2483+ _M_data->_M_month08 = L"August";
2484+ _M_data->_M_month09 = L"September";
2485+ _M_data->_M_month10 = L"October";
2486+ _M_data->_M_month11 = L"November";
2487+ _M_data->_M_month12 = L"December";
2488+
2489+ // Abbreviated month names, starting with "C"'s Jan.
2490+ _M_data->_M_amonth01 = L"Jan";
2491+ _M_data->_M_amonth02 = L"Feb";
2492+ _M_data->_M_amonth03 = L"Mar";
2493+ _M_data->_M_amonth04 = L"Apr";
2494+ _M_data->_M_amonth05 = L"May";
2495+ _M_data->_M_amonth06 = L"Jun";
2496+ _M_data->_M_amonth07 = L"Jul";
2497+ _M_data->_M_amonth08 = L"Aug";
2498+ _M_data->_M_amonth09 = L"Sep";
2499+ _M_data->_M_amonth10 = L"Oct";
2500+ _M_data->_M_amonth11 = L"Nov";
2501+ _M_data->_M_amonth12 = L"Dec";
2502+ }
2503+#if 0
2504+ else
2505+ {
2506+ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
2507+
2508+ union { char *__s; wchar_t *__w; } __u;
2509+
2510+ __u.__s = __nl_langinfo_l(_NL_WD_FMT, __cloc);
2511+ _M_data->_M_date_format = __u.__w;
2512+ __u.__s = __nl_langinfo_l(_NL_WERA_D_FMT, __cloc);
2513+ _M_data->_M_date_era_format = __u.__w;
2514+ __u.__s = __nl_langinfo_l(_NL_WT_FMT, __cloc);
2515+ _M_data->_M_time_format = __u.__w;
2516+ __u.__s = __nl_langinfo_l(_NL_WERA_T_FMT, __cloc);
2517+ _M_data->_M_time_era_format = __u.__w;
2518+ __u.__s = __nl_langinfo_l(_NL_WD_T_FMT, __cloc);
2519+ _M_data->_M_date_time_format = __u.__w;
2520+ __u.__s = __nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc);
2521+ _M_data->_M_date_time_era_format = __u.__w;
2522+ __u.__s = __nl_langinfo_l(_NL_WAM_STR, __cloc);
2523+ _M_data->_M_am = __u.__w;
2524+ __u.__s = __nl_langinfo_l(_NL_WPM_STR, __cloc);
2525+ _M_data->_M_pm = __u.__w;
2526+ __u.__s = __nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc);
2527+ _M_data->_M_am_pm_format = __u.__w;
2528+
2529+ // Day names, starting with "C"'s Sunday.
2530+ __u.__s = __nl_langinfo_l(_NL_WDAY_1, __cloc);
2531+ _M_data->_M_day1 = __u.__w;
2532+ __u.__s = __nl_langinfo_l(_NL_WDAY_2, __cloc);
2533+ _M_data->_M_day2 = __u.__w;
2534+ __u.__s = __nl_langinfo_l(_NL_WDAY_3, __cloc);
2535+ _M_data->_M_day3 = __u.__w;
2536+ __u.__s = __nl_langinfo_l(_NL_WDAY_4, __cloc);
2537+ _M_data->_M_day4 = __u.__w;
2538+ __u.__s = __nl_langinfo_l(_NL_WDAY_5, __cloc);
2539+ _M_data->_M_day5 = __u.__w;
2540+ __u.__s = __nl_langinfo_l(_NL_WDAY_6, __cloc);
2541+ _M_data->_M_day6 = __u.__w;
2542+ __u.__s = __nl_langinfo_l(_NL_WDAY_7, __cloc);
2543+ _M_data->_M_day7 = __u.__w;
2544+
2545+ // Abbreviated day names, starting with "C"'s Sun.
2546+ __u.__s = __nl_langinfo_l(_NL_WABDAY_1, __cloc);
2547+ _M_data->_M_aday1 = __u.__w;
2548+ __u.__s = __nl_langinfo_l(_NL_WABDAY_2, __cloc);
2549+ _M_data->_M_aday2 = __u.__w;
2550+ __u.__s = __nl_langinfo_l(_NL_WABDAY_3, __cloc);
2551+ _M_data->_M_aday3 = __u.__w;
2552+ __u.__s = __nl_langinfo_l(_NL_WABDAY_4, __cloc);
2553+ _M_data->_M_aday4 = __u.__w;
2554+ __u.__s = __nl_langinfo_l(_NL_WABDAY_5, __cloc);
2555+ _M_data->_M_aday5 = __u.__w;
2556+ __u.__s = __nl_langinfo_l(_NL_WABDAY_6, __cloc);
2557+ _M_data->_M_aday6 = __u.__w;
2558+ __u.__s = __nl_langinfo_l(_NL_WABDAY_7, __cloc);
2559+ _M_data->_M_aday7 = __u.__w;
2560+
2561+ // Month names, starting with "C"'s January.
2562+ __u.__s = __nl_langinfo_l(_NL_WMON_1, __cloc);
2563+ _M_data->_M_month01 = __u.__w;
2564+ __u.__s = __nl_langinfo_l(_NL_WMON_2, __cloc);
2565+ _M_data->_M_month02 = __u.__w;
2566+ __u.__s = __nl_langinfo_l(_NL_WMON_3, __cloc);
2567+ _M_data->_M_month03 = __u.__w;
2568+ __u.__s = __nl_langinfo_l(_NL_WMON_4, __cloc);
2569+ _M_data->_M_month04 = __u.__w;
2570+ __u.__s = __nl_langinfo_l(_NL_WMON_5, __cloc);
2571+ _M_data->_M_month05 = __u.__w;
2572+ __u.__s = __nl_langinfo_l(_NL_WMON_6, __cloc);
2573+ _M_data->_M_month06 = __u.__w;
2574+ __u.__s = __nl_langinfo_l(_NL_WMON_7, __cloc);
2575+ _M_data->_M_month07 = __u.__w;
2576+ __u.__s = __nl_langinfo_l(_NL_WMON_8, __cloc);
2577+ _M_data->_M_month08 = __u.__w;
2578+ __u.__s = __nl_langinfo_l(_NL_WMON_9, __cloc);
2579+ _M_data->_M_month09 = __u.__w;
2580+ __u.__s = __nl_langinfo_l(_NL_WMON_10, __cloc);
2581+ _M_data->_M_month10 = __u.__w;
2582+ __u.__s = __nl_langinfo_l(_NL_WMON_11, __cloc);
2583+ _M_data->_M_month11 = __u.__w;
2584+ __u.__s = __nl_langinfo_l(_NL_WMON_12, __cloc);
2585+ _M_data->_M_month12 = __u.__w;
2586+
2587+ // Abbreviated month names, starting with "C"'s Jan.
2588+ __u.__s = __nl_langinfo_l(_NL_WABMON_1, __cloc);
2589+ _M_data->_M_amonth01 = __u.__w;
2590+ __u.__s = __nl_langinfo_l(_NL_WABMON_2, __cloc);
2591+ _M_data->_M_amonth02 = __u.__w;
2592+ __u.__s = __nl_langinfo_l(_NL_WABMON_3, __cloc);
2593+ _M_data->_M_amonth03 = __u.__w;
2594+ __u.__s = __nl_langinfo_l(_NL_WABMON_4, __cloc);
2595+ _M_data->_M_amonth04 = __u.__w;
2596+ __u.__s = __nl_langinfo_l(_NL_WABMON_5, __cloc);
2597+ _M_data->_M_amonth05 = __u.__w;
2598+ __u.__s = __nl_langinfo_l(_NL_WABMON_6, __cloc);
2599+ _M_data->_M_amonth06 = __u.__w;
2600+ __u.__s = __nl_langinfo_l(_NL_WABMON_7, __cloc);
2601+ _M_data->_M_amonth07 = __u.__w;
2602+ __u.__s = __nl_langinfo_l(_NL_WABMON_8, __cloc);
2603+ _M_data->_M_amonth08 = __u.__w;
2604+ __u.__s = __nl_langinfo_l(_NL_WABMON_9, __cloc);
2605+ _M_data->_M_amonth09 = __u.__w;
2606+ __u.__s = __nl_langinfo_l(_NL_WABMON_10, __cloc);
2607+ _M_data->_M_amonth10 = __u.__w;
2608+ __u.__s = __nl_langinfo_l(_NL_WABMON_11, __cloc);
2609+ _M_data->_M_amonth11 = __u.__w;
2610+ __u.__s = __nl_langinfo_l(_NL_WABMON_12, __cloc);
2611+ _M_data->_M_amonth12 = __u.__w;
2612+ }
2613+#endif // 0
2614+ }
2615+#endif
2616+}
2617Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/time_members.h
2618===================================================================
2619--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2620+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/time_members.h 2012-04-10 10:30:37.331368420 -0700
2621@@ -0,0 +1,68 @@
2622+// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
2623+
2624+// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
2625+//
2626+// This file is part of the GNU ISO C++ Library. This library is free
2627+// software; you can redistribute it and/or modify it under the
2628+// terms of the GNU General Public License as published by the
2629+// Free Software Foundation; either version 2, or (at your option)
2630+// any later version.
2631+
2632+// This library is distributed in the hope that it will be useful,
2633+// but WITHOUT ANY WARRANTY; without even the implied warranty of
2634+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2635+// GNU General Public License for more details.
2636+
2637+// You should have received a copy of the GNU General Public License along
2638+// with this library; see the file COPYING. If not, write to the Free
2639+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
2640+// USA.
2641+
2642+// As a special exception, you may use this file as part of a free software
2643+// library without restriction. Specifically, if other files instantiate
2644+// templates or use macros or inline functions from this file, or you compile
2645+// this file and link it with other files to produce an executable, this
2646+// file does not by itself cause the resulting executable to be covered by
2647+// the GNU General Public License. This exception does not however
2648+// invalidate any other reasons why the executable file might be covered by
2649+// the GNU General Public License.
2650+
2651+//
2652+// ISO C++ 14882: 22.2.5.1.2 - time_get functions
2653+// ISO C++ 14882: 22.2.5.3.2 - time_put functions
2654+//
2655+
2656+// Written by Benjamin Kosnik <bkoz@redhat.com>
2657+
2658+ template<typename _CharT>
2659+ __timepunct<_CharT>::__timepunct(size_t __refs)
2660+ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
2661+ _M_name_timepunct(_S_get_c_name())
2662+ { _M_initialize_timepunct(); }
2663+
2664+ template<typename _CharT>
2665+ __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
2666+ : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
2667+ _M_name_timepunct(_S_get_c_name())
2668+ { _M_initialize_timepunct(); }
2669+
2670+ template<typename _CharT>
2671+ __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
2672+ size_t __refs)
2673+ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
2674+ _M_name_timepunct(__s)
2675+ {
2676+ char* __tmp = new char[std::strlen(__s) + 1];
2677+ std::strcpy(__tmp, __s);
2678+ _M_name_timepunct = __tmp;
2679+ _M_initialize_timepunct(__cloc);
2680+ }
2681+
2682+ template<typename _CharT>
2683+ __timepunct<_CharT>::~__timepunct()
2684+ {
2685+ if (_M_name_timepunct != _S_get_c_name())
2686+ delete [] _M_name_timepunct;
2687+ delete _M_data;
2688+ _S_destroy_c_locale(_M_c_locale_timepunct);
2689+ }
2690Index: gcc-4_7-branch/libstdc++-v3/configure
2691===================================================================
2692--- gcc-4_7-branch.orig/libstdc++-v3/configure 2012-04-10 10:19:50.383337127 -0700
2693+++ gcc-4_7-branch/libstdc++-v3/configure 2012-04-10 10:30:37.347368481 -0700
2694@@ -15736,6 +15736,9 @@
2695 # Default to "generic".
2696 if test $enable_clocale_flag = auto; then
2697 case ${target_os} in
2698+ *-uclibc*)
2699+ enable_clocale_flag=uclibc
2700+ ;;
2701 linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
2702 enable_clocale_flag=gnu
2703 ;;
2704@@ -15990,6 +15993,78 @@
2705 CTIME_CC=config/locale/generic/time_members.cc
2706 CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2707 ;;
2708+ uclibc)
2709+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: uclibc" >&5
2710+$as_echo "uclibc" >&6; }
2711+
2712+ # Declare intention to use gettext, and add support for specific
2713+ # languages.
2714+ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
2715+ ALL_LINGUAS="de fr"
2716+
2717+ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
2718+ # Extract the first word of "msgfmt", so it can be a program name with args.
2719+set dummy msgfmt; ac_word=$2
2720+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2721+$as_echo_n "checking for $ac_word... " >&6; }
2722+if test "${ac_cv_prog_check_msgfmt+set}" = set; then :
2723+ $as_echo_n "(cached) " >&6
2724+else
2725+ if test -n "$check_msgfmt"; then
2726+ ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
2727+else
2728+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2729+for as_dir in $PATH
2730+do
2731+ IFS=$as_save_IFS
2732+ test -z "$as_dir" && as_dir=.
2733+ for ac_exec_ext in '' $ac_executable_extensions; do
2734+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
2735+ ac_cv_prog_check_msgfmt="yes"
2736+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2737+ break 2
2738+ fi
2739+done
2740+ done
2741+IFS=$as_save_IFS
2742+
2743+ test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
2744+fi
2745+fi
2746+check_msgfmt=$ac_cv_prog_check_msgfmt
2747+if test -n "$check_msgfmt"; then
2748+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $check_msgfmt" >&5
2749+$as_echo "$check_msgfmt" >&6; }
2750+else
2751+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2752+$as_echo "no" >&6; }
2753+fi
2754+
2755+
2756+ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
2757+ USE_NLS=yes
2758+ fi
2759+ # Export the build objects.
2760+ for ling in $ALL_LINGUAS; do \
2761+ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
2762+ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
2763+ done
2764+
2765+
2766+
2767+ CLOCALE_H=config/locale/uclibc/c_locale.h
2768+ CLOCALE_CC=config/locale/uclibc/c_locale.cc
2769+ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
2770+ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
2771+ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
2772+ CMESSAGES_H=config/locale/uclibc/messages_members.h
2773+ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
2774+ CMONEY_CC=config/locale/uclibc/monetary_members.cc
2775+ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
2776+ CTIME_H=config/locale/uclibc/time_members.h
2777+ CTIME_CC=config/locale/uclibc/time_members.cc
2778+ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
2779+ ;;
2780 esac
2781
2782 # This is where the testsuite looks for locale catalogs, using the
2783Index: gcc-4_7-branch/libstdc++-v3/include/c_compatibility/wchar.h
2784===================================================================
2785--- gcc-4_7-branch.orig/libstdc++-v3/include/c_compatibility/wchar.h 2012-04-10 10:19:50.303337124 -0700
2786+++ gcc-4_7-branch/libstdc++-v3/include/c_compatibility/wchar.h 2012-04-10 10:30:37.347368481 -0700
2787@@ -101,7 +101,9 @@
2788 using std::wmemcpy;
2789 using std::wmemmove;
2790 using std::wmemset;
2791+#if _GLIBCXX_HAVE_WCSFTIME
2792 using std::wcsftime;
2793+#endif
2794
2795 #if _GLIBCXX_USE_C99
2796 using std::wcstold;
2797Index: gcc-4_7-branch/libstdc++-v3/include/c_std/cwchar
2798===================================================================
2799--- gcc-4_7-branch.orig/libstdc++-v3/include/c_std/cwchar 2012-04-10 10:19:50.295337124 -0700
2800+++ gcc-4_7-branch/libstdc++-v3/include/c_std/cwchar 2012-04-10 10:30:37.347368481 -0700
2801@@ -177,7 +177,9 @@
2802 using ::wcscoll;
2803 using ::wcscpy;
2804 using ::wcscspn;
2805+#if _GLIBCXX_HAVE_WCSFTIME
2806 using ::wcsftime;
2807+#endif
2808 using ::wcslen;
2809 using ::wcsncat;
2810 using ::wcsncmp;
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/203-uclibc-locale-no__x.patch b/meta/recipes-devtools/gcc/gcc-4.7/203-uclibc-locale-no__x.patch
new file mode 100644
index 0000000000..c602e913e9
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/203-uclibc-locale-no__x.patch
@@ -0,0 +1,235 @@
1Upstream-Status: Pending
2
3Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
4===================================================================
5--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
6+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
7@@ -60,4 +60,49 @@ extern "C" __typeof(wcsxfrm_l) __wcsxfrm
8 extern "C" __typeof(wctype_l) __wctype_l;
9 #endif
10
11+# define __nl_langinfo_l nl_langinfo_l
12+# define __strcoll_l strcoll_l
13+# define __strftime_l strftime_l
14+# define __strtod_l strtod_l
15+# define __strtof_l strtof_l
16+# define __strtold_l strtold_l
17+# define __strxfrm_l strxfrm_l
18+# define __newlocale newlocale
19+# define __freelocale freelocale
20+# define __duplocale duplocale
21+# define __uselocale uselocale
22+
23+# ifdef _GLIBCXX_USE_WCHAR_T
24+# define __iswctype_l iswctype_l
25+# define __towlower_l towlower_l
26+# define __towupper_l towupper_l
27+# define __wcscoll_l wcscoll_l
28+# define __wcsftime_l wcsftime_l
29+# define __wcsxfrm_l wcsxfrm_l
30+# define __wctype_l wctype_l
31+# endif
32+
33+#else
34+# define __nl_langinfo_l(N, L) nl_langinfo((N))
35+# define __strcoll_l(S1, S2, L) strcoll((S1), (S2))
36+# define __strtod_l(S, E, L) strtod((S), (E))
37+# define __strtof_l(S, E, L) strtof((S), (E))
38+# define __strtold_l(S, E, L) strtold((S), (E))
39+# define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N))
40+# warning should dummy __newlocale check for C|POSIX ?
41+# define __newlocale(a, b, c) NULL
42+# define __freelocale(a) ((void)0)
43+# define __duplocale(a) __c_locale()
44+//# define __uselocale ?
45+//
46+# ifdef _GLIBCXX_USE_WCHAR_T
47+# define __iswctype_l(C, M, L) iswctype((C), (M))
48+# define __towlower_l(C, L) towlower((C))
49+# define __towupper_l(C, L) towupper((C))
50+# define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2))
51+//# define __wcsftime_l(S, M, F, T, L) wcsftime((S), (M), (F), (T))
52+# define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N))
53+# define __wctype_l(S, L) wctype((S))
54+# endif
55+
56 #endif // GLIBC 2.3 and later
57Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
58===================================================================
59--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/c_locale.cc
60+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
61@@ -39,20 +39,6 @@
62 #include <langinfo.h>
63 #include <bits/c++locale_internal.h>
64
65-#ifndef __UCLIBC_HAS_XLOCALE__
66-#define __strtol_l(S, E, B, L) strtol((S), (E), (B))
67-#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B))
68-#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B))
69-#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B))
70-#define __strtof_l(S, E, L) strtof((S), (E))
71-#define __strtod_l(S, E, L) strtod((S), (E))
72-#define __strtold_l(S, E, L) strtold((S), (E))
73-#warning should dummy __newlocale check for C|POSIX ?
74-#define __newlocale(a, b, c) NULL
75-#define __freelocale(a) ((void)0)
76-#define __duplocale(a) __c_locale()
77-#endif
78-
79 namespace std
80 {
81 template<>
82Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/collate_members.cc
83===================================================================
84--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/collate_members.cc
85+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/collate_members.cc
86@@ -36,13 +36,6 @@
87 #include <locale>
88 #include <bits/c++locale_internal.h>
89
90-#ifndef __UCLIBC_HAS_XLOCALE__
91-#define __strcoll_l(S1, S2, L) strcoll((S1), (S2))
92-#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N))
93-#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2))
94-#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N))
95-#endif
96-
97 namespace std
98 {
99 // These are basically extensions to char_traits, and perhaps should
100Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
101===================================================================
102--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/monetary_members.cc
103+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
104@@ -43,10 +43,6 @@
105 #warning tailor for stub locale support
106 #endif
107
108-#ifndef __UCLIBC_HAS_XLOCALE__
109-#define __nl_langinfo_l(N, L) nl_langinfo((N))
110-#endif
111-
112 namespace std
113 {
114 // Construct and return valid pattern consisting of some combination of:
115Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
116===================================================================
117--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/numeric_members.cc
118+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
119@@ -41,9 +41,6 @@
120 #ifdef __UCLIBC_MJN3_ONLY__
121 #warning tailor for stub locale support
122 #endif
123-#ifndef __UCLIBC_HAS_XLOCALE__
124-#define __nl_langinfo_l(N, L) nl_langinfo((N))
125-#endif
126
127 namespace std
128 {
129Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.cc
130===================================================================
131--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/time_members.cc
132+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.cc
133@@ -40,9 +40,6 @@
134 #ifdef __UCLIBC_MJN3_ONLY__
135 #warning tailor for stub locale support
136 #endif
137-#ifndef __UCLIBC_HAS_XLOCALE__
138-#define __nl_langinfo_l(N, L) nl_langinfo((N))
139-#endif
140
141 namespace std
142 {
143Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
144===================================================================
145--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/ctype_members.cc
146+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
147@@ -38,13 +38,6 @@
148 #undef _LIBC
149 #include <bits/c++locale_internal.h>
150
151-#ifndef __UCLIBC_HAS_XLOCALE__
152-#define __wctype_l(S, L) wctype((S))
153-#define __towupper_l(C, L) towupper((C))
154-#define __towlower_l(C, L) towlower((C))
155-#define __iswctype_l(C, M, L) iswctype((C), (M))
156-#endif
157-
158 namespace std
159 {
160 // NB: The other ctype<char> specializations are in src/locale.cc and
161Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.cc
162===================================================================
163--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/messages_members.cc
164+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.cc
165@@ -39,13 +39,10 @@
166 #ifdef __UCLIBC_MJN3_ONLY__
167 #warning fix gettext stuff
168 #endif
169-#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
170-extern "C" char *__dcgettext(const char *domainname,
171- const char *msgid, int category);
172 #undef gettext
173-#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
174+#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
175+#define gettext(msgid) dcgettext(NULL, msgid, LC_MESSAGES)
176 #else
177-#undef gettext
178 #define gettext(msgid) (msgid)
179 #endif
180
181Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.h
182===================================================================
183--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/messages_members.h
184+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.h
185@@ -36,15 +36,11 @@
186 #ifdef __UCLIBC_MJN3_ONLY__
187 #warning fix prototypes for *textdomain funcs
188 #endif
189-#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
190-extern "C" char *__textdomain(const char *domainname);
191-extern "C" char *__bindtextdomain(const char *domainname,
192- const char *dirname);
193-#else
194-#undef __textdomain
195-#undef __bindtextdomain
196-#define __textdomain(D) ((void)0)
197-#define __bindtextdomain(D,P) ((void)0)
198+#ifndef __UCLIBC_HAS_GETTEXT_AWARENESS__
199+#undef textdomain
200+#undef bindtextdomain
201+#define textdomain(D) ((void)0)
202+#define bindtextdomain(D,P) ((void)0)
203 #endif
204
205 // Non-virtual member functions.
206@@ -70,7 +66,7 @@ extern "C" char *__bindtextdomain(const
207 messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
208 const char* __dir) const
209 {
210- __bindtextdomain(__s.c_str(), __dir);
211+ bindtextdomain(__s.c_str(), __dir);
212 return this->do_open(__s, __loc);
213 }
214
215@@ -90,7 +86,7 @@ extern "C" char *__bindtextdomain(const
216 {
217 // No error checking is done, assume the catalog exists and can
218 // be used.
219- __textdomain(__s.c_str());
220+ textdomain(__s.c_str());
221 return 0;
222 }
223
224Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.h
225===================================================================
226--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/c_locale.h
227+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.h
228@@ -68,6 +68,7 @@ namespace __gnu_cxx
229 {
230 extern "C" __typeof(uselocale) __uselocale;
231 }
232+#define __uselocale uselocale
233 #endif
234
235 namespace std
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/204-uclibc-locale-wchar_fix.patch b/meta/recipes-devtools/gcc/gcc-4.7/204-uclibc-locale-wchar_fix.patch
new file mode 100644
index 0000000000..896d2a57c7
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/204-uclibc-locale-wchar_fix.patch
@@ -0,0 +1,54 @@
1Upstream-Status: Pending
2
3Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
4===================================================================
5--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/monetary_members.cc
6+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
7@@ -401,7 +401,7 @@ namespace std
8 # ifdef __UCLIBC_HAS_XLOCALE__
9 _M_data->_M_decimal_point = __cloc->decimal_point_wc;
10 _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
11-# else
12+# elif defined __UCLIBC_HAS_LOCALE__
13 _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
14 _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
15 # endif
16@@ -556,7 +556,7 @@ namespace std
17 # ifdef __UCLIBC_HAS_XLOCALE__
18 _M_data->_M_decimal_point = __cloc->decimal_point_wc;
19 _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
20-# else
21+# elif defined __UCLIBC_HAS_LOCALE__
22 _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
23 _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
24 # endif
25Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
26===================================================================
27--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/numeric_members.cc
28+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
29@@ -127,12 +127,25 @@ namespace std
30 {
31 // Named locale.
32 // NB: In the GNU model wchar_t is always 32 bit wide.
33+#ifdef __UCLIBC_MJN3_ONLY__
34+#warning fix this... should be numeric
35+#endif
36+#ifdef __UCLIBC__
37+# ifdef __UCLIBC_HAS_XLOCALE__
38+ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
39+ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
40+# elif defined __UCLIBC_HAS_LOCALE__
41+ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
42+ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
43+# endif
44+#else
45 union { char *__s; wchar_t __w; } __u;
46 __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
47 _M_data->_M_decimal_point = __u.__w;
48
49 __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
50 _M_data->_M_thousands_sep = __u.__w;
51+#endif
52
53 if (_M_data->_M_thousands_sep == L'\0')
54 _M_data->_M_grouping = "";
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/205-uclibc-locale-update.patch b/meta/recipes-devtools/gcc/gcc-4.7/205-uclibc-locale-update.patch
new file mode 100644
index 0000000000..743017b4d3
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/205-uclibc-locale-update.patch
@@ -0,0 +1,521 @@
1Upstream-Status: Pending
2
3Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
4===================================================================
5--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/c_locale.cc
6+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
7@@ -39,23 +39,20 @@
8 #include <langinfo.h>
9 #include <bits/c++locale_internal.h>
10
11-namespace std
12-{
13+_GLIBCXX_BEGIN_NAMESPACE(std)
14+
15 template<>
16 void
17 __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
18 const __c_locale& __cloc)
19 {
20- if (!(__err & ios_base::failbit))
21- {
22- char* __sanity;
23- errno = 0;
24- float __f = __strtof_l(__s, &__sanity, __cloc);
25- if (__sanity != __s && errno != ERANGE)
26- __v = __f;
27- else
28- __err |= ios_base::failbit;
29- }
30+ char* __sanity;
31+ errno = 0;
32+ float __f = __strtof_l(__s, &__sanity, __cloc);
33+ if (__sanity != __s && errno != ERANGE)
34+ __v = __f;
35+ else
36+ __err |= ios_base::failbit;
37 }
38
39 template<>
40@@ -63,16 +60,13 @@ namespace std
41 __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
42 const __c_locale& __cloc)
43 {
44- if (!(__err & ios_base::failbit))
45- {
46- char* __sanity;
47- errno = 0;
48- double __d = __strtod_l(__s, &__sanity, __cloc);
49- if (__sanity != __s && errno != ERANGE)
50- __v = __d;
51- else
52- __err |= ios_base::failbit;
53- }
54+ char* __sanity;
55+ errno = 0;
56+ double __d = __strtod_l(__s, &__sanity, __cloc);
57+ if (__sanity != __s && errno != ERANGE)
58+ __v = __d;
59+ else
60+ __err |= ios_base::failbit;
61 }
62
63 template<>
64@@ -80,16 +74,13 @@ namespace std
65 __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
66 const __c_locale& __cloc)
67 {
68- if (!(__err & ios_base::failbit))
69- {
70- char* __sanity;
71- errno = 0;
72- long double __ld = __strtold_l(__s, &__sanity, __cloc);
73- if (__sanity != __s && errno != ERANGE)
74- __v = __ld;
75- else
76- __err |= ios_base::failbit;
77- }
78+ char* __sanity;
79+ errno = 0;
80+ long double __ld = __strtold_l(__s, &__sanity, __cloc);
81+ if (__sanity != __s && errno != ERANGE)
82+ __v = __ld;
83+ else
84+ __err |= ios_base::failbit;
85 }
86
87 void
88@@ -110,17 +101,18 @@ namespace std
89 void
90 locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
91 {
92- if (_S_get_c_locale() != __cloc)
93+ if (__cloc && _S_get_c_locale() != __cloc)
94 __freelocale(__cloc);
95 }
96
97 __c_locale
98 locale::facet::_S_clone_c_locale(__c_locale& __cloc)
99 { return __duplocale(__cloc); }
100-} // namespace std
101
102-namespace __gnu_cxx
103-{
104+_GLIBCXX_END_NAMESPACE
105+
106+_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
107+
108 const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
109 {
110 "LC_CTYPE",
111@@ -138,9 +130,11 @@ namespace __gnu_cxx
112 "LC_IDENTIFICATION"
113 #endif
114 };
115-}
116
117-namespace std
118-{
119+_GLIBCXX_END_NAMESPACE
120+
121+_GLIBCXX_BEGIN_NAMESPACE(std)
122+
123 const char* const* const locale::_S_categories = __gnu_cxx::category_names;
124-} // namespace std
125+
126+_GLIBCXX_END_NAMESPACE
127Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
128===================================================================
129--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/ctype_members.cc
130+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
131@@ -33,16 +33,20 @@
132
133 // Written by Benjamin Kosnik <bkoz@redhat.com>
134
135+#include <features.h>
136+#ifdef __UCLIBC_HAS_LOCALE__
137 #define _LIBC
138 #include <locale>
139 #undef _LIBC
140+#else
141+#include <locale>
142+#endif
143 #include <bits/c++locale_internal.h>
144
145-namespace std
146-{
147+_GLIBCXX_BEGIN_NAMESPACE(std)
148+
149 // NB: The other ctype<char> specializations are in src/locale.cc and
150 // various /config/os/* files.
151- template<>
152 ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
153 : ctype<char>(0, false, __refs)
154 {
155@@ -57,6 +61,8 @@ namespace std
156 #endif
157 }
158 }
159+ ctype_byname<char>::~ctype_byname()
160+ { }
161
162 #ifdef _GLIBCXX_USE_WCHAR_T
163 ctype<wchar_t>::__wmask_type
164@@ -138,17 +144,33 @@ namespace std
165 ctype<wchar_t>::
166 do_is(mask __m, wchar_t __c) const
167 {
168- // Highest bitmask in ctype_base == 10, but extra in "C"
169- // library for blank.
170+ // The case of __m == ctype_base::space is particularly important,
171+ // due to its use in many istream functions. Therefore we deal with
172+ // it first, exploiting the knowledge that on GNU systems _M_bit[5]
173+ // is the mask corresponding to ctype_base::space. NB: an encoding
174+ // change would not affect correctness!
175+
176 bool __ret = false;
177- const size_t __bitmasksize = 11;
178- for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
179- if (__m & _M_bit[__bitcur]
180- && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
181- {
182- __ret = true;
183- break;
184- }
185+ if (__m == _M_bit[5])
186+ __ret = __iswctype_l(__c, _M_wmask[5], _M_c_locale_ctype);
187+ else
188+ {
189+ // Highest bitmask in ctype_base == 10, but extra in "C"
190+ // library for blank.
191+ const size_t __bitmasksize = 11;
192+ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
193+ if (__m & _M_bit[__bitcur])
194+ {
195+ if (__iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
196+ {
197+ __ret = true;
198+ break;
199+ }
200+ else if (__m == _M_bit[__bitcur])
201+ break;
202+ }
203+ }
204+
205 return __ret;
206 }
207
208@@ -290,4 +312,5 @@ namespace std
209 #endif
210 }
211 #endif // _GLIBCXX_USE_WCHAR_T
212-}
213+
214+_GLIBCXX_END_NAMESPACE
215Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.h
216===================================================================
217--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/messages_members.h
218+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.h
219@@ -53,12 +53,16 @@
220 template<typename _CharT>
221 messages<_CharT>::messages(__c_locale __cloc, const char* __s,
222 size_t __refs)
223- : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
224- _M_name_messages(__s)
225+ : facet(__refs), _M_c_locale_messages(NULL),
226+ _M_name_messages(NULL)
227 {
228- char* __tmp = new char[std::strlen(__s) + 1];
229- std::strcpy(__tmp, __s);
230+ const size_t __len = std::strlen(__s) + 1;
231+ char* __tmp = new char[__len];
232+ std::memcpy(__tmp, __s, __len);
233 _M_name_messages = __tmp;
234+
235+ // Last to avoid leaking memory if new throws.
236+ _M_c_locale_messages = _S_clone_c_locale(__cloc);
237 }
238
239 template<typename _CharT>
240Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
241===================================================================
242--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/monetary_members.cc
243+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
244@@ -33,9 +33,14 @@
245
246 // Written by Benjamin Kosnik <bkoz@redhat.com>
247
248+#include <features.h>
249+#ifdef __UCLIBC_HAS_LOCALE__
250 #define _LIBC
251 #include <locale>
252 #undef _LIBC
253+#else
254+#include <locale>
255+#endif
256 #include <bits/c++locale_internal.h>
257
258 #ifdef __UCLIBC_MJN3_ONLY__
259@@ -206,7 +211,7 @@ namespace std
260 }
261 break;
262 default:
263- ;
264+ __ret = pattern();
265 }
266 return __ret;
267 }
268@@ -390,7 +395,9 @@ namespace std
269 __c_locale __old = __uselocale(__cloc);
270 #else
271 // Switch to named locale so that mbsrtowcs will work.
272- char* __old = strdup(setlocale(LC_ALL, NULL));
273+ char* __old = setlocale(LC_ALL, NULL);
274+ const size_t __llen = strlen(__old) + 1;
275+ char* __sav = new char[__llen];
276 setlocale(LC_ALL, __name);
277 #endif
278
279@@ -477,8 +484,8 @@ namespace std
280 #ifdef __UCLIBC_HAS_XLOCALE__
281 __uselocale(__old);
282 #else
283- setlocale(LC_ALL, __old);
284- free(__old);
285+ setlocale(LC_ALL, __sav);
286+ delete [] __sav;
287 #endif
288 __throw_exception_again;
289 }
290@@ -498,8 +505,8 @@ namespace std
291 #ifdef __UCLIBC_HAS_XLOCALE__
292 __uselocale(__old);
293 #else
294- setlocale(LC_ALL, __old);
295- free(__old);
296+ setlocale(LC_ALL, __sav);
297+ delete [] __sav;
298 #endif
299 }
300 }
301@@ -545,8 +552,11 @@ namespace std
302 __c_locale __old = __uselocale(__cloc);
303 #else
304 // Switch to named locale so that mbsrtowcs will work.
305- char* __old = strdup(setlocale(LC_ALL, NULL));
306- setlocale(LC_ALL, __name);
307+ char* __old = setlocale(LC_ALL, NULL);
308+ const size_t __llen = strlen(__old) + 1;
309+ char* __sav = new char[__llen];
310+ memcpy(__sav, __old, __llen);
311+ setlocale(LC_ALL, __name);
312 #endif
313
314 #ifdef __UCLIBC_MJN3_ONLY__
315@@ -633,8 +643,8 @@ namespace std
316 #ifdef __UCLIBC_HAS_XLOCALE__
317 __uselocale(__old);
318 #else
319- setlocale(LC_ALL, __old);
320- free(__old);
321+ setlocale(LC_ALL, __sav);
322+ delete [] __sav;
323 #endif
324 __throw_exception_again;
325 }
326@@ -653,8 +663,8 @@ namespace std
327 #ifdef __UCLIBC_HAS_XLOCALE__
328 __uselocale(__old);
329 #else
330- setlocale(LC_ALL, __old);
331- free(__old);
332+ setlocale(LC_ALL, __sav);
333+ delete [] __sav;
334 #endif
335 }
336 }
337Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
338===================================================================
339--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/numeric_members.cc
340+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
341@@ -33,9 +33,14 @@
342
343 // Written by Benjamin Kosnik <bkoz@redhat.com>
344
345+#include <features.h>
346+#ifdef __UCLIBC_HAS_LOCALE__
347 #define _LIBC
348 #include <locale>
349 #undef _LIBC
350+#else
351+#include <locale>
352+#endif
353 #include <bits/c++locale_internal.h>
354
355 #ifdef __UCLIBC_MJN3_ONLY__
356Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.h
357===================================================================
358--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/time_members.h
359+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.h
360@@ -50,12 +50,21 @@
361 __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
362 size_t __refs)
363 : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
364- _M_name_timepunct(__s)
365+ _M_name_timepunct(NULL)
366 {
367- char* __tmp = new char[std::strlen(__s) + 1];
368- std::strcpy(__tmp, __s);
369+ const size_t __len = std::strlen(__s) + 1;
370+ char* __tmp = new char[__len];
371+ std::memcpy(__tmp, __s, __len);
372 _M_name_timepunct = __tmp;
373- _M_initialize_timepunct(__cloc);
374+
375+ try
376+ { _M_initialize_timepunct(__cloc); }
377+ catch(...)
378+ {
379+ delete [] _M_name_timepunct;
380+ __throw_exception_again;
381+ }
382+
383 }
384
385 template<typename _CharT>
386Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.h
387===================================================================
388--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/c_locale.h
389+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.h
390@@ -39,21 +39,23 @@
391 #pragma GCC system_header
392
393 #include <cstring> // get std::strlen
394-#include <cstdio> // get std::snprintf or std::sprintf
395+#include <cstdio> // get std::vsnprintf or std::vsprintf
396 #include <clocale>
397 #include <langinfo.h> // For codecvt
398 #ifdef __UCLIBC_MJN3_ONLY__
399 #warning fix this
400 #endif
401-#ifdef __UCLIBC_HAS_LOCALE__
402+#ifdef _GLIBCXX_USE_ICONV
403 #include <iconv.h> // For codecvt using iconv, iconv_t
404 #endif
405-#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
406-#include <libintl.h> // For messages
407+#ifdef HAVE_LIBINTL_H
408+#include <libintl.h> // For messages
409 #endif
410+#include <cstdarg>
411
412 #ifdef __UCLIBC_MJN3_ONLY__
413 #warning what is _GLIBCXX_C_LOCALE_GNU for
414+// psm: used in os/gnu-linux/ctype_noninline.h
415 #endif
416 #define _GLIBCXX_C_LOCALE_GNU 1
417
418@@ -78,23 +80,25 @@ namespace std
419 #else
420 typedef int* __c_locale;
421 #endif
422-
423- // Convert numeric value of type _Tv to string and return length of
424- // string. If snprintf is available use it, otherwise fall back to
425- // the unsafe sprintf which, in general, can be dangerous and should
426+ // Convert numeric value of type double to string and return length of
427+ // string. If vsnprintf is available use it, otherwise fall back to
428+ // the unsafe vsprintf which, in general, can be dangerous and should
429 // be avoided.
430- template<typename _Tv>
431- int
432- __convert_from_v(char* __out,
433- const int __size __attribute__ ((__unused__)),
434- const char* __fmt,
435-#ifdef __UCLIBC_HAS_XCLOCALE__
436- _Tv __v, const __c_locale& __cloc, int __prec)
437+ inline int
438+ __convert_from_v(const __c_locale&
439+#ifndef __UCLIBC_HAS_XCLOCALE__
440+ __cloc __attribute__ ((__unused__))
441+#endif
442+ ,
443+ char* __out,
444+ const int __size,
445+ const char* __fmt, ...)
446 {
447+ va_list __args;
448+#ifdef __UCLIBC_HAS_XCLOCALE__
449+
450 __c_locale __old = __gnu_cxx::__uselocale(__cloc);
451 #else
452- _Tv __v, const __c_locale&, int __prec)
453- {
454 # ifdef __UCLIBC_HAS_LOCALE__
455 char* __old = std::setlocale(LC_ALL, NULL);
456 char* __sav = new char[std::strlen(__old) + 1];
457@@ -103,7 +107,9 @@ namespace std
458 # endif
459 #endif
460
461- const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
462+ va_start(__args, __fmt);
463+ const int __ret = std::vsnprintf(__out, __size, __fmt, __args);
464+ va_end(__args);
465
466 #ifdef __UCLIBC_HAS_XCLOCALE__
467 __gnu_cxx::__uselocale(__old);
468Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.cc
469===================================================================
470--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/time_members.cc
471+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.cc
472@@ -53,11 +53,14 @@ namespace std
473 const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
474 _M_c_locale_timepunct);
475 #else
476- char* __old = strdup(setlocale(LC_ALL, NULL));
477+ char* __old = setlocale(LC_ALL, NULL);
478+ const size_t __llen = strlen(__old) + 1;
479+ char* __sav = new char[__llen];
480+ memcpy(__sav, __old, __llen);
481 setlocale(LC_ALL, _M_name_timepunct);
482 const size_t __len = strftime(__s, __maxlen, __format, __tm);
483- setlocale(LC_ALL, __old);
484- free(__old);
485+ setlocale(LC_ALL, __sav);
486+ delete [] __sav;
487 #endif
488 // Make sure __s is null terminated.
489 if (__len == 0)
490@@ -207,11 +210,14 @@ namespace std
491 const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
492 _M_c_locale_timepunct);
493 #else
494- char* __old = strdup(setlocale(LC_ALL, NULL));
495+ char* __old = setlocale(LC_ALL, NULL);
496+ const size_t __llen = strlen(__old) + 1;
497+ char* __sav = new char[__llen];
498+ memcpy(__sav, __old, __llen);
499 setlocale(LC_ALL, _M_name_timepunct);
500 const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
501- setlocale(LC_ALL, __old);
502- free(__old);
503+ setlocale(LC_ALL, __sav);
504+ delete [] __sav;
505 #endif
506 // Make sure __s is null terminated.
507 if (__len == 0)
508Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
509===================================================================
510--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
511+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
512@@ -31,6 +31,9 @@
513
514 #include <bits/c++config.h>
515 #include <clocale>
516+#include <cstdlib>
517+#include <cstring>
518+#include <cstddef>
519
520 #ifdef __UCLIBC_MJN3_ONLY__
521 #warning clean this up
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/301-missing-execinfo_h.patch b/meta/recipes-devtools/gcc/gcc-4.7/301-missing-execinfo_h.patch
new file mode 100644
index 0000000000..9589822b8d
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/301-missing-execinfo_h.patch
@@ -0,0 +1,15 @@
1Upstream-Status: Pending
2
3Index: gcc-4.6.0/boehm-gc/include/gc.h
4===================================================================
5--- gcc-4.6.0.orig/boehm-gc/include/gc.h
6+++ gcc-4.6.0/boehm-gc/include/gc.h
7@@ -503,7 +503,7 @@ GC_API GC_PTR GC_malloc_atomic_ignore_of
8 #if defined(__linux__) || defined(__GLIBC__)
9 # include <features.h>
10 # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \
11- && !defined(__ia64__)
12+ && !defined(__ia64__) && !defined(__UCLIBC__)
13 # ifndef GC_HAVE_BUILTIN_BACKTRACE
14 # define GC_HAVE_BUILTIN_BACKTRACE
15 # endif
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/302-c99-snprintf.patch b/meta/recipes-devtools/gcc/gcc-4.7/302-c99-snprintf.patch
new file mode 100644
index 0000000000..9becc15e11
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/302-c99-snprintf.patch
@@ -0,0 +1,15 @@
1Upstream-Status: Pending
2
3Index: gcc-4_7-branch/libstdc++-v3/include/c_std/cstdio
4===================================================================
5--- gcc-4_7-branch.orig/libstdc++-v3/include/c_std/cstdio 2012-04-10 10:19:49.603337089 -0700
6+++ gcc-4_7-branch/libstdc++-v3/include/c_std/cstdio 2012-04-10 10:30:59.863369565 -0700
7@@ -140,7 +140,7 @@
8 using ::vsprintf;
9 } // namespace std
10
11-#if _GLIBCXX_USE_C99
12+#if _GLIBCXX_USE_C99 || defined(__UCLIBC__)
13
14 #undef snprintf
15 #undef vfscanf
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/303-c99-complex-ugly-hack.patch b/meta/recipes-devtools/gcc/gcc-4.7/303-c99-complex-ugly-hack.patch
new file mode 100644
index 0000000000..d69c54696a
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/303-c99-complex-ugly-hack.patch
@@ -0,0 +1,16 @@
1Upstream-Status: Inappropriate [embedded specific]
2
3Index: gcc-4_7-branch/libstdc++-v3/configure
4===================================================================
5--- gcc-4_7-branch.orig/libstdc++-v3/configure 2012-04-10 10:30:37.347368481 -0700
6+++ gcc-4_7-branch/libstdc++-v3/configure 2012-04-10 10:31:22.787370652 -0700
7@@ -18767,6 +18767,9 @@
8 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
9 /* end confdefs.h. */
10 #include <complex.h>
11+#ifdef __UCLIBC__
12+#error ugly hack to make sure configure test fails here for cross until uClibc supports the complex funcs
13+#endif
14 int
15 main ()
16 {
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/304-index_macro.patch b/meta/recipes-devtools/gcc/gcc-4.7/304-index_macro.patch
new file mode 100644
index 0000000000..f103765233
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/304-index_macro.patch
@@ -0,0 +1,30 @@
1Upstream-Status: Pending
2
3Index: gcc-4.6.0/libstdc++-v3/include/ext/rope
4===================================================================
5--- gcc-4.6.0.orig/libstdc++-v3/include/ext/rope
6+++ gcc-4.6.0/libstdc++-v3/include/ext/rope
7@@ -54,6 +54,9 @@
8 #include <bits/gthr.h>
9 #include <tr1/functional>
10
11+/* cope w/ index defined as macro, SuSv3 proposal */
12+#undef index
13+
14 # ifdef __GC
15 # define __GC_CONST const
16 # else
17Index: gcc-4.6.0/libstdc++-v3/include/ext/ropeimpl.h
18===================================================================
19--- gcc-4.6.0.orig/libstdc++-v3/include/ext/ropeimpl.h
20+++ gcc-4.6.0/libstdc++-v3/include/ext/ropeimpl.h
21@@ -49,6 +49,9 @@
22 #include <ext/memory> // For uninitialized_copy_n
23 #include <ext/numeric> // For power
24
25+/* cope w/ index defined as macro, SuSv3 proposal */
26+#undef index
27+
28 namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
29 {
30 _GLIBCXX_BEGIN_NAMESPACE_VERSION
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/305-libmudflap-susv3-legacy.patch b/meta/recipes-devtools/gcc/gcc-4.7/305-libmudflap-susv3-legacy.patch
new file mode 100644
index 0000000000..10d09a7fb9
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/305-libmudflap-susv3-legacy.patch
@@ -0,0 +1,51 @@
1Upstream-Status: Inappropriate [embedded specific]
2
3Index: gcc-4_7-branch/libmudflap/mf-hooks2.c
4===================================================================
5--- gcc-4_7-branch.orig/libmudflap/mf-hooks2.c 2012-04-10 10:19:49.391337079 -0700
6+++ gcc-4_7-branch/libmudflap/mf-hooks2.c 2012-04-10 10:31:53.191372119 -0700
7@@ -424,7 +424,7 @@
8 {
9 TRACE ("%s\n", __PRETTY_FUNCTION__);
10 MF_VALIDATE_EXTENT(s, n, __MF_CHECK_WRITE, "bzero region");
11- bzero (s, n);
12+ memset (s, 0, n);
13 }
14
15
16@@ -434,7 +434,7 @@
17 TRACE ("%s\n", __PRETTY_FUNCTION__);
18 MF_VALIDATE_EXTENT(src, n, __MF_CHECK_READ, "bcopy src");
19 MF_VALIDATE_EXTENT(dest, n, __MF_CHECK_WRITE, "bcopy dest");
20- bcopy (src, dest, n);
21+ memmove (dest, src, n);
22 }
23
24
25@@ -444,7 +444,7 @@
26 TRACE ("%s\n", __PRETTY_FUNCTION__);
27 MF_VALIDATE_EXTENT(s1, n, __MF_CHECK_READ, "bcmp 1st arg");
28 MF_VALIDATE_EXTENT(s2, n, __MF_CHECK_READ, "bcmp 2nd arg");
29- return bcmp (s1, s2, n);
30+ return n == 0 ? 0 : memcmp (s1, s2, n);
31 }
32
33
34@@ -453,7 +453,7 @@
35 size_t n = strlen (s);
36 TRACE ("%s\n", __PRETTY_FUNCTION__);
37 MF_VALIDATE_EXTENT(s, CLAMPADD(n, 1), __MF_CHECK_READ, "index region");
38- return index (s, c);
39+ return strchr (s, c);
40 }
41
42
43@@ -462,7 +462,7 @@
44 size_t n = strlen (s);
45 TRACE ("%s\n", __PRETTY_FUNCTION__);
46 MF_VALIDATE_EXTENT(s, CLAMPADD(n, 1), __MF_CHECK_READ, "rindex region");
47- return rindex (s, c);
48+ return strrchr (s, c);
49 }
50
51 /* XXX: stpcpy, memccpy */
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/306-libstdc++-namespace.patch b/meta/recipes-devtools/gcc/gcc-4.7/306-libstdc++-namespace.patch
new file mode 100644
index 0000000000..e99bf9602d
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/306-libstdc++-namespace.patch
@@ -0,0 +1,40 @@
1Upstream-Status: Pending
2
3Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.h
4===================================================================
5--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/messages_members.h
6+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.h
7@@ -32,7 +32,8 @@
8 //
9
10 // Written by Benjamin Kosnik <bkoz@redhat.com>
11-
12+namespace std
13+{
14 #ifdef __UCLIBC_MJN3_ONLY__
15 #warning fix prototypes for *textdomain funcs
16 #endif
17@@ -116,3 +117,4 @@
18 this->_S_create_c_locale(this->_M_c_locale_messages, __s);
19 }
20 }
21+}
22Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.h
23===================================================================
24--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/time_members.h
25+++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.h
26@@ -33,7 +33,8 @@
27 //
28
29 // Written by Benjamin Kosnik <bkoz@redhat.com>
30-
31+namespace std
32+{
33 template<typename _CharT>
34 __timepunct<_CharT>::__timepunct(size_t __refs)
35 : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
36@@ -75,3 +76,4 @@
37 delete _M_data;
38 _S_destroy_c_locale(_M_c_locale_timepunct);
39 }
40+}
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch b/meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch
new file mode 100644
index 0000000000..f47566951b
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch
@@ -0,0 +1,63 @@
1Upstream-Status: Inappropriate [embedded specific]
2
3GCC has internal multilib handling code but it assumes a very specific rigid directory
4layout. The build system implementation of multilib layout is very generic and allows
5complete customisation of the library directories.
6
7This patch is a partial solution to allow any custom directories to be passed into gcc
8and handled correctly. It forces gcc to use the base_libdir (which is the current
9directory, "."). We need to do this for each multilib that is configured as we don't
10know which compiler options may be being passed into the compiler. Since we have a compiler
11per mulitlib at this point that isn't an issue.
12
13The one problem is the target compiler is only going to work for the default multlilib at
14this point. Ideally we'd figure out which multilibs were being enabled with which paths
15and be able to patch these entries with a complete set of correct paths but this we
16don't have such code at this point. This is something the target gcc recipe should do
17and override these platform defaults in its build config.
18
19RP 15/8/11
20
21Index: trunk/gcc/config/i386/t-linux64
22===================================================================
23--- trunk.orig/gcc/config/i386/t-linux64 2012-02-22 09:44:48.000000000 -0800
24+++ trunk/gcc/config/i386/t-linux64 2012-02-22 12:31:01.836462957 -0800
25@@ -33,7 +33,6 @@
26 #
27 comma=,
28 MULTILIB_OPTIONS = $(subst $(comma),/,$(TM_MULTILIB_CONFIG))
29-MULTILIB_DIRNAMES = $(patsubst m%, %, $(subst /, ,$(MULTILIB_OPTIONS)))
30-MULTILIB_OSDIRNAMES = m64=../lib64
31-MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
32-MULTILIB_OSDIRNAMES+= mx32=../libx32
33+MULTILIB_DIRNAMES = . .
34+MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir))
35+
36Index: trunk/gcc/config/mips/t-linux64
37===================================================================
38--- trunk.orig/gcc/config/mips/t-linux64 2012-02-22 09:44:58.000000000 -0800
39+++ trunk/gcc/config/mips/t-linux64 2012-02-22 12:32:01.132465823 -0800
40@@ -17,5 +17,5 @@
41 # <http://www.gnu.org/licenses/>.
42
43 MULTILIB_OPTIONS = mabi=n32/mabi=32/mabi=64
44-MULTILIB_DIRNAMES = n32 32 64
45-MULTILIB_OSDIRNAMES = ../lib32 ../lib ../lib64
46+MULTILIB_DIRNAMES = . . .
47+MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir))
48Index: trunk/gcc/config/rs6000/t-linux64
49===================================================================
50--- trunk.orig/gcc/config/rs6000/t-linux64 2012-02-22 09:44:54.000000000 -0800
51+++ trunk/gcc/config/rs6000/t-linux64 2012-02-22 12:28:17.960454968 -0800
52@@ -27,9 +27,9 @@
53 # MULTILIB_OSDIRNAMES according to what is found on the target.
54
55 MULTILIB_OPTIONS = m64/m32 msoft-float
56-MULTILIB_DIRNAMES = 64 32 nof
57+MULTILIB_DIRNAMES = . . .
58 MULTILIB_EXTRA_OPTS = fPIC mstrict-align
59 MULTILIB_EXCEPTIONS = m64/msoft-float
60 MULTILIB_EXCLUSIONS = m64/!m32/msoft-float
61-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib) nof
62+MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir))
63 MULTILIB_MATCHES = $(MULTILIB_MATCHES_FLOAT)
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/740-sh-pr24836.patch b/meta/recipes-devtools/gcc/gcc-4.7/740-sh-pr24836.patch
new file mode 100644
index 0000000000..1406f87f1c
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/740-sh-pr24836.patch
@@ -0,0 +1,31 @@
1Upstream-Status: Pending
2
3http://sourceforge.net/mailarchive/forum.php?thread_id=8959304&forum_id=5348
4http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24836
5
6Index: gcc-4_7-branch/gcc/configure.ac
7===================================================================
8--- gcc-4_7-branch.orig/gcc/configure.ac 2012-04-10 10:22:05.787343661 -0700
9+++ gcc-4_7-branch/gcc/configure.ac 2012-04-10 10:32:18.415373343 -0700
10@@ -3065,7 +3065,7 @@
11 tls_first_minor=14
12 tls_as_opt="-m64 -Aesame --fatal-warnings"
13 ;;
14- sh-*-* | sh[34]-*-*)
15+ sh-*-* | sh[34]*-*-*)
16 conftest_s='
17 .section ".tdata","awT",@progbits
18 foo: .long 25
19Index: gcc-4_7-branch/gcc/configure
20===================================================================
21--- gcc-4_7-branch.orig/gcc/configure 2012-04-10 10:22:05.803343691 -0700
22+++ gcc-4_7-branch/gcc/configure 2012-04-10 10:32:18.419373328 -0700
23@@ -23481,7 +23481,7 @@
24 tls_first_minor=14
25 tls_as_opt="-m64 -Aesame --fatal-warnings"
26 ;;
27- sh-*-* | sh[34]-*-*)
28+ sh-*-* | sh[34]*-*-*)
29 conftest_s='
30 .section ".tdata","awT",@progbits
31 foo: .long 25
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/800-arm-bigendian.patch b/meta/recipes-devtools/gcc/gcc-4.7/800-arm-bigendian.patch
new file mode 100644
index 0000000000..ac301bd844
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/800-arm-bigendian.patch
@@ -0,0 +1,36 @@
1Upstream-Status: Pending
2
3By Lennert Buytenhek <buytenh@wantstofly.org>
4Adds support for arm*b-linux* big-endian ARM targets
5
6See http://gcc.gnu.org/PR16350
7
8Index: gcc-4_7-branch/gcc/config/arm/linux-elf.h
9===================================================================
10--- gcc-4_7-branch.orig/gcc/config/arm/linux-elf.h 2012-04-10 10:19:49.171337068 -0700
11+++ gcc-4_7-branch/gcc/config/arm/linux-elf.h 2012-04-10 10:32:36.819374226 -0700
12@@ -48,7 +48,7 @@
13
14 #undef MULTILIB_DEFAULTS
15 #define MULTILIB_DEFAULTS \
16- { "marm", "mlittle-endian", "mfloat-abi=hard", "mno-thumb-interwork" }
17+ { "marm", TARGET_ENDIAN_OPTION, "mfloat-abi=hard", "mno-thumb-interwork" }
18
19 /* Now we define the strings used to build the spec file. */
20 #undef LIB_SPEC
21Index: gcc-4_7-branch/gcc/config.gcc
22===================================================================
23--- gcc-4_7-branch.orig/gcc/config.gcc 2012-04-10 10:19:49.159337069 -0700
24+++ gcc-4_7-branch/gcc/config.gcc 2012-04-10 10:32:36.823374222 -0700
25@@ -842,6 +842,11 @@
26 esac
27 tmake_file="${tmake_file} arm/t-arm"
28 case ${target} in
29+ arm*b-*)
30+ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
31+ ;;
32+ esac
33+ case ${target} in
34 arm*-*-linux-*eabi)
35 tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
36 tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi"
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/COLLECT_GCC_OPTIONS.patch b/meta/recipes-devtools/gcc/gcc-4.7/COLLECT_GCC_OPTIONS.patch
new file mode 100644
index 0000000000..f5982983f2
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/COLLECT_GCC_OPTIONS.patch
@@ -0,0 +1,25 @@
1Upstream-Status: Pending
2
3#This patck added --sysroot into COLLECT_GCC_OPTIONS which is used to
4#invoke collect2.
5
6Index: gcc-4_7-branch/gcc/gcc.c
7===================================================================
8--- gcc-4_7-branch.orig/gcc/gcc.c 2012-04-10 10:37:49.487389409 -0700
9+++ gcc-4_7-branch/gcc/gcc.c 2012-04-10 10:38:50.831392259 -0700
10@@ -3995,6 +3995,15 @@
11 sizeof ("COLLECT_GCC_OPTIONS=") - 1);
12
13 first_time = TRUE;
14+#ifdef HAVE_LD_SYSROOT
15+ if (target_system_root_changed && target_system_root)
16+ {
17+ obstack_grow (&collect_obstack, "'--sysroot=", sizeof("'--sysroot=")-1);
18+ obstack_grow (&collect_obstack, target_system_root,strlen(target_system_root));
19+ obstack_grow (&collect_obstack, "'", 1);
20+ first_time = FALSE;
21+ }
22+#endif
23 for (i = 0; (int) i < n_switches; i++)
24 {
25 const char *const *args;
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/GLIBC_DYNAMIC_LINKER.patch b/meta/recipes-devtools/gcc/gcc-4.7/GLIBC_DYNAMIC_LINKER.patch
new file mode 100644
index 0000000000..38c361e085
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/GLIBC_DYNAMIC_LINKER.patch
@@ -0,0 +1,165 @@
1This patch defines GLIBC_DYNAMIC_LINKER and UCLIBC_DYNAMIC_LINKER
2relative to SYSTEMLIBS_DIR which can be set in generated headers
3This breaks the assumption of hardcoded multilib in gcc
4Change is only for the supported architectures in OE including
5SH, spart, alpha for possible future support (if any)
6
7Removes the do_headerfix task in metadata
8
9Signed-off-by: Khem Raj
10Upstream-Status: Inappropriate [OE configuration]
11
12Index: git/gcc/config/alpha/linux-elf.h
13===================================================================
14--- git.orig/gcc/config/alpha/linux-elf.h 2012-07-08 11:16:26.199320624 -0700
15+++ git/gcc/config/alpha/linux-elf.h 2012-07-08 11:19:51.059330624 -0700
16@@ -24,8 +24,8 @@
17 #define EXTRA_SPECS \
18 { "elf_dynamic_linker", ELF_DYNAMIC_LINKER },
19
20-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
21-#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
22+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
23+#define UCLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-uClibc.so.0"
24 #if DEFAULT_LIBC == LIBC_UCLIBC
25 #define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
26 #elif DEFAULT_LIBC == LIBC_GLIBC
27Index: git/gcc/config/arm/linux-eabi.h
28===================================================================
29--- git.orig/gcc/config/arm/linux-eabi.h 2012-07-08 11:16:26.000000000 -0700
30+++ git/gcc/config/arm/linux-eabi.h 2012-07-08 11:20:40.947333288 -0700
31@@ -62,7 +62,7 @@
32 /* Use ld-linux.so.3 so that it will be possible to run "classic"
33 GNU/Linux binaries on an EABI system. */
34 #undef GLIBC_DYNAMIC_LINKER
35-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.3"
36+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.3"
37
38 /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
39 use the GNU/Linux version, not the generic BPABI version. */
40Index: git/gcc/config/arm/linux-elf.h
41===================================================================
42--- git.orig/gcc/config/arm/linux-elf.h 2012-07-08 11:16:31.903320900 -0700
43+++ git/gcc/config/arm/linux-elf.h 2012-07-08 11:21:37.619335646 -0700
44@@ -59,7 +59,7 @@
45
46 #define LIBGCC_SPEC "-lgcc"
47
48-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
49+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
50
51 #define LINUX_TARGET_LINK_SPEC "%{h*} \
52 %{static:-Bstatic} \
53Index: git/gcc/config/i386/linux.h
54===================================================================
55--- git.orig/gcc/config/i386/linux.h 2012-07-08 11:16:26.267320627 -0700
56+++ git/gcc/config/i386/linux.h 2012-07-08 11:23:26.727340361 -0700
57@@ -21,4 +21,4 @@
58 <http://www.gnu.org/licenses/>. */
59
60 #define GNU_USER_LINK_EMULATION "elf_i386"
61-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
62+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
63Index: git/gcc/config/i386/linux64.h
64===================================================================
65--- git.orig/gcc/config/i386/linux64.h 2012-07-08 11:16:26.267320627 -0700
66+++ git/gcc/config/i386/linux64.h 2012-07-08 11:23:13.255340316 -0700
67@@ -28,6 +28,6 @@
68 #define GNU_USER_LINK_EMULATION64 "elf_x86_64"
69 #define GNU_USER_LINK_EMULATIONX32 "elf32_x86_64"
70
71-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
72-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
73-#define GLIBC_DYNAMIC_LINKERX32 "/libx32/ld-linux-x32.so.2"
74+#define GLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld-linux.so.2"
75+#define GLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld-linux-x86-64.so.2"
76+#define GLIBC_DYNAMIC_LINKERX32 SYSTEMLIBS_DIR "ld-linux-x32.so.2"
77Index: git/gcc/config/mips/linux.h
78===================================================================
79--- git.orig/gcc/config/mips/linux.h 2012-07-08 11:16:26.307320629 -0700
80+++ git/gcc/config/mips/linux.h 2012-07-08 11:23:56.063342214 -0700
81@@ -18,4 +18,4 @@
82 along with GCC; see the file COPYING3. If not see
83 <http://www.gnu.org/licenses/>. */
84
85-#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
86+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld.so.1"
87Index: git/gcc/config/mips/linux64.h
88===================================================================
89--- git.orig/gcc/config/mips/linux64.h 2012-07-08 11:16:26.307320629 -0700
90+++ git/gcc/config/mips/linux64.h 2012-07-08 11:24:52.207345073 -0700
91@@ -23,10 +23,10 @@
92 #define GNU_USER_LINK_EMULATION64 "elf64%{EB:b}%{EL:l}tsmip"
93 #define GNU_USER_LINK_EMULATIONN32 "elf32%{EB:b}%{EL:l}tsmipn32"
94
95-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
96-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld.so.1"
97-#define GLIBC_DYNAMIC_LINKERN32 "/lib32/ld.so.1"
98-#define UCLIBC_DYNAMIC_LINKERN32 "/lib32/ld-uClibc.so.0"
99+#define GLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld.so.1"
100+#define GLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld.so.1"
101+#define GLIBC_DYNAMIC_LINKERN32 SYSTEMLIBS_DIR "ld.so.1"
102+#define UCLIBC_DYNAMIC_LINKERN32 SYSTEMLIBS_DIR "ld-uClibc.so.0"
103 #define BIONIC_DYNAMIC_LINKERN32 "/system/bin/linker32"
104 #define GNU_USER_DYNAMIC_LINKERN32 \
105 CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32, \
106Index: git/gcc/config/rs6000/linux64.h
107===================================================================
108--- git.orig/gcc/config/rs6000/linux64.h 2012-07-08 11:16:26.335320630 -0700
109+++ git/gcc/config/rs6000/linux64.h 2012-07-08 11:26:05.867348369 -0700
110@@ -358,10 +358,10 @@
111 #undef LINK_OS_DEFAULT_SPEC
112 #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
113
114-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
115-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld64.so.1"
116-#define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
117-#define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
118+#define GLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld.so.1"
119+#define GLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld64.so.1"
120+#define UCLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld-uClibc.so.0"
121+#define UCLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld64-uClibc.so.0"
122 #if DEFAULT_LIBC == LIBC_UCLIBC
123 #define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
124 #elif DEFAULT_LIBC == LIBC_GLIBC
125Index: git/gcc/config/sh/linux.h
126===================================================================
127--- git.orig/gcc/config/sh/linux.h 2012-07-08 11:16:26.363320632 -0700
128+++ git/gcc/config/sh/linux.h 2012-07-08 11:26:29.375350165 -0700
129@@ -45,7 +45,7 @@
130
131 #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
132
133-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
134+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
135
136 #undef SUBTARGET_LINK_EMUL_SUFFIX
137 #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
138Index: git/gcc/config/sparc/linux.h
139===================================================================
140--- git.orig/gcc/config/sparc/linux.h 2012-07-08 11:16:26.371320632 -0700
141+++ git/gcc/config/sparc/linux.h 2012-07-08 11:27:00.439351163 -0700
142@@ -84,7 +84,7 @@
143 When the -shared link option is used a final link is not being
144 done. */
145
146-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
147+#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.2"
148
149 #undef LINK_SPEC
150 #define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
151Index: git/gcc/config/sparc/linux64.h
152===================================================================
153--- git.orig/gcc/config/sparc/linux64.h 2012-07-08 11:16:26.371320632 -0700
154+++ git/gcc/config/sparc/linux64.h 2012-07-08 11:27:23.571352396 -0700
155@@ -93,8 +93,8 @@
156 When the -shared link option is used a final link is not being
157 done. */
158
159-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
160-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux.so.2"
161+#define GLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld-linux.so.2"
162+#define GLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR "ld-linux.so.2"
163
164 #ifdef SPARC_BI_ARCH
165
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/add-install-ptest-to-Makefile.patch b/meta/recipes-devtools/gcc/gcc-4.7/add-install-ptest-to-Makefile.patch
new file mode 100644
index 0000000000..3dedde50db
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/add-install-ptest-to-Makefile.patch
@@ -0,0 +1,162 @@
1Add 'install-ptest' rule.
2
3Signed-off-by: Mihaela Sendrea <mihaela.sendrea@enea.com>
4Upstream-status: Pending
5---
6diff -uNr a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in
7--- a/libstdc++-v3/Makefile.in 2013-07-01 13:01:43.659958328 +0200
8+++ b/libstdc++-v3/Makefile.in 2013-08-23 13:22:41.962029555 +0200
9@@ -710,6 +710,26 @@
10 dvi:
11 install-dvi:
12
13+spath=$(subst /,\/,$(SOURCE_DIR))
14+bpath=$(subst /,\/,$(BUILD_DIR))
15+rpath=$(subst /,\/,$(REPLACE_DIR))
16+install-ptest:
17+ mkdir -p $(DEST_DIR)/gcc/testsuite
18+ mkdir -p $(DEST_DIR)/libstdc++-v3
19+ mkdir -p $(DEST_DIR)/contrib
20+ cp -r $(SOURCE_DIR)/libstdc++-v3/testsuite $(DEST_DIR)/libstdc++-v3
21+ cp $(SOURCE_DIR)/contrib/dg-extract-results.sh $(DEST_DIR)/contrib
22+ cp $(SOURCE_DIR)/gcc/BASE-VER $(DEST_DIR)/gcc
23+ cp -r $(SOURCE_DIR)/gcc/testsuite/lib $(DEST_DIR)/gcc/testsuite
24+ cp -r $(SOURCE_DIR)/libstdc++-v3/scripts $(DEST_DIR)/libstdc++-v3
25+ cp $(BUILD_DIR)/libstdc++-v3/scripts/* $(DEST_DIR)/libstdc++-v3/scripts
26+ cp $(BUILD_DIR)/libstdc++-v3/testsuite/Makefile $(DEST_DIR)/libstdc++-v3/testsuite
27+ cp $(BUILD_DIR)/libstdc++-v3/Makefile $(DEST_DIR)/libstdc++-v3
28+ sed -i -e 's|^Makefile:|_Makefile:|' $(DEST_DIR)/libstdc++-v3/testsuite/Makefile
29+ sed -i -e "s/$(spath)/$(rpath)/g" -e "s/$(bpath)/$(rpath)/g" $(DEST_DIR)/libstdc++-v3/testsuite/Makefile
30+ sed -i -e "s/$(spath)/$(rpath)/g" -e "s/$(bpath)/$(rpath)/g" $(DEST_DIR)/libstdc++-v3/Makefile
31+ sed -i -e 's/RUNTESTDEFAULTFLAGS.=/RUNTESTDEFAULTFLAGS =-a/g' ${DEST_DIR}/libstdc++-v3/testsuite/Makefile
32+
33 # All the machinations with string instantiations messes up the
34 # automake-generated TAGS rule. Make a simple one here.
35 TAGS: tags-recursive $(LISP)
36diff -uNr a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in
37--- a/libstdc++-v3/testsuite/Makefile.in 2013-07-05 16:06:08.995480821 +0200
38+++ b/libstdc++-v3/testsuite/Makefile.in 2013-08-26 08:50:04.698546942 +0200
39@@ -478,6 +478,8 @@
40 maintainer-clean-generic mostlyclean mostlyclean-generic \
41 mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
42
43+buildtest-TESTS:
44+ -@runtest $(AM_RUNTESTFLAGS) --tool libstdc++ $(RUNTESTFLAGS) buildtest.exp
45
46 # This rule generates all of the testsuite_files* lists at once.
47 ${lists_of_files}:
48@@ -545,7 +547,7 @@
49
50 # Run the testsuite in normal mode.
51 check-DEJAGNU $(check_DEJAGNU_normal_targets): check-DEJAGNU%: site.exp
52- AR="$(AR)"; export AR; \
53+ -@(AR="$(AR)"; export AR; \
54 RANLIB="$(RANLIB)"; export RANLIB; \
55 if [ -z "$*$(filter-out --target_board=%, $(RUNTESTFLAGS))" ] \
56 && [ "$(filter -j, $(MFLAGS))" = "-j" ]; then \
57@@ -563,6 +565,7 @@
58 exit 0; \
59 fi; \
60 srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
61+ $(SHELL) command -v g++ >/dev/null 2>&1 || echo "g++ is not installed on your system! Please note that most of the tests need g++."; \
62 EXPECT=$(EXPECT); export EXPECT; \
63 runtest=$(RUNTEST); \
64 if [ -z "$$runtest" ]; then runtest=runtest; fi; \
65@@ -606,7 +609,7 @@
66 $(RUNTESTFLAGS); \
67 fi; \
68 else echo "WARNING: could not find \`runtest'" 1>&2; :;\
69- fi
70+ fi)
71
72 check-am:
73 $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
74diff -uNr a/libstdc++-v3/testsuite/buildtest.exp b/libstdc++-v3/testsuite/buildtest.exp
75--- a/libstdc++-v3/testsuite/buildtest.exp 1970-01-01 01:00:00.000000000 +0100
76+++ b/libstdc++-v3/testsuite/buildtest.exp 2013-08-14 09:25:57.773587133 +0200
77@@ -0,0 +1,33 @@
78+# Copyright (C) 2013 Free Software Foundation, Inc.
79+#
80+# This program is free software; you can redistribute it and/or modify
81+# it under the terms of the GNU General Public License as published by
82+# the Free Software Foundation; either version 3 of the License, or
83+# (at your option) any later version.
84+#
85+# This program is distributed in the hope that it will be useful,
86+# but WITHOUT ANY WARRANTY; without even the implied warranty of
87+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
88+# GNU General Public License for more details.
89+#
90+# You should have received a copy of the GNU General Public License
91+# along with this program; see the file COPYING3. If not see
92+# <http://www.gnu.org/licenses/>.
93+
94+# If there is no baseline file, or we can't find the library, skip
95+# this test. Or, hey, if we don't support this kind of symbol
96+# versioning test: don't run it.
97+
98+
99+set baseline_subdir "[eval exec $cxx $baseline_subdir_switch]"
100+
101+# Build the support objects.
102+v3-build_support
103+
104+# Build the abi_check program.
105+if { [v3_target_compile "$srcdir/util/testsuite_abi_check.cc" "abi_check" \
106+ "executable" [list "additional_flags=-w"]] != "" } {
107+ error "could not compile testsuite_abi_check.cc"
108+}
109+
110+
111diff -uNr a/libstdc++-v3/testsuite/libstdc++-abi/abi.exp b/libstdc++-v3/testsuite/libstdc++-abi/abi.exp
112--- a/libstdc++-v3/testsuite/libstdc++-abi/abi.exp 2013-08-09 10:02:56.769743266 +0200
113+++ b/libstdc++-v3/testsuite/libstdc++-abi/abi.exp 2013-08-14 09:27:15.722299887 +0200
114@@ -24,11 +24,6 @@
115 set lib $blddir/src/.libs/libstdc++.so
116 }
117
118-set baseline_subdir "[eval exec $cxx $baseline_subdir_switch]"
119-
120-# Build the support objects.
121-v3-build_support
122-
123 if { (${v3-symver} == 0) || ![info exists baseline_dir] \
124 || ![file exists $baseline_dir] \
125 || ![file exists $lib] } {
126@@ -50,12 +45,6 @@
127 remote_exec "build" "$objdir/../scripts/extract_symvers" \
128 [list $lib "current_symbols.txt"]
129
130-# Build the abi_check program.
131-if { [v3_target_compile "$srcdir/util/testsuite_abi_check.cc" "abi_check" \
132- "executable" [list "additional_flags=-w"]] != "" } {
133- error "could not compile testsuite_abi_check.cc"
134-}
135-
136 remote_download "target" $baseline_file "baseline_symbols.txt"
137 remote_download "target" "current_symbols.txt" "current_symbols.txt"
138 set result [${tool}_load "./abi_check" \
139diff -uNr a/libstdc++-v3/testsuite/libstdc++-dg/conformance.exp b/libstdc++-v3/testsuite/libstdc++-dg/conformance.exp
140--- a/libstdc++-v3/testsuite/libstdc++-dg/conformance.exp 2013-08-09 13:06:20.795174486 +0200
141+++ b/libstdc++-v3/testsuite/libstdc++-dg/conformance.exp 2013-08-23 13:25:31.290856664 +0200
142@@ -21,9 +21,6 @@
143 # Initialization.
144 dg-init
145
146-# Build the support objects.
147-v3-build_support
148-
149 set tests [list]
150
151 # If there is a "testsuite_files" file, use it.
152diff -uNr a/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp b/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp
153--- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp 2013-08-09 13:08:17.946244225 +0200
154+++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp 2013-08-09 13:31:19.812003255 +0200
155@@ -17,7 +17,6 @@
156 load_lib gdb-test.exp
157
158 dg-init
159-v3-build_support
160
161 global GDB
162 if ![info exists ::env(GUALITY_GDB_NAME)] {
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/arm-hard-float-loader.patch b/meta/recipes-devtools/gcc/gcc-4.7/arm-hard-float-loader.patch
new file mode 100644
index 0000000000..dfa0d191f3
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/arm-hard-float-loader.patch
@@ -0,0 +1,48 @@
1This patch is still being discussed by probably is almost
2final version. We add the OE notion of multilib on top
3
4Upstream-Status: Backport [ adapted ]
5
6Signed-off-by: Khem Raj <raj.khem@gmail.com>
7
8Index: gcc-4_7-branch/gcc/config/arm/linux-eabi.h
9===================================================================
10--- gcc-4_7-branch.orig/gcc/config/arm/linux-eabi.h 2012-04-30 15:28:31.891863845 -0700
11+++ gcc-4_7-branch/gcc/config/arm/linux-eabi.h 2012-04-30 15:37:11.531888994 -0700
12@@ -32,7 +32,8 @@
13 while (false)
14
15 /* We default to a soft-float ABI so that binaries can run on all
16- target hardware. */
17+ target hardware. If you override this to use the hard-float ABI then
18+ change the setting of GLIBC_DYNAMIC_LINKER_DEFAULT as well. */
19 #undef TARGET_DEFAULT_FLOAT_ABI
20 #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFT
21
22@@ -59,10 +60,23 @@
23 #undef SUBTARGET_EXTRA_LINK_SPEC
24 #define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION
25
26-/* Use ld-linux.so.3 so that it will be possible to run "classic"
27- GNU/Linux binaries on an EABI system. */
28+/* GNU/Linux on ARM currently supports three dynamic linkers:
29+ - ld-linux.so.2 - for the legacy ABI
30+ - ld-linux.so.3 - for the EABI-derived soft-float ABI
31+ - ld-linux-armhf.so.3 - for the EABI-derived hard-float ABI.
32+ All the dynamic linkers live in /lib.
33+ We default to soft-float, but this can be overridden by changing both
34+ GLIBC_DYNAMIC_LINKER_DEFAULT and TARGET_DEFAULT_FLOAT_ABI. */
35+
36 #undef GLIBC_DYNAMIC_LINKER
37-#define GLIBC_DYNAMIC_LINKER SYSTEMLIBS_DIR "ld-linux.so.3"
38+#define GLIBC_DYNAMIC_LINKER_SOFT_FLOAT SYSTEMLIBS_DIR "ld-linux.so.3"
39+#define GLIBC_DYNAMIC_LINKER_HARD_FLOAT SYSTEMLIBS_DIR "ld-linux-armhf.so.3"
40+#define GLIBC_DYNAMIC_LINKER_DEFAULT GLIBC_DYNAMIC_LINKER_SOFT_FLOAT
41+
42+ #define GLIBC_DYNAMIC_LINKER \
43+ "%{mfloat-abi=hard:" GLIBC_DYNAMIC_LINKER_HARD_FLOAT "} \
44+ %{mfloat-abi=soft*:" GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "} \
45+ %{!mfloat-abi=*:" GLIBC_DYNAMIC_LINKER_DEFAULT "}"
46
47 /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
48 use the GNU/Linux version, not the generic BPABI version. */
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/avoid-oob-array-access.patch b/meta/recipes-devtools/gcc/gcc-4.7/avoid-oob-array-access.patch
new file mode 100644
index 0000000000..4ba707d0b2
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/avoid-oob-array-access.patch
@@ -0,0 +1,45 @@
1Upstream-Status: Backport
2
3See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56308
4
5From 1e37e371d2cca3549b71a247bf79778aa1a9e1c4 Mon Sep 17 00:00:00 2001
6From: rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
7Date: Fri, 21 Sep 2012 10:08:35 +0000
8Subject: [PATCH] 2012-09-21 Richard Guenther <rguenther@suse.de>
9
10 PR middle-end/54638
11 Backport from mainline
12 2012-04-19 Richard Guenther <rguenther@suse.de>
13
14 * ira-int.h (ira_allocno_object_iter_cond): Avoid out-of-bound
15 array access.
16
17git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@191605 138bc75d-0d04-0410-961f-82ee72b054a4
18---
19 gcc/ChangeLog | 9 +++++++++
20 gcc/ira-int.h | 9 +++++++--
21 2 files changed, 16 insertions(+), 2 deletions(-)
22
23diff --git a/gcc/ira-int.h b/gcc/ira-int.h
24index 9faabb5..771a368 100644
25--- a/gcc/ira-int.h
26+++ b/gcc/ira-int.h
27@@ -1138,8 +1138,13 @@ static inline bool
28 ira_allocno_object_iter_cond (ira_allocno_object_iterator *i, ira_allocno_t a,
29 ira_object_t *o)
30 {
31- *o = ALLOCNO_OBJECT (a, i->n);
32- return i->n++ < ALLOCNO_NUM_OBJECTS (a);
33+ int n = i->n++;
34+ if (n < ALLOCNO_NUM_OBJECTS (a))
35+ {
36+ *o = ALLOCNO_OBJECT (a, n);
37+ return true;
38+ }
39+ return false;
40 }
41
42 /* Loop over all objects associated with allocno A. In each
43--
441.8.2.2
45
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/cpp-honor-sysroot.patch b/meta/recipes-devtools/gcc/gcc-4.7/cpp-honor-sysroot.patch
new file mode 100644
index 0000000000..731067741d
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/cpp-honor-sysroot.patch
@@ -0,0 +1,40 @@
1Currently, if the gcc toolchain is relocated and installed from sstate, then you try and compile
2preprocessed source (.i or .ii files), the compiler will try and access the builtin sysroot location
3rather than the --sysroot option specified on the commandline. If access to that directory is
4permission denied (unreadable), gcc will error.
5
6This happens when ccache is in use due to the fact it uses preprocessed source files.
7
8The fix below adds %I to the cpp-output spec macro so the default substitutions for -iprefix,
9-isystem, -isysroot happen and the correct sysroot is used.
10
11[YOCTO #2074]
12
13Upstream-Status: Pending
14
15RP 2012/04/13
16
17Index: gcc-4_6-branch/gcc/gcc.c
18===================================================================
19--- gcc-4_6-branch.orig/gcc/gcc.c 2012-04-13 12:24:37.939671140 +0000
20+++ gcc-4_6-branch/gcc/gcc.c 2012-04-13 12:24:54.439670688 +0000
21@@ -953,7 +953,7 @@
22 %W{o*:--output-pch=%*}}%V}}}}}}", 0, 0, 0},
23 {".i", "@cpp-output", 0, 0, 0},
24 {"@cpp-output",
25- "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
26+ "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %I %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
27 {".s", "@assembler", 0, 0, 0},
28 {"@assembler",
29 "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 0, 0},
30Index: gcc-4_6-branch/gcc/cp/lang-specs.h
31===================================================================
32--- gcc-4_6-branch.orig/gcc/cp/lang-specs.h 2012-04-13 12:25:01.019670594 +0000
33+++ gcc-4_6-branch/gcc/cp/lang-specs.h 2012-04-13 12:25:07.567670180 +0000
34@@ -64,5 +64,5 @@
35 {".ii", "@c++-cpp-output", 0, 0, 0},
36 {"@c++-cpp-output",
37 "%{!M:%{!MM:%{!E:\
38- cc1plus -fpreprocessed %i %(cc1_options) %2\
39+ cc1plus -fpreprocessed %i %I %(cc1_options) %2\
40 %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/define_insn_reservation.patch b/meta/recipes-devtools/gcc/gcc-4.7/define_insn_reservation.patch
new file mode 100644
index 0000000000..2b0ff677fe
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/define_insn_reservation.patch
@@ -0,0 +1,118 @@
1Upstream-Status: Backport
2Signed-off-by: Khem Raj <raj.khem@gmail.com>
3
4From aab806a131efe9706396692ecc67d324371e39bc Mon Sep 17 00:00:00 2001
5From: edmarwjr <edmarwjr@138bc75d-0d04-0410-961f-82ee72b054a4>
6Date: Fri, 22 Jun 2012 20:13:23 +0000
7Subject: [PATCH] 2012-06-22 Edmar Wienskoski <edmar@freescale.com>
8
9 * config/rs6000/rs6000.md (define_attr "type"): New type popcnt.
10 (popcntb<mode>2): Add attribute type popcnt.
11 (popcntd<mode>2): Ditto.
12 * config/rs6000/power4.md (define_insn_reservation): Add type popcnt.
13 * config/rs6000/power5.md (define_insn_reservation): Ditto.
14 * config/rs6000/power7.md (define_insn_reservation): Ditto.
15 * config/rs6000/476.md (define_insn_reservation): Ditto.
16 * config/rs6000/power6.md (define_insn_reservation): New
17 reservation for popcnt instructions.
18
19
20
21git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@188901 138bc75d-0d04-0410-961f-82ee72b054a4
22---
23 gcc/ChangeLog | 12 ++++++++++++
24 gcc/config/rs6000/476.md | 2 +-
25 gcc/config/rs6000/power5.md | 2 +-
26 gcc/config/rs6000/power6.md | 5 +++++
27 gcc/config/rs6000/power7.md | 2 +-
28 gcc/config/rs6000/rs6000.md | 10 +++++++---
29 6 files changed, 27 insertions(+), 6 deletions(-)
30
31Index: gcc-4_7-branch/gcc/config/rs6000/476.md
32===================================================================
33--- gcc-4_7-branch.orig/gcc/config/rs6000/476.md 2012-07-05 23:49:07.000000000 -0700
34+++ gcc-4_7-branch/gcc/config/rs6000/476.md 2012-07-06 19:50:30.078779999 -0700
35@@ -71,7 +71,7 @@
36 ppc476_i_pipe|ppc476_lj_pipe")
37
38 (define_insn_reservation "ppc476-complex-integer" 1
39- (and (eq_attr "type" "cmp,cr_logical,delayed_cr,cntlz,isel,isync,sync,trap")
40+ (and (eq_attr "type" "cmp,cr_logical,delayed_cr,cntlz,isel,isync,sync,trap,popcnt")
41 (eq_attr "cpu" "ppc476"))
42 "ppc476_issue,\
43 ppc476_i_pipe")
44Index: gcc-4_7-branch/gcc/config/rs6000/power5.md
45===================================================================
46--- gcc-4_7-branch.orig/gcc/config/rs6000/power5.md 2012-07-05 23:49:07.000000000 -0700
47+++ gcc-4_7-branch/gcc/config/rs6000/power5.md 2012-07-06 19:50:30.078779999 -0700
48@@ -142,7 +142,7 @@
49 ; Integer latency is 2 cycles
50 (define_insn_reservation "power5-integer" 2
51 (and (eq_attr "type" "integer,insert_dword,shift,trap,\
52- var_shift_rotate,cntlz,exts,isel")
53+ var_shift_rotate,cntlz,exts,isel,popcnt")
54 (eq_attr "cpu" "power5"))
55 "iq_power5")
56
57Index: gcc-4_7-branch/gcc/config/rs6000/power6.md
58===================================================================
59--- gcc-4_7-branch.orig/gcc/config/rs6000/power6.md 2012-07-05 23:49:07.000000000 -0700
60+++ gcc-4_7-branch/gcc/config/rs6000/power6.md 2012-07-06 19:50:30.078779999 -0700
61@@ -216,6 +216,11 @@
62 (eq_attr "cpu" "power6"))
63 "FXU_power6")
64
65+(define_insn_reservation "power6-popcnt" 1
66+ (and (eq_attr "type" "popcnt")
67+ (eq_attr "cpu" "power6"))
68+ "FXU_power6")
69+
70 (define_insn_reservation "power6-insert" 1
71 (and (eq_attr "type" "insert_word")
72 (eq_attr "cpu" "power6"))
73Index: gcc-4_7-branch/gcc/config/rs6000/power7.md
74===================================================================
75--- gcc-4_7-branch.orig/gcc/config/rs6000/power7.md 2012-07-05 23:49:07.000000000 -0700
76+++ gcc-4_7-branch/gcc/config/rs6000/power7.md 2012-07-06 19:50:30.078779999 -0700
77@@ -150,7 +150,7 @@
78 ; FX Unit
79 (define_insn_reservation "power7-integer" 1
80 (and (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\
81- var_shift_rotate,exts,isel")
82+ var_shift_rotate,exts,isel,popcnt")
83 (eq_attr "cpu" "power7"))
84 "DU_power7,FXU_power7")
85
86Index: gcc-4_7-branch/gcc/config/rs6000/rs6000.md
87===================================================================
88--- gcc-4_7-branch.orig/gcc/config/rs6000/rs6000.md 2012-07-06 19:44:38.000000000 -0700
89+++ gcc-4_7-branch/gcc/config/rs6000/rs6000.md 2012-07-06 19:50:30.078779999 -0700
90@@ -144,7 +144,7 @@
91
92 ;; Define an insn type attribute. This is used in function unit delay
93 ;; computations.
94-(define_attr "type" "integer,two,three,load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,store,store_ux,store_u,fpload,fpload_ux,fpload_u,fpstore,fpstore_ux,fpstore_u,vecload,vecstore,imul,imul2,imul3,lmul,idiv,ldiv,insert_word,branch,cmp,fast_compare,compare,var_delayed_compare,delayed_compare,imul_compare,lmul_compare,fpcompare,cr_logical,delayed_cr,mfcr,mfcrf,mtcr,mfjmpr,mtjmpr,fp,fpsimple,dmul,sdiv,ddiv,ssqrt,dsqrt,jmpreg,brinc,vecsimple,veccomplex,vecdiv,veccmp,veccmpsimple,vecperm,vecfloat,vecfdiv,vecdouble,isync,sync,load_l,store_c,shift,trap,insert_dword,var_shift_rotate,cntlz,exts,mffgpr,mftgpr,isel"
95+(define_attr "type" "integer,two,three,load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,store,store_ux,store_u,fpload,fpload_ux,fpload_u,fpstore,fpstore_ux,fpstore_u,vecload,vecstore,imul,imul2,imul3,lmul,idiv,ldiv,insert_word,branch,cmp,fast_compare,compare,var_delayed_compare,delayed_compare,imul_compare,lmul_compare,fpcompare,cr_logical,delayed_cr,mfcr,mfcrf,mtcr,mfjmpr,mtjmpr,fp,fpsimple,dmul,sdiv,ddiv,ssqrt,dsqrt,jmpreg,brinc,vecsimple,veccomplex,vecdiv,veccmp,veccmpsimple,vecperm,vecfloat,vecfdiv,vecdouble,isync,sync,load_l,store_c,shift,trap,insert_dword,var_shift_rotate,cntlz,exts,mffgpr,mftgpr,isel,popcnt"
96 (const_string "integer"))
97
98 ;; Define floating point instruction sub-types for use with Xfpu.md
99@@ -2329,13 +2329,17 @@
100 (unspec:GPR [(match_operand:GPR 1 "gpc_reg_operand" "r")]
101 UNSPEC_POPCNTB))]
102 "TARGET_POPCNTB"
103- "popcntb %0,%1")
104+ "popcntb %0,%1"
105+ [(set_attr "length" "4")
106+ (set_attr "type" "popcnt")])
107
108 (define_insn "popcntd<mode>2"
109 [(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
110 (popcount:GPR (match_operand:GPR 1 "gpc_reg_operand" "r")))]
111 "TARGET_POPCNTD"
112- "popcnt<wd> %0,%1")
113+ "popcnt<wd> %0,%1"
114+ [(set_attr "length" "4")
115+ (set_attr "type" "popcnt")])
116
117 (define_expand "popcount<mode>2"
118 [(set (match_operand:GPR 0 "gpc_reg_operand" "")
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/disable-texinfo-5.patch b/meta/recipes-devtools/gcc/gcc-4.7/disable-texinfo-5.patch
new file mode 100644
index 0000000000..d5c9165a06
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/disable-texinfo-5.patch
@@ -0,0 +1,107 @@
1Upstream-Status: Pending
2
3gcc-4.8 is compatible with texinfo-5, so this is only temporary fix
4(we don't need info files on target)
5
6Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
7
8diff -uNr gcc-4.7.2.orig/configure.ac gcc-4.7.2/configure.ac
9--- gcc-4.7.2.orig/configure.ac 2013-04-04 09:10:24.600848496 +0200
10+++ gcc-4.7.2/configure.ac 2013-04-04 09:51:51.808031042 +0200
11@@ -3031,7 +3031,7 @@
12 # For an installed makeinfo, we require it to be from texinfo 4.7 or
13 # higher, else we use the "missing" dummy.
14 if ${MAKEINFO} --version \
15- | egrep 'texinfo[^0-9]*(4\.([7-9]|[1-9][0-9])|[5-9]|[1-9][0-9])' >/dev/null 2>&1; then
16+ | egrep 'texinfo[^0-9]*(4\.([7-9]|[1-9][0-9]))' >/dev/null 2>&1; then
17 :
18 else
19 MAKEINFO="$MISSING makeinfo"
20diff -uNr gcc-4.7.2.orig/gcc/configure.ac gcc-4.7.2/gcc/configure.ac
21--- gcc-4.7.2.orig/gcc/configure.ac 2013-04-04 09:10:30.523848931 +0200
22+++ gcc-4.7.2/gcc/configure.ac 2013-04-04 09:52:16.111032826 +0200
23@@ -871,7 +871,7 @@
24 # that we can use it.
25 ACX_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
26 [GNU texinfo.* \([0-9][0-9.]*\)],
27- [4.[7-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*])
28+ [4.[7-9]*|4.[1-9][0-9]*])
29 if test $gcc_cv_prog_makeinfo_modern = no; then
30 AC_MSG_WARN([
31 *** Makeinfo is missing or too old.
32diff -uNr gcc-4.7.2.orig/libgomp/configure.ac gcc-4.7.2/libgomp/configure.ac
33--- gcc-4.7.2.orig/libgomp/configure.ac 2010-12-06 01:50:04.000000000 +0100
34+++ gcc-4.7.2/libgomp/configure.ac 2013-04-04 09:51:29.571029410 +0200
35@@ -129,7 +129,7 @@
36 # that we can use it.
37 ACX_CHECK_PROG_VER([MAKEINFO], [makeinfo], [--version],
38 [GNU texinfo.* \([0-9][0-9.]*\)],
39- [4.[4-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*])
40+ [4.[4-9]*|4.[1-9][0-9]*])
41 AM_CONDITIONAL(BUILD_INFO, test $gcc_cv_prog_makeinfo_modern = "yes")
42
43
44diff -uNr gcc-4.7.2.orig/libiberty/configure.ac gcc-4.7.2/libiberty/configure.ac
45--- gcc-4.7.2.orig/libiberty/configure.ac 2011-08-22 18:54:02.000000000 +0200
46+++ gcc-4.7.2/libiberty/configure.ac 2013-04-04 09:51:20.685028758 +0200
47@@ -84,6 +84,12 @@
48 AC_MSG_WARN([
49 *** Makeinfo is too old. Info documentation will not be built.])
50 ;;
51+ x*\ [[5-9]].* )
52+ MAKEINFO="@echo $MAKEINFO is too new, 5.0 or newer does not work; true"
53+ BUILD_INFO=
54+ AC_MSG_WARN([
55+*** Makeinfo is too new. Info documentation will not be built.])
56+ ;;
57 esac
58 ;;
59 esac
60diff -uNr gcc-4.7.2.orig/libitm/configure.ac gcc-4.7.2/libitm/configure.ac
61--- gcc-4.7.2.orig/libitm/configure.ac 2012-02-13 22:46:38.000000000 +0100
62+++ gcc-4.7.2/libitm/configure.ac 2013-04-04 09:51:59.676031620 +0200
63@@ -140,7 +140,7 @@
64 # that we can use it.
65 ACX_CHECK_PROG_VER([MAKEINFO], [makeinfo], [--version],
66 [GNU texinfo.* \([0-9][0-9.]*\)],
67- [4.[4-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*])
68+ [4.[4-9]*|4.[1-9][0-9]*])
69 AM_CONDITIONAL(BUILD_INFO, test $gcc_cv_prog_makeinfo_modern = "yes")
70
71
72diff -uNr gcc-4.7.2.orig/libquadmath/configure.ac gcc-4.7.2/libquadmath/configure.ac
73--- gcc-4.7.2.orig/libquadmath/configure.ac 2012-05-31 20:57:56.000000000 +0200
74+++ gcc-4.7.2/libquadmath/configure.ac 2013-04-04 09:49:52.432022281 +0200
75@@ -48,7 +48,7 @@
76 # that we can use it.
77 ACX_CHECK_PROG_VER([MAKEINFO], [makeinfo], [--version],
78 [GNU texinfo.* \([0-9][0-9.]*\)],
79- [4.[4-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*])
80+ [4.[4-9]*|4.[1-9][0-9]*])
81 AM_CONDITIONAL(BUILD_INFO, test $gcc_cv_prog_makeinfo_modern = "yes")
82
83 ACX_BUGURL([http://gcc.gnu.org/bugs.html])
84diff -uNr gcc-4.7.2.orig/libstdc++-v3/configure.ac gcc-4.7.2/libstdc++-v3/configure.ac
85--- gcc-4.7.2.orig/libstdc++-v3/configure.ac 2012-08-06 16:34:27.000000000 +0200
86+++ gcc-4.7.2/libstdc++-v3/configure.ac 2013-04-04 09:49:57.483022652 +0200
87@@ -344,7 +344,7 @@
88 # that we can use it.
89 ACX_CHECK_PROG_VER([MAKEINFO], [makeinfo], [--version],
90 [GNU texinfo.* \([0-9][0-9.]*\)],
91- [4.[4-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*])
92+ [4.[4-9]*|4.[1-9][0-9]*])
93 AM_CONDITIONAL(BUILD_INFO, test $gcc_cv_prog_makeinfo_modern = "yes")
94
95 # Check for doxygen
96diff -uNr gcc-4.7.2.orig/configure gcc-4.7.2/configure
97--- gcc-4.7.2.orig/configure 2013-04-04 10:23:58.009172414 +0200
98+++ gcc-4.7.2/configure 2013-04-04 10:26:42.696184501 +0200
99@@ -7858,7 +7858,7 @@
100 # For an installed makeinfo, we require it to be from texinfo 4.7 or
101 # higher, else we use the "missing" dummy.
102 if ${MAKEINFO} --version \
103- | egrep 'texinfo[^0-9]*(4\.([7-9]|[1-9][0-9])|[5-9]|[1-9][0-9])' >/dev/null 2>&1; then
104+ | egrep 'texinfo[^0-9]*(4\.([7-9]|[1-9][0-9]))' >/dev/null 2>&1; then
105 :
106 else
107 MAKEINFO="$MISSING makeinfo"
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/disable_relax_pic_calls_flag.patch b/meta/recipes-devtools/gcc/gcc-4.7/disable_relax_pic_calls_flag.patch
new file mode 100644
index 0000000000..bc01cd9103
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/disable_relax_pic_calls_flag.patch
@@ -0,0 +1,48 @@
1Upstream-Status: Inappropriate [configuration]
2
3GCC: disable MASK_RELAX_PIC_CALLS bit
4
5The new feature added after 4.3.3
6"http://www.pubbs.net/200909/gcc/94048-patch-add-support-for-rmipsjalr.html"
7will cause cc1plus eat up all the system memory when build webkit-gtk.
8The function mips_get_pic_call_symbol keeps on recursively calling itself.
9Disable this feature to walk aside the bug.
10
11Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
12
13Index: gcc-4_7-branch/gcc/configure
14===================================================================
15--- gcc-4_7-branch.orig/gcc/configure 2012-04-10 10:37:09.351387437 -0700
16+++ gcc-4_7-branch/gcc/configure 2012-04-10 10:37:57.211389779 -0700
17@@ -25837,13 +25837,6 @@
18 rm -f conftest.*
19 fi
20 fi
21- if test $gcc_cv_as_ld_jalr_reloc = yes; then
22- if test x$target_cpu_default = x; then
23- target_cpu_default=MASK_RELAX_PIC_CALLS
24- else
25- target_cpu_default="($target_cpu_default)|MASK_RELAX_PIC_CALLS"
26- fi
27- fi
28 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_ld_jalr_reloc" >&5
29 $as_echo "$gcc_cv_as_ld_jalr_reloc" >&6; }
30
31Index: gcc-4_7-branch/gcc/configure.ac
32===================================================================
33--- gcc-4_7-branch.orig/gcc/configure.ac 2012-04-10 10:37:09.339387366 -0700
34+++ gcc-4_7-branch/gcc/configure.ac 2012-04-10 10:37:57.215389769 -0700
35@@ -4027,13 +4027,6 @@
36 rm -f conftest.*
37 fi
38 fi
39- if test $gcc_cv_as_ld_jalr_reloc = yes; then
40- if test x$target_cpu_default = x; then
41- target_cpu_default=MASK_RELAX_PIC_CALLS
42- else
43- target_cpu_default="($target_cpu_default)|MASK_RELAX_PIC_CALLS"
44- fi
45- fi
46 AC_MSG_RESULT($gcc_cv_as_ld_jalr_reloc)
47
48 AC_CACHE_CHECK([linker for .eh_frame personality relaxation],
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/disablesdt.patch b/meta/recipes-devtools/gcc/gcc-4.7/disablesdt.patch
new file mode 100644
index 0000000000..8946afc11a
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/disablesdt.patch
@@ -0,0 +1,32 @@
1We don't list dtrace in DEPENDS so we shouldn't be depending on this header.
2It may or may not exist from preivous builds though. To be determinstic, disable
3sdt.h usage always. This avoids build failures if the header is removed after configure
4but before libgcc is compiled for example.
5
6RP 2012/8/7
7
8Upstream-Status: Inappropriate [hack]
9
10Index: git/gcc/configure
11===================================================================
12--- git.orig/gcc/configure 2012-08-07 21:18:42.319247701 +0000
13+++ git/gcc/configure 2012-08-07 21:19:08.939247082 +0000
14@@ -26758,12 +26758,12 @@
15 { $as_echo "$as_me:${as_lineno-$LINENO}: checking sys/sdt.h in the target C library" >&5
16 $as_echo_n "checking sys/sdt.h in the target C library... " >&6; }
17 have_sys_sdt_h=no
18-if test -f $target_header_dir/sys/sdt.h; then
19- have_sys_sdt_h=yes
20-
21-$as_echo "#define HAVE_SYS_SDT_H 1" >>confdefs.h
22-
23-fi
24+#if test -f $target_header_dir/sys/sdt.h; then
25+# have_sys_sdt_h=yes
26+#
27+#$as_echo "#define HAVE_SYS_SDT_H 1" >>confdefs.h
28+#
29+#fi
30 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_sys_sdt_h" >&5
31 $as_echo "$have_sys_sdt_h" >&6; }
32
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/fix-g++-sysroot.patch b/meta/recipes-devtools/gcc/gcc-4.7/fix-g++-sysroot.patch
new file mode 100644
index 0000000000..aad234c69e
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/fix-g++-sysroot.patch
@@ -0,0 +1,428 @@
1backport
2
3http://www.mail-archive.com/gcc-patches@gcc.gnu.org/msg26013.html
4
5Upstream-Status: Pending
6
7Signed-off-by: Khem Raj <raj.khem@gmail.com>
8
9Index: gcc-4.7.2/gcc/configure.ac
10===================================================================
11--- gcc-4.7.2.orig/gcc/configure.ac 2012-09-20 07:42:30.284941174 -0700
12+++ gcc-4.7.2/gcc/configure.ac 2012-09-20 07:55:23.148970564 -0700
13@@ -118,6 +118,72 @@
14 local_prefix=/usr/local
15 fi
16
17+AC_ARG_WITH([native-system-header-dir],
18+ [ --with-native-system-header-dir=dir
19+ use dir as the directory to look for standard
20+ system header files in. Defaults to /usr/include.],
21+[
22+ case ${with_native_system_header_dir} in
23+ yes|no) AC_MSG_ERROR([bad value ${withval} given for --with-native-system-header-dir]) ;;
24+ /* | [[A-Za-z]]:[[\\/]]*) ;;
25+ *) AC_MSG_ERROR([--with-native-system-header-dir argument ${withval} must be an absolute directory]) ;;
26+ esac
27+ configured_native_system_header_dir="${withval}"
28+], [configured_native_system_header_dir=])
29+
30+AC_ARG_WITH(build-sysroot,
31+ [AS_HELP_STRING([--with-build-sysroot=sysroot],
32+ [use sysroot as the system root during the build])],
33+ [if test x"$withval" != x ; then
34+ SYSROOT_CFLAGS_FOR_TARGET="--sysroot=$withval"
35+ fi],
36+ [SYSROOT_CFLAGS_FOR_TARGET=])
37+AC_SUBST(SYSROOT_CFLAGS_FOR_TARGET)
38+
39+AC_ARG_WITH(sysroot,
40+[AS_HELP_STRING([[--with-sysroot[=DIR]]],
41+ [search for usr/lib, usr/include, et al, within DIR])],
42+[
43+ case ${with_sysroot} in
44+ /) ;;
45+ */) with_sysroot=`echo $with_sysroot | sed 's,/$,,'` ;;
46+ esac
47+ case ${with_sysroot} in
48+ yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_noncanonical}/sys-root' ;;
49+ *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
50+ esac
51+
52+ TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
53+ CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
54+
55+ if test "x$prefix" = xNONE; then
56+ test_prefix=/usr/local
57+ else
58+ test_prefix=$prefix
59+ fi
60+ if test "x$exec_prefix" = xNONE; then
61+ test_exec_prefix=$test_prefix
62+ else
63+ test_exec_prefix=$exec_prefix
64+ fi
65+ case ${TARGET_SYSTEM_ROOT} in
66+ "${test_prefix}"|"${test_prefix}/"*|\
67+ "${test_exec_prefix}"|"${test_exec_prefix}/"*|\
68+ '${prefix}'|'${prefix}/'*|\
69+ '${exec_prefix}'|'${exec_prefix}/'*)
70+ t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE"
71+ TARGET_SYSTEM_ROOT_DEFINE="$t"
72+ ;;
73+ esac
74+], [
75+ TARGET_SYSTEM_ROOT=
76+ TARGET_SYSTEM_ROOT_DEFINE=
77+ CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
78+])
79+AC_SUBST(TARGET_SYSTEM_ROOT)
80+AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
81+AC_SUBST(CROSS_SYSTEM_HEADER_DIR)
82+
83 # Don't set gcc_gxx_include_dir to gxx_include_dir since that's only
84 # passed in by the toplevel make and thus we'd get different behavior
85 # depending on where we built the sources.
86@@ -149,7 +215,9 @@
87 if test "${with_sysroot+set}" = set; then
88 gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
89 if test "${gcc_gxx_without_sysroot}"; then
90- gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
91+ if test x${with_sysroot} != x/; then
92+ gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
93+ fi
94 gcc_gxx_include_dir_add_sysroot=1
95 fi
96 fi
97@@ -733,68 +801,6 @@
98 ], [enable_shared=yes])
99 AC_SUBST(enable_shared)
100
101-AC_ARG_WITH([native-system-header-dir],
102- [ --with-native-system-header-dir=dir
103- use dir as the directory to look for standard
104- system header files in. Defaults to /usr/include.],
105-[
106- case ${with_native_system_header_dir} in
107- yes|no) AC_MSG_ERROR([bad value ${withval} given for --with-native-system-header-dir]) ;;
108- /* | [[A-Za-z]]:[[\\/]]*) ;;
109- *) AC_MSG_ERROR([--with-native-system-header-dir argument ${withval} must be an absolute directory]) ;;
110- esac
111- configured_native_system_header_dir="${withval}"
112-], [configured_native_system_header_dir=])
113-
114-AC_ARG_WITH(build-sysroot,
115- [AS_HELP_STRING([--with-build-sysroot=sysroot],
116- [use sysroot as the system root during the build])],
117- [if test x"$withval" != x ; then
118- SYSROOT_CFLAGS_FOR_TARGET="--sysroot=$withval"
119- fi],
120- [SYSROOT_CFLAGS_FOR_TARGET=])
121-AC_SUBST(SYSROOT_CFLAGS_FOR_TARGET)
122-
123-AC_ARG_WITH(sysroot,
124-[AS_HELP_STRING([[--with-sysroot[=DIR]]],
125- [search for usr/lib, usr/include, et al, within DIR])],
126-[
127- case ${with_sysroot} in
128- yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_noncanonical}/sys-root' ;;
129- *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
130- esac
131-
132- TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
133- CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
134-
135- if test "x$prefix" = xNONE; then
136- test_prefix=/usr/local
137- else
138- test_prefix=$prefix
139- fi
140- if test "x$exec_prefix" = xNONE; then
141- test_exec_prefix=$test_prefix
142- else
143- test_exec_prefix=$exec_prefix
144- fi
145- case ${TARGET_SYSTEM_ROOT} in
146- "${test_prefix}"|"${test_prefix}/"*|\
147- "${test_exec_prefix}"|"${test_exec_prefix}/"*|\
148- '${prefix}'|'${prefix}/'*|\
149- '${exec_prefix}'|'${exec_prefix}/'*)
150- t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE"
151- TARGET_SYSTEM_ROOT_DEFINE="$t"
152- ;;
153- esac
154-], [
155- TARGET_SYSTEM_ROOT=
156- TARGET_SYSTEM_ROOT_DEFINE=
157- CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
158-])
159-AC_SUBST(TARGET_SYSTEM_ROOT)
160-AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
161-AC_SUBST(CROSS_SYSTEM_HEADER_DIR)
162-
163 AC_ARG_WITH(specs,
164 [AS_HELP_STRING([--with-specs=SPECS],
165 [add SPECS to driver command-line processing])],
166Index: gcc-4.7.2/gcc/configure
167===================================================================
168--- gcc-4.7.2.orig/gcc/configure 2012-09-20 07:42:30.284941174 -0700
169+++ gcc-4.7.2/gcc/configure 2012-09-20 07:55:31.788970893 -0700
170@@ -757,10 +757,6 @@
171 REPORT_BUGS_TO
172 PKGVERSION
173 CONFIGURE_SPECS
174-CROSS_SYSTEM_HEADER_DIR
175-TARGET_SYSTEM_ROOT_DEFINE
176-TARGET_SYSTEM_ROOT
177-SYSROOT_CFLAGS_FOR_TARGET
178 enable_shared
179 enable_fixed_point
180 enable_decimal_float
181@@ -798,6 +794,10 @@
182 CFLAGS
183 CC
184 GENINSRC
185+CROSS_SYSTEM_HEADER_DIR
186+TARGET_SYSTEM_ROOT_DEFINE
187+TARGET_SYSTEM_ROOT
188+SYSROOT_CFLAGS_FOR_TARGET
189 target_subdir
190 host_subdir
191 build_subdir
192@@ -859,6 +859,9 @@
193 enable_option_checking
194 with_build_libsubdir
195 with_local_prefix
196+with_native_system_header_dir
197+with_build_sysroot
198+with_sysroot
199 with_gxx_include_dir
200 with_cpp_install_dir
201 enable_generated_files_in_srcdir
202@@ -883,9 +886,6 @@
203 enable_objc_gc
204 with_dwarf2
205 enable_shared
206-with_native_system_header_dir
207-with_build_sysroot
208-with_sysroot
209 with_specs
210 with_pkgversion
211 with_bugurl
212@@ -1639,6 +1639,12 @@
213 --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
214 --with-build-libsubdir=DIR Directory where to find libraries for build system
215 --with-local-prefix=DIR specifies directory to put local include
216+ --with-native-system-header-dir=dir
217+ use dir as the directory to look for standard
218+ system header files in. Defaults to /usr/include.
219+ --with-build-sysroot=sysroot
220+ use sysroot as the system root during the build
221+ --with-sysroot[=DIR] search for usr/lib, usr/include, et al, within DIR
222 --with-gxx-include-dir=DIR
223 specifies directory to put g++ header files
224 --with-cpp-install-dir=DIR
225@@ -1651,12 +1657,6 @@
226 --with-as arrange to use the specified as (full pathname)
227 --with-stabs arrange to use stabs instead of host debug format
228 --with-dwarf2 force the default debug format to be DWARF 2
229- --with-native-system-header-dir=dir
230- use dir as the directory to look for standard
231- system header files in. Defaults to /usr/include.
232- --with-build-sysroot=sysroot
233- use sysroot as the system root during the build
234- --with-sysroot[=DIR] search for usr/lib, usr/include, et al, within DIR
235 --with-specs=SPECS add SPECS to driver command-line processing
236 --with-pkgversion=PKG Use PKG in the version string in place of "GCC"
237 --with-bugurl=URL Direct users to URL to report a bug
238@@ -3288,6 +3288,82 @@
239 local_prefix=/usr/local
240 fi
241
242+
243+# Check whether --with-native-system-header-dir was given.
244+if test "${with_native_system_header_dir+set}" = set; then :
245+ withval=$with_native_system_header_dir;
246+ case ${with_native_system_header_dir} in
247+ yes|no) as_fn_error "bad value ${withval} given for --with-native-system-header-dir" "$LINENO" 5 ;;
248+ /* | [A-Za-z]:[\\/]*) ;;
249+ *) as_fn_error "--with-native-system-header-dir argument ${withval} must be an absolute directory" "$LINENO" 5 ;;
250+ esac
251+ configured_native_system_header_dir="${withval}"
252+
253+else
254+ configured_native_system_header_dir=
255+fi
256+
257+
258+
259+# Check whether --with-build-sysroot was given.
260+if test "${with_build_sysroot+set}" = set; then :
261+ withval=$with_build_sysroot; if test x"$withval" != x ; then
262+ SYSROOT_CFLAGS_FOR_TARGET="--sysroot=$withval"
263+ fi
264+else
265+ SYSROOT_CFLAGS_FOR_TARGET=
266+fi
267+
268+
269+
270+
271+# Check whether --with-sysroot was given.
272+if test "${with_sysroot+set}" = set; then :
273+ withval=$with_sysroot;
274+ case ${with_sysroot} in
275+ /) ;;
276+ */) with_sysroot=`echo $with_sysroot | sed 's,/$,,'` ;;
277+ esac
278+ case ${with_sysroot} in
279+ yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_noncanonical}/sys-root' ;;
280+ *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
281+ esac
282+
283+ TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
284+ CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
285+
286+ if test "x$prefix" = xNONE; then
287+ test_prefix=/usr/local
288+ else
289+ test_prefix=$prefix
290+ fi
291+ if test "x$exec_prefix" = xNONE; then
292+ test_exec_prefix=$test_prefix
293+ else
294+ test_exec_prefix=$exec_prefix
295+ fi
296+ case ${TARGET_SYSTEM_ROOT} in
297+ "${test_prefix}"|"${test_prefix}/"*|\
298+ "${test_exec_prefix}"|"${test_exec_prefix}/"*|\
299+ '${prefix}'|'${prefix}/'*|\
300+ '${exec_prefix}'|'${exec_prefix}/'*)
301+ t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE"
302+ TARGET_SYSTEM_ROOT_DEFINE="$t"
303+ ;;
304+ esac
305+
306+else
307+
308+ TARGET_SYSTEM_ROOT=
309+ TARGET_SYSTEM_ROOT_DEFINE=
310+ CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
311+
312+fi
313+
314+
315+
316+
317+
318 # Don't set gcc_gxx_include_dir to gxx_include_dir since that's only
319 # passed in by the toplevel make and thus we'd get different behavior
320 # depending on where we built the sources.
321@@ -3321,7 +3397,9 @@
322 if test "${with_sysroot+set}" = set; then
323 gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
324 if test "${gcc_gxx_without_sysroot}"; then
325- gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
326+ if test x${with_sysroot} != x/; then
327+ gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
328+ fi
329 gcc_gxx_include_dir_add_sysroot=1
330 fi
331 fi
332@@ -7220,78 +7298,6 @@
333
334
335
336-# Check whether --with-native-system-header-dir was given.
337-if test "${with_native_system_header_dir+set}" = set; then :
338- withval=$with_native_system_header_dir;
339- case ${with_native_system_header_dir} in
340- yes|no) as_fn_error "bad value ${withval} given for --with-native-system-header-dir" "$LINENO" 5 ;;
341- /* | [A-Za-z]:[\\/]*) ;;
342- *) as_fn_error "--with-native-system-header-dir argument ${withval} must be an absolute directory" "$LINENO" 5 ;;
343- esac
344- configured_native_system_header_dir="${withval}"
345-
346-else
347- configured_native_system_header_dir=
348-fi
349-
350-
351-
352-# Check whether --with-build-sysroot was given.
353-if test "${with_build_sysroot+set}" = set; then :
354- withval=$with_build_sysroot; if test x"$withval" != x ; then
355- SYSROOT_CFLAGS_FOR_TARGET="--sysroot=$withval"
356- fi
357-else
358- SYSROOT_CFLAGS_FOR_TARGET=
359-fi
360-
361-
362-
363-
364-# Check whether --with-sysroot was given.
365-if test "${with_sysroot+set}" = set; then :
366- withval=$with_sysroot;
367- case ${with_sysroot} in
368- yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_noncanonical}/sys-root' ;;
369- *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
370- esac
371-
372- TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
373- CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
374-
375- if test "x$prefix" = xNONE; then
376- test_prefix=/usr/local
377- else
378- test_prefix=$prefix
379- fi
380- if test "x$exec_prefix" = xNONE; then
381- test_exec_prefix=$test_prefix
382- else
383- test_exec_prefix=$exec_prefix
384- fi
385- case ${TARGET_SYSTEM_ROOT} in
386- "${test_prefix}"|"${test_prefix}/"*|\
387- "${test_exec_prefix}"|"${test_exec_prefix}/"*|\
388- '${prefix}'|'${prefix}/'*|\
389- '${exec_prefix}'|'${exec_prefix}/'*)
390- t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE"
391- TARGET_SYSTEM_ROOT_DEFINE="$t"
392- ;;
393- esac
394-
395-else
396-
397- TARGET_SYSTEM_ROOT=
398- TARGET_SYSTEM_ROOT_DEFINE=
399- CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
400-
401-fi
402-
403-
404-
405-
406-
407-
408 # Check whether --with-specs was given.
409 if test "${with_specs+set}" = set; then :
410 withval=$with_specs; CONFIGURE_SPECS=$withval
411@@ -18013,7 +18019,7 @@
412 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
413 lt_status=$lt_dlunknown
414 cat > conftest.$ac_ext <<_LT_EOF
415-#line 18016 "configure"
416+#line 18022 "configure"
417 #include "confdefs.h"
418
419 #if HAVE_DLFCN_H
420@@ -18119,7 +18125,7 @@
421 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
422 lt_status=$lt_dlunknown
423 cat > conftest.$ac_ext <<_LT_EOF
424-#line 18122 "configure"
425+#line 18128 "configure"
426 #include "confdefs.h"
427
428 #if HAVE_DLFCN_H
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/fortran-cross-compile-hack.patch b/meta/recipes-devtools/gcc/gcc-4.7/fortran-cross-compile-hack.patch
new file mode 100644
index 0000000000..2773b42cca
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/fortran-cross-compile-hack.patch
@@ -0,0 +1,32 @@
1Upstream-Status: Inappropriate [embedded specific]
2
3* Fortran would have searched for arm-angstrom-gnueabi-gfortran but would have used
4 used gfortan. For gcc_4.2.2.bb we want to use the gfortran compiler from our cross
5 directory.
6
7Index: gcc-4_7-branch/libgfortran/configure
8===================================================================
9--- gcc-4_7-branch.orig/libgfortran/configure 2012-04-10 10:17:24.055330044 -0700
10+++ gcc-4_7-branch/libgfortran/configure 2012-04-10 10:42:26.159402591 -0700
11@@ -12689,7 +12689,7 @@
12
13 # We need gfortran to compile parts of the library
14 #AC_PROG_FC(gfortran)
15-FC="$GFORTRAN"
16+#FC="$GFORTRAN"
17 ac_ext=${ac_fc_srcext-f}
18 ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
19 ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
20Index: gcc-4_7-branch/libgfortran/configure.ac
21===================================================================
22--- gcc-4_7-branch.orig/libgfortran/configure.ac 2012-04-10 10:17:24.063330046 -0700
23+++ gcc-4_7-branch/libgfortran/configure.ac 2012-04-10 10:42:26.159402591 -0700
24@@ -227,7 +227,7 @@
25
26 # We need gfortran to compile parts of the library
27 #AC_PROG_FC(gfortran)
28-FC="$GFORTRAN"
29+#FC="$GFORTRAN"
30 AC_PROG_FC(gfortran)
31
32 # extra LD Flags which are required for targets
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch b/meta/recipes-devtools/gcc/gcc-4.7/gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch
new file mode 100644
index 0000000000..964c4bbbf2
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch
@@ -0,0 +1,33 @@
1Upstream-Status: Inappropriate [embedded specific]
2
3---
4 configure | 2 +-
5 configure.ac | 2 +-
6 2 files changed, 2 insertions(+), 2 deletions(-)
7
8Index: gcc-4_7-branch/configure.ac
9===================================================================
10--- gcc-4_7-branch.orig/configure.ac 2012-04-10 10:19:50.923337154 -0700
11+++ gcc-4_7-branch/configure.ac 2012-04-10 10:19:54.911337344 -0700
12@@ -2825,7 +2825,7 @@
13 # for target_alias and gcc doesn't manage it consistently.
14 target_configargs="--cache-file=./config.cache ${target_configargs}"
15
16-FLAGS_FOR_TARGET=
17+FLAGS_FOR_TARGET="$ARCH_FLAGS_FOR_TARGET"
18 case " $target_configdirs " in
19 *" newlib "*)
20 case " $target_configargs " in
21Index: gcc-4_7-branch/configure
22===================================================================
23--- gcc-4_7-branch.orig/configure 2012-04-10 10:19:50.911337153 -0700
24+++ gcc-4_7-branch/configure 2012-04-10 10:19:54.915337349 -0700
25@@ -7368,7 +7368,7 @@
26 # for target_alias and gcc doesn't manage it consistently.
27 target_configargs="--cache-file=./config.cache ${target_configargs}"
28
29-FLAGS_FOR_TARGET=
30+FLAGS_FOR_TARGET="$ARCH_FLAGS_FOR_TARGET"
31 case " $target_configdirs " in
32 *" newlib "*)
33 case " $target_configargs " in
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch b/meta/recipes-devtools/gcc/gcc-4.7/gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch
new file mode 100644
index 0000000000..ff136e19aa
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch
@@ -0,0 +1,116 @@
1Upstream-Status: Pending
2
3Before committing, I noticed that PR/32161 was marked as a dup of PR/32009, but my previous patch did not fix it.
4
5This alternative patch is better because it lets you just use CFLAGS_FOR_TARGET to set the compilation flags for libgcc. Since bootstrapped target libraries are never compiled with the native compiler, it makes little sense to use different flags for stage1 and later stages. And it also makes little sense to use a different variable than CFLAGS_FOR_TARGET.
6
7Other changes I had to do include:
8
9- moving the creation of default CFLAGS_FOR_TARGET from Makefile.am to configure.ac, because otherwise the BOOT_CFLAGS are substituted into CFLAGS_FOR_TARGET (which is "-O2 -g $(CFLAGS)") via $(CFLAGS). It is also cleaner this way though.
10
11- passing the right CFLAGS to configure scripts as exported environment variables
12
13I also stopped passing LIBCFLAGS to configure scripts since they are unused in the whole src tree. And I updated the documentation as H-P reminded me to do.
14
15Bootstrapped/regtested i686-pc-linux-gnu, will commit to 4.4 shortly. Ok for 4.3?
16
17Paolo
18
192008-02-19 Paolo Bonzini <bonzini@gnu.org>
20
21 PR bootstrap/32009
22 PR bootstrap/32161
23
24 * configure.ac (CFLAGS_FOR_TARGET, CXXFLAGS_FOR_TARGET): Compute here.
25 * configure: Regenerate.
26
27 * Makefile.def: Define stage_libcflags for all bootstrap stages.
28 * Makefile.tpl (BOOT_LIBCFLAGS, STAGE2_LIBCFLAGS, STAGE3_LIBCFLAGS,
29 STAGE4_LIBCFLAGS): New.
30 (CFLAGS_FOR_TARGET, CXXFLAGS_FOR_TARGET): Subst from autoconf, without
31 $(SYSROOT_CFLAGS_FOR_TARGET) and $(DEBUG_PREFIX_CFLAGS_FOR_TARGET).
32 (BASE_TARGET_EXPORTS): Append them here to C{,XX}FLAGS.
33 (EXTRA_TARGET_FLAGS): Append them here to {LIB,}C{,XX}FLAGS.
34 (configure-stage[+id+]-[+prefix+][+module+]): Pass stage_libcflags
35 for target modules. Don't export LIBCFLAGS.
36 (all-stage[+id+]-[+prefix+][+module+]): Pass stage_libcflags; pass
37 $(BASE_FLAGS_TO_PASS) where [+args+] was passed, and [+args+] after
38 the overridden CFLAGS_FOR_TARGET and CXXFLAGS_FOR_TARGET.
39 (invocations of `all'): Replace $(TARGET_FLAGS_TO_PASS) with
40 $(EXTRA_TARGET_FLAGS), $(FLAGS_TO_PASS) with $(EXTRA_HOST_FLAGS).
41 * Makefile.in: Regenerate.
42
43config:
442008-02-19 Paolo Bonzini <bonzini@gnu.org>
45
46 PR bootstrap/32009
47 * mh-ppc-darwin (BOOT_CFLAGS): Reenable.
48
49gcc:
502008-02-19 Paolo Bonzini <bonzini@gnu.org>
51
52 PR bootstrap/32009
53 * doc/install.texi: Correct references to CFLAGS, replacing them
54 with BOOT_CFLAGS. Document flags used during bootstrap for
55 target libraries.
56
57
58---
59 Makefile.def | 25
60 Makefile.in | 1845 ++++++++++++++++++++++++++++++-------------------
61 Makefile.tpl | 91 +-
62 config/mh-ppc-darwin | 3
63 configure | 36
64 configure.ac | 32
65 gcc/Makefile.in | 2
66 gcc/configure | 6
67 gcc/configure.ac | 3
68 gcc/doc/install.texi | 56 -
69 libiberty/Makefile.in | 162 ++--
70 libiberty/configure | 46 -
71 libiberty/configure.ac | 43 -
72 13 files changed, 1454 insertions(+), 896 deletions(-)
73
74Index: gcc-4_7-branch/configure
75===================================================================
76--- gcc-4_7-branch.orig/configure 2012-04-10 10:22:05.807343683 -0700
77+++ gcc-4_7-branch/configure 2012-04-10 10:37:24.243388086 -0700
78@@ -6695,6 +6695,38 @@
79
80
81
82+# During gcc bootstrap, if we use some random cc for stage1 then CFLAGS
83+# might be empty or "-g". We don't require a C++ compiler, so CXXFLAGS
84+# might also be empty (or "-g", if a non-GCC C++ compiler is in the path).
85+# We want to ensure that TARGET libraries (which we know are built with
86+# gcc) are built with "-O2 -g", so include those options when setting
87+# CFLAGS_FOR_TARGET and CXXFLAGS_FOR_TARGET.
88+if test "x$CFLAGS_FOR_TARGET" = x; then
89+ CFLAGS_FOR_TARGET=$CFLAGS
90+ case " $CFLAGS " in
91+ *" -O2 "*) ;;
92+ *) CFLAGS_FOR_TARGET="-O2 $CFLAGS" ;;
93+ esac
94+ case " $CFLAGS " in
95+ *" -g "* | *" -g3 "*) ;;
96+ *) CFLAGS_FOR_TARGET="-g $CFLAGS" ;;
97+ esac
98+fi
99+
100+
101+if test "x$CXXFLAGS_FOR_TARGET" = x; then
102+ CXXFLAGS_FOR_TARGET=$CXXFLAGS
103+ case " $CXXFLAGS " in
104+ *" -O2 "*) ;;
105+ *) CXXFLAGS_FOR_TARGET="-O2 $CXXFLAGS" ;;
106+ esac
107+ case " $CXXFLAGS " in
108+ *" -g "* | *" -g3 "*) ;;
109+ *) CXXFLAGS_FOR_TARGET="-g $CXXFLAGS" ;;
110+ esac
111+fi
112+
113+
114 # Handle --with-headers=XXX. If the value is not "yes", the contents of
115 # the named directory are copied to $(tooldir)/sys-include.
116 if test x"${with_headers}" != x && test x"${with_headers}" != xno ; then
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/gcc-argument-list-too-long.patch b/meta/recipes-devtools/gcc/gcc-4.7/gcc-argument-list-too-long.patch
new file mode 100644
index 0000000000..70d3c53a84
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/gcc-argument-list-too-long.patch
@@ -0,0 +1,33 @@
1There would be an "Argument list too long" error when the
2build directory is longer than 200, this is caused by:
3
4headers=`echo $(PLUGIN_HEADERS) | tr ' ' '\012' | sort -u`
5
6The PLUGIN_HEADERS is too long before sort, so the "echo" can't handle
7it, use the $(sort list) of GNU make which can handle the too long list
8would fix the problem, the header would be short enough after sorted.
9The "tr ' ' '\012'" was used for translating the space to "\n", the
10$(sort list) doesn't need this.
11
12Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
13
14Upstream-Status: Pending
15---
16 gcc/Makefile.in | 2 +-
17 1 file changed, 1 insertion(+), 1 deletion(-)
18
19diff --git a/gcc/Makefile.in b/gcc/Makefile.in
20--- a/gcc/Makefile.in
21+++ b/gcc/Makefile.in
22@@ -4553,7 +4553,7 @@ install-plugin: installdirs lang.install-plugin s-header-vars install-gengtype
23 # We keep the directory structure for files in config or c-family and .def
24 # files. All other files are flattened to a single directory.
25 $(mkinstalldirs) $(DESTDIR)$(plugin_includedir)
26- headers=`echo $(PLUGIN_HEADERS) | tr ' ' '\012' | sort -u`; \
27+ headers="$(sort $(PLUGIN_HEADERS))"; \
28 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`; \
29 for file in $$headers; do \
30 if [ -f $$file ] ; then \
31--
321.7.10.2
33
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/gcc-armv4-pass-fix-v4bx-to-ld.patch b/meta/recipes-devtools/gcc/gcc-4.7/gcc-armv4-pass-fix-v4bx-to-ld.patch
new file mode 100644
index 0000000000..7e03a3a8a8
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/gcc-armv4-pass-fix-v4bx-to-ld.patch
@@ -0,0 +1,31 @@
1The LINK_SPEC for linux gets overwritten by linux-eabi.h which
2means the value of TARGET_FIX_V4BX_SPEC gets lost and as a result
3the option is not passed to linker when chosing march=armv4
4This patch redefines this in linux-eabi.h and reinserts it
5for eabi defaulting toolchains.
6
7We might want to send it upstream
8
9Upstream-Status: Pending
10
11-Khem
12Index: gcc-4_7-branch/gcc/config/arm/linux-eabi.h
13===================================================================
14--- gcc-4_7-branch.orig/gcc/config/arm/linux-eabi.h 2012-08-21 22:54:12.448453417 -0700
15+++ gcc-4_7-branch/gcc/config/arm/linux-eabi.h 2012-08-21 23:05:18.008478722 -0700
16@@ -78,10 +78,14 @@
17 %{mfloat-abi=soft*:" GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "} \
18 %{!mfloat-abi=*:" GLIBC_DYNAMIC_LINKER_DEFAULT "}"
19
20+/* For armv4 we pass --fix-v4bx to linker to support EABI */
21+#undef TARGET_FIX_V4BX_SPEC
22+#define TARGET_FIX_V4BX_SPEC "%{mcpu=arm8|mcpu=arm810|mcpu=strongarm*|march=armv4: --fix-v4bx}"
23+
24 /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
25 use the GNU/Linux version, not the generic BPABI version. */
26 #undef LINK_SPEC
27-#define LINK_SPEC BE8_LINK_SPEC \
28+#define LINK_SPEC BE8_LINK_SPEC TARGET_FIX_V4BX_SPEC \
29 LINUX_OR_ANDROID_LD (LINUX_TARGET_LINK_SPEC, \
30 LINUX_TARGET_LINK_SPEC " " ANDROID_LINK_SPEC)
31
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/gcc-poison-dir-extend.patch b/meta/recipes-devtools/gcc/gcc-4.7/gcc-poison-dir-extend.patch
new file mode 100644
index 0000000000..607129a6fe
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/gcc-poison-dir-extend.patch
@@ -0,0 +1,27 @@
1Upstream-Status: Pending
2
3Add /sw/include and /opt/include based on the original
4zecke-no-host-includes.patch patch. The original patch checked for
5/usr/include, /sw/include and /opt/include and then triggered a failure and
6aborted.
7
8Instead, we add the two missing items to the current scan. If the user
9wants this to be a failure, they can add "-Werror=poison-system-directories".
10
11Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
12
13Index: gcc-4_7-branch/gcc/incpath.c
14===================================================================
15--- gcc-4_7-branch.orig/gcc/incpath.c 2012-04-10 10:37:09.343387385 -0700
16+++ gcc-4_7-branch/gcc/incpath.c 2012-04-10 10:37:18.975387919 -0700
17@@ -371,7 +371,9 @@
18 {
19 if ((!strncmp (p->name, "/usr/include", 12))
20 || (!strncmp (p->name, "/usr/local/include", 18))
21- || (!strncmp (p->name, "/usr/X11R6/include", 18)))
22+ || (!strncmp (p->name, "/usr/X11R6/include", 18))
23+ || (!strncmp (p->name, "/sw/include", 11))
24+ || (!strncmp (p->name, "/opt/include", 12)))
25 warning (OPT_Wpoison_system_directories,
26 "include location \"%s\" is unsafe for "
27 "cross-compilation",
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/gcc-poison-system-directories.patch b/meta/recipes-devtools/gcc/gcc-4.7/gcc-poison-system-directories.patch
new file mode 100644
index 0000000000..82a55c9b8b
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/gcc-poison-system-directories.patch
@@ -0,0 +1,223 @@
1Upstream-Status: Inappropriate [distribution: codesourcery]
2
3 gcc/
4 2008-07-02 Joseph Myers <joseph@codesourcery.com>
5 * c-incpath.c: Include toplev.h.
6 (merge_include_chains): Use warning instead of cpp_error for
7 system directory poisoning diagnostic.
8 * Makefile.in (c-incpath.o): Depend on toplev.h.
9 * gcc.c (LINK_COMMAND_SPEC): Pass
10 --error-poison-system-directories if
11 -Werror=poison-system-directories.
12
13 2007-06-13 Joseph Myers <joseph@codesourcery.com>
14 * common.opt (--Wno-poison-system-directories): New.
15 * doc/invoke.texi (-Wno-poison-system-directories): Document.
16 * c-incpath.c: Include flags.h.
17 (merge_include_chains): Check flag_poison_system_directories.
18 * gcc.c (LINK_COMMAND_SPEC): Pass --no-poison-system-directories
19 to linker if -Wno-poison-system-directories.
20 * Makefile.in (c-incpath.o): Depend on $(FLAGS_H).
21
22 2007-03-20 Daniel Jacobowitz <dan@codesourcery.com>
23 Joseph Myers <joseph@codesourcery.com>
24 * configure.ac (--enable-poison-system-directories): New option.
25 * configure, config.in: Regenerate.
26 * c-incpath.c (merge_include_chains): If
27 ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of
28 /usr/include, /usr/local/include or /usr/X11R6/include.
29
30Index: gcc-4.7.2/gcc/common.opt
31===================================================================
32--- gcc-4.7.2.orig/gcc/common.opt 2012-08-06 07:34:27.000000000 -0700
33+++ gcc-4.7.2/gcc/common.opt 2012-09-20 07:40:54.708937540 -0700
34@@ -582,6 +582,10 @@
35 Common Var(warn_padded) Warning
36 Warn when padding is required to align structure members
37
38+Wpoison-system-directories
39+Common Var(flag_poison_system_directories) Init(1) Warning
40+Warn for -I and -L options using system directories if cross compiling
41+
42 Wshadow
43 Common Var(warn_shadow) Warning
44 Warn when one local variable shadows another
45Index: gcc-4.7.2/gcc/config.in
46===================================================================
47--- gcc-4.7.2.orig/gcc/config.in 2012-09-20 00:23:55.000000000 -0700
48+++ gcc-4.7.2/gcc/config.in 2012-09-20 07:40:54.708937540 -0700
49@@ -144,6 +144,12 @@
50 #endif
51
52
53+/* Define to warn for use of native system header directories */
54+#ifndef USED_FOR_TARGET
55+#undef ENABLE_POISON_SYSTEM_DIRECTORIES
56+#endif
57+
58+
59 /* Define if you want all operations on RTL (the basic data structure of the
60 optimizer and back end) to be checked for dynamic type safety at runtime.
61 This is quite expensive. */
62Index: gcc-4.7.2/gcc/configure.ac
63===================================================================
64--- gcc-4.7.2.orig/gcc/configure.ac 2012-09-20 07:30:27.000000000 -0700
65+++ gcc-4.7.2/gcc/configure.ac 2012-09-20 07:40:54.708937540 -0700
66@@ -4989,6 +4989,16 @@
67 [specify that runtime libraries should be
68 installed in a compiler-specific directory])])
69
70+AC_ARG_ENABLE([poison-system-directories],
71+ AS_HELP_STRING([--enable-poison-system-directories],
72+ [warn for use of native system header directories]),,
73+ [enable_poison_system_directories=no])
74+if test "x${enable_poison_system_directories}" = "xyes"; then
75+ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
76+ [1],
77+ [Define to warn for use of native system header directories])
78+fi
79+
80 # Substitute configuration variables
81 AC_SUBST(subdirs)
82 AC_SUBST(srcdir)
83Index: gcc-4.7.2/gcc/doc/invoke.texi
84===================================================================
85--- gcc-4.7.2.orig/gcc/doc/invoke.texi 2012-09-14 13:45:27.000000000 -0700
86+++ gcc-4.7.2/gcc/doc/invoke.texi 2012-09-20 07:40:54.712937541 -0700
87@@ -260,6 +260,7 @@
88 -Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded @gol
89 -Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format @gol
90 -Wpointer-arith -Wno-pointer-to-int-cast @gol
91+-Wno-poison-system-directories @gol
92 -Wredundant-decls @gol
93 -Wreturn-type -Wsequence-point -Wshadow @gol
94 -Wsign-compare -Wsign-conversion -Wstack-protector @gol
95@@ -3879,6 +3880,14 @@
96 for most targets, it is made up of code and thus requires the stack
97 to be made executable in order for the program to work properly.
98
99+@item -Wno-poison-system-directories
100+@opindex Wno-poison-system-directories
101+Do not warn for @option{-I} or @option{-L} options using system
102+directories such as @file{/usr/include} when cross compiling. This
103+option is intended for use in chroot environments when such
104+directories contain the correct headers and libraries for the target
105+system rather than the host.
106+
107 @item -Wfloat-equal
108 @opindex Wfloat-equal
109 @opindex Wno-float-equal
110Index: gcc-4.7.2/gcc/gcc.c
111===================================================================
112--- gcc-4.7.2.orig/gcc/gcc.c 2012-08-06 07:34:27.000000000 -0700
113+++ gcc-4.7.2/gcc/gcc.c 2012-09-20 07:40:54.716937541 -0700
114@@ -673,6 +673,8 @@
115 %{flto} %{flto=*} %l " LINK_PIE_SPEC \
116 "%X %{o*} %{e*} %{N} %{n} %{r}\
117 %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}}\
118+ %{Wno-poison-system-directories:--no-poison-system-directories}\
119+ %{Werror=poison-system-directories:--error-poison-system-directories}\
120 %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
121 %{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)}\
122 %{fgnu-tm:%:include(libitm.spec)%(link_itm)}\
123Index: gcc-4.7.2/gcc/incpath.c
124===================================================================
125--- gcc-4.7.2.orig/gcc/incpath.c 2012-01-26 15:34:58.000000000 -0800
126+++ gcc-4.7.2/gcc/incpath.c 2012-09-20 07:40:54.716937541 -0700
127@@ -361,6 +361,24 @@
128 }
129 fprintf (stderr, _("End of search list.\n"));
130 }
131+
132+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
133+ if (flag_poison_system_directories)
134+ {
135+ struct cpp_dir *p;
136+
137+ for (p = heads[QUOTE]; p; p = p->next)
138+ {
139+ if ((!strncmp (p->name, "/usr/include", 12))
140+ || (!strncmp (p->name, "/usr/local/include", 18))
141+ || (!strncmp (p->name, "/usr/X11R6/include", 18)))
142+ warning (OPT_Wpoison_system_directories,
143+ "include location \"%s\" is unsafe for "
144+ "cross-compilation",
145+ p->name);
146+ }
147+ }
148+#endif
149 }
150
151 /* Use given -I paths for #include "..." but not #include <...>, and
152Index: gcc-4.7.2/gcc/Makefile.in
153===================================================================
154--- gcc-4.7.2.orig/gcc/Makefile.in 2012-08-06 07:34:27.000000000 -0700
155+++ gcc-4.7.2/gcc/Makefile.in 2012-09-20 07:40:54.716937541 -0700
156@@ -2065,7 +2065,7 @@
157
158 incpath.o: incpath.c incpath.h $(CONFIG_H) $(SYSTEM_H) $(CPPLIB_H) \
159 intl.h prefix.h coretypes.h $(TM_H) cppdefault.h $(TARGET_H) \
160- $(MACHMODE_H)
161+ $(MACHMODE_H) $(FLAGS_H) toplev.h
162
163 CFLAGS-prefix.o += -DPREFIX=\"$(prefix)\" -DBASEVER=$(BASEVER_s)
164 prefix.o: prefix.c $(CONFIG_H) $(SYSTEM_H) coretypes.h prefix.h \
165Index: gcc-4.7.2/gcc/configure
166===================================================================
167--- gcc-4.7.2.orig/gcc/configure 2012-09-20 07:30:27.000000000 -0700
168+++ gcc-4.7.2/gcc/configure 2012-09-20 07:41:08.548938066 -0700
169@@ -914,6 +914,7 @@
170 with_system_zlib
171 enable_maintainer_mode
172 enable_version_specific_runtime_libs
173+enable_poison_system_directories
174 enable_plugin
175 enable_libquadmath_support
176 with_linker_hash_style
177@@ -1627,6 +1628,8 @@
178 --enable-version-specific-runtime-libs
179 specify that runtime libraries should be installed
180 in a compiler-specific directory
181+ --enable-poison-system-directories
182+ warn for use of native system header directories
183 --enable-plugin enable plugin support
184 --disable-libquadmath-support
185 disable libquadmath support for Fortran
186@@ -18010,7 +18013,7 @@
187 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
188 lt_status=$lt_dlunknown
189 cat > conftest.$ac_ext <<_LT_EOF
190-#line 18013 "configure"
191+#line 18016 "configure"
192 #include "confdefs.h"
193
194 #if HAVE_DLFCN_H
195@@ -18116,7 +18119,7 @@
196 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
197 lt_status=$lt_dlunknown
198 cat > conftest.$ac_ext <<_LT_EOF
199-#line 18119 "configure"
200+#line 18122 "configure"
201 #include "confdefs.h"
202
203 #if HAVE_DLFCN_H
204@@ -27129,6 +27132,19 @@
205 fi
206
207
208+# Check whether --enable-poison-system-directories was given.
209+if test "${enable_poison_system_directories+set}" = set; then :
210+ enableval=$enable_poison_system_directories;
211+else
212+ enable_poison_system_directories=no
213+fi
214+
215+if test "x${enable_poison_system_directories}" = "xyes"; then
216+
217+$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h
218+
219+fi
220+
221 # Substitute configuration variables
222
223
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/gcc-uclibc-locale-ctype_touplow_t.patch b/meta/recipes-devtools/gcc/gcc-4.7/gcc-uclibc-locale-ctype_touplow_t.patch
new file mode 100644
index 0000000000..1648b3b98c
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/gcc-uclibc-locale-ctype_touplow_t.patch
@@ -0,0 +1,72 @@
1Upstream-Status: Pending
2
3Index: gcc-4.6.0/libstdc++-v3/config/locale/generic/c_locale.h
4===================================================================
5--- gcc-4.6.0.orig/libstdc++-v3/config/locale/generic/c_locale.h
6+++ gcc-4.6.0/libstdc++-v3/config/locale/generic/c_locale.h
7@@ -41,13 +41,22 @@
8
9 #include <clocale>
10
11+#ifdef __UCLIBC__
12+#include <features.h>
13+#include <ctype.h>
14+#endif
15+
16 #define _GLIBCXX_NUM_CATEGORIES 0
17
18 namespace std _GLIBCXX_VISIBILITY(default)
19 {
20 _GLIBCXX_BEGIN_NAMESPACE_VERSION
21
22+#ifdef __UCLIBC__
23+ typedef __ctype_touplow_t* __c_locale;
24+#else
25 typedef int* __c_locale;
26+#endif
27
28 // Convert numeric value of type double and long double to string and
29 // return length of string. If vsnprintf is available use it, otherwise
30Index: gcc-4.6.0/libstdc++-v3/config/os/gnu-linux/ctype_base.h
31===================================================================
32--- gcc-4.6.0.orig/libstdc++-v3/config/os/gnu-linux/ctype_base.h
33+++ gcc-4.6.0/libstdc++-v3/config/os/gnu-linux/ctype_base.h
34@@ -34,6 +34,11 @@
35
36 // Information as gleaned from /usr/include/ctype.h
37
38+#ifdef __UCLIBC__
39+#include <features.h>
40+#include <ctype.h>
41+#endif
42+
43 namespace std _GLIBCXX_VISIBILITY(default)
44 {
45 _GLIBCXX_BEGIN_NAMESPACE_VERSION
46@@ -42,7 +47,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
47 struct ctype_base
48 {
49 // Non-standard typedefs.
50+#ifdef __UCLIBC__
51+ typedef const __ctype_touplow_t* __to_type;
52+#else
53 typedef const int* __to_type;
54+#endif
55
56 // NB: Offsets into ctype<char>::_M_table force a particular size
57 // on the mask type. Because of this, we don't use an enum.
58Index: gcc-4.6.0/libstdc++-v3/config/locale/generic/c_locale.cc
59===================================================================
60--- gcc-4.6.0.orig/libstdc++-v3/config/locale/generic/c_locale.cc
61+++ gcc-4.6.0/libstdc++-v3/config/locale/generic/c_locale.cc
62@@ -264,5 +264,10 @@ _GLIBCXX_END_NAMESPACE_VERSION
63 #ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
64 #define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
65 extern "C" void ldbl (void) __attribute__ ((alias (#dbl)))
66+#ifdef __UCLIBC__
67+// This is because __c_locale is of type __ctype_touplow_t* which is short on uclibc. for glibc its int*
68+_GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPs, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPs);
69+#else
70 _GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPi, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi);
71+#endif
72 #endif // _GLIBCXX_LONG_DOUBLE_COMPAT
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/libgcc-sjlj-check.patch b/meta/recipes-devtools/gcc/gcc-4.7/libgcc-sjlj-check.patch
new file mode 100644
index 0000000000..c2fe79217c
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/libgcc-sjlj-check.patch
@@ -0,0 +1,61 @@
1ac_fn_c_try_compile doesnt seem to keep the intermediate files
2which are needed for sjlj test to pass since it greps into the
3generated file. So we run the compiler command using AC_TRY_COMMAND
4which then generates the needed .s file
5
6Signed-off-by: Khem Raj <raj.khem@gmail.com>
7
8Upstream-Status: Pending
9Index: trunk/libgcc/configure
10===================================================================
11--- trunk.orig/libgcc/configure 2012-03-01 22:59:10.112444433 -0800
12+++ trunk/libgcc/configure 2012-03-01 22:59:50.424446325 -0800
13@@ -4525,17 +4525,19 @@
14 }
15
16 _ACEOF
17-CFLAGS_hold=$CFLAGS
18-CFLAGS="--save-temps -fexceptions"
19 libgcc_cv_lib_sjlj_exceptions=unknown
20-if ac_fn_c_try_compile; then :
21+if { ac_try='${CC-cc} -fexceptions -S conftest.c -o conftest.s 1>&5'
22+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
23+ (eval $ac_try) 2>&5
24+ ac_status=$?
25+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
26+ test $ac_status = 0; }; }; then
27 if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1; then
28 libgcc_cv_lib_sjlj_exceptions=yes
29 elif grep _Unwind_Resume conftest.s >/dev/null 2>&1; then
30 libgcc_cv_lib_sjlj_exceptions=no
31 fi
32 fi
33-CFLAGS=$CFLAGS_hold
34 rm -f conftest*
35
36 fi
37Index: trunk/libgcc/configure.ac
38===================================================================
39--- trunk.orig/libgcc/configure.ac 2012-03-01 22:59:10.128444406 -0800
40+++ trunk/libgcc/configure.ac 2012-03-01 22:59:50.428446373 -0800
41@@ -209,16 +209,14 @@
42 bar();
43 }
44 ])])
45-CFLAGS_hold=$CFLAGS
46-CFLAGS="--save-temps -fexceptions"
47 libgcc_cv_lib_sjlj_exceptions=unknown
48-AS_IF([ac_fn_c_try_compile],
49- [if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1; then
50+if AC_TRY_COMMAND(${CC-cc} -fexceptions -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
51+ if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1; then
52 libgcc_cv_lib_sjlj_exceptions=yes
53 elif grep _Unwind_Resume conftest.s >/dev/null 2>&1; then
54 libgcc_cv_lib_sjlj_exceptions=no
55- fi])
56-CFLAGS=$CFLAGS_hold
57+ fi
58+fi
59 rm -f conftest*
60 ])
61
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/libtool.patch b/meta/recipes-devtools/gcc/gcc-4.7/libtool.patch
new file mode 100644
index 0000000000..9580b23d8e
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/libtool.patch
@@ -0,0 +1,29 @@
1libstdc++ from gcc-runtime gets created with -rpath=/usr/lib/../lib for qemux86-64
2when running on am x86_64 build host.
3
4This patch stops this speading to libdir in the libstdc++.la file within libtool.
5Aguably, it shouldn't be passing this into libtool in the first place but
6for now this resolves the nastiest problems this causes.
7
8func_normal_abspath would resolve an empty path to `pwd` so we need
9to filter the zero case.
10
11RP 2012/8/24
12
13Upstream-Status: Pending
14
15Index: git/ltmain.sh
16===================================================================
17--- git.orig/ltmain.sh 2012-08-24 11:45:58.597087961 +0000
18+++ git/ltmain.sh 2012-08-24 12:18:37.961042581 +0000
19@@ -6359,6 +6359,10 @@
20 func_warning "ignoring multiple \`-rpath's for a libtool library"
21
22 install_libdir="$1"
23+ if test -n "$install_libdir"; then
24+ func_normal_abspath "$install_libdir"
25+ install_libdir=$func_normal_abspath_result
26+ fi
27
28 oldlibs=
29 if test -z "$rpath"; then
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/mips64-default-n64.patch b/meta/recipes-devtools/gcc/gcc-4.7/mips64-default-n64.patch
new file mode 100644
index 0000000000..a42569e058
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/mips64-default-n64.patch
@@ -0,0 +1,19 @@
1MIPS64 defaults to n32 ABI, this patch makes it
2so that it defaults to N64 ABI
3
4Upstream-Status: Inappropriate [OE config specific]
5
6Signed-off-by: Khem Raj <raj.khem@gmail.com>
7Index: gcc-4_7-branch/gcc/config.gcc
8===================================================================
9--- gcc-4_7-branch.orig/gcc/config.gcc 2012-04-22 19:30:21.000000000 -0700
10+++ gcc-4_7-branch/gcc/config.gcc 2012-04-22 21:09:57.783403173 -0700
11@@ -1750,7 +1750,7 @@
12 mips64*-*-linux* | mipsisa64*-*-linux*)
13 tm_file="dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/gnu-user64.h mips/linux64.h"
14 tmake_file="${tmake_file} mips/t-linux64"
15- tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_N32"
16+ tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_64"
17 case ${target} in
18 mips64el-st-linux-gnu)
19 tm_file="${tm_file} mips/st.h"
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/optional_libstdc.patch b/meta/recipes-devtools/gcc/gcc-4.7/optional_libstdc.patch
new file mode 100644
index 0000000000..6e7536b693
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/optional_libstdc.patch
@@ -0,0 +1,86 @@
1Upstream-Status: Inappropriate [embedded specific]
2
3gcc-runtime builds libstdc++ separately from gcc-cross-*. Its configure tests using g++
4will not run correctly since by default the linker will try to link against libstdc++
5which shouldn't exist yet. We need an option to disable -lstdc++
6option whilst leaving -lc, -lgcc and other automatic library dependencies added by gcc
7driver. This patch adds such an option which only disables the -lstdc++.
8
9A "standard" gcc build uses xgcc and hence avoids this. We should ask upstream how to
10do this officially, the likely answer is don't build libstdc++ separately.
11
12RP 29/6/10
13
14Index: gcc-4_7-branch/gcc/cp/g++spec.c
15===================================================================
16--- gcc-4_7-branch.orig/gcc/cp/g++spec.c 2012-04-10 10:17:24.647330074 -0700
17+++ gcc-4_7-branch/gcc/cp/g++spec.c 2012-04-10 10:37:49.479389235 -0700
18@@ -127,6 +127,7 @@
19 switch (decoded_options[i].opt_index)
20 {
21 case OPT_nostdlib:
22+ case OPT_nostdlib__:
23 case OPT_nodefaultlibs:
24 library = -1;
25 break;
26Index: gcc-4_7-branch/gcc/doc/invoke.texi
27===================================================================
28--- gcc-4_7-branch.orig/gcc/doc/invoke.texi 2012-04-10 10:37:09.343387385 -0700
29+++ gcc-4_7-branch/gcc/doc/invoke.texi 2012-04-10 10:37:49.483389340 -0700
30@@ -194,7 +194,7 @@
31 -fno-pretty-templates @gol
32 -frepo -fno-rtti -fstats -ftemplate-depth=@var{n} @gol
33 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ @gol
34--fno-default-inline -fvisibility-inlines-hidden @gol
35+-nostdlib++ -fno-default-inline -fvisibility-inlines-hidden @gol
36 -fvisibility-ms-compat @gol
37 -Wabi -Wconversion-null -Wctor-dtor-privacy @gol
38 -Wdelete-non-virtual-dtor -Wnarrowing -Wnoexcept @gol
39@@ -445,7 +445,7 @@
40 @gccoptlist{@var{object-file-name} -l@var{library} @gol
41 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic @gol
42 -s -static -static-libgcc -static-libstdc++ -shared @gol
43--shared-libgcc -symbolic @gol
44+-shared-libgcc -symbolic -nostdlib++ @gol
45 -T @var{script} -Wl,@var{option} -Xlinker @var{option} @gol
46 -u @var{symbol}}
47
48@@ -9438,6 +9438,11 @@
49 libc. These entry points should be supplied through some other
50 mechanism when this option is specified.
51
52+@item -nostdlib++
53+@opindex nostdlib++
54+Do not use the standard system C++ runtime libraries when linking.
55+Only the libraries you specify will be passed to the linker.
56+
57 @cindex @option{-lgcc}, use with @option{-nostdlib}
58 @cindex @option{-nostdlib} and unresolved references
59 @cindex unresolved references and @option{-nostdlib}
60Index: gcc-4_7-branch/gcc/c-family/c.opt
61===================================================================
62--- gcc-4_7-branch.orig/gcc/c-family/c.opt 2012-04-10 10:17:24.667330076 -0700
63+++ gcc-4_7-branch/gcc/c-family/c.opt 2012-04-10 10:37:49.483389340 -0700
64@@ -1171,6 +1171,10 @@
65 C++ ObjC++
66 Do not search standard system include directories for C++
67
68+nostdlib++
69+Driver
70+Do not link standard C++ runtime library
71+
72 o
73 C ObjC C++ ObjC++ Joined Separate
74 ; Documented in common.opt
75Index: gcc-4_7-branch/gcc/gcc.c
76===================================================================
77--- gcc-4_7-branch.orig/gcc/gcc.c 2012-04-10 10:37:09.343387385 -0700
78+++ gcc-4_7-branch/gcc/gcc.c 2012-04-10 10:37:49.487389409 -0700
79@@ -681,6 +681,7 @@
80 %(mflib) " STACK_SPLIT_SPEC "\
81 %{fprofile-arcs|fprofile-generate*|coverage:-lgcov}\
82 %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}\
83+ %{!nostdlib++:}\
84 %{!nostdlib:%{!nostartfiles:%E}} %{T*} }}}}}}"
85 #endif
86
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/ppc_no_crtsavres.patch b/meta/recipes-devtools/gcc/gcc-4.7/ppc_no_crtsavres.patch
new file mode 100644
index 0000000000..92a5d9e176
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/ppc_no_crtsavres.patch
@@ -0,0 +1,72 @@
1Upstream-Status: Backport
2
3Signed-off-by: Khem Raj
4
5Source-url: http://gcc.gnu.org/ml/gcc-patches/2012-05/msg01362.html
6
7Currently, powerpc-linux gcc -Os -mno-multiple uses out-of-linux gpr
8save and restore functions when saving/restoring just one gpr. That's
9quite silly since the function call requires more instructions and is
10slower than an inline save/restore. The only case where it might win
11is when no fprs are restored and the restore function can tear down
12the frame and exit (also loading up lr on ppc64). I guess that's how
13GP_SAVE_INLINE came to be like it is, ie. it's optimised for the
14common case using ldm in the prologue and no fprs. Still, it isn't
15difficult to choose the best combination in all cases, but it does
16mean different logic is needed for restores. I could have implemented
17GP_RESTORE_INLINE and FP_RESORE_INLINE macros but it seemed simpler to
18just move everything into the one place the macros are invoked. AIX
19and Darwin register cutoff doesn't change with this patch.
20
21This patch also enables out-of-line restores in cases that were
22previously disabled due to using inline saves.
23
24Bootstrapped and regression tested powerpc-linux. OK to apply?
25
26 * aix.h (FP_SAVE_INLINE, GP_SAVE_INLINE): Delete.
27 * darwin.h (FP_SAVE_INLINE, GP_SAVE_INLINE): Delete.
28 * sysv4.h (FP_SAVE_INLINE, GP_SAVE_INLINE, V_SAVE_INLINE): Delete.
29 * config/rs6000/rs6000.c (V_SAVE_INLINE): Delete.
30 (rs6000_savres_strategy): Reimplement GP/FP/V_SAVE_INLINE logic.
31 For ELF targets, use out-of-line restores for -Os and any number
32 of regs if the restore exits, and out-of-line gp save for two or
33 more regs. Use save_reg_p to test for holes in reg restore set.
34 Replace "#if" with "if".
35
36Index: gcc-4_7-branch/gcc/config/rs6000/aix.h
37===================================================================
38--- gcc-4_7-branch.orig/gcc/config/rs6000/aix.h 2012-09-07 12:35:35.000000000 -0700
39+++ gcc-4_7-branch/gcc/config/rs6000/aix.h 2012-09-07 15:27:55.215290315 -0700
40@@ -207,11 +207,6 @@
41 { "link_syscalls", LINK_SYSCALLS_SPEC }, \
42 { "link_libg", LINK_LIBG_SPEC }
43
44-/* Define cutoff for using external functions to save floating point. */
45-#define FP_SAVE_INLINE(FIRST_REG) ((FIRST_REG) == 62 || (FIRST_REG) == 63)
46-/* And similarly for general purpose registers. */
47-#define GP_SAVE_INLINE(FIRST_REG) ((FIRST_REG) < 32)
48-
49 #define PROFILE_HOOK(LABEL) output_profile_hook (LABEL)
50
51 /* No version of AIX fully supports AltiVec or 64-bit instructions in
52Index: gcc-4_7-branch/gcc/config/rs6000/darwin.h
53===================================================================
54--- gcc-4_7-branch.orig/gcc/config/rs6000/darwin.h 2012-09-07 12:35:35.000000000 -0700
55+++ gcc-4_7-branch/gcc/config/rs6000/darwin.h 2012-09-07 15:27:55.223290316 -0700
56@@ -173,16 +173,6 @@
57 (RS6000_ALIGN (crtl->outgoing_args_size, 16) \
58 + (STACK_POINTER_OFFSET))
59
60-/* Define cutoff for using out-of-line functions to save registers.
61- Currently on Darwin, we implement FP and GPR out-of-line-saves plus the
62- special routine for 'save everything'. */
63-
64-#undef FP_SAVE_INLINE
65-#define FP_SAVE_INLINE(FIRST_REG) ((FIRST_REG) > 60 && (FIRST_REG) < 64)
66-
67-#undef GP_SAVE_INLINE
68-#define GP_SAVE_INLINE(FIRST_REG) ((FIRST_REG) > 29 && (FIRST_REG) < 32)
69-
70 /* Darwin uses a function call if everything needs to be saved/restored. */
71
72 #undef WORLD_SAVE_P
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/ppc_with_cpu.patch b/meta/recipes-devtools/gcc/gcc-4.7/ppc_with_cpu.patch
new file mode 100644
index 0000000000..5ca12a6848
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/ppc_with_cpu.patch
@@ -0,0 +1,752 @@
1Upstream-Status: Backport
2Signed-off-by: Khem Raj <raj.khem@gmail.com>
3
4From 7630308303ea21c318bd57c35590fc4f249a30d8 Mon Sep 17 00:00:00 2001
5From: hainque <hainque@138bc75d-0d04-0410-961f-82ee72b054a4>
6Date: Wed, 16 May 2012 08:43:41 +0000
7Subject: [PATCH] * config/rs6000/rs6000-opts.h (enum processor_type):
8 Add PROCESSOR_PPC8548. *
9 config/rs6000/rs6000-cpus.def: Reference it for cpu="8548".
10 * config/rs6000/rs6000.md (cpu attribute
11 definition): Add ppc8548. * config/rs6000/8540.md:
12 indicate that the units/patterns apply to ppc8548
13 as well.
14
15 * config/rs6000/rs6000.c (rs6000_option_override_internal): Rename
16 default_cpu into implicit_cpu, conveying what --with-cpu was passed at
17 configure time. Treat implicit_cpu as have_CPU. Pick defaults for SPE
18 related flags, check that what is queried is supported by the selected
19 configuration. Rework the single/double_float and MASK_STRING resets to
20 hit for all the E500 cores (854x + E500MC variants). Select the ppc8540
21 costs for PROCESSOR_PPC8548 as well.
22 (rs6000_issue_rate): case CPU_PPC8548 together with CPU_PPC8540.
23 (rs6000_use_sched_lookahead): Likewise, rewriting function as a case
24 statement instead of a sequence of ifs.
25
26 * config/rs6000/rs6000.h (TARGET_E500): Remove.
27 (TARGET_NO_LWSYNC): Adjust accordingly.
28 * config/rs6000/e500.h (TARGET_E500): Remove.
29 (CHECK_E500_OPTIONS): Adjust accordingly.
30 * config/rs6000/eabispe.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Remove.
31 (TARGET_DEFAULT): Reformat definition to match the one in linuxspe.h.
32 * config/rs6000/linuxspe.h: Likewise.
33 * config/rs6000/vxworks.h: Remove bogus TARGET_E500 overrides and
34 superfluous comments.
35 * config/rs6000/e500-double.h: Remove.
36
37 * config.gcc (pick a default with_cpu): For powerpc*-*-*spe*,
38 default to with_cpu=8548 if --enable-e500-double, and to 8540
39 otherwise.
40 (set misc flags section): For powerpc*|rs6000*, remove inclusion
41 of e500-double.h for --enable-e500-double.
42
43
44
45git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187581 138bc75d-0d04-0410-961f-82ee72b054a4
46---
47 gcc/ChangeLog | 37 +++++++++
48 gcc/config.gcc | 12 +--
49 gcc/config/rs6000/8540.md | 50 ++++++------
50 gcc/config/rs6000/e500-double.h | 24 ------
51 gcc/config/rs6000/e500.h | 10 +--
52 gcc/config/rs6000/eabispe.h | 17 +---
53 gcc/config/rs6000/linuxspe.h | 16 +---
54 gcc/config/rs6000/rs6000-cpus.def | 3 +-
55 gcc/config/rs6000/rs6000-opts.h | 1 +
56 gcc/config/rs6000/rs6000.c | 155 +++++++++++++++++++++++--------------
57 gcc/config/rs6000/rs6000.h | 7 +-
58 gcc/config/rs6000/rs6000.md | 2 +-
59 gcc/config/rs6000/rtems.h | 14 ----
60 gcc/config/rs6000/vxworks.h | 11 ---
61 14 files changed, 178 insertions(+), 181 deletions(-)
62
63Index: gcc-4_7-branch/gcc/config.gcc
64===================================================================
65--- gcc-4_7-branch.orig/gcc/config.gcc 2012-07-06 19:43:53.000000000 -0700
66+++ gcc-4_7-branch/gcc/config.gcc 2012-07-06 19:44:38.000000000 -0700
67@@ -2876,6 +2876,13 @@
68 mips*-*-vxworks)
69 with_arch=mips2
70 ;;
71+ powerpc*-*-*spe*)
72+ if test x$enable_e500_double = xyes; then
73+ with_cpu=8548
74+ else
75+ with_cpu=8540
76+ fi
77+ ;;
78 sparc-leon*-*)
79 with_cpu=v8;
80 ;;
81@@ -3564,11 +3571,6 @@
82 c_target_objs="${c_target_objs} rs6000-c.o"
83 cxx_target_objs="${cxx_target_objs} rs6000-c.o"
84 tmake_file="rs6000/t-rs6000 ${tmake_file}"
85-
86- if test x$enable_e500_double = xyes
87- then
88- tm_file="$tm_file rs6000/e500-double.h"
89- fi
90 ;;
91
92 sh[123456ble]*-*-* | sh-*-*)
93Index: gcc-4_7-branch/gcc/config/rs6000/8540.md
94===================================================================
95--- gcc-4_7-branch.orig/gcc/config/rs6000/8540.md 2012-07-05 23:49:07.000000000 -0700
96+++ gcc-4_7-branch/gcc/config/rs6000/8540.md 2012-07-06 19:44:38.466780001 -0700
97@@ -87,18 +87,18 @@
98 (and (eq_attr "type" "integer,insert_word,insert_dword,cmp,compare,\
99 delayed_compare,var_delayed_compare,fast_compare,\
100 shift,trap,var_shift_rotate,cntlz,exts,isel")
101- (eq_attr "cpu" "ppc8540"))
102+ (eq_attr "cpu" "ppc8540,ppc8548"))
103 "ppc8540_decode,ppc8540_issue+ppc8540_su_stage0+ppc8540_retire")
104
105 (define_insn_reservation "ppc8540_two" 1
106 (and (eq_attr "type" "two")
107- (eq_attr "cpu" "ppc8540"))
108+ (eq_attr "cpu" "ppc8540,ppc8548"))
109 "ppc8540_decode,ppc8540_issue+ppc8540_su_stage0+ppc8540_retire,\
110 ppc8540_issue+ppc8540_su_stage0+ppc8540_retire")
111
112 (define_insn_reservation "ppc8540_three" 1
113 (and (eq_attr "type" "three")
114- (eq_attr "cpu" "ppc8540"))
115+ (eq_attr "cpu" "ppc8540,ppc8548"))
116 "ppc8540_decode,ppc8540_issue+ppc8540_su_stage0+ppc8540_retire,\
117 ppc8540_issue+ppc8540_su_stage0+ppc8540_retire,\
118 ppc8540_issue+ppc8540_su_stage0+ppc8540_retire")
119@@ -106,13 +106,13 @@
120 ;; Branch. Actually this latency time is not used by the scheduler.
121 (define_insn_reservation "ppc8540_branch" 1
122 (and (eq_attr "type" "jmpreg,branch,isync")
123- (eq_attr "cpu" "ppc8540"))
124+ (eq_attr "cpu" "ppc8540,ppc8548"))
125 "ppc8540_decode,ppc8540_bu,ppc8540_retire")
126
127 ;; Multiply
128 (define_insn_reservation "ppc8540_multiply" 4
129 (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
130- (eq_attr "cpu" "ppc8540"))
131+ (eq_attr "cpu" "ppc8540,ppc8548"))
132 "ppc8540_decode,ppc8540_issue+ppc8540_mu_stage0,ppc8540_mu_stage1,\
133 ppc8540_mu_stage2,ppc8540_mu_stage3+ppc8540_retire")
134
135@@ -122,57 +122,57 @@
136 ;; time.
137 (define_insn_reservation "ppc8540_divide" 14
138 (and (eq_attr "type" "idiv")
139- (eq_attr "cpu" "ppc8540"))
140+ (eq_attr "cpu" "ppc8540,ppc8548"))
141 "ppc8540_decode,ppc8540_issue+ppc8540_mu_stage0+ppc8540_mu_div,\
142 ppc8540_mu_div*13")
143
144 ;; CR logical
145 (define_insn_reservation "ppc8540_cr_logical" 1
146 (and (eq_attr "type" "cr_logical,delayed_cr")
147- (eq_attr "cpu" "ppc8540"))
148+ (eq_attr "cpu" "ppc8540,ppc8548"))
149 "ppc8540_decode,ppc8540_bu,ppc8540_retire")
150
151 ;; Mfcr
152 (define_insn_reservation "ppc8540_mfcr" 1
153 (and (eq_attr "type" "mfcr")
154- (eq_attr "cpu" "ppc8540"))
155+ (eq_attr "cpu" "ppc8540,ppc8548"))
156 "ppc8540_decode,ppc8540_issue+ppc8540_su1_stage0+ppc8540_retire")
157
158 ;; Mtcrf
159 (define_insn_reservation "ppc8540_mtcrf" 1
160 (and (eq_attr "type" "mtcr")
161- (eq_attr "cpu" "ppc8540"))
162+ (eq_attr "cpu" "ppc8540,ppc8548"))
163 "ppc8540_decode,ppc8540_issue+ppc8540_su1_stage0+ppc8540_retire")
164
165 ;; Mtjmpr
166 (define_insn_reservation "ppc8540_mtjmpr" 1
167 (and (eq_attr "type" "mtjmpr,mfjmpr")
168- (eq_attr "cpu" "ppc8540"))
169+ (eq_attr "cpu" "ppc8540,ppc8548"))
170 "ppc8540_decode,ppc8540_issue+ppc8540_su_stage0+ppc8540_retire")
171
172 ;; Loads
173 (define_insn_reservation "ppc8540_load" 3
174 (and (eq_attr "type" "load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,\
175 load_l,sync")
176- (eq_attr "cpu" "ppc8540"))
177+ (eq_attr "cpu" "ppc8540,ppc8548"))
178 "ppc8540_decode,ppc8540_issue+ppc8540_lsu,nothing,ppc8540_retire")
179
180 ;; Stores.
181 (define_insn_reservation "ppc8540_store" 3
182 (and (eq_attr "type" "store,store_ux,store_u,store_c")
183- (eq_attr "cpu" "ppc8540"))
184+ (eq_attr "cpu" "ppc8540,ppc8548"))
185 "ppc8540_decode,ppc8540_issue+ppc8540_lsu,nothing,ppc8540_retire")
186
187 ;; Simple FP
188 (define_insn_reservation "ppc8540_simple_float" 1
189 (and (eq_attr "type" "fpsimple")
190- (eq_attr "cpu" "ppc8540"))
191+ (eq_attr "cpu" "ppc8540,ppc8548"))
192 "ppc8540_decode,ppc8540_issue+ppc8540_su_stage0+ppc8540_retire")
193
194 ;; FP
195 (define_insn_reservation "ppc8540_float" 4
196 (and (eq_attr "type" "fp")
197- (eq_attr "cpu" "ppc8540"))
198+ (eq_attr "cpu" "ppc8540,ppc8548"))
199 "ppc8540_decode,ppc8540_issue+ppc8540_mu_stage0,ppc8540_mu_stage1,\
200 ppc8540_mu_stage2,ppc8540_mu_stage3+ppc8540_retire")
201
202@@ -180,44 +180,44 @@
203 ;; because of the result automata will be huge.
204 (define_insn_reservation "ppc8540_float_vector_divide" 29
205 (and (eq_attr "type" "vecfdiv")
206- (eq_attr "cpu" "ppc8540"))
207+ (eq_attr "cpu" "ppc8540,ppc8548"))
208 "ppc8540_decode,ppc8540_issue+ppc8540_mu_stage0+ppc8540_mu_div,\
209 ppc8540_mu_div*28")
210
211 ;; Brinc
212 (define_insn_reservation "ppc8540_brinc" 1
213 (and (eq_attr "type" "brinc")
214- (eq_attr "cpu" "ppc8540"))
215+ (eq_attr "cpu" "ppc8540,ppc8548"))
216 "ppc8540_decode,ppc8540_issue+ppc8540_su_stage0+ppc8540_retire")
217
218 ;; Simple vector
219 (define_insn_reservation "ppc8540_simple_vector" 1
220 (and (eq_attr "type" "vecsimple")
221- (eq_attr "cpu" "ppc8540"))
222+ (eq_attr "cpu" "ppc8540,ppc8548"))
223 "ppc8540_decode,ppc8540_issue+ppc8540_su1_stage0+ppc8540_retire")
224
225 ;; Simple vector compare
226 (define_insn_reservation "ppc8540_simple_vector_compare" 1
227 (and (eq_attr "type" "veccmpsimple")
228- (eq_attr "cpu" "ppc8540"))
229+ (eq_attr "cpu" "ppc8540,ppc8548"))
230 "ppc8540_decode,ppc8540_issue+ppc8540_su_stage0+ppc8540_retire")
231
232 ;; Vector compare
233 (define_insn_reservation "ppc8540_vector_compare" 1
234 (and (eq_attr "type" "veccmp")
235- (eq_attr "cpu" "ppc8540"))
236+ (eq_attr "cpu" "ppc8540,ppc8548"))
237 "ppc8540_decode,ppc8540_issue+ppc8540_su1_stage0+ppc8540_retire")
238
239 ;; evsplatfi evsplati
240 (define_insn_reservation "ppc8540_vector_perm" 1
241 (and (eq_attr "type" "vecperm")
242- (eq_attr "cpu" "ppc8540"))
243+ (eq_attr "cpu" "ppc8540,ppc8548"))
244 "ppc8540_decode,ppc8540_issue+ppc8540_su1_stage0+ppc8540_retire")
245
246 ;; Vector float
247 (define_insn_reservation "ppc8540_float_vector" 4
248 (and (eq_attr "type" "vecfloat")
249- (eq_attr "cpu" "ppc8540"))
250+ (eq_attr "cpu" "ppc8540,ppc8548"))
251 "ppc8540_decode,ppc8540_issue+ppc8540_mu_stage0,ppc8540_mu_stage1,\
252 ppc8540_mu_stage2,ppc8540_mu_stage3+ppc8540_retire")
253
254@@ -226,25 +226,25 @@
255 ;; of miu_stage3 here because we use the average latency time.
256 (define_insn_reservation "ppc8540_vector_divide" 14
257 (and (eq_attr "type" "vecdiv")
258- (eq_attr "cpu" "ppc8540"))
259+ (eq_attr "cpu" "ppc8540,ppc8548"))
260 "ppc8540_decode,ppc8540_issue+ppc8540_mu_stage0+ppc8540_mu_div,\
261 ppc8540_mu_div*13")
262
263 ;; Complex vector.
264 (define_insn_reservation "ppc8540_complex_vector" 4
265 (and (eq_attr "type" "veccomplex")
266- (eq_attr "cpu" "ppc8540"))
267+ (eq_attr "cpu" "ppc8540,ppc8548"))
268 "ppc8540_decode,ppc8540_issue+ppc8540_mu_stage0,ppc8540_mu_stage1,\
269 ppc8540_mu_stage2,ppc8540_mu_stage3+ppc8540_retire")
270
271 ;; Vector load
272 (define_insn_reservation "ppc8540_vector_load" 3
273 (and (eq_attr "type" "vecload")
274- (eq_attr "cpu" "ppc8540"))
275+ (eq_attr "cpu" "ppc8540,ppc8548"))
276 "ppc8540_decode,ppc8540_issue+ppc8540_lsu,nothing,ppc8540_retire")
277
278 ;; Vector store
279 (define_insn_reservation "ppc8540_vector_store" 3
280 (and (eq_attr "type" "vecstore")
281- (eq_attr "cpu" "ppc8540"))
282+ (eq_attr "cpu" "ppc8540,ppc8548"))
283 "ppc8540_decode,ppc8540_issue+ppc8540_lsu,nothing,ppc8540_retire")
284Index: gcc-4_7-branch/gcc/config/rs6000/e500-double.h
285===================================================================
286--- gcc-4_7-branch.orig/gcc/config/rs6000/e500-double.h 2012-07-05 23:49:07.000000000 -0700
287+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
288@@ -1,24 +0,0 @@
289-/* Target definitions for E500 with double precision FP.
290- Copyright (C) 2004, 2006, 2007, 2011 Free Software Foundation, Inc.
291- Contributed by Aldy Hernandez (aldyh@redhat.com).
292-
293- This file is part of GCC.
294-
295- GCC is free software; you can redistribute it and/or modify it
296- under the terms of the GNU General Public License as published
297- by the Free Software Foundation; either version 3, or (at your
298- option) any later version.
299-
300- GCC is distributed in the hope that it will be useful, but WITHOUT
301- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
302- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
303- License for more details.
304-
305- You should have received a copy of the GNU General Public License
306- along with GCC; see the file COPYING3. If not see
307- <http://www.gnu.org/licenses/>. */
308-
309-#undef SUB3TARGET_OVERRIDE_OPTIONS
310-#define SUB3TARGET_OVERRIDE_OPTIONS \
311- if (!global_options_set.x_rs6000_float_gprs) \
312- rs6000_float_gprs = 2;
313Index: gcc-4_7-branch/gcc/config/rs6000/e500.h
314===================================================================
315--- gcc-4_7-branch.orig/gcc/config/rs6000/e500.h 2012-07-05 23:49:07.000000000 -0700
316+++ gcc-4_7-branch/gcc/config/rs6000/e500.h 2012-07-06 19:44:38.466780001 -0700
317@@ -19,7 +19,6 @@
318
319 #undef TARGET_SPE_ABI
320 #undef TARGET_SPE
321-#undef TARGET_E500
322 #undef TARGET_FPRS
323 #undef TARGET_E500_SINGLE
324 #undef TARGET_E500_DOUBLE
325@@ -27,21 +26,20 @@
326
327 #define TARGET_SPE_ABI rs6000_spe_abi
328 #define TARGET_SPE rs6000_spe
329-#define TARGET_E500 (rs6000_cpu == PROCESSOR_PPC8540)
330 #define TARGET_FPRS (rs6000_float_gprs == 0)
331 #define TARGET_E500_SINGLE (TARGET_HARD_FLOAT && rs6000_float_gprs == 1)
332 #define TARGET_E500_DOUBLE (TARGET_HARD_FLOAT && rs6000_float_gprs == 2)
333 #define CHECK_E500_OPTIONS \
334 do { \
335- if (TARGET_E500 || TARGET_SPE || TARGET_SPE_ABI \
336+ if (TARGET_SPE || TARGET_SPE_ABI \
337 || TARGET_E500_SINGLE || TARGET_E500_DOUBLE) \
338 { \
339 if (TARGET_ALTIVEC) \
340- error ("AltiVec and E500 instructions cannot coexist"); \
341+ error ("AltiVec and SPE instructions cannot coexist"); \
342 if (TARGET_VSX) \
343- error ("VSX and E500 instructions cannot coexist"); \
344+ error ("VSX and SPE instructions cannot coexist"); \
345 if (TARGET_64BIT) \
346- error ("64-bit E500 not supported"); \
347+ error ("64-bit SPE not supported"); \
348 if (TARGET_HARD_FLOAT && TARGET_FPRS) \
349 error ("E500 and FPRs not supported"); \
350 } \
351Index: gcc-4_7-branch/gcc/config/rs6000/eabispe.h
352===================================================================
353--- gcc-4_7-branch.orig/gcc/config/rs6000/eabispe.h 2012-07-05 23:49:07.000000000 -0700
354+++ gcc-4_7-branch/gcc/config/rs6000/eabispe.h 2012-07-06 19:44:38.466780001 -0700
355@@ -21,21 +21,8 @@
356 <http://www.gnu.org/licenses/>. */
357
358 #undef TARGET_DEFAULT
359-#define TARGET_DEFAULT (MASK_POWERPC | MASK_NEW_MNEMONICS | MASK_EABI \
360- | MASK_STRICT_ALIGN)
361-
362-#undef SUBSUBTARGET_OVERRIDE_OPTIONS
363-#define SUBSUBTARGET_OVERRIDE_OPTIONS \
364- if (!global_options_set.x_rs6000_cpu_index) \
365- rs6000_cpu = PROCESSOR_PPC8540; \
366- if (!global_options_set.x_rs6000_spe_abi) \
367- rs6000_spe_abi = 1; \
368- if (!global_options_set.x_rs6000_float_gprs) \
369- rs6000_float_gprs = 1; \
370- if (!global_options_set.x_rs6000_spe) \
371- rs6000_spe = 1; \
372- if (target_flags & MASK_64BIT) \
373- error ("-m64 not supported in this configuration")
374+#define TARGET_DEFAULT \
375+ (MASK_POWERPC | MASK_NEW_MNEMONICS | MASK_STRICT_ALIGN | MASK_EABI)
376
377 #undef ASM_DEFAULT_SPEC
378 #define ASM_DEFAULT_SPEC "-mppc -mspe -me500"
379Index: gcc-4_7-branch/gcc/config/rs6000/linuxspe.h
380===================================================================
381--- gcc-4_7-branch.orig/gcc/config/rs6000/linuxspe.h 2012-07-05 23:52:14.000000000 -0700
382+++ gcc-4_7-branch/gcc/config/rs6000/linuxspe.h 2012-07-06 19:44:38.466780001 -0700
383@@ -22,20 +22,8 @@
384
385 /* Override rs6000.h and sysv4.h definition. */
386 #undef TARGET_DEFAULT
387-#define TARGET_DEFAULT (MASK_POWERPC | MASK_NEW_MNEMONICS | MASK_STRICT_ALIGN)
388-
389-#undef SUBSUBTARGET_OVERRIDE_OPTIONS
390-#define SUBSUBTARGET_OVERRIDE_OPTIONS \
391- if (!global_options_set.x_rs6000_cpu_index) \
392- rs6000_cpu = PROCESSOR_PPC8540; \
393- if (!global_options_set.x_rs6000_spe_abi) \
394- rs6000_spe_abi = 1; \
395- if (!global_options_set.x_rs6000_float_gprs) \
396- rs6000_float_gprs = 1; \
397- if (!global_options_set.x_rs6000_spe) \
398- rs6000_spe = 1; \
399- if (target_flags & MASK_64BIT) \
400- error ("-m64 not supported in this configuration")
401+#define TARGET_DEFAULT \
402+ (MASK_POWERPC | MASK_NEW_MNEMONICS | MASK_STRICT_ALIGN)
403
404 #undef ASM_DEFAULT_SPEC
405 #define ASM_DEFAULT_SPEC "-mppc -mspe -me500"
406Index: gcc-4_7-branch/gcc/config/rs6000/rs6000-cpus.def
407===================================================================
408--- gcc-4_7-branch.orig/gcc/config/rs6000/rs6000-cpus.def 2012-07-06 19:43:53.000000000 -0700
409+++ gcc-4_7-branch/gcc/config/rs6000/rs6000-cpus.def 2012-07-06 19:44:38.000000000 -0700
410@@ -76,8 +76,7 @@
411 RS6000_CPU ("823", PROCESSOR_MPCCORE, POWERPC_BASE_MASK | MASK_SOFT_FLOAT)
412 RS6000_CPU ("8540", PROCESSOR_PPC8540, POWERPC_BASE_MASK | MASK_STRICT_ALIGN
413 | MASK_ISEL)
414-/* 8548 has a dummy entry for now. */
415-RS6000_CPU ("8548", PROCESSOR_PPC8540, POWERPC_BASE_MASK | MASK_STRICT_ALIGN
416+RS6000_CPU ("8548", PROCESSOR_PPC8548, POWERPC_BASE_MASK | MASK_STRICT_ALIGN
417 | MASK_ISEL)
418 RS6000_CPU ("a2", PROCESSOR_PPCA2,
419 POWERPC_BASE_MASK | MASK_PPC_GFXOPT | MASK_POWERPC64 | MASK_POPCNTB
420Index: gcc-4_7-branch/gcc/config/rs6000/rs6000-opts.h
421===================================================================
422--- gcc-4_7-branch.orig/gcc/config/rs6000/rs6000-opts.h 2012-07-06 19:43:53.000000000 -0700
423+++ gcc-4_7-branch/gcc/config/rs6000/rs6000-opts.h 2012-07-06 19:44:38.000000000 -0700
424@@ -49,6 +49,7 @@
425 PROCESSOR_PPC7400,
426 PROCESSOR_PPC7450,
427 PROCESSOR_PPC8540,
428+ PROCESSOR_PPC8548,
429 PROCESSOR_PPCE300C2,
430 PROCESSOR_PPCE300C3,
431 PROCESSOR_PPCE500MC,
432Index: gcc-4_7-branch/gcc/config/rs6000/rs6000.c
433===================================================================
434--- gcc-4_7-branch.orig/gcc/config/rs6000/rs6000.c 2012-07-06 19:43:53.194780001 -0700
435+++ gcc-4_7-branch/gcc/config/rs6000/rs6000.c 2012-07-06 19:44:38.000000000 -0700
436@@ -2597,7 +2597,10 @@
437 {
438 bool ret = true;
439 bool have_cpu = false;
440- const char *default_cpu = OPTION_TARGET_CPU_DEFAULT;
441+
442+ /* The default cpu requested at configure time, if any. */
443+ const char *implicit_cpu = OPTION_TARGET_CPU_DEFAULT;
444+
445 int set_masks;
446 int cpu_index;
447 int tune_index;
448@@ -2616,11 +2619,6 @@
449 warning (0, "-malign-power is not supported for 64-bit Darwin;"
450 " it is incompatible with the installed C and C++ libraries");
451
452- if (global_options_set.x_rs6000_spe_abi
453- && rs6000_spe_abi
454- && !TARGET_SPE_ABI)
455- error ("not configured for SPE ABI");
456-
457 /* Numerous experiment shows that IRA based loop pressure
458 calculation works better for RTL loop invariant motion on targets
459 with enough (>= 32) registers. It is an expensive optimization.
460@@ -2656,7 +2654,8 @@
461 /* Process the -mcpu=<xxx> and -mtune=<xxx> argument. If the user changed
462 the cpu in a target attribute or pragma, but did not specify a tuning
463 option, use the cpu for the tuning option rather than the option specified
464- with -mtune on the command line. */
465+ with -mtune on the command line. Process a '--with-cpu' configuration
466+ request as an implicit --cpu. */
467 if (rs6000_cpu_index >= 0)
468 {
469 cpu_index = rs6000_cpu_index;
470@@ -2669,10 +2668,12 @@
471 }
472 else
473 {
474- if (!default_cpu)
475- default_cpu = (TARGET_POWERPC64 ? "powerpc64" : "powerpc");
476+ const char *default_cpu =
477+ (implicit_cpu ? implicit_cpu
478+ : (TARGET_POWERPC64 ? "powerpc64" : "powerpc"));
479
480 rs6000_cpu_index = cpu_index = rs6000_cpu_name_lookup (default_cpu);
481+ have_cpu = implicit_cpu != 0;
482 }
483
484 gcc_assert (cpu_index >= 0);
485@@ -2703,6 +2704,42 @@
486 gcc_assert (tune_index >= 0);
487 rs6000_cpu = processor_target_table[tune_index].processor;
488
489+ /* Pick defaults for SPE related control flags. Do this early to make sure
490+ that the TARGET_ macros are representative ASAP. */
491+ {
492+ int spe_capable_cpu =
493+ (rs6000_cpu == PROCESSOR_PPC8540
494+ || rs6000_cpu == PROCESSOR_PPC8548);
495+
496+ if (!global_options_set.x_rs6000_spe_abi)
497+ rs6000_spe_abi = spe_capable_cpu;
498+
499+ if (!global_options_set.x_rs6000_spe)
500+ rs6000_spe = spe_capable_cpu;
501+
502+ if (!global_options_set.x_rs6000_float_gprs)
503+ rs6000_float_gprs =
504+ (rs6000_cpu == PROCESSOR_PPC8540 ? 1
505+ : rs6000_cpu == PROCESSOR_PPC8548 ? 2
506+ : 0);
507+ }
508+
509+ if (global_options_set.x_rs6000_spe_abi
510+ && rs6000_spe_abi
511+ && !TARGET_SPE_ABI)
512+ error ("not configured for SPE ABI");
513+
514+ if (global_options_set.x_rs6000_spe
515+ && rs6000_spe
516+ && !TARGET_SPE)
517+ error ("not configured for SPE instruction set");
518+
519+ if (main_target_opt != NULL
520+ && ((main_target_opt->x_rs6000_spe_abi != rs6000_spe_abi)
521+ || (main_target_opt->x_rs6000_spe != rs6000_spe)
522+ || (main_target_opt->x_rs6000_float_gprs != rs6000_float_gprs)))
523+ error ("target attribute or pragma changes SPE ABI");
524+
525 if (rs6000_cpu == PROCESSOR_PPCE300C2 || rs6000_cpu == PROCESSOR_PPCE300C3
526 || rs6000_cpu == PROCESSOR_PPCE500MC || rs6000_cpu == PROCESSOR_PPCE500MC64)
527 {
528@@ -2938,35 +2975,44 @@
529 SUB3TARGET_OVERRIDE_OPTIONS;
530 #endif
531
532- if (TARGET_E500 || rs6000_cpu == PROCESSOR_PPCE500MC
533- || rs6000_cpu == PROCESSOR_PPCE500MC64)
534+ /* For the E500 family of cores, reset the single/double FP flags to let us
535+ check that they remain constant across attributes or pragmas. Also,
536+ clear a possible request for string instructions, not supported and which
537+ we might have silently queried above for -Os.
538+
539+ For other families, clear ISEL in case it was set implicitly.
540+ */
541+
542+ switch (rs6000_cpu)
543 {
544- /* The e500 and e500mc do not have string instructions, and we set
545- MASK_STRING above when optimizing for size. */
546- if ((target_flags & MASK_STRING) != 0)
547- target_flags = target_flags & ~MASK_STRING;
548- }
549- else if (global_options_set.x_rs6000_cpu_index)
550- {
551- /* For the powerpc-eabispe configuration, we set all these by
552- default, so let's unset them if we manually set another
553- CPU that is not the E500. */
554- if (main_target_opt != NULL
555- && ((main_target_opt->x_rs6000_spe_abi != rs6000_spe_abi)
556- || (main_target_opt->x_rs6000_spe != rs6000_spe)
557- || (main_target_opt->x_rs6000_float_gprs != rs6000_float_gprs)))
558- error ("target attribute or pragma changes SPE ABI");
559- else
560- {
561- if (!global_options_set.x_rs6000_spe_abi)
562- rs6000_spe_abi = 0;
563- if (!global_options_set.x_rs6000_spe)
564- rs6000_spe = 0;
565- if (!global_options_set.x_rs6000_float_gprs)
566- rs6000_float_gprs = 0;
567- }
568- if (!(target_flags_explicit & MASK_ISEL))
569+ case PROCESSOR_PPC8540:
570+ case PROCESSOR_PPC8548:
571+ case PROCESSOR_PPCE500MC:
572+ case PROCESSOR_PPCE500MC64:
573+
574+ rs6000_single_float = TARGET_E500_SINGLE || TARGET_E500_DOUBLE;
575+ rs6000_double_float = TARGET_E500_DOUBLE;
576+
577+ target_flags &= ~MASK_STRING;
578+
579+ break;
580+
581+ default:
582+
583+ if (have_cpu && !(target_flags_explicit & MASK_ISEL))
584 target_flags &= ~MASK_ISEL;
585+
586+ break;
587+ }
588+
589+ if (main_target_opt)
590+ {
591+ if (main_target_opt->x_rs6000_single_float != rs6000_single_float)
592+ error ("target attribute or pragma changes single precision floating "
593+ "point");
594+ if (main_target_opt->x_rs6000_double_float != rs6000_double_float)
595+ error ("target attribute or pragma changes double precision floating "
596+ "point");
597 }
598
599 /* Detect invalid option combinations with E500. */
600@@ -3193,6 +3239,7 @@
601 break;
602
603 case PROCESSOR_PPC8540:
604+ case PROCESSOR_PPC8548:
605 rs6000_cost = &ppc8540_cost;
606 break;
607
608@@ -3265,26 +3312,6 @@
609 && rs6000_single_float == 0 && rs6000_double_float == 0)
610 rs6000_single_float = rs6000_double_float = 1;
611
612- /* Reset single and double FP flags if target is E500. */
613- if (TARGET_E500)
614- {
615- rs6000_single_float = rs6000_double_float = 0;
616- if (TARGET_E500_SINGLE)
617- rs6000_single_float = 1;
618- if (TARGET_E500_DOUBLE)
619- rs6000_single_float = rs6000_double_float = 1;
620- }
621-
622- if (main_target_opt)
623- {
624- if (main_target_opt->x_rs6000_single_float != rs6000_single_float)
625- error ("target attribute or pragma changes single precision floating "
626- "point");
627- if (main_target_opt->x_rs6000_double_float != rs6000_double_float)
628- error ("target attribute or pragma changes double precision floating "
629- "point");
630- }
631-
632 /* If not explicitly specified via option, decide whether to generate indexed
633 load/store instructions. */
634 if (TARGET_AVOID_XFORM == -1)
635@@ -22816,6 +22843,7 @@
636 case CPU_PPC750:
637 case CPU_PPC7400:
638 case CPU_PPC8540:
639+ case CPU_PPC8548:
640 case CPU_CELL:
641 case CPU_PPCE300C2:
642 case CPU_PPCE300C3:
643@@ -22846,11 +22874,18 @@
644 static int
645 rs6000_use_sched_lookahead (void)
646 {
647- if (rs6000_cpu_attr == CPU_PPC8540)
648- return 4;
649- if (rs6000_cpu_attr == CPU_CELL)
650- return (reload_completed ? 8 : 0);
651- return 0;
652+ switch (rs6000_cpu_attr)
653+ {
654+ case CPU_PPC8540:
655+ case CPU_PPC8548:
656+ return 4;
657+
658+ case CPU_CELL:
659+ return (reload_completed ? 8 : 0);
660+
661+ default:
662+ return 0;
663+ }
664 }
665
666 /* We are choosing insn from the ready queue. Return nonzero if INSN can be chosen. */
667Index: gcc-4_7-branch/gcc/config/rs6000/rs6000.h
668===================================================================
669--- gcc-4_7-branch.orig/gcc/config/rs6000/rs6000.h 2012-07-06 19:43:53.000000000 -0700
670+++ gcc-4_7-branch/gcc/config/rs6000/rs6000.h 2012-07-06 19:44:38.000000000 -0700
671@@ -457,7 +457,6 @@
672
673 #define TARGET_SPE_ABI 0
674 #define TARGET_SPE 0
675-#define TARGET_E500 0
676 #define TARGET_ISEL64 (TARGET_ISEL && TARGET_POWERPC64)
677 #define TARGET_FPRS 1
678 #define TARGET_E500_SINGLE 0
679@@ -500,11 +499,11 @@
680 || TARGET_ALTIVEC \
681 || TARGET_VSX)))
682
683+/* E500 cores only support plain "sync", not lwsync. */
684+#define TARGET_NO_LWSYNC (rs6000_cpu == PROCESSOR_PPC8540 \
685+ || rs6000_cpu == PROCESSOR_PPC8548)
686
687
688-/* E500 processors only support plain "sync", not lwsync. */
689-#define TARGET_NO_LWSYNC TARGET_E500
690-
691 /* Which machine supports the various reciprocal estimate instructions. */
692 #define TARGET_FRES (TARGET_HARD_FLOAT && TARGET_PPC_GFXOPT \
693 && TARGET_FPRS && TARGET_SINGLE_FLOAT)
694Index: gcc-4_7-branch/gcc/config/rs6000/rs6000.md
695===================================================================
696--- gcc-4_7-branch.orig/gcc/config/rs6000/rs6000.md 2012-07-06 19:43:53.000000000 -0700
697+++ gcc-4_7-branch/gcc/config/rs6000/rs6000.md 2012-07-06 19:44:38.000000000 -0700
698@@ -166,7 +166,7 @@
699 ;; Processor type -- this attribute must exactly match the processor_type
700 ;; enumeration in rs6000.h.
701
702-(define_attr "cpu" "rios1,rios2,rs64a,mpccore,ppc403,ppc405,ppc440,ppc476,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,ppce300c2,ppce300c3,ppce500mc,ppce500mc64,power4,power5,power6,power7,cell,ppca2,titan"
703+(define_attr "cpu" "rios1,rios2,rs64a,mpccore,ppc403,ppc405,ppc440,ppc476,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,ppc8548,ppce300c2,ppce300c3,ppce500mc,ppce500mc64,power4,power5,power6,power7,cell,ppca2,titan"
704 (const (symbol_ref "rs6000_cpu_attr")))
705
706
707Index: gcc-4_7-branch/gcc/config/rs6000/rtems.h
708===================================================================
709--- gcc-4_7-branch.orig/gcc/config/rs6000/rtems.h 2012-07-05 23:49:07.000000000 -0700
710+++ gcc-4_7-branch/gcc/config/rs6000/rtems.h 2012-07-06 19:44:38.470780001 -0700
711@@ -55,17 +55,3 @@
712 #undef SUBSUBTARGET_EXTRA_SPECS
713 #define SUBSUBTARGET_EXTRA_SPECS \
714 { "cpp_os_rtems", CPP_OS_RTEMS_SPEC }
715-
716-#undef SUBSUBTARGET_OVERRIDE_OPTIONS
717-#define SUBSUBTARGET_OVERRIDE_OPTIONS \
718- do { \
719- if (TARGET_E500) \
720- { \
721- if (TARGET_HARD_FLOAT && !global_options_set.x_rs6000_float_gprs) \
722- rs6000_float_gprs = 1; \
723- if (rs6000_float_gprs != 0 && !global_options_set.x_rs6000_spe) \
724- rs6000_spe = 1; \
725- if (rs6000_spe && !global_options_set.x_rs6000_spe_abi) \
726- rs6000_spe_abi = 1; \
727- } \
728- } while(0)
729Index: gcc-4_7-branch/gcc/config/rs6000/vxworks.h
730===================================================================
731--- gcc-4_7-branch.orig/gcc/config/rs6000/vxworks.h 2012-07-05 23:49:07.000000000 -0700
732+++ gcc-4_7-branch/gcc/config/rs6000/vxworks.h 2012-07-06 19:44:38.470780001 -0700
733@@ -122,19 +122,8 @@
734
735 #undef ABI_STACK_BOUNDARY
736
737-/* Make -mcpu=8540 imply SPE. ISEL is automatically enabled, the
738- others must be done by hand. Handle -mrtp. Disable -fPIC
739- for -mrtp - the VxWorks PIC model is not compatible with it. */
740 #undef SUBSUBTARGET_OVERRIDE_OPTIONS
741 #define SUBSUBTARGET_OVERRIDE_OPTIONS \
742- do { \
743- if (TARGET_E500) \
744- { \
745- rs6000_spe = 1; \
746- rs6000_spe_abi = 1; \
747- rs6000_float_gprs = 1; \
748- } \
749- \
750 if (!global_options_set.x_g_switch_value) \
751 g_switch_value = SDATA_DEFAULT_SIZE; \
752 VXWORKS_OVERRIDE_OPTIONS; \
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/ppce5500-e6500-support.patch b/meta/recipes-devtools/gcc/gcc-4.7/ppce5500-e6500-support.patch
new file mode 100644
index 0000000000..e3341fc0a6
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/ppce5500-e6500-support.patch
@@ -0,0 +1,713 @@
1Upstream-Status: Backport
2Signed-off-by: Khem Raj <raj.khem@gmail.com>
3
4From b770074cee13445eba1bf4e99649c5ceac9a4b5a Mon Sep 17 00:00:00 2001
5From: edmarwjr <edmarwjr@138bc75d-0d04-0410-961f-82ee72b054a4>
6Date: Tue, 5 Jun 2012 16:05:16 +0000
7Subject: [PATCH] 2012-06-01 Edmar Wienskoski <edmar@freescale.com>
8
9 * config/rs6000/e5500.md: New file.
10 * config/rs6000/e6500.md: New file.
11 * config/rs6000/rs6000.c (processor_costs): Add new costs for
12 e5500 and e6500.
13 (rs6000_option_override_internal): Altivec and Spe options not
14 allowed with e5500. Spe options not allowed with e6500. Increase
15 move inline limit for e5500 and e6500. Disable string instructions
16 for e5500 and e6500. Enable branch targets alignment for e5500 and
17 e6500. Initialize rs6000_cost for e5500 and e6500.
18 (rs6000_adjust_cost): Add extra scheduling cycles between compare
19 and brnach for e5500 and e6500.
20 (rs6000_issue_rate): Set issue rate for e5500 and e6500.
21 * config/rs6000/rs6000-cpus.def: Add cpu definitions for e5500 and
22 e6500.
23 * config/rs6000/rs6000.h (ASM_CPU_SPEC): Add e5500 and e6500.
24 * config/rs6000/rs6000.md (define_attr "cpu"): Add ppce5500 and
25 ppce6500.
26 Include e5500.md and e6500.md.
27 * config/rs6000/rs6000-opt.h (processor_type): Add
28 PROCESSOR_PPCE5500 and PROCESSOR_PPCE6500.
29 * config.gcc (cpu_is_64bit): Add new cores e5500, e6500.
30 (powerpc*-*-*): Add new cores e5500, e6500.
31 * doc/invoke.texi: (item -mcpu): Add e5500 and e6500 to list of cpus.
32
33gcc/testsuite
342012-06-01 Edmar Wienskoski <edmar@freescale.com>
35
36 * gcc.dg/tree-ssa/vector-3.c: Adjust regular expression.
37
38
39
40git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@188244 138bc75d-0d04-0410-961f-82ee72b054a4
41---
42 gcc/ChangeLog | 26 ++++
43 gcc/config.gcc | 6 +-
44 gcc/config/rs6000/e5500.md | 176 ++++++++++++++++++++++++
45 gcc/config/rs6000/e6500.md | 213 ++++++++++++++++++++++++++++++
46 gcc/config/rs6000/rs6000-cpus.def | 4 +
47 gcc/config/rs6000/rs6000-opts.h | 2 +
48 gcc/config/rs6000/rs6000.c | 68 +++++++++-
49 gcc/config/rs6000/rs6000.h | 2 +
50 gcc/config/rs6000/rs6000.md | 4 +-
51 gcc/doc/invoke.texi | 12 +-
52 gcc/testsuite/ChangeLog | 4 +
53 gcc/testsuite/gcc.dg/tree-ssa/vector-3.c | 2 +-
54 12 files changed, 506 insertions(+), 13 deletions(-)
55 create mode 100644 gcc/config/rs6000/e5500.md
56 create mode 100644 gcc/config/rs6000/e6500.md
57
58Index: gcc-4_7-branch/gcc/config.gcc
59===================================================================
60--- gcc-4_7-branch.orig/gcc/config.gcc 2012-07-06 19:52:30.000000000 -0700
61+++ gcc-4_7-branch/gcc/config.gcc 2012-07-06 19:53:26.350779999 -0700
62@@ -413,7 +413,7 @@
63 extra_headers="ppc-asm.h altivec.h spe.h ppu_intrinsics.h paired.h spu2vmx.h vec_types.h si2vmx.h"
64 need_64bit_hwint=yes
65 case x$with_cpu in
66- xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[34567]|xpower6x|xrs64a|xcell|xa2|xe500mc64)
67+ xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[34567]|xpower6x|xrs64a|xcell|xa2|xe500mc64|xe5500|Xe6500)
68 cpu_is_64bit=yes
69 ;;
70 esac
71@@ -3361,8 +3361,8 @@
72 | 401 | 403 | 405 | 405fp | 440 | 440fp | 464 | 464fp \
73 | 476 | 476fp | 505 | 601 | 602 | 603 | 603e | ec603e \
74 | 604 | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 \
75- | a2 | e300c[23] | 854[08] | e500mc | e500mc64 | titan\
76- | 801 | 821 | 823 | 860 | 970 | G3 | G4 | G5 | cell)
77+ | a2 | e300c[23] | 854[08] | e500mc | e500mc64 | e5500 | e6500 \
78+ | titan | 801 | 821 | 823 | 860 | 970 | G3 | G4 | G5 | cell)
79 # OK
80 ;;
81 *)
82Index: gcc-4_7-branch/gcc/config/rs6000/e5500.md
83===================================================================
84--- /dev/null 1970-01-01 00:00:00.000000000 +0000
85+++ gcc-4_7-branch/gcc/config/rs6000/e5500.md 2012-07-06 19:53:26.350779999 -0700
86@@ -0,0 +1,176 @@
87+;; Pipeline description for Freescale PowerPC e5500 core.
88+;; Copyright (C) 2012 Free Software Foundation, Inc.
89+;; Contributed by Edmar Wienskoski (edmar@freescale.com)
90+;;
91+;; This file is part of GCC.
92+;;
93+;; GCC is free software; you can redistribute it and/or modify it
94+;; under the terms of the GNU General Public License as published
95+;; by the Free Software Foundation; either version 3, or (at your
96+;; option) any later version.
97+;;
98+;; GCC is distributed in the hope that it will be useful, but WITHOUT
99+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
100+;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
101+;; License for more details.
102+;;
103+;; You should have received a copy of the GNU General Public License
104+;; along with GCC; see the file COPYING3. If not see
105+;; <http://www.gnu.org/licenses/>.
106+;;
107+;; e5500 64-bit SFX(2), CFX, LSU, FPU, BU
108+;; Max issue 3 insns/clock cycle (includes 1 branch)
109+
110+(define_automaton "e5500_most,e5500_long")
111+(define_cpu_unit "e5500_decode_0,e5500_decode_1" "e5500_most")
112+
113+;; SFX.
114+(define_cpu_unit "e5500_sfx_0,e5500_sfx_1" "e5500_most")
115+
116+;; CFX.
117+(define_cpu_unit "e5500_cfx_stage0,e5500_cfx_stage1" "e5500_most")
118+
119+;; Non-pipelined division.
120+(define_cpu_unit "e5500_cfx_div" "e5500_long")
121+
122+;; LSU.
123+(define_cpu_unit "e5500_lsu" "e5500_most")
124+
125+;; FPU.
126+(define_cpu_unit "e5500_fpu" "e5500_long")
127+
128+;; BU.
129+(define_cpu_unit "e5500_bu" "e5500_most")
130+
131+;; The following units are used to make the automata deterministic.
132+(define_cpu_unit "present_e5500_decode_0" "e5500_most")
133+(define_cpu_unit "present_e5500_sfx_0" "e5500_most")
134+(presence_set "present_e5500_decode_0" "e5500_decode_0")
135+(presence_set "present_e5500_sfx_0" "e5500_sfx_0")
136+
137+;; Some useful abbreviations.
138+(define_reservation "e5500_decode"
139+ "e5500_decode_0|e5500_decode_1+present_e5500_decode_0")
140+(define_reservation "e5500_sfx"
141+ "e5500_sfx_0|e5500_sfx_1+present_e5500_sfx_0")
142+
143+;; SFX.
144+(define_insn_reservation "e5500_sfx" 1
145+ (and (eq_attr "type" "integer,insert_word,insert_dword,delayed_compare,\
146+ shift,cntlz,exts")
147+ (eq_attr "cpu" "ppce5500"))
148+ "e5500_decode,e5500_sfx")
149+
150+(define_insn_reservation "e5500_sfx2" 2
151+ (and (eq_attr "type" "cmp,compare,fast_compare,trap")
152+ (eq_attr "cpu" "ppce5500"))
153+ "e5500_decode,e5500_sfx")
154+
155+(define_insn_reservation "e5500_delayed" 2
156+ (and (eq_attr "type" "var_shift_rotate,var_delayed_compare")
157+ (eq_attr "cpu" "ppce5500"))
158+ "e5500_decode,e5500_sfx*2")
159+
160+(define_insn_reservation "e5500_two" 2
161+ (and (eq_attr "type" "two")
162+ (eq_attr "cpu" "ppce5500"))
163+ "e5500_decode,e5500_decode+e5500_sfx,e5500_sfx")
164+
165+(define_insn_reservation "e5500_three" 3
166+ (and (eq_attr "type" "three")
167+ (eq_attr "cpu" "ppce5500"))
168+ "e5500_decode,(e5500_decode+e5500_sfx)*2,e5500_sfx")
169+
170+;; SFX - Mfcr.
171+(define_insn_reservation "e5500_mfcr" 4
172+ (and (eq_attr "type" "mfcr")
173+ (eq_attr "cpu" "ppce5500"))
174+ "e5500_decode,e5500_sfx_0*4")
175+
176+;; SFX - Mtcrf.
177+(define_insn_reservation "e5500_mtcrf" 1
178+ (and (eq_attr "type" "mtcr")
179+ (eq_attr "cpu" "ppce5500"))
180+ "e5500_decode,e5500_sfx_0")
181+
182+;; SFX - Mtjmpr.
183+(define_insn_reservation "e5500_mtjmpr" 1
184+ (and (eq_attr "type" "mtjmpr,mfjmpr")
185+ (eq_attr "cpu" "ppce5500"))
186+ "e5500_decode,e5500_sfx")
187+
188+;; CFX - Multiply.
189+(define_insn_reservation "e5500_multiply" 4
190+ (and (eq_attr "type" "imul")
191+ (eq_attr "cpu" "ppce5500"))
192+ "e5500_decode,e5500_cfx_stage0,e5500_cfx_stage1")
193+
194+(define_insn_reservation "e5500_multiply_i" 5
195+ (and (eq_attr "type" "imul2,imul3,imul_compare")
196+ (eq_attr "cpu" "ppce5500"))
197+ "e5500_decode,e5500_cfx_stage0,\
198+ e5500_cfx_stage0+e5500_cfx_stage1,e5500_cfx_stage1")
199+
200+;; CFX - Divide.
201+(define_insn_reservation "e5500_divide" 16
202+ (and (eq_attr "type" "idiv")
203+ (eq_attr "cpu" "ppce5500"))
204+ "e5500_decode,e5500_cfx_stage0+e5500_cfx_div,\
205+ e5500_cfx_div*15")
206+
207+(define_insn_reservation "e5500_divide_d" 26
208+ (and (eq_attr "type" "ldiv")
209+ (eq_attr "cpu" "ppce5500"))
210+ "e5500_decode,e5500_cfx_stage0+e5500_cfx_div,\
211+ e5500_cfx_div*25")
212+
213+;; LSU - Loads.
214+(define_insn_reservation "e5500_load" 3
215+ (and (eq_attr "type" "load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,\
216+ load_l,sync")
217+ (eq_attr "cpu" "ppce5500"))
218+ "e5500_decode,e5500_lsu")
219+
220+(define_insn_reservation "e5500_fpload" 4
221+ (and (eq_attr "type" "fpload,fpload_ux,fpload_u")
222+ (eq_attr "cpu" "ppce5500"))
223+ "e5500_decode,e5500_lsu")
224+
225+;; LSU - Stores.
226+(define_insn_reservation "e5500_store" 3
227+ (and (eq_attr "type" "store,store_ux,store_u,store_c")
228+ (eq_attr "cpu" "ppce5500"))
229+ "e5500_decode,e5500_lsu")
230+
231+(define_insn_reservation "e5500_fpstore" 3
232+ (and (eq_attr "type" "fpstore,fpstore_ux,fpstore_u")
233+ (eq_attr "cpu" "ppce5500"))
234+ "e5500_decode,e5500_lsu")
235+
236+;; FP.
237+(define_insn_reservation "e5500_float" 7
238+ (and (eq_attr "type" "fpsimple,fp,fpcompare,dmul")
239+ (eq_attr "cpu" "ppce5500"))
240+ "e5500_decode,e5500_fpu")
241+
242+(define_insn_reservation "e5500_sdiv" 20
243+ (and (eq_attr "type" "sdiv")
244+ (eq_attr "cpu" "ppce5500"))
245+ "e5500_decode,e5500_fpu*20")
246+
247+(define_insn_reservation "e5500_ddiv" 35
248+ (and (eq_attr "type" "ddiv")
249+ (eq_attr "cpu" "ppce5500"))
250+ "e5500_decode,e5500_fpu*35")
251+
252+;; BU.
253+(define_insn_reservation "e5500_branch" 1
254+ (and (eq_attr "type" "jmpreg,branch,isync")
255+ (eq_attr "cpu" "ppce5500"))
256+ "e5500_decode,e5500_bu")
257+
258+;; BU - CR logical.
259+(define_insn_reservation "e5500_cr_logical" 1
260+ (and (eq_attr "type" "cr_logical,delayed_cr")
261+ (eq_attr "cpu" "ppce5500"))
262+ "e5500_decode,e5500_bu")
263Index: gcc-4_7-branch/gcc/config/rs6000/e6500.md
264===================================================================
265--- /dev/null 1970-01-01 00:00:00.000000000 +0000
266+++ gcc-4_7-branch/gcc/config/rs6000/e6500.md 2012-07-06 19:53:26.354779999 -0700
267@@ -0,0 +1,213 @@
268+;; Pipeline description for Freescale PowerPC e6500 core.
269+;; Copyright (C) 2012 Free Software Foundation, Inc.
270+;; Contributed by Edmar Wienskoski (edmar@freescale.com)
271+;;
272+;; This file is part of GCC.
273+;;
274+;; GCC is free software; you can redistribute it and/or modify it
275+;; under the terms of the GNU General Public License as published
276+;; by the Free Software Foundation; either version 3, or (at your
277+;; option) any later version.
278+;;
279+;; GCC is distributed in the hope that it will be useful, but WITHOUT
280+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
281+;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
282+;; License for more details.
283+;;
284+;; You should have received a copy of the GNU General Public License
285+;; along with GCC; see the file COPYING3. If not see
286+;; <http://www.gnu.org/licenses/>.
287+;;
288+;; e6500 64-bit SFX(2), CFX, LSU, FPU, BU, VSFX, VCFX, VFPU, VPERM
289+;; Max issue 3 insns/clock cycle (includes 1 branch)
290+
291+(define_automaton "e6500_most,e6500_long,e6500_vec")
292+(define_cpu_unit "e6500_decode_0,e6500_decode_1" "e6500_most")
293+
294+;; SFX.
295+(define_cpu_unit "e6500_sfx_0,e6500_sfx_1" "e6500_most")
296+
297+;; CFX.
298+(define_cpu_unit "e6500_cfx_stage0,e6500_cfx_stage1" "e6500_most")
299+
300+;; Non-pipelined division.
301+(define_cpu_unit "e6500_cfx_div" "e6500_long")
302+
303+;; LSU.
304+(define_cpu_unit "e6500_lsu" "e6500_most")
305+
306+;; FPU.
307+(define_cpu_unit "e6500_fpu" "e6500_long")
308+
309+;; BU.
310+(define_cpu_unit "e6500_bu" "e6500_most")
311+
312+;; Altivec unit
313+(define_cpu_unit "e6500_vec,e6500_vecperm" "e6500_vec")
314+
315+;; The following units are used to make the automata deterministic.
316+(define_cpu_unit "present_e6500_decode_0" "e6500_most")
317+(define_cpu_unit "present_e6500_sfx_0" "e6500_most")
318+(presence_set "present_e6500_decode_0" "e6500_decode_0")
319+(presence_set "present_e6500_sfx_0" "e6500_sfx_0")
320+
321+;; Some useful abbreviations.
322+(define_reservation "e6500_decode"
323+ "e6500_decode_0|e6500_decode_1+present_e6500_decode_0")
324+(define_reservation "e6500_sfx"
325+ "e6500_sfx_0|e6500_sfx_1+present_e6500_sfx_0")
326+
327+;; SFX.
328+(define_insn_reservation "e6500_sfx" 1
329+ (and (eq_attr "type" "integer,insert_word,insert_dword,delayed_compare,\
330+ shift,cntlz,exts")
331+ (eq_attr "cpu" "ppce6500"))
332+ "e6500_decode,e6500_sfx")
333+
334+(define_insn_reservation "e6500_sfx2" 2
335+ (and (eq_attr "type" "cmp,compare,fast_compare,trap")
336+ (eq_attr "cpu" "ppce6500"))
337+ "e6500_decode,e6500_sfx")
338+
339+(define_insn_reservation "e6500_delayed" 2
340+ (and (eq_attr "type" "var_shift_rotate,var_delayed_compare")
341+ (eq_attr "cpu" "ppce6500"))
342+ "e6500_decode,e6500_sfx*2")
343+
344+(define_insn_reservation "e6500_two" 2
345+ (and (eq_attr "type" "two")
346+ (eq_attr "cpu" "ppce6500"))
347+ "e6500_decode,e6500_decode+e6500_sfx,e6500_sfx")
348+
349+(define_insn_reservation "e6500_three" 3
350+ (and (eq_attr "type" "three")
351+ (eq_attr "cpu" "ppce6500"))
352+ "e6500_decode,(e6500_decode+e6500_sfx)*2,e6500_sfx")
353+
354+;; SFX - Mfcr.
355+(define_insn_reservation "e6500_mfcr" 4
356+ (and (eq_attr "type" "mfcr")
357+ (eq_attr "cpu" "ppce6500"))
358+ "e6500_decode,e6500_sfx_0*4")
359+
360+;; SFX - Mtcrf.
361+(define_insn_reservation "e6500_mtcrf" 1
362+ (and (eq_attr "type" "mtcr")
363+ (eq_attr "cpu" "ppce6500"))
364+ "e6500_decode,e6500_sfx_0")
365+
366+;; SFX - Mtjmpr.
367+(define_insn_reservation "e6500_mtjmpr" 1
368+ (and (eq_attr "type" "mtjmpr,mfjmpr")
369+ (eq_attr "cpu" "ppce6500"))
370+ "e6500_decode,e6500_sfx")
371+
372+;; CFX - Multiply.
373+(define_insn_reservation "e6500_multiply" 4
374+ (and (eq_attr "type" "imul")
375+ (eq_attr "cpu" "ppce6500"))
376+ "e6500_decode,e6500_cfx_stage0,e6500_cfx_stage1")
377+
378+(define_insn_reservation "e6500_multiply_i" 5
379+ (and (eq_attr "type" "imul2,imul3,imul_compare")
380+ (eq_attr "cpu" "ppce6500"))
381+ "e6500_decode,e6500_cfx_stage0,\
382+ e6500_cfx_stage0+e6500_cfx_stage1,e6500_cfx_stage1")
383+
384+;; CFX - Divide.
385+(define_insn_reservation "e6500_divide" 16
386+ (and (eq_attr "type" "idiv")
387+ (eq_attr "cpu" "ppce6500"))
388+ "e6500_decode,e6500_cfx_stage0+e6500_cfx_div,\
389+ e6500_cfx_div*15")
390+
391+(define_insn_reservation "e6500_divide_d" 26
392+ (and (eq_attr "type" "ldiv")
393+ (eq_attr "cpu" "ppce6500"))
394+ "e6500_decode,e6500_cfx_stage0+e6500_cfx_div,\
395+ e6500_cfx_div*25")
396+
397+;; LSU - Loads.
398+(define_insn_reservation "e6500_load" 3
399+ (and (eq_attr "type" "load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,\
400+ load_l,sync")
401+ (eq_attr "cpu" "ppce6500"))
402+ "e6500_decode,e6500_lsu")
403+
404+(define_insn_reservation "e6500_fpload" 4
405+ (and (eq_attr "type" "fpload,fpload_ux,fpload_u")
406+ (eq_attr "cpu" "ppce6500"))
407+ "e6500_decode,e6500_lsu")
408+
409+(define_insn_reservation "e6500_vecload" 4
410+ (and (eq_attr "type" "vecload")
411+ (eq_attr "cpu" "ppce6500"))
412+ "e6500_decode,e6500_lsu")
413+
414+;; LSU - Stores.
415+(define_insn_reservation "e6500_store" 3
416+ (and (eq_attr "type" "store,store_ux,store_u,store_c")
417+ (eq_attr "cpu" "ppce6500"))
418+ "e6500_decode,e6500_lsu")
419+
420+(define_insn_reservation "e6500_fpstore" 3
421+ (and (eq_attr "type" "fpstore,fpstore_ux,fpstore_u")
422+ (eq_attr "cpu" "ppce6500"))
423+ "e6500_decode,e6500_lsu")
424+
425+(define_insn_reservation "e6500_vecstore" 4
426+ (and (eq_attr "type" "vecstore")
427+ (eq_attr "cpu" "ppce6500"))
428+ "e6500_decode,e6500_lsu")
429+
430+;; FP.
431+(define_insn_reservation "e6500_float" 7
432+ (and (eq_attr "type" "fpsimple,fp,fpcompare,dmul")
433+ (eq_attr "cpu" "ppce6500"))
434+ "e6500_decode,e6500_fpu")
435+
436+(define_insn_reservation "e6500_sdiv" 20
437+ (and (eq_attr "type" "sdiv")
438+ (eq_attr "cpu" "ppce6500"))
439+ "e6500_decode,e6500_fpu*20")
440+
441+(define_insn_reservation "e6500_ddiv" 35
442+ (and (eq_attr "type" "ddiv")
443+ (eq_attr "cpu" "ppce6500"))
444+ "e6500_decode,e6500_fpu*35")
445+
446+;; BU.
447+(define_insn_reservation "e6500_branch" 1
448+ (and (eq_attr "type" "jmpreg,branch,isync")
449+ (eq_attr "cpu" "ppce6500"))
450+ "e6500_decode,e6500_bu")
451+
452+;; BU - CR logical.
453+(define_insn_reservation "e6500_cr_logical" 1
454+ (and (eq_attr "type" "cr_logical,delayed_cr")
455+ (eq_attr "cpu" "ppce6500"))
456+ "e6500_decode,e6500_bu")
457+
458+;; VSFX.
459+(define_insn_reservation "e6500_vecsimple" 1
460+ (and (eq_attr "type" "vecsimple,veccmp")
461+ (eq_attr "cpu" "ppce6500"))
462+ "e6500_decode,e6500_vec")
463+
464+;; VCFX.
465+(define_insn_reservation "e6500_veccomplex" 4
466+ (and (eq_attr "type" "veccomplex")
467+ (eq_attr "cpu" "ppce6500"))
468+ "e6500_decode,e6500_vec")
469+
470+;; VFPU.
471+(define_insn_reservation "e6500_vecfloat" 6
472+ (and (eq_attr "type" "vecfloat")
473+ (eq_attr "cpu" "ppce6500"))
474+ "e6500_decode,e6500_vec")
475+
476+;; VPERM.
477+(define_insn_reservation "e6500_vecperm" 2
478+ (and (eq_attr "type" "vecperm")
479+ (eq_attr "cpu" "ppce6500"))
480+ "e6500_decode,e6500_vecperm")
481Index: gcc-4_7-branch/gcc/config/rs6000/rs6000-cpus.def
482===================================================================
483--- gcc-4_7-branch.orig/gcc/config/rs6000/rs6000-cpus.def 2012-07-06 19:52:30.000000000 -0700
484+++ gcc-4_7-branch/gcc/config/rs6000/rs6000-cpus.def 2012-07-06 19:53:26.354779999 -0700
485@@ -87,6 +87,10 @@
486 | MASK_ISEL)
487 RS6000_CPU ("e500mc64", PROCESSOR_PPCE500MC64,
488 POWERPC_BASE_MASK | MASK_POWERPC64 | MASK_PPC_GFXOPT | MASK_ISEL)
489+RS6000_CPU ("e5500", PROCESSOR_PPCE5500, POWERPC_BASE_MASK | MASK_POWERPC64
490+ | MASK_PPC_GFXOPT | MASK_ISEL)
491+RS6000_CPU ("e6500", PROCESSOR_PPCE6500, POWERPC_7400_MASK | MASK_POWERPC64
492+ | MASK_MFCRF | MASK_ISEL)
493 RS6000_CPU ("860", PROCESSOR_MPCCORE, POWERPC_BASE_MASK | MASK_SOFT_FLOAT)
494 RS6000_CPU ("970", PROCESSOR_POWER4,
495 POWERPC_7400_MASK | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64)
496Index: gcc-4_7-branch/gcc/config/rs6000/rs6000-opts.h
497===================================================================
498--- gcc-4_7-branch.orig/gcc/config/rs6000/rs6000-opts.h 2012-07-06 19:52:30.000000000 -0700
499+++ gcc-4_7-branch/gcc/config/rs6000/rs6000-opts.h 2012-07-06 19:53:26.354779999 -0700
500@@ -54,6 +54,8 @@
501 PROCESSOR_PPCE300C3,
502 PROCESSOR_PPCE500MC,
503 PROCESSOR_PPCE500MC64,
504+ PROCESSOR_PPCE5500,
505+ PROCESSOR_PPCE6500,
506 PROCESSOR_POWER4,
507 PROCESSOR_POWER5,
508 PROCESSOR_POWER6,
509Index: gcc-4_7-branch/gcc/config/rs6000/rs6000.c
510===================================================================
511--- gcc-4_7-branch.orig/gcc/config/rs6000/rs6000.c 2012-07-06 19:52:30.000000000 -0700
512+++ gcc-4_7-branch/gcc/config/rs6000/rs6000.c 2012-07-06 19:53:26.354779999 -0700
513@@ -755,6 +755,44 @@
514 1, /* prefetch streams /*/
515 };
516
517+/* Instruction costs on PPCE5500 processors. */
518+static const
519+struct processor_costs ppce5500_cost = {
520+ COSTS_N_INSNS (5), /* mulsi */
521+ COSTS_N_INSNS (5), /* mulsi_const */
522+ COSTS_N_INSNS (4), /* mulsi_const9 */
523+ COSTS_N_INSNS (5), /* muldi */
524+ COSTS_N_INSNS (14), /* divsi */
525+ COSTS_N_INSNS (14), /* divdi */
526+ COSTS_N_INSNS (7), /* fp */
527+ COSTS_N_INSNS (10), /* dmul */
528+ COSTS_N_INSNS (36), /* sdiv */
529+ COSTS_N_INSNS (66), /* ddiv */
530+ 64, /* cache line size */
531+ 32, /* l1 cache */
532+ 128, /* l2 cache */
533+ 1, /* prefetch streams /*/
534+};
535+
536+/* Instruction costs on PPCE6500 processors. */
537+static const
538+struct processor_costs ppce6500_cost = {
539+ COSTS_N_INSNS (5), /* mulsi */
540+ COSTS_N_INSNS (5), /* mulsi_const */
541+ COSTS_N_INSNS (4), /* mulsi_const9 */
542+ COSTS_N_INSNS (5), /* muldi */
543+ COSTS_N_INSNS (14), /* divsi */
544+ COSTS_N_INSNS (14), /* divdi */
545+ COSTS_N_INSNS (7), /* fp */
546+ COSTS_N_INSNS (10), /* dmul */
547+ COSTS_N_INSNS (36), /* sdiv */
548+ COSTS_N_INSNS (66), /* ddiv */
549+ 64, /* cache line size */
550+ 32, /* l1 cache */
551+ 128, /* l2 cache */
552+ 1, /* prefetch streams /*/
553+};
554+
555 /* Instruction costs on AppliedMicro Titan processors. */
556 static const
557 struct processor_costs titan_cost = {
558@@ -2741,13 +2779,19 @@
559 error ("target attribute or pragma changes SPE ABI");
560
561 if (rs6000_cpu == PROCESSOR_PPCE300C2 || rs6000_cpu == PROCESSOR_PPCE300C3
562- || rs6000_cpu == PROCESSOR_PPCE500MC || rs6000_cpu == PROCESSOR_PPCE500MC64)
563+ || rs6000_cpu == PROCESSOR_PPCE500MC || rs6000_cpu == PROCESSOR_PPCE500MC64
564+ || rs6000_cpu == PROCESSOR_PPCE5500)
565 {
566 if (TARGET_ALTIVEC)
567 error ("AltiVec not supported in this target");
568 if (TARGET_SPE)
569 error ("SPE not supported in this target");
570 }
571+ if (rs6000_cpu == PROCESSOR_PPCE6500)
572+ {
573+ if (TARGET_SPE)
574+ error ("SPE not supported in this target");
575+ }
576
577 /* Disable Cell microcode if we are optimizing for the Cell
578 and not optimizing for size. */
579@@ -2842,7 +2886,9 @@
580 user's opinion, though. */
581 if (rs6000_block_move_inline_limit == 0
582 && (rs6000_cpu == PROCESSOR_PPCE500MC
583- || rs6000_cpu == PROCESSOR_PPCE500MC64))
584+ || rs6000_cpu == PROCESSOR_PPCE500MC64
585+ || rs6000_cpu == PROCESSOR_PPCE5500
586+ || rs6000_cpu == PROCESSOR_PPCE6500))
587 rs6000_block_move_inline_limit = 128;
588
589 /* store_one_arg depends on expand_block_move to handle at least the
590@@ -2989,6 +3035,8 @@
591 case PROCESSOR_PPC8548:
592 case PROCESSOR_PPCE500MC:
593 case PROCESSOR_PPCE500MC64:
594+ case PROCESSOR_PPCE5500:
595+ case PROCESSOR_PPCE6500:
596
597 rs6000_single_float = TARGET_E500_SINGLE || TARGET_E500_DOUBLE;
598 rs6000_double_float = TARGET_E500_DOUBLE;
599@@ -3033,7 +3081,9 @@
600 || rs6000_cpu == PROCESSOR_POWER6
601 || rs6000_cpu == PROCESSOR_POWER7
602 || rs6000_cpu == PROCESSOR_PPCE500MC
603- || rs6000_cpu == PROCESSOR_PPCE500MC64);
604+ || rs6000_cpu == PROCESSOR_PPCE500MC64
605+ || rs6000_cpu == PROCESSOR_PPCE5500
606+ || rs6000_cpu == PROCESSOR_PPCE6500);
607
608 /* Allow debug switches to override the above settings. These are set to -1
609 in rs6000.opt to indicate the user hasn't directly set the switch. */
610@@ -3256,6 +3306,14 @@
611 rs6000_cost = &ppce500mc64_cost;
612 break;
613
614+ case PROCESSOR_PPCE5500:
615+ rs6000_cost = &ppce5500_cost;
616+ break;
617+
618+ case PROCESSOR_PPCE6500:
619+ rs6000_cost = &ppce6500_cost;
620+ break;
621+
622 case PROCESSOR_TITAN:
623 rs6000_cost = &titan_cost;
624 break;
625@@ -22304,6 +22362,8 @@
626 || rs6000_cpu_attr == CPU_PPC750
627 || rs6000_cpu_attr == CPU_PPC7400
628 || rs6000_cpu_attr == CPU_PPC7450
629+ || rs6000_cpu_attr == CPU_PPCE5500
630+ || rs6000_cpu_attr == CPU_PPCE6500
631 || rs6000_cpu_attr == CPU_POWER4
632 || rs6000_cpu_attr == CPU_POWER5
633 || rs6000_cpu_attr == CPU_POWER7
634@@ -22849,6 +22909,8 @@
635 case CPU_PPCE300C3:
636 case CPU_PPCE500MC:
637 case CPU_PPCE500MC64:
638+ case CPU_PPCE5500:
639+ case CPU_PPCE6500:
640 case CPU_TITAN:
641 return 2;
642 case CPU_RIOS2:
643Index: gcc-4_7-branch/gcc/config/rs6000/rs6000.h
644===================================================================
645--- gcc-4_7-branch.orig/gcc/config/rs6000/rs6000.h 2012-07-06 19:52:30.000000000 -0700
646+++ gcc-4_7-branch/gcc/config/rs6000/rs6000.h 2012-07-06 19:53:26.358779999 -0700
647@@ -168,6 +168,8 @@
648 %{mcpu=e300c3: -me300} \
649 %{mcpu=e500mc: -me500mc} \
650 %{mcpu=e500mc64: -me500mc64} \
651+%{mcpu=e5500: -me5500} \
652+%{mcpu=e6500: -me6500} \
653 %{maltivec: -maltivec} \
654 %{mvsx: -mvsx %{!maltivec: -maltivec} %{!mcpu*: %(asm_cpu_power7)}} \
655 -many"
656Index: gcc-4_7-branch/gcc/config/rs6000/rs6000.md
657===================================================================
658--- gcc-4_7-branch.orig/gcc/config/rs6000/rs6000.md 2012-07-06 19:52:32.000000000 -0700
659+++ gcc-4_7-branch/gcc/config/rs6000/rs6000.md 2012-07-06 19:53:26.358779999 -0700
660@@ -166,7 +166,7 @@
661 ;; Processor type -- this attribute must exactly match the processor_type
662 ;; enumeration in rs6000.h.
663
664-(define_attr "cpu" "rios1,rios2,rs64a,mpccore,ppc403,ppc405,ppc440,ppc476,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,ppc8548,ppce300c2,ppce300c3,ppce500mc,ppce500mc64,power4,power5,power6,power7,cell,ppca2,titan"
665+(define_attr "cpu" "rios1,rios2,rs64a,mpccore,ppc403,ppc405,ppc440,ppc476,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,ppc8548,ppce300c2,ppce300c3,ppce500mc,ppce500mc64,ppce5500,ppce6500,power4,power5,power6,power7,cell,ppca2,titan"
666 (const (symbol_ref "rs6000_cpu_attr")))
667
668
669@@ -194,6 +194,8 @@
670 (include "e300c2c3.md")
671 (include "e500mc.md")
672 (include "e500mc64.md")
673+(include "e5500.md")
674+(include "e6500.md")
675 (include "power4.md")
676 (include "power5.md")
677 (include "power6.md")
678Index: gcc-4_7-branch/gcc/doc/invoke.texi
679===================================================================
680--- gcc-4_7-branch.orig/gcc/doc/invoke.texi 2012-07-06 19:43:53.000000000 -0700
681+++ gcc-4_7-branch/gcc/doc/invoke.texi 2012-07-06 19:53:26.362779999 -0700
682@@ -16565,11 +16565,13 @@
683 @samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{630}, @samp{740},
684 @samp{7400}, @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
685 @samp{860}, @samp{970}, @samp{8540}, @samp{a2}, @samp{e300c2},
686-@samp{e300c3}, @samp{e500mc}, @samp{e500mc64}, @samp{ec603e}, @samp{G3},
687-@samp{G4}, @samp{G5}, @samp{titan}, @samp{power}, @samp{power2}, @samp{power3},
688-@samp{power4}, @samp{power5}, @samp{power5+}, @samp{power6}, @samp{power6x},
689-@samp{power7}, @samp{common}, @samp{powerpc}, @samp{powerpc64}, @samp{rios},
690-@samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}.
691+@samp{e300c3}, @samp{e500mc}, @samp{e500mc64}, @samp{e5500},
692+@samp{e6500}, @samp{ec603e}, @samp{G3}, @samp{G4}, @samp{G5},
693+@samp{titan}, @samp{power}, @samp{power2}, @samp{power3},
694+@samp{power4}, @samp{power5}, @samp{power5+}, @samp{power6},
695+@samp{power6x}, @samp{power7}, @samp{common}, @samp{powerpc},
696+@samp{powerpc64}, @samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc},
697+and @samp{rs64}.
698
699 @option{-mcpu=common} selects a completely generic processor. Code
700 generated under this option will run on any POWER or PowerPC processor.
701Index: gcc-4_7-branch/gcc/testsuite/gcc.dg/tree-ssa/vector-3.c
702===================================================================
703--- gcc-4_7-branch.orig/gcc/testsuite/gcc.dg/tree-ssa/vector-3.c 2012-07-06 19:43:53.000000000 -0700
704+++ gcc-4_7-branch/gcc/testsuite/gcc.dg/tree-ssa/vector-3.c 2012-07-06 19:53:26.362779999 -0700
705@@ -14,7 +14,7 @@
706
707 /* We should be able to optimize this to just "return 0.0;" */
708 /* { dg-final { scan-tree-dump-times "BIT_FIELD_REF" 0 "optimized"} } */
709-/* { dg-final { scan-tree-dump-times "0.0" 1 "optimized"} } */
710+/* { dg-final { scan-tree-dump-times "0\\\.0" 1 "optimized"} } */
711
712 /* { dg-final { cleanup-tree-dump "optimized" } } */
713
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/pr32219.patch b/meta/recipes-devtools/gcc/gcc-4.7/pr32219.patch
new file mode 100644
index 0000000000..bea2063049
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/pr32219.patch
@@ -0,0 +1,72 @@
1Upstream-Status:Backport
2Hi,
3
4As suggested by richi.
5regtested on i686-linux-gnu with all default languages and no regressions.
6Ok for trunk?
7
8gcc/ChangeLog
92010-03-15 Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
10
11 PR target/32219
12 * varasm.c (default_binds_local_p_1): Weak data is not local.
13
14gcc/testsuite/ChangeLog
152010-03-15 Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
16
17 PR target/32219
18 * gcc.dg/visibility-21.c: New test.
19
20Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
21---
22 gcc/testsuite/gcc.dg/visibility-21.c | 14 ++++++++++++++
23 gcc/varasm.c | 8 ++++----
24 2 files changed, 18 insertions(+), 4 deletions(-)
25 create mode 100644 gcc/testsuite/gcc.dg/visibility-21.c
26
27Index: gcc-4_7-branch/gcc/testsuite/gcc.dg/visibility-21.c
28===================================================================
29--- /dev/null 1970-01-01 00:00:00.000000000 +0000
30+++ gcc-4_7-branch/gcc/testsuite/gcc.dg/visibility-21.c 2012-04-10 10:39:38.083396738 -0700
31@@ -0,0 +1,14 @@
32+/* PR target/32219 */
33+/* { dg-do run } */
34+/* { dg-require-visibility "" } */
35+/* { dg-options "-fPIC" { target fpic } } */
36+
37+extern void f() __attribute__((weak,visibility("hidden")));
38+extern int puts( char const* );
39+int main()
40+{
41+ if (f)
42+ f();
43+ return 0;
44+}
45+
46Index: gcc-4_7-branch/gcc/varasm.c
47===================================================================
48--- gcc-4_7-branch.orig/gcc/varasm.c 2012-04-10 10:17:24.127330049 -0700
49+++ gcc-4_7-branch/gcc/varasm.c 2012-04-10 10:39:38.087396414 -0700
50@@ -6937,6 +6937,10 @@
51 /* Static variables are always local. */
52 else if (! TREE_PUBLIC (exp))
53 local_p = true;
54+ /* hidden weak can't be overridden by something non-local, all
55+ that is possible is that it is not defined at all. */
56+ else if (DECL_WEAK (exp))
57+ local_p = false;
58 /* A variable is local if the user has said explicitly that it will
59 be. */
60 else if ((DECL_VISIBILITY_SPECIFIED (exp)
61@@ -6950,11 +6954,6 @@
62 local. */
63 else if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
64 local_p = true;
65- /* Default visibility weak data can be overridden by a strong symbol
66- in another module and so are not local. */
67- else if (DECL_WEAK (exp)
68- && !resolved_locally)
69- local_p = false;
70 /* If PIC, then assume that any global name can be overridden by
71 symbols resolved from other modules. */
72 else if (shlib)
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/rs6000-tables.patch b/meta/recipes-devtools/gcc/gcc-4.7/rs6000-tables.patch
new file mode 100644
index 0000000000..5b8064b02d
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/rs6000-tables.patch
@@ -0,0 +1,135 @@
1Upstream-Status: Backport
2Signed-off-by: Khem Raj <raj.khem@gmail.com>
3
4From 98da658b6944d0bf54beb10001e567d8b8922666 Mon Sep 17 00:00:00 2001
5From: edmarwjr <edmarwjr@138bc75d-0d04-0410-961f-82ee72b054a4>
6Date: Wed, 6 Jun 2012 18:09:18 +0000
7Subject: [PATCH] 2012-06-06 Edmar Wienskoski <edmar@freescale.com>
8
9 * config/rs6000/rs6000-tables.opt: Regenerated.
10
11
12
13git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@188274 138bc75d-0d04-0410-961f-82ee72b054a4
14---
15 gcc/ChangeLog | 4 +++
16 gcc/config/rs6000/rs6000-tables.opt | 58 +++++++++++++++++++----------------
17 2 files changed, 36 insertions(+), 26 deletions(-)
18
19Index: git/gcc/config/rs6000/rs6000-tables.opt
20===================================================================
21--- git.orig/gcc/config/rs6000/rs6000-tables.opt 2012-07-06 20:54:29.000000000 -0700
22+++ git/gcc/config/rs6000/rs6000-tables.opt 2012-07-06 20:58:12.436646819 -0700
23@@ -126,80 +126,86 @@
24 Enum(rs6000_cpu_opt_value) String(e500mc64) Value(32)
25
26 EnumValue
27-Enum(rs6000_cpu_opt_value) String(860) Value(33)
28+Enum(rs6000_cpu_opt_value) String(e5500) Value(33)
29
30 EnumValue
31-Enum(rs6000_cpu_opt_value) String(970) Value(34)
32+Enum(rs6000_cpu_opt_value) String(e6500) Value(34)
33
34 EnumValue
35-Enum(rs6000_cpu_opt_value) String(cell) Value(35)
36+Enum(rs6000_cpu_opt_value) String(860) Value(35)
37
38 EnumValue
39-Enum(rs6000_cpu_opt_value) String(common) Value(36)
40+Enum(rs6000_cpu_opt_value) String(970) Value(36)
41
42 EnumValue
43-Enum(rs6000_cpu_opt_value) String(ec603e) Value(37)
44+Enum(rs6000_cpu_opt_value) String(cell) Value(37)
45
46 EnumValue
47-Enum(rs6000_cpu_opt_value) String(G3) Value(38)
48+Enum(rs6000_cpu_opt_value) String(common) Value(38)
49
50 EnumValue
51-Enum(rs6000_cpu_opt_value) String(G4) Value(39)
52+Enum(rs6000_cpu_opt_value) String(ec603e) Value(39)
53
54 EnumValue
55-Enum(rs6000_cpu_opt_value) String(G5) Value(40)
56+Enum(rs6000_cpu_opt_value) String(G3) Value(40)
57
58 EnumValue
59-Enum(rs6000_cpu_opt_value) String(titan) Value(41)
60+Enum(rs6000_cpu_opt_value) String(G4) Value(41)
61
62 EnumValue
63-Enum(rs6000_cpu_opt_value) String(power) Value(42)
64+Enum(rs6000_cpu_opt_value) String(G5) Value(42)
65
66 EnumValue
67-Enum(rs6000_cpu_opt_value) String(power2) Value(43)
68+Enum(rs6000_cpu_opt_value) String(titan) Value(43)
69
70 EnumValue
71-Enum(rs6000_cpu_opt_value) String(power3) Value(44)
72+Enum(rs6000_cpu_opt_value) String(power) Value(44)
73
74 EnumValue
75-Enum(rs6000_cpu_opt_value) String(power4) Value(45)
76+Enum(rs6000_cpu_opt_value) String(power2) Value(45)
77
78 EnumValue
79-Enum(rs6000_cpu_opt_value) String(power5) Value(46)
80+Enum(rs6000_cpu_opt_value) String(power3) Value(46)
81
82 EnumValue
83-Enum(rs6000_cpu_opt_value) String(power5+) Value(47)
84+Enum(rs6000_cpu_opt_value) String(power4) Value(47)
85
86 EnumValue
87-Enum(rs6000_cpu_opt_value) String(power6) Value(48)
88+Enum(rs6000_cpu_opt_value) String(power5) Value(48)
89
90 EnumValue
91-Enum(rs6000_cpu_opt_value) String(power6x) Value(49)
92+Enum(rs6000_cpu_opt_value) String(power5+) Value(49)
93
94 EnumValue
95-Enum(rs6000_cpu_opt_value) String(power7) Value(50)
96+Enum(rs6000_cpu_opt_value) String(power6) Value(50)
97
98 EnumValue
99-Enum(rs6000_cpu_opt_value) String(powerpc) Value(51)
100+Enum(rs6000_cpu_opt_value) String(power6x) Value(51)
101
102 EnumValue
103-Enum(rs6000_cpu_opt_value) String(powerpc64) Value(52)
104+Enum(rs6000_cpu_opt_value) String(power7) Value(52)
105
106 EnumValue
107-Enum(rs6000_cpu_opt_value) String(rios) Value(53)
108+Enum(rs6000_cpu_opt_value) String(powerpc) Value(53)
109
110 EnumValue
111-Enum(rs6000_cpu_opt_value) String(rios1) Value(54)
112+Enum(rs6000_cpu_opt_value) String(powerpc64) Value(54)
113
114 EnumValue
115-Enum(rs6000_cpu_opt_value) String(rios2) Value(55)
116+Enum(rs6000_cpu_opt_value) String(rios) Value(55)
117
118 EnumValue
119-Enum(rs6000_cpu_opt_value) String(rsc) Value(56)
120+Enum(rs6000_cpu_opt_value) String(rios1) Value(56)
121
122 EnumValue
123-Enum(rs6000_cpu_opt_value) String(rsc1) Value(57)
124+Enum(rs6000_cpu_opt_value) String(rios2) Value(57)
125
126 EnumValue
127-Enum(rs6000_cpu_opt_value) String(rs64) Value(58)
128+Enum(rs6000_cpu_opt_value) String(rsc) Value(58)
129+
130+EnumValue
131+Enum(rs6000_cpu_opt_value) String(rsc1) Value(59)
132+
133+EnumValue
134+Enum(rs6000_cpu_opt_value) String(rs64) Value(60)
135
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/run-ptest b/meta/recipes-devtools/gcc/gcc-4.7/run-ptest
new file mode 100644
index 0000000000..36eccc30c7
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/run-ptest
@@ -0,0 +1,3 @@
1#!/bin/sh
2
3make -C libstdc++-v3/testsuite -i check | sed -e 's/ERROR/FAIL/' -e 's/XFAIL/PASS/' -e 's/XPASS/FAIL/' -e 's/UNRESOLVED/SKIP/' -e 's/UNTESTED/SKIP/' -e 's/UNSUPPORTED/SKIP/'
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/use-defaults.h-and-t-oe-in-B.patch b/meta/recipes-devtools/gcc/gcc-4.7/use-defaults.h-and-t-oe-in-B.patch
new file mode 100644
index 0000000000..212c26324c
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/use-defaults.h-and-t-oe-in-B.patch
@@ -0,0 +1,77 @@
1Upstream-Status: Pending
2
3Use the defaults.h in ${B} instead of ${S}, and t-oe in ${B}, so that
4the source can be shared between gcc-cross-initial,
5gcc-cross-intermediate, gcc-cross, gcc-runtime, and also the sdk build.
6---
7 gcc/Makefile.in | 2 +-
8 gcc/configure | 4 ++--
9 gcc/configure.ac | 4 ++--
10 gcc/mkconfig.sh | 4 ++--
11 4 files changed, 7 insertions(+), 7 deletions(-)
12
13Index: gcc-4_7-branch/gcc/Makefile.in
14===================================================================
15--- gcc-4_7-branch.orig/gcc/Makefile.in 2012-04-10 10:37:09.347387424 -0700
16+++ gcc-4_7-branch/gcc/Makefile.in 2012-04-10 10:39:24.019393881 -0700
17@@ -481,7 +481,7 @@
18 TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@
19
20 xmake_file=@xmake_file@
21-tmake_file=@tmake_file@
22+tmake_file=@tmake_file@ ./t-oe
23 TM_ENDIAN_CONFIG=@TM_ENDIAN_CONFIG@
24 TM_MULTILIB_CONFIG=@TM_MULTILIB_CONFIG@
25 TM_MULTILIB_EXCEPTIONS_CONFIG=@TM_MULTILIB_EXCEPTIONS_CONFIG@
26Index: gcc-4_7-branch/gcc/configure
27===================================================================
28--- gcc-4_7-branch.orig/gcc/configure 2012-04-10 10:37:57.211389779 -0700
29+++ gcc-4_7-branch/gcc/configure 2012-04-10 10:39:24.027393938 -0700
30@@ -11692,8 +11692,8 @@
31 tm_include_list="${tm_include_list} $f"
32 ;;
33 defaults.h )
34- tm_file_list="${tm_file_list} \$(srcdir)/$f"
35- tm_include_list="${tm_include_list} $f"
36+ tm_file_list="${tm_file_list} ./$f"
37+ tm_include_list="${tm_include_list} ./$f"
38 ;;
39 * )
40 tm_file_list="${tm_file_list} \$(srcdir)/config/$f"
41Index: gcc-4_7-branch/gcc/configure.ac
42===================================================================
43--- gcc-4_7-branch.orig/gcc/configure.ac 2012-04-10 10:37:57.215389769 -0700
44+++ gcc-4_7-branch/gcc/configure.ac 2012-04-10 10:39:24.027393938 -0700
45@@ -1699,8 +1699,8 @@
46 tm_include_list="${tm_include_list} $f"
47 ;;
48 defaults.h )
49- tm_file_list="${tm_file_list} \$(srcdir)/$f"
50- tm_include_list="${tm_include_list} $f"
51+ tm_file_list="${tm_file_list} ./$f"
52+ tm_include_list="${tm_include_list} ./$f"
53 ;;
54 * )
55 tm_file_list="${tm_file_list} \$(srcdir)/config/$f"
56Index: gcc-4_7-branch/gcc/mkconfig.sh
57===================================================================
58--- gcc-4_7-branch.orig/gcc/mkconfig.sh 2012-04-10 10:17:24.383330061 -0700
59+++ gcc-4_7-branch/gcc/mkconfig.sh 2012-04-10 10:39:24.027393938 -0700
60@@ -78,7 +78,7 @@
61 if [ $# -ge 1 ]; then
62 echo '#ifdef IN_GCC' >> ${output}T
63 for file in "$@"; do
64- if test x"$file" = x"defaults.h"; then
65+ if test x"$file" = x"./defaults.h"; then
66 postpone_defaults_h="yes"
67 else
68 echo "# include \"$file\"" >> ${output}T
69@@ -104,7 +104,7 @@
70
71 # If we postponed including defaults.h, add the #include now.
72 if test x"$postpone_defaults_h" = x"yes"; then
73- echo "# include \"defaults.h\"" >> ${output}T
74+ echo "# include \"./defaults.h\"" >> ${output}T
75 fi
76
77 # Add multiple inclusion protection guard, part two.
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/use-ml-conf-files-from-B.patch b/meta/recipes-devtools/gcc/gcc-4.7/use-ml-conf-files-from-B.patch
new file mode 100644
index 0000000000..4d229247a4
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/use-ml-conf-files-from-B.patch
@@ -0,0 +1,87 @@
1Use the multilib config files from ${B} instead of using the ones from ${S}
2so that the source can be shared between gcc-cross-initial,
3gcc-cross-intermediate, gcc-cross, gcc-runtime, and also the sdk build.
4
5Upstream-Status: Inappropriate [configuration]
6Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
7
8Index: gcc-4.7.2/gcc/configure
9===================================================================
10--- gcc-4.7.2.orig/gcc/configure
11+++ gcc-4.7.2/gcc/configure
12@@ -11717,10 +11717,20 @@ done
13 tmake_file_=
14 for f in ${tmake_file}
15 do
16- if test -f ${srcdir}/config/$f
17- then
18- tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
19- fi
20+ case $f in
21+ */t-linux64 )
22+ if test -f ./config/$f
23+ then
24+ tmake_file_="${tmake_file_} ./config/$f"
25+ fi
26+ ;;
27+ * )
28+ if test -f ${srcdir}/config/$f
29+ then
30+ tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
31+ fi
32+ ;;
33+ esac
34 done
35 tmake_file="${tmake_file_}"
36
37@@ -11731,6 +11741,10 @@ tm_file_list="options.h"
38 tm_include_list="options.h insn-constants.h"
39 for f in $tm_file; do
40 case $f in
41+ */linux64.h )
42+ tm_file_list="${tm_file_list} ./config/$f"
43+ tm_include_list="${tm_include_list} ./config/$f"
44+ ;;
45 ./* )
46 f=`echo $f | sed 's/^..//'`
47 tm_file_list="${tm_file_list} $f"
48Index: gcc-4.7.2/gcc/configure.ac
49===================================================================
50--- gcc-4.7.2.orig/gcc/configure.ac
51+++ gcc-4.7.2/gcc/configure.ac
52@@ -1701,10 +1701,20 @@ done
53 tmake_file_=
54 for f in ${tmake_file}
55 do
56- if test -f ${srcdir}/config/$f
57- then
58- tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
59- fi
60+ case $f in
61+ */t-linux64 )
62+ if test -f ./config/$f
63+ then
64+ tmake_file_="${tmake_file_} ./config/$f"
65+ fi
66+ ;;
67+ * )
68+ if test -f ${srcdir}/config/$f
69+ then
70+ tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
71+ fi
72+ ;;
73+ esac
74 done
75 tmake_file="${tmake_file_}"
76
77@@ -1715,6 +1725,10 @@ tm_file_list="options.h"
78 tm_include_list="options.h insn-constants.h"
79 for f in $tm_file; do
80 case $f in
81+ */linux64.h )
82+ tm_file_list="${tm_file_list} ./config/$f"
83+ tm_include_list="${tm_include_list} ./config/$f"
84+ ;;
85 ./* )
86 f=`echo $f | sed 's/^..//'`
87 tm_file_list="${tm_file_list} $f"
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/wcast-qual-PR55383.patch b/meta/recipes-devtools/gcc/gcc-4.7/wcast-qual-PR55383.patch
new file mode 100644
index 0000000000..7c5bbe7620
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/wcast-qual-PR55383.patch
@@ -0,0 +1,43 @@
1This is a backport from gcc bugzilla
2
3http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55383
4
5fixes wrong warning behavior which has no workaround
6other than disabling the warning
7
8Upstream-Status: Backport
9
10Signed-off-by: Khem Raj <raj.khem@gmail.com>
11
12Index: gcc-4.7.2/gcc/c-typeck.c
13===================================================================
14--- gcc-4.7.2.orig/gcc/c-typeck.c 2012-09-13 10:04:44.000000000 -0700
15+++ gcc-4.7.2/gcc/c-typeck.c 2013-03-10 23:09:17.610899536 -0700
16@@ -4557,7 +4557,7 @@
17 /* There are qualifiers present in IN_OTYPE that are not present
18 in IN_TYPE. */
19 warning_at (loc, OPT_Wcast_qual,
20- "cast discards %q#v qualifier from pointer target type",
21+ "cast discards %qv qualifier from pointer target type",
22 discarded);
23
24 if (added || discarded)
25Index: gcc-4.7.2/gcc/testsuite/c-c++-common/Wcast-qual-1.c
26===================================================================
27--- gcc-4.7.2.orig/gcc/testsuite/c-c++-common/Wcast-qual-1.c 2011-04-07 14:47:38.000000000 -0700
28+++ gcc-4.7.2/gcc/testsuite/c-c++-common/Wcast-qual-1.c 2013-03-10 23:15:45.610894589 -0700
29@@ -85,11 +85,11 @@
30 void
31 f4 (void * const **bar)
32 {
33- const void ***p9 = (const void ***) bar; /* { dg-warning "cast" } */
34+ const void ***p9 = (const void ***) bar; /* { dg-warning "cast discards .const. qualifier" } */
35 void * const **p11 = (void * const **) bar;
36- void ** const *p13 = (void ** const *) bar; /* { dg-warning "cast" } */
37+ void ** const *p13 = (void ** const *) bar; /* { dg-warning "cast discards .const. qualifier" } */
38 const void * const **p15 = (const void * const **) bar; /* { dg-warning "cast" } */
39- const void ** const *p17 = (const void ** const *) bar; /* { dg-warning "cast" } */
40+ const void ** const *p17 = (const void ** const *) bar; /* { dg-warning "cast discards .const. qualifier" } */
41 void * const * const * p19 = (void * const * const *) bar;
42 const void * const * const *p21 = (const void * const * const *) bar;
43 }