From 642e99ca4f3c7442f1848d88b7dfad9da26c4665 Mon Sep 17 00:00:00 2001
From: "Yann E. MORIN\"" <yann.morin.1998@free.fr>
Date: Fri, 23 Mar 2012 01:36:42 -0700
Subject: [PATCH] cc/gc: add update 4.4.7

Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
[yann.morin.1998@free.fr: propagate patchset from 4.4.6]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
 config/cc/gcc.in                              |   6 +
 .../gcc/4.4.7/100-alpha-mieee-default.patch   |  24 ++++
 patches/gcc/4.4.7/110-trampolinewarn.patch    |  27 ++++
 patches/gcc/4.4.7/120-java-nomulti.patch      |  46 ++++++
 patches/gcc/4.4.7/130-cross-compile.patch     |  39 +++++
 .../4.4.7/140-default-format-security.patch   |  49 +++++++
 .../4.4.7/150-default-fortify-source.patch    |  26 ++++
 patches/gcc/4.4.7/160-netbsd-symbolic.patch   |  11 ++
 patches/gcc/4.4.7/170-sparc64-bsd.patch       |  29 ++++
 patches/gcc/4.4.7/180-libgomp-no-werror.patch |  12 ++
 .../4.4.7/190-flatten-switch-stmt-00.patch    |  24 ++++
 .../gcc/4.4.7/200-libiberty.h-asprintf.patch  |  15 ++
 .../gcc/4.4.7/210-arm-unbreak-armv4t.patch    |  12 ++
 patches/gcc/4.4.7/220-libiberty-pic.patch     |  11 ++
 .../4.4.7/230-superh-default-multilib.patch   |  12 ++
 patches/gcc/4.4.7/240-libstdc++-pic.patch     |  53 +++++++
 patches/gcc/4.4.7/250-ia64-noteGNUstack.patch |  79 +++++++++++
 patches/gcc/4.4.7/260-sh-libgcc-stacks.patch  |  25 ++++
 patches/gcc/4.4.7/270-sh-pr24836.patch        |  24 ++++
 patches/gcc/4.4.7/280-freebsd.patch           |  94 ++++++++++++
 patches/gcc/4.4.7/290-freebsd.patch           |  64 +++++++++
 patches/gcc/4.4.7/300-uclibc-conf.patch       |  35 +++++
 .../gcc/4.4.7/310-missing-execinfo_h.patch    |  12 ++
 patches/gcc/4.4.7/320-c99-snprintf.patch      |  12 ++
 .../4.4.7/330-libmudflap-susv3-legacy.patch   |  48 +++++++
 patches/gcc/4.4.7/340-ecjx-host-cc.patch      |  13 ++
 patches/gcc/4.4.7/350-index_macro.patch       |  30 ++++
 patches/gcc/4.4.7/360-arm-bigendian.patch     |  32 +++++
 .../4.4.7/370-bootstrap-target_lib_path.patch |  38 +++++
 .../380-powerpc-libgcc_s-link-libm.patch      | 134 ++++++++++++++++++
 .../gcc/4.4.7/390-arm-softfloat-libgcc.patch  |  38 +++++
 ...pr42289-fix-libffi-build-on-arm-oabi.patch |  11 ++
 patches/gcc/4.4.7/410-libgcc_eh.a.patch       |  39 +++++
 33 files changed, 1124 insertions(+)
 create mode 100644 patches/gcc/4.4.7/100-alpha-mieee-default.patch
 create mode 100644 patches/gcc/4.4.7/110-trampolinewarn.patch
 create mode 100644 patches/gcc/4.4.7/120-java-nomulti.patch
 create mode 100644 patches/gcc/4.4.7/130-cross-compile.patch
 create mode 100644 patches/gcc/4.4.7/140-default-format-security.patch
 create mode 100644 patches/gcc/4.4.7/150-default-fortify-source.patch
 create mode 100644 patches/gcc/4.4.7/160-netbsd-symbolic.patch
 create mode 100644 patches/gcc/4.4.7/170-sparc64-bsd.patch
 create mode 100644 patches/gcc/4.4.7/180-libgomp-no-werror.patch
 create mode 100644 patches/gcc/4.4.7/190-flatten-switch-stmt-00.patch
 create mode 100644 patches/gcc/4.4.7/200-libiberty.h-asprintf.patch
 create mode 100644 patches/gcc/4.4.7/210-arm-unbreak-armv4t.patch
 create mode 100644 patches/gcc/4.4.7/220-libiberty-pic.patch
 create mode 100644 patches/gcc/4.4.7/230-superh-default-multilib.patch
 create mode 100644 patches/gcc/4.4.7/240-libstdc++-pic.patch
 create mode 100644 patches/gcc/4.4.7/250-ia64-noteGNUstack.patch
 create mode 100644 patches/gcc/4.4.7/260-sh-libgcc-stacks.patch
 create mode 100644 patches/gcc/4.4.7/270-sh-pr24836.patch
 create mode 100644 patches/gcc/4.4.7/280-freebsd.patch
 create mode 100644 patches/gcc/4.4.7/290-freebsd.patch
 create mode 100644 patches/gcc/4.4.7/300-uclibc-conf.patch
 create mode 100644 patches/gcc/4.4.7/310-missing-execinfo_h.patch
 create mode 100644 patches/gcc/4.4.7/320-c99-snprintf.patch
 create mode 100644 patches/gcc/4.4.7/330-libmudflap-susv3-legacy.patch
 create mode 100644 patches/gcc/4.4.7/340-ecjx-host-cc.patch
 create mode 100644 patches/gcc/4.4.7/350-index_macro.patch
 create mode 100644 patches/gcc/4.4.7/360-arm-bigendian.patch
 create mode 100644 patches/gcc/4.4.7/370-bootstrap-target_lib_path.patch
 create mode 100644 patches/gcc/4.4.7/380-powerpc-libgcc_s-link-libm.patch
 create mode 100644 patches/gcc/4.4.7/390-arm-softfloat-libgcc.patch
 create mode 100644 patches/gcc/4.4.7/400-pr42289-fix-libffi-build-on-arm-oabi.patch
 create mode 100644 patches/gcc/4.4.7/410-libgcc_eh.a.patch

diff --git a/config/cc/gcc.in b/config/cc/gcc.in
index bbfef591..9ab07d5f 100644
--- a/config/cc/gcc.in
+++ b/config/cc/gcc.in
@@ -109,6 +109,11 @@ config CC_V_linaro_4_4_2011_02_0
     depends on CC_GCC_SHOW_LINARO
     select CC_GCC_4_4
 
+config CC_V_4_4_7
+    bool
+    prompt "4.4.7"
+    select CC_GCC_4_4
+
 config CC_V_4_4_6
     bool
     prompt "4.4.6"
@@ -363,6 +368,7 @@ config CC_VERSION
     default "4.5.1" if CC_V_4_5_1
     default "4.5.0" if CC_V_4_5_0
     default "linaro-4.4-2011.02-0" if CC_V_linaro_4_4_2011_02_0
+    default "4.4.7" if CC_V_4_4_7
     default "4.4.6" if CC_V_4_4_6
     default "4.4.5" if CC_V_4_4_5
     default "4.4.4" if CC_V_4_4_4
