summaryrefslogtreecommitdiffstats
path: root/patches
diff options
context:
space:
mode:
authorMichael Olbrich <m.olbrich@pengutronix.de>2011-02-09 16:43:16 +0100
committerMichael Olbrich <m.olbrich@pengutronix.de>2011-02-22 11:26:13 +0100
commit52d842fe7e9b41a01450f5cfe94b6ce483e62704 (patch)
tree41a967289b2d6ba7d5c9cfedbd92ab8f089338ff /patches
parent1bc6186675a131d8fd4823d2766068a595063e25 (diff)
downloadOSELAS.Toolchain-52d842fe7e9b41a01450f5cfe94b6ce483e62704.tar.gz
OSELAS.Toolchain-52d842fe7e9b41a01450f5cfe94b6ce483e62704.tar.xz
[cross-gcc] add patches for gcc-linaro-4.5-2011.02-0 release
Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
Diffstat (limited to 'patches')
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/0001-no-host-includes.diff54
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/0002-arm-softfloat.diff44
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/0003-pr39429.diff38
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/0004-uclibc-conf.patch46
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/0005-missing-execinfo_h.patch21
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/0006-c99-snprintf.patch21
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/0007-libmudflap-susv3-legacy.patch57
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/0008-arm_insn-opinit-RTX_CODE-fixup.patch45
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/0009-short-enums.diff53
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/0010-all_gcc-trampolinewarn.patch44
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/0011-flatten-switch-stmt-00.patch81
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/0012-libiberty-pic.patch22
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/0013-libstdc++-pic.patch56
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/0015-Fix-libjava-cross-build-issue.patch201
-rw-r--r--patches/gcc-linaro-4.5-2011.02-0/series21
15 files changed, 804 insertions, 0 deletions
diff --git a/patches/gcc-linaro-4.5-2011.02-0/0001-no-host-includes.diff b/patches/gcc-linaro-4.5-2011.02-0/0001-no-host-includes.diff
new file mode 100644
index 0000000..39df653
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/0001-no-host-includes.diff
@@ -0,0 +1,54 @@
+From: Marc Kleine-Budde <m.kleine-budde@pengutronix.de>
+
+With this patch gcc bails out if you include a host include path into
+the searchlist (-I). This patch is not intended for upstream and was
+inspired by
+
+http://www.openembedded.org/repo/org.openembedded.dev/packages/gcc/gcc-4.1.1/zecke-no-host-includes.patch
+
+Signed-off-by: Marc Kleine-Budde <m.kleine-budde@pengutronix.de>
+Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
+
+---
+ gcc/incpath.c | 28 ++++++++++++++++++++++++++++
+ 1 file changed, 28 insertions(+)
+
+Index: gcc-4.5.1/gcc/incpath.c
+===================================================================
+--- gcc-4.5.1.orig/gcc/incpath.c
++++ gcc-4.5.1/gcc/incpath.c
+@@ -417,6 +417,34 @@ add_path (char *path, int chain, int cxx
+ p->construct = 0;
+ p->user_supplied_p = user_supplied_p;
+
++#ifdef CROSS_COMPILE
++ /* A common error when cross compiling is including
++ host headers. This code below will try to fail fast
++ for cross compiling. Currently we consider /usr/include,
++ /opt/include and /sw/include as harmful. */
++ {
++ unsigned int i;
++ const char *bad_path[] = {
++ "/usr/include",
++ "/usr/local/include",
++ "/sw/include",
++ "/opt/include",
++ };
++
++ for (i = 0; i < sizeof(bad_path)/sizeof(bad_path[0]); i++) {
++ if( strstr(p->name, bad_path[i]) == p->name ) {
++ fprintf(stderr,_("\n"
++ "CROSS COMPILE Badness: %s in INCLUDEPATH: %s\n"
++ "\n"),
++
++ bad_path[i], p->name);
++
++ exit (FATAL_EXIT_CODE);
++ }
++ }
++ }
++#endif
++
+ add_cpp_dir_path (p, chain);
+ }
+
diff --git a/patches/gcc-linaro-4.5-2011.02-0/0002-arm-softfloat.diff b/patches/gcc-linaro-4.5-2011.02-0/0002-arm-softfloat.diff
new file mode 100644
index 0000000..cb41b3d
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/0002-arm-softfloat.diff
@@ -0,0 +1,44 @@
+From: Marc Kleine-Budde <m.kleine-budde@pengutronix.de>
+
+Link assembler softfloat functions into gcc. As the functions are there
+in that case anyway, don't add switches for float lib.
+
+Upstream will not fix this because oabi is dead.
+
+Signed-off-by: Marc Kleine-Budde <m.kleine-budde@pengutronix.de>
+Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
+
+---
+ gcc/config/arm/linux-elf.h | 2 +-
+ gcc/config/arm/t-linux | 5 ++++-
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+Index: gcc-4.5.1/gcc/config/arm/linux-elf.h
+===================================================================
+--- gcc-4.5.1.orig/gcc/config/arm/linux-elf.h
++++ gcc-4.5.1/gcc/config/arm/linux-elf.h
+@@ -60,7 +60,7 @@
+ %{shared:-lc} \
+ %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
+
+-#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"
++#define LIBGCC_SPEC "-lgcc"
+
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+
+Index: gcc-4.5.1/gcc/config/arm/t-linux
+===================================================================
+--- gcc-4.5.1.orig/gcc/config/arm/t-linux
++++ gcc-4.5.1/gcc/config/arm/t-linux
+@@ -23,7 +23,10 @@ TARGET_LIBGCC2_CFLAGS = -fomit-frame-poi
+
+ LIB1ASMSRC = arm/lib1funcs.asm
+ LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx _clzsi2 _clzdi2 \
+- _arm_addsubdf3 _arm_addsubsf3
++ _arm_addsubdf3 _arm_addsubsf3 \
++ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
++ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
++ _fixsfsi _fixunssfsi _floatdidf _floatdisf
+
+ # MULTILIB_OPTIONS = mhard-float/msoft-float
+ # MULTILIB_DIRNAMES = hard-float soft-float
diff --git a/patches/gcc-linaro-4.5-2011.02-0/0003-pr39429.diff b/patches/gcc-linaro-4.5-2011.02-0/0003-pr39429.diff
new file mode 100644
index 0000000..bd194f1
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/0003-pr39429.diff
@@ -0,0 +1,38 @@
+From: Michael Olbrich <m.olbrich@pengutronix.de>
+
+This is http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39429.
+
+I've removed Michael's original patch and replaced it by the one from
+the gcc bugzilla.
+
+Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
+---
+ gcc/config/arm/arm.md | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+Index: gcc-4.5.1/gcc/config/arm/arm.md
+===================================================================
+--- gcc-4.5.1.orig/gcc/config/arm/arm.md
++++ gcc-4.5.1/gcc/config/arm/arm.md
+@@ -10390,6 +10390,21 @@
+ else
+ {
+ /* Offset is out of range for a single add, so use two ldr. */
++
++ /* Swap the ldrs if the first ldr would clobber the shared base_reg. */
++ if (REGNO (ldm[1]) == REGNO (base_reg))
++ {
++ rtx tmp_reg;
++ HOST_WIDE_INT tmp_val;
++
++ tmp_reg = ldm[1];
++ ldm[1] = ldm[2];
++ ldm[2] = tmp_reg;
++ tmp_val = val1;
++ val1 = val2;
++ val2 = tmp_val;
++ }
++
+ ops[0] = ldm[1];
+ ops[1] = base_reg;
+ ops[2] = GEN_INT (val1);
diff --git a/patches/gcc-linaro-4.5-2011.02-0/0004-uclibc-conf.patch b/patches/gcc-linaro-4.5-2011.02-0/0004-uclibc-conf.patch
new file mode 100644
index 0000000..c8e563b
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/0004-uclibc-conf.patch
@@ -0,0 +1,46 @@
+This patch was taken from uclibc.
+
+Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
+
+---
+ contrib/regression/objs-gcc.sh | 4 ++++
+ libjava/classpath/ltconfig | 4 ++--
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+Index: gcc-4.5.1/contrib/regression/objs-gcc.sh
+===================================================================
+--- gcc-4.5.1.orig/contrib/regression/objs-gcc.sh
++++ gcc-4.5.1/contrib/regression/objs-gcc.sh
+@@ -106,6 +106,10 @@ if [ $H_REAL_TARGET = $H_REAL_HOST -a $H
+ then
+ make all-gdb all-dejagnu all-ld || exit 1
+ make install-gdb install-dejagnu install-ld || exit 1
++elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-uclibc ]
++ then
++ make all-gdb all-dejagnu all-ld || exit 1
++ make install-gdb install-dejagnu install-ld || exit 1
+ elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then
+ make bootstrap || exit 1
+ make install || exit 1
+Index: gcc-4.5.1/libjava/classpath/ltconfig
+===================================================================
+--- gcc-4.5.1.orig/libjava/classpath/ltconfig
++++ gcc-4.5.1/libjava/classpath/ltconfig
+@@ -603,7 +603,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-
+
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+-linux-gnu*) ;;
++linux-gnu*|linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+
+@@ -1251,7 +1251,7 @@ linux-gnuoldld* | linux-gnuaout* | linux
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
diff --git a/patches/gcc-linaro-4.5-2011.02-0/0005-missing-execinfo_h.patch b/patches/gcc-linaro-4.5-2011.02-0/0005-missing-execinfo_h.patch
new file mode 100644
index 0000000..63b6acd
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/0005-missing-execinfo_h.patch
@@ -0,0 +1,21 @@
+This patch was taken from uclibc.
+
+Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
+
+---
+ boehm-gc/include/gc.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: gcc-4.3.1/boehm-gc/include/gc.h
+===================================================================
+--- gcc-4.3.1.orig/boehm-gc/include/gc.h
++++ gcc-4.3.1/boehm-gc/include/gc.h
+@@ -503,7 +503,7 @@ GC_API GC_PTR GC_malloc_atomic_ignore_of
+ #if defined(__linux__) || defined(__GLIBC__)
+ # include <features.h>
+ # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \
+- && !defined(__ia64__)
++ && !defined(__ia64__) && !defined(__UCLIBC__)
+ # ifndef GC_HAVE_BUILTIN_BACKTRACE
+ # define GC_HAVE_BUILTIN_BACKTRACE
+ # endif
diff --git a/patches/gcc-linaro-4.5-2011.02-0/0006-c99-snprintf.patch b/patches/gcc-linaro-4.5-2011.02-0/0006-c99-snprintf.patch
new file mode 100644
index 0000000..d39e7d3
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/0006-c99-snprintf.patch
@@ -0,0 +1,21 @@
+This patch was taken from uclibc.
+
+Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
+
+---
+ libstdc++-v3/include/c_global/cstdio | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: gcc-4.5.1/libstdc++-v3/include/c_global/cstdio
+===================================================================
+--- gcc-4.5.1.orig/libstdc++-v3/include/c_global/cstdio
++++ gcc-4.5.1/libstdc++-v3/include/c_global/cstdio
+@@ -139,7 +139,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
+
+ _GLIBCXX_END_NAMESPACE
+
+-#if _GLIBCXX_USE_C99
++#if _GLIBCXX_USE_C99 || defined __UCLIBC__
+
+ #undef snprintf
+ #undef vfscanf
diff --git a/patches/gcc-linaro-4.5-2011.02-0/0007-libmudflap-susv3-legacy.patch b/patches/gcc-linaro-4.5-2011.02-0/0007-libmudflap-susv3-legacy.patch
new file mode 100644
index 0000000..62f3ffa
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/0007-libmudflap-susv3-legacy.patch
@@ -0,0 +1,57 @@
+This patch was taken from uclibc.
+
+Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
+
+---
+ libmudflap/mf-hooks2.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+Index: gcc-4.5.1/libmudflap/mf-hooks2.c
+===================================================================
+--- gcc-4.5.1.orig/libmudflap/mf-hooks2.c
++++ gcc-4.5.1/libmudflap/mf-hooks2.c
+@@ -421,7 +421,7 @@ WRAPPER2(void, bzero, void *s, size_t n)
+ {
+ TRACE ("%s\n", __PRETTY_FUNCTION__);
+ MF_VALIDATE_EXTENT(s, n, __MF_CHECK_WRITE, "bzero region");
+- bzero (s, n);
++ memset (s, 0, n);
+ }
+
+
+@@ -431,7 +431,7 @@ WRAPPER2(void, bcopy, const void *src, v
+ TRACE ("%s\n", __PRETTY_FUNCTION__);
+ MF_VALIDATE_EXTENT(src, n, __MF_CHECK_READ, "bcopy src");
+ MF_VALIDATE_EXTENT(dest, n, __MF_CHECK_WRITE, "bcopy dest");
+- bcopy (src, dest, n);
++ memmove (dest, src, n);
+ }
+
+
+@@ -441,7 +441,7 @@ WRAPPER2(int, bcmp, const void *s1, cons
+ TRACE ("%s\n", __PRETTY_FUNCTION__);
+ MF_VALIDATE_EXTENT(s1, n, __MF_CHECK_READ, "bcmp 1st arg");
+ MF_VALIDATE_EXTENT(s2, n, __MF_CHECK_READ, "bcmp 2nd arg");
+- return bcmp (s1, s2, n);
++ return n == 0 ? 0 : memcmp (s1, s2, n);
+ }
+
+
+@@ -450,7 +450,7 @@ WRAPPER2(char *, index, const char *s, i
+ size_t n = strlen (s);
+ TRACE ("%s\n", __PRETTY_FUNCTION__);
+ MF_VALIDATE_EXTENT(s, CLAMPADD(n, 1), __MF_CHECK_READ, "index region");
+- return index (s, c);
++ return strchr (s, c);
+ }
+
+
+@@ -459,7 +459,7 @@ WRAPPER2(char *, rindex, const char *s,
+ size_t n = strlen (s);
+ TRACE ("%s\n", __PRETTY_FUNCTION__);
+ MF_VALIDATE_EXTENT(s, CLAMPADD(n, 1), __MF_CHECK_READ, "rindex region");
+- return rindex (s, c);
++ return strrchr (s, c);
+ }
+
+ /* XXX: stpcpy, memccpy */
diff --git a/patches/gcc-linaro-4.5-2011.02-0/0008-arm_insn-opinit-RTX_CODE-fixup.patch b/patches/gcc-linaro-4.5-2011.02-0/0008-arm_insn-opinit-RTX_CODE-fixup.patch
new file mode 100644
index 0000000..8fb9c38
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/0008-arm_insn-opinit-RTX_CODE-fixup.patch
@@ -0,0 +1,45 @@
+This patch was taken from uclibc, with this description:
+
+gcc/ChangeLog
+2007-11-27 Bernhard Fischer <>
+
+ * config/arm/arm-protos.h (arm_vector_mode_supported_p,
+ arm_hard_regno_mode_ok, const_ok_for_arm): Do not hide non-rtx related
+ function prototypes in RTX_CODE.
+ * genopinit.c: Include tm_p.h.
+
+Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
+
+---
+ gcc/config/arm/arm-protos.h | 2 +-
+ gcc/genopinit.c | 1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+Index: gcc-4.5.1/gcc/config/arm/arm-protos.h
+===================================================================
+--- gcc-4.5.1.orig/gcc/config/arm/arm-protos.h
++++ gcc-4.5.1/gcc/config/arm/arm-protos.h
+@@ -43,10 +43,10 @@ extern unsigned int arm_dbx_register_num
+ extern void arm_output_fn_unwind (FILE *, bool);
+
+
+-#ifdef RTX_CODE
+ extern bool arm_vector_mode_supported_p (enum machine_mode);
+ extern int arm_hard_regno_mode_ok (unsigned int, enum machine_mode);
+ extern int const_ok_for_arm (HOST_WIDE_INT);
++#ifdef RTX_CODE
+ extern int arm_split_constant (RTX_CODE, enum machine_mode, rtx,
+ HOST_WIDE_INT, rtx, rtx, int);
+ extern RTX_CODE arm_canonicalize_comparison (RTX_CODE, enum machine_mode,
+Index: gcc-4.5.1/gcc/genopinit.c
+===================================================================
+--- gcc-4.5.1.orig/gcc/genopinit.c
++++ gcc-4.5.1/gcc/genopinit.c
+@@ -490,6 +490,7 @@ from the machine description file `md'.
+ printf ("#include \"expr.h\"\n");
+ printf ("#include \"optabs.h\"\n");
+ printf ("#include \"reload.h\"\n\n");
++ printf ("#include \"tm_p.h\"\n\n");
+
+ printf ("void\ninit_all_optabs (void)\n{\n");
+
diff --git a/patches/gcc-linaro-4.5-2011.02-0/0009-short-enums.diff b/patches/gcc-linaro-4.5-2011.02-0/0009-short-enums.diff
new file mode 100644
index 0000000..a2f6aed
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/0009-short-enums.diff
@@ -0,0 +1,53 @@
+This patch was taken from uclibc. It has "WONTFIX" status in the gcc
+bugzilla and should probably be done differently:
+
+http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34205
+
+Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
+---
+ gcc/c-common.h | 1 +
+ gcc/rtl.h | 4 +++-
+ gcc/tree.h | 1 +
+ 3 files changed, 5 insertions(+), 1 deletion(-)
+
+Index: gcc-4.5.1/gcc/tree.h
+===================================================================
+--- gcc-4.5.1.orig/gcc/tree.h
++++ gcc-4.5.1/gcc/tree.h
+@@ -39,6 +39,7 @@ along with GCC; see the file COPYING3.
+ enum tree_code {
+ #include "all-tree.def"
+ MAX_TREE_CODES
++,__MAX_TREE_CODES=32767 /* Force 16bit width. */
+ };
+
+ #undef DEFTREECODE
+Index: gcc-4.5.1/gcc/rtl.h
+===================================================================
+--- gcc-4.5.1.orig/gcc/rtl.h
++++ gcc-4.5.1/gcc/rtl.h
+@@ -48,9 +48,11 @@ enum rtx_code {
+ #include "rtl.def" /* rtl expressions are documented here */
+ #undef DEF_RTL_EXPR
+
+- LAST_AND_UNUSED_RTX_CODE}; /* A convenient way to get a value for
++ LAST_AND_UNUSED_RTX_CODE /* A convenient way to get a value for
+ NUM_RTX_CODE.
+ Assumes default enum value assignment. */
++ ,__LAST_AND_UNUSED_RTX_CODE=32767 /* Force 16bit width. */
++};
+
+ #define NUM_RTX_CODE ((int) LAST_AND_UNUSED_RTX_CODE)
+ /* The cast here, saves many elsewhere. */
+Index: gcc-4.5.1/gcc/c-common.h
+===================================================================
+--- gcc-4.5.1.orig/gcc/c-common.h
++++ gcc-4.5.1/gcc/c-common.h
+@@ -161,6 +161,7 @@ enum rid
+ RID_LAST_AT = RID_AT_IMPLEMENTATION,
+ RID_FIRST_PQ = RID_IN,
+ RID_LAST_PQ = RID_ONEWAY
++ ,__LAST_AND_UNUSED_RID=32767 /* Force 16bit width. */
+ };
+
+ #define OBJC_IS_AT_KEYWORD(rid) \
diff --git a/patches/gcc-linaro-4.5-2011.02-0/0010-all_gcc-trampolinewarn.patch b/patches/gcc-linaro-4.5-2011.02-0/0010-all_gcc-trampolinewarn.patch
new file mode 100644
index 0000000..35d28a6
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/0010-all_gcc-trampolinewarn.patch
@@ -0,0 +1,44 @@
+From: Kevin F. Quinn <kevquinn@gentoo.org>
+
+Taken from gentoo, original description:
+
+This trivial patch causes gcc to emit a warning whenever it generates a
+trampoline. These are otherwise hard to locate. It is rigged to default
+ON - to have it default to OFF remove the text 'Init(1)' from the
+common.opt patch, leaving just 'Common Var(warn_trampolines)'.
+
+Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
+---
+ gcc/builtins.c | 3 +++
+ gcc/common.opt | 4 ++++
+ 2 files changed, 7 insertions(+)
+
+Index: gcc-4.5.1/gcc/common.opt
+===================================================================
+--- gcc-4.5.1.orig/gcc/common.opt
++++ gcc-4.5.1/gcc/common.opt
+@@ -196,6 +196,10 @@ Wtype-limits
+ Common Var(warn_type_limits) Init(-1) Warning
+ Warn if a comparison is always true or always false due to the limited range of the data type
+
++Wtrampolines
++Common Var(warn_trampolines) Init(1)
++Warn whenever a trampoline is generated
++
+ Wuninitialized
+ Common Var(warn_uninitialized) Init(-1) Warning
+ Warn about uninitialized automatic variables
+Index: gcc-4.5.1/gcc/builtins.c
+===================================================================
+--- gcc-4.5.1.orig/gcc/builtins.c
++++ gcc-4.5.1/gcc/builtins.c
+@@ -5029,6 +5029,9 @@ expand_builtin_profile_func (bool exitp)
+ 0),
+ Pmode);
+
++ if (warn_trampolines)
++ warning (OPT_Wtrampolines, "generating trampoline in object (requires executable stack)");
++
+ return const0_rtx;
+ }
+
diff --git a/patches/gcc-linaro-4.5-2011.02-0/0011-flatten-switch-stmt-00.patch b/patches/gcc-linaro-4.5-2011.02-0/0011-flatten-switch-stmt-00.patch
new file mode 100644
index 0000000..0376bb7
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/0011-flatten-switch-stmt-00.patch
@@ -0,0 +1,81 @@
+From: Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
+
+This is http://gcc.gnu.org/ml/gcc-patches/2007-04/msg00927.html
+
+Hi,
+
+The attached patch makes sure that we create smaller object code for
+simple switch statements. We just make sure to flatten the switch
+statement into an if-else chain, basically.
+
+This fixes a size-regression as compared to gcc-3.4, as can be seen
+below.
+
+2007-04-15 Bernhard Fischer <..>
+
+ * stmt.c (expand_case): Do not create a complex binary tree when
+ optimizing for size but rather use the simple ordered list.
+ (emit_case_nodes): do not emit jumps to the default_label when
+ optimizing for size.
+
+Not regtested so far.
+Comments?
+
+Attached is the test switch.c mentioned below.
+
+$ for i in 2.95 3.3 3.4 4.0 4.1 4.2.orig-HEAD 4.3.orig-HEAD 4.3-HEAD;do
+gcc-$i -DCHAIN -Os -o switch-CHAIN-$i.o -c switch.c ;done
+$ for i in 2.95 3.3 3.4 4.0 4.1 4.2.orig-HEAD 4.3.orig-HEAD 4.3-HEAD;do
+gcc-$i -UCHAIN -Os -o switch-$i.o -c switch.c ;done
+
+$ size switch-*.o
+ text data bss dec hex filename
+ 169 0 0 169 a9 switch-2.95.o
+ 115 0 0 115 73 switch-3.3.o
+ 103 0 0 103 67 switch-3.4.o
+ 124 0 0 124 7c switch-4.0.o
+ 124 0 0 124 7c switch-4.1.o
+ 124 0 0 124 7c switch-4.2.orig-HEAD.o
+ 95 0 0 95 5f switch-4.3-HEAD.o
+ 124 0 0 124 7c switch-4.3.orig-HEAD.o
+ 166 0 0 166 a6 switch-CHAIN-2.95.o
+ 111 0 0 111 6f switch-CHAIN-3.3.o
+ 95 0 0 95 5f switch-CHAIN-3.4.o
+ 95 0 0 95 5f switch-CHAIN-4.0.o
+ 95 0 0 95 5f switch-CHAIN-4.1.o
+ 95 0 0 95 5f switch-CHAIN-4.2.orig-HEAD.o
+ 95 0 0 95 5f switch-CHAIN-4.3-HEAD.o
+ 95 0 0 95 5f switch-CHAIN-4.3.orig-HEAD.o
+
+Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
+---
+ gcc/stmt.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+Index: gcc-4.5.1/gcc/stmt.c
+===================================================================
+--- gcc-4.5.1.orig/gcc/stmt.c
++++ gcc-4.5.1/gcc/stmt.c
+@@ -2440,7 +2440,13 @@ expand_case (gimple stmt)
+ default code is emitted. */
+
+ use_cost_table = estimate_case_costs (case_list);
+- balance_case_nodes (&case_list, NULL);
++
++ /* When optimizing for size, we want a straight list to avoid
++ jumps as much as possible. This basically creates an if-else
++ chain. */
++
++ if (!optimize_size)
++ balance_case_nodes (&case_list, NULL);
+ emit_case_nodes (index, case_list, default_label, index_type);
+ if (default_label)
+ emit_jump (default_label);
+@@ -3008,6 +3014,7 @@ emit_case_nodes (rtx index, case_node_pt
+ {
+ if (!node_has_low_bound (node, index_type))
+ {
++ if (!optimize_size) /* don't jl to the .default_label. */
+ emit_cmp_and_jump_insns (index,
+ convert_modes
+ (mode, imode,
diff --git a/patches/gcc-linaro-4.5-2011.02-0/0012-libiberty-pic.patch b/patches/gcc-linaro-4.5-2011.02-0/0012-libiberty-pic.patch
new file mode 100644
index 0000000..9858422
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/0012-libiberty-pic.patch
@@ -0,0 +1,22 @@
+From: Marc Kleine-Budde <m.kleine-budde@pengutronix.de>
+
+Taken from gentoo.
+
+Signed-off-by: Marc Kleine-Budde <m.kleine-budde@pengutronix.de>
+Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
+---
+ libiberty/Makefile.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: gcc-4.5.1/libiberty/Makefile.in
+===================================================================
+--- gcc-4.5.1.orig/libiberty/Makefile.in
++++ gcc-4.5.1/libiberty/Makefile.in
+@@ -227,6 +227,7 @@ $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA
+ $(AR) $(AR_FLAGS) $(TARGETLIB) \
+ $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \
+ $(RANLIB) $(TARGETLIB); \
++ cp $(TARGETLIB) ../ ; \
+ cd ..; \
+ else true; fi
+
diff --git a/patches/gcc-linaro-4.5-2011.02-0/0013-libstdc++-pic.patch b/patches/gcc-linaro-4.5-2011.02-0/0013-libstdc++-pic.patch
new file mode 100644
index 0000000..0146282
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/0013-libstdc++-pic.patch
@@ -0,0 +1,56 @@
+From: Marc Kleine-Budde <m.kleine-budde@pengutronix.de>
+
+Install libstdc++_pic.a if we have pic objs. Taken from gentoo.
+
+Signed-off-by: Marc Kleine-Budde <m.kleine-budde@pengutronix.de>
+Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
+---
+ libstdc++-v3/src/Makefile.am | 7 +++++++
+ libstdc++-v3/src/Makefile.in | 9 ++++++++-
+ 2 files changed, 15 insertions(+), 1 deletion(-)
+
+Index: gcc-4.5.1/libstdc++-v3/src/Makefile.am
+===================================================================
+--- gcc-4.5.1.orig/libstdc++-v3/src/Makefile.am
++++ gcc-4.5.1/libstdc++-v3/src/Makefile.am
+@@ -377,6 +377,13 @@ CXXLINK = $(LIBTOOL) --tag CXX $(AM_LIBT
+ $(CXX) $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
+
+
++install-exec-local:
++ pic_objs=`sed -n "s:'::g;s:^pic_object=::p" *.lo | grep -v '^none$$'`; \
++ if [ x"$$pic_objs" != x ]; then \
++ $(AR) cru libstdc++_pic.a $$pic_objs $(top_builddir)/libsupc++/*.o || exit 1; \
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir) || exit 1; \
++ fi
++
+ # Added bits to build debug library.
+ if GLIBCXX_BUILD_DEBUG
+ all-local: build_debug
+Index: gcc-4.5.1/libstdc++-v3/src/Makefile.in
+===================================================================
+--- gcc-4.5.1.orig/libstdc++-v3/src/Makefile.in
++++ gcc-4.5.1/libstdc++-v3/src/Makefile.in
+@@ -739,7 +739,7 @@ install-dvi: install-dvi-am
+
+ install-dvi-am:
+
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+
+ install-html: install-html-am
+
+@@ -993,6 +993,13 @@ install_debug:
+ (cd ${debugdir} && $(MAKE) \
+ toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
+
++install-exec-local:
++ pic_objs=`sed -n "s:'::g;s:^pic_object=::p" *.lo | grep -v '^none$$'`; \
++ if [ x"$$pic_objs" != x ]; then \
++ $(AR) cru libstdc++_pic.a $$pic_objs $(top_builddir)/libsupc++/*.o || exit 1; \
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir) || exit 1; \
++ fi
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff --git a/patches/gcc-linaro-4.5-2011.02-0/0015-Fix-libjava-cross-build-issue.patch b/patches/gcc-linaro-4.5-2011.02-0/0015-Fix-libjava-cross-build-issue.patch
new file mode 100644
index 0000000..194aea4
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/0015-Fix-libjava-cross-build-issue.patch
@@ -0,0 +1,201 @@
+From: Michael Olbrich <m.olbrich@pengutronix.de>
+Date: Fri, 11 Feb 2011 23:29:14 +0100
+Subject: [PATCH] Fix: libjava cross build issue
+
+Taken from upstream r163580:
+
+Fix building ecjx in cross compile mode.
+
+libjava/:
+ PR libgcj/40868
+ * configure.ac: Add GCC_FOR_ECJX variable. Ensure
+ GCJ_FOR_ECJX is always set.
+ * Makefile.am [!NATIVE] (ecjx.$(OBJEXT)): New rule.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * gcj/Makefile.in: Regenerate.
+ * include/Makefile.in: Regenerate.
+ * testsuite/Makefile.in: Regenerate.
+
+This is a fix for:
+Bug 40868 - ecjx.cc should be compiled by host gcc
+
+Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
+---
+ libjava/Makefile.am | 2 ++
+ libjava/Makefile.in | 3 +++
+ libjava/configure | 12 ++++++++----
+ libjava/configure.ac | 5 ++++-
+ libjava/gcj/Makefile.in | 1 +
+ libjava/include/Makefile.in | 1 +
+ libjava/testsuite/Makefile.in | 1 +
+ 7 files changed, 20 insertions(+), 5 deletions(-)
+
+diff --git a/libjava/Makefile.am b/libjava/Makefile.am
+index 55ff0d1..85f020f 100644
+--- a/libjava/Makefile.am
++++ b/libjava/Makefile.am
+@@ -1127,6 +1127,8 @@ ecjx_LINK = $(GCJ_FOR_ECJX_LINK) $(ecjx_LDFLAGS)
+ ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR)
+ ecjx_LDADD =
+ ecjx_DEPENDENCIES =
++ecjx.$(OBJEXT): ecjx.cc
++ $(GCC_FOR_ECJX) -c $<
+
+ endif !NATIVE
+
+diff --git a/libjava/Makefile.in b/libjava/Makefile.in
+index adfcdf5..f4ad73e 100644
+--- a/libjava/Makefile.in
++++ b/libjava/Makefile.in
+@@ -672,6 +672,7 @@ EGREP = @EGREP@
+ EXCEPTIONSPEC = @EXCEPTIONSPEC@
+ EXEEXT = @EXEEXT@
+ FGREP = @FGREP@
++GCC_FOR_ECJX = @GCC_FOR_ECJX@
+ GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
+ GCDEPS = @GCDEPS@
+ GCINCS = @GCINCS@
+@@ -12887,6 +12888,8 @@ write-entries-to-file-check:
+ @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@ | sed -n -e 's|0x\(..\)\(..\).*\(0x....\).*#\(.*\)$$|MAP(0x\1, 0x\2, \3) /*\4 */|p' \
+ @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@ >> tmp-0212; \
+ @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@ mv tmp-0212 $(srcdir)/gnu/gcj/convert/JIS0212.h
++@NATIVE_FALSE@ecjx.$(OBJEXT): ecjx.cc
++@NATIVE_FALSE@ $(GCC_FOR_ECJX) -c $<
+
+ src.zip:
+ -rm -f src.zip
+diff --git a/libjava/configure b/libjava/configure
+index 5454110..7b64bab 100755
+--- a/libjava/configure
++++ b/libjava/configure
+@@ -769,6 +769,7 @@ LIBLTDL
+ INCLTDL
+ host_exeext
+ GCJH
++GCC_FOR_ECJX
+ GCJ_FOR_ECJX
+ X_AWT_FALSE
+ X_AWT_TRUE
+@@ -6693,7 +6694,8 @@ NATIVE=yes
+ # Which gcj and host gcj (for ecjx) do we use?
+ which_gcj=default
+ host_exeext=${ac_exeext}
+-GCJ_FOR_ECJX=
++GCJ_FOR_ECJX='$(GCJ)'
++GCC_FOR_ECJX='$(CXX)'
+ built_gcc_dir="`cd ${builddotdot}/../../${host_subdir}/gcc && ${PWDCMD-pwd}`"
+ if test -n "${with_cross_host}"; then
+ # We are being configured with a cross compiler. We can't
+@@ -6701,6 +6703,7 @@ if test -n "${with_cross_host}"; then
+ NATIVE=no
+ cross_host_exeext=
+ GCJ_FOR_ECJX="${with_cross_host}-gcj"
++ GCC_FOR_ECJX="${with_cross_host}-gcc"
+ case "${with_cross_host}" in
+ *mingw* | *cygwin*)
+ cross_host_exeext=.exe
+@@ -6769,6 +6772,7 @@ export JAVAC
+
+
+
++
+ # Create it, so that compile/link tests don't fail
+ test -f libgcj.spec || touch libgcj.spec
+
+@@ -13339,7 +13343,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 13342 "configure"
++#line 13356 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -13445,7 +13449,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 13448 "configure"
++#line 13462 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -19424,7 +19428,7 @@ if test "${enable_sjlj_exceptions+set}" = set; then :
+ enableval=$enable_sjlj_exceptions; :
+ else
+ cat > conftest.$ac_ext << EOF
+-#line 19427 "configure"
++#line 19441 "configure"
+ struct S { ~S(); };
+ void bar();
+ void foo()
+diff --git a/libjava/configure.ac b/libjava/configure.ac
+index 9b551db..eaedc56 100644
+--- a/libjava/configure.ac
++++ b/libjava/configure.ac
+@@ -394,7 +394,8 @@ NATIVE=yes
+ # Which gcj and host gcj (for ecjx) do we use?
+ which_gcj=default
+ host_exeext=${ac_exeext}
+-GCJ_FOR_ECJX=
++GCJ_FOR_ECJX='$(GCJ)'
++GCC_FOR_ECJX='$(CXX)'
+ built_gcc_dir="`cd ${builddotdot}/../../${host_subdir}/gcc && ${PWDCMD-pwd}`"
+ if test -n "${with_cross_host}"; then
+ # We are being configured with a cross compiler. We can't
+@@ -402,6 +403,7 @@ if test -n "${with_cross_host}"; then
+ NATIVE=no
+ cross_host_exeext=
+ GCJ_FOR_ECJX="${with_cross_host}-gcj"
++ GCC_FOR_ECJX="${with_cross_host}-gcc"
+ case "${with_cross_host}" in
+ *mingw* | *cygwin*)
+ cross_host_exeext=.exe
+@@ -467,6 +469,7 @@ JAVAC="$GCJ -C"
+ export JAVAC
+
+ AC_SUBST(GCJ_FOR_ECJX)
++AC_SUBST(GCC_FOR_ECJX)
+ AC_SUBST(GCJH)
+ AC_SUBST(host_exeext)
+
+diff --git a/libjava/gcj/Makefile.in b/libjava/gcj/Makefile.in
+index dd17e55..e7e912a 100644
+--- a/libjava/gcj/Makefile.in
++++ b/libjava/gcj/Makefile.in
+@@ -136,6 +136,7 @@ EGREP = @EGREP@
+ EXCEPTIONSPEC = @EXCEPTIONSPEC@
+ EXEEXT = @EXEEXT@
+ FGREP = @FGREP@
++GCC_FOR_ECJX = @GCC_FOR_ECJX@
+ GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
+ GCDEPS = @GCDEPS@
+ GCINCS = @GCINCS@
+diff --git a/libjava/include/Makefile.in b/libjava/include/Makefile.in
+index 2e04d8d..1c6f71a 100644
+--- a/libjava/include/Makefile.in
++++ b/libjava/include/Makefile.in
+@@ -136,6 +136,7 @@ EGREP = @EGREP@
+ EXCEPTIONSPEC = @EXCEPTIONSPEC@
+ EXEEXT = @EXEEXT@
+ FGREP = @FGREP@
++GCC_FOR_ECJX = @GCC_FOR_ECJX@
+ GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
+ GCDEPS = @GCDEPS@
+ GCINCS = @GCINCS@
+diff --git a/libjava/testsuite/Makefile.in b/libjava/testsuite/Makefile.in
+index a582efd..f81f531 100644
+--- a/libjava/testsuite/Makefile.in
++++ b/libjava/testsuite/Makefile.in
+@@ -111,6 +111,7 @@ EGREP = @EGREP@
+ EXCEPTIONSPEC = @EXCEPTIONSPEC@
+ EXEEXT = @EXEEXT@
+ FGREP = @FGREP@
++GCC_FOR_ECJX = @GCC_FOR_ECJX@
+ GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
+ GCDEPS = @GCDEPS@
+ GCINCS = @GCINCS@
+--
+1.7.2.3
+
diff --git a/patches/gcc-linaro-4.5-2011.02-0/series b/patches/gcc-linaro-4.5-2011.02-0/series
new file mode 100644
index 0000000..3d95ce0
--- /dev/null
+++ b/patches/gcc-linaro-4.5-2011.02-0/series
@@ -0,0 +1,21 @@
+# from OSELAS.toolchain
+0001-no-host-includes.diff
+0002-arm-softfloat.diff
+0003-pr39429.diff
+
+# from uclibc
+0004-uclibc-conf.patch
+0005-missing-execinfo_h.patch
+0006-c99-snprintf.patch
+0007-libmudflap-susv3-legacy.patch
+0008-arm_insn-opinit-RTX_CODE-fixup.patch
+0009-short-enums.diff
+
+# from gentoo
+0010-all_gcc-trampolinewarn.patch
+0011-flatten-switch-stmt-00.patch
+0012-libiberty-pic.patch
+0013-libstdc++-pic.patch
+
+# from upstream
+0015-Fix-libjava-cross-build-issue.patch