From 1b22642f292f8a284c0fd51be31379879edf199e Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Mon, 7 Mar 2005 12:41:16 +0000
Subject: [PATCH] binutils & gcc patches from uclibc buildroot

SVN-Revision: 331
---
 .../2.14.90.0.6/002-max-pagesize.patch        |  12 -
 .../binutils/2.14.90.0.6/210-cflags.patch     |  32 -
 .../2.14.90.0.7/002-max-pagesize.patch        |  12 -
 .../binutils/2.14.90.0.7/210-cflags.patch     |  32 -
 .../2.14.90.0.8/002-max-pagesize.patch        |  12 -
 .../binutils/2.15.90.0.3/210-cflags.patch     |  32 -
 .../2.15.94.0.2.2/100-uclibc-conf.patch       | 749 ++++++++++++++++++
 .../300-001_ld_makefile_patch.patch           |  52 ++
 .../300-006_better_file_error.patch           |  43 +
 .../300-012_check_ldrunpath_length.patch      |  47 ++
 ...00-120_mips_xgot_multigot_workaround.patch |  39 +
 .../702-binutils-skip-comments.patch          | 101 +++
 .../binutils/2.15/002-max-pagesize.patch      |  12 -
 openwrt/toolchain/binutils/Config.in          |   3 +
 openwrt/toolchain/binutils/binutils.mk        |   1 +
 .../gcc/3.3.5/820-no-mips-empic-relocs.patch  |  59 ++
 .../gcc/3.4.0/820-no-mips-empic-relocs.patch  |  59 ++
 17 files changed, 1153 insertions(+), 144 deletions(-)
 delete mode 100644 openwrt/toolchain/binutils/2.14.90.0.6/002-max-pagesize.patch
 delete mode 100644 openwrt/toolchain/binutils/2.14.90.0.6/210-cflags.patch
 delete mode 100644 openwrt/toolchain/binutils/2.14.90.0.7/002-max-pagesize.patch
 delete mode 100644 openwrt/toolchain/binutils/2.14.90.0.7/210-cflags.patch
 delete mode 100644 openwrt/toolchain/binutils/2.14.90.0.8/002-max-pagesize.patch
 delete mode 100644 openwrt/toolchain/binutils/2.15.90.0.3/210-cflags.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.2.2/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.2.2/300-001_ld_makefile_patch.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.2.2/300-006_better_file_error.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.2.2/300-012_check_ldrunpath_length.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.2.2/300-120_mips_xgot_multigot_workaround.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.2.2/702-binutils-skip-comments.patch
 delete mode 100644 openwrt/toolchain/binutils/2.15/002-max-pagesize.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.5/820-no-mips-empic-relocs.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.0/820-no-mips-empic-relocs.patch