diff --git a/patches/gcc/4.4.7/100-alpha-mieee-default.patch b/patches/gcc/4.4.7/100-alpha-mieee-default.patch
new file mode 100644
index 00000000..5f3acd81
--- /dev/null
+++ b/patches/gcc/4.4.7/100-alpha-mieee-default.patch
@@ -0,0 +1,24 @@
+diff -durN gcc-4.4.5.orig/gcc/config/alpha/alpha.h gcc-4.4.5/gcc/config/alpha/alpha.h
+--- gcc-4.4.5.orig/gcc/config/alpha/alpha.h	2009-02-20 16:20:38.000000000 +0100
++++ gcc-4.4.5/gcc/config/alpha/alpha.h	2010-10-09 22:57:31.000000000 +0200
+@@ -95,6 +95,8 @@
+   while (0)
+ #endif
+ 
++#define CPP_SPEC "%{!no-ieee:-mieee}"
++
+ #define WORD_SWITCH_TAKES_ARG(STR)		\
+  (!strcmp (STR, "rpath") || DEFAULT_WORD_SWITCH_TAKES_ARG(STR))
+ 
+diff -durN gcc-4.4.5.orig/gcc/config/alpha/alpha.opt gcc-4.4.5/gcc/config/alpha/alpha.opt
+--- gcc-4.4.5.orig/gcc/config/alpha/alpha.opt	2007-08-02 12:49:31.000000000 +0200
++++ gcc-4.4.5/gcc/config/alpha/alpha.opt	2010-10-09 22:57:31.000000000 +0200
+@@ -39,7 +39,7 @@
+ Request IEEE-conformant math library routines (OSF/1)
+ 
+ mieee
+-Target Report RejectNegative Mask(IEEE)
++Target Report Mask(IEEE)
+ Emit IEEE-conformant code, without inexact exceptions
+ 
+ mieee-with-inexact
diff --git a/patches/gcc/4.4.7/110-trampolinewarn.patch b/patches/gcc/4.4.7/110-trampolinewarn.patch
new file mode 100644
index 00000000..0bce8570
--- /dev/null
+++ b/patches/gcc/4.4.7/110-trampolinewarn.patch
@@ -0,0 +1,27 @@
+diff -durN gcc-4.4.5.orig/gcc/builtins.c gcc-4.4.5/gcc/builtins.c
+--- gcc-4.4.5.orig/gcc/builtins.c	2010-03-22 16:00:20.000000000 +0100
++++ gcc-4.4.5/gcc/builtins.c	2010-10-09 22:57:58.000000000 +0200
+@@ -5783,6 +5783,9 @@
+   trampolines_created = 1;
+   INITIALIZE_TRAMPOLINE (r_tramp, r_func, r_chain);
+ 
++  if (warn_trampolines)
++    warning (OPT_Wtrampolines, "generating trampoline in object (requires executable stack)");
++
+   return const0_rtx;
+ }
+ 
+diff -durN gcc-4.4.5.orig/gcc/common.opt gcc-4.4.5/gcc/common.opt
+--- gcc-4.4.5.orig/gcc/common.opt	2009-03-28 18:28:45.000000000 +0100
++++ gcc-4.4.5/gcc/common.opt	2010-10-09 22:57:58.000000000 +0200
+@@ -197,6 +197,10 @@
+ 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) Warning
+ Warn about uninitialized automatic variables
diff --git a/patches/gcc/4.4.7/120-java-nomulti.patch b/patches/gcc/4.4.7/120-java-nomulti.patch
new file mode 100644
index 00000000..aded63e0
--- /dev/null
+++ b/patches/gcc/4.4.7/120-java-nomulti.patch
@@ -0,0 +1,46 @@
+diff -durN gcc-4.4.5.orig/libjava/configure gcc-4.4.5/libjava/configure
+--- gcc-4.4.5.orig/libjava/configure	2010-10-01 10:26:18.000000000 +0200
++++ gcc-4.4.5/libjava/configure	2010-10-09 22:58:04.000000000 +0200
+@@ -1022,6 +1022,8 @@
+                           default=yes
+   --enable-java-maintainer-mode
+                           allow rebuilding of .class and .h files
++  --enable-libjava-multilib
++                          build libjava as multilib
+   --disable-dependency-tracking  speeds up one-time build
+   --enable-dependency-tracking   do not reject slow dependency extractors
+   --enable-maintainer-mode  enable make rules and dependencies not useful
+@@ -1974,6 +1976,16 @@
+ fi
+ 
+ 
++# Check whether --enable-libjava-multilib was given.
++if test "${enable_libjava_multilib+set}" = set; then
++  enableval=$enable_libjava_multilib;
++fi
++
++if test "$enable_libjava_multilib" = no; then
++  multilib=no
++  ac_configure_args="$ac_configure_args --disable-multilib"
++fi
++
+ # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX.
+ 
+ 
+diff -durN gcc-4.4.5.orig/libjava/configure.ac gcc-4.4.5/libjava/configure.ac
+--- gcc-4.4.5.orig/libjava/configure.ac	2010-06-11 13:49:16.000000000 +0200
++++ gcc-4.4.5/libjava/configure.ac	2010-10-09 22:58:04.000000000 +0200
+@@ -139,6 +139,13 @@
+ 	[allow rebuilding of .class and .h files]))
+ AM_CONDITIONAL(JAVA_MAINTAINER_MODE, test "$enable_java_maintainer_mode" = yes)
+ 
++AC_ARG_ENABLE(libjava-multilib,
++	AS_HELP_STRING([--enable-libjava-multilib], [build libjava as multilib]))
++if test "$enable_libjava_multilib" = no; then
++  multilib=no
++  ac_configure_args="$ac_configure_args --disable-multilib"
++fi
++
+ # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX.
+ GCC_NO_EXECUTABLES
+ 
diff --git a/patches/gcc/4.4.7/130-cross-compile.patch b/patches/gcc/4.4.7/130-cross-compile.patch
new file mode 100644
index 00000000..72bc60ed
--- /dev/null
+++ b/patches/gcc/4.4.7/130-cross-compile.patch
@@ -0,0 +1,39 @@
+diff -durN gcc-4.4.5.orig/gcc/configure gcc-4.4.5/gcc/configure
+--- gcc-4.4.5.orig/gcc/configure	2010-06-20 17:43:53.000000000 +0200
++++ gcc-4.4.5/gcc/configure	2010-10-09 22:58:36.000000000 +0200
+@@ -13997,7 +13997,7 @@
+ 	    | powerpc*-*-*,powerpc64*-*-*)
+ 		CROSS="$CROSS -DNATIVE_CROSS" ;;
+ 	esac
+-elif test "x$TARGET_SYSTEM_ROOT" != x; then
++elif test "x$TARGET_SYSTEM_ROOT" != x -o $build != $host; then
+         SYSTEM_HEADER_DIR=$build_system_header_dir
+ fi
+ 
+diff -durN gcc-4.4.5.orig/gcc/configure.ac gcc-4.4.5/gcc/configure.ac
+--- gcc-4.4.5.orig/gcc/configure.ac	2010-06-20 17:43:53.000000000 +0200
++++ gcc-4.4.5/gcc/configure.ac	2010-10-09 22:58:36.000000000 +0200
+@@ -1720,7 +1720,7 @@
+ 	    | powerpc*-*-*,powerpc64*-*-*)
+ 		CROSS="$CROSS -DNATIVE_CROSS" ;;
+ 	esac
+-elif test "x$TARGET_SYSTEM_ROOT" != x; then
++elif test "x$TARGET_SYSTEM_ROOT" != x -o $build != $host; then
+         SYSTEM_HEADER_DIR=$build_system_header_dir 
+ fi
+ 
+diff -durN gcc-4.4.5.orig/gcc/unwind-dw2.c gcc-4.4.5/gcc/unwind-dw2.c
+--- gcc-4.4.5.orig/gcc/unwind-dw2.c	2010-01-20 09:39:18.000000000 +0100
++++ gcc-4.4.5/gcc/unwind-dw2.c	2010-10-09 22:58:36.000000000 +0200
+@@ -329,9 +329,11 @@
+ }
+ #endif
+ 
++#ifndef inhibit_libc
+ #ifdef MD_UNWIND_SUPPORT
+ #include MD_UNWIND_SUPPORT
+ #endif
++#endif
+ 
+ /* Extract any interesting information from the CIE for the translation
+    unit F belongs to.  Return a pointer to the byte after the augmentation,
diff --git a/patches/gcc/4.4.7/140-default-format-security.patch b/patches/gcc/4.4.7/140-default-format-security.patch
new file mode 100644
index 00000000..ac1d988d
--- /dev/null
+++ b/patches/gcc/4.4.7/140-default-format-security.patch
@@ -0,0 +1,49 @@
+diff -durN gcc-4.4.5.orig/gcc/c-common.c gcc-4.4.5/gcc/c-common.c
+--- gcc-4.4.5.orig/gcc/c-common.c	2010-07-27 15:07:28.000000000 +0200
++++ gcc-4.4.5/gcc/c-common.c	2010-10-09 22:59:03.000000000 +0200
+@@ -301,7 +301,7 @@
+ /* Warn about format/argument anomalies in calls to formatted I/O functions
+    (*printf, *scanf, strftime, strfmon, etc.).  */
+ 
+-int warn_format;
++int warn_format = 1;
+ 
+ /* Warn about using __null (as NULL in C++) as sentinel.  For code compiled
+    with GCC this doesn't matter as __null is guaranteed to have the right
+diff -durN gcc-4.4.5.orig/gcc/c.opt gcc-4.4.5/gcc/c.opt
+--- gcc-4.4.5.orig/gcc/c.opt	2009-09-18 23:53:23.000000000 +0200
++++ gcc-4.4.5/gcc/c.opt	2010-10-09 22:59:03.000000000 +0200
+@@ -236,7 +236,7 @@
+ Warn about format strings that contain NUL bytes
+ 
+ Wformat-security
+-C ObjC C++ ObjC++ Var(warn_format_security) Warning
++C ObjC C++ ObjC++ Var(warn_format_security) Init(1) Warning
+ Warn about possible security problems with format functions
+ 
+ Wformat-y2k
+diff -durN gcc-4.4.5.orig/gcc/doc/invoke.texi gcc-4.4.5/gcc/doc/invoke.texi
+--- gcc-4.4.5.orig/gcc/doc/invoke.texi	2010-09-08 20:13:03.000000000 +0200
++++ gcc-4.4.5/gcc/doc/invoke.texi	2010-10-09 22:59:03.000000000 +0200
+@@ -2888,6 +2888,9 @@
+ @option{-Wformat-nonliteral}, @option{-Wformat-security}, and
+ @option{-Wformat=2} are available, but are not included in @option{-Wall}.
+ 
++NOTE: In Gentoo, this option is enabled by default for C, C++, ObjC, ObjC++.
++To disable, use @option{-Wformat=0}.
++
+ @item -Wformat-y2k
+ @opindex Wformat-y2k
+ @opindex Wno-format-y2k
+@@ -2941,6 +2944,11 @@
+ in future warnings may be added to @option{-Wformat-security} that are not
+ included in @option{-Wformat-nonliteral}.)
+ 
++NOTE: In Gentoo, this option is enabled by default for C, C++, ObjC, ObjC++.
++To disable, use @option{-Wno-format-security}, or disable all format warnings
++with @option{-Wformat=0}.  To make format security warnings fatal, specify
++@option{-Werror=format-security}.
++
+ @item -Wformat=2
+ @opindex Wformat=2
+ @opindex Wno-format=2
diff --git a/patches/gcc/4.4.7/150-default-fortify-source.patch b/patches/gcc/4.4.7/150-default-fortify-source.patch
new file mode 100644
index 00000000..ad5a7e8a
--- /dev/null
+++ b/patches/gcc/4.4.7/150-default-fortify-source.patch
@@ -0,0 +1,26 @@
+diff -durN gcc-4.4.5.orig/gcc/doc/invoke.texi gcc-4.4.5/gcc/doc/invoke.texi
+--- gcc-4.4.5.orig/gcc/doc/invoke.texi	2010-10-09 22:59:03.000000000 +0200
++++ gcc-4.4.5/gcc/doc/invoke.texi	2010-10-09 22:59:33.000000000 +0200
+@@ -5432,6 +5432,11 @@
+ Please note the warning under @option{-fgcse} about
+ invoking @option{-O2} on programs that use computed gotos.
+ 
++NOTE: In Gentoo, @option{-D_FORTIFY_SOURCE=2} is set by default, and is
++activated when @option{-O} is set to 2 or higher.  This enables additional
++compile-time and run-time checks for several libc functions.  To disable,
++specify either @option{-U_FORTIFY_SOURCE} or @option{-D_FORTIFY_SOURCE=0}.
++
+ @item -O3
+ @opindex O3
+ Optimize yet more.  @option{-O3} turns on all optimizations specified
+diff -durN gcc-4.4.5.orig/gcc/gcc.c gcc-4.4.5/gcc/gcc.c
+--- gcc-4.4.5.orig/gcc/gcc.c	2010-01-09 01:05:06.000000000 +0100
++++ gcc-4.4.5/gcc/gcc.c	2010-10-09 22:59:33.000000000 +0200
+@@ -807,6 +807,7 @@
+  %{H} %C %{D*&U*&A*} %{i*} %Z %i\
+  %{fmudflap:-D_MUDFLAP -include mf-runtime.h}\
+  %{fmudflapth:-D_MUDFLAP -D_MUDFLAPTH -include mf-runtime.h}\
++ %{!D_FORTIFY_SOURCE:%{!D_FORTIFY_SOURCE=*:%{!U_FORTIFY_SOURCE:-D_FORTIFY_SOURCE=2}}}\
+  %{E|M|MM:%W{o*}}";
+ 
+ /* This contains cpp options which are common with cc1_options and are passed
diff --git a/patches/gcc/4.4.7/160-netbsd-symbolic.patch b/patches/gcc/4.4.7/160-netbsd-symbolic.patch
new file mode 100644
index 00000000..a61b0784
--- /dev/null
+++ b/patches/gcc/4.4.7/160-netbsd-symbolic.patch
@@ -0,0 +1,11 @@
+diff -durN gcc-4.4.5.orig/gcc/config/netbsd-elf.h gcc-4.4.5/gcc/config/netbsd-elf.h
+--- gcc-4.4.5.orig/gcc/config/netbsd-elf.h	2007-09-03 18:14:04.000000000 +0200
++++ gcc-4.4.5/gcc/config/netbsd-elf.h	2010-10-09 22:59:57.000000000 +0200
+@@ -82,6 +82,7 @@
+ #define NETBSD_LINK_SPEC_ELF \
+   "%{assert*} %{R*} %{rpath*} \
+    %{shared:-shared} \
++   %{symbolic:-Bsymbolic} \
+    %{!shared: \
+      -dc -dp \
+      %{!nostdlib: \
diff --git a/patches/gcc/4.4.7/170-sparc64-bsd.patch b/patches/gcc/4.4.7/170-sparc64-bsd.patch
new file mode 100644
index 00000000..85d9b525
--- /dev/null
+++ b/patches/gcc/4.4.7/170-sparc64-bsd.patch
@@ -0,0 +1,29 @@
+diff -durN gcc-4.4.5.orig/gcc/config/sparc/freebsd.h gcc-4.4.5/gcc/config/sparc/freebsd.h
+--- gcc-4.4.5.orig/gcc/config/sparc/freebsd.h	2007-08-02 12:49:31.000000000 +0200
++++ gcc-4.4.5/gcc/config/sparc/freebsd.h	2010-10-09 23:00:03.000000000 +0200
+@@ -25,9 +25,22 @@
+ /* FreeBSD needs the platform name (sparc64) defined.
+    Emacs needs to know if the arch is 64 or 32-bits.  */
+ 
+-#undef  CPP_CPU64_DEFAULT_SPEC
+-#define CPP_CPU64_DEFAULT_SPEC \
+-  "-D__sparc64__ -D__sparc_v9__ -D__sparcv9 -D__arch64__"
++#undef  FBSD_TARGET_CPU_CPP_BUILTINS
++#define FBSD_TARGET_CPU_CPP_BUILTINS()                  \
++  do                                                    \
++    {                                                   \
++      if (TARGET_ARCH64)                                \
++        {                                               \
++          builtin_define ("__sparc64__");               \
++          builtin_define ("__sparc_v9__");              \
++          builtin_define ("__sparcv9");                 \
++        }                                               \
++      else                                              \
++        builtin_define ("__sparc");                     \
++      builtin_define ("__sparc__");                     \
++    }                                                   \
++  while (0)
++
+ 
+ #define LINK_SPEC "%(link_arch)						\
+   %{!mno-relax:%{!r:-relax}}						\
diff --git a/patches/gcc/4.4.7/180-libgomp-no-werror.patch b/patches/gcc/4.4.7/180-libgomp-no-werror.patch
new file mode 100644
index 00000000..35d50633
--- /dev/null
+++ b/patches/gcc/4.4.7/180-libgomp-no-werror.patch
@@ -0,0 +1,12 @@
+diff -durN gcc-4.4.5.orig/libgomp/configure gcc-4.4.5/libgomp/configure
+--- gcc-4.4.5.orig/libgomp/configure	2010-10-01 10:26:18.000000000 +0200
++++ gcc-4.4.5/libgomp/configure	2010-10-09 23:00:33.000000000 +0200
+@@ -3334,7 +3334,7 @@
+ 
+ # Add -Wall -Werror if we are using GCC.
+ if test "x$GCC" = "xyes"; then
+-  XCFLAGS="$XCFLAGS -Wall -Werror"
++  XCFLAGS="$XCFLAGS -Wall"
+ fi
+ 
+ # Find other programs we need.
diff --git a/patches/gcc/4.4.7/190-flatten-switch-stmt-00.patch b/patches/gcc/4.4.7/190-flatten-switch-stmt-00.patch
new file mode 100644
index 00000000..d4d68fe4
--- /dev/null
+++ b/patches/gcc/4.4.7/190-flatten-switch-stmt-00.patch
@@ -0,0 +1,24 @@
+diff -durN gcc-4.4.5.orig/gcc/stmt.c gcc-4.4.5/gcc/stmt.c
+--- gcc-4.4.5.orig/gcc/stmt.c	2010-03-08 12:46:28.000000000 +0100
++++ gcc-4.4.5/gcc/stmt.c	2010-10-09 23:01:01.000000000 +0200
+@@ -2377,7 +2377,11 @@
+ 	  use_cost_table
+ 	    = (TREE_CODE (orig_type) != ENUMERAL_TYPE
+ 	       && 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);
+@@ -2943,6 +2947,7 @@
+ 	    {
+ 	      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/4.4.7/200-libiberty.h-asprintf.patch b/patches/gcc/4.4.7/200-libiberty.h-asprintf.patch
new file mode 100644
index 00000000..19e45235
--- /dev/null
+++ b/patches/gcc/4.4.7/200-libiberty.h-asprintf.patch
@@ -0,0 +1,15 @@
+diff -durN gcc-4.4.5.orig/include/libiberty.h gcc-4.4.5/include/libiberty.h
+--- gcc-4.4.5.orig/include/libiberty.h	2008-06-24 03:42:31.000000000 +0200
++++ gcc-4.4.5/include/libiberty.h	2010-10-09 23:01:30.000000000 +0200
+@@ -595,8 +595,11 @@
+ /* Like sprintf but provides a pointer to malloc'd storage, which must
+    be freed by the caller.  */
+ 
++/* asprintf may be declared as a macro by glibc with __USE_FORTIFY_LEVEL.  */
++#ifndef asprintf
+ extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2;
+ #endif
++#endif
+ 
+ #if !HAVE_DECL_VASPRINTF
+ /* Like vsprintf but provides a pointer to malloc'd storage, which
diff --git a/patches/gcc/4.4.7/210-arm-unbreak-armv4t.patch b/patches/gcc/4.4.7/210-arm-unbreak-armv4t.patch
new file mode 100644
index 00000000..396a80bc
--- /dev/null
+++ b/patches/gcc/4.4.7/210-arm-unbreak-armv4t.patch
@@ -0,0 +1,12 @@
+diff -durN gcc-4.4.5.orig/gcc/config/arm/linux-eabi.h gcc-4.4.5/gcc/config/arm/linux-eabi.h
+--- gcc-4.4.5.orig/gcc/config/arm/linux-eabi.h	2007-11-08 14:44:09.000000000 +0100
++++ gcc-4.4.5/gcc/config/arm/linux-eabi.h	2010-10-09 23:01:59.000000000 +0200
+@@ -44,7 +44,7 @@
+    The ARM10TDMI core is the default for armv5t, so set
+    SUBTARGET_CPU_DEFAULT to achieve this.  */
+ #undef  SUBTARGET_CPU_DEFAULT
+-#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi
++#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9tdmi
+ 
+ /* TARGET_BIG_ENDIAN_DEFAULT is set in
+    config.gcc for big endian configurations.  */
diff --git a/patches/gcc/4.4.7/220-libiberty-pic.patch b/patches/gcc/4.4.7/220-libiberty-pic.patch
new file mode 100644
index 00000000..93b180a2
--- /dev/null
+++ b/patches/gcc/4.4.7/220-libiberty-pic.patch
@@ -0,0 +1,11 @@
+diff -durN gcc-4.4.5.orig/libiberty/Makefile.in gcc-4.4.5/libiberty/Makefile.in
+--- gcc-4.4.5.orig/libiberty/Makefile.in	2008-10-22 15:30:19.000000000 +0200
++++ gcc-4.4.5/libiberty/Makefile.in	2010-10-09 23:02:28.000000000 +0200
+@@ -227,6 +227,7 @@
+ 	  $(AR) $(AR_FLAGS) $(TARGETLIB) \
+ 	    $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \
+ 	  $(RANLIB) $(TARGETLIB); \
++	  cp $(TARGETLIB) ../ ; \
+ 	  cd ..; \
+ 	else true; fi
+ 
diff --git a/patches/gcc/4.4.7/230-superh-default-multilib.patch b/patches/gcc/4.4.7/230-superh-default-multilib.patch
new file mode 100644
index 00000000..0df23a9e
--- /dev/null
+++ b/patches/gcc/4.4.7/230-superh-default-multilib.patch
@@ -0,0 +1,12 @@
+diff -durN gcc-4.4.5.orig/gcc/config.gcc gcc-4.4.5/gcc/config.gcc
+--- gcc-4.4.5.orig/gcc/config.gcc	2010-06-14 00:16:50.000000000 +0200
++++ gcc-4.4.5/gcc/config.gcc	2010-10-09 23:02:56.000000000 +0200
+@@ -2140,7 +2140,7 @@
+ 	if test x${sh_multilibs} = x ; then
+ 		case ${target} in
+ 		sh64-superh-linux* | \
+-		sh[1234]*)	sh_multilibs=${sh_cpu_target} ;;
++		sh[1234]*)	sh_multilibs=`cd ${srcdir}/config/sh ; echo t-mlib-sh[1-4]* | sed 's:t-mlib-sh:,m:g;s: ::g'` ;;
+ 		sh64* | sh5*)	sh_multilibs=m5-32media,m5-32media-nofpu,m5-compact,m5-compact-nofpu,m5-64media,m5-64media-nofpu ;;
+ 		sh-superh-*)	sh_multilibs=m4,m4-single,m4-single-only,m4-nofpu ;;
+ 		sh*-*-linux*)	sh_multilibs=m1,m3e,m4 ;;
diff --git a/patches/gcc/4.4.7/240-libstdc++-pic.patch b/patches/gcc/4.4.7/240-libstdc++-pic.patch
new file mode 100644
index 00000000..4dde5a15
--- /dev/null
+++ b/patches/gcc/4.4.7/240-libstdc++-pic.patch
@@ -0,0 +1,53 @@
+diff -durN gcc-4.4.5.orig/libstdc++-v3/src/Makefile.am gcc-4.4.5/libstdc++-v3/src/Makefile.am
+--- gcc-4.4.5.orig/libstdc++-v3/src/Makefile.am	2009-08-26 21:04:11.000000000 +0200
++++ gcc-4.4.5/libstdc++-v3/src/Makefile.am	2010-10-09 23:03:26.000000000 +0200
+@@ -356,6 +356,13 @@
+ 	  $(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
+diff -durN gcc-4.4.5.orig/libstdc++-v3/src/Makefile.in gcc-4.4.5/libstdc++-v3/src/Makefile.in
+--- gcc-4.4.5.orig/libstdc++-v3/src/Makefile.in	2009-08-26 21:04:11.000000000 +0200
++++ gcc-4.4.5/libstdc++-v3/src/Makefile.in	2010-10-09 23:03:26.000000000 +0200
+@@ -726,7 +726,7 @@
+ 
+ install-data-am: install-data-local
+ 
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+ 
+ install-info: install-info-am
+ 
+@@ -765,7 +765,7 @@
+ 	maintainer-clean-generic mostlyclean mostlyclean-compile \
+ 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ 	tags uninstall uninstall-am uninstall-info-am \
+-	uninstall-toolexeclibLTLIBRARIES
++	uninstall-toolexeclibLTLIBRARIES install-exec-local
+ 
+ 
+ # Symbol versioning for shared libraries.
+@@ -947,6 +947,14 @@
+ 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/4.4.7/250-ia64-noteGNUstack.patch b/patches/gcc/4.4.7/250-ia64-noteGNUstack.patch
new file mode 100644
index 00000000..6d128e4e
--- /dev/null
+++ b/patches/gcc/4.4.7/250-ia64-noteGNUstack.patch
@@ -0,0 +1,79 @@
+diff -durN gcc-4.4.5.orig/gcc/config/ia64/crtbegin.asm gcc-4.4.5/gcc/config/ia64/crtbegin.asm
+--- gcc-4.4.5.orig/gcc/config/ia64/crtbegin.asm	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/gcc/config/ia64/crtbegin.asm	2010-10-09 23:03:55.000000000 +0200
+@@ -252,3 +252,7 @@
+ .weak __cxa_finalize
+ #endif
+ .weak _Jv_RegisterClasses
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+diff -durN gcc-4.4.5.orig/gcc/config/ia64/crtend.asm gcc-4.4.5/gcc/config/ia64/crtend.asm
+--- gcc-4.4.5.orig/gcc/config/ia64/crtend.asm	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/gcc/config/ia64/crtend.asm	2010-10-09 23:03:55.000000000 +0200
+@@ -119,3 +119,7 @@
+ 
+ 	br.ret.sptk.many rp
+ 	.endp __do_global_ctors_aux
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+diff -durN gcc-4.4.5.orig/gcc/config/ia64/crti.asm gcc-4.4.5/gcc/config/ia64/crti.asm
+--- gcc-4.4.5.orig/gcc/config/ia64/crti.asm	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/gcc/config/ia64/crti.asm	2010-10-09 23:03:55.000000000 +0200
+@@ -51,3 +51,7 @@
+ 	.body
+ 
+ # end of crti.asm
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+diff -durN gcc-4.4.5.orig/gcc/config/ia64/crtn.asm gcc-4.4.5/gcc/config/ia64/crtn.asm
+--- gcc-4.4.5.orig/gcc/config/ia64/crtn.asm	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/gcc/config/ia64/crtn.asm	2010-10-09 23:03:55.000000000 +0200
+@@ -41,3 +41,7 @@
+ 	br.ret.sptk.many b0
+ 
+ # end of crtn.asm
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+diff -durN gcc-4.4.5.orig/gcc/config/ia64/lib1funcs.asm gcc-4.4.5/gcc/config/ia64/lib1funcs.asm
+--- gcc-4.4.5.orig/gcc/config/ia64/lib1funcs.asm	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/gcc/config/ia64/lib1funcs.asm	2010-10-09 23:03:55.000000000 +0200
+@@ -793,3 +793,7 @@
+ 	.endp __floattitf
+ #endif
+ #endif
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+diff -durN gcc-4.4.5.orig/gcc/config/ia64/linux.h gcc-4.4.5/gcc/config/ia64/linux.h
+--- gcc-4.4.5.orig/gcc/config/ia64/linux.h	2009-02-12 17:30:53.000000000 +0100
++++ gcc-4.4.5/gcc/config/ia64/linux.h	2010-10-09 23:03:55.000000000 +0200
+@@ -5,6 +5,8 @@
+ 
+ #define TARGET_VERSION fprintf (stderr, " (IA-64) Linux");
+ 
++#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
++
+ /* This is for -profile to use -lc_p instead of -lc.  */
+ #undef CC1_SPEC
+ #define CC1_SPEC "%{profile:-p} %{G*}"
+diff -durN gcc-4.4.5.orig/gcc/config/rs6000/ppc-asm.h gcc-4.4.5/gcc/config/rs6000/ppc-asm.h
+--- gcc-4.4.5.orig/gcc/config/rs6000/ppc-asm.h	2008-10-13 17:44:26.000000000 +0200
++++ gcc-4.4.5/gcc/config/rs6000/ppc-asm.h	2010-10-09 23:03:55.000000000 +0200
+@@ -172,7 +172,7 @@
+ 	.size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name)
+ #endif
+ 
+-#if defined __linux__ && !defined __powerpc64__
++#if defined __linux__
+ 	.section .note.GNU-stack
+ 	.previous
+ #endif
diff --git a/patches/gcc/4.4.7/260-sh-libgcc-stacks.patch b/patches/gcc/4.4.7/260-sh-libgcc-stacks.patch
new file mode 100644
index 00000000..cc6baf31
--- /dev/null
+++ b/patches/gcc/4.4.7/260-sh-libgcc-stacks.patch
@@ -0,0 +1,25 @@
+diff -durN gcc-4.4.5.orig/gcc/config/sh/lib1funcs.asm gcc-4.4.5/gcc/config/sh/lib1funcs.asm
+--- gcc-4.4.5.orig/gcc/config/sh/lib1funcs.asm	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/gcc/config/sh/lib1funcs.asm	2010-10-09 23:04:22.000000000 +0200
+@@ -30,6 +30,11 @@
+ !! recoded in assembly by Toshiyasu Morita
+ !! tm@netcom.com
+ 
++#if defined(__ELF__) && defined(__linux__)
++.section .note.GNU-stack,"",%progbits
++.previous
++#endif
++
+ /* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
+    ELF local label prefixes by J"orn Rennecke
+    amylaar@cygnus.com  */
+diff -durN gcc-4.4.5.orig/gcc/config/sh/linux-atomic.asm gcc-4.4.5/gcc/config/sh/linux-atomic.asm
+--- gcc-4.4.5.orig/gcc/config/sh/linux-atomic.asm	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/gcc/config/sh/linux-atomic.asm	2010-10-09 23:04:22.000000000 +0200
+@@ -136,3 +136,6 @@
+ ATOMIC_FETCH_AND_COMBOP(nand,and,not,4,l,mov)
+ 
+ #endif /* ! __SH5__ */
++
++.section .note.GNU-stack,"",%progbits
++.previous
diff --git a/patches/gcc/4.4.7/270-sh-pr24836.patch b/patches/gcc/4.4.7/270-sh-pr24836.patch
new file mode 100644
index 00000000..11ca63d3
--- /dev/null
+++ b/patches/gcc/4.4.7/270-sh-pr24836.patch
@@ -0,0 +1,24 @@
+diff -durN gcc-4.4.5.orig/gcc/configure gcc-4.4.5/gcc/configure
+--- gcc-4.4.5.orig/gcc/configure	2010-10-09 22:58:36.000000000 +0200
++++ gcc-4.4.5/gcc/configure	2010-10-09 23:04:50.000000000 +0200
+@@ -22285,7 +22285,7 @@
+ 	tls_first_minor=14
+ 	tls_as_opt="-m64 -Aesame --fatal-warnings"
+ 	;;
+-  sh-*-* | sh[34]-*-*)
++  sh-*-* | sh[34]*-*-*)
+     conftest_s='
+ 	.section ".tdata","awT",@progbits
+ foo:	.long	25
+diff -durN gcc-4.4.5.orig/gcc/configure.ac gcc-4.4.5/gcc/configure.ac
+--- gcc-4.4.5.orig/gcc/configure.ac	2010-10-09 22:58:36.000000000 +0200
++++ gcc-4.4.5/gcc/configure.ac	2010-10-09 23:04:50.000000000 +0200
+@@ -2728,7 +2728,7 @@
+ 	tls_first_minor=14
+ 	tls_as_opt="-m64 -Aesame --fatal-warnings"
+ 	;;
+-  sh-*-* | sh[34]-*-*)
++  sh-*-* | sh[34]*-*-*)
+     conftest_s='
+ 	.section ".tdata","awT",@progbits
+ foo:	.long	25
diff --git a/patches/gcc/4.4.7/280-freebsd.patch b/patches/gcc/4.4.7/280-freebsd.patch
new file mode 100644
index 00000000..e26b34aa
--- /dev/null
+++ b/patches/gcc/4.4.7/280-freebsd.patch
@@ -0,0 +1,94 @@
+diff -durN gcc-4.4.5.orig/gcc/config/freebsd-spec.h gcc-4.4.5/gcc/config/freebsd-spec.h
+--- gcc-4.4.5.orig/gcc/config/freebsd-spec.h	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/gcc/config/freebsd-spec.h	2010-10-09 23:09:53.000000000 +0200
+@@ -61,6 +61,8 @@
+ 	builtin_assert ("system=unix");					\
+ 	builtin_assert ("system=bsd");					\
+ 	builtin_assert ("system=FreeBSD");				\
++	if(!(flag_iso && (c_dialect_cxx () ? cxx_dialect == cxx98 : !flag_isoc99)))	\
++		builtin_define("_LONGLONG");				\
+ 	FBSD_TARGET_CPU_CPP_BUILTINS();					\
+     }									\
+   while (0)
+diff -durN gcc-4.4.5.orig/gcc/config/t-freebsd-eh gcc-4.4.5/gcc/config/t-freebsd-eh
+--- gcc-4.4.5.orig/gcc/config/t-freebsd-eh	1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.4.5/gcc/config/t-freebsd-eh	2010-10-09 23:09:53.000000000 +0200
+@@ -0,0 +1,4 @@
++# Use unwind-dw2-fde-glibc
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
++  $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c
+diff -durN gcc-4.4.5.orig/gcc/config.gcc gcc-4.4.5/gcc/config.gcc
+--- gcc-4.4.5.orig/gcc/config.gcc	2010-10-09 23:02:56.000000000 +0200
++++ gcc-4.4.5/gcc/config.gcc	2010-10-09 23:09:53.000000000 +0200
+@@ -456,7 +456,7 @@
+   # pleases around the provided core setting.
+   gas=yes
+   gnu_ld=yes
+-  extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
++  extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
+   fbsd_major=`echo ${target} | sed -e 's/.*freebsd//g' | sed -e 's/\..*//g'`
+   tm_defines="${tm_defines} FBSD_MAJOR=${fbsd_major}"
+   tmake_file="t-slibgcc-elf-ver t-freebsd"
+@@ -1048,6 +1048,10 @@
+ 	;;
+ i[34567]86-*-freebsd*)
+ 	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/freebsd.h"
++	fbsd_major=`echo ${target} | sed -e 's/.*freebsd//g' | sed -e 's/\..*//g'`
++	if test ${fbsd_major} -ge 7; then
++		tmake_file="${tmake_file} t-freebsd-eh"
++	fi
+ 	;;
+ x86_64-*-freebsd*)
+ 	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/x86-64.h i386/freebsd.h i386/freebsd64.h"
+diff -durN gcc-4.4.5.orig/gcc/crtstuff.c gcc-4.4.5/gcc/crtstuff.c
+--- gcc-4.4.5.orig/gcc/crtstuff.c	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/gcc/crtstuff.c	2010-10-09 23:09:53.000000000 +0200
+@@ -85,13 +85,15 @@
+     && !defined(OBJECT_FORMAT_FLAT) \
+     && defined(HAVE_LD_EH_FRAME_HDR) \
+     && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \
+-    && defined(__GLIBC__) && __GLIBC__ >= 2
++    && ((defined(__GLIBC__) && __GLIBC__ >= 2) \
++    || (defined(__FreeBSD_version) && __FreeBSD_version >= 700022))
+ #include <link.h>
+ /* uClibc pretends to be glibc 2.2 and DT_CONFIG is defined in its link.h.
+    But it doesn't use PT_GNU_EH_FRAME ELF segment currently.  */
+ # if !defined(__UCLIBC__) \
+-     && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
+-     || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG)))
++     || (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
++     || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG))) \
++     || (__FreeBSD_version >= 700022)
+ #  define USE_PT_GNU_EH_FRAME
+ # endif
+ #endif
+diff -durN gcc-4.4.5.orig/gcc/unwind-dw2-fde-glibc.c gcc-4.4.5/gcc/unwind-dw2-fde-glibc.c
+--- gcc-4.4.5.orig/gcc/unwind-dw2-fde-glibc.c	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/gcc/unwind-dw2-fde-glibc.c	2010-10-09 23:09:53.000000000 +0200
+@@ -46,8 +46,9 @@
+ #include "gthr.h"
+ 
+ #if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
+-    && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
+-	|| (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG)))
++    && ((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
++	|| (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG))) \
++    || (__FreeBSD_version >= 700022 ))
+ 
+ #ifndef __RELOC_POINTER
+ # define __RELOC_POINTER(ptr, base) ((ptr) + (base))
+@@ -63,6 +64,13 @@
+ #define PT_GNU_EH_FRAME (PT_LOOS + 0x474e550)
+ #endif
+ 
++/* Support FreeBSD */
++#ifndef ElfW
++# ifdef __ElfN
++#  define ElfW __ElfN
++# endif
++#endif
++
+ struct unw_eh_callback_data
+ {
+   _Unwind_Ptr pc;
diff --git a/patches/gcc/4.4.7/290-freebsd.patch b/patches/gcc/4.4.7/290-freebsd.patch
new file mode 100644
index 00000000..88d632ef
--- /dev/null
+++ b/patches/gcc/4.4.7/290-freebsd.patch
@@ -0,0 +1,64 @@
+diff -durN gcc-4.4.5.orig/gcc/config/freebsd-spec.h gcc-4.4.5/gcc/config/freebsd-spec.h
+--- gcc-4.4.5.orig/gcc/config/freebsd-spec.h	2010-10-09 23:09:53.000000000 +0200
++++ gcc-4.4.5/gcc/config/freebsd-spec.h	2010-10-09 23:10:02.000000000 +0200
+@@ -86,9 +86,10 @@
+ #define FBSD_STARTFILE_SPEC \
+   "%{!shared: \
+      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
+-		       %{!p:%{profile:gcrt1.o%s} \
+-			 %{!profile:crt1.o%s}}}} \
+-   crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
++	%{!p:%{profile:gcrt1.o%s} \
++	 %{!profile:crt1.o%s}}}} \
++   crti.o%s \
++   %{static:crtbeginT.o%s;shared:crtbeginS.o%s;:crtbegin.o%s}"
+ 
+ /* Provide a ENDFILE_SPEC appropriate for FreeBSD.  Here we tack on
+    the magical crtend.o file (see crtstuff.c) which provides part of 
+@@ -126,7 +127,8 @@
+     %{pg:  -lc_p}							\
+   }"
+ #else
+-#if FBSD_MAJOR < 5
++#include <sys/param.h>
++#if __FreeBSD_version < 500016
+ #define FBSD_LIB_SPEC "							\
+   %{!shared:								\
+     %{!pg:								\
+@@ -136,17 +138,34 @@
+       %{!pthread:-lc_p}							\
+       %{pthread:-lc_r_p}}						\
+   }"
+-#else
++#elif __FreeBSD_version < 700022
+ #define FBSD_LIB_SPEC "							\
+   %{!shared:								\
+     %{!pg: %{pthread:-lpthread} -lc}					\
+     %{pg:  %{pthread:-lpthread_p} -lc_p}				\
+   }"
++#else
++#define FBSD_LIB_SPEC "							\
++  %{!shared:								\
++    %{!pg: %{pthread:-lpthread} -lc}					\
++    %{pg:  %{pthread:-lpthread_p} -lc_p}}				\
++  %{shared:								\
++    %{pthread:-lpthread} -lc}						\
++  "
+ #endif
+ #endif
+ 
+-#if FBSD_MAJOR < 6
++#if FBSD_MAJOR < 5
+ #define FBSD_DYNAMIC_LINKER "/usr/libexec/ld-elf.so.1"
+ #else
+ #define FBSD_DYNAMIC_LINKER "/libexec/ld-elf.so.1"
+ #endif
++
++#if defined(HAVE_LD_EH_FRAME_HDR)
++#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++#endif
++
++/* Use --as-needed -lgcc_s for eh support.  */
++#ifdef HAVE_LD_AS_NEEDED
++#define USE_LD_AS_NEEDED 1
++#endif
diff --git a/patches/gcc/4.4.7/300-uclibc-conf.patch b/patches/gcc/4.4.7/300-uclibc-conf.patch
new file mode 100644
index 00000000..b1465e06
--- /dev/null
+++ b/patches/gcc/4.4.7/300-uclibc-conf.patch
@@ -0,0 +1,35 @@
+diff -durN gcc-4.4.5.orig/contrib/regression/objs-gcc.sh gcc-4.4.5/contrib/regression/objs-gcc.sh
+--- gcc-4.4.5.orig/contrib/regression/objs-gcc.sh	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/contrib/regression/objs-gcc.sh	2010-10-09 23:10:32.000000000 +0200
+@@ -106,6 +106,10 @@
+  then
+   make all-gdb all-dejagnu all-ld || exit 1
+   make install-gdb install-dejagnu install-ld || exit 1
++elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-uclibc ]
++ then
++  make all-gdb all-dejagnu all-ld || exit 1
++  make install-gdb install-dejagnu install-ld || exit 1
+ elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then
+   make bootstrap || exit 1
+   make install || exit 1
+diff -durN gcc-4.4.5.orig/libjava/classpath/ltconfig gcc-4.4.5/libjava/classpath/ltconfig
+--- gcc-4.4.5.orig/libjava/classpath/ltconfig	2007-06-04 01:18:43.000000000 +0200
++++ gcc-4.4.5/libjava/classpath/ltconfig	2010-10-09 23:10:32.000000000 +0200
+@@ -603,7 +603,7 @@
+ 
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+-linux-gnu*) ;;
++linux-gnu*|linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1251,7 +1251,7 @@
+   ;;
+ 
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+   version_type=linux
+   need_lib_prefix=no
+   need_version=no
diff --git a/patches/gcc/4.4.7/310-missing-execinfo_h.patch b/patches/gcc/4.4.7/310-missing-execinfo_h.patch
new file mode 100644
index 00000000..3d381daf
--- /dev/null
+++ b/patches/gcc/4.4.7/310-missing-execinfo_h.patch
@@ -0,0 +1,12 @@
+diff -durN gcc-4.4.5.orig/boehm-gc/include/gc.h gcc-4.4.5/boehm-gc/include/gc.h
+--- gcc-4.4.5.orig/boehm-gc/include/gc.h	2007-04-23 23:10:09.000000000 +0200
++++ gcc-4.4.5/boehm-gc/include/gc.h	2010-10-09 23:11:00.000000000 +0200
+@@ -503,7 +503,7 @@
+ #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/4.4.7/320-c99-snprintf.patch b/patches/gcc/4.4.7/320-c99-snprintf.patch
new file mode 100644
index 00000000..c6aa06c3
--- /dev/null
+++ b/patches/gcc/4.4.7/320-c99-snprintf.patch
@@ -0,0 +1,12 @@
+diff -durN gcc-4.4.5.orig/libstdc++-v3/include/c_global/cstdio gcc-4.4.5/libstdc++-v3/include/c_global/cstdio
+--- gcc-4.4.5.orig/libstdc++-v3/include/c_global/cstdio	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/libstdc++-v3/include/c_global/cstdio	2010-10-09 23:11:27.000000000 +0200
+@@ -139,7 +139,7 @@
+ 
+ _GLIBCXX_END_NAMESPACE
+ 
+-#if _GLIBCXX_USE_C99
++#if _GLIBCXX_USE_C99 || defined __UCLIBC__
+ 
+ #undef snprintf
+ #undef vfscanf
diff --git a/patches/gcc/4.4.7/330-libmudflap-susv3-legacy.patch b/patches/gcc/4.4.7/330-libmudflap-susv3-legacy.patch
new file mode 100644
index 00000000..95f77091
--- /dev/null
+++ b/patches/gcc/4.4.7/330-libmudflap-susv3-legacy.patch
@@ -0,0 +1,48 @@
+diff -durN gcc-4.4.5.orig/libmudflap/mf-hooks2.c gcc-4.4.5/libmudflap/mf-hooks2.c
+--- gcc-4.4.5.orig/libmudflap/mf-hooks2.c	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/libmudflap/mf-hooks2.c	2010-10-09 23:11:52.000000000 +0200
+@@ -421,7 +421,7 @@
+ {
+   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 @@
+   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 @@
+   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 @@
+   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 @@
+   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/4.4.7/340-ecjx-host-cc.patch b/patches/gcc/4.4.7/340-ecjx-host-cc.patch
new file mode 100644
index 00000000..c7f6ae71
--- /dev/null
+++ b/patches/gcc/4.4.7/340-ecjx-host-cc.patch
@@ -0,0 +1,13 @@
+diff -durN gcc-4.4.5.orig/libjava/Makefile.in gcc-4.4.5/libjava/Makefile.in
+--- gcc-4.4.5.orig/libjava/Makefile.in	2010-10-01 10:26:18.000000000 +0200
++++ gcc-4.4.5/libjava/Makefile.in	2010-10-09 23:12:22.000000000 +0200
+@@ -9180,6 +9180,9 @@
+ ecjx$(EXEEXT): $(ecjx_OBJECTS) $(ecjx_DEPENDENCIES) 
+ 	@rm -f ecjx$(EXEEXT)
+ 	$(ecjx_LINK) $(ecjx_LDFLAGS) $(ecjx_OBJECTS) $(ecjx_LDADD) $(LIBS)
++ecjx.$(OBJEXT): $(ecjx_SOURCES)
++	@rm -f ecjx.$(OBJEXT)
++	$(CC_FOR_BUILD) $(BUILD_CFLAGS) -c -o $@ $<
+ gappletviewer$(EXEEXT): $(gappletviewer_OBJECTS) $(gappletviewer_DEPENDENCIES) 
+ 	@rm -f gappletviewer$(EXEEXT)
+ 	$(gappletviewer_LINK) $(gappletviewer_LDFLAGS) $(gappletviewer_OBJECTS) $(gappletviewer_LDADD) $(LIBS)
diff --git a/patches/gcc/4.4.7/350-index_macro.patch b/patches/gcc/4.4.7/350-index_macro.patch
new file mode 100644
index 00000000..0dda11e4
--- /dev/null
+++ b/patches/gcc/4.4.7/350-index_macro.patch
@@ -0,0 +1,30 @@
+-= BEGIN original header =-
+Original patch from gentoo: gentoo/src/patchsets/gcc/4.3.1/uclibc/90_all_304-index_macro.patch
+-= END original header =-
+
+diff -durN gcc-4.4.5.orig/libstdc++-v3/include/ext/rope gcc-4.4.5/libstdc++-v3/include/ext/rope
+--- gcc-4.4.5.orig/libstdc++-v3/include/ext/rope	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/libstdc++-v3/include/ext/rope	2010-10-09 23:12:51.000000000 +0200
+@@ -54,6 +54,9 @@
+ #include <bits/gthr.h>
+ #include <tr1/functional>
+ 
++/* cope w/ index defined as macro, SuSv3 proposal */
++#undef index
++
+ # ifdef __GC
+ #   define __GC_CONST const
+ # else
+diff -durN gcc-4.4.5.orig/libstdc++-v3/include/ext/ropeimpl.h gcc-4.4.5/libstdc++-v3/include/ext/ropeimpl.h
+--- gcc-4.4.5.orig/libstdc++-v3/include/ext/ropeimpl.h	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/libstdc++-v3/include/ext/ropeimpl.h	2010-10-09 23:12:51.000000000 +0200
+@@ -49,6 +49,9 @@
+ #include <ext/memory> // For uninitialized_copy_n
+ #include <ext/numeric> // For power
+ 
++/* cope w/ index defined as macro, SuSv3 proposal */
++#undef index
++
+ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
+ 
+   using std::size_t;
diff --git a/patches/gcc/4.4.7/360-arm-bigendian.patch b/patches/gcc/4.4.7/360-arm-bigendian.patch
new file mode 100644
index 00000000..5a642908
--- /dev/null
+++ b/patches/gcc/4.4.7/360-arm-bigendian.patch
@@ -0,0 +1,32 @@
+By Lennert Buytenhek <buytenh@wantstofly.org>
+Adds support for arm*b-linux* big-endian ARM targets
+
+See http://gcc.gnu.org/PR16350
+
+diff -durN gcc-4.4.5.orig/gcc/config/arm/linux-elf.h gcc-4.4.5/gcc/config/arm/linux-elf.h
+--- gcc-4.4.5.orig/gcc/config/arm/linux-elf.h	2009-02-20 16:20:38.000000000 +0100
++++ gcc-4.4.5/gcc/config/arm/linux-elf.h	2010-10-09 23:13:21.000000000 +0200
+@@ -51,7 +51,7 @@
+ 
+ #undef  MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-	{ "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork" }
++	{ "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mno-thumb-interwork" }
+ 
+ /* Now we define the strings used to build the spec file.  */
+ #undef  LIB_SPEC
+diff -durN gcc-4.4.5.orig/gcc/config.gcc gcc-4.4.5/gcc/config.gcc
+--- gcc-4.4.5.orig/gcc/config.gcc	2010-10-09 23:09:53.000000000 +0200
++++ gcc-4.4.5/gcc/config.gcc	2010-10-09 23:13:21.000000000 +0200
+@@ -739,6 +739,11 @@
+ 	tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/linux-gas.h arm/uclinux-elf.h"
+ 	tmake_file="arm/t-arm arm/t-arm-elf"
+ 	case ${target} in
++	arm*b-*)
++		tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
++		;;
++	esac
++	case ${target} in
+ 	arm*-*-uclinux*eabi)
+ 	    tm_file="$tm_file arm/bpabi.h arm/uclinux-eabi.h"
+ 	    tmake_file="$tmake_file arm/t-bpabi"
diff --git a/patches/gcc/4.4.7/370-bootstrap-target_lib_path.patch b/patches/gcc/4.4.7/370-bootstrap-target_lib_path.patch
new file mode 100644
index 00000000..84f62d4c
--- /dev/null
+++ b/patches/gcc/4.4.7/370-bootstrap-target_lib_path.patch
@@ -0,0 +1,38 @@
+ChangeLog:
+2010-01-06  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+
+	PR bootstrap/41818
+	* Makefile.tpl (BASE_TARGET_EXPORTS): Only add TARGET_LIB_PATH
+	to $(RPATH_ENVVAR) if bootstrapping.
+	* Makefile.in: Regenerate.
+
+diff -durN gcc-4.4.5.orig/Makefile.in gcc-4.4.5/Makefile.in
+--- gcc-4.4.5.orig/Makefile.in	2009-04-25 06:10:29.000000000 +0200
++++ gcc-4.4.5/Makefile.in	2010-10-09 23:13:50.000000000 +0200
+@@ -245,7 +245,10 @@
+ 	STRIP="$(STRIP_FOR_TARGET)"; export STRIP; \
+ 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ 	WINDMC="$(WINDMC_FOR_TARGET)"; export WINDMC; \
+-	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
++@if gcc-bootstrap
++	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
++@endif gcc-bootstrap
++	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
+ 
+ RAW_CXX_TARGET_EXPORTS = \
+ 	$(BASE_TARGET_EXPORTS) \
+diff -durN gcc-4.4.5.orig/Makefile.tpl gcc-4.4.5/Makefile.tpl
+--- gcc-4.4.5.orig/Makefile.tpl	2009-04-14 10:57:33.000000000 +0200
++++ gcc-4.4.5/Makefile.tpl	2010-10-09 23:13:50.000000000 +0200
+@@ -248,7 +248,10 @@
+ 	STRIP="$(STRIP_FOR_TARGET)"; export STRIP; \
+ 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ 	WINDMC="$(WINDMC_FOR_TARGET)"; export WINDMC; \
+-	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
++@if gcc-bootstrap
++	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
++@endif gcc-bootstrap
++	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
+ 
+ RAW_CXX_TARGET_EXPORTS = \
+ 	$(BASE_TARGET_EXPORTS) \
diff --git a/patches/gcc/4.4.7/380-powerpc-libgcc_s-link-libm.patch b/patches/gcc/4.4.7/380-powerpc-libgcc_s-link-libm.patch
new file mode 100644
index 00000000..06bc93d1
--- /dev/null
+++ b/patches/gcc/4.4.7/380-powerpc-libgcc_s-link-libm.patch
@@ -0,0 +1,134 @@
+http://gcc.gnu.org/ml/gcc-patches/2008-10/msg00269.html
+
+On glibc the libc.so carries a copy of the math function copysignl() but
+contains unresolved symbols, any attempt to link against libgcc_s
+without explicitely specifying -lm fails, resulting in a broken
+bootstrap of the compiler.
+
+
+diff -durN gcc-4.4.5.orig/gcc/config/t-slibgcc-elf-ver gcc-4.4.5/gcc/config/t-slibgcc-elf-ver
+--- gcc-4.4.5.orig/gcc/config/t-slibgcc-elf-ver	2010-01-04 16:13:08.000000000 +0100
++++ gcc-4.4.5/gcc/config/t-slibgcc-elf-ver	2010-10-09 23:14:18.000000000 +0200
+@@ -9,7 +9,7 @@
+ SHLIB_OBJS = @shlib_objs@
+ SHLIB_DIR = @multilib_dir@
+ SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
+-SHLIB_LC = -lc
++SHLIB_LC = @libgcc_libm@ -lc
+ SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
+ SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \
+ 	$$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
+diff -durN gcc-4.4.5.orig/libgcc/configure gcc-4.4.5/libgcc/configure
+--- gcc-4.4.5.orig/libgcc/configure	2008-11-20 18:13:01.000000000 +0100
++++ gcc-4.4.5/libgcc/configure	2010-10-09 23:14:18.000000000 +0200
+@@ -272,7 +272,7 @@
+ PACKAGE_BUGREPORT=''
+ 
+ ac_unique_file="static-object.mk"
+-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libgcc_topdir enable_shared slibdir INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA AWK build build_cpu build_vendor build_os host host_cpu host_vendor host_os host_noncanonical build_libsubdir build_subdir host_subdir target_subdir AR ac_ct_AR LIPO ac_ct_LIPO NM ac_ct_NM RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP decimal_float enable_decimal_float fixed_point vis_hide set_have_cc_tls tmake_file extra_parts asm_hidden_op LIBOBJS LTLIBOBJS'
++ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libgcc_topdir enable_shared slibdir INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA AWK build build_cpu build_vendor build_os host host_cpu host_vendor host_os host_noncanonical build_libsubdir build_subdir host_subdir target_subdir AR ac_ct_AR LIPO ac_ct_LIPO NM ac_ct_NM RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP decimal_float enable_decimal_float fixed_point vis_hide set_have_cc_tls LIBGCC_LIBM tmake_file extra_parts asm_hidden_op LIBOBJS LTLIBOBJS'
+ ac_subst_files=''
+ ac_pwd=`pwd`
+ 
+@@ -3547,6 +3547,39 @@
+ fi
+ 
+ 
++# On powerpc libgcc_s references copysignl which is a libm function but
++# glibc apparently also provides it via libc as opposed to uClibc where
++# it lives in libm.
++echo "$as_me:$LINENO: checking for library containing copysignl" >&5
++echo $ECHO_N "checking for library containing copysignl... $ECHO_C" >&6
++if test "${libgcc_cv_copysignl_lib+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++
++    echo '#include <features.h>' > conftest.c
++    echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c
++    libgcc_cv_copysignl_lib="-lc"
++    if { ac_try='${CC-cc} -S conftest.c -o conftest.s 1>&5'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }
++    then
++	libgcc_cv_copysignl_lib="-lm"
++    fi
++    rm -f conftest.*
++
++fi
++echo "$as_me:$LINENO: result: $libgcc_cv_copysignl_lib" >&5
++echo "${ECHO_T}$libgcc_cv_copysignl_lib" >&6
++
++case /${libgcc_cv_copysignl_lib}/ in
++  /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;;
++  *) LIBGCC_LIBM= ;;
++esac
++
++
+ # Conditionalize the makefile for this target machine.
+ tmake_file_=
+ for f in ${tmake_file}
+@@ -4267,6 +4300,7 @@
+ s,@fixed_point@,$fixed_point,;t t
+ s,@vis_hide@,$vis_hide,;t t
+ s,@set_have_cc_tls@,$set_have_cc_tls,;t t
++s,@LIBGCC_LIBM@,$LIBGCC_LIBM,;t t
+ s,@tmake_file@,$tmake_file,;t t
+ s,@extra_parts@,$extra_parts,;t t
+ s,@asm_hidden_op@,$asm_hidden_op,;t t
+diff -durN gcc-4.4.5.orig/libgcc/configure.ac gcc-4.4.5/libgcc/configure.ac
+--- gcc-4.4.5.orig/libgcc/configure.ac	2008-11-20 18:13:01.000000000 +0100
++++ gcc-4.4.5/libgcc/configure.ac	2010-10-09 23:14:18.000000000 +0200
+@@ -223,6 +223,27 @@
+ fi
+ AC_SUBST(set_have_cc_tls)
+ 
++# On powerpc libgcc_s references copysignl which is a libm function but
++# glibc apparently also provides it via libc as opposed to uClibc where
++# it lives in libm.
++AC_CACHE_CHECK
++  libgcc_cv_copysignl_lib,
++    echo '#include <features.h>' > conftest.c
++    echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c
++    libgcc_cv_copysignl_lib="-lc"
++    if AC_TRY_COMMAND(${CC-cc} -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD)
++    then
++	libgcc_cv_copysignl_lib="-lm"
++    fi
++    rm -f conftest.*
++  ])
++
++case /${libgcc_cv_copysignl_lib}/ in
++  /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;;
++  *) LIBGCC_LIBM= ;;
++esac
++AC_SUBST(LIBGCC_LIBM)
++
+ # Conditionalize the makefile for this target machine.
+ tmake_file_=
+ for f in ${tmake_file}
+diff -durN gcc-4.4.5.orig/libgcc/Makefile.in gcc-4.4.5/libgcc/Makefile.in
+--- gcc-4.4.5.orig/libgcc/Makefile.in	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/libgcc/Makefile.in	2010-10-09 23:14:18.000000000 +0200
+@@ -39,6 +39,7 @@
+ decimal_float = @decimal_float@
+ enable_decimal_float = @enable_decimal_float@
+ fixed_point = @fixed_point@
++LIBGCC_LIBM = @LIBGCC_LIBM@
+ 
+ host_noncanonical = @host_noncanonical@
+ 
+@@ -787,9 +788,10 @@
+ 		@multilib_dir@,$(MULTIDIR),$(subst \
+ 		@shlib_objs@,$(objects),$(subst \
+ 		@shlib_base_name@,libgcc_s,$(subst \
++		@libgcc_libm@,$(LIBGCC_LIBM),$(subst \
+ 		@shlib_map_file@,$(mapfile),$(subst \
+ 		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \
+-		@shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK))))))))
++		@shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK)))))))))
+ 
+ libunwind$(SHLIB_EXT): $(libunwind-s-objects) $(extra-parts)
+ 	# @multilib_flags@ is still needed because this may use
diff --git a/patches/gcc/4.4.7/390-arm-softfloat-libgcc.patch b/patches/gcc/4.4.7/390-arm-softfloat-libgcc.patch
new file mode 100644
index 00000000..e6a30a3f
--- /dev/null
+++ b/patches/gcc/4.4.7/390-arm-softfloat-libgcc.patch
@@ -0,0 +1,38 @@
+[PATCH] add the correct symbols to libgcc for uclibc arm softfloat
+
+Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
+---
+ gcc/config/arm/linux-elf.h |    2 +-
+ gcc/config/arm/t-linux     |    6 +++++-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+Index: gcc-4.4.0/gcc/config/arm/t-linux
+===================================================================
+--- gcc-4.4.0.orig/gcc/config/arm/t-linux
++++ gcc-4.4.0/gcc/config/arm/t-linux
+@@ -4,7 +4,11 @@
+ 
+ LIB1ASMSRC = arm/lib1funcs.asm
+ LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx _clzsi2 _clzdi2 \
+-	_arm_addsubdf3 _arm_addsubsf3
++	_arm_addsubdf3 _arm_addsubsf3 \
++	_arm_negdf2 _arm_muldivdf3 _arm_cmpdf2 _arm_unorddf2 \
++	_arm_fixdfsi _arm_fixunsdfsi _arm_truncdfsf2 \
++	_arm_negsf2 _arm_muldivsf3 _arm_cmpsf2 _arm_unordsf2 \
++	_arm_fixsfsi _arm_fixunssfsi
+ 
+ # MULTILIB_OPTIONS = mhard-float/msoft-float
+ # MULTILIB_DIRNAMES = hard-float soft-float
+Index: gcc-4.4.0/gcc/config/arm/linux-elf.h
+===================================================================
+--- gcc-4.4.0.orig/gcc/config/arm/linux-elf.h
++++ gcc-4.4.0/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"
+ 
diff --git a/patches/gcc/4.4.7/400-pr42289-fix-libffi-build-on-arm-oabi.patch b/patches/gcc/4.4.7/400-pr42289-fix-libffi-build-on-arm-oabi.patch
new file mode 100644
index 00000000..8654879a
--- /dev/null
+++ b/patches/gcc/4.4.7/400-pr42289-fix-libffi-build-on-arm-oabi.patch
@@ -0,0 +1,11 @@
+--- gcc-4.3.4/libffi/src/arm/sysv.S	
++++ gcc-4.3.4/libffi/src/arm/sysv.S	
+@@ -235,7 +235,7 @@ ARM_FUNC_START ffi_closure_SYSV
+ 	stmfd	sp!, {ip, lr}
+ 	UNWIND .save	{r0, lr}
+ 	add	r2, sp, #8
+-	.pad #16
++	UNWIND .pad #16
+ 	sub	sp, sp, #16
+ 	str	sp, [sp, #8]
+ 	add	r1, sp, #8
diff --git a/patches/gcc/4.4.7/410-libgcc_eh.a.patch b/patches/gcc/4.4.7/410-libgcc_eh.a.patch
new file mode 100644
index 00000000..4753260f
--- /dev/null
+++ b/patches/gcc/4.4.7/410-libgcc_eh.a.patch
@@ -0,0 +1,39 @@
+Highly inspired by:
+  http://landley.net/hg/aboriginal/file/7e0747a665ab/sources/patches/gcc-core-libgcceh.patch
+
+diff -durN gcc-4.4.0.orig/libgcc/Makefile.in gcc-4.4.0/libgcc/Makefile.in
+--- gcc-4.4.0.orig/libgcc/Makefile.in	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.0/libgcc/Makefile.in	2011-09-12 17:05:25.121124559 +0200
+@@ -754,8 +754,9 @@
+ libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT)
+ endif
+ 
++all: libgcc_eh.a
+ ifeq ($(enable_shared),yes)
+-all: libgcc_eh.a libgcc_s$(SHLIB_EXT)
++all: libgcc_s$(SHLIB_EXT)
+ ifneq ($(LIBUNWIND),)
+ all: libunwind$(SHLIB_EXT)
+ endif
+@@ -924,10 +925,6 @@
+ install-shared:
+ 	$(mkinstalldirs) $(DESTDIR)$(inst_libdir)
+ 
+-	$(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/
+-	chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a
+-	$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a
+-
+ 	$(subst @multilib_dir@,$(MULTIDIR),$(subst \
+ 		@shlib_base_name@,libgcc_s,$(subst \
+ 		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL))))
+@@ -942,6 +939,10 @@
+ 	chmod 644 $(DESTDIR)$(inst_libdir)/libgcov.a
+ 	$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcov.a
+ 
++	$(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/
++	chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a
++	$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a
++
+ 	parts="$(INSTALL_PARTS)";				\
+ 	for file in $$parts; do					\
+ 	  rm -f $(DESTDIR)$(inst_libdir)/$$file;		\