aboutsummaryrefslogtreecommitdiffstats
path: root/meta/packages/binutils
diff options
context:
space:
mode:
Diffstat (limited to 'meta/packages/binutils')
-rw-r--r--meta/packages/binutils/binutils-2.15.94.0.1/binutils-100_cflags_for_build.patch91
-rw-r--r--meta/packages/binutils/binutils-2.15.94.0.1/binutils-2.15.90.0.3-uclibc-200-build_modules.patch33
-rw-r--r--meta/packages/binutils/binutils-2.15.94.0.1/binutils-2.15.90.0.3-uclibc-210-cflags.patch30
-rw-r--r--meta/packages/binutils/binutils-2.15.94.0.1/binutils-2.15.91.0.1-uclibc-100-conf.patch604
-rw-r--r--meta/packages/binutils/binutils-2.16.91.0.7/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch31
-rw-r--r--meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-100-uclibc-conf.patch139
-rw-r--r--meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-300-001_ld_makefile_patch.patch50
-rw-r--r--meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-300-006_better_file_error.patch43
-rw-r--r--meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-300-012_check_ldrunpath_length.patch47
-rw-r--r--meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-400-mips-ELF_MAXPAGESIZE-4K.patch26
-rw-r--r--meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-702-binutils-skip-comments.patch93
-rw-r--r--meta/packages/binutils/binutils-2.16/binutils-100_cflags_for_build.patch28
-rw-r--r--meta/packages/binutils/binutils-2.16/binutils-2.16-linux-uclibc.patch700
-rw-r--r--meta/packages/binutils/binutils-2.16/binutils-2.16-objcopy-rename-errorcode.patch29
-rw-r--r--meta/packages/binutils/binutils-2.16/binutils-2.16-thumb-glue.patch76
-rw-r--r--meta/packages/binutils/binutils-2.16/binutils-2.16-thumb-trampoline.patch292
-rw-r--r--meta/packages/binutils/binutils-cross.inc30
-rw-r--r--meta/packages/binutils/binutils-cross_2.15.94.0.1.bb32
-rw-r--r--meta/packages/binutils/binutils-cross_2.16.91.0.7.bb32
-rw-r--r--meta/packages/binutils/binutils-cross_2.16.bb3
-rw-r--r--meta/packages/binutils/binutils.inc117
-rw-r--r--meta/packages/binutils/binutils_2.15.94.0.1.bb124
-rw-r--r--meta/packages/binutils/binutils_2.16.91.0.7.bb123
-rw-r--r--meta/packages/binutils/binutils_2.16.bb26
-rw-r--r--meta/packages/binutils/files/better_file_error.patch17
-rw-r--r--meta/packages/binutils/files/ld_makefile.patch22
-rw-r--r--meta/packages/binutils/files/objdump_fix.patch134
-rw-r--r--meta/packages/binutils/files/plt32trunc.patch24
-rw-r--r--meta/packages/binutils/files/signed_char_fix.patch12
29 files changed, 3008 insertions, 0 deletions
diff --git a/meta/packages/binutils/binutils-2.15.94.0.1/binutils-100_cflags_for_build.patch b/meta/packages/binutils/binutils-2.15.94.0.1/binutils-100_cflags_for_build.patch
new file mode 100644
index 0000000000..468808bf59
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.15.94.0.1/binutils-100_cflags_for_build.patch
@@ -0,0 +1,91 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- src/bfd/doc/Makefile.am~binutils-100_cflags_for_build.patch
++++ src/bfd/doc/Makefile.am
+@@ -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_FOR_BUILD)
+
+ 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
+
+--- src/binutils/Makefile.am~binutils-100_cflags_for_build.patch
++++ src/binutils/Makefile.am
+@@ -219,20 +219,20 @@
+ ./sysinfo$(EXEEXT_FOR_BUILD) -d <$(srcdir)/sysroff.info >sysroff.h
+
+ sysinfo$(EXEEXT_FOR_BUILD): sysinfo.o syslex.o
+- $(CC_FOR_BUILD) $(CFLAGS) $(LDFLAGS) -o $@ sysinfo.o syslex.o
++ $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ sysinfo.o syslex.o
+
+ syslex.o: syslex.c sysinfo.h
+ if [ -r syslex.c ]; then \
+- $(CC_FOR_BUILD) -c -I. $(CFLAGS) syslex.c ; \
++ $(CC_FOR_BUILD) -c -I. $(CFLAGS_FOR_BUILD) syslex.c ; \
+ else \
+- $(CC_FOR_BUILD) -c -I. -I$(srcdir) $(CFLAGS) $(srcdir)/syslex.c ;\
++ $(CC_FOR_BUILD) -c -I. -I$(srcdir) $(CFLAGS_FOR_BUILD) $(srcdir)/syslex.c ;\
+ fi
+
+ sysinfo.o: sysinfo.c
+ if [ -r sysinfo.c ]; then \
+- $(CC_FOR_BUILD) -c -I. $(CFLAGS) sysinfo.c ; \
++ $(CC_FOR_BUILD) -c -I. $(CFLAGS_FOR_BUILD) sysinfo.c ; \
+ else \
+- $(CC_FOR_BUILD) -c -I. $(CFLAGS) $(srcdir)/sysinfo.c ; \
++ $(CC_FOR_BUILD) -c -I. $(CFLAGS_FOR_BUILD) $(srcdir)/sysinfo.c ; \
+ fi
+
+ # We need these for parallel make.
+--- src/bfd/doc/Makefile.in~binutils-100_cflags_for_build.patch
++++ src/bfd/doc/Makefile.in
+@@ -470,10 +470,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_FOR_BUILD)
+
+ 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
+
+--- src/binutils/Makefile.in~binutils-100_cflags_for_build.patch
++++ src/binutils/Makefile.in
+@@ -978,20 +978,20 @@
+ ./sysinfo$(EXEEXT_FOR_BUILD) -d <$(srcdir)/sysroff.info >sysroff.h
+
+ sysinfo$(EXEEXT_FOR_BUILD): sysinfo.o syslex.o
+- $(CC_FOR_BUILD) $(CFLAGS) $(LDFLAGS) -o $@ sysinfo.o syslex.o
++ $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ sysinfo.o syslex.o
+
+ syslex.o: syslex.c sysinfo.h
+ if [ -r syslex.c ]; then \
+- $(CC_FOR_BUILD) -c -I. $(CFLAGS) syslex.c ; \
++ $(CC_FOR_BUILD) -c -I. $(CFLAGS_FOR_BUILD) syslex.c ; \
+ else \
+- $(CC_FOR_BUILD) -c -I. -I$(srcdir) $(CFLAGS) $(srcdir)/syslex.c ;\
++ $(CC_FOR_BUILD) -c -I. -I$(srcdir) $(CFLAGS_FOR_BUILD) $(srcdir)/syslex.c ;\
+ fi
+
+ sysinfo.o: sysinfo.c
+ if [ -r sysinfo.c ]; then \
+- $(CC_FOR_BUILD) -c -I. $(CFLAGS) sysinfo.c ; \
++ $(CC_FOR_BUILD) -c -I. $(CFLAGS_FOR_BUILD) sysinfo.c ; \
+ else \
+- $(CC_FOR_BUILD) -c -I. $(CFLAGS) $(srcdir)/sysinfo.c ; \
++ $(CC_FOR_BUILD) -c -I. $(CFLAGS_FOR_BUILD) $(srcdir)/sysinfo.c ; \
+ fi
+
+ # We need these for parallel make.
diff --git a/meta/packages/binutils/binutils-2.15.94.0.1/binutils-2.15.90.0.3-uclibc-200-build_modules.patch b/meta/packages/binutils/binutils-2.15.94.0.1/binutils-2.15.90.0.3-uclibc-200-build_modules.patch
new file mode 100644
index 0000000000..3560d2ca36
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.15.94.0.1/binutils-2.15.90.0.3-uclibc-200-build_modules.patch
@@ -0,0 +1,33 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- src/configure~binutils-2.15.90.0.3-uclibc-200-build_modules.patch
++++ src/configure
+@@ -940,6 +940,11 @@
+ build_configdirs=`echo ${build_libs} ${build_tools}`
+ fi
+
++case "$target" in
++ *-*-*-uclibc*)
++ build_modules=
++ ;;
++esac
+ ################################################################################
+
+ srcname="gnu development package"
+--- src/configure.in~binutils-2.15.90.0.3-uclibc-200-build_modules.patch
++++ src/configure.in
+@@ -189,6 +189,11 @@
+ build_configdirs=`echo ${build_libs} ${build_tools}`
+ fi
+
++case "$target" in
++ *-*-*-uclibc*)
++ build_modules=
++ ;;
++esac
+ ################################################################################
+
+ srcname="gnu development package"
diff --git a/meta/packages/binutils/binutils-2.15.94.0.1/binutils-2.15.90.0.3-uclibc-210-cflags.patch b/meta/packages/binutils/binutils-2.15.94.0.1/binutils-2.15.90.0.3-uclibc-210-cflags.patch
new file mode 100644
index 0000000000..40a71c602a
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.15.94.0.1/binutils-2.15.90.0.3-uclibc-210-cflags.patch
@@ -0,0 +1,30 @@
+--- binutils-2.15.90.0.3/bfd/doc/Makefile.am.cflags 2004-01-14 16:07:44.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/doc/Makefile.am 2004-04-22 22:06:35.000000000 -0400
+@@ -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
+
+--- binutils-2.15.90.0.3/bfd/doc/Makefile.in.cflags 2004-04-12 15:56:34.000000000 -0400
++++ binutils-2.15.90.0.3/bfd/doc/Makefile.in 2004-04-22 22:06:35.000000000 -0400
+@@ -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/meta/packages/binutils/binutils-2.15.94.0.1/binutils-2.15.91.0.1-uclibc-100-conf.patch b/meta/packages/binutils/binutils-2.15.94.0.1/binutils-2.15.91.0.1-uclibc-100-conf.patch
new file mode 100644
index 0000000000..d650cdbc91
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.15.94.0.1/binutils-2.15.91.0.1-uclibc-100-conf.patch
@@ -0,0 +1,604 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- binutils-2.15.94.0.1/bfd/config.bfd~binutils-2.15.91.0.1-uclibc-100-conf
++++ binutils-2.15.94.0.1/bfd/config.bfd
+@@ -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*-*-elf* | ia64*-*-linux-uclibc* | 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
+ ;;
+@@ -237,7 +237,7 @@
+ ;;
+ arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
+ arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks | \
+- arm*-*-eabi* )
++ arm*-*-eabi* | arm*-*-linux-uclibc* )
+ 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"
+@@ -1206,7 +1207,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"
+ ;;
+@@ -1253,7 +1254,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"
+ ;;
+--- binutils-2.15.94.0.1/bfd/configure~binutils-2.15.91.0.1-uclibc-100-conf
++++ binutils-2.15.94.0.1/bfd/configure
+@@ -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"'
+ ;;
+--- binutils-2.15.94.0.1/bfd/configure.in~binutils-2.15.91.0.1-uclibc-100-conf
++++ binutils-2.15.94.0.1/bfd/configure.in
+@@ -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"'
+ ;;
+--- binutils-2.15.94.0.1/gas/configure~binutils-2.15.91.0.1-uclibc-100-conf
++++ binutils-2.15.94.0.1/gas/configure
+@@ -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 ;;
+
+@@ -4271,6 +4277,7 @@
+ arm*-*-conix*) fmt=elf ;;
+ arm-*-linux*aout*) fmt=aout em=linux ;;
+ 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 ;;
+@@ -4284,6 +4291,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 ;;
+@@ -4343,7 +4351,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 ;;
+@@ -4403,6 +4413,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 ;;
+
+@@ -4430,6 +4441,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 ;;
+@@ -4504,7 +4516,7 @@
+ ppc-*-beos*) fmt=coff ;;
+ ppc-*-*n*bsd* | ppc-*-elf*) fmt=elf ;;
+ ppc-*-eabi* | ppc-*-sysv4*) fmt=elf ;;
+- ppc-*-linux-gnu*) fmt=elf em=linux
++ ppc-*-linux-uclibc* | ppc-*-linux-gnu*) fmt=elf em=linux
+ case "$endian" in
+ big) ;;
+ *) { { echo "$as_me:$LINENO: error: GNU/Linux must be configured big endian" >&5
+@@ -4531,7 +4543,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 ;;
+
+ sh*-*-linux*) fmt=elf em=linux
+ case ${cpu} in
+@@ -4566,6 +4580,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 ;;
+--- binutils-2.15.94.0.1/gas/configure.in~binutils-2.15.91.0.1-uclibc-100-conf
++++ binutils-2.15.94.0.1/gas/configure.in
+@@ -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 ;;
+
+@@ -217,6 +218,7 @@
+ arm*-*-conix*) fmt=elf ;;
+ arm-*-linux*aout*) fmt=aout em=linux ;;
+ 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 ;;
+@@ -230,6 +232,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 ;;
+@@ -289,7 +292,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 ;;
+@@ -342,6 +347,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 ;;
+
+@@ -369,6 +375,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 ;;
+@@ -440,7 +447,7 @@
+ ppc-*-beos*) fmt=coff ;;
+ ppc-*-*n*bsd* | ppc-*-elf*) fmt=elf ;;
+ ppc-*-eabi* | ppc-*-sysv4*) fmt=elf ;;
+- ppc-*-linux-gnu*) fmt=elf em=linux
++ ppc-*-linux-uclibc* | ppc-*-linux-gnu*) fmt=elf em=linux
+ case "$endian" in
+ big) ;;
+ *) AC_MSG_ERROR(GNU/Linux must be configured big endian) ;;
+@@ -460,7 +467,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 ;;
+
+ sh*-*-linux*) fmt=elf em=linux
+ case ${cpu} in
+@@ -491,6 +500,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 ;;
+--- binutils-2.15.94.0.1/ld/configure~binutils-2.15.91.0.1-uclibc-100-conf
++++ binutils-2.15.94.0.1/ld/configure
+@@ -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]+$'
+--- binutils-2.15.94.0.1/ld/configure.tgt~binutils-2.15.91.0.1-uclibc-100-conf
++++ binutils-2.15.94.0.1/ld/configure.tgt
+@@ -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
+@@ -132,7 +135,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 +159,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 +268,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 +379,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 +397,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 ;;
+@@ -436,16 +445,20 @@
+ 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 +481,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 ;;
+--- binutils-2.15.94.0.1/configure~binutils-2.15.91.0.1-uclibc-100-conf
++++ binutils-2.15.94.0.1/configure
+@@ -1341,6 +1341,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.
+--- binutils-2.15.94.0.1/configure.in~binutils-2.15.91.0.1-uclibc-100-conf
++++ binutils-2.15.94.0.1/configure.in
+@@ -563,6 +563,19 @@
+ 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"
++ build_modules=
++ # 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.
+--- binutils-2.15.94.0.1/libtool.m4~binutils-2.15.91.0.1-uclibc-100-conf
++++ binutils-2.15.94.0.1/libtool.m4
+@@ -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]+$']
+--- binutils-2.15.94.0.1/ltconfig~binutils-2.15.91.0.1-uclibc-100-conf
++++ binutils-2.15.94.0.1/ltconfig
+@@ -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 --git a/meta/packages/binutils/binutils-2.16.91.0.7/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch b/meta/packages/binutils/binutils-2.16.91.0.7/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch
new file mode 100644
index 0000000000..4461bedd4e
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.16.91.0.7/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch
@@ -0,0 +1,31 @@
+# strip (and objcopy) fail to set the error code if there is no
+# output file name and the rename of the stripped (or copied) file
+# fails, yet the command fails to do anything. This fixes both
+# objcopy and strip.
+#
+# modification by bero: Ported to 2.16.91.0.6
+#
+#Signed-off-by: John Bowler <jbowler@acm.org>
+#Signed-off-by: Bernhard Rosenkraenzer <bero@arklinux.org>
+--- binutils-2.16.91.0.6/binutils/objcopy.c.ark 2006-03-11 15:59:07.000000000 +0100
++++ binutils-2.16.91.0.6/binutils/objcopy.c 2006-03-11 15:59:45.000000000 +0100
+@@ -2593,7 +2593,8 @@
+ if (preserve_dates)
+ set_times (tmpname, &statbuf);
+ if (output_file == NULL)
+- smart_rename (tmpname, argv[i], preserve_dates);
++ if(smart_rename (tmpname, argv[i], preserve_dates))
++ hold_status = 1;
+ status = hold_status;
+ }
+ else
+@@ -3184,7 +3185,8 @@
+ {
+ if (preserve_dates)
+ set_times (tmpname, &statbuf);
+- smart_rename (tmpname, input_filename, preserve_dates);
++ if (smart_rename (tmpname, input_filename, preserve_dates))
++ status = 1;
+ }
+ else
+ unlink (tmpname);
diff --git a/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-100-uclibc-conf.patch b/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-100-uclibc-conf.patch
new file mode 100644
index 0000000000..25222e5df2
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-100-uclibc-conf.patch
@@ -0,0 +1,139 @@
+--- binutils-2.16.91.0.7/bfd/configure
++++ binutils-2.16.91.0.7/bfd/configure
+@@ -3576,7 +3576,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu*|linux-uclibc*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- binutils-2.16.91.0.7/binutils/configure
++++ binutils-2.16.91.0.7/binutils/configure
+@@ -3411,7 +3411,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu*|linux-uclibc*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- binutils-2.16.91.0.7/configure
++++ binutils-2.16.91.0.7/configure
+@@ -1270,7 +1270,7 @@
+ am33_2.0-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+- sh-*-linux*)
++ sh*-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+ sh*-*-pe|mips*-*-pe|*arm-wince-pe)
+@@ -1578,7 +1578,7 @@
+ romp-*-*)
+ noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
+ ;;
+- sh-*-* | sh64-*-*)
++ sh*-*-* | sh64-*-*)
+ case "${host}" in
+ i[3456789]86-*-vsta) ;; # don't add gprof back in
+ i[3456789]86-*-go32*) ;; # don't add gprof back in
+--- binutils-2.16.91.0.7/configure.in
++++ binutils-2.16.91.0.7/configure.in
+@@ -468,7 +468,7 @@
+ am33_2.0-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+- sh-*-linux*)
++ sh*-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+ sh*-*-pe|mips*-*-pe|*arm-wince-pe)
+@@ -776,7 +776,7 @@
+ romp-*-*)
+ noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
+ ;;
+- sh-*-* | sh64-*-*)
++ sh*-*-* | sh64-*-*)
+ case "${host}" in
+ i[[3456789]]86-*-vsta) ;; # don't add gprof back in
+ i[[3456789]]86-*-go32*) ;; # don't add gprof back in
+--- binutils-2.16.91.0.7/gas/configure
++++ binutils-2.16.91.0.7/gas/configure
+@@ -3411,7 +3411,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu*|linux-uclibc*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- binutils-2.16.91.0.7/gprof/configure
++++ binutils-2.16.91.0.7/gprof/configure
+@@ -3419,6 +3419,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]+$'
+--- binutils-2.16.91.0.7/ld/configure
++++ binutils-2.16.91.0.7/ld/configure
+@@ -3413,7 +3413,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu*|linux-uclibc*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- binutils-2.16.91.0.7/libtool.m4
++++ binutils-2.16.91.0.7/libtool.m4
+@@ -739,7 +739,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu*|linux-uclibc*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- binutils-2.16.91.0.7/ltconfig
++++ binutils-2.16.91.0.7/ltconfig
+@@ -602,6 +602,7 @@
+
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
++linux-uclibc*) ;;
+ linux-gnu*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+@@ -1247,7 +1248,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu*|linux-uclibc*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+--- binutils-2.16.91.0.7/opcodes/configure
++++ binutils-2.16.91.0.7/opcodes/configure
+@@ -3579,7 +3579,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu*|linux-uclibc*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
diff --git a/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-300-001_ld_makefile_patch.patch b/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-300-001_ld_makefile_patch.patch
new file mode 100644
index 0000000000..04a7e61e25
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-300-001_ld_makefile_patch.patch
@@ -0,0 +1,50 @@
+#!/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@
+--- binutils-2.16.91.0.1/ld/Makefile.am
++++ binutils-2.16.91.0.1/ld/Makefile.am
+@@ -20,7 +20,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@
+--- binutils-2.16.91.0.1/ld/Makefile.in
++++ binutils-2.16.91.0.1/ld/Makefile.in
+@@ -268,7 +268,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)
+ BASEDIR = $(srcdir)/..
+ BFDDIR = $(BASEDIR)/bfd
+ INCDIR = $(BASEDIR)/include
diff --git a/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-300-006_better_file_error.patch b/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-300-006_better_file_error.patch
new file mode 100644
index 0000000000..f337611edf
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-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/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-300-012_check_ldrunpath_length.patch b/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-300-012_check_ldrunpath_length.patch
new file mode 100644
index 0000000000..498651a90c
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-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/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-400-mips-ELF_MAXPAGESIZE-4K.patch b/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-400-mips-ELF_MAXPAGESIZE-4K.patch
new file mode 100644
index 0000000000..5959c718d2
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-400-mips-ELF_MAXPAGESIZE-4K.patch
@@ -0,0 +1,26 @@
+--- binutils/bfd/elf32-mips.c~
++++ binutils/bfd/elf32-mips.c
+@@ -1613,7 +1613,9 @@
+
+ /* 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 0x10000*/
++/* Use 4K to shrink the elf header. NOT for general use! */
++#define ELF_MAXPAGESIZE 0x1000
+ #define elf32_bed elf32_tradbed
+
+ /* Include the target file again for this target. */
+--- binutils/bfd/elfn32-mips.c~
++++ binutils/bfd/elfn32-mips.c
+@@ -2399,7 +2399,9 @@
+
+ /* 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 0x10000*/
++/* Use 4K to shrink the elf header. NOT for general use! */
++#define ELF_MAXPAGESIZE 0x1000
+ #define elf32_bed elf32_tradbed
+
+ /* Include the target file again for this target. */
diff --git a/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-702-binutils-skip-comments.patch b/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-702-binutils-skip-comments.patch
new file mode 100644
index 0000000000..9ef7a7c9ec
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.16.91.0.7/binutils-uclibc-702-binutils-skip-comments.patch
@@ -0,0 +1,93 @@
+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
+@@ -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/meta/packages/binutils/binutils-2.16/binutils-100_cflags_for_build.patch b/meta/packages/binutils/binutils-2.16/binutils-100_cflags_for_build.patch
new file mode 100644
index 0000000000..08e7049945
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.16/binutils-100_cflags_for_build.patch
@@ -0,0 +1,28 @@
+--- binutils-2.16/binutils/Makefile.am.old 2005-06-05 16:59:47.000000000 +0100
++++ binutils-2.16/binutils/Makefile.am 2005-06-05 17:00:39.000000000 +0100
+@@ -219,20 +219,20 @@
+ ./sysinfo$(EXEEXT_FOR_BUILD) -d <$(srcdir)/sysroff.info >sysroff.h
+
+ sysinfo$(EXEEXT_FOR_BUILD): sysinfo.o syslex.o
+- $(CC_FOR_BUILD) $(CFLAGS) $(LDFLAGS) -o $@ sysinfo.o syslex.o
++ $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ sysinfo.o syslex.o
+
+ syslex.o:
+ if [ -r syslex.c ]; then \
+- $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS) syslex.c ; \
++ $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS_FOR_BUILD) syslex.c ; \
+ else \
+- $(CC_FOR_BUILD) -c -I. -I$(srcdir) $(AM_CFLAGS) $(CFLAGS) $(srcdir)/syslex.c ;\
++ $(CC_FOR_BUILD) -c -I. -I$(srcdir) $(AM_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/syslex.c ;\
+ fi
+
+ sysinfo.o:
+ if [ -r sysinfo.c ]; then \
+- $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS) sysinfo.c ; \
++ $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS_FOR_BUILD) sysinfo.c ; \
+ else \
+- $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS) $(srcdir)/sysinfo.c ; \
++ $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/sysinfo.c ; \
+ fi
+
+ # We need these for parallel make.
diff --git a/meta/packages/binutils/binutils-2.16/binutils-2.16-linux-uclibc.patch b/meta/packages/binutils/binutils-2.16/binutils-2.16-linux-uclibc.patch
new file mode 100644
index 0000000000..2f727a5b5a
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.16/binutils-2.16-linux-uclibc.patch
@@ -0,0 +1,700 @@
+# This patch adds 'linux-uclibc' to all cases which otherwise only
+# fire for 'linux' - most of the time the 'linux-gnu*' cases. This
+# ensures that by default *-*-linux-uclibc is handled in the same way
+# as *-*-linux-gnu
+#
+--- binutils-2.16/bfd/config.bfd.orig 2005-09-06 19:58:39.153670708 -0700
++++ binutils-2.16/bfd/config.bfd 2005-09-06 20:03:14.959026045 -0700
+@@ -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,7 +235,7 @@
+ targ_defvec=bfd_elf32_littlearm_vec
+ targ_selvecs=bfd_elf32_bigarm_vec
+ ;;
+- arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
++ arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | arm*-*-conix* | \
+ arm*-*-uclinux* | arm-*-kfreebsd*-gnu | \
+ arm*-*-eabi* )
+ targ_defvec=bfd_elf32_littlearm_vec
+@@ -385,7 +385,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
+ ;;
+@@ -396,7 +396,7 @@
+ ;;
+ #endif
+
+- hppa*-*-linux-gnu*)
++ hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)
+ targ_defvec=bfd_elf32_hppa_linux_vec
+ targ_selvecs=bfd_elf32_hppa_vec
+ ;;
+@@ -529,7 +529,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
+@@ -543,7 +543,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"
+ ;;
+@@ -719,7 +719,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
+ ;;
+@@ -1005,7 +1005,7 @@
+ ;;
+ #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"
+@@ -1042,7 +1042,7 @@
+ targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+ ;;
+ powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+- powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
++ 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"
+@@ -1213,7 +1213,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"
+ ;;
+@@ -1260,7 +1260,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"
+ ;;
+@@ -1329,7 +1329,7 @@
+ targ_underscore=yes
+ ;;
+
+- vax-*-linux-gnu*)
++ vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ targ_defvec=bfd_elf32_vax_vec
+ ;;
+
+--- binutils-2.16/bfd/configure.in.orig 2005-09-06 20:25:48.848220921 -0700
++++ binutils-2.16/bfd/configure.in 2005-09-06 20:26:58.628611924 -0700
+@@ -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"'
+ ;;
+--- binutils-2.16/bfd/configure.orig 2005-09-06 20:03:14.991028059 -0700
++++ binutils-2.16/bfd/configure 2005-09-06 20:04:48.512913020 -0700
+@@ -3572,7 +3572,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu* | linux-uclibc*)
+ case $host_cpu in
+ alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* )
+ lt_cv_deplibs_check_method=pass_all ;;
+@@ -9918,7 +9918,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"'
+ ;;
+@@ -9982,7 +9982,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"'
+ ;;
+@@ -10020,7 +10020,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"'
+ ;;
+@@ -10154,7 +10154,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"'
+ ;;
+--- binutils-2.16/binutils/configure.orig 2005-09-06 20:26:58.676614945 -0700
++++ binutils-2.16/binutils/configure 2005-09-06 20:27:21.230034142 -0700
+@@ -1564,7 +1564,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu* | linux-uclibc*)
+ case $host_cpu in
+ alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* )
+ lt_cv_deplibs_check_method=pass_all ;;
+--- binutils-2.16/configure.in.orig 2005-09-06 20:31:11.872547560 -0700
++++ binutils-2.16/configure.in 2005-09-06 20:31:47.322778302 -0700
+@@ -346,7 +346,7 @@
+ ;;
+ "")
+ case "${target}" in
+- *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
++ *-*-linux*-gnu | *-*-linux*-uclibc | *-*-gnu* | *-*-k*bsd*-gnu)
+ # Enable libmudflap by default in GNU and friends.
+ ;;
+ *-*-freebsd*)
+--- binutils-2.16/configure.orig 2005-09-06 20:30:00.120032459 -0700
++++ binutils-2.16/configure 2005-09-06 20:31:11.832545043 -0700
+@@ -1142,7 +1142,7 @@
+ ;;
+ "")
+ case "${target}" in
+- *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
++ *-*-linux*-gnu | *-*-linux*-uclibc | *-*-gnu* | *-*-k*bsd*-gnu)
+ # Enable libmudflap by default in GNU and friends.
+ ;;
+ *-*-freebsd*)
+--- binutils-2.16/gas/configure.in.orig 2005-09-06 20:32:36.993903909 -0700
++++ binutils-2.16/gas/configure.in 2005-09-06 20:32:55.667078938 -0700
+@@ -161,7 +161,7 @@
+ AC_DEFINE(AIX_WEAK_SUPPORT, 1,
+ [Define if using AIX 5.2 value for C_WEAKEXT.])
+ ;;
+- ppc-*-linux-gnu*)
++ ppc-*-linux-gnu* | ppc-*-linux-uclibc*)
+ case "$endian" in
+ big) ;;
+ *) AC_MSG_ERROR(GNU/Linux must be configured big endian) ;;
+--- binutils-2.16/gas/configure.orig 2005-09-06 20:31:55.247276960 -0700
++++ binutils-2.16/gas/configure 2005-09-06 20:32:36.961901896 -0700
+@@ -3409,7 +3409,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu* | linux-uclibc*)
+ case $host_cpu in
+ alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* )
+ lt_cv_deplibs_check_method=pass_all ;;
+@@ -4462,7 +4462,7 @@
+ _ACEOF
+
+ ;;
+- ppc-*-linux-gnu*)
++ ppc-*-linux-gnu* | ppc-*-linux-uclibc*)
+ case "$endian" in
+ big) ;;
+ *) { { echo "$as_me:$LINENO: error: GNU/Linux must be configured big endian" >&5
+--- binutils-2.16/gas/configure.tgt.orig 2005-09-06 20:32:55.695080700 -0700
++++ binutils-2.16/gas/configure.tgt 2005-09-06 20:35:59.482645723 -0700
+@@ -100,7 +100,7 @@
+ alpha-*-*vms*) fmt=evax ;;
+ alpha-*-osf*) fmt=ecoff ;;
+ alpha-*-linuxecoff*) fmt=ecoff ;;
+- alpha-*-linux-gnu*) fmt=elf em=linux ;;
++ alpha-*-linux-gnu* | alpha-*-linux-uclibc*) fmt=elf em=linux ;;
+ alpha-*-netbsd*) fmt=elf em=nbsd ;;
+ alpha-*-openbsd*) fmt=elf em=obsd ;;
+
+@@ -116,7 +116,7 @@
+ arm-*-conix*) fmt=elf ;;
+ arm-*-linux*aout*) fmt=aout em=linux ;;
+ arm-*-linux-gnueabi*) fmt=elf em=armlinuxeabi ;;
+- arm-*-linux-gnu*) fmt=elf em=linux ;;
++ arm-*-linux-gnu* | 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 ;;
+@@ -128,7 +128,7 @@
+
+ avr-*-*) fmt=elf ;;
+
+- cris-*-linux-gnu* | crisv32-*-linux-gnu*)
++ cris-*-linux-gnu* | crisv32-*-linux-gnu* | cris-*-linux-uclibc* | crisv32-*-linux-uclibc*)
+ fmt=multi bfd_gas=yes em=linux ;;
+ cris-*-* | crisv32-*-*) fmt=multi bfd_gas=yes ;;
+
+@@ -192,7 +192,7 @@
+ i386-*-linux*aout*) fmt=aout em=linux ;;
+ i386-*-linux*oldld) fmt=aout em=linux ;;
+ i386-*-linux*coff*) fmt=coff em=linux ;;
+- i386-*-linux-gnu*) fmt=elf em=linux ;;
++ i386-*-linux-gnu* | i386-*-linux-uclibc*) fmt=elf em=linux ;;
+ i386-*-lynxos*) fmt=elf em=lynx bfd_gas=yes ;;
+ i386-*-sysv[45]*) fmt=elf ;;
+ i386-*-solaris*) fmt=elf ;;
+@@ -238,7 +238,7 @@
+
+ ia64-*-elf*) fmt=elf ;;
+ ia64-*-aix*) fmt=elf em=ia64aix ;;
+- ia64-*-linux-gnu*) fmt=elf em=linux ;;
++ ia64-*-linux-gnu* | ia64-*-linux-uclibc*) fmt=elf em=linux ;;
+ ia64-*-hpux*) fmt=elf em=hpux ;;
+ ia64-*-netbsd*) fmt=elf em=nbsd ;;
+
+@@ -265,7 +265,7 @@
+ m68k-*-rtems*) fmt=elf ;;
+ m68k-*-hpux*) fmt=hp300 em=hp300 ;;
+ m68k-*-linux*aout*) fmt=aout em=linux ;;
+- m68k-*-linux-gnu*) fmt=elf em=linux ;;
++ m68k-*-linux-gnu* | m68k-*-linux-uclibc*) fmt=elf em=linux ;;
+ m68k-*-uclinux*) fmt=elf ;;
+ m68k-*-gnu*) fmt=elf ;;
+ m68k-*-netbsdelf*) fmt=elf em=nbsd ;;
+@@ -332,7 +332,7 @@
+ ppc-*-beos*) fmt=coff ;;
+ ppc-*-*n*bsd* | ppc-*-elf*) fmt=elf ;;
+ ppc-*-eabi* | ppc-*-sysv4*) fmt=elf ;;
+- ppc-*-linux-gnu*) fmt=elf em=linux ;;
++ ppc-*-linux-gnu* | ppc-*-linux-uclibc*) fmt=elf em=linux ;;
+ ppc-*-solaris*) fmt=elf ;;
+ ppc-*-rtems*) fmt=elf ;;
+ ppc-*-macos*) fmt=coff em=macos ;;
+@@ -340,7 +340,7 @@
+ ppc-*-kaos*) fmt=elf ;;
+ ppc-*-lynxos*) fmt=elf em=lynx bfd_gas=yes ;;
+
+- s390-*-linux-gnu*) fmt=elf em=linux ;;
++ s390-*-linux-gnu* | s390-*-linux-uclibc*) fmt=elf em=linux ;;
+ s390-*-tpf*) fmt=elf ;;
+
+ sh*-*-linux*) fmt=elf em=linux
+@@ -369,7 +369,7 @@
+ sparc-*-aout | sparc*-*-vxworks*) fmt=aout em=sparcaout ;;
+ sparc-*-coff) fmt=coff ;;
+ sparc-*-linux*aout*) fmt=aout em=linux ;;
+- sparc-*-linux-gnu*) fmt=elf em=linux ;;
++ sparc-*-linux-gnu* | sparc-*-linux-uclibc*) fmt=elf em=linux ;;
+ sparc-fujitsu-none) fmt=aout ;;
+ sparc-*-elf) fmt=elf ;;
+ sparc-*-sysv4*) fmt=elf ;;
+@@ -398,7 +398,7 @@
+ vax-*-netbsdelf*) fmt=elf em=nbsd ;;
+ vax-*-netbsd*) fmt=aout em=nbsd ;;
+ vax-*-bsd* | vax-*-ultrix*) fmt=aout ;;
+- vax-*-linux-gnu*) fmt=elf em=linux bfd_gas=yes ;;
++ vax-*-linux-gnu* | vax-*-linux-uclibc*) fmt=elf em=linux bfd_gas=yes ;;
+
+ w65-*-*) fmt=coff ;;
+
+--- binutils-2.16/gprof/configure.orig 2005-09-06 20:36:04.850983531 -0700
++++ binutils-2.16/gprof/configure 2005-09-06 20:36:26.344336022 -0700
+@@ -3407,7 +3407,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu* | linux-uclibc*)
+ case $host_cpu in
+ alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* )
+ lt_cv_deplibs_check_method=pass_all ;;
+--- binutils-2.16/ld/configure.host.orig 2005-09-06 20:37:46.085353808 -0700
++++ binutils-2.16/ld/configure.host 2005-09-06 20:40:03.381993341 -0700
+@@ -83,7 +83,7 @@
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,ld\[^ \]\*,ld-linux,g"`
+ ;;
+
+-arm*-*-linux-gnu*)
++arm*-*-linux-gnu* | arm*-*-linux-uclibc*)
+ HOSTING_CRT0='-p '`echo "$HOSTING_CRT0" | sed -e "s,ld\[^ \]\*,ld-linux,g"`
+ ;;
+
+@@ -141,7 +141,7 @@
+ HOSTING_LIBS="$HOSTING_LIBS"' -lcygwin -L/usr/lib/w32api -luser32 -lkernel32 -ladvapi32 -lshell32 `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi`'
+ ;;
+
+-ia64-*-linux-gnu*)
++ia64-*-linux-gnu* | ia64-*-linux-uclibc*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,ld\[^ \]*\*,ld-linux-ia64,g"`
+ ;;
+
+@@ -155,11 +155,11 @@
+ HOSTING_LIBS='-L/usr/lib32 '"$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o ; else ${CC} -print-file-name=crtend.o; fi` /usr/lib32/crtn.o -init __do_global_ctors -fini __do_global_dtors'
+ ;;
+
+-mips*-*-linux-gnu*)
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld.so.1,"`
+ ;;
+
+-m68*-*-linux-gnu*)
++m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld.so.1,"`
+ ;;
+
+@@ -183,19 +183,19 @@
+ HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi`'
+ ;;
+
+-powerpc64*-*-linux-gnu*)
++powerpc64*-*-linux-gnu* | powerpc64*-*-linux-uclibc*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib64/ld64.so.1,"`
+ ;;
+
+-powerpc*-*-linux-gnu*)
++powerpc*-*-linux-gnu* | powerpc*-*-linux-uclibc*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld.so.1,"`
+ ;;
+
+-s390x-*-linux-gnu*)
++s390x-*-linux-gnu* | s390x-*-linux-uclibc*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld64.so.1,"`
+ ;;
+
+-s390-*-linux-gnu*)
++s390-*-linux-gnu* | s390-*-linux-uclibc*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld.so.1,"`
+ ;;
+
+@@ -209,15 +209,15 @@
+ HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi` `if [ -f ../gcc/crtn.o ]; then echo ../gcc/crtn.o; else ${CC} -print-file-name=crtn.o; fi`'
+ ;;
+
+-sparc-*-linux-gnu*)
++sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld-linux.so.2,"`
+ ;;
+
+-sparc64-*-linux-gnu*)
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib64/ld-linux.so.2,"`
+ ;;
+
+-x86_64-*-linux-gnu*)
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib64/ld-linux-x86-64.so.2,"`
+ ;;
+
+--- binutils-2.16/ld/configure.orig 2005-09-06 20:37:34.700637413 -0700
++++ binutils-2.16/ld/configure 2005-09-06 20:37:46.013349277 -0700
+@@ -1568,7 +1568,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu* | linux-uclibc*)
+ case $host_cpu in
+ alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* )
+ lt_cv_deplibs_check_method=pass_all ;;
+--- binutils-2.16/ld/configure.tgt.orig 2005-09-06 20:40:03.413995355 -0700
++++ binutils-2.16/ld/configure.tgt 2005-09-06 20:45:48.111685813 -0700
+@@ -30,7 +30,7 @@
+ cris-*-*aout*) targ_emul=crisaout
+ targ_extra_emuls="criself crislinux"
+ targ_extra_libpath=$targ_extra_emuls ;;
+-cris-*-linux-gnu* | cris-*-linux-gnu*)
++cris-*-linux-gnu* | cris-*-linux-gnu* | cris-*-linux-uclibc* | cris-*-linux-uclibc*)
+ targ_emul=crislinux ;;
+ cris-*-* | crisv32-*-*) targ_emul=criself
+ targ_extra_emuls="crisaout crislinux"
+@@ -62,14 +62,14 @@
+ 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
+@@ -119,8 +119,8 @@
+ ia64-*-aix*) targ_emul=elf64_aix ;;
+ m32r*le-*-elf*) targ_emul=m32rlelf ;;
+ m32r*-*-elf*) targ_emul=m32relf ;;
+-m32r*le-*-linux-gnu*) targ_emul=m32rlelf_linux ;;
+-m32r*-*-linux-gnu*) targ_emul=m32relf_linux ;;
++m32r*le-*-linux-gnu* | m32r*le-*-linux-uclibc*) targ_emul=m32rlelf_linux ;;
++m32r*-*-linux-gnu* | m32r*-*-linux-uclibc*) targ_emul=m32relf_linux ;;
+ m68hc11-*-*|m6811-*-*) targ_emul=m68hc11elf
+ targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
+ m68hc12-*-*|m6812-*-*) targ_emul=m68hc12elf
+@@ -131,7 +131,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 ;;
+@@ -155,14 +155,14 @@
+ 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/'`
+@@ -262,13 +262,14 @@
+ arm-*-kaos*) targ_emul=armelf ;;
+ arm9e-*-elf) targ_emul=armelf ;;
+ arm*b-*-linux-gnueabi) targ_emul=armelfb_linux_eabi ;;
+-arm*b-*-linux-gnu*) targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-gnu* | 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-gnu* | arm*-*-linux-uclibc*) targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*) targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm-*-vxworks) targ_emul=armelf_vxworks ;;
+ 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 ;;
++thumbb-*-linux-gnu* | thumbb-*-linux-uclibc* | thumbb-*-uclinux*) targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ strongarm-*-coff) targ_emul=armcoff ;;
+ strongarm-*-elf) targ_emul=armelf ;;
+ strongarm-*-kaos*) targ_emul=armelf ;;
+@@ -372,7 +373,7 @@
+ 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 +389,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 ;;
+@@ -402,7 +403,7 @@
+ vax-*-netbsdaout* | vax-*-netbsd*)
+ targ_emul=vaxnbsd
+ targ_extra_emuls=elf32vax ;;
+-vax-*-linux-gnu*) targ_emul=elf32vax ;;
++vax-*-linux-gnu* | 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,18 +437,18 @@
+ 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"
+ targ_extra_libpath="elf32ltsmip elf64ltsmip"
+ ;;
+-mips64*-*-linux-gnu*) targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*) targ_emul=elf32btsmipn32
+ targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ targ_extra_libpath="elf32btsmip elf64btsmip"
+ ;;
+-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 ;;
+@@ -467,7 +468,7 @@
+ alpha*-*-linuxecoff*) targ_emul=alpha targ_extra_emuls=elf64alpha
+ tdir_elf64alpha=`echo ${targ_alias} | sed -e 's/ecoff//'`
+ ;;
+-alpha*-*-linux-gnu*) targ_emul=elf64alpha targ_extra_emuls=alpha
++alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*) targ_emul=elf64alpha targ_extra_emuls=alpha
+ tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ ;;
+ alpha*-*-osf*) targ_emul=alpha ;;
+--- binutils-2.16/ld/emultempl/elf32.em.orig 2005-09-06 20:45:48.247694371 -0700
++++ binutils-2.16/ld/emultempl/elf32.em 2005-09-06 20:46:39.158898011 -0700
+@@ -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
+ #ifdef HAVE_GLOB
+ #include <glob.h>
+@@ -350,7 +350,7 @@
+
+ EOF
+ case ${target} in
+- *-*-linux-gnu*)
++ *-*-linux-gnu* | *-*-linux-uclibc*)
+ cat >>e${EMULATION_NAME}.c <<EOF
+ {
+ struct bfd_link_needed_list *l;
+@@ -522,7 +522,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
+@@ -932,7 +932,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;
+--- binutils-2.16/libtool.m4.orig 2005-09-06 20:46:55.131903129 -0700
++++ binutils-2.16/libtool.m4 2005-09-06 20:47:07.364672889 -0700
+@@ -634,7 +634,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu* | linux-uclibc*)
+ case $host_cpu in
+ alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* )
+ lt_cv_deplibs_check_method=pass_all ;;
+--- binutils-2.16/ltconfig.orig 2005-09-06 20:47:13.965088227 -0700
++++ binutils-2.16/ltconfig 2005-09-06 20:49:12.944575134 -0700
+@@ -1247,7 +1247,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu* | linux-uclibc*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+--- binutils-2.16/ltmain.sh.orig 2005-09-06 20:49:12.980577399 -0700
++++ binutils-2.16/ltmain.sh 2005-09-06 20:50:15.180491393 -0700
+@@ -2600,7 +2600,7 @@
+ versuffix="$major.$revision"
+ ;;
+
+- linux)
++ linux | linux-uclibc)
+ major=.`expr $current - $age`
+ versuffix="$major.$age.$revision"
+ ;;
+--- binutils-2.16/opcodes/configure.orig 2005-09-06 20:50:15.220493910 -0700
++++ binutils-2.16/opcodes/configure 2005-09-06 20:50:38.053930728 -0700
+@@ -3576,7 +3576,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu* | linux-uclibc*)
+ case $host_cpu in
+ alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* )
+ lt_cv_deplibs_check_method=pass_all ;;
diff --git a/meta/packages/binutils/binutils-2.16/binutils-2.16-objcopy-rename-errorcode.patch b/meta/packages/binutils/binutils-2.16/binutils-2.16-objcopy-rename-errorcode.patch
new file mode 100644
index 0000000000..e4372de88f
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.16/binutils-2.16-objcopy-rename-errorcode.patch
@@ -0,0 +1,29 @@
+# strip (and objcopy) fail to set the error code if there is no
+# output file name and the rename of the stripped (or copied) file
+# fails, yet the command fails to do anything. This fixes both
+# objcopy and strip.
+#
+#Signed-off-by: John Bowler <jbowler@acm.org>
+
+--- binutils-2.16/binutils/objcopy.c.orig 2006-01-31 11:15:38.797318519 -0800
++++ binutils-2.16/binutils/objcopy.c 2006-01-31 11:15:40.463318516 -0800
+@@ -2434,7 +2434,8 @@ strip_main (int argc, char *argv[])
+ if (preserve_dates)
+ set_times (tmpname, &statbuf);
+ if (output_file == NULL)
+- smart_rename (tmpname, argv[i], preserve_dates);
++ if (smart_rename (tmpname, argv[i], preserve_dates))
++ hold_status = 1;
+ status = hold_status;
+ }
+ else
+@@ -3013,7 +3014,8 @@ copy_main (int argc, char *argv[])
+ {
+ if (preserve_dates)
+ set_times (tmpname, &statbuf);
+- smart_rename (tmpname, input_filename, preserve_dates);
++ if (smart_rename (tmpname, input_filename, preserve_dates))
++ status = 1;
+ }
+ else
+ unlink (tmpname);
diff --git a/meta/packages/binutils/binutils-2.16/binutils-2.16-thumb-glue.patch b/meta/packages/binutils/binutils-2.16/binutils-2.16-thumb-glue.patch
new file mode 100644
index 0000000000..59d8035f7d
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.16/binutils-2.16-thumb-glue.patch
@@ -0,0 +1,76 @@
+# The ARM->Thumb glue uses an ldr of the target function address, this
+# simply doesn't work for PIC code, changed to use 4 word PIC glue
+#
+--- binutils-2.16/.pc/binutils-2.16-thumb-glue.patch/bfd/elf32-arm.c 2005-09-18 03:52:15.465165051 -0700
++++ binutils-2.16/bfd/elf32-arm.c 2005-09-18 03:52:33.546302825 -0700
+@@ -1493,19 +1493,20 @@
+ return myh;
+ }
+
+-/* ARM->Thumb glue:
++/* ARM->Thumb glue (PIC version):
+
+ .arm
+ __func_from_arm:
+ ldr r12, __func_addr
++ add r12, r12, pc @ pc is __func_addr, so r12 is func
+ bx r12
+ __func_addr:
+- .word func @ behave as if you saw a ARM_32 reloc. */
++ .word func-.+1 @ offset to actual function, low bit set */
+
+-#define ARM2THUMB_GLUE_SIZE 12
+-static const insn32 a2t1_ldr_insn = 0xe59fc000;
+-static const insn32 a2t2_bx_r12_insn = 0xe12fff1c;
+-static const insn32 a2t3_func_addr_insn = 0x00000001;
++#define ARM2THUMB_GLUE_SIZE 16
++static const insn32 a2t1_ldr_insn = 0xe59fc004;
++static const insn32 a2t2_add_r12_insn = 0xe08fc00c;
++static const insn32 a2t3_bx_r12_insn = 0xe12fff1c;
+
+ /* Thumb->ARM: Thumb->(non-interworking aware) ARM
+
+@@ -2187,6 +2188,8 @@
+
+ if ((my_offset & 0x01) == 0x01)
+ {
++ long int ret_offset;
++
+ if (sym_sec != NULL
+ && sym_sec->owner != NULL
+ && !INTERWORK_FLAG (sym_sec->owner))
+@@ -2203,12 +2206,31 @@
+ bfd_put_32 (output_bfd, (bfd_vma) a2t1_ldr_insn,
+ s->contents + my_offset);
+
+- bfd_put_32 (output_bfd, (bfd_vma) a2t2_bx_r12_insn,
++ bfd_put_32 (output_bfd, (bfd_vma) a2t2_add_r12_insn,
+ s->contents + my_offset + 4);
+
+- /* It's a thumb address. Add the low order bit. */
+- bfd_put_32 (output_bfd, val | a2t3_func_addr_insn,
++ bfd_put_32 (output_bfd, (bfd_vma) a2t3_bx_r12_insn,
+ s->contents + my_offset + 8);
++
++ /* Calculate the offset to the actual function. */
++ ret_offset =
++ /* Address of destination of the stub. */
++ ((bfd_signed_vma) val)
++ - ((bfd_signed_vma)
++ /* Offset from the start of the current section
++ to the start of the stubs. */
++ (s->output_offset
++ /* Offset of the start of this stub from the start of the stubs. */
++ + my_offset
++ /* Address of the start of the current section. */
++ + s->output_section->vma)
++ /* The word is 12 bytes into the stub. */
++ + 12
++ /* The destination is a thumb function so the bottom bit must be set. */
++ - 1);
++
++ bfd_put_32 (output_bfd, (bfd_vma) ret_offset,
++ s->contents + my_offset + 12);
+ }
+
+ BFD_ASSERT (my_offset <= globals->arm_glue_size);
diff --git a/meta/packages/binutils/binutils-2.16/binutils-2.16-thumb-trampoline.patch b/meta/packages/binutils/binutils-2.16/binutils-2.16-thumb-trampoline.patch
new file mode 100644
index 0000000000..a4f90a7254
--- /dev/null
+++ b/meta/packages/binutils/binutils-2.16/binutils-2.16-thumb-trampoline.patch
@@ -0,0 +1,292 @@
+--- binutils-2.16/.pc/binutils-2.16-thumb-trampoline.patch/bfd/elf32-arm.c 2005-05-02 12:43:06.000000000 -0700
++++ binutils-2.16/bfd/elf32-arm.c 2005-09-19 22:58:49.834931044 -0700
+@@ -24,6 +24,8 @@
+ #include "libbfd.h"
+ #include "elf-bfd.h"
+
++#define NOTE_DEBUG 0
++
+ #ifndef NUM_ELEM
+ #define NUM_ELEM(a) (sizeof (a) / (sizeof (a)[0]))
+ #endif
+@@ -1127,6 +1129,10 @@
+ used, we need to record the index into .got.plt instead of
+ recomputing it from the PLT offset. */
+ bfd_signed_vma plt_got_offset;
++
++ /* This is used to sanity check that the Thumb trampoline space
++ really was allocated. */
++ int accomodate_trampoline;
+ };
+
+ /* Traverse an arm ELF linker hash table. */
+@@ -1219,9 +1225,15 @@
+ table, string));
+ if (ret != NULL)
+ {
++#if NOTE_DEBUG
++ _bfd_error_handler(
++ _("NOTE: %x(%s): New hash entry (plt refcount %d)"),
++ ret, string, ret->root.plt.refcount);
++#endif
+ ret->relocs_copied = NULL;
+ ret->plt_thumb_refcount = 0;
+ ret->plt_got_offset = -1;
++ ret->accomodate_trampoline = 0;
+ }
+
+ return (struct bfd_hash_entry *) ret;
+@@ -1335,16 +1347,38 @@
+ eind->relocs_copied = NULL;
+ }
+
+- /* If the direct symbol already has an associated PLT entry, the
+- indirect symbol should not. If it doesn't, swap refcount information
+- from the indirect symbol. */
+- if (edir->plt_thumb_refcount == 0)
++ if (ind->root.type == bfd_link_hash_indirect)
+ {
+- edir->plt_thumb_refcount = eind->plt_thumb_refcount;
+- eind->plt_thumb_refcount = 0;
++ bfd_signed_vma tmp;
++ bfd_signed_vma lowest_valid = bed->can_refcount;
++
++ /* If the direct symbol already has an associated PLT entry, the
++ indirect symbol should not. If it doesn't, swap refcount information
++ from the indirect symbol. */
++#if NOTE_DEBUG
++ _bfd_error_handler(_("NOTE: %x(%s,%d,%d) <== %x(%s,%d,%d)"),
++ dir, dir->root.root.string, dir->plt.refcount, edir->plt_thumb_refcount,
++ ind, ind->root.root.string, ind->plt.refcount, eind->plt_thumb_refcount);
++#endif
++
++ /* Copy over the global and procedure linkage table refcount entries.
++ These may have been already set up by a check_relocs routine. This
++ code duplicates that for the plt refcount in elf.c
++ _bfd_elf_link_hash_copy_indirect */
++ tmp = dir->plt.refcount;
++ /* this obfuscated test evaluates to bed->can_refcount && plt.refcount == 0
++ * || plt.refcount < 0.
++ */
++ if (tmp < lowest_valid)
++ {
++ tmp = edir->plt_thumb_refcount;
++ edir->plt_thumb_refcount = eind->plt_thumb_refcount;
++ eind->plt_thumb_refcount = tmp;
++ BFD_ASSERT(eind->accomodate_trampoline == 0);
++ }
++ else
++ BFD_ASSERT (eind->plt_thumb_refcount == 0);
+ }
+- else
+- BFD_ASSERT (eind->plt_thumb_refcount == 0);
+
+ _bfd_elf_link_hash_copy_indirect (bed, dir, ind);
+ }
+@@ -2060,7 +2094,7 @@
+ (*_bfd_error_handler)
+ (_("%B(%s): warning: interworking not enabled.\n"
+ " first occurrence: %B: thumb call to arm"),
+- sym_sec->owner, input_bfd, name);
++ sym_sec->owner, name, input_bfd);
+
+ return FALSE;
+ }
+@@ -2165,7 +2199,7 @@
+ (*_bfd_error_handler)
+ (_("%B(%s): warning: interworking not enabled.\n"
+ " first occurrence: %B: arm call to thumb"),
+- sym_sec->owner, input_bfd, name);
++ sym_sec->owner, name, input_bfd);
+ }
+
+ --my_offset;
+@@ -2481,7 +2515,7 @@
+ instruction instead ? */
+ if (sym_flags != STT_ARM_TFUNC)
+ (*_bfd_error_handler)
+- (_("\%B: Warning: Arm BLX instruction targets Arm function '%s'."),
++ (_("%B: Warning: Arm BLX instruction targets Arm function '%s'."),
+ input_bfd,
+ h ? h->root.root.string : "(local)");
+ }
+@@ -2697,6 +2731,20 @@
+ /* Handle calls via the PLT. */
+ if (h != NULL && splt != NULL && h->plt.offset != (bfd_vma) -1)
+ {
++ struct elf32_arm_link_hash_entry *eh;
++ eh = (struct elf32_arm_link_hash_entry *) h;
++ if (!eh->accomodate_trampoline)
++ {
++ /* %B of output_bfd crashes here, so %x is used instead */
++ _bfd_error_handler(
++ _("ERROR: %B: %x(%s): missing thumb trampoline, refcount(thumb %d, plt %d) in %x at %x+%x+%x"),
++ input_bfd, h, h->root.root.string, eh->plt_thumb_refcount,
++ h->plt.refcount, output_bfd, splt->output_section->vma,
++ splt->output_offset, h->plt.offset);
++ /* The relocation would point to garbage, it gets skipped... */
++ return bfd_reloc_dangerous;
++ }
++
+ value = (splt->output_section->vma
+ + splt->output_offset
+ + h->plt.offset);
+@@ -3525,8 +3573,9 @@
+ {
+ _bfd_error_handler
+ (_("ERROR: Source object %B has EABI version %d, but target %B has EABI version %d"),
+- ibfd, obfd,
++ ibfd,
+ (in_flags & EF_ARM_EABIMASK) >> 24,
++ obfd,
+ (out_flags & EF_ARM_EABIMASK) >> 24);
+ return FALSE;
+ }
+@@ -3538,8 +3587,9 @@
+ {
+ _bfd_error_handler
+ (_("ERROR: %B is compiled for APCS-%d, whereas target %B uses APCS-%d"),
+- ibfd, obfd,
++ ibfd,
+ in_flags & EF_ARM_APCS_26 ? 26 : 32,
++ obfd,
+ out_flags & EF_ARM_APCS_26 ? 26 : 32);
+ flags_compatible = FALSE;
+ }
+@@ -3903,10 +3953,18 @@
+ eh = (struct elf32_arm_link_hash_entry *) h;
+
+ if (h->plt.refcount > 0)
++ h->plt.refcount -= 1;
++
++ if (ELF32_R_TYPE (rel->r_info) == R_ARM_THM_PC22)
+ {
+- h->plt.refcount -= 1;
+- if (ELF32_R_TYPE (rel->r_info) == R_ARM_THM_PC22)
+- eh->plt_thumb_refcount--;
++ BFD_ASSERT (eh->plt_thumb_refcount > 0);
++ eh->plt_thumb_refcount--;
++ BFD_ASSERT (eh->accomodate_trampoline == 0);
++#if NOTE_DEBUG
++ _bfd_error_handler(
++ _("NOTE: %B: %x(%s): Thumb refcount decremented to %d (plt refcount %d)"),
++ abfd, h, h->root.root.string, eh->plt_thumb_refcount, h->plt.refcount);
++#endif
+ }
+
+ if (r_type == R_ARM_ABS32
+@@ -3994,6 +4052,10 @@
+ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+
+ eh = (struct elf32_arm_link_hash_entry *) h;
++#if NOTE_DEBUG
++ if (h != NULL)
++ _bfd_error_handler(_("NOTE: %B: %x(%s): verify relocation"), abfd, h, h->root.root.string);
++#endif
+
+ switch (r_type)
+ {
+@@ -4078,10 +4140,30 @@
+
+ /* If we create a PLT entry, this relocation will reference
+ it, even if it's an ABS32 relocation. */
+- h->plt.refcount += 1;
++ if (h->plt.refcount >= 0)
++ h->plt.refcount += 1;
++ else
++ {
++ /* This happens, I suspect it happens with glue code because,
++ * somehow, the backend data had can_refcount==0. Expert required...
++ */
++ _bfd_error_handler(
++ _("WARNING: %B: %x(%s): PLT refcount was %d (set to 1)"),
++ abfd, h, h->root.root.string, h->plt.refcount);
++ h->plt.refcount = 1;
++ }
+
+ if (r_type == R_ARM_THM_PC22)
+- eh->plt_thumb_refcount += 1;
++ {
++ eh->plt_thumb_refcount += 1;
++ BFD_ASSERT (eh->plt_thumb_refcount <= h->plt.refcount);
++ BFD_ASSERT (eh->accomodate_trampoline == 0);
++#if NOTE_DEBUG
++ _bfd_error_handler(
++ _("NOTE: %B: %x(%s): Thumb refcount incremented to %d (plt refcount %d)"),
++ abfd, h, h->root.root.string, eh->plt_thumb_refcount, h->plt.refcount);
++#endif
++ }
+ }
+
+ /* If we are creating a shared library or relocatable executable,
+@@ -4376,8 +4458,15 @@
+ object, or if all references were garbage collected. In
+ such a case, we don't actually need to build a procedure
+ linkage table, and we can just do a PC24 reloc instead. */
++#if NOTE_DEBUG
++ _bfd_error_handler(
++ _("NOTE: %x(%s): Thumb refcount zeroed (plt refcount %d, thumb %d) (%s)"),
++ h, h->root.root.string, h->plt.refcount, eh->plt_thumb_refcount,
++ SYMBOL_CALLS_LOCAL (info, h) ? "local call" : "invisible");
++#endif
+ h->plt.offset = (bfd_vma) -1;
+ eh->plt_thumb_refcount = 0;
++ BFD_ASSERT (eh->accomodate_trampoline == 0);
+ h->needs_plt = 0;
+ }
+
+@@ -4390,8 +4479,14 @@
+ in check_relocs. We can't decide accurately between function
+ and non-function syms in check-relocs; Objects loaded later in
+ the link may change h->type. So fix it now. */
++#if NOTE_DEBUG
++ _bfd_error_handler(
++ _("NOTE: %x(%s): Thumb refcount zeroed (%d, plt refcount %d)"),
++ h, h->root.root.string, eh->plt_thumb_refcount, h->plt.refcount);
++#endif
+ h->plt.offset = (bfd_vma) -1;
+ eh->plt_thumb_refcount = 0;
++ BFD_ASSERT (eh->accomodate_trampoline == 0);
+ }
+
+ /* If this is a weak symbol, and there is a real definition, the
+@@ -4521,8 +4616,14 @@
+ for it. */
+ if (!htab->symbian_p && eh->plt_thumb_refcount > 0)
+ {
++#if NOTE_DEBUG
++ _bfd_error_handler(_("NOTE: %x(%s): Thumb trampoline created at %x"),
++ h, h->root.root.string, h->plt.offset);
++#endif
+ h->plt.offset += PLT_THUMB_STUB_SIZE;
+ s->size += PLT_THUMB_STUB_SIZE;
++ BFD_ASSERT (eh->accomodate_trampoline == 0);
++ eh->accomodate_trampoline = 1;
+ }
+
+ /* If this symbol is not defined in a regular file, and we are
+@@ -5014,10 +5115,20 @@
+
+ if (eh->plt_thumb_refcount > 0)
+ {
+- bfd_put_16 (output_bfd, elf32_arm_plt_thumb_stub[0],
+- splt->contents + h->plt.offset - 4);
+- bfd_put_16 (output_bfd, elf32_arm_plt_thumb_stub[1],
+- splt->contents + h->plt.offset - 2);
++ if (eh->accomodate_trampoline == 1)
++ {
++ bfd_put_16 (output_bfd, elf32_arm_plt_thumb_stub[0],
++ splt->contents + h->plt.offset - 4);
++ bfd_put_16 (output_bfd, elf32_arm_plt_thumb_stub[1],
++ splt->contents + h->plt.offset - 2);
++ }
++ else
++ {
++ (*_bfd_error_handler) (
++ _("%B: no space for THUMB trampoline at %x[%x]"),
++ output_bfd, h->plt.offset, got_offset);
++ return FALSE;
++ }
+ }
+
+ bfd_put_32 (output_bfd, elf32_arm_plt_entry[0] | ((got_displacement & 0x0ff00000) >> 20),
diff --git a/meta/packages/binutils/binutils-cross.inc b/meta/packages/binutils/binutils-cross.inc
new file mode 100644
index 0000000000..c63ea687aa
--- /dev/null
+++ b/meta/packages/binutils/binutils-cross.inc
@@ -0,0 +1,30 @@
+SECTION = "devel"
+inherit cross
+DEPENDS += "flex-native bison-native"
+PROVIDES = "virtual/${TARGET_PREFIX}binutils"
+PACKAGES = ""
+EXTRA_OECONF = "--with-sysroot=${CROSS_DIR}/${TARGET_SYS} \
+ --program-prefix=${TARGET_PREFIX}"
+
+do_stage () {
+ oe_runmake install
+
+ # We don't really need these, so we'll remove them...
+ rm -rf ${CROSS_DIR}/lib/ldscripts
+ rm -rf ${CROSS_DIR}/share/info
+ rm -rf ${CROSS_DIR}/share/locale
+ rm -rf ${CROSS_DIR}/share/man
+ rmdir ${CROSS_DIR}/share || :
+ rmdir ${CROSS_DIR}/${libdir}/gcc-lib || :
+ rmdir ${CROSS_DIR}/${libdir} || :
+ rmdir ${CROSS_DIR}/${prefix} || :
+
+ # We want to move this into the target specific location
+ mkdir -p ${CROSS_DIR}/${TARGET_SYS}/lib
+ mv -f ${CROSS_DIR}/lib/libiberty.a ${CROSS_DIR}/${TARGET_SYS}/lib
+ rmdir ${CROSS_DIR}/lib || :
+}
+
+do_install () {
+ :
+}
diff --git a/meta/packages/binutils/binutils-cross_2.15.94.0.1.bb b/meta/packages/binutils/binutils-cross_2.15.94.0.1.bb
new file mode 100644
index 0000000000..7e165271d7
--- /dev/null
+++ b/meta/packages/binutils/binutils-cross_2.15.94.0.1.bb
@@ -0,0 +1,32 @@
+SECTION = "devel"
+include binutils_${PV}.bb
+inherit cross
+DEPENDS += "flex-native bison-native"
+PROVIDES = "virtual/${TARGET_PREFIX}binutils"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/binutils-${PV}"
+PACKAGES = ""
+EXTRA_OECONF = "--with-sysroot=${CROSS_DIR}/${TARGET_SYS} \
+ --program-prefix=${TARGET_PREFIX}"
+
+do_stage () {
+ oe_runmake install
+
+ # We don't really need these, so we'll remove them...
+ rm -rf ${CROSS_DIR}/lib/ldscripts
+ rm -rf ${CROSS_DIR}/share/info
+ rm -rf ${CROSS_DIR}/share/locale
+ rm -rf ${CROSS_DIR}/share/man
+ rmdir ${CROSS_DIR}/share || :
+ rmdir ${CROSS_DIR}/${libdir}/gcc-lib || :
+ rmdir ${CROSS_DIR}/${libdir} || :
+ rmdir ${CROSS_DIR}/${prefix} || :
+
+ # We want to move this into the target specific location
+ mkdir -p ${CROSS_DIR}/${TARGET_SYS}/lib
+ mv -f ${CROSS_DIR}/lib/libiberty.a ${CROSS_DIR}/${TARGET_SYS}/lib
+ rmdir ${CROSS_DIR}/lib || :
+}
+
+do_install () {
+ :
+}
diff --git a/meta/packages/binutils/binutils-cross_2.16.91.0.7.bb b/meta/packages/binutils/binutils-cross_2.16.91.0.7.bb
new file mode 100644
index 0000000000..7e165271d7
--- /dev/null
+++ b/meta/packages/binutils/binutils-cross_2.16.91.0.7.bb
@@ -0,0 +1,32 @@
+SECTION = "devel"
+include binutils_${PV}.bb
+inherit cross
+DEPENDS += "flex-native bison-native"
+PROVIDES = "virtual/${TARGET_PREFIX}binutils"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/binutils-${PV}"
+PACKAGES = ""
+EXTRA_OECONF = "--with-sysroot=${CROSS_DIR}/${TARGET_SYS} \
+ --program-prefix=${TARGET_PREFIX}"
+
+do_stage () {
+ oe_runmake install
+
+ # We don't really need these, so we'll remove them...
+ rm -rf ${CROSS_DIR}/lib/ldscripts
+ rm -rf ${CROSS_DIR}/share/info
+ rm -rf ${CROSS_DIR}/share/locale
+ rm -rf ${CROSS_DIR}/share/man
+ rmdir ${CROSS_DIR}/share || :
+ rmdir ${CROSS_DIR}/${libdir}/gcc-lib || :
+ rmdir ${CROSS_DIR}/${libdir} || :
+ rmdir ${CROSS_DIR}/${prefix} || :
+
+ # We want to move this into the target specific location
+ mkdir -p ${CROSS_DIR}/${TARGET_SYS}/lib
+ mv -f ${CROSS_DIR}/lib/libiberty.a ${CROSS_DIR}/${TARGET_SYS}/lib
+ rmdir ${CROSS_DIR}/lib || :
+}
+
+do_install () {
+ :
+}
diff --git a/meta/packages/binutils/binutils-cross_2.16.bb b/meta/packages/binutils/binutils-cross_2.16.bb
new file mode 100644
index 0000000000..df0f17b1ef
--- /dev/null
+++ b/meta/packages/binutils/binutils-cross_2.16.bb
@@ -0,0 +1,3 @@
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/binutils-${PV}"
+include binutils_${PV}.bb
+include binutils-cross.inc
diff --git a/meta/packages/binutils/binutils.inc b/meta/packages/binutils/binutils.inc
new file mode 100644
index 0000000000..680e579a06
--- /dev/null
+++ b/meta/packages/binutils/binutils.inc
@@ -0,0 +1,117 @@
+inherit autotools gettext
+
+PACKAGES = "${PN} ${PN}-dev ${PN}-doc ${PN}-symlinks"
+
+FILES_${PN} = " \
+ ${bindir}/${TARGET_PREFIX}* \
+ ${libdir}/lib*-*.so \
+ ${prefix}/${TARGET_SYS}/bin/*"
+
+FILES_${PN}-dev = " \
+ ${includedir} \
+ ${libdir}/*.a \
+ ${libdir}/*.la \
+ ${libdir}/libbfd.so \
+ ${libdir}/libopcodes.so"
+
+FILES_${PN}-symlinks = " \
+ ${bindir}/addr2line \
+ ${bindir}/as \
+ ${bindir}/c++filt \
+ ${bindir}/gprof \
+ ${bindir}/ld \
+ ${bindir}/nm \
+ ${bindir}/objcopy \
+ ${bindir}/objdump \
+ ${bindir}/ranlib \
+ ${bindir}/readelf \
+ ${bindir}/size \
+ ${bindir}/strip"
+
+EXTRA_OECONF = "--program-prefix=${TARGET_PREFIX} \
+ --enable-shared"
+
+# This is necessary due to a bug in the binutils Makefiles
+EXTRA_OEMAKE = "configure-build-libiberty all"
+
+export AR = "${HOST_PREFIX}ar"
+export AS = "${HOST_PREFIX}as"
+export LD = "${HOST_PREFIX}ld"
+export NM = "${HOST_PREFIX}nm"
+export RANLIB = "${HOST_PREFIX}ranlib"
+export OBJCOPY = "${HOST_PREFIX}objcopy"
+export OBJDUMP = "${HOST_PREFIX}objdump"
+
+export AR_FOR_TARGET = "${TARGET_PREFIX}ar"
+export AS_FOR_TARGET = "${TARGET_PREFIX}as"
+export LD_FOR_TARGET = "${TARGET_PREFIX}ld"
+export NM_FOR_TARGET = "${TARGET_PREFIX}nm"
+export RANLIB_FOR_TARGET = "${TARGET_PREFIX}ranlib"
+
+export CC_FOR_HOST = "${CCACHE} ${HOST_PREFIX}gcc ${HOST_CC_ARCH}"
+export CXX_FOR_HOST = "${CCACHE} ${HOST_PREFIX}gcc ${HOST_CC_ARCH}"
+
+export CC_FOR_BUILD = "${BUILD_CC}"
+export CPP_FOR_BUILD = "${BUILD_CPP}"
+export CFLAGS_FOR_BUILD = "${BUILD_CFLAGS}"
+
+export CC = "${CCACHE} ${HOST_PREFIX}gcc ${HOST_CC_ARCH}"
+
+do_configure () {
+ (cd ${S}; gnu-configize) || die "Failed to run gnu-configize"
+ oe_runconf
+}
+
+do_stage () {
+ oe_libinstall -so -a -C opcodes libopcodes ${STAGING_LIBDIR}/
+ oe_libinstall -a -C libiberty libiberty ${STAGING_LIBDIR}/
+ oe_libinstall -so -a -C bfd libbfd ${STAGING_LIBDIR}/
+ install -m 0644 ${S}/include/dis-asm.h ${STAGING_INCDIR}/
+ install -m 0644 ${S}/include/symcat.h ${STAGING_INCDIR}/
+ install -m 0644 ${S}/include/libiberty.h ${STAGING_INCDIR}/
+ install -m 0644 ${S}/include/ansidecl.h ${STAGING_INCDIR}/
+ install -m 0644 ${S}/include/bfdlink.h ${STAGING_INCDIR}/
+ install -m 0644 bfd/bfd.h ${STAGING_INCDIR}/
+}
+
+do_install () {
+ autotools_do_install
+
+ # We don't really need these, so we'll remove them...
+ rm -rf ${D}${libdir}/ldscripts
+
+ # Fix the /usr/${TARGET_SYS}/bin/* links
+ for l in ${D}${prefix}/${TARGET_SYS}/bin/*; do
+ rm -f $l
+ ln -sf `echo ${prefix}/${TARGET_SYS}/bin \
+ | tr -s / \
+ | sed -e 's,^/,,' -e 's,[^/]*,..,g'`${bindir}/${TARGET_PREFIX}`basename $l` $l
+ done
+
+ # Install the libiberty header
+ install -d ${D}${includedir}
+ install -m 644 ${S}/include/ansidecl.h ${D}${includedir}
+ install -m 644 ${S}/include/libiberty.h ${D}${includedir}
+
+ cd ${D}${bindir}
+
+ # Symlinks for ease of running these on the native target
+ for p in ${TARGET_SYS}-* ; do
+ ln -sf $p `echo $p | sed -e s,${TARGET_SYS}-,,`
+ done
+
+ rm ${D}${bindir}/ar ${D}${bindir}/strings
+}
+
+
+pkg_postinst_${PN}-symlinks () {
+ update-alternatives --install ${bindir}/ar ar ${TARGET_SYS}-ar 100
+ update-alternatives --install ${bindir}/strings strings ${TARGET_SYS}-strings 100
+}
+
+
+pkg_prerm_${PN}-symlinks () {
+ update-alternatives --remove ar ${TARGET_SYS}-ar
+ update-alternatives --remove strings ${TARGET_SYS}-strings
+}
+
diff --git a/meta/packages/binutils/binutils_2.15.94.0.1.bb b/meta/packages/binutils/binutils_2.15.94.0.1.bb
new file mode 100644
index 0000000000..2b2996abe6
--- /dev/null
+++ b/meta/packages/binutils/binutils_2.15.94.0.1.bb
@@ -0,0 +1,124 @@
+DESCRIPTION = "A GNU collection of binary utilities"
+HOMEPAGE = "http://www.gnu.org/software/binutils/"
+SECTION = "devel"
+LICENSE = "GPL"
+MAINTAINER = "Gerald Britton <gbritton@doomcom.org>"
+PR = "r2"
+
+inherit autotools gettext
+
+PACKAGES = "${PN} ${PN}-dev ${PN}-doc ${PN}-symlinks"
+
+FILES_${PN} = " \
+ ${bindir}/${TARGET_PREFIX}* \
+ ${libdir}/lib*-*.so \
+ ${prefix}/${TARGET_SYS}/bin/*"
+
+FILES_${PN}-dev = " \
+ ${includedir} \
+ ${libdir}/*.a \
+ ${libdir}/*.la \
+ ${libdir}/libbfd.so \
+ ${libdir}/libopcodes.so"
+
+FILES_${PN}-symlinks = " \
+ ${bindir}/addr2line \
+ ${bindir}/ar \
+ ${bindir}/as \
+ ${bindir}/c++filt \
+ ${bindir}/gprof \
+ ${bindir}/ld \
+ ${bindir}/nm \
+ ${bindir}/objcopy \
+ ${bindir}/objdump \
+ ${bindir}/ranlib \
+ ${bindir}/readelf \
+ ${bindir}/size \
+ ${bindir}/strings \
+ ${bindir}/strip"
+
+SRC_URI = \
+ "http://ftp.kernel.org/pub/linux/devel/binutils/binutils-${PV}.tar.bz2 \
+ file://ld_makefile.patch;patch=1 \
+ file://better_file_error.patch;patch=1 \
+ file://signed_char_fix.patch;patch=1 \
+ file://objdump_fix.patch;patch=1 \
+ file://binutils-100_cflags_for_build.patch;patch=1 \
+ file://binutils-2.15.91.0.1-uclibc-100-conf.patch;patch=1 \
+ file://binutils-2.15.90.0.3-uclibc-200-build_modules.patch;patch=1"
+
+S = "${WORKDIR}/binutils-${PV}"
+B = "${S}/build.${HOST_SYS}.${TARGET_SYS}"
+
+EXTRA_OECONF = "--program-prefix=${TARGET_PREFIX} \
+ --enable-shared"
+
+# This is necessary due to a bug in the binutils Makefiles
+EXTRA_OEMAKE = "configure-build-libiberty all"
+
+export AR = "${HOST_PREFIX}ar"
+export AS = "${HOST_PREFIX}as"
+export LD = "${HOST_PREFIX}ld"
+export NM = "${HOST_PREFIX}nm"
+export RANLIB = "${HOST_PREFIX}ranlib"
+export OBJCOPY = "${HOST_PREFIX}objcopy"
+export OBJDUMP = "${HOST_PREFIX}objdump"
+
+export AR_FOR_TARGET = "${TARGET_PREFIX}ar"
+export AS_FOR_TARGET = "${TARGET_PREFIX}as"
+export LD_FOR_TARGET = "${TARGET_PREFIX}ld"
+export NM_FOR_TARGET = "${TARGET_PREFIX}nm"
+export RANLIB_FOR_TARGET = "${TARGET_PREFIX}ranlib"
+
+export CC_FOR_HOST = "${CCACHE} ${HOST_PREFIX}gcc ${HOST_CC_ARCH}"
+export CXX_FOR_HOST = "${CCACHE} ${HOST_PREFIX}gcc ${HOST_CC_ARCH}"
+
+export CC_FOR_BUILD = "${BUILD_CC}"
+export CPP_FOR_BUILD = "${BUILD_CPP}"
+export CFLAGS_FOR_BUILD = "${BUILD_CFLAGS}"
+
+export CC = "${CCACHE} ${HOST_PREFIX}gcc ${HOST_CC_ARCH}"
+
+do_configure () {
+ (cd ${S}; gnu-configize) || die "Failed to run gnu-configize"
+ oe_runconf
+}
+
+do_stage () {
+ oe_libinstall -so -a -C opcodes libopcodes ${STAGING_LIBDIR}/
+ oe_libinstall -a -C libiberty libiberty ${STAGING_LIBDIR}/
+ oe_libinstall -so -a -C bfd libbfd ${STAGING_LIBDIR}/
+ install -m 0644 ${S}/include/dis-asm.h ${STAGING_INCDIR}/
+ install -m 0644 ${S}/include/symcat.h ${STAGING_INCDIR}/
+ install -m 0644 ${S}/include/libiberty.h ${STAGING_INCDIR}/
+ install -m 0644 ${S}/include/ansidecl.h ${STAGING_INCDIR}/
+ install -m 0644 ${S}/include/bfdlink.h ${STAGING_INCDIR}/
+ install -m 0644 bfd/bfd.h ${STAGING_INCDIR}/
+}
+
+do_install () {
+ autotools_do_install
+
+ # We don't really need these, so we'll remove them...
+ rm -rf ${D}${libdir}/ldscripts
+
+ # Fix the /usr/${TARGET_SYS}/bin/* links
+ for l in ${D}${prefix}/${TARGET_SYS}/bin/*; do
+ rm -f $l
+ ln -sf `echo ${prefix}/${TARGET_SYS}/bin \
+ | tr -s / \
+ | sed -e 's,^/,,' -e 's,[^/]*,..,g'`${bindir}/${TARGET_PREFIX}`basename $l` $l
+ done
+
+ # Install the libiberty header
+ install -d ${D}${includedir}
+ install -m 644 ${S}/include/ansidecl.h ${D}${includedir}
+ install -m 644 ${S}/include/libiberty.h ${D}${includedir}
+
+ cd ${D}${bindir}
+
+ # Symlinks for ease of running these on the native target
+ for p in ${TARGET_SYS}-* ; do
+ ln -sf $p `echo $p | sed -e s,${TARGET_SYS}-,,`
+ done
+}
diff --git a/meta/packages/binutils/binutils_2.16.91.0.7.bb b/meta/packages/binutils/binutils_2.16.91.0.7.bb
new file mode 100644
index 0000000000..664fce8cb7
--- /dev/null
+++ b/meta/packages/binutils/binutils_2.16.91.0.7.bb
@@ -0,0 +1,123 @@
+DESCRIPTION = "A GNU collection of binary utilities"
+HOMEPAGE = "http://www.gnu.org/software/binutils/"
+SECTION = "devel"
+LICENSE = "GPL"
+DEFAULT_PREFERENCE = "-1"
+
+inherit autotools gettext
+
+PACKAGES = "${PN} ${PN}-dev ${PN}-doc ${PN}-symlinks"
+
+FILES_${PN} = " \
+ ${bindir}/${TARGET_PREFIX}* \
+ ${libdir}/lib*-*.so \
+ ${prefix}/${TARGET_SYS}/bin/*"
+
+FILES_${PN}-dev = " \
+ ${includedir} \
+ ${libdir}/*.a \
+ ${libdir}/*.la \
+ ${libdir}/libbfd.so \
+ ${libdir}/libopcodes.so"
+
+FILES_${PN}-symlinks = " \
+ ${bindir}/addr2line \
+ ${bindir}/ar \
+ ${bindir}/as \
+ ${bindir}/c++filt \
+ ${bindir}/gprof \
+ ${bindir}/ld \
+ ${bindir}/nm \
+ ${bindir}/objcopy \
+ ${bindir}/objdump \
+ ${bindir}/ranlib \
+ ${bindir}/readelf \
+ ${bindir}/size \
+ ${bindir}/strings \
+ ${bindir}/strip"
+
+SRC_URI = \
+ "http://ftp.kernel.org/pub/linux/devel/binutils/binutils-${PV}.tar.bz2 \
+ file://binutils-2.16.91.0.6-objcopy-rename-errorcode.patch;patch=1 \
+ file://binutils-uclibc-100-uclibc-conf.patch;patch=1 \
+ file://binutils-uclibc-300-001_ld_makefile_patch.patch;patch=1 \
+ file://binutils-uclibc-300-006_better_file_error.patch;patch=1 \
+ file://binutils-uclibc-300-012_check_ldrunpath_length.patch;patch=1 \
+ file://binutils-uclibc-400-mips-ELF_MAXPAGESIZE-4K.patch;patch=1 \
+ file://binutils-uclibc-702-binutils-skip-comments.patch;patch=1"
+
+S = "${WORKDIR}/binutils-${PV}"
+B = "${S}/build.${HOST_SYS}.${TARGET_SYS}"
+
+EXTRA_OECONF = "--program-prefix=${TARGET_PREFIX} \
+ --enable-shared"
+
+# This is necessary due to a bug in the binutils Makefiles
+EXTRA_OEMAKE = "configure-build-libiberty all"
+
+export AR = "${HOST_PREFIX}ar"
+export AS = "${HOST_PREFIX}as"
+export LD = "${HOST_PREFIX}ld"
+export NM = "${HOST_PREFIX}nm"
+export RANLIB = "${HOST_PREFIX}ranlib"
+export OBJCOPY = "${HOST_PREFIX}objcopy"
+export OBJDUMP = "${HOST_PREFIX}objdump"
+
+export AR_FOR_TARGET = "${TARGET_PREFIX}ar"
+export AS_FOR_TARGET = "${TARGET_PREFIX}as"
+export LD_FOR_TARGET = "${TARGET_PREFIX}ld"
+export NM_FOR_TARGET = "${TARGET_PREFIX}nm"
+export RANLIB_FOR_TARGET = "${TARGET_PREFIX}ranlib"
+
+export CC_FOR_HOST = "${CCACHE} ${HOST_PREFIX}gcc ${HOST_CC_ARCH}"
+export CXX_FOR_HOST = "${CCACHE} ${HOST_PREFIX}gcc ${HOST_CC_ARCH}"
+
+export CC_FOR_BUILD = "${BUILD_CC}"
+export CPP_FOR_BUILD = "${BUILD_CPP}"
+export CFLAGS_FOR_BUILD = "${BUILD_CFLAGS}"
+
+export CC = "${CCACHE} ${HOST_PREFIX}gcc ${HOST_CC_ARCH}"
+
+do_configure () {
+ (cd ${S}; gnu-configize) || die "Failed to run gnu-configize"
+ oe_runconf
+}
+
+do_stage () {
+ oe_libinstall -so -a -C opcodes libopcodes ${STAGING_LIBDIR}/
+ oe_libinstall -a -C libiberty libiberty ${STAGING_LIBDIR}/
+ oe_libinstall -so -a -C bfd libbfd ${STAGING_LIBDIR}/
+ install -m 0644 ${S}/include/dis-asm.h ${STAGING_INCDIR}/
+ install -m 0644 ${S}/include/symcat.h ${STAGING_INCDIR}/
+ install -m 0644 ${S}/include/libiberty.h ${STAGING_INCDIR}/
+ install -m 0644 ${S}/include/ansidecl.h ${STAGING_INCDIR}/
+ install -m 0644 ${S}/include/bfdlink.h ${STAGING_INCDIR}/
+ install -m 0644 bfd/bfd.h ${STAGING_INCDIR}/
+}
+
+do_install () {
+ autotools_do_install
+
+ # We don't really need these, so we'll remove them...
+ rm -rf ${D}${libdir}/ldscripts
+
+ # Fix the /usr/${TARGET_SYS}/bin/* links
+ for l in ${D}${prefix}/${TARGET_SYS}/bin/*; do
+ rm -f $l
+ ln -sf `echo ${prefix}/${TARGET_SYS}/bin \
+ | tr -s / \
+ | sed -e 's,^/,,' -e 's,[^/]*,..,g'`${bindir}/${TARGET_PREFIX}`basename $l` $l
+ done
+
+ # Install the libiberty header
+ install -d ${D}${includedir}
+ install -m 644 ${S}/include/ansidecl.h ${D}${includedir}
+ install -m 644 ${S}/include/libiberty.h ${D}${includedir}
+
+ cd ${D}${bindir}
+
+ # Symlinks for ease of running these on the native target
+ for p in ${TARGET_SYS}-* ; do
+ ln -sf $p `echo $p | sed -e s,${TARGET_SYS}-,,`
+ done
+}
diff --git a/meta/packages/binutils/binutils_2.16.bb b/meta/packages/binutils/binutils_2.16.bb
new file mode 100644
index 0000000000..5b936dcc66
--- /dev/null
+++ b/meta/packages/binutils/binutils_2.16.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "A GNU collection of binary utilities"
+HOMEPAGE = "http://www.gnu.org/software/binutils/"
+SECTION = "devel"
+LICENSE = "GPL"
+MAINTAINER = "Gerald Britton <gbritton@doomcom.org>"
+PR = "r7"
+
+SRC_URI = \
+ "http://ftp.gnu.org/gnu/binutils/binutils-${PV}.tar.bz2 \
+ file://ld_makefile.patch;patch=1 \
+ file://better_file_error.patch;patch=1 \
+ file://signed_char_fix.patch;patch=1 \
+ file://binutils-2.16-objcopy-rename-errorcode.patch;patch=1 \
+ file://binutils-100_cflags_for_build.patch;patch=1"
+
+# uclibc patches
+SRC_URI += "file://binutils-2.16-linux-uclibc.patch;patch=1"
+
+# thumb support patches
+SRC_URI += "file://binutils-2.16-thumb-trampoline.patch;patch=1"
+SRC_URI += "file://binutils-2.16-thumb-glue.patch;patch=1"
+
+S = "${WORKDIR}/binutils-${PV}"
+B = "${S}/build.${HOST_SYS}.${TARGET_SYS}"
+
+include binutils.inc
diff --git a/meta/packages/binutils/files/better_file_error.patch b/meta/packages/binutils/files/better_file_error.patch
new file mode 100644
index 0000000000..38ef52966e
--- /dev/null
+++ b/meta/packages/binutils/files/better_file_error.patch
@@ -0,0 +1,17 @@
+diff -urN binutils-2.11.92.0.5/bfd/opncls.c binutils-2.11.92.0.5.new/bfd/opncls.c
+--- binutils-2.11.92.0.5/bfd/opncls.c Mon Oct 1 18:25:21 2001
++++ binutils-2.11.92.0.5.new/bfd/opncls.c Sat Oct 13 11:26:59 2001
+@@ -127,6 +127,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/meta/packages/binutils/files/ld_makefile.patch b/meta/packages/binutils/files/ld_makefile.patch
new file mode 100644
index 0000000000..c1d2ac1ece
--- /dev/null
+++ b/meta/packages/binutils/files/ld_makefile.patch
@@ -0,0 +1,22 @@
+--- binutils-2.11.90.0.19.orig/ld/Makefile.am
++++ binutils-2.11.90.0.19/ld/Makefile.am
+@@ -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@
+--- binutils-2.11.90.0.19.orig/ld/Makefile.in
++++ binutils-2.11.90.0.19/ld/Makefile.in
+@@ -123,7 +123,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/meta/packages/binutils/files/objdump_fix.patch b/meta/packages/binutils/files/objdump_fix.patch
new file mode 100644
index 0000000000..90ad732c06
--- /dev/null
+++ b/meta/packages/binutils/files/objdump_fix.patch
@@ -0,0 +1,134 @@
+From binutils-return-38148-listarch-binutils=sources dot redhat dot com at sources dot redhat dot com Tue Feb 22 19:24:15 2005
+Return-Path: <binutils-return-38148-listarch-binutils=sources dot redhat dot com at sources dot redhat dot com>
+Delivered-To: listarch-binutils at sources dot redhat dot com
+Received: (qmail 4446 invoked by alias); 22 Feb 2005 19:24:15 -0000
+Mailing-List: contact binutils-help at sources dot redhat dot com; run by ezmlm
+Precedence: bulk
+List-Subscribe: <mailto:binutils-subscribe at sources dot redhat dot com>
+List-Archive: <http://sources.redhat.com/ml/binutils/>
+List-Post: <mailto:binutils at sources dot redhat dot com>
+List-Help: <mailto:binutils-help at sources dot redhat dot com>, <http://sources dot redhat dot com/ml/#faqs>
+Sender: binutils-owner at sources dot redhat dot com
+Delivered-To: mailing list binutils at sources dot redhat dot com
+Received: (qmail 4401 invoked from network); 22 Feb 2005 19:24:08 -0000
+Received: from unknown (HELO bgo1smout1.broadpark.no) (217.13.4.94)
+ by sourceware dot org with SMTP; 22 Feb 2005 19:24:08 -0000
+Received: from bgo1sminn1.broadpark.no ([217.13.4.93])
+ by bgo1smout1 dot broadpark dot no
+ (Sun Java System Messaging Server 6 dot 1 HotFix 0 dot 05 (built Oct 21 2004))
+ with ESMTP id <0ICB007QZUZCC0C0 at bgo1smout1 dot broadpark dot no> for
+ binutils at sources dot redhat dot com; Tue, 22 Feb 2005 20:18:48 +0100 (CET)
+Received: from [127.0.0.1] ([80.202.165.9]) by bgo1sminn1.broadpark.no
+ (Sun Java System Messaging Server 6 dot 1 HotFix 0 dot 05 (built Oct 21 2004))
+ with ESMTP id <0ICB006NCVBVHE21 at bgo1sminn1 dot broadpark dot no> for
+ binutils at sources dot redhat dot com; Tue, 22 Feb 2005 20:26:20 +0100 (CET)
+Date: Tue, 22 Feb 2005 20:24:08 +0100
+From: =?ISO-8859-1?Q?Stig_Petter_Olsr=F8d?= <stigpo at users dot sourceforge dot net>
+Subject: [PATCH] objdump relocation fixes for ARM disassembly
+To: binutils at sources dot redhat dot com
+Message-id: <421B86D8.8080604@users.sourceforge.net>
+MIME-version: 1.0
+Content-type: text/plain; charset=ISO-8859-1; format=flowed
+Content-transfer-encoding: 7BIT
+User-Agent: Mozilla Thunderbird 1.0 (Windows/20041206)
+
+Hello,
+
+objdump disassembly did not relocate correctly for the ARM processor. It seems
+that the test for triggering the INSN_HAS_RELOC flag was void (one test killed the other,
+since octets would always be zero) and all relocations would thus fail. I changed the test
+so the flag is set when we are about to disassemble an insn that the current relocation
+entry points to. I also changed objdump_print_addr to use the current relocation entry if
+the insn has such an entry. This causes the symbol printed to be correct for both external
+symbols (from the undefined section) and local symbols.
+
+This has only been tested for the ARM processor, but I don't think it should break other
+DISASSEMBLER_NEEDS_RELOCS processors either.
+
+
+binutils/
+
+2005-02-22 Stig Petter Olsroed <stigpo@users.sourceforge.net>
+
+ * objdump.c (disassemble_bytes): Fixed relocation check for
+ DISASSEMBLER_NEEDS_RELOCS platforms to properly trigger the
+ INSN_HAS_RELOC flag. Set the current relocation entry in
+ objdump_disasm_info to allow printing the proper symbol.
+ (objdump_print_addr): Use the relocation entry in
+ objdump_disasm_info to lookup the correct symbol for
+ DISASSEMBLER_NEEDS_RELOCS platforms.
+
+--- 1/binutils/objdump.c 2005-02-22 01:50:06.000000000 +0100
++++ 2/binutils/objdump.c 2005-02-22 14:27:33.066960900 +0100
+@@ -128,6 +128,7 @@
+ arelent ** dynrelbuf;
+ long dynrelcount;
+ disassembler_ftype disassemble_fn;
++ arelent * reloc;
+ };
+
+ /* Architecture to disassemble for, or default if NULL. */
+@@ -852,6 +853,8 @@
+ {
+ struct objdump_disasm_info *aux;
+ asymbol *sym;
++ arelent *q;
++ int skip_find = 0;
+
+ if (sorted_symcount < 1)
+ {
+@@ -861,6 +864,22 @@
+ }
+
+ aux = (struct objdump_disasm_info *) info->application_data;
++
++ q = aux->reloc;
++ if (q != NULL)
++ {
++ if (q->sym_ptr_ptr != NULL && *q->sym_ptr_ptr != NULL)
++ {
++ /* Adjust the vma to the reloc */
++ vma += bfd_asymbol_value (*q->sym_ptr_ptr);
++ if (bfd_is_und_section (bfd_get_section (*q->sym_ptr_ptr)))
++ {
++ skip_find = 1;
++ sym = *q->sym_ptr_ptr;
++ }
++ }
++ }
++ if (!skip_find)
+ sym = find_symbol_for_address (vma, info, NULL);
+ objdump_print_addr_with_sym (aux->abfd, aux->sec, sym, vma, info,
+ skip_zeroes);
+@@ -1350,16 +1369,22 @@
+ info->bytes_per_chunk = 0;
+
+ #ifdef DISASSEMBLER_NEEDS_RELOCS
+- /* FIXME: This is wrong. It tests the number of octets
+- in the last instruction, not the current one. */
+- if (*relppp < relppend
+- && (**relppp)->address >= rel_offset + addr_offset
+- && ((**relppp)->address
+- < rel_offset + addr_offset + octets / opb))
++ /* Check if the current relocation entry applies to the
++ instruction we are about to disassemble.
++ This works for ARM at least.
++ */
++ if ((*relppp) < relppend
++ && ((**relppp)->address == rel_offset + addr_offset))
++ {
+ info->flags = INSN_HAS_RELOC;
++ aux->reloc = **relppp;
++ }
+ else
+ #endif
++ {
+ info->flags = 0;
++ aux->reloc = NULL;
++ }
+
+ octets = (*disassemble_fn) (section->vma + addr_offset, info);
+ info->fprintf_func = (fprintf_ftype) fprintf;
+
+
+
diff --git a/meta/packages/binutils/files/plt32trunc.patch b/meta/packages/binutils/files/plt32trunc.patch
new file mode 100644
index 0000000000..4990f5dbb6
--- /dev/null
+++ b/meta/packages/binutils/files/plt32trunc.patch
@@ -0,0 +1,24 @@
+--- binutils/bfd/elf32-arm.h.orig 2004-04-22 22:11:15.000000000 -0400
++++ binutils/bfd/elf32-arm.h 2004-04-22 22:28:37.000000000 -0400
+@@ -2229,6 +2229,8 @@ elf32_arm_relocate_section (output_bfd,
+ case R_ARM_PC24:
+ case R_ARM_ABS32:
+ case R_ARM_THM_PC22:
++ case R_ARM_PLT32:
++
+ if (info->shared
+ && (
+ (!info->symbolic && h->dynindx != -1)
+@@ -2262,11 +2264,6 @@ elf32_arm_relocate_section (output_bfd,
+ relocation = 0;
+ break;
+
+- case R_ARM_PLT32:
+- if (h->plt.offset != (bfd_vma)-1)
+- relocation = 0;
+- break;
+-
+ default:
+ if (unresolved_reloc)
+ _bfd_error_handler
+
diff --git a/meta/packages/binutils/files/signed_char_fix.patch b/meta/packages/binutils/files/signed_char_fix.patch
new file mode 100644
index 0000000000..b3709dabed
--- /dev/null
+++ b/meta/packages/binutils/files/signed_char_fix.patch
@@ -0,0 +1,12 @@
+diff -urN binutils-2.11.92.0.12.3/opcodes/i386-dis.c binutils-2.11.92.0.12.3.new/opcodes/i386-dis.c
+--- binutils-2.11.92.0.12.3/opcodes/i386-dis.c Fri Nov 16 17:05:55 2001
++++ binutils-2.11.92.0.12.3.new/opcodes/i386-dis.c Mon Dec 31 15:55:04 2001
+@@ -1830,7 +1830,7 @@
+ * The function returns the length of this instruction in bytes.
+ */
+
+-static char intel_syntax;
++static signed char intel_syntax;
+ static char open_char;
+ static char close_char;
+ static char separator_char;