diff --git a/openwrt/toolchain/binutils/2.14.90.0.6/002-max-pagesize.patch b/openwrt/toolchain/binutils/2.14.90.0.6/002-max-pagesize.patch
deleted file mode 100644
index a8ae110e86..0000000000
--- a/openwrt/toolchain/binutils/2.14.90.0.6/002-max-pagesize.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -urN binutils-2.14.90.0.8.test/bfd/elf32-mips.c binutils-2.14.90.0.8/bfd/elf32-mips.c
---- binutils-2.14.90.0.8.test/bfd/elf32-mips.c	2004-01-14 22:07:43.000000000 +0100
-+++ binutils-2.14.90.0.8/bfd/elf32-mips.c	2005-03-03 23:44:00.000000000 +0100
-@@ -1611,7 +1611,7 @@
- 
- /* The SVR4 MIPS ABI says that this should be 0x10000, and Linux uses
-    page sizes of up to that limit, so we need to respect it.  */
--#define ELF_MAXPAGESIZE			0x10000
-+#define ELF_MAXPAGESIZE			0x1000
- #define elf32_bed			elf32_tradbed
- 
- /* Include the target file again for this target.  */
diff --git a/openwrt/toolchain/binutils/2.14.90.0.6/210-cflags.patch b/openwrt/toolchain/binutils/2.14.90.0.6/210-cflags.patch
deleted file mode 100644
index dc67d3c4e3..0000000000
--- a/openwrt/toolchain/binutils/2.14.90.0.6/210-cflags.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.am binutils-2.14.90.0.6.new/bfd/doc/Makefile.am
---- binutils-2.14.90.0.6/bfd/doc/Makefile.am	2003-07-23 10:08:09.000000000 -0500
-+++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.am	2004-03-01 16:05:16.000000000 -0600
-@@ -55,10 +55,10 @@
- MKDOC = chew$(EXEEXT_FOR_BUILD)
- 
- $(MKDOC): chew.o
--	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
-+	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
- 
- chew.o: chew.c
--	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
-+	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
- 
- protos: libbfd.h libcoff.h bfd.h
- 
-diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.in binutils-2.14.90.0.6.new/bfd/doc/Makefile.in
---- binutils-2.14.90.0.6/bfd/doc/Makefile.in	2003-07-23 10:08:09.000000000 -0500
-+++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.in	2004-03-01 16:05:03.000000000 -0600
-@@ -469,10 +469,10 @@
- 
- 
- $(MKDOC): chew.o
--	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
-+	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
- 
- chew.o: chew.c
--	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
-+	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
- 
- protos: libbfd.h libcoff.h bfd.h
- 
diff --git a/openwrt/toolchain/binutils/2.14.90.0.7/002-max-pagesize.patch b/openwrt/toolchain/binutils/2.14.90.0.7/002-max-pagesize.patch
deleted file mode 100644
index a8ae110e86..0000000000
--- a/openwrt/toolchain/binutils/2.14.90.0.7/002-max-pagesize.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -urN binutils-2.14.90.0.8.test/bfd/elf32-mips.c binutils-2.14.90.0.8/bfd/elf32-mips.c
---- binutils-2.14.90.0.8.test/bfd/elf32-mips.c	2004-01-14 22:07:43.000000000 +0100
-+++ binutils-2.14.90.0.8/bfd/elf32-mips.c	2005-03-03 23:44:00.000000000 +0100
-@@ -1611,7 +1611,7 @@
- 
- /* The SVR4 MIPS ABI says that this should be 0x10000, and Linux uses
-    page sizes of up to that limit, so we need to respect it.  */
--#define ELF_MAXPAGESIZE			0x10000
-+#define ELF_MAXPAGESIZE			0x1000
- #define elf32_bed			elf32_tradbed
- 
- /* Include the target file again for this target.  */
diff --git a/openwrt/toolchain/binutils/2.14.90.0.7/210-cflags.patch b/openwrt/toolchain/binutils/2.14.90.0.7/210-cflags.patch
deleted file mode 100644
index dc67d3c4e3..0000000000
--- a/openwrt/toolchain/binutils/2.14.90.0.7/210-cflags.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.am binutils-2.14.90.0.6.new/bfd/doc/Makefile.am
---- binutils-2.14.90.0.6/bfd/doc/Makefile.am	2003-07-23 10:08:09.000000000 -0500
-+++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.am	2004-03-01 16:05:16.000000000 -0600
-@@ -55,10 +55,10 @@
- MKDOC = chew$(EXEEXT_FOR_BUILD)
- 
- $(MKDOC): chew.o
--	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
-+	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
- 
- chew.o: chew.c
--	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
-+	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
- 
- protos: libbfd.h libcoff.h bfd.h
- 
-diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.in binutils-2.14.90.0.6.new/bfd/doc/Makefile.in
---- binutils-2.14.90.0.6/bfd/doc/Makefile.in	2003-07-23 10:08:09.000000000 -0500
-+++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.in	2004-03-01 16:05:03.000000000 -0600
-@@ -469,10 +469,10 @@
- 
- 
- $(MKDOC): chew.o
--	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
-+	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
- 
- chew.o: chew.c
--	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
-+	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
- 
- protos: libbfd.h libcoff.h bfd.h
- 
diff --git a/openwrt/toolchain/binutils/2.14.90.0.8/002-max-pagesize.patch b/openwrt/toolchain/binutils/2.14.90.0.8/002-max-pagesize.patch
deleted file mode 100644
index a8ae110e86..0000000000
--- a/openwrt/toolchain/binutils/2.14.90.0.8/002-max-pagesize.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -urN binutils-2.14.90.0.8.test/bfd/elf32-mips.c binutils-2.14.90.0.8/bfd/elf32-mips.c
---- binutils-2.14.90.0.8.test/bfd/elf32-mips.c	2004-01-14 22:07:43.000000000 +0100
-+++ binutils-2.14.90.0.8/bfd/elf32-mips.c	2005-03-03 23:44:00.000000000 +0100
-@@ -1611,7 +1611,7 @@
- 
- /* The SVR4 MIPS ABI says that this should be 0x10000, and Linux uses
-    page sizes of up to that limit, so we need to respect it.  */
--#define ELF_MAXPAGESIZE			0x10000
-+#define ELF_MAXPAGESIZE			0x1000
- #define elf32_bed			elf32_tradbed
- 
- /* Include the target file again for this target.  */
diff --git a/openwrt/toolchain/binutils/2.15.90.0.3/210-cflags.patch b/openwrt/toolchain/binutils/2.15.90.0.3/210-cflags.patch
deleted file mode 100644
index 29bb5c18db..0000000000
--- a/openwrt/toolchain/binutils/2.15.90.0.3/210-cflags.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.am binutils-2.14.90.0.6.new/bfd/doc/Makefile.am
---- binutils-2.14.90.0.6/bfd/doc/Makefile.am	2003-07-23 10:08:09.000000000 -0500
-+++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.am	2004-03-01 16:05:16.000000000 -0600
-@@ -55,10 +55,10 @@
- MKDOC = chew$(EXEEXT_FOR_BUILD)
- 
- $(MKDOC): chew.o
--	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
-+	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
- 
- chew.o: chew.c
--	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
-+	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
- 
- protos: libbfd.h libcoff.h bfd.h
- 
-diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.in binutils-2.14.90.0.6.new/bfd/doc/Makefile.in
---- binutils-2.14.90.0.6/bfd/doc/Makefile.in	2003-07-23 10:08:09.000000000 -0500
-+++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.in	2004-03-01 16:05:03.000000000 -0600
-@@ -472,10 +472,10 @@
- 
- 
- $(MKDOC): chew.o
--	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
-+	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
- 
- chew.o: chew.c
--	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
-+	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
- 
- protos: libbfd.h libcoff.h bfd.h
- 
diff --git a/openwrt/toolchain/binutils/2.15.94.0.2.2/100-uclibc-conf.patch b/openwrt/toolchain/binutils/2.15.94.0.2.2/100-uclibc-conf.patch
new file mode 100644
index 0000000000..dc21386f42
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.2.2/100-uclibc-conf.patch
@@ -0,0 +1,749 @@
+diff -ur binutils-2.15.94.0.2.orig/bfd/config.bfd binutils-2.15.94.0.2/bfd/config.bfd
+--- binutils-2.15.94.0.2.orig/bfd/config.bfd	2004-12-22 15:00:57.219024360 -0500
++++ binutils-2.15.94.0.2/bfd/config.bfd	2004-12-22 15:01:18.982715776 -0500
+@@ -140,7 +140,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -150,7 +150,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-linux-uclibc* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -227,7 +227,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -235,8 +235,8 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
+-  arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks | \
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | \
++  arm*-*-conix* | arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks | \
+   arm*-*-eabi* )
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+@@ -381,7 +381,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -392,7 +392,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -525,7 +525,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -539,7 +539,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -715,7 +715,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -1001,7 +1001,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -1038,8 +1039,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1209,7 +1210,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1256,7 +1257,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+@@ -1325,7 +1326,7 @@
+     targ_underscore=yes
+     ;;
+ 
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_vax_vec
+     ;;
+ 
+diff -ur binutils-2.15.94.0.2.orig/bfd/configure binutils-2.15.94.0.2/bfd/configure
+--- binutils-2.15.94.0.2.orig/bfd/configure	2004-12-22 15:00:57.221024056 -0500
++++ binutils-2.15.94.0.2/bfd/configure	2004-12-22 15:01:18.996713648 -0500
+@@ -3583,6 +3583,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -9914,7 +9919,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -9978,7 +9983,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -10016,7 +10021,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -10150,7 +10155,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -ur binutils-2.15.94.0.2.orig/bfd/configure.in binutils-2.15.94.0.2/bfd/configure.in
+--- binutils-2.15.94.0.2.orig/bfd/configure.in	2004-12-22 15:00:57.223023752 -0500
++++ binutils-2.15.94.0.2/bfd/configure.in	2004-12-22 15:01:18.998713344 -0500
+@@ -163,7 +163,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -248,7 +248,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -289,7 +289,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -375,7 +375,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -ur binutils-2.15.94.0.2.orig/binutils/configure binutils-2.15.94.0.2/binutils/configure
+--- binutils-2.15.94.0.2.orig/binutils/configure	2004-12-22 15:00:57.351004296 -0500
++++ binutils-2.15.94.0.2/binutils/configure	2004-12-22 15:01:19.002712736 -0500
+@@ -1575,6 +1575,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -ur binutils-2.15.94.0.2.orig/configure binutils-2.15.94.0.2/configure
+--- binutils-2.15.94.0.2.orig/configure	2004-12-22 15:00:57.321008856 -0500
++++ binutils-2.15.94.0.2/configure	2004-12-22 15:01:19.007711976 -0500
+@@ -1352,6 +1352,18 @@
+   i[3456789]86-*-coff | i[3456789]86-*-elf)
+     noconfigdirs="$noconfigdirs ${libgcj}"
+     ;;
++  i[3456789]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -ur binutils-2.15.94.0.2.orig/configure.in binutils-2.15.94.0.2/configure.in
+--- binutils-2.15.94.0.2.orig/configure.in	2004-12-22 15:00:57.321008856 -0500
++++ binutils-2.15.94.0.2/configure.in	2004-12-22 15:01:19.010711520 -0500
+@@ -561,6 +561,18 @@
+   i[[3456789]]86-*-coff | i[[3456789]]86-*-elf)
+     noconfigdirs="$noconfigdirs ${libgcj}"
+     ;;
++  i[[3456789]]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -ur binutils-2.15.94.0.2.orig/gas/configure binutils-2.15.94.0.2/gas/configure
+--- binutils-2.15.94.0.2.orig/gas/configure	2004-12-22 15:00:57.461987424 -0500
++++ binutils-2.15.94.0.2/gas/configure	2004-12-22 15:01:19.019710152 -0500
+@@ -3420,6 +3420,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -4256,6 +4261,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -4272,6 +4278,7 @@
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnueabi*)		fmt=elf  em=armlinuxeabi ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -4285,6 +4292,7 @@
+ 
+       cris-*-linux-gnu* | crisv32-*-linux-gnu*)
+ 					fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-* | crisv32-*-*)		fmt=multi bfd_gas=yes ;;
+ 
+       crx-*-elf*)	    		fmt=elf ;;
+@@ -4344,7 +4352,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -4404,6 +4414,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -4431,6 +4442,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -4505,6 +4517,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -4532,7 +4545,9 @@
+       ppc-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-tpf*)			fmt=elf ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+@@ -4568,6 +4583,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -ur binutils-2.15.94.0.2.orig/gas/configure.in binutils-2.15.94.0.2/gas/configure.in
+--- binutils-2.15.94.0.2.orig/gas/configure.in	2004-12-22 15:00:57.461987424 -0500
++++ binutils-2.15.94.0.2/gas/configure.in	2004-12-22 15:01:19.022709696 -0500
+@@ -202,6 +202,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -218,6 +219,7 @@
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnueabi*)		fmt=elf  em=armlinuxeabi ;;	 
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -231,6 +233,7 @@
+ 
+       cris-*-linux-gnu* | crisv32-*-linux-gnu*)
+ 					fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-* | crisv32-*-*)		fmt=multi bfd_gas=yes ;;
+ 
+       crx-*-elf*)	    		fmt=elf ;;
+@@ -290,7 +293,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -343,6 +348,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -370,6 +376,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -441,6 +448,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -461,7 +469,9 @@
+       ppc-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-tpf*)			fmt=elf ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+@@ -493,6 +503,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -ur binutils-2.15.94.0.2.orig/gprof/configure binutils-2.15.94.0.2/gprof/configure
+--- binutils-2.15.94.0.2.orig/gprof/configure	2004-12-22 15:00:57.949913248 -0500
++++ binutils-2.15.94.0.2/gprof/configure	2004-12-22 15:01:19.030708480 -0500
+@@ -3418,6 +3418,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -ur binutils-2.15.94.0.2.orig/ld/configure binutils-2.15.94.0.2/ld/configure
+--- binutils-2.15.94.0.2.orig/ld/configure	2004-12-22 15:00:58.032900632 -0500
++++ binutils-2.15.94.0.2/ld/configure	2004-12-22 15:01:19.035707720 -0500
+@@ -1579,6 +1579,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -ur binutils-2.15.94.0.2.orig/ld/configure.tgt binutils-2.15.94.0.2/ld/configure.tgt
+--- binutils-2.15.94.0.2.orig/ld/configure.tgt	2004-12-22 15:00:58.033900480 -0500
++++ binutils-2.15.94.0.2/ld/configure.tgt	2004-12-22 15:01:19.036707568 -0500
+@@ -32,6 +32,7 @@
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu* | cris-*-linux-gnu*)
+ 			targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-* | crisv32-*-*)	targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -62,14 +63,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -121,7 +124,9 @@
+ m32r*le-*-elf*)         targ_emul=m32rlelf ;;
+ m32r*-*-elf*)           targ_emul=m32relf ;;
+ m32r*le-*-linux-gnu*)   targ_emul=m32rlelf_linux ;;
++m32r*le-*-linux-uclibc*) targ_emul=m32rlelf_linux ;;
+ m32r*-*-linux-gnu*)     targ_emul=m32relf_linux ;;
++m32r*-*-linux-uclibc*)  targ_emul=m32relf_linux ;;
+ m68hc11-*-*|m6811-*-*)	targ_emul=m68hc11elf 
+ 			targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
+ m68hc12-*-*|m6812-*-*)	targ_emul=m68hc12elf 
+@@ -132,7 +137,7 @@
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ maxq-*-coff)            targ_emul=maxqcoff;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -156,14 +161,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -263,11 +270,14 @@
+ arm-*-kaos*)		targ_emul=armelf ;;
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnueabi)	targ_emul=armelf_linux_eabi ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -371,7 +381,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -388,9 +399,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -403,6 +414,7 @@
+ 			targ_emul=vaxnbsd
+ 			targ_extra_emuls=elf32vax ;;
+ vax-*-linux-gnu*)	targ_emul=elf32vax ;;
++vax-*-linux-uclibc*)	targ_emul=elf32vax ;;
+ mips*-*-pe)		targ_emul=mipspe ;
+ 			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+ mips*-dec-ultrix*)	targ_emul=mipslit ;;
+@@ -436,16 +448,16 @@
+ mips*-*-vxworks*)	targ_emul=elf32ebmip
+ 		        targ_extra_emuls="elf32elmip" ;;
+ mips*-*-windiss)	targ_emul=elf32mipswindiss ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*)	targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*)	targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*)	targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*)	targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -468,6 +480,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -ur binutils-2.15.94.0.2.orig/ld/emultempl/elf32.em binutils-2.15.94.0.2/ld/emultempl/elf32.em
+--- binutils-2.15.94.0.2.orig/ld/emultempl/elf32.em	2004-12-22 15:00:58.044898808 -0500
++++ binutils-2.15.94.0.2/ld/emultempl/elf32.em	2004-12-22 15:01:19.038707264 -0500
+@@ -65,7 +65,7 @@
+ 
+ if [ "x${USE_LIBPATH}" = xyes ] ; then
+   case ${target} in
+-    *-*-linux-gnu*)
++    *-*-linux-gnu* | *-*-linux-uclibc*)
+   cat >>e${EMULATION_NAME}.c <<EOF
+ #include <glob.h>
+ EOF
+@@ -337,7 +337,7 @@
+ 
+ EOF
+ case ${target} in
+-  *-*-linux-gnu*)
++  *-*-linux-gnu* | *-*-linux-uclibc*)
+     cat >>e${EMULATION_NAME}.c <<EOF
+ 	  {
+ 	    struct bfd_link_needed_list *l;
+@@ -510,7 +510,7 @@
+ 
+ EOF
+   case ${target} in
+-    *-*-linux-gnu*)
++    *-*-linux-gnu* | *-*-linux-uclibc*)
+       cat >>e${EMULATION_NAME}.c <<EOF
+ /* For a native linker, check the file /etc/ld.so.conf for directories
+    in which we may find shared libraries.  /etc/ld.so.conf is really
+@@ -894,7 +894,7 @@
+ EOF
+ if [ "x${USE_LIBPATH}" = xyes ] ; then
+   case ${target} in
+-    *-*-linux-gnu*)
++    *-*-linux-gnu* | *-*-linux-uclibc*)
+       cat >>e${EMULATION_NAME}.c <<EOF
+ 	  if (gld${EMULATION_NAME}_check_ld_so_conf (l->name, force))
+ 	    break;
+diff -ur binutils-2.15.94.0.2.orig/libiberty/configure binutils-2.15.94.0.2/libiberty/configure
+--- binutils-2.15.94.0.2.orig/libiberty/configure	2004-12-22 15:00:59.263713520 -0500
++++ binutils-2.15.94.0.2/libiberty/configure	2004-12-22 15:03:55.744884304 -0500
+@@ -3682,6 +3682,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -ur binutils-2.15.94.0.2.orig/libtool.m4 binutils-2.15.94.0.2/libtool.m4
+--- binutils-2.15.94.0.2.orig/libtool.m4	2004-12-22 15:00:57.329007640 -0500
++++ binutils-2.15.94.0.2/libtool.m4	2004-12-22 15:01:19.039707112 -0500
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -ur binutils-2.15.94.0.2.orig/ltconfig binutils-2.15.94.0.2/ltconfig
+--- binutils-2.15.94.0.2.orig/ltconfig	2004-12-22 15:00:57.330007488 -0500
++++ binutils-2.15.94.0.2/ltconfig	2004-12-22 15:01:19.041706808 -0500
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1270,6 +1271,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+diff -ur binutils-2.15.94.0.2.orig/opcodes/configure binutils-2.15.94.0.2/opcodes/configure
+--- binutils-2.15.94.0.2.orig/opcodes/configure	2004-12-22 15:00:59.334702728 -0500
++++ binutils-2.15.94.0.2/opcodes/configure	2004-12-22 15:01:19.053704984 -0500
+@@ -3587,6 +3587,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/openwrt/toolchain/binutils/2.15.94.0.2.2/300-001_ld_makefile_patch.patch b/openwrt/toolchain/binutils/2.15.94.0.2.2/300-001_ld_makefile_patch.patch
new file mode 100644
index 0000000000..b25d5b7e21
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.2.2/300-001_ld_makefile_patch.patch
@@ -0,0 +1,52 @@
+#!/bin/sh -e
+## 001_ld_makefile_patch.dpatch
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Description: correct where ld scripts are installed
+## DP: Author: Chris Chimelis <chris@debian.org>
+## DP: Upstream status: N/A
+## DP: Date: ??
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.am binutils-2.14.90.0.6/ld/Makefile.am
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.am	2003-08-21 16:28:48.000000000 +0100
++++ binutils-2.14.90.0.6/ld/Makefile.am	2003-09-10 23:12:09.000000000 +0100
+@@ -19,7 +19,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.in binutils-2.14.90.0.6/ld/Makefile.in
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.in	2003-08-21 16:28:48.000000000 +0100
++++ binutils-2.14.90.0.6/ld/Makefile.in	2003-09-10 23:12:09.000000000 +0100
+@@ -128,7 +128,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
diff --git a/openwrt/toolchain/binutils/2.15.94.0.2.2/300-006_better_file_error.patch b/openwrt/toolchain/binutils/2.15.94.0.2.2/300-006_better_file_error.patch
new file mode 100644
index 0000000000..f337611edf
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.2.2/300-006_better_file_error.patch
@@ -0,0 +1,43 @@
+#!/bin/sh -e
+## 006_better_file_error.dpatch by David Kimdon <dwhedon@gordian.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Specify which filename is causing an error if the filename is a
+## DP: directory. (#45832)
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c binutils-2.14.90.0.6/bfd/opncls.c
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c	2003-07-23 16:08:09.000000000 +0100
++++ binutils-2.14.90.0.6/bfd/opncls.c	2003-09-10 22:35:00.000000000 +0100
+@@ -150,6 +150,13 @@
+ {
+   bfd *nbfd;
+   const bfd_target *target_vec;
++  struct stat s;
++
++  if (stat (filename, &s) == 0)
++    if (S_ISDIR(s.st_mode)) {
++      bfd_set_error (bfd_error_file_not_recognized);
++      return NULL;
++    }
+ 
+   nbfd = _bfd_new_bfd ();
+   if (nbfd == NULL)
diff --git a/openwrt/toolchain/binutils/2.15.94.0.2.2/300-012_check_ldrunpath_length.patch b/openwrt/toolchain/binutils/2.15.94.0.2.2/300-012_check_ldrunpath_length.patch
new file mode 100644
index 0000000000..498651a90c
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.2.2/300-012_check_ldrunpath_length.patch
@@ -0,0 +1,47 @@
+#!/bin/sh -e
+## 012_check_ldrunpath_length.dpatch by Chris Chimelis <chris@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Only generate an RPATH entry if LD_RUN_PATH is not empty, for
+## DP: cases where -rpath isn't specified. (#151024)
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em binutils-2.15/ld/emultempl/elf32.em
+--- /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em	2004-05-21 23:12:58.000000000 +0100
++++ binutils-2.15/ld/emultempl/elf32.em	2004-05-21 23:12:59.000000000 +0100
+@@ -692,6 +692,8 @@
+ 	      && command_line.rpath == NULL)
+ 	    {
+ 	      lib_path = (const char *) getenv ("LD_RUN_PATH");
++	      if ((lib_path) && (strlen (lib_path) == 0))
++		  lib_path = NULL;
+ 	      if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
+ 						      force))
+ 		break;
+@@ -871,6 +873,8 @@
+   rpath = command_line.rpath;
+   if (rpath == NULL)
+     rpath = (const char *) getenv ("LD_RUN_PATH");
++  if ((rpath) && (strlen (rpath) == 0))
++      rpath = NULL;
+   if (! (bfd_elf_size_dynamic_sections
+ 	 (output_bfd, command_line.soname, rpath,
+ 	  command_line.filter_shlib,
diff --git a/openwrt/toolchain/binutils/2.15.94.0.2.2/300-120_mips_xgot_multigot_workaround.patch b/openwrt/toolchain/binutils/2.15.94.0.2.2/300-120_mips_xgot_multigot_workaround.patch
new file mode 100644
index 0000000000..ae2033d069
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.2.2/300-120_mips_xgot_multigot_workaround.patch
@@ -0,0 +1,39 @@
+#! /bin/sh -e
+## 120_mips_xgot_multigot_workaround.dpatch
+##
+## DP: Description: Make multigot/xgot handling mutually exclusive.
+## DP: Author: Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+## DP: Upstream status: Not submitted
+## DP: Date: 2004-09-17
+
+if [ $# -lt 1 ]; then
+    echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}"
+
+case "$1" in
+    -patch) patch -p1 ${patch_opts} < $0;;
+    -unpatch) patch -R -p1 ${patch_opts} < $0;;
+    *)
+        echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+        exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.15/bfd/elfxx-mips.c binutils-2.15/bfd/elfxx-mips.c
+--- /home/james/debian/packages/binutils/binutils-2.15/bfd/elfxx-mips.c	2004-09-23 22:41:37.156466673 +0100
++++ binutils-2.15/bfd/elfxx-mips.c	2004-09-23 22:42:15.998362861 +0100
+@@ -5883,6 +5883,8 @@
+   s->size += i * MIPS_ELF_GOT_SIZE (output_bfd);
+ 
+   if (s->size > MIPS_ELF_GOT_MAX_SIZE (output_bfd)
++      && g->global_gotno <= (MIPS_ELF_GOT_MAX_SIZE (output_bfd)
++                            / MIPS_ELF_GOT_SIZE (output_bfd))
+       && ! mips_elf_multi_got (output_bfd, info, g, s, local_gotno))
+     return FALSE;
+ 
diff --git a/openwrt/toolchain/binutils/2.15.94.0.2.2/702-binutils-skip-comments.patch b/openwrt/toolchain/binutils/2.15.94.0.2.2/702-binutils-skip-comments.patch
new file mode 100644
index 0000000000..804a17e006
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.2.2/702-binutils-skip-comments.patch
@@ -0,0 +1,101 @@
+Retrieved from http://sources.redhat.com/ml/binutils/2004-04/msg00646.html
+Fixes
+localealias.s:544: Error: junk at end of line, first unrecognized character is `,' 
+when building glibc-2.3.2 with gcc-3.4.0 and binutils-2.15.90.0.3
+
+Paths adjusted to match crosstool's patcher.
+
+Message-Id: m3n052qw2g.fsf@whitebox.m5r.de
+From: Andreas Schwab <schwab at suse dot de>
+To: Nathan Sidwell <nathan at codesourcery dot com>
+Cc: Ian Lance Taylor <ian at wasabisystems dot com>, binutils at sources dot redhat dot com
+Date: Fri, 23 Apr 2004 22:27:19 +0200
+Subject: Re: demand_empty_rest_of_line and ignore_rest_of_line
+
+Nathan Sidwell <nathan@codesourcery.com> writes:
+
+> Index: read.c
+> ===================================================================
+> RCS file: /cvs/src/src/gas/read.c,v
+> retrieving revision 1.76
+> diff -c -3 -p -r1.76 read.c
+> *** read.c	12 Mar 2004 17:48:12 -0000	1.76
+> --- read.c	18 Mar 2004 09:56:05 -0000
+> *************** read_a_source_file (char *name)
+> *** 1053,1059 ****
+>   #endif
+>   	  input_line_pointer--;
+>   	  /* Report unknown char as ignored.  */
+> ! 	  ignore_rest_of_line ();
+>   	}
+>   
+>   #ifdef md_after_pass_hook
+> --- 1053,1059 ----
+>   #endif
+>   	  input_line_pointer--;
+>   	  /* Report unknown char as ignored.  */
+> ! 	  demand_empty_rest_of_line ();
+>   	}
+>   
+>   #ifdef md_after_pass_hook
+
+This means that the unknown character is no longer ignored, despite the
+comment.  As a side effect a line starting with a line comment character
+not followed by APP in NO_APP mode now triggers an error instead of just a
+warning, breaking builds of glibc on m68k-linux.  Earlier in
+read_a_source_file where #APP is handled there is another comment that
+claims that unknown comments are ignored, when in fact they aren't (only
+the initial line comment character is skipped).
+
+Note that the presence of #APP will mess up the line counters, but
+that appears to be difficult to fix.
+
+Andreas.
+
+2004-04-23  Andreas Schwab  <schwab@suse.de>
+
+	* read.c (read_a_source_file): Ignore unknown text after line
+	comment character.  Fix misleading comment.
+
+--- binutils/gas/read.c.~1.78.~	2004-04-23 08:58:23.000000000 +0200
++++ binutils/gas/read.c	2004-04-23 21:49:01.000000000 +0200
+@@ -1,6 +1,6 @@
+ /* read.c - read a source file -
+    Copyright 1986, 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
+-   1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++   1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GAS, the GNU Assembler.
+ 
+@@ -950,10 +950,14 @@ read_a_source_file (char *name)
+ 	      unsigned int new_length;
+ 	      char *tmp_buf = 0;
+ 
+-	      bump_line_counters ();
+ 	      s = input_line_pointer;
+ 	      if (strncmp (s, "APP\n", 4))
+-		continue;	/* We ignore it */
++		{
++		  /* We ignore it */
++		  ignore_rest_of_line ();
++		  continue;
++		}
++	      bump_line_counters ();
+ 	      s += 4;
+ 
+ 	      sb_new (&sbuf);
+@@ -1052,7 +1056,7 @@ read_a_source_file (char *name)
+ 	    continue;
+ #endif
+ 	  input_line_pointer--;
+-	  /* Report unknown char as ignored.  */
++	  /* Report unknown char as error.  */
+ 	  demand_empty_rest_of_line ();
+ 	}
+ 
+
+-- 
+Andreas Schwab, SuSE Labs, schwab@suse.de
+SuSE Linux AG, Maxfeldstra&#xC3;e 5, 90409 N&#xC3;rnberg, Germany
+Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
+"And now for something completely different."
diff --git a/openwrt/toolchain/binutils/2.15/002-max-pagesize.patch b/openwrt/toolchain/binutils/2.15/002-max-pagesize.patch
deleted file mode 100644
index a8ae110e86..0000000000
--- a/openwrt/toolchain/binutils/2.15/002-max-pagesize.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -urN binutils-2.14.90.0.8.test/bfd/elf32-mips.c binutils-2.14.90.0.8/bfd/elf32-mips.c
---- binutils-2.14.90.0.8.test/bfd/elf32-mips.c	2004-01-14 22:07:43.000000000 +0100
-+++ binutils-2.14.90.0.8/bfd/elf32-mips.c	2005-03-03 23:44:00.000000000 +0100
-@@ -1611,7 +1611,7 @@
- 
- /* The SVR4 MIPS ABI says that this should be 0x10000, and Linux uses
-    page sizes of up to that limit, so we need to respect it.  */
--#define ELF_MAXPAGESIZE			0x10000
-+#define ELF_MAXPAGESIZE			0x1000
- #define elf32_bed			elf32_tradbed
- 
- /* Include the target file again for this target.  */
diff --git a/openwrt/toolchain/binutils/Config.in b/openwrt/toolchain/binutils/Config.in
index 8563080617..4b06f1aa9a 100644
--- a/openwrt/toolchain/binutils/Config.in
+++ b/openwrt/toolchain/binutils/Config.in
@@ -47,6 +47,9 @@ choice
 	config BR2_BINUTILS_VERSION_2_15_94_0_2
 		bool "binutils 2.15.94.0.2"
 
+	config BR2_BINUTILS_VERSION_2_15_94_0_2_2
+		bool "binutils 2.15.94.0.2.2"
+
 endchoice
 
 config BR2_BINUTILS_VERSION
diff --git a/openwrt/toolchain/binutils/binutils.mk b/openwrt/toolchain/binutils/binutils.mk
index c0d504d6dc..8fccbac370 100644
--- a/openwrt/toolchain/binutils/binutils.mk
+++ b/openwrt/toolchain/binutils/binutils.mk
@@ -34,6 +34,7 @@ $(BINUTILS_DIR)/.unpacked: $(DL_DIR)/$(BINUTILS_SOURCE)
 $(BINUTILS_DIR)/.patched: $(BINUTILS_DIR)/.unpacked
 	# Apply appropriate binutils patches.
 	$(SCRIPT_DIR)/patch-kernel.sh $(BINUTILS_DIR) ./$(BINUTILS_VERSION) \*.patch
+	$(SCRIPT_DIR)/patch-kernel.sh $(BINUTILS_DIR) ./all \*.patch
 	touch $(BINUTILS_DIR)/.patched
 
 $(BINUTILS_DIR1)/.configured: $(BINUTILS_DIR)/.patched
diff --git a/openwrt/toolchain/gcc/3.3.5/820-no-mips-empic-relocs.patch b/openwrt/toolchain/gcc/3.3.5/820-no-mips-empic-relocs.patch
new file mode 100644
index 0000000000..d5c4c9cb58
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.5/820-no-mips-empic-relocs.patch
@@ -0,0 +1,59 @@
+From: cgd at broadcom dot com
+To: gcc-patches at gcc dot gnu dot org
+Cc: mark at codesourcery dot com
+Date: 13 Jun 2004 22:51:30 -0700
+Subject: [trunk + 3.4-branch RFA] don't use empic relocs for mips-linuxeh
+
+This patch changes mips-linux to avoid using embedded-pic relocs for
+its eh data.  (Support for generating these for new code is removed in
+current binutils srcs.)
+
+Relating to this, previously, mips-linux and mips64-linux would use
+different representations for their EH data (even for mips64-linux o32
+abi), due to the mips64-linux n32/64 BFDs not supporting the
+embedded-pic relocs.  This was a bug.
+
+For more explanation, see the thread of the URL quoted in the comment
+in linux.h.
+
+
+Tested the same w/ sources of about a week ago for c/c++ for
+mips-linux (native) before/after.  Also verified .o compatibility
+before/after just to be sure.
+
+I'd like this approved for the branch as well, so 3.4.1 will work
+nicely w/ the next major binutils release.
+
+
+thanks,
+
+chris
+
+2004-06-13  Chris Demetriou  <cgd@broadcom.com>
+
+	* config/mips/linux.h (ASM_PREFERRED_EH_DATA_FORMAT): Redefine
+	to return DW_EH_PE_absptr.
+
+Index: config/mips/linux.h
+===================================================================
+RCS file: /cvs/gcc/gcc/gcc/config/mips/linux.h,v
+retrieving revision 1.77
+diff -u -p -r1.77 linux.h
+--- gcc/gcc/config/mips/linux.h	19 Feb 2004 22:07:51 -0000	1.77
++++ gcc/gcc/config/mips/linux.h	14 Jun 2004 05:49:51 -0000
+@@ -170,10 +170,11 @@ Boston, MA 02111-1307, USA.  */
+ #undef FUNCTION_NAME_ALREADY_DECLARED
+ #define FUNCTION_NAME_ALREADY_DECLARED 1
+ 
+-#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL)       		\
+-  (flag_pic								\
+-    ? ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4\
+-   : DW_EH_PE_absptr)
++/* If possible, we should attempt to use GP-relative relocs for this
++   (see <a  href="http://sources.redhat.com/ml/binutils/2004-05/msg00227.html">http://sources.redhat.com/ml/binutils/2004-05/msg00227.html</a>).
++   However, until that is implement, this just uses standard, absolute
++   references.  */
++#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL)	DW_EH_PE_absptr
+ 
+ /* The glibc _mcount stub will save $v0 for us.  Don't mess with saving
+    it, since ASM_OUTPUT_REG_PUSH/ASM_OUTPUT_REG_POP do not work in the
diff --git a/openwrt/toolchain/gcc/3.4.0/820-no-mips-empic-relocs.patch b/openwrt/toolchain/gcc/3.4.0/820-no-mips-empic-relocs.patch
new file mode 100644
index 0000000000..d5c4c9cb58
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.0/820-no-mips-empic-relocs.patch
@@ -0,0 +1,59 @@
+From: cgd at broadcom dot com
+To: gcc-patches at gcc dot gnu dot org
+Cc: mark at codesourcery dot com
+Date: 13 Jun 2004 22:51:30 -0700
+Subject: [trunk + 3.4-branch RFA] don't use empic relocs for mips-linuxeh
+
+This patch changes mips-linux to avoid using embedded-pic relocs for
+its eh data.  (Support for generating these for new code is removed in
+current binutils srcs.)
+
+Relating to this, previously, mips-linux and mips64-linux would use
+different representations for their EH data (even for mips64-linux o32
+abi), due to the mips64-linux n32/64 BFDs not supporting the
+embedded-pic relocs.  This was a bug.
+
+For more explanation, see the thread of the URL quoted in the comment
+in linux.h.
+
+
+Tested the same w/ sources of about a week ago for c/c++ for
+mips-linux (native) before/after.  Also verified .o compatibility
+before/after just to be sure.
+
+I'd like this approved for the branch as well, so 3.4.1 will work
+nicely w/ the next major binutils release.
+
+
+thanks,
+
+chris
+
+2004-06-13  Chris Demetriou  <cgd@broadcom.com>
+
+	* config/mips/linux.h (ASM_PREFERRED_EH_DATA_FORMAT): Redefine
+	to return DW_EH_PE_absptr.
+
+Index: config/mips/linux.h
+===================================================================
+RCS file: /cvs/gcc/gcc/gcc/config/mips/linux.h,v
+retrieving revision 1.77
+diff -u -p -r1.77 linux.h
+--- gcc/gcc/config/mips/linux.h	19 Feb 2004 22:07:51 -0000	1.77
++++ gcc/gcc/config/mips/linux.h	14 Jun 2004 05:49:51 -0000
+@@ -170,10 +170,11 @@ Boston, MA 02111-1307, USA.  */
+ #undef FUNCTION_NAME_ALREADY_DECLARED
+ #define FUNCTION_NAME_ALREADY_DECLARED 1
+ 
+-#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL)       		\
+-  (flag_pic								\
+-    ? ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4\
+-   : DW_EH_PE_absptr)
++/* If possible, we should attempt to use GP-relative relocs for this
++   (see <a  href="http://sources.redhat.com/ml/binutils/2004-05/msg00227.html">http://sources.redhat.com/ml/binutils/2004-05/msg00227.html</a>).
++   However, until that is implement, this just uses standard, absolute
++   references.  */
++#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL)	DW_EH_PE_absptr
+ 
+ /* The glibc _mcount stub will save $v0 for us.  Don't mess with saving
+    it, since ASM_OUTPUT_REG_PUSH/ASM_OUTPUT_REG_POP do not work in the
-- 
GitLab