aboutsummaryrefslogtreecommitdiffstats
path: root/toolchain
diff options
context:
space:
mode:
Diffstat (limited to 'toolchain')
-rw-r--r--toolchain/Config.in54
-rw-r--r--toolchain/Makefile72
-rw-r--r--toolchain/binutils/Config.in24
-rw-r--r--toolchain/binutils/Makefile54
-rw-r--r--toolchain/binutils/patches/2.16.1/100-uclibc-conf.patch586
-rw-r--r--toolchain/binutils/patches/2.16.1/110-uclibc-libtool-conf.patch218
-rw-r--r--toolchain/binutils/patches/2.16.1/300-001_ld_makefile_patch.patch52
-rw-r--r--toolchain/binutils/patches/2.16.1/300-006_better_file_error.patch43
-rw-r--r--toolchain/binutils/patches/2.16.1/300-012_check_ldrunpath_length.patch47
-rw-r--r--toolchain/binutils/patches/2.16.1/702-binutils-skip-comments.patch93
-rw-r--r--toolchain/binutils/patches/2.17/100-uclibc-conf.patch139
-rw-r--r--toolchain/binutils/patches/2.17/110-arm-eabi-conf.patch24
-rw-r--r--toolchain/binutils/patches/2.17/300-001_ld_makefile_patch.patch50
-rw-r--r--toolchain/binutils/patches/2.17/300-006_better_file_error.patch43
-rw-r--r--toolchain/binutils/patches/2.17/300-012_check_ldrunpath_length.patch47
-rw-r--r--toolchain/binutils/patches/2.17/702-binutils-skip-comments.patch93
-rw-r--r--toolchain/binutils/patches/400-mips-ELF_MAXPAGESIZE-4k.patch12
-rw-r--r--toolchain/gcc/Config.in51
-rw-r--r--toolchain/gcc/Config.version20
-rw-r--r--toolchain/gcc/Makefile143
-rw-r--r--toolchain/gcc/patches/3.4.4/100-uclibc-conf.patch442
-rw-r--r--toolchain/gcc/patches/3.4.4/200-uclibc-locale.patch3246
-rw-r--r--toolchain/gcc/patches/3.4.4/300-libstdc++-pic.patch47
-rw-r--r--toolchain/gcc/patches/3.4.4/601-gcc34-arm-ldm.patch119
-rw-r--r--toolchain/gcc/patches/3.4.4/602-sdk-libstdc++-includes.patch22
-rw-r--r--toolchain/gcc/patches/3.4.4/700-pr15068-fix.patch44
-rw-r--r--toolchain/gcc/patches/3.4.4/800-arm-bigendian.patch70
-rw-r--r--toolchain/gcc/patches/3.4.4/810-arm-bigendian-uclibc.patch27
-rw-r--r--toolchain/gcc/patches/3.4.4/830-gcc-bug-num-22167.patch16
-rw-r--r--toolchain/gcc/patches/3.4.4/arm-softfloat.patch.conditional270
-rw-r--r--toolchain/gcc/patches/3.4.5/100-uclibc-conf.patch462
-rw-r--r--toolchain/gcc/patches/3.4.5/200-uclibc-locale.patch3255
-rw-r--r--toolchain/gcc/patches/3.4.5/300-libstdc++-pic.patch47
-rw-r--r--toolchain/gcc/patches/3.4.5/600-gcc34-arm-ldm-peephole.patch65
-rw-r--r--toolchain/gcc/patches/3.4.5/601-gcc34-arm-ldm-peephole2.patch42
-rw-r--r--toolchain/gcc/patches/3.4.5/601-gcc34-arm-ldm.patch119
-rw-r--r--toolchain/gcc/patches/3.4.5/602-sdk-libstdc++-includes.patch22
-rw-r--r--toolchain/gcc/patches/3.4.5/700-pr15068-fix.patch44
-rw-r--r--toolchain/gcc/patches/3.4.5/71_all_sh-pr16665-fix.patch43
-rw-r--r--toolchain/gcc/patches/3.4.5/72_all_sh-no-reorder-blocks.patch13
-rw-r--r--toolchain/gcc/patches/3.4.5/73_all_sh-pr20617.patch28
-rw-r--r--toolchain/gcc/patches/3.4.5/800-arm-bigendian.patch70
-rw-r--r--toolchain/gcc/patches/3.4.5/800-powerpc-libc_stack_end-uclibc.patch15
-rw-r--r--toolchain/gcc/patches/3.4.6-nonmips/001-non_mips.patch85
-rw-r--r--toolchain/gcc/patches/3.4.6-nonmips/100-uclibc-conf.patch442
-rw-r--r--toolchain/gcc/patches/3.4.6-nonmips/200-uclibc-locale.patch3246
-rw-r--r--toolchain/gcc/patches/3.4.6-nonmips/300-libstdc++-pic.patch47
-rw-r--r--toolchain/gcc/patches/3.4.6-nonmips/601-gcc34-arm-ldm.patch119
-rw-r--r--toolchain/gcc/patches/3.4.6-nonmips/602-sdk-libstdc++-includes.patch22
-rw-r--r--toolchain/gcc/patches/3.4.6-nonmips/700-pr15068-fix.patch44
-rw-r--r--toolchain/gcc/patches/3.4.6-nonmips/800-arm-bigendian.patch70
-rw-r--r--toolchain/gcc/patches/3.4.6-nonmips/810-arm-bigendian-uclibc.patch27
-rw-r--r--toolchain/gcc/patches/3.4.6-nonmips/arm-softfloat.patch.conditional270
-rw-r--r--toolchain/gcc/patches/3.4.6/100-uclibc-conf.patch442
-rw-r--r--toolchain/gcc/patches/3.4.6/200-uclibc-locale.patch3246
-rw-r--r--toolchain/gcc/patches/3.4.6/300-libstdc++-pic.patch47
-rw-r--r--toolchain/gcc/patches/3.4.6/601-gcc34-arm-ldm.patch119
-rw-r--r--toolchain/gcc/patches/3.4.6/602-sdk-libstdc++-includes.patch22
-rw-r--r--toolchain/gcc/patches/3.4.6/700-pr15068-fix.patch44
-rw-r--r--toolchain/gcc/patches/3.4.6/800-arm-bigendian.patch70
-rw-r--r--toolchain/gcc/patches/3.4.6/810-arm-bigendian-uclibc.patch27
-rw-r--r--toolchain/gcc/patches/3.4.6/arm-softfloat.patch.conditional270
-rw-r--r--toolchain/gcc/patches/4.0.2/100-uclibc-conf.patch410
-rw-r--r--toolchain/gcc/patches/4.0.2/200-uclibc-locale.patch3191
-rw-r--r--toolchain/gcc/patches/4.0.3/100-uclibc-conf.patch553
-rw-r--r--toolchain/gcc/patches/4.0.3/200-uclibc-locale.patch3237
-rw-r--r--toolchain/gcc/patches/4.0.3/300-libstdc++-pic.patch47
-rw-r--r--toolchain/gcc/patches/4.0.3/301-missing-execinfo_h.patch11
-rw-r--r--toolchain/gcc/patches/4.0.3/302-c99-snprintf.patch11
-rw-r--r--toolchain/gcc/patches/4.0.3/303-c99-complex-ugly-hack.patch12
-rw-r--r--toolchain/gcc/patches/4.0.3/602-sdk-libstdc++-includes.patch22
-rw-r--r--toolchain/gcc/patches/4.0.3/800-arm-bigendian.patch67
-rw-r--r--toolchain/gcc/patches/4.1.0/100-uclibc-conf.patch544
-rw-r--r--toolchain/gcc/patches/4.1.0/110-arm-eabi.patch27
-rw-r--r--toolchain/gcc/patches/4.1.0/200-uclibc-locale.patch3246
-rw-r--r--toolchain/gcc/patches/4.1.0/300-libstdc++-pic.patch46
-rw-r--r--toolchain/gcc/patches/4.1.0/301-missing-execinfo_h.patch11
-rw-r--r--toolchain/gcc/patches/4.1.0/302-c99-snprintf.patch11
-rw-r--r--toolchain/gcc/patches/4.1.0/303-c99-complex-ugly-hack.patch12
-rw-r--r--toolchain/gcc/patches/4.1.0/602-sdk-libstdc++-includes.patch20
-rw-r--r--toolchain/gcc/patches/4.1.0/740-sh-pr24836.patch25
-rw-r--r--toolchain/gcc/patches/4.1.0/800-arm-bigendian.patch67
-rw-r--r--toolchain/gcc/patches/4.1.1/100-uclibc-conf.patch544
-rw-r--r--toolchain/gcc/patches/4.1.1/110-arm-eabi.patch27
-rw-r--r--toolchain/gcc/patches/4.1.1/200-uclibc-locale.patch3239
-rw-r--r--toolchain/gcc/patches/4.1.1/300-libstdc++-pic.patch50
-rw-r--r--toolchain/gcc/patches/4.1.1/301-missing-execinfo_h.patch11
-rw-r--r--toolchain/gcc/patches/4.1.1/302-c99-snprintf.patch11
-rw-r--r--toolchain/gcc/patches/4.1.1/303-c99-complex-ugly-hack.patch12
-rw-r--r--toolchain/gcc/patches/4.1.1/304-index_macro.patch24
-rw-r--r--toolchain/gcc/patches/4.1.1/740-sh-pr24836.patch25
-rw-r--r--toolchain/gcc/patches/4.1.1/800-arm-bigendian.patch67
-rw-r--r--toolchain/gcc/patches/4.1.1/900-c++_fixes.patch37
-rw-r--r--toolchain/gdb/Config.in8
-rw-r--r--toolchain/gdb/Makefile55
-rw-r--r--toolchain/gdb/patches/100-uclibc-conf.patch280
-rw-r--r--toolchain/gdb/patches/200-uclibc-readline-conf.patch15
-rw-r--r--toolchain/gdb/patches/400-mips-coredump.patch28
-rw-r--r--toolchain/gdb/patches/500-thread-timeout.patch34
-rw-r--r--toolchain/gdb/patches/600-debian_10.selected-frame.patch552
-rw-r--r--toolchain/gdb/patches/620-debian_static-thread-db.patch156
-rw-r--r--toolchain/gdb/patches/630-debian_24.tracepoint-segv.patch15
-rw-r--r--toolchain/gdb/patches/640-debian_dwarf2-frame-signal-unwinder.patch120
-rw-r--r--toolchain/gdb/patches/650-debian_vsyscall-gdb-support.patch245
-rw-r--r--toolchain/gdb/patches/660-debian_dwarf-cfa-restore.patch23
-rw-r--r--toolchain/gdb/patches/680-debian_sim-destdir.patch53
-rw-r--r--toolchain/gdb/patches/690-debian_member-field-symtab.patch35
-rw-r--r--toolchain/gdb/patches/700-debian_cp-pass-by-reference.patch464
-rw-r--r--toolchain/gdb/patches/710-debian_thread-db-multiple-libraries.patch593
-rw-r--r--toolchain/gdb/patches/720-debian_static-threads-test.patch36
-rw-r--r--toolchain/gdb/patches/730-debian_gdb-fix-tracefork-check.patch225
-rw-r--r--toolchain/gdb/patches/740-debian_make-cv-type-crash.patch132
-rw-r--r--toolchain/gdb/patches/750-debian_sparc-singlestep.patch37
-rw-r--r--toolchain/gdb/patches/760-debian_vsyscall-bfd-close-result.patch20
-rw-r--r--toolchain/gdb/patches/770-debian_vfork-done-spelling.patch31
-rw-r--r--toolchain/gdb/patches/780-debian_gdbserver-rdynamic.patch675
-rw-r--r--toolchain/gdb/patches/790-debian_dwarf2-cfi-warning.patch39
-rw-r--r--toolchain/gdb/patches/800-debian_linux-use-underscore-exit.patch22
-rw-r--r--toolchain/gdb/patches/810-debian_bfd-no-kylix-crash.patch47
-rw-r--r--toolchain/gdb/patches/820-debian_disable-linux-fork-messages.patch46
-rw-r--r--toolchain/kernel-headers/Makefile63
-rw-r--r--toolchain/kernel-headers/files/config.arm778
-rw-r--r--toolchain/kernel-headers/files/config.i386950
-rw-r--r--toolchain/kernel-headers/files/config.mips1045
-rw-r--r--toolchain/kernel-headers/files/config.ppc341
-rw-r--r--toolchain/kernel-headers/patches/include.patch17954
-rw-r--r--toolchain/libnotimpl/Makefile39
-rw-r--r--toolchain/libnotimpl/src/math.c68
-rw-r--r--toolchain/uClibc/Makefile98
-rw-r--r--toolchain/uClibc/config/armeb168
-rw-r--r--toolchain/uClibc/config/i386185
-rw-r--r--toolchain/uClibc/config/mips170
-rw-r--r--toolchain/uClibc/config/mipsel170
-rw-r--r--toolchain/uClibc/config/powerpc168
-rw-r--r--toolchain/uClibc/patches/100-signal_handler_crash_workaround.patch13
-rw-r--r--toolchain/uClibc/patches/110-mips_pipe.patch27
-rw-r--r--toolchain/uClibc/patches/120-more_standard_math.patch12
-rw-r--r--toolchain/uClibc/patches/130-ppc_gcc4_fix.patch223
-rw-r--r--toolchain/uClibc/patches/140-ipv6_missing_sockopts.patch12
-rw-r--r--toolchain/uClibc/patches/150-portability.patch38
140 files changed, 61177 insertions, 0 deletions
diff --git a/toolchain/Config.in b/toolchain/Config.in
new file mode 100644
index 0000000000..7b0a0aaeee
--- /dev/null
+++ b/toolchain/Config.in
@@ -0,0 +1,54 @@
+#
+config NATIVE_TOOLCHAIN
+ bool
+ prompt "Use host's toolchain" if DEVEL && BROKEN
+ default n
+ help
+ If enabled, OpenWrt will compile using your existing toolchain instead of compiling one
+
+menuconfig TOOLCHAINOPTS
+ bool "Toolchain Options" if DEVEL
+ depends !NATIVE_TOOLCHAIN
+
+source "toolchain/binutils/Config.in"
+source "toolchain/gcc/Config.in"
+
+config GDB
+ bool
+ prompt "Build gdb" if TOOLCHAINOPTS
+ default n
+ help
+ Enable if you want to build the gdb
+
+config LARGEFILE
+ bool
+ prompt "Enable large file (files > 2 GB) support?" if TOOLCHAINOPTS
+ depends on !cris
+ default y
+ help
+ Enable large file (files > 2 GB) support
+
+config SOFT_FLOAT
+ bool
+ prompt "Use software floating point by default" if TOOLCHAINOPTS
+ default n
+ depends on arm || mips || powerpc
+ help
+ If your target CPU does not have a Floating Point Unit (FPU) or a
+ kernel FPU emulator, but you still wish to support floating point
+ functions, then everything will need to be compiled with soft floating
+ point support (-msoft-float).
+
+ Most people will answer N.
+
+config TARGET_OPTIMIZATION
+ string
+ prompt "Target Optimizations" if TOOLCHAINOPTS
+ default "-Os -pipe -march=i486 -funit-at-a-time" if i386
+ default "-Os -pipe -mips32 -mtune=mips32 -funit-at-a-time" if mipsel || mips
+ default "-Os -pipe -mcpu=xscale -funit-at-a-time" if armeb
+ default "-Os -pipe -funit-at-a-time"
+ help
+ Optimizations to use when building for the target host.
+
+source "toolchain/gcc/Config.version"
diff --git a/toolchain/Makefile b/toolchain/Makefile
new file mode 100644
index 0000000000..2d8d88219d
--- /dev/null
+++ b/toolchain/Makefile
@@ -0,0 +1,72 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+# Main makefile for the toolchain
+#
+include $(TOPDIR)/rules.mk
+
+TARGETS-y:=kernel-headers libnotimpl
+TARGETS-$(CONFIG_GDB) += gdb
+ifeq ($(CONFIG_NATIVE_TOOLCHAIN),)
+ TARGETS-y+=binutils gcc uClibc
+endif
+
+TARGETS_DOWNLOAD:=$(patsubst %,%-download,$(TARGETS-y))
+TARGETS_INSTALL:=$(patsubst %,%-install,$(TARGETS-y))
+TARGETS_CLEAN:=$(patsubst %,%-clean,$(TARGETS-y))
+
+all: install
+download: $(TARGETS_DOWNLOAD)
+install: $(TARGETS_INSTALL)
+clean: $(TARGETS_CLEAN)
+$(TARGETS_INSTALL): $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)
+
+uClibc-prepare: kernel-headers-prepare
+ifeq ($(CONFIG_NATIVE_TOOLCHAIN),)
+ binutils-prepare: uClibc-prepare
+ gcc-prepare: binutils-install
+ uClibc-compile: gcc-compile
+ libnotimpl-compile: gcc-install
+endif
+gcc-install: uClibc-install
+
+TOOLCHAIN_STAMP_DIR:=$(STAGING_DIR)/stampfiles
+
+$(STAGING_DIR)/$(REAL_GNU_TARGET_NAME):
+ @mkdir -p $@
+ @ln -sf ../lib $@/lib
+
+$(TOOLCHAIN_STAMP_DIR):
+ mkdir -p $@
+
+$(TOOLCHAIN_BUILD_DIR):
+ @mkdir -p $@
+
+%-download: FORCE
+ $(MAKE) -C $(patsubst %-download,%,$@) download
+
+%-prepare: $(TOOLCHAIN_STAMP_DIR) $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME) $(TOOLCHAIN_BUILD_DIR) FORCE
+ @[ -f $(TOOLCHAIN_STAMP_DIR)/.toolchain_$@ ] || { \
+ $(MAKE) -C $(patsubst %-prepare,%,$@) prepare; \
+ }
+ @touch $(TOOLCHAIN_STAMP_DIR)/.toolchain_$@
+
+%-compile: %-prepare
+ @[ -f $(TOOLCHAIN_STAMP_DIR)/.toolchain_$@ ] || { \
+ $(MAKE) -C $(patsubst %-compile,%,$@) compile; \
+ }
+ @touch $(TOOLCHAIN_STAMP_DIR)/.toolchain_$@
+
+%-install: %-compile
+ @[ -f $(TOOLCHAIN_STAMP_DIR)/.toolchain_$@ ] || { \
+ $(MAKE) -C $(patsubst %-install,%,$@) install; \
+ }
+ @touch $(TOOLCHAIN_STAMP_DIR)/.toolchain_$@
+
+%-clean: FORCE
+ @$(MAKE) -C $(patsubst %-clean,%,$@) clean
+ @rm -f $(TOOLCHAIN_STAMP_DIR)/.toolchain_$(patsubst %-clean,%,$@)-*
+
diff --git a/toolchain/binutils/Config.in b/toolchain/binutils/Config.in
new file mode 100644
index 0000000000..9b4fe07b7d
--- /dev/null
+++ b/toolchain/binutils/Config.in
@@ -0,0 +1,24 @@
+# Choose binutils version.
+
+choice
+ prompt "Binutils Version" if TOOLCHAINOPTS
+ default BINUTILS_VERSION_2_16_1
+ help
+ Select the version of binutils you wish to use.
+
+ config BINUTILS_VERSION_2_16_1
+ bool "binutils 2.16.1"
+
+ config BINUTILS_VERSION_2_17
+ bool "binutils 2.17"
+
+endchoice
+
+config BINUTILS_VERSION
+ string
+ prompt "Binutils Version" if (TOOLCHAINOPTS && NULL)
+ default "2.16.1" if BINUTILS_VERSION_2_16_1
+ default "2.17" if BINUTILS_VERSION_2_17
+ default "2.16.1"
+
+
diff --git a/toolchain/binutils/Makefile b/toolchain/binutils/Makefile
new file mode 100644
index 0000000000..e36758fe4c
--- /dev/null
+++ b/toolchain/binutils/Makefile
@@ -0,0 +1,54 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=binutils
+PKG_VERSION:=$(strip $(subst ",, $(CONFIG_BINUTILS_VERSION)))#"))
+
+PKG_SOURCE_URL:=http://ftp.gnu.org/gnu/binutils/ \
+ ftp://gatekeeper.dec.com/pub/GNU/ \
+ ftp://ftp.uu.net/archive/systems/gnu/ \
+ ftp://ftp.eu.uu.net/pub/gnu/ \
+ ftp://ftp.funet.fi/pub/gnu/prep/ \
+ ftp://ftp.leo.org/pub/comp/os/unix/gnu/
+
+PKG_SOURCE:=binutils-$(PKG_VERSION).tar.bz2
+PKG_MD5SUM:=unknown
+PKG_BUILD_DIR:=$(TOOLCHAIN_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+PKG_CAT:=bzcat
+
+include $(INCLUDE_DIR)/host-build.mk
+
+
+define Build/Prepare
+ $(call Build/Prepare/Default)
+ if [ -d ./patches/$(PKG_VERSION) ]; then \
+ $(SCRIPT_DIR)/patch-kernel.sh $(PKG_BUILD_DIR) ./patches/$(PKG_VERSION); \
+ fi
+endef
+
+define Build/Configure
+ (cd $(PKG_BUILD_DIR); \
+ ./configure \
+ --prefix=$(STAGING_DIR) \
+ --build=$(GNU_HOST_NAME) \
+ --host=$(GNU_HOST_NAME) \
+ --target=$(REAL_GNU_TARGET_NAME) \
+ --disable-werror \
+ --disable-nls \
+ );
+endef
+
+define Build/Compile
+ $(MAKE) -C $(PKG_BUILD_DIR) -j $(CONFIG_JLEVEL) all
+endef
+
+define Build/Install
+ $(MAKE) -C $(PKG_BUILD_DIR) -j $(CONFIG_JLEVEL) install
+endef
+
+$(eval $(call HostBuild))
diff --git a/toolchain/binutils/patches/2.16.1/100-uclibc-conf.patch b/toolchain/binutils/patches/2.16.1/100-uclibc-conf.patch
new file mode 100644
index 0000000000..7c0a72693f
--- /dev/null
+++ b/toolchain/binutils/patches/2.16.1/100-uclibc-conf.patch
@@ -0,0 +1,586 @@
+diff -ur binutils-2.15.97.orig/bfd/config.bfd binutils-2.15.97/bfd/config.bfd
+--- binutils-2.15.97.orig/bfd/config.bfd 2005-04-29 20:48:14.000000000 -0400
++++ binutils-2.15.97/bfd/config.bfd 2005-04-29 20:53:50.000000000 -0400
+@@ -140,7 +140,7 @@
+ targ_defvec=ecoffalpha_little_vec
+ targ_selvecs=bfd_elf64_alpha_vec
+ ;;
+- alpha*-*-linux-gnu* | alpha*-*-elf*)
++ alpha*-*-linux-* | 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-* | 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-*)
+ 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-* | 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-*)
+ targ_defvec=bfd_elf64_hppa_linux_vec
+ targ_selvecs=bfd_elf64_hppa_vec
+ ;;
+@@ -396,7 +396,7 @@
+ ;;
+ #endif
+
+- hppa*-*-linux-gnu*)
++ hppa*-*-linux-*)
+ 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-*)
+ 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-*)
+ 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-*)
+ 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-* | 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-* | 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-*)
+ 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-*)
+ 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-*)
+ targ_defvec=bfd_elf32_vax_vec
+ ;;
+
+diff -ur binutils-2.15.97.orig/bfd/configure binutils-2.15.97/bfd/configure
+--- binutils-2.15.97.orig/bfd/configure 2005-04-29 20:48:14.000000000 -0400
++++ binutils-2.15.97/bfd/configure 2005-04-29 20:53:50.000000000 -0400
+@@ -9918,7 +9918,7 @@
+ alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ COREFILE=''
+ ;;
+- alpha*-*-linux-gnu*)
++ alpha*-*-linux-*)
+ 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-*)
+ 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-*)
+ 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-*)
+ COREFILE=trad-core.lo
+ TRAD_HEADER='"hosts/vaxlinux.h"'
+ ;;
+diff -ur binutils-2.15.97.orig/bfd/configure.in binutils-2.15.97/bfd/configure.in
+--- binutils-2.15.97.orig/bfd/configure.in 2005-04-29 20:48:14.000000000 -0400
++++ binutils-2.15.97/bfd/configure.in 2005-04-29 20:53:50.000000000 -0400
+@@ -163,7 +163,7 @@
+ alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ COREFILE=''
+ ;;
+- alpha*-*-linux-gnu*)
++ alpha*-*-linux-*)
+ 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-*)
+ 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-*)
+ 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-*)
+ COREFILE=trad-core.lo
+ TRAD_HEADER='"hosts/vaxlinux.h"'
+ ;;
+diff -ur binutils-2.15.97.orig/gas/configure binutils-2.15.97/gas/configure
+--- binutils-2.15.97.orig/gas/configure 2005-04-29 20:48:14.000000000 -0400
++++ binutils-2.15.97/gas/configure 2005-04-29 20:53:50.000000000 -0400
+@@ -4462,7 +4462,7 @@
+ _ACEOF
+
+ ;;
+- ppc-*-linux-gnu*)
++ ppc-*-linux-*)
+ case "$endian" in
+ big) ;;
+ *) { { echo "$as_me:$LINENO: error: GNU/Linux must be configured big endian" >&5
+diff -ur binutils-2.15.97.orig/gas/configure.in binutils-2.15.97/gas/configure.in
+--- binutils-2.15.97.orig/gas/configure.in 2005-04-29 20:48:14.000000000 -0400
++++ binutils-2.15.97/gas/configure.in 2005-04-29 20:53:50.000000000 -0400
+@@ -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-*)
+ case "$endian" in
+ big) ;;
+ *) AC_MSG_ERROR(GNU/Linux must be configured big endian) ;;
+diff -ur binutils-2.15.97.orig/gas/configure.tgt binutils-2.15.97/gas/configure.tgt
+--- binutils-2.15.97.orig/gas/configure.tgt 2005-04-29 20:48:14.000000000 -0400
++++ binutils-2.15.97/gas/configure.tgt 2005-04-29 20:53:50.000000000 -0400
+@@ -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-*) 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-*) 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-* | crisv32-*-linux-*)
+ 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-*) 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-*) 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-*) 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-*) 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-*) 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-*) 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-*) fmt=elf em=linux bfd_gas=yes ;;
+
+ w65-*-*) fmt=coff ;;
+
+diff -ur binutils-2.15.97.orig/ld/configure.host binutils-2.15.97/ld/configure.host
+--- binutils-2.15.97.orig/ld/configure.host 2005-04-29 20:48:15.000000000 -0400
++++ binutils-2.15.97/ld/configure.host 2005-04-29 20:53:50.000000000 -0400
+@@ -83,7 +83,7 @@
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,ld\[^ \]\*,ld-linux,g"`
+ ;;
+
+-arm*-*-linux-gnu*)
++arm*-*-linux-*)
+ 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-*)
+ 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-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld.so.1,"`
+ ;;
+
+-m68*-*-linux-gnu*)
++m68*-*-linux-*)
+ 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-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib64/ld64.so.1,"`
+ ;;
+
+-powerpc*-*-linux-gnu*)
++powerpc*-*-linux-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld.so.1,"`
+ ;;
+
+-s390x-*-linux-gnu*)
++s390x-*-linux-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld64.so.1,"`
+ ;;
+
+-s390-*-linux-gnu*)
++s390-*-linux-*)
+ 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-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld-linux.so.2,"`
+ ;;
+
+-sparc64-*-linux-gnu*)
++sparc64-*-linux-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib64/ld-linux.so.2,"`
+ ;;
+
+-x86_64-*-linux-gnu*)
++x86_64-*-linux-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib64/ld-linux-x86-64.so.2,"`
+ ;;
+
+diff -ur binutils-2.15.97.orig/ld/configure.tgt binutils-2.15.97/ld/configure.tgt
+--- binutils-2.15.97.orig/ld/configure.tgt 2005-04-29 20:48:15.000000000 -0400
++++ binutils-2.15.97/ld/configure.tgt 2005-04-29 20:53:50.000000000 -0400
+@@ -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-* | crisv32-*-linux-*)
+ 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-*) 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-*) 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-*) targ_emul=m32rlelf_linux ;;
++m32r*-*-linux-*) 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-*) 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-*) 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-*) 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,13 @@
+ 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-*) 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-*) 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-* | 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 ;;
+@@ -372,7 +372,7 @@
+ targ_extra_emuls=m68kelf
+ tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ ;;
+-m68k-*-linux-gnu*) targ_emul=m68kelf
++m68k-*-linux-*) targ_emul=m68kelf
+ targ_extra_emuls=m68klinux
+ tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ ;;
+@@ -388,9 +388,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-*) targ_emul=hppa64linux ;;
+ hppa*64*-*) targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*) targ_emul=hppalinux ;;
++hppa*-*-linux-*) targ_emul=hppalinux ;;
+ hppa*-*-*elf*) targ_emul=hppaelf ;;
+ hppa*-*-lites*) targ_emul=hppaelf ;;
+ hppa*-*-netbsd*) targ_emul=hppanbsd ;;
+@@ -402,7 +402,7 @@
+ vax-*-netbsdaout* | vax-*-netbsd*)
+ targ_emul=vaxnbsd
+ targ_extra_emuls=elf32vax ;;
+-vax-*-linux-gnu*) targ_emul=elf32vax ;;
++vax-*-linux-*) targ_emul=elf32vax ;;
+ mips*-*-pe) targ_emul=mipspe ;
+ targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+ mips*-dec-ultrix*) targ_emul=mipslit ;;
+@@ -436,18 +436,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-*) targ_emul=elf32ltsmipn32
+ targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ targ_extra_libpath="elf32ltsmip elf64ltsmip"
+ ;;
+-mips64*-*-linux-gnu*) targ_emul=elf32btsmipn32
++mips64*-*-linux-*) 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-*) targ_emul=elf32ltsmip
+ targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ ;;
+-mips*-*-linux-gnu*) targ_emul=elf32btsmip
++mips*-*-linux-*) targ_emul=elf32btsmip
+ targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ ;;
+ mips*-*-lnews*) targ_emul=mipslnews ;;
+@@ -467,7 +467,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-*) targ_emul=elf64alpha targ_extra_emuls=alpha
+ tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ ;;
+ alpha*-*-osf*) targ_emul=alpha ;;
+diff -ur binutils-2.15.97.orig/ld/emultempl/elf32.em binutils-2.15.97/ld/emultempl/elf32.em
+--- binutils-2.15.97.orig/ld/emultempl/elf32.em 2005-04-29 20:48:15.000000000 -0400
++++ binutils-2.15.97/ld/emultempl/elf32.em 2005-04-29 20:53:50.000000000 -0400
+@@ -65,7 +65,7 @@
+
+ if [ "x${USE_LIBPATH}" = xyes ] ; then
+ case ${target} in
+- *-*-linux-gnu*)
++ *-*-linux-*)
+ cat >>e${EMULATION_NAME}.c <<EOF
+ #ifdef HAVE_GLOB
+ #include <glob.h>
+@@ -350,7 +350,7 @@
+
+ EOF
+ case ${target} in
+- *-*-linux-gnu*)
++ *-*-linux-*)
+ cat >>e${EMULATION_NAME}.c <<EOF
+ {
+ struct bfd_link_needed_list *l;
+@@ -522,7 +522,7 @@
+
+ EOF
+ case ${target} in
+- *-*-linux-gnu*)
++ *-*-linux-*)
+ 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-*)
+ cat >>e${EMULATION_NAME}.c <<EOF
+ if (gld${EMULATION_NAME}_check_ld_so_conf (l->name, force))
+ break;
diff --git a/toolchain/binutils/patches/2.16.1/110-uclibc-libtool-conf.patch b/toolchain/binutils/patches/2.16.1/110-uclibc-libtool-conf.patch
new file mode 100644
index 0000000000..ec38caa125
--- /dev/null
+++ b/toolchain/binutils/patches/2.16.1/110-uclibc-libtool-conf.patch
@@ -0,0 +1,218 @@
+diff -urN binutils-2.16.90.0.2-dist/bfd/configure binutils-2.16.90.0.2/bfd/configure
+--- binutils-2.16.90.0.2-dist/bfd/configure 2005-04-29 12:50:24.000000000 -0500
++++ binutils-2.16.90.0.2/bfd/configure 2005-04-30 11:34:59.246377032 -0500
+@@ -3584,6 +3584,11 @@
+ lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd* | knetbsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.16.90.0.2-dist/binutils/configure binutils-2.16.90.0.2/binutils/configure
+--- binutils-2.16.90.0.2-dist/binutils/configure 2005-04-29 12:50:26.000000000 -0500
++++ binutils-2.16.90.0.2/binutils/configure 2005-04-30 11:35:28.900868864 -0500
+@@ -1577,6 +1577,11 @@
+ lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd* | knetbsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.16.90.0.2-dist/configure binutils-2.16.90.0.2/configure
+--- binutils-2.16.90.0.2-dist/configure 2005-04-29 12:50:23.000000000 -0500
++++ binutils-2.16.90.0.2/configure 2005-04-30 11:31:12.525843792 -0500
+@@ -1111,7 +1111,7 @@
+ ;;
+ "")
+ case "${target}" in
+- *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
++ *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu | *-*-linux-uclibc*)
+ # Enable libmudflap by default in GNU and friends.
+ ;;
+ *-*-freebsd*)
+diff -urN binutils-2.16.90.0.2-dist/configure.in binutils-2.16.90.0.2/configure.in
+--- binutils-2.16.90.0.2-dist/configure.in 2005-04-29 12:50:23.000000000 -0500
++++ binutils-2.16.90.0.2/configure.in 2005-04-30 11:29:51.643139832 -0500
+@@ -328,7 +328,7 @@
+ ;;
+ "")
+ case "${target}" in
+- *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
++ *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu | *-*-linux-uclibc*)
+ # Enable libmudflap by default in GNU and friends.
+ ;;
+ *-*-freebsd*)
+diff -urN binutils-2.16.90.0.2-dist/gas/configure binutils-2.16.90.0.2/gas/configure
+--- binutils-2.16.90.0.2-dist/gas/configure 2005-04-29 12:50:27.000000000 -0500
++++ binutils-2.16.90.0.2/gas/configure 2005-04-30 11:35:21.097055224 -0500
+@@ -3421,6 +3421,11 @@
+ lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd* | knetbsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.16.90.0.2-dist/gas/testsuite/gas/sh/basic.exp binutils-2.16.90.0.2/gas/testsuite/gas/sh/basic.exp
+--- binutils-2.16.90.0.2-dist/gas/testsuite/gas/sh/basic.exp 2005-04-09 14:03:14.000000000 -0500
++++ binutils-2.16.90.0.2/gas/testsuite/gas/sh/basic.exp 2005-04-30 11:41:57.301822944 -0500
+@@ -20,7 +20,7 @@
+
+ # Written by Cygnus Support.
+
+-if [istarget "sh*-*-linux-gnu"] {
++if {[istarget "sh*-*-linux-gnu"] || [istarget "sh*-*-linux-uclibc"]} {
+ global ASFLAGS
+ set ASFLAGS "$ASFLAGS -big"
+ }
+diff -urN binutils-2.16.90.0.2-dist/gprof/configure binutils-2.16.90.0.2/gprof/configure
+--- binutils-2.16.90.0.2-dist/gprof/configure 2005-04-29 12:50:29.000000000 -0500
++++ binutils-2.16.90.0.2/gprof/configure 2005-04-30 11:35:36.880655752 -0500
+@@ -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]+$'
+diff -urN binutils-2.16.90.0.2-dist/ld/configure binutils-2.16.90.0.2/ld/configure
+--- binutils-2.16.90.0.2-dist/ld/configure 2005-04-29 12:50:30.000000000 -0500
++++ binutils-2.16.90.0.2/ld/configure 2005-04-30 11:46:15.974498720 -0500
+@@ -1581,6 +1581,11 @@
+ lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd* | knetbsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.16.90.0.2-dist/ld/testsuite/ld-sh/sh.exp binutils-2.16.90.0.2/ld/testsuite/ld-sh/sh.exp
+--- binutils-2.16.90.0.2-dist/ld/testsuite/ld-sh/sh.exp 2005-04-09 14:03:29.000000000 -0500
++++ binutils-2.16.90.0.2/ld/testsuite/ld-sh/sh.exp 2005-04-30 11:45:07.890849008 -0500
+@@ -62,7 +62,7 @@
+
+ set testsrec "SH relaxing to S-records"
+
+-if [istarget sh*-linux-gnu] {
++if {[istarget sh*-linux-gnu] || [istarget sh*-*-linux-uclibc]} {
+ # This target needs the explicit entry address.
+ catch "exec $objdump -x tmpdir/sh1 | grep start\\ address | sed s/start\\ address//" entry_addr
+ set srec_relax_arg "-Ttext $entry_addr -relax --oformat srec tmpdir/sh1.o"
+@@ -117,7 +117,7 @@
+ return
+ }
+
+-if [istarget sh*-linux-gnu] {
++if {[istarget sh*-linux-gnu] || [istarget sh*-*-linux-uclibc]} {
+ exec sed -e s/_main/main/ -e s/_trap/trap/ -e s/_stack/stack/ \
+ < $srcdir/$subdir/start.s >tmpdir/start.s
+ } else {
+diff -urN binutils-2.16.90.0.2-dist/ld/testsuite/ld-srec/srec.exp binutils-2.16.90.0.2/ld/testsuite/ld-srec/srec.exp
+--- binutils-2.16.90.0.2-dist/ld/testsuite/ld-srec/srec.exp 2005-04-29 12:50:30.000000000 -0500
++++ binutils-2.16.90.0.2/ld/testsuite/ld-srec/srec.exp 2005-04-30 11:44:26.358162936 -0500
+@@ -385,7 +385,7 @@
+ setup_xfail "v850*-*-elf"
+
+ # The S-record linker doesn't handle Alpha Elf relaxation.
+-setup_xfail "alpha*-*-elf*" "alpha*-*-linux-gnu*" "alpha*-*-gnu*"
++setup_xfail "alpha*-*-elf*" "alpha*-*-linux-gnu*" "alpha*-*-gnu*" "alpha*-*-linux-uclibc*"
+ setup_xfail "alpha*-*-netbsd*"
+
+ # The S-record linker hasn't any hope of coping with HPPA relocs.
+@@ -424,7 +424,7 @@
+ setup_xfail "thumb-*-*"
+ setup_xfail "powerpc*-*-eabi*"
+ setup_xfail "v850*-*-elf"
+-setup_xfail "alpha*-*-elf*" "alpha*-*-linux-gnu*" "alpha*-*-gnu*"
++setup_xfail "alpha*-*-elf*" "alpha*-*-linux-gnu*" "alpha*-*-gnu*" "alpha*-*-linux-uclibc*"
+ setup_xfail "alpha*-*-netbsd*"
+ setup_xfail "hppa*-*-*"
+ setup_xfail "ia64-*-*"
+diff -urN binutils-2.16.90.0.2-dist/libtool.m4 binutils-2.16.90.0.2/libtool.m4
+--- binutils-2.16.90.0.2-dist/libtool.m4 2004-07-27 23:36:06.000000000 -0500
++++ binutils-2.16.90.0.2/libtool.m4 2005-04-30 11:35:54.062043784 -0500
+@@ -645,6 +645,11 @@
+ lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd* | knetbsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN binutils-2.16.90.0.2-dist/ltconfig binutils-2.16.90.0.2/ltconfig
+--- binutils-2.16.90.0.2-dist/ltconfig 2004-11-22 14:33:30.000000000 -0600
++++ binutils-2.16.90.0.2/ltconfig 2005-04-30 11:22:10.594229920 -0500
+@@ -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
+@@ -1270,6 +1271,23 @@
+ 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.
++ hardcode_into_libs=yes
++ # Assume using the uClibc dynamic linker.
++ dynamic_linker="uClibc ld.so"
++ ;;
++
+ netbsd*)
+ need_lib_prefix=no
+ need_version=no
+diff -urN binutils-2.16.90.0.2-dist/opcodes/configure binutils-2.16.90.0.2/opcodes/configure
+--- binutils-2.16.90.0.2-dist/opcodes/configure 2005-04-29 12:50:31.000000000 -0500
++++ binutils-2.16.90.0.2/opcodes/configure 2005-04-30 11:17:07.168357664 -0500
+@@ -3588,6 +3588,11 @@
+ lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd* | knetbsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/toolchain/binutils/patches/2.16.1/300-001_ld_makefile_patch.patch b/toolchain/binutils/patches/2.16.1/300-001_ld_makefile_patch.patch
new file mode 100644
index 0000000000..b25d5b7e21
--- /dev/null
+++ b/toolchain/binutils/patches/2.16.1/300-001_ld_makefile_patch.patch
@@ -0,0 +1,52 @@
+#!/bin/sh -e
+## 001_ld_makefile_patch.dpatch
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Description: correct where ld scripts are installed
+## DP: Author: Chris Chimelis <chris@debian.org>
+## DP: Upstream status: N/A
+## DP: Date: ??
+
+if [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+ -patch) patch $patch_opts -p1 < $0;;
+ -unpatch) patch $patch_opts -p1 -R < $0;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.am binutils-2.14.90.0.6/ld/Makefile.am
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.am 2003-08-21 16:28:48.000000000 +0100
++++ binutils-2.14.90.0.6/ld/Makefile.am 2003-09-10 23:12:09.000000000 +0100
+@@ -19,7 +19,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.in binutils-2.14.90.0.6/ld/Makefile.in
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.in 2003-08-21 16:28:48.000000000 +0100
++++ binutils-2.14.90.0.6/ld/Makefile.in 2003-09-10 23:12:09.000000000 +0100
+@@ -128,7 +128,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
diff --git a/toolchain/binutils/patches/2.16.1/300-006_better_file_error.patch b/toolchain/binutils/patches/2.16.1/300-006_better_file_error.patch
new file mode 100644
index 0000000000..f337611edf
--- /dev/null
+++ b/toolchain/binutils/patches/2.16.1/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/toolchain/binutils/patches/2.16.1/300-012_check_ldrunpath_length.patch b/toolchain/binutils/patches/2.16.1/300-012_check_ldrunpath_length.patch
new file mode 100644
index 0000000000..498651a90c
--- /dev/null
+++ b/toolchain/binutils/patches/2.16.1/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/toolchain/binutils/patches/2.16.1/702-binutils-skip-comments.patch b/toolchain/binutils/patches/2.16.1/702-binutils-skip-comments.patch
new file mode 100644
index 0000000000..9ef7a7c9ec
--- /dev/null
+++ b/toolchain/binutils/patches/2.16.1/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/toolchain/binutils/patches/2.17/100-uclibc-conf.patch b/toolchain/binutils/patches/2.17/100-uclibc-conf.patch
new file mode 100644
index 0000000000..25222e5df2
--- /dev/null
+++ b/toolchain/binutils/patches/2.17/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/toolchain/binutils/patches/2.17/110-arm-eabi-conf.patch b/toolchain/binutils/patches/2.17/110-arm-eabi-conf.patch
new file mode 100644
index 0000000000..be85ceb109
--- /dev/null
+++ b/toolchain/binutils/patches/2.17/110-arm-eabi-conf.patch
@@ -0,0 +1,24 @@
+diff -urN binutils-2.16.91.0.7.orig/configure binutils-2.16.91.0.7/configure
+--- binutils-2.16.91.0.7.orig/configure 2006-05-31 14:54:24.000000000 +0300
++++ binutils-2.16.91.0.7/configure 2006-05-31 14:55:53.000000000 +0300
+@@ -1299,7 +1299,7 @@
+ arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ ;;
+- arm*-*-linux-gnueabi)
++ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi)
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ noconfigdirs="$noconfigdirs target-libjava target-libobjc"
+ ;;
+diff -urN binutils-2.16.91.0.7.orig/configure.in binutils-2.16.91.0.7/configure.in
+--- binutils-2.16.91.0.7.orig/configure.in 2006-05-31 14:54:24.000000000 +0300
++++ binutils-2.16.91.0.7/configure.in 2006-05-31 14:55:53.000000000 +0300
+@@ -497,7 +497,7 @@
+ arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ ;;
+- arm*-*-linux-gnueabi)
++ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi)
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ noconfigdirs="$noconfigdirs target-libjava target-libobjc"
+ ;;
diff --git a/toolchain/binutils/patches/2.17/300-001_ld_makefile_patch.patch b/toolchain/binutils/patches/2.17/300-001_ld_makefile_patch.patch
new file mode 100644
index 0000000000..04a7e61e25
--- /dev/null
+++ b/toolchain/binutils/patches/2.17/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/toolchain/binutils/patches/2.17/300-006_better_file_error.patch b/toolchain/binutils/patches/2.17/300-006_better_file_error.patch
new file mode 100644
index 0000000000..f337611edf
--- /dev/null
+++ b/toolchain/binutils/patches/2.17/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/toolchain/binutils/patches/2.17/300-012_check_ldrunpath_length.patch b/toolchain/binutils/patches/2.17/300-012_check_ldrunpath_length.patch
new file mode 100644
index 0000000000..498651a90c
--- /dev/null
+++ b/toolchain/binutils/patches/2.17/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/toolchain/binutils/patches/2.17/702-binutils-skip-comments.patch b/toolchain/binutils/patches/2.17/702-binutils-skip-comments.patch
new file mode 100644
index 0000000000..9ef7a7c9ec
--- /dev/null
+++ b/toolchain/binutils/patches/2.17/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/toolchain/binutils/patches/400-mips-ELF_MAXPAGESIZE-4k.patch b/toolchain/binutils/patches/400-mips-ELF_MAXPAGESIZE-4k.patch
new file mode 100644
index 0000000000..a8ae110e86
--- /dev/null
+++ b/toolchain/binutils/patches/400-mips-ELF_MAXPAGESIZE-4k.patch
@@ -0,0 +1,12 @@
+diff -urN binutils-2.14.90.0.8.test/bfd/elf32-mips.c binutils-2.14.90.0.8/bfd/elf32-mips.c
+--- binutils-2.14.90.0.8.test/bfd/elf32-mips.c 2004-01-14 22:07:43.000000000 +0100
++++ binutils-2.14.90.0.8/bfd/elf32-mips.c 2005-03-03 23:44:00.000000000 +0100
+@@ -1611,7 +1611,7 @@
+
+ /* The SVR4 MIPS ABI says that this should be 0x10000, and Linux uses
+ page sizes of up to that limit, so we need to respect it. */
+-#define ELF_MAXPAGESIZE 0x10000
++#define ELF_MAXPAGESIZE 0x1000
+ #define elf32_bed elf32_tradbed
+
+ /* Include the target file again for this target. */
diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in
new file mode 100644
index 0000000000..f5f27c6907
--- /dev/null
+++ b/toolchain/gcc/Config.in
@@ -0,0 +1,51 @@
+# Choose gcc version.
+
+choice
+ prompt "GCC compiler Version" if TOOLCHAINOPTS
+ default GCC_VERSION_4_1_1 if LINUX_2_6_ARUBA
+ default GCC_VERSION_3_4_6
+ help
+ Select the version of gcc you wish to use.
+
+
+ config GCC_VERSION_3_4_4
+ bool "gcc 3.4.4"
+
+ config GCC_VERSION_3_4_5
+ bool "gcc 3.4.5"
+
+ config GCC_VERSION_3_4_6
+ bool "gcc 3.4.6"
+
+ config GCC_VERSION_3_4_6_nonmips
+ bool "gcc 3.4.6-nonmips"
+
+ config GCC_VERSION_4_0_2
+ bool "gcc 4.0.2"
+
+ config GCC_VERSION_4_0_3
+ bool "gcc 4.0.3"
+
+ config GCC_VERSION_4_1_0
+ bool "gcc 4.1.0"
+
+ config GCC_VERSION_4_1_1
+ bool "gcc 4.1.1"
+
+endchoice
+
+config EXTRA_GCC_CONFIG_OPTIONS
+ string
+ prompt "Additional gcc options" if TOOLCHAINOPTS
+ default ""
+ help
+ Any additional gcc options you may want to include....
+
+config INSTALL_LIBSTDCPP
+ bool
+ prompt "Build/install c++ compiler and libstdc++?" if TOOLCHAINOPTS
+ default y
+ help
+ Build/install c++ compiler and libstdc++?
+
+
diff --git a/toolchain/gcc/Config.version b/toolchain/gcc/Config.version
new file mode 100644
index 0000000000..e728bc4087
--- /dev/null
+++ b/toolchain/gcc/Config.version
@@ -0,0 +1,20 @@
+config GCC_VERSION
+ string
+ default "3.4.4" if GCC_VERSION_3_4_4
+ default "3.4.5" if GCC_VERSION_3_4_5
+ default "3.4.6" if GCC_VERSION_3_4_6
+ default "4.0.2" if GCC_VERSION_4_0_2
+ default "4.0.3" if GCC_VERSION_4_0_3
+ default "4.1.0" if GCC_VERSION_4_1_0
+ default "4.1.1" if GCC_VERSION_4_1_1
+ default "3.4.6-nonmips" if GCC_VERSION_3_4_6_nonmips
+ default "3.4.6"
+
+if !TOOLCHAINOPTS
+ config GCC_VERSION_4_1_1
+ default y if LINUX_2_6_ARUBA || LINUX_2_6_X86
+ config GCC_VERSION_4_0_3
+ default y if LINUX_2_6_XSCALE
+endif
+
+
diff --git a/toolchain/gcc/Makefile b/toolchain/gcc/Makefile
new file mode 100644
index 0000000000..7ef6005d06
--- /dev/null
+++ b/toolchain/gcc/Makefile
@@ -0,0 +1,143 @@
+# Makefile for to build a gcc/uClibc toolchain
+#
+# Copyright (C) 2002-2003 Erik Andersen <andersen@uclibc.org>
+# Copyright (C) 2004 Manuel Novoa III <mjn3@uclibc.org>
+# Copyright (C) 2005-2006 Felix Fietkau <nbd@openwrt.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=gcc
+PKG_VERSION:=$(strip $(subst ",, $(CONFIG_GCC_VERSION)))#"))
+
+PKG_SOURCE:=gcc-$(PKG_VERSION).tar.bz2
+PKG_MD5SUM:=unknown
+PKG_SOURCE_URL:=ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-$(PKG_VERSION) \
+ http://mirrors.rcn.net/pub/sourceware/gcc/releases/gcc-$(PKG_VERSION) \
+ ftp://ftp.gnu.org/gnu/gcc/releases/gcc-$(PKG_VERSION)
+PKG_CAT:=bzcat
+
+PKG_BUILD_DIR:=$(TOOLCHAIN_BUILD_DIR)/gcc-$(PKG_VERSION)
+
+TARGET_LANGUAGES:=c
+ifeq ($(CONFIG_INSTALL_LIBSTDCPP),y)
+TARGET_LANGUAGES:=$(TARGET_LANGUAGES),c++
+endif
+ifeq ($(CONFIG_INSTALL_LIBGCJ),y)
+TARGET_LANGUAGES:=$(TARGET_LANGUAGES),java
+endif
+
+include $(INCLUDE_DIR)/host-build.mk
+
+BUILD_DIR1:=$(TOOLCHAIN_BUILD_DIR)/gcc-$(PKG_VERSION)-initial
+BUILD_DIR2:=$(TOOLCHAIN_BUILD_DIR)/gcc-$(PKG_VERSION)-final
+
+override SHELL:=$(BASH)
+
+define Stage1/Configure
+ mkdir -p $(BUILD_DIR1)
+ (cd $(BUILD_DIR1); rm -f config.cache; \
+ $(PKG_BUILD_DIR)/configure \
+ --prefix=$(STAGING_DIR) \
+ --build=$(GNU_HOST_NAME) \
+ --host=$(GNU_HOST_NAME) \
+ --target=$(REAL_GNU_TARGET_NAME) \
+ --enable-languages=c \
+ --disable-shared \
+ --with-sysroot=$(TOOLCHAIN_BUILD_DIR)/uClibc_dev/ \
+ --disable-__cxa_atexit \
+ --enable-target-optspace \
+ --with-gnu-ld \
+ --disable-nls \
+ );
+endef
+define Stage1/Compile
+ $(MAKE) -C $(BUILD_DIR1) all-gcc
+endef
+define Stage1/Install
+ $(MAKE) -C $(BUILD_DIR1) install-gcc
+endef
+
+define Stage2/Configure
+ mkdir -p $(BUILD_DIR2)
+ # Important! Required for limits.h to be fixed.
+ rm -rf $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/sys-include
+ ln -sf ../include $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/sys-include
+ rm -rf $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib
+ ln -sf ../lib $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib
+ (cd $(BUILD_DIR2); rm -f config.cache; \
+ $(PKG_BUILD_DIR)/configure \
+ --prefix=$(STAGING_DIR) \
+ --build=$(GNU_HOST_NAME) \
+ --host=$(GNU_HOST_NAME) \
+ --target=$(REAL_GNU_TARGET_NAME) \
+ --enable-languages=$(TARGET_LANGUAGES) \
+ --enable-shared \
+ --disable-__cxa_atexit \
+ --enable-target-optspace \
+ --with-gnu-ld \
+ --disable-nls \
+ );
+endef
+define Stage2/Compile
+ $(MAKE) -C $(BUILD_DIR2) all
+endef
+define Stage2/Install
+ $(MAKE) -C $(BUILD_DIR2) install
+ echo $(PKG_VERSION) > $(STAGING_DIR)/gcc_version
+ # Set up the symlinks to enable lying about target name.
+ set -e; \
+ (cd $(STAGING_DIR); \
+ ln -sf $(REAL_GNU_TARGET_NAME) $(GNU_TARGET_NAME); \
+ cd bin; \
+ for app in $(REAL_GNU_TARGET_NAME)-* ; do \
+ ln -sf $$$${app} \
+ $(GNU_TARGET_NAME)$$$${app##$(REAL_GNU_TARGET_NAME)}; \
+ done; \
+ );
+endef
+
+define Build/Prepare
+ $(call Build/Prepare/Default)
+ $(SCRIPT_DIR)/patch-kernel.sh $(PKG_BUILD_DIR) ./patches/$(PKG_VERSION) \*.patch
+ $(SED) 's,\(version_string.. = "[0-9\.]*\).*\(";\),\1 (OpenWrt-2.0)\2,' $(PKG_BUILD_DIR)/gcc/version.c
+ $(SED) 's,\(bug_report_url.. = "\).*\(";\),\1<URL:https://dev.openwrt.org/>\2,' $(PKG_BUILD_DIR)/gcc/version.c
+endef
+
+define Build/Configure
+ $(call Stage1/Configure)
+endef
+
+define Build/Compile
+ $(call Stage1/Compile)
+ $(call Stage1/Install)
+endef
+
+define Build/Install
+ $(call Stage2/Configure)
+ $(call Stage2/Compile)
+ $(call Stage2/Install)
+endef
+
+define Build/Clean
+ rm -rf $(PKG_BUILD_DIR)
+ rm -rf $(BUILD_DIR1)
+ rm -rf $(BUILD_DIR2)
+ rm -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gc*
+ rm -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-c*
+endef
+
+$(eval $(call HostBuild))
diff --git a/toolchain/gcc/patches/3.4.4/100-uclibc-conf.patch b/toolchain/gcc/patches/3.4.4/100-uclibc-conf.patch
new file mode 100644
index 0000000000..29e4c802e2
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.4/100-uclibc-conf.patch
@@ -0,0 +1,442 @@
+diff -urN gcc-3.4.1-dist/boehm-gc/configure gcc-3.4.1/boehm-gc/configure
+--- gcc-3.4.1-dist/boehm-gc/configure 2004-07-01 14:14:03.000000000 -0500
++++ gcc-3.4.1/boehm-gc/configure 2004-08-12 16:22:57.000000000 -0500
+@@ -1947,6 +1947,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*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN gcc-3.4.1-dist/boehm-gc/ltconfig gcc-3.4.1/boehm-gc/ltconfig
+--- gcc-3.4.1-dist/boehm-gc/ltconfig 2002-11-20 09:59:06.000000000 -0600
++++ gcc-3.4.1/boehm-gc/ltconfig 2004-08-12 15:54:42.000000000 -0500
+@@ -1981,6 +1981,23 @@
+ fi
+ ;;
+
++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
++ deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
++ file_magic_cmd=/usr/bin/file
++ file_magic_test_file=`echo /lib/libuClibc-*.so`
++
++ # Assume using the uClibc dynamic linker.
++ dynamic_linker="uClibc ld.so"
++ ;;
++
+ netbsd*)
+ version_type=sunos
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h 2004-01-31 00:18:11.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-08-12 15:54:42.000000000 -0500
+@@ -81,6 +81,18 @@
+ "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC "%{h*} %{version:-v} \
++ %{b} %{Wl,*:%*} \
++ %{static:-Bstatic} \
++ %{shared:-shared} \
++ %{symbolic:-Bsymbolic} \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++ -X \
++ %{mbig-endian:-EB}" \
++ SUBTARGET_EXTRA_LINK_SPEC
++#else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+ %{b} %{Wl,*:%*} \
+ %{static:-Bstatic} \
+@@ -91,6 +103,7 @@
+ -X \
+ %{mbig-endian:-EB}" \
+ SUBTARGET_EXTRA_LINK_SPEC
++#endif
+
+ #define TARGET_OS_CPP_BUILTINS() LINUX_TARGET_OS_CPP_BUILTINS()
+
+diff -urN gcc-3.4.1-dist/gcc/config/cris/linux.h gcc-3.4.1/gcc/config/cris/linux.h
+--- gcc-3.4.1-dist/gcc/config/cris/linux.h 2003-11-28 21:08:09.000000000 -0600
++++ gcc-3.4.1/gcc/config/cris/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -79,6 +79,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++ -rpath-link include/asm/../..%s\
++ %{shared} %{static}\
++ %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++ %{!shared: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++ %{!r:%{O2|O3: --gc-sections}}"
++
++#else /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+
+@@ -93,6 +112,8 @@
+ %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+ %{!r:%{O2|O3: --gc-sections}}"
+
++#endif /* USE_UCLIBC */
++
+
+ /* Node: Run-time Target */
+
+diff -urN gcc-3.4.1-dist/gcc/config/cris/t-linux-uclibc gcc-3.4.1/gcc/config/cris/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/cris/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/cris/t-linux-uclibc 2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,3 @@
++T_CFLAGS = -DUSE_UCLIBC
++TARGET_LIBGCC2_CFLAGS += -fPIC
++CRTSTUFF_T_CFLAGS_S = $(TARGET_LIBGCC2_CFLAGS)
+diff -urN gcc-3.4.1-dist/gcc/config/i386/linux.h gcc-3.4.1/gcc/config/i386/linux.h
+--- gcc-3.4.1-dist/gcc/config/i386/linux.h 2003-11-28 21:08:10.000000000 -0600
++++ gcc-3.4.1/gcc/config/i386/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -118,6 +118,15 @@
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.1}} \
+ %{static:-static}}}"
+ #else
++#if defined USE_UCLIBC
++#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
++ %{!shared: \
++ %{!ibcs: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}}}"
++#else
+ #define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+@@ -126,6 +135,7 @@
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ %{static:-static}}}"
+ #endif
++#endif
+
+ /* A C statement (sans semicolon) to output to the stdio stream
+ FILE the assembler definition of uninitialized global DECL named
+diff -urN gcc-3.4.1-dist/gcc/config/mips/linux.h gcc-3.4.1/gcc/config/mips/linux.h
+--- gcc-3.4.1-dist/gcc/config/mips/linux.h 2004-06-15 20:42:24.000000000 -0500
++++ gcc-3.4.1/gcc/config/mips/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -109,6 +109,17 @@
+
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC \
++ "%(endian_spec) \
++ %{shared:-shared} \
++ %{!shared: \
++ %{!ibcs: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}}}"
++#else
+ #define LINK_SPEC \
+ "%(endian_spec) \
+ %{shared:-shared} \
+@@ -118,6 +129,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+ %{static:-static}}}"
++#endif
+
+ #undef SUBTARGET_ASM_SPEC
+ #define SUBTARGET_ASM_SPEC "\
+diff -urN gcc-3.4.1-dist/gcc/config/rs6000/linux.h gcc-3.4.1/gcc/config/rs6000/linux.h
+--- gcc-3.4.1-dist/gcc/config/rs6000/linux.h 2004-02-25 09:11:19.000000000 -0600
++++ gcc-3.4.1/gcc/config/rs6000/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -61,7 +61,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+
+ #undef LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+
+ #define LINK_GCC_C_SEQUENCE_SPEC \
+ "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+diff -urN gcc-3.4.1-dist/gcc/config/rs6000/sysv4.h gcc-3.4.1/gcc/config/rs6000/sysv4.h
+--- gcc-3.4.1-dist/gcc/config/rs6000/sysv4.h 2004-06-10 01:39:50.000000000 -0500
++++ gcc-3.4.1/gcc/config/rs6000/sysv4.h 2004-08-12 15:54:43.000000000 -0500
+@@ -947,6 +947,7 @@
+ mcall-linux : %(link_os_linux) ; \
+ mcall-gnu : %(link_os_gnu) ; \
+ mcall-netbsd : %(link_os_netbsd) ; \
++ mcall-linux-uclibc : %(link_os_linux_uclibc); \
+ mcall-openbsd: %(link_os_openbsd) ; \
+ : %(link_os_default) }"
+
+@@ -1124,6 +1125,10 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+ #endif
+@@ -1290,6 +1295,7 @@
+ { "link_os_sim", LINK_OS_SIM_SPEC }, \
+ { "link_os_freebsd", LINK_OS_FREEBSD_SPEC }, \
+ { "link_os_linux", LINK_OS_LINUX_SPEC }, \
++ { "link_os_linux_uclibc", LINK_OS_LINUX_UCLIBC_SPEC }, \
+ { "link_os_gnu", LINK_OS_GNU_SPEC }, \
+ { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \
+ { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \
+diff -urN gcc-3.4.1-dist/gcc/config/sh/linux.h gcc-3.4.1/gcc/config/sh/linux.h
+--- gcc-3.4.1-dist/gcc/config/sh/linux.h 2004-01-11 20:29:13.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -73,12 +73,21 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++ "%{shared:-shared} \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+ "%{shared:-shared} \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ %{static:-static}"
++#endif
+
+ #undef LIB_SPEC
+ #define LIB_SPEC \
+diff -urN gcc-3.4.1-dist/gcc/config/sh/t-linux-uclibc gcc-3.4.1/gcc/config/sh/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/sh/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/t-linux-uclibc 2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,13 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++TARGET_LIBGCC2_CFLAGS = -fpic -DNO_FPSCR_VALUES
++LIB1ASMFUNCS_CACHE = _ic_invalidate
++
++LIB2FUNCS_EXTRA=
++
++MULTILIB_OPTIONS= $(MULTILIB_ENDIAN) m3e/m4
++MULTILIB_DIRNAMES=
++MULTILIB_MATCHES =
++MULTILIB_EXCEPTIONS=
++
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
+diff -urN gcc-3.4.1-dist/gcc/config/sh/t-sh64-uclibc gcc-3.4.1/gcc/config/sh/t-sh64-uclibc
+--- gcc-3.4.1-dist/gcc/config/sh/t-sh64-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/t-sh64-uclibc 2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,13 @@
++EXTRA_MULTILIB_PARTS= crt1.o crti.o crtn.o crtbegin.o crtend.o
++
++LIB1ASMFUNCS = \
++ _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
++ _shcompact_call_trampoline _shcompact_return_trampoline \
++ _shcompact_incoming_args _ic_invalidate _nested_trampoline \
++ _push_pop_shmedia_regs \
++ _udivdi3 _divdi3 _umoddi3 _moddi3
++
++MULTILIB_OPTIONS = $(MULTILIB_ENDIAN) m5-32media-nofpu/m5-compact/m5-compact-nofpu/m5-64media/m5-64media-nofpu
++MULTILIB_DIRNAMES= $(MULTILIB_ENDIAN) nofpu compact nofpu/compact media64 nofpu/media64
++MULTILIB_MATCHES=
++MULTILIB_EXCEPTIONS=
+diff -urN gcc-3.4.1-dist/gcc/config/t-linux-uclibc gcc-3.4.1/gcc/config/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/t-linux-uclibc 2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,15 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Compile crtbeginS.o and crtendS.o with pic.
++CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
++# Compile libgcc2.a with pic.
++TARGET_LIBGCC2_CFLAGS = -fPIC
++
++# Override t-slibgcc-elf-ver to export some libgcc symbols with
++# the symbol versions that glibc used.
++#SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
++
++# Use unwind-dw2-fde
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
++ $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc 2004-04-21 10:12:35.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc 2004-08-12 15:59:46.000000000 -0500
+@@ -664,6 +664,12 @@
+ extra_parts=""
+ use_collect2=yes
+ ;;
++arm*-*-linux-uclibc*) # ARM GNU/Linux with ELF - uClibc
++ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++ tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
++ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++ gnu_ld=yes
++ ;;
+ arm*-*-linux*) # ARM GNU/Linux with ELF
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
+ tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+@@ -725,6 +731,10 @@
+ tmake_file="cris/t-cris cris/t-elfmulti"
+ gas=yes
+ ;;
++cris-*-linux-uclibc*)
++ tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
++ tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux-uclibc"
++ ;;
+ cris-*-linux*)
+ tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
+ tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux"
+@@ -988,6 +998,11 @@
+ thread_file='single'
+ fi
+ ;;
++i[34567]86-*-linux*uclibc*) # Intel 80386's running GNU/Linux
++ # with ELF format using uClibc
++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h"
++ tmake_file="t-slibgcc-elf-ver t-linux-uclibc i386/t-crtstuff"
++ ;;
+ i[34567]86-*-linux*) # Intel 80386's running GNU/Linux
+ # with ELF format using glibc 2
+ # aka GNU/Linux C library 6
+@@ -1547,6 +1562,16 @@
+ gnu_ld=yes
+ gas=yes
+ ;;
++mips*-*-linux-uclibc*) # Linux MIPS, either endian. uClibc
++ tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
++ case ${target} in
++ mipsisa32*-*)
++ target_cpu_default="MASK_SOFT_FLOAT"
++ tm_defines="MIPS_ISA_DEFAULT=32"
++ ;;
++ esac
++ tmake_file="t-slibgcc-elf-ver t-linux-uclibc"
++ ;;
+ mips*-*-linux*) # Linux MIPS, either endian.
+ tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
+ case ${target} in
+@@ -1764,6 +1789,10 @@
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxspe.h"
+ tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+ ;;
++powerpc-*-linux-uclibc*)
++ tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
++ tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux-uclibc rs6000/t-ppccomm"
++ ;;
+ powerpc-*-linux*)
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
+ tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+@@ -1916,7 +1945,7 @@
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/embed-elf.h sh/rtemself.h rtems.h"
+ ;;
+ sh-*-linux* | sh[2346lbe]*-*-linux*)
+- tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver t-linux"
++ tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver"
+ case ${target} in
+ sh*be-*-* | sh*eb-*-*) ;;
+ *)
+@@ -1924,9 +1953,17 @@
+ tmake_file="${tmake_file} sh/t-le"
+ ;;
+ esac
+- tmake_file="${tmake_file} sh/t-linux"
++ case ${target} in
++ *-*-linux-uclibc*) tmake_file="${tmake_file} t-linux-uclibc sh/t-linux-uclibc" ;;
++ *) tmake_file="${tmake_file} t-linux sh/t-linux" ;;
++ esac
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/linux.h"
+ case ${target} in
++ sh64*-*-linux-uclibc*)
++ tmake_file="${tmake_file} sh/t-sh64-uclibc"
++ tm_file="${tm_file} sh/sh64.h"
++ extra_headers="shmedia.h ushmedia.h sshmedia.h"
++ ;;
+ sh64*)
+ tmake_file="${tmake_file} sh/t-sh64"
+ tm_file="${tm_file} sh/sh64.h"
+diff -urN gcc-3.4.1-dist/libtool.m4 gcc-3.4.1/libtool.m4
+--- gcc-3.4.1-dist/libtool.m4 2004-05-18 04:08:37.000000000 -0500
++++ gcc-3.4.1/libtool.m4 2004-08-12 15:54:43.000000000 -0500
+@@ -689,6 +689,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*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN gcc-3.4.1-dist/ltconfig gcc-3.4.1/ltconfig
+--- gcc-3.4.1-dist/ltconfig 2004-03-05 15:05:41.000000000 -0600
++++ gcc-3.4.1/ltconfig 2004-08-12 15:55:48.000000000 -0500
+@@ -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
+@@ -1262,6 +1263,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/toolchain/gcc/patches/3.4.4/200-uclibc-locale.patch b/toolchain/gcc/patches/3.4.4/200-uclibc-locale.patch
new file mode 100644
index 0000000000..3fc4900b06
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.4/200-uclibc-locale.patch
@@ -0,0 +1,3246 @@
+diff -urN gcc-3.4.2-dist/libstdc++-v3/acinclude.m4 gcc-3.4.2/libstdc++-v3/acinclude.m4
+--- gcc-3.4.2-dist/libstdc++-v3/acinclude.m4 2004-07-15 12:42:45.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/acinclude.m4 2004-09-10 10:47:40.000000000 -0500
+@@ -996,7 +996,7 @@
+ AC_MSG_CHECKING([for C locale to use])
+ GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+ [use MODEL for target locale package],
+- [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++ [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
+
+ # If they didn't use this option switch, or if they specified --enable
+ # with no specific model, we'll have to look for one. If they
+@@ -1012,6 +1012,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case x${target_os} in
++ x*-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+ AC_EGREP_CPP([_GLIBCXX_ok], [
+ #include <features.h>
+@@ -1138,6 +1141,41 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ AC_MSG_RESULT(uclibc)
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++ AC_SUBST(glibcxx_MOFILES)
++ AC_SUBST(glibcxx_POFILES)
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/aclocal.m4 gcc-3.4.2/libstdc++-v3/aclocal.m4
+--- gcc-3.4.2-dist/libstdc++-v3/aclocal.m4 2004-08-13 15:44:03.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/aclocal.m4 2004-09-10 10:47:40.000000000 -0500
+@@ -1025,6 +1025,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case x${target_os} in
++ x*-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+ AC_EGREP_CPP([_GLIBCXX_ok], [
+ #include <features.h>
+@@ -1151,6 +1154,41 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ AC_MSG_RESULT(uclibc)
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++ AC_SUBST(glibcxx_MOFILES)
++ AC_SUBST(glibcxx_POFILES)
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,59 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,160 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno> // For errno
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L) strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B))
++#define __strtof_l(S, E, L) strtof((S), (E))
++#define __strtod_l(S, E, L) strtod((S), (E))
++#define __strtold_l(S, E, L) strtold((S), (E))
++#warning should dummy __newlocale check for C|POSIX ?
++#define __newlocale(a, b, c) NULL
++#define __freelocale(a) ((void)0)
++#define __duplocale(a) __c_locale()
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ float __f = __strtof_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __f;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ double __d = __strtod_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __d;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ long double __ld = __strtold_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __ld;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ void
++ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
++ __c_locale __old)
++ {
++ __cloc = __newlocale(1 << LC_ALL, __s, __old);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ if (!__cloc)
++ {
++ // This named locale is not supported by the underlying OS.
++ __throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++ "name not valid"));
++ }
++#endif
++ }
++
++ void
++ locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++ {
++ if (_S_get_c_locale() != __cloc)
++ __freelocale(__cloc);
++ }
++
++ __c_locale
++ locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++ { return __duplocale(__cloc); }
++} // namespace std
++
++namespace __gnu_cxx
++{
++ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++ {
++ "LC_CTYPE",
++ "LC_NUMERIC",
++ "LC_TIME",
++ "LC_COLLATE",
++ "LC_MONETARY",
++ "LC_MESSAGES",
++#if _GLIBCXX_NUM_CATEGORIES != 0
++ "LC_PAPER",
++ "LC_NAME",
++ "LC_ADDRESS",
++ "LC_TELEPHONE",
++ "LC_MEASUREMENT",
++ "LC_IDENTIFICATION"
++#endif
++ };
++}
++
++namespace std
++{
++ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++} // namespace std
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.h 2004-09-10 10:48:08.000000000 -0500
+@@ -0,0 +1,115 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _C_LOCALE_H
++#define _C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <cstring> // get std::strlen
++#include <cstdio> // get std::snprintf or std::sprintf
++#include <clocale>
++#include <langinfo.h> // For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h> // For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> // For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCXX_C_LOCALE_GNU for
++#endif
++#define _GLIBCXX_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCXX_NUM_CATEGORIES 6
++#define _GLIBCXX_NUM_CATEGORIES 0
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++ extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++ typedef __locale_t __c_locale;
++#else
++ typedef int* __c_locale;
++#endif
++
++ // Convert numeric value of type _Tv to string and return length of
++ // string. If snprintf is available use it, otherwise fall back to
++ // the unsafe sprintf which, in general, can be dangerous and should
++ // be avoided.
++ template<typename _Tv>
++ int
++ __convert_from_v(char* __out, const int __size, const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ _Tv __v, const __c_locale& __cloc, int __prec)
++ {
++ __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++ _Tv __v, const __c_locale&, int __prec)
++ {
++# ifdef __UCLIBC_HAS_LOCALE__
++ char* __old = std::setlocale(LC_ALL, NULL);
++ char* __sav = new char[std::strlen(__old) + 1];
++ std::strcpy(__sav, __old);
++ std::setlocale(LC_ALL, "C");
++# endif
++#endif
++
++ const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++ std::setlocale(LC_ALL, __sav);
++ delete [] __sav;
++#endif
++ return __ret;
++ }
++}
++
++#endif
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,306 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++ // Specializations.
++#ifdef _GLIBCXX_USE_WCHAR_T
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_out(state_type& __state, const intern_type* __from,
++ const intern_type* __from_end, const intern_type*& __from_next,
++ extern_type* __to, extern_type* __to_end,
++ extern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // wcsnrtombs is *very* fast but stops if encounters NUL characters:
++ // in case we fall back to wcrtomb and then continue, in a loop.
++ // NB: wcsnrtombs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
++ __from_end - __from_next);
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ const size_t __conv = wcsnrtombs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // wcrtomb.
++ for (; __from < __from_next; ++__from)
++ __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ extern_type __buf[MB_LEN_MAX];
++ __tmp_state = __state;
++ const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
++ if (__conv > static_cast<size_t>(__to_end - __to_next))
++ __ret = partial;
++ else
++ {
++ memcpy(__to_next, __buf, __conv);
++ __state = __tmp_state;
++ __to_next += __conv;
++ ++__from_next;
++ }
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_in(state_type& __state, const extern_type* __from,
++ const extern_type* __from_end, const extern_type*& __from_next,
++ intern_type* __to, intern_type* __to_end,
++ intern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we store a L'\0' and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
++ __from_end
++ - __from_next));
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ size_t __conv = mbsnrtowcs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (;; ++__to_next, __from += __conv)
++ {
++ __conv = mbrtowc(__to_next, __from, __from_end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __from_next = __from;
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ // It is unclear what to return in this case (see DR 382).
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ if (__to_next < __to_end)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from_next;
++ *__to_next++ = L'\0';
++ }
++ else
++ __ret = partial;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_encoding() const throw()
++ {
++ // XXX This implementation assumes that the encoding is
++ // stateless and is either single-byte or variable-width.
++ int __ret = 0;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ if (MB_CUR_MAX == 1)
++ __ret = 1;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_max_length() const throw()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ // XXX Probably wrong for stateful encodings.
++ int __ret = MB_CUR_MAX;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_length(state_type& __state, const extern_type* __from,
++ const extern_type* __end, size_t __max) const
++ {
++ int __ret = 0;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we advance past it and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++
++ // A dummy internal buffer is needed in order for mbsnrtocws to consider
++ // its fourth parameter (it wouldn't with NULL as first parameter).
++ wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
++ * __max));
++ while (__from < __end && __max)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
++ __end
++ - __from));
++ if (!__from_chunk_end)
++ __from_chunk_end = __end;
++
++ const extern_type* __tmp_from = __from;
++ size_t __conv = mbsnrtowcs(__to, &__from,
++ __from_chunk_end - __from,
++ __max, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (__from = __tmp_from;; __from += __conv)
++ {
++ __conv = mbrtowc(NULL, __from, __end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __state = __tmp_state;
++ __ret += __from - __tmp_from;
++ break;
++ }
++ if (!__from)
++ __from = __from_chunk_end;
++
++ __ret += __from - __tmp_from;
++ __max -= __conv;
++
++ if (__from < __end && __max)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from;
++ ++__ret;
++ --__max;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/collate_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L) strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++ // These are basically extensions to char_traits, and perhaps should
++ // be put there instead of here.
++ template<>
++ int
++ collate<char>::_M_compare(const char* __one, const char* __two) const
++ {
++ int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<char>::_M_transform(char* __to, const char* __from,
++ size_t __n) const
++ { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ int
++ collate<wchar_t>::_M_compare(const wchar_t* __one,
++ const wchar_t* __two) const
++ {
++ int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++ size_t __n) const
++ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,300 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L) wctype((S))
++#define __towupper_l(C, L) towupper((C))
++#define __towlower_l(C, L) towlower((C))
++#define __iswctype_l(C, M, L) iswctype((C), (M))
++#endif
++
++namespace std
++{
++ // NB: The other ctype<char> specializations are in src/locale.cc and
++ // various /config/os/* files.
++ template<>
++ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++ : ctype<char>(0, false, __refs)
++ {
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
++ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
++ this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
++ this->_M_table = this->_M_c_locale_ctype->__ctype_b;
++#endif
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ ctype<wchar_t>::__wmask_type
++ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++ {
++ __wmask_type __ret;
++ switch (__m)
++ {
++ case space:
++ __ret = __wctype_l("space", _M_c_locale_ctype);
++ break;
++ case print:
++ __ret = __wctype_l("print", _M_c_locale_ctype);
++ break;
++ case cntrl:
++ __ret = __wctype_l("cntrl", _M_c_locale_ctype);
++ break;
++ case upper:
++ __ret = __wctype_l("upper", _M_c_locale_ctype);
++ break;
++ case lower:
++ __ret = __wctype_l("lower", _M_c_locale_ctype);
++ break;
++ case alpha:
++ __ret = __wctype_l("alpha", _M_c_locale_ctype);
++ break;
++ case digit:
++ __ret = __wctype_l("digit", _M_c_locale_ctype);
++ break;
++ case punct:
++ __ret = __wctype_l("punct", _M_c_locale_ctype);
++ break;
++ case xdigit:
++ __ret = __wctype_l("xdigit", _M_c_locale_ctype);
++ break;
++ case alnum:
++ __ret = __wctype_l("alnum", _M_c_locale_ctype);
++ break;
++ case graph:
++ __ret = __wctype_l("graph", _M_c_locale_ctype);
++ break;
++ default:
++ __ret = 0;
++ }
++ return __ret;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_toupper(wchar_t __c) const
++ { return __towupper_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_tolower(wchar_t __c) const
++ { return __towlower_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ bool
++ ctype<wchar_t>::
++ do_is(mask __m, wchar_t __c) const
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ bool __ret = false;
++ const size_t __bitmasksize = 11;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__m & _M_bit[__bitcur]
++ && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
++ {
++ __ret = true;
++ break;
++ }
++ return __ret;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++ {
++ for (; __lo < __hi; ++__vec, ++__lo)
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ const size_t __bitmasksize = 11;
++ mask __m = 0;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
++ __m |= _M_bit[__bitcur];
++ *__vec = __m;
++ }
++ return __hi;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi && !this->do_is(__m, *__lo))
++ ++__lo;
++ return __lo;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++ {
++ while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++ ++__lo;
++ return __lo;
++ }
++
++ wchar_t
++ ctype<wchar_t>::
++ do_widen(char __c) const
++ { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<wchar_t>::
++ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++ {
++ while (__lo < __hi)
++ {
++ *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++ ++__lo;
++ ++__dest;
++ }
++ return __hi;
++ }
++
++ char
++ ctype<wchar_t>::
++ do_narrow(wchar_t __wc, char __dfault) const
++ {
++ if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++ return _M_narrow[__wc];
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ const int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
++ char* __dest) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ if (_M_narrow_ok)
++ while (__lo < __hi)
++ {
++ if (*__lo >= 0 && *__lo < 128)
++ *__dest = _M_narrow[*__lo];
++ else
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++ ++__lo;
++ ++__dest;
++ }
++ else
++ while (__lo < __hi)
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ ++__lo;
++ ++__dest;
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __hi;
++ }
++
++ void
++ ctype<wchar_t>::_M_initialize_ctype()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ wint_t __i;
++ for (__i = 0; __i < 128; ++__i)
++ {
++ const int __c = wctob(__i);
++ if (__c == EOF)
++ break;
++ else
++ _M_narrow[__i] = static_cast<char>(__c);
++ }
++ if (__i == 128)
++ _M_narrow_ok = true;
++ else
++ _M_narrow_ok = false;
++ for (size_t __j = 0;
++ __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
++ _M_widen[__j] = btowc(__j);
++
++ for (size_t __k = 0; __k <= 11; ++__k)
++ {
++ _M_bit[__k] = static_cast<mask>(_ISbit(__k));
++ _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ }
++#endif // _GLIBCXX_USE_WCHAR_T
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++ const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++ // Specializations.
++ template<>
++ string
++ messages<char>::do_get(catalog, int, int, const string& __dfault) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++ __uselocale(__old);
++ return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ const char* __msg = gettext(__dfault.c_str());
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return string(__msg);
++#else
++ const char* __msg = gettext(__dfault.c_str());
++ return string(__msg);
++#endif
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ wstring
++ messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++ {
++# ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ __uselocale(__old);
++ return _M_convert_from_char(__msg);
++# elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return _M_convert_from_char(__msg);
++# else
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ return _M_convert_from_char(__msg);
++# endif
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,118 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++ const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D) ((void)0)
++#define __bindtextdomain(D,P) ((void)0)
++#endif
++
++ // Non-virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::messages(size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
++ _M_name_messages(_S_get_c_name())
++ { }
++
++ template<typename _CharT>
++ messages<_CharT>::messages(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
++ _M_name_messages(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_messages = __tmp;
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
++ const char* __dir) const
++ {
++ __bindtextdomain(__s.c_str(), __dir);
++ return this->do_open(__s, __loc);
++ }
++
++ // Virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::~messages()
++ {
++ if (_M_name_messages != _S_get_c_name())
++ delete [] _M_name_messages;
++ _S_destroy_c_locale(_M_c_locale_messages);
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::do_open(const basic_string<char>& __s,
++ const locale&) const
++ {
++ // No error checking is done, assume the catalog exists and can
++ // be used.
++ __textdomain(__s.c_str());
++ return 0;
++ }
++
++ template<typename _CharT>
++ void
++ messages<_CharT>::do_close(catalog) const
++ { }
++
++ // messages_byname
++ template<typename _CharT>
++ messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++ : messages<_CharT>(__refs)
++ {
++ if (this->_M_name_messages != locale::facet::_S_get_c_name())
++ delete [] this->_M_name_messages;
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ this->_M_name_messages = __tmp;
++
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_messages);
++ this->_S_create_c_locale(this->_M_c_locale_messages, __s);
++ }
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,698 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ // Construct and return valid pattern consisting of some combination of:
++ // space none symbol sign value
++ money_base::pattern
++ money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++ {
++ pattern __ret;
++
++ // This insanely complicated routine attempts to construct a valid
++ // pattern for use with monyepunct. A couple of invariants:
++
++ // if (__precedes) symbol -> value
++ // else value -> symbol
++
++ // if (__space) space
++ // else none
++
++ // none == never first
++ // space never first or last
++
++ // Any elegant implementations of this are welcome.
++ switch (__posn)
++ {
++ case 0:
++ case 1:
++ // 1 The sign precedes the value and symbol.
++ __ret.field[0] = sign;
++ if (__space)
++ {
++ // Pattern starts with sign.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[3] = symbol;
++ }
++ __ret.field[2] = space;
++ }
++ else
++ {
++ // Pattern starts with sign and ends with none.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[3] = none;
++ }
++ break;
++ case 2:
++ // 2 The sign follows the value and symbol.
++ if (__space)
++ {
++ // Pattern either ends with sign.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[1] = space;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ // Pattern ends with sign then none.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[1] = symbol;
++ }
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ break;
++ case 3:
++ // 3 The sign immediately precedes the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = sign;
++ __ret.field[1] = symbol;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = sign;
++ __ret.field[3] = symbol;
++ }
++ else
++ {
++ __ret.field[1] = sign;
++ __ret.field[2] = symbol;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ case 4:
++ // 4 The sign immediately follows the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = sign;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = symbol;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ default:
++ ;
++ }
++ return __ret;
++ }
++
++ template<>
++ void
++ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == true
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ void
++ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == false
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ moneypunct<char, true>::~moneypunct()
++ { delete _M_data; }
++
++ template<>
++ moneypunct<char, false>::~moneypunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ {
++ uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++ _M_data->_M_atoms[__i] = btowc(uc);
++ }
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ void
++ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ {
++ uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++ _M_data->_M_atoms[__i] = btowc(uc);
++ }
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len;
++ __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ moneypunct<wchar_t, true>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++
++ template<>
++ moneypunct<wchar_t, false>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,183 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP,
++ __cloc));
++
++ // Check for NULL, which implies no grouping.
++ if (_M_data->_M_thousands_sep == '\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = "true";
++ _M_data->_M_truename_size = strlen(_M_data->_M_truename);
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = "false";
++ _M_data->_M_falsename_size = strlen(_M_data->_M_falsename);
++ }
++
++ template<>
++ numpunct<char>::~numpunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<wchar_t>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_S_get_c_locale());
++#endif
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ {
++ uc = static_cast<unsigned char>(__num_base::_S_atoms_out[__i]);
++ _M_data->_M_atoms_out[__i] = btowc(uc);
++ }
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ {
++ uc = static_cast<unsigned char>(__num_base::_S_atoms_in[__j]);
++ _M_data->_M_atoms_in[__j] = btowc(uc);
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++
++ if (_M_data->_M_thousands_sep == L'\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = L"true";
++ _M_data->_M_truename_size = wcslen(_M_data->_M_truename);
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = L"false";
++ _M_data->_M_falsename_size = wcslen(_M_data->_M_falsename);
++ }
++
++ template<>
++ numpunct<wchar_t>::~numpunct()
++ { delete _M_data; }
++ #endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.cc 2004-09-10 10:48:00.000000000 -0500
+@@ -0,0 +1,356 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __timepunct<char>::
++ _M_put(char* __s, size_t __maxlen, const char* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = strftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = '\0';
++ }
++
++ template<>
++ void
++ __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = "%m/%d/%y";
++ _M_data->_M_date_era_format = "%m/%d/%y";
++ _M_data->_M_time_format = "%H:%M:%S";
++ _M_data->_M_time_era_format = "%H:%M:%S";
++ _M_data->_M_date_time_format = "";
++ _M_data->_M_date_time_era_format = "";
++ _M_data->_M_am = "AM";
++ _M_data->_M_pm = "PM";
++ _M_data->_M_am_pm_format = "";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = "Sunday";
++ _M_data->_M_day2 = "Monday";
++ _M_data->_M_day3 = "Tuesday";
++ _M_data->_M_day4 = "Wednesday";
++ _M_data->_M_day5 = "Thursday";
++ _M_data->_M_day6 = "Friday";
++ _M_data->_M_day7 = "Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = "Sun";
++ _M_data->_M_aday2 = "Mon";
++ _M_data->_M_aday3 = "Tue";
++ _M_data->_M_aday4 = "Wed";
++ _M_data->_M_aday5 = "Thu";
++ _M_data->_M_aday6 = "Fri";
++ _M_data->_M_aday7 = "Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = "January";
++ _M_data->_M_month02 = "February";
++ _M_data->_M_month03 = "March";
++ _M_data->_M_month04 = "April";
++ _M_data->_M_month05 = "May";
++ _M_data->_M_month06 = "June";
++ _M_data->_M_month07 = "July";
++ _M_data->_M_month08 = "August";
++ _M_data->_M_month09 = "September";
++ _M_data->_M_month10 = "October";
++ _M_data->_M_month11 = "November";
++ _M_data->_M_month12 = "December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = "Jan";
++ _M_data->_M_amonth02 = "Feb";
++ _M_data->_M_amonth03 = "Mar";
++ _M_data->_M_amonth04 = "Apr";
++ _M_data->_M_amonth05 = "May";
++ _M_data->_M_amonth06 = "Jun";
++ _M_data->_M_amonth07 = "Jul";
++ _M_data->_M_amonth08 = "Aug";
++ _M_data->_M_amonth09 = "Sep";
++ _M_data->_M_amonth10 = "Oct";
++ _M_data->_M_amonth11 = "Nov";
++ _M_data->_M_amonth12 = "Dec";
++ }
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++ _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++ _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++ _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++ _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++ _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
++ _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
++ _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
++ _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++ _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++ _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++ _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++ _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++ _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++ _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
++ _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
++ _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
++ _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
++ _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
++ _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
++ _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
++ _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
++ _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
++ _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
++ _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
++ _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
++ _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
++ _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
++ _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
++ _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
++ _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
++ _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
++ _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
++ _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
++ _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
++ _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
++ _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
++ _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
++ _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
++ _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
++ _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
++ _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
++ _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ __timepunct<wchar_t>::
++ _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++ const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = L'\0';
++ }
++
++ template<>
++ void
++ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<wchar_t>;
++
++#warning wide time stuff
++// if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = L"%m/%d/%y";
++ _M_data->_M_date_era_format = L"%m/%d/%y";
++ _M_data->_M_time_format = L"%H:%M:%S";
++ _M_data->_M_time_era_format = L"%H:%M:%S";
++ _M_data->_M_date_time_format = L"";
++ _M_data->_M_date_time_era_format = L"";
++ _M_data->_M_am = L"AM";
++ _M_data->_M_pm = L"PM";
++ _M_data->_M_am_pm_format = L"";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = L"Sunday";
++ _M_data->_M_day2 = L"Monday";
++ _M_data->_M_day3 = L"Tuesday";
++ _M_data->_M_day4 = L"Wednesday";
++ _M_data->_M_day5 = L"Thursday";
++ _M_data->_M_day6 = L"Friday";
++ _M_data->_M_day7 = L"Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = L"Sun";
++ _M_data->_M_aday2 = L"Mon";
++ _M_data->_M_aday3 = L"Tue";
++ _M_data->_M_aday4 = L"Wed";
++ _M_data->_M_aday5 = L"Thu";
++ _M_data->_M_aday6 = L"Fri";
++ _M_data->_M_aday7 = L"Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = L"January";
++ _M_data->_M_month02 = L"February";
++ _M_data->_M_month03 = L"March";
++ _M_data->_M_month04 = L"April";
++ _M_data->_M_month05 = L"May";
++ _M_data->_M_month06 = L"June";
++ _M_data->_M_month07 = L"July";
++ _M_data->_M_month08 = L"August";
++ _M_data->_M_month09 = L"September";
++ _M_data->_M_month10 = L"October";
++ _M_data->_M_month11 = L"November";
++ _M_data->_M_month12 = L"December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = L"Jan";
++ _M_data->_M_amonth02 = L"Feb";
++ _M_data->_M_amonth03 = L"Mar";
++ _M_data->_M_amonth04 = L"Apr";
++ _M_data->_M_amonth05 = L"May";
++ _M_data->_M_amonth06 = L"Jun";
++ _M_data->_M_amonth07 = L"Jul";
++ _M_data->_M_amonth08 = L"Aug";
++ _M_data->_M_amonth09 = L"Sep";
++ _M_data->_M_amonth10 = L"Oct";
++ _M_data->_M_amonth11 = L"Nov";
++ _M_data->_M_amonth12 = L"Dec";
++ }
++#if 0
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ _M_data->_M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
++ _M_data->_M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
++ _M_data->_M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
++ _M_data->_M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
++ _M_data->_M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
++ _M_data->_M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
++ _M_data->_M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
++ _M_data->_M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
++ _M_data->_M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
++ _M_data->_M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
++ _M_data->_M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
++ _M_data->_M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
++ _M_data->_M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
++ _M_data->_M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
++ _M_data->_M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
++ _M_data->_M_aday2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
++ _M_data->_M_aday3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
++ _M_data->_M_aday4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
++ _M_data->_M_aday5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
++ _M_data->_M_aday6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
++ _M_data->_M_aday7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
++ _M_data->_M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
++ _M_data->_M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
++ _M_data->_M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
++ _M_data->_M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
++ _M_data->_M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
++ _M_data->_M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
++ _M_data->_M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
++ _M_data->_M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
++ _M_data->_M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
++ _M_data->_M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
++ _M_data->_M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
++ _M_data->_M_amonth02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
++ _M_data->_M_amonth03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
++ _M_data->_M_amonth04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
++ _M_data->_M_amonth05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
++ _M_data->_M_amonth06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
++ _M_data->_M_amonth07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
++ _M_data->_M_amonth08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
++ _M_data->_M_amonth09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
++ _M_data->_M_amonth10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
++ _M_data->_M_amonth11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
++ _M_data->_M_amonth12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
++ }
++#endif // 0
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
++ : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_timepunct = __tmp;
++ _M_initialize_timepunct(__cloc);
++ }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::~__timepunct()
++ {
++ if (_M_name_timepunct != _S_get_c_name())
++ delete [] _M_name_timepunct;
++ delete _M_data;
++ _S_destroy_c_locale(_M_c_locale_timepunct);
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_base.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_base.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,58 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ struct ctype_base
++ {
++ // Note: In uClibc, the following two types depend on configuration.
++
++ // Non-standard typedefs.
++ typedef const __ctype_touplow_t* __to_type;
++
++ // NB: Offsets into ctype<char>::_M_table force a particular size
++ // on the mask type. Because of this, we don't use an enum.
++ typedef __ctype_mask_t mask;
++ static const mask upper = _ISupper;
++ static const mask lower = _ISlower;
++ static const mask alpha = _ISalpha;
++ static const mask digit = _ISdigit;
++ static const mask xdigit = _ISxdigit;
++ static const mask space = _ISspace;
++ static const mask print = _ISprint;
++ static const mask graph = _ISalpha | _ISdigit | _ISpunct;
++ static const mask cntrl = _IScntrl;
++ static const mask punct = _ISpunct;
++ static const mask alnum = _ISalpha | _ISdigit;
++ };
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_inline.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++
++ bool
++ ctype<char>::
++ is(mask __m, char __c) const
++ { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++ const char*
++ ctype<char>::
++ is(const char* __low, const char* __high, mask* __vec) const
++ {
++ while (__low < __high)
++ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++ return __high;
++ }
++
++ const char*
++ ctype<char>::
++ scan_is(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++ ++__low;
++ return __low;
++ }
++
++ const char*
++ ctype<char>::
++ scan_not(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++ ++__low;
++ return __low;
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,92 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ const ctype_base::mask*
++ ctype<char>::classic_table() throw()
++ { return __C_ctype_b; }
++
++ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ char
++ ctype<char>::do_toupper(char __c) const
++ { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_toupper(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_toupper[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
++
++ char
++ ctype<char>::do_tolower(char __c) const
++ { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_tolower(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_tolower[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/os_defines.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/os_defines.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/os_defines.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,44 @@
++// Specific definitions for GNU/Linux -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here. This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
+diff -urN gcc-3.4.2-dist/libstdc++-v3/configure gcc-3.4.2/libstdc++-v3/configure
+--- gcc-3.4.2-dist/libstdc++-v3/configure 2004-08-13 15:44:04.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/configure 2004-09-10 10:47:40.000000000 -0500
+@@ -3878,6 +3878,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*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5545,6 +5550,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case x${target_os} in
++ xlinux-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+ cat >conftest.$ac_ext <<_ACEOF
+ #line $LINENO "configure"
+@@ -5759,6 +5767,77 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ echo "$as_me:$LINENO: result: uclibc" >&5
++echo "${ECHO_T}uclibc" >&6
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ if test -n "$check_msgfmt"; then
++ ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_check_msgfmt="yes"
++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++done
++
++ test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt=$ac_cv_prog_check_msgfmt
++if test -n "$check_msgfmt"; then
++ echo "$as_me:$LINENO: result: $check_msgfmt" >&5
++echo "${ECHO_T}$check_msgfmt" >&6
++else
++ echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++
++
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/configure.host gcc-3.4.2/libstdc++-v3/configure.host
+--- gcc-3.4.2-dist/libstdc++-v3/configure.host 2004-08-27 14:52:30.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/configure.host 2004-09-10 10:47:40.000000000 -0500
+@@ -217,6 +217,12 @@
+ ;;
+ esac
+
++# Override for uClibc since linux-uclibc gets mishandled above.
++case "${host_os}" in
++ *-uclibc*)
++ os_include_dir="os/uclibc"
++ ;;
++esac
+
+ # Set any OS-dependent and CPU-dependent bits.
+ # THIS TABLE IS SORTED. KEEP IT THAT WAY.
+diff -urN gcc-3.4.2-dist/libstdc++-v3/crossconfig.m4 gcc-3.4.2/libstdc++-v3/crossconfig.m4
+--- gcc-3.4.2-dist/libstdc++-v3/crossconfig.m4 2004-07-06 20:23:49.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/crossconfig.m4 2004-09-10 10:47:40.000000000 -0500
+@@ -138,6 +138,99 @@
+ ;;
+ esac
+ ;;
++ *-uclibc*)
++# Temporary hack until we implement the float versions of the libm funcs
++ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++ machine/endian.h machine/param.h sys/machine.h sys/types.h \
++ fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
++ SECTION_FLAGS='-ffunction-sections -fdata-sections'
++ AC_SUBST(SECTION_FLAGS)
++ GLIBCXX_CHECK_LINKER_FEATURES
++ GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
++ GLIBCXX_CHECK_WCHAR_T_SUPPORT
++
++ # For LFS.
++ AC_DEFINE(HAVE_INT64_T)
++ case "$target" in
++ *-uclinux*)
++ # Don't enable LFS with uClinux
++ ;;
++ *)
++ AC_DEFINE(_GLIBCXX_USE_LFS)
++ esac
++
++ # For showmanyc_helper().
++ AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
++ GLIBCXX_CHECK_POLL
++ GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
++
++ # For xsputn_2().
++ AC_CHECK_HEADERS(sys/uio.h)
++ GLIBCXX_CHECK_WRITEV
++
++# AC_DEFINE(HAVE_ACOSF)
++# AC_DEFINE(HAVE_ASINF)
++# AC_DEFINE(HAVE_ATANF)
++# AC_DEFINE(HAVE_ATAN2F)
++ AC_DEFINE(HAVE_CEILF)
++ AC_DEFINE(HAVE_COPYSIGN)
++# AC_DEFINE(HAVE_COPYSIGNF)
++# AC_DEFINE(HAVE_COSF)
++# AC_DEFINE(HAVE_COSHF)
++# AC_DEFINE(HAVE_EXPF)
++# AC_DEFINE(HAVE_FABSF)
++ AC_DEFINE(HAVE_FINITE)
++ AC_DEFINE(HAVE_FINITEF)
++ AC_DEFINE(HAVE_FLOORF)
++# AC_DEFINE(HAVE_FMODF)
++# AC_DEFINE(HAVE_FREXPF)
++ AC_DEFINE(HAVE_HYPOT)
++# AC_DEFINE(HAVE_HYPOTF)
++ AC_DEFINE(HAVE_ISINF)
++ AC_DEFINE(HAVE_ISINFF)
++ AC_DEFINE(HAVE_ISNAN)
++ AC_DEFINE(HAVE_ISNANF)
++# AC_DEFINE(HAVE_LOGF)
++# AC_DEFINE(HAVE_LOG10F)
++# AC_DEFINE(HAVE_MODFF)
++# AC_DEFINE(HAVE_SINF)
++# AC_DEFINE(HAVE_SINHF)
++# AC_DEFINE(HAVE_SINCOS)
++# AC_DEFINE(HAVE_SINCOSF)
++ AC_DEFINE(HAVE_SQRTF)
++# AC_DEFINE(HAVE_TANF)
++# AC_DEFINE(HAVE_TANHF)
++ if test x"long_double_math_on_this_cpu" = x"yes"; then
++ AC_MSG_ERROR([long_double_math_on_this_cpu is yes!])
++# AC_DEFINE(HAVE_ACOSL)
++# AC_DEFINE(HAVE_ASINL)
++# AC_DEFINE(HAVE_ATANL)
++# AC_DEFINE(HAVE_ATAN2L)
++# AC_DEFINE(HAVE_CEILL)
++# AC_DEFINE(HAVE_COPYSIGNL)
++# AC_DEFINE(HAVE_COSL)
++# AC_DEFINE(HAVE_COSHL)
++# AC_DEFINE(HAVE_EXPL)
++# AC_DEFINE(HAVE_FABSL)
++# AC_DEFINE(HAVE_FINITEL)
++# AC_DEFINE(HAVE_FLOORL)
++# AC_DEFINE(HAVE_FMODL)
++# AC_DEFINE(HAVE_FREXPL)
++# AC_DEFINE(HAVE_HYPOTL)
++# AC_DEFINE(HAVE_ISINFL)
++# AC_DEFINE(HAVE_ISNANL)
++# AC_DEFINE(HAVE_LOGL)
++# AC_DEFINE(HAVE_LOG10L)
++# AC_DEFINE(HAVE_MODFL)
++# AC_DEFINE(HAVE_POWL)
++# AC_DEFINE(HAVE_SINL)
++# AC_DEFINE(HAVE_SINHL)
++# AC_DEFINE(HAVE_SINCOSL)
++# AC_DEFINE(HAVE_SQRTL)
++# AC_DEFINE(HAVE_TANL)
++# AC_DEFINE(HAVE_TANHL)
++ fi
++ ;;
+ *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
+ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+ machine/endian.h machine/param.h sys/machine.h sys/types.h \
+@@ -152,7 +245,7 @@
+ AC_DEFINE(HAVE_INT64_T)
+ case "$target" in
+ *-uclinux*)
+- # Don't enable LFS with uClibc
++ # Don't enable LFS with uClinux
+ ;;
+ *)
+ AC_DEFINE(_GLIBCXX_USE_LFS)
+diff -urN gcc-3.4.2-dist/libstdc++-v3/include/c_compatibility/wchar.h gcc-3.4.2/libstdc++-v3/include/c_compatibility/wchar.h
+--- gcc-3.4.2-dist/libstdc++-v3/include/c_compatibility/wchar.h 2003-12-08 21:51:45.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/include/c_compatibility/wchar.h 2004-09-10 10:47:40.000000000 -0500
+@@ -101,7 +101,9 @@
+ using std::wmemcpy;
+ using std::wmemmove;
+ using std::wmemset;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using std::wcsftime;
++#endif
+
+ #if _GLIBCXX_USE_C99
+ using std::wcstold;
+diff -urN gcc-3.4.2-dist/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.4.2/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-3.4.2-dist/libstdc++-v3/include/c_std/std_cwchar.h 2004-07-20 03:52:12.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/include/c_std/std_cwchar.h 2004-09-10 10:47:40.000000000 -0500
+@@ -179,7 +179,9 @@
+ using ::wcscoll;
+ using ::wcscpy;
+ using ::wcscspn;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using ::wcsftime;
++#endif
+ using ::wcslen;
+ using ::wcsncat;
+ using ::wcsncmp;
diff --git a/toolchain/gcc/patches/3.4.4/300-libstdc++-pic.patch b/toolchain/gcc/patches/3.4.4/300-libstdc++-pic.patch
new file mode 100644
index 0000000000..c030ba6205
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.4/300-libstdc++-pic.patch
@@ -0,0 +1,47 @@
+# DP: Build and install libstdc++_pic.a library.
+
+--- gcc/libstdc++-v3/src/Makefile.am~ 2003-02-28 09:21:05.000000000 +0100
++++ gcc/libstdc++-v3/src/Makefile.am 2003-02-28 09:28:50.000000000 +0100
+@@ -224,6 +224,10 @@
+ @OPT_LDFLAGS@ @SECTION_LDFLAGS@ $(AM_CXXFLAGS) $(LDFLAGS) -o $@
+
+
++install-exec-local:
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Added bits to build debug library.
+ if GLIBCPP_BUILD_DEBUG
+ all-local: build_debug
+
+--- gcc/libstdc++-v3/src/Makefile.in~ 2004-02-21 09:55:48.000000000 +0100
++++ gcc/libstdc++-v3/src/Makefile.in 2004-02-21 09:59:34.000000000 +0100
+@@ -585,7 +585,7 @@
+
+ install-data-am: install-data-local
+
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+
+ install-info: install-info-am
+
+@@ -618,6 +618,7 @@
+ distclean-tags distdir dvi dvi-am info info-am install \
+ install-am install-data install-data-am install-data-local \
+ install-exec install-exec-am install-info install-info-am \
++ install-exec-local \
+ install-man install-strip install-toolexeclibLTLIBRARIES \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+@@ -707,6 +708,11 @@
+ install_debug:
+ (cd ${debugdir} && $(MAKE) \
+ toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
++
++install-exec-local:
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff --git a/toolchain/gcc/patches/3.4.4/601-gcc34-arm-ldm.patch b/toolchain/gcc/patches/3.4.4/601-gcc34-arm-ldm.patch
new file mode 100644
index 0000000000..142052fdf0
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.4/601-gcc34-arm-ldm.patch
@@ -0,0 +1,119 @@
+--- gcc-3.4.0/gcc/config/arm/arm.c.arm-ldm 2004-02-27 09:51:05.000000000 -0500
++++ gcc-3.4.0/gcc/config/arm/arm.c 2004-04-24 18:16:25.000000000 -0400
+@@ -8520,6 +8520,26 @@
+ return_used_this_function = 0;
+ }
+
++/* Return the number (counting from 0) of
++ the least significant set bit in MASK. */
++
++#ifdef __GNUC__
++inline
++#endif
++static int
++number_of_first_bit_set (mask)
++ int mask;
++{
++ int bit;
++
++ for (bit = 0;
++ (mask & (1 << bit)) == 0;
++ ++bit)
++ continue;
++
++ return bit;
++}
++
+ const char *
+ arm_output_epilogue (rtx sibling)
+ {
+@@ -8753,27 +8773,47 @@
+ saved_regs_mask |= (1 << PC_REGNUM);
+ }
+
+- /* Load the registers off the stack. If we only have one register
+- to load use the LDR instruction - it is faster. */
+- if (saved_regs_mask == (1 << LR_REGNUM))
+- {
+- /* The exception handler ignores the LR, so we do
+- not really need to load it off the stack. */
+- if (eh_ofs)
+- asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
+- else
+- asm_fprintf (f, "\tldr\t%r, [%r], #4\n", LR_REGNUM, SP_REGNUM);
+- }
+- else if (saved_regs_mask)
++ if (saved_regs_mask)
+ {
+- if (saved_regs_mask & (1 << SP_REGNUM))
+- /* Note - write back to the stack register is not enabled
+- (ie "ldmfd sp!..."). We know that the stack pointer is
+- in the list of registers and if we add writeback the
+- instruction becomes UNPREDICTABLE. */
+- print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
++ /* Load the registers off the stack. If we only have one register
++ to load use the LDR instruction - it is faster. */
++ if (bit_count (saved_regs_mask) == 1)
++ {
++ int reg = number_of_first_bit_set (saved_regs_mask);
++
++ switch (reg)
++ {
++ case SP_REGNUM:
++ /* Mustn't use base writeback when loading SP. */
++ asm_fprintf (f, "\tldr\t%r, [%r]\n", SP_REGNUM, SP_REGNUM);
++ break;
++
++ case LR_REGNUM:
++ if (eh_ofs)
++ {
++ /* The exception handler ignores the LR, so we do
++ not really need to load it off the stack. */
++ asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
++ break;
++ }
++ /* else fall through */
++
++ default:
++ asm_fprintf (f, "\tldr\t%r, [%r], #4\n", reg, SP_REGNUM);
++ break;
++ }
++ }
+ else
+- print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
++ {
++ if (saved_regs_mask & (1 << SP_REGNUM))
++ /* Note - write back to the stack register is not enabled
++ (ie "ldmfd sp!..."). We know that the stack pointer is
++ in the list of registers and if we add writeback the
++ instruction becomes UNPREDICTABLE. */
++ print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
++ else
++ print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
++ }
+ }
+
+ if (current_function_pretend_args_size)
+@@ -11401,22 +11441,6 @@
+ }
+ }
+
+-/* Return the number (counting from 0) of
+- the least significant set bit in MASK. */
+-
+-inline static int
+-number_of_first_bit_set (int mask)
+-{
+- int bit;
+-
+- for (bit = 0;
+- (mask & (1 << bit)) == 0;
+- ++bit)
+- continue;
+-
+- return bit;
+-}
+-
+ /* Generate code to return from a thumb function.
+ If 'reg_containing_return_addr' is -1, then the return address is
+ actually on the stack, at the stack pointer. */
diff --git a/toolchain/gcc/patches/3.4.4/602-sdk-libstdc++-includes.patch b/toolchain/gcc/patches/3.4.4/602-sdk-libstdc++-includes.patch
new file mode 100644
index 0000000000..4377c2143b
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.4/602-sdk-libstdc++-includes.patch
@@ -0,0 +1,22 @@
+--- gcc-3.4.1/libstdc++-v3/libmath/Makefile.am~ 2003-08-27 22:29:42.000000000 +0100
++++ gcc-3.4.1/libstdc++-v3/libmath/Makefile.am 2004-07-22 16:41:45.152130128 +0100
+@@ -32,7 +32,7 @@
+
+ libmath_la_SOURCES = stubs.c
+
+-AM_CPPFLAGS = $(CANADIAN_INCLUDES)
++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include
+
+ # Only compiling "C" sources in this directory.
+ LIBTOOL = @LIBTOOL@ --tag CC
+--- gcc-3.4.1/libstdc++-v3/fragment.am.old 2004-07-22 18:24:58.024083656 +0100
++++ gcc-3.4.1/libstdc++-v3/fragment.am 2004-07-22 18:24:59.019932264 +0100
+@@ -18,7 +18,7 @@
+ $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+
+ # -I/-D flags to pass when compiling.
+-AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include
+
+
+
diff --git a/toolchain/gcc/patches/3.4.4/700-pr15068-fix.patch b/toolchain/gcc/patches/3.4.4/700-pr15068-fix.patch
new file mode 100644
index 0000000000..2977765c5f
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.4/700-pr15068-fix.patch
@@ -0,0 +1,44 @@
+See http://gcc.gnu.org/PR15068
+
+Fixes error
+
+../sysdeps/generic/s_fmax.c: In function `__fmax':
+../sysdeps/generic/s_fmax.c:28: internal compiler error: in elim_reg_cond, at flow.c:3257
+Please submit a full bug report,
+with preprocessed source if appropriate.
+See <URL:http://gcc.gnu.org/bugs.html> for instructions.
+make[2]: *** [/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/build-glibc/math/s_fmax.o] Error 1
+make[2]: Leaving directory `/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/glibc-20040822/math'
+make[1]: *** [math/others] Error 2
+make[1]: Leaving directory `/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/glibc-20040822'
+make: *** [all] Error 2
+
+[ rediffed against gcc-3.4.1, with elbow grease, ending up with same thing as
+http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/flow.c.diff?cvsroot=gcc&only_with_tag=csl-arm-branch&r1=1.563.4.2&r2=1.563.4.3 ]
+
+--- gcc-3.4.1/gcc/flow.c.old 2004-02-27 19:39:19.000000000 -0800
++++ gcc-3.4.1/gcc/flow.c 2004-08-26 07:29:46.000000000 -0700
+@@ -1878,6 +1878,7 @@
+ rtx set_src = SET_SRC (pc_set (BB_END (bb)));
+ rtx cond_true = XEXP (set_src, 0);
+ rtx reg = XEXP (cond_true, 0);
++ enum rtx_code inv_cond;
+
+ if (GET_CODE (reg) == SUBREG)
+ reg = SUBREG_REG (reg);
+@@ -1886,11 +1887,13 @@
+ in the form of a comparison of a register against zero.
+ If the condition is more complex than that, then it is safe
+ not to record any information. */
+- if (GET_CODE (reg) == REG
++ inv_cond = reversed_comparison_code (cond_true, BB_END (bb));
++ if (inv_cond != UNKNOWN
++ && GET_CODE (reg) == REG
+ && XEXP (cond_true, 1) == const0_rtx)
+ {
+ rtx cond_false
+- = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
++ = gen_rtx_fmt_ee (inv_cond,
+ GET_MODE (cond_true), XEXP (cond_true, 0),
+ XEXP (cond_true, 1));
+ if (GET_CODE (XEXP (set_src, 1)) == PC)
diff --git a/toolchain/gcc/patches/3.4.4/800-arm-bigendian.patch b/toolchain/gcc/patches/3.4.4/800-arm-bigendian.patch
new file mode 100644
index 0000000000..0bae8f474c
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.4/800-arm-bigendian.patch
@@ -0,0 +1,70 @@
+By Lennert Buytenhek <buytenh@wantstofly.org>
+Adds support for arm*b-linux* big-endian ARM targets
+
+See http://gcc.gnu.org/PR16350
+
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h 2004-08-16 16:01:50.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-08-16 15:43:40.000000000 -0500
+@@ -30,17 +30,34 @@
+ /* Do not assume anything about header files. */
+ #define NO_IMPLICIT_EXTERN_C
+
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT ARM_FLAG_BIG_END
++#define TARGET_ENDIAN_OPTION "mbig-endian"
++#define TARGET_LINKER_EMULATION "armelfb_linux"
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#define TARGET_ENDIAN_OPTION "mlittle-endian"
++#define TARGET_LINKER_EMULATION "armelf_linux"
++#endif
++
+ /* Default is to use APCS-32 mode. */
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_APCS_32 | \
++ ARM_FLAG_MMU_TRAPS | \
++ TARGET_ENDIAN_DEFAULT )
+
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
+
+ #undef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" }
++ { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
+
+ #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+
+@@ -101,7 +118,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
+ -X \
+- %{mbig-endian:-EB}" \
++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+ #endif
+
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc 2004-08-16 16:01:50.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc 2004-08-16 16:01:25.000000000 -0500
+@@ -672,6 +672,11 @@
+ ;;
+ arm*-*-linux*) # ARM GNU/Linux with ELF
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++ case $target in
++ arm*b-*)
++ tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++ ;;
++ esac
+ tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ gnu_ld=yes
diff --git a/toolchain/gcc/patches/3.4.4/810-arm-bigendian-uclibc.patch b/toolchain/gcc/patches/3.4.4/810-arm-bigendian-uclibc.patch
new file mode 100644
index 0000000000..a4d87e2317
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.4/810-arm-bigendian-uclibc.patch
@@ -0,0 +1,27 @@
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h 2004-08-16 16:08:18.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-08-16 16:06:24.000000000 -0500
+@@ -107,7 +107,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
+ -X \
+- %{mbig-endian:-EB}" \
++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+ #else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc 2004-08-16 16:08:18.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc 2004-08-16 16:03:25.000000000 -0500
+@@ -666,6 +666,11 @@
+ ;;
+ arm*-*-linux-uclibc*) # ARM GNU/Linux with ELF - uClibc
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++ case $target in
++ arm*b-*)
++ tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++ ;;
++ esac
+ tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ gnu_ld=yes
diff --git a/toolchain/gcc/patches/3.4.4/830-gcc-bug-num-22167.patch b/toolchain/gcc/patches/3.4.4/830-gcc-bug-num-22167.patch
new file mode 100644
index 0000000000..c7419af90a
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.4/830-gcc-bug-num-22167.patch
@@ -0,0 +1,16 @@
+Index: gcc/gcse.c
+===================================================================
+RCS file: /cvs/gcc/gcc/gcc/gcse.c,v
+retrieving revision 1.288.2.9
+diff -u -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.288.2.9 gcse.c
+--- gcc/gcc/gcse.c 30 Oct 2004 18:02:53 -0000 1.288.2.9
++++ gcc/gcc/gcse.c 14 Jul 2005 13:19:57 -0000
+@@ -6445,7 +6445,7 @@ hoist_code (void)
+ insn_inserted_p = 0;
+
+ /* These tests should be the same as the tests above. */
+- if (TEST_BIT (hoist_vbeout[bb->index], i))
++ if (TEST_BIT (hoist_exprs[bb->index], i))
+ {
+ /* We've found a potentially hoistable expression, now
+ we look at every block BB dominates to see if it
diff --git a/toolchain/gcc/patches/3.4.4/arm-softfloat.patch.conditional b/toolchain/gcc/patches/3.4.4/arm-softfloat.patch.conditional
new file mode 100644
index 0000000000..19d1b90dac
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.4/arm-softfloat.patch.conditional
@@ -0,0 +1,270 @@
+Note... modified my mjn3 to not conflict with the big endian arm patch.
+Warning!!! Only the linux target is aware of TARGET_ENDIAN_DEFAULT.
+Also changed
+ #define SUBTARGET_EXTRA_ASM_SPEC "\
+ %{!mcpu=*:-mcpu=xscale} \
+ %{mhard-float:-mfpu=fpa} \
+ %{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+to
+ #define SUBTARGET_EXTRA_ASM_SPEC "\
+ %{mhard-float:-mfpu=fpa} \
+ %{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+in gcc/config/arm/linux-elf.h.
+#
+# Submitted:
+#
+# Dimitry Andric <dimitry@andric.com>, 2004-05-01
+#
+# Description:
+#
+# Nicholas Pitre released this patch for gcc soft-float support here:
+# http://lists.arm.linux.org.uk/pipermail/linux-arm/2003-October/006436.html
+#
+# This version has been adapted to work with gcc 3.4.0.
+#
+# The original patch doesn't distinguish between softfpa and softvfp modes
+# in the way Nicholas Pitre probably meant. His description is:
+#
+# "Default is to use APCS-32 mode with soft-vfp. The old Linux default for
+# floats can be achieved with -mhard-float or with the configure
+# --with-float=hard option. If -msoft-float or --with-float=soft is used then
+# software float support will be used just like the default but with the legacy
+# big endian word ordering for double float representation instead."
+#
+# Which means the following:
+#
+# * If you compile without -mhard-float or -msoft-float, you should get
+# software floating point, using the VFP format. The produced object file
+# should have these flags in its header:
+#
+# private flags = 600: [APCS-32] [VFP float format] [software FP]
+#
+# * If you compile with -mhard-float, you should get hardware floating point,
+# which always uses the FPA format. Object file header flags should be:
+#
+# private flags = 0: [APCS-32] [FPA float format]
+#
+# * If you compile with -msoft-float, you should get software floating point,
+# using the FPA format. This is done for compatibility reasons with many
+# existing distributions. Object file header flags should be:
+#
+# private flags = 200: [APCS-32] [FPA float format] [software FP]
+#
+# The original patch from Nicholas Pitre contained the following constructs:
+#
+# #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+# %{mhard-float:-mfpu=fpa} \
+# %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
+#
+# However, gcc doesn't accept this ";:" notation, used in the 3rd line. This
+# is probably the reason Robert Schwebel modified it to:
+#
+# #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+# %{mhard-float:-mfpu=fpa} \
+# %{!mhard-float: %{msoft-float:-mfpu=softfpa -mfpu=softvfp}}"
+#
+# But this causes the following behaviour:
+#
+# * If you compile without -mhard-float or -msoft-float, the compiler generates
+# software floating point instructions, but *nothing* is passed to the
+# assembler, which results in an object file which has flags:
+#
+# private flags = 0: [APCS-32] [FPA float format]
+#
+# This is not correct!
+#
+# * If you compile with -mhard-float, the compiler generates hardware floating
+# point instructions, and passes "-mfpu=fpa" to the assembler, which results
+# in an object file which has the same flags as in the previous item, but now
+# those *are* correct.
+#
+# * If you compile with -msoft-float, the compiler generates software floating
+# point instructions, and passes "-mfpu=softfpa -mfpu=softvfp" (in that
+# order) to the assembler, which results in an object file with flags:
+#
+# private flags = 600: [APCS-32] [VFP float format] [software FP]
+#
+# This is not correct, because the last "-mfpu=" option on the assembler
+# command line determines the actual FPU convention used (which should be FPA
+# in this case).
+#
+# Therefore, I modified this patch to get the desired behaviour. Every
+# instance of the notation:
+#
+# %{msoft-float:-mfpu=softfpa -mfpu=softvfp}
+#
+# was changed to:
+#
+# %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}
+#
+# I also did the following:
+#
+# * Modified all TARGET_DEFAULT macros I could find to include ARM_FLAG_VFP, to
+# be consistent with Nicholas' original patch.
+# * Removed any "msoft-float" or "mhard-float" from all MULTILIB_DEFAULTS
+# macros I could find. I think that if you compile without any options, you
+# would like to get the defaults. :)
+# * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed
+# anymore. (The required functions are now in libgcc.)
+
+diff -urN gcc-3.4.1-old/gcc/config/arm/coff.h gcc-3.4.1/gcc/config/arm/coff.h
+--- gcc-3.4.1-old/gcc/config/arm/coff.h 2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/coff.h 2004-09-02 21:51:15.000000000 -0500
+@@ -31,11 +31,16 @@
+ #define TARGET_VERSION fputs (" (ARM/coff)", stderr)
+
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_SOFT_FLOAT \
++ | ARM_FLAG_VFP \
++ | ARM_FLAG_APCS_32 \
++ | ARM_FLAG_APCS_FRAME \
++ | ARM_FLAG_MMU_TRAPS )
+
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork" }
++ { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork" }
+ #endif
+
+ /* This is COFF, but prefer stabs. */
+diff -urN gcc-3.4.1-old/gcc/config/arm/elf.h gcc-3.4.1/gcc/config/arm/elf.h
+--- gcc-3.4.1-old/gcc/config/arm/elf.h 2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/elf.h 2004-09-02 21:51:15.000000000 -0500
+@@ -46,7 +46,9 @@
+
+ #ifndef SUBTARGET_ASM_FLOAT_SPEC
+ #define SUBTARGET_ASM_FLOAT_SPEC "\
+-%{mapcs-float:-mfloat} %{msoft-float:-mfpu=softfpa}"
++%{mapcs-float:-mfloat} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ #endif
+
+ #ifndef ASM_SPEC
+@@ -106,12 +108,17 @@
+ #endif
+
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_SOFT_FLOAT \
++ | ARM_FLAG_VFP \
++ | ARM_FLAG_APCS_32 \
++ | ARM_FLAG_APCS_FRAME \
++ | ARM_FLAG_MMU_TRAPS )
+ #endif
+
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
++ { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
+ #endif
+
+ #define TARGET_ASM_FILE_START_APP_OFF true
+diff -urN gcc-3.4.1-old/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/linux-elf.h 2004-09-02 21:50:52.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-09-02 22:00:49.000000000 -0500
+@@ -44,12 +44,26 @@
+ #define TARGET_LINKER_EMULATION "armelf_linux"
+ #endif
+
+-/* Default is to use APCS-32 mode. */
++/*
++ * Default is to use APCS-32 mode with soft-vfp.
++ * The old Linux default for floats can be achieved with -mhard-float
++ * or with the configure --with-float=hard option.
++ * If -msoft-float or --with-float=soft is used then software float
++ * support will be used just like the default but with the legacy
++ * big endian word ordering for double float representation instead.
++ */
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT \
+- ( ARM_FLAG_APCS_32 | \
+- ARM_FLAG_MMU_TRAPS | \
+- TARGET_ENDIAN_DEFAULT )
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_APCS_32 \
++ | ARM_FLAG_SOFT_FLOAT \
++ | TARGET_ENDIAN_DEFAULT \
++ | ARM_FLAG_VFP \
++ | ARM_FLAG_MMU_TRAPS )
++
++#undef SUBTARGET_EXTRA_ASM_SPEC
++#define SUBTARGET_EXTRA_ASM_SPEC "\
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+
+@@ -57,7 +71,7 @@
+
+ #undef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
++ { "marm", TARGET_ENDIAN_OPTION, "mapcs-32", "mno-thumb-interwork" }
+
+ #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+
+@@ -72,7 +86,7 @@
+ %{shared:-lc} \
+ %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
+
+-#define LIBGCC_SPEC "%{msoft-float:-lfloat} -lgcc"
++#define LIBGCC_SPEC "-lgcc"
+
+ /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add
+ the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
+diff -urN gcc-3.4.1-old/gcc/config/arm/t-linux gcc-3.4.1/gcc/config/arm/t-linux
+--- gcc-3.4.1-old/gcc/config/arm/t-linux 2003-09-20 16:09:07.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/t-linux 2004-09-02 21:51:15.000000000 -0500
+@@ -4,7 +4,10 @@
+ LIBGCC2_DEBUG_CFLAGS = -g0
+
+ LIB1ASMSRC = arm/lib1funcs.asm
+-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx
++LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \
++ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
++ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
++ _fixsfsi _fixunssfsi
+
+ # MULTILIB_OPTIONS = mhard-float/msoft-float
+ # MULTILIB_DIRNAMES = hard-float soft-float
+diff -urN gcc-3.4.1-old/gcc/config/arm/unknown-elf.h gcc-3.4.1/gcc/config/arm/unknown-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/unknown-elf.h 2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/unknown-elf.h 2004-09-02 21:51:15.000000000 -0500
+@@ -30,7 +30,12 @@
+
+ /* Default to using APCS-32 and software floating point. */
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_SOFT_FLOAT \
++ | ARM_FLAG_VFP \
++ | ARM_FLAG_APCS_32 \
++ | ARM_FLAG_APCS_FRAME \
++ | ARM_FLAG_MMU_TRAPS )
+ #endif
+
+ /* Now we define the strings used to build the spec file. */
+diff -urN gcc-3.4.1-old/gcc/config/arm/xscale-elf.h gcc-3.4.1/gcc/config/arm/xscale-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/xscale-elf.h 2003-07-01 18:26:43.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/xscale-elf.h 2004-09-02 21:51:15.000000000 -0500
+@@ -49,11 +49,12 @@
+ endian, regardless of the endian-ness of the memory
+ system. */
+
+-#define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+- %{mhard-float:-mfpu=fpa} \
+- %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
++#define SUBTARGET_EXTRA_ASM_SPEC "\
++%{!mcpu=*:-mcpu=xscale} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "mlittle-endian", "mno-thumb-interwork", "marm", "msoft-float" }
++ { "mlittle-endian", "mno-thumb-interwork", "marm" }
+ #endif
diff --git a/toolchain/gcc/patches/3.4.5/100-uclibc-conf.patch b/toolchain/gcc/patches/3.4.5/100-uclibc-conf.patch
new file mode 100644
index 0000000000..6bc73a427a
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.5/100-uclibc-conf.patch
@@ -0,0 +1,462 @@
+--- gcc-3.4.1/gcc/config.gcc
++++ gcc-3.4.1/gcc/config.gcc
+@@ -2310,10 +2310,16 @@
+ *)
+ echo "*** Configuration ${target} not supported" 1>&2
+ exit 1
+ ;;
+ esac
++
++# Rather than hook into each target, just do it after all the linux
++# targets have been processed
++case ${target} in
++*-linux-uclibc*) tm_defines="${tm_defines} USE_UCLIBC"
++esac
+
+ # Support for --with-cpu and related options (and a few unrelated options,
+ # too).
+ case ${with_cpu} in
+ yes | no)
+--- gcc-3.4.4/gcc/config/alpha/linux-elf.h
++++ gcc-3.4.4/gcc/config/alpha/linux-elf.h
+@@ -27,7 +27,11 @@
+ #define SUBTARGET_EXTRA_SPECS \
+ { "elf_dynamic_linker", ELF_DYNAMIC_LINKER },
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
+ #define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+
+ #define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \
+ %{O*:-O3} %{!O*:-O1} \
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h 2004-01-31 00:18:11.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-08-12 15:54:42.000000000 -0500
+@@ -80,14 +80,19 @@
+ #define ENDFILE_SPEC \
+ "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "%{h*} %{version:-v} \
+ %{b} %{Wl,*:%*} \
+ %{static:-Bstatic} \
+ %{shared:-shared} \
+ %{symbolic:-Bsymbolic} \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "} \
+ -X \
+ %{mbig-endian:-EB}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+--- gcc-3.4.1-dist/gcc/config/cris/linux.h 2003-11-28 21:08:09.000000000 -0600
++++ gcc-3.4.1/gcc/config/cris/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -79,6 +79,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++ -rpath-link include/asm/../..%s\
++ %{shared} %{static}\
++ %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++ %{!shared: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++ %{!r:%{O2|O3: --gc-sections}}"
++
++#else /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+
+@@ -93,6 +112,8 @@
+ %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+ %{!r:%{O2|O3: --gc-sections}}"
+
++#endif /* USE_UCLIBC */
++
+
+ /* Node: Run-time Target */
+
+--- gcc-3.4.1-dist/gcc/config/i386/linux.h 2003-11-28 21:08:10.000000000 -0600
++++ gcc-3.4.1/gcc/config/i386/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -110,22 +110,21 @@
+
+ #undef LINK_SPEC
+ #ifdef USE_GNULIBC_1
+-#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+- %{!shared: \
+- %{!ibcs: \
+- %{!static: \
+- %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.1}} \
+- %{static:-static}}}"
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.1"
++#else
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
+ #else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
++#endif
+ #define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}}"
+-#endif
+
+ /* A C statement (sans semicolon) to output to the stdio stream
+ FILE the assembler definition of uninitialized global DECL named
+--- gcc-3.4.4/gcc/config/i386/linux64.h
++++ gcc-3.4.4/gcc/config/i386/linux64.h
+@@ -54,14 +54,21 @@
+ When the -shared link option is used a final link is not being
+ done. */
+
++#ifdef USE_UCLIBC
++#define ELF32_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64-uClibc.so.0"
++#else
++#define ELF32_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#define ELF64_DYNAMIC_LINKER "/lib64/ld-linux-x86-64.so.2"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{m32:%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+- %{!m32:%{!dynamic-linker:-dynamic-linker /lib64/ld-linux-x86-64.so.2}}} \
++ %{m32:%{!dynamic-linker:-dynamic-linker " ELF32_DYNAMIC_LINKER "}} \
++ %{!m32:%{!dynamic-linker:-dynamic-linker " ELF64_DYNAMIC_LINKER "}}} \
+ %{static:-static}}"
+
+ #define MULTILIB_DEFAULTS { "m64" }
+--- gcc-3.4.4/gcc/config/ia64/linux.h
++++ gcc-3.4.4/gcc/config/ia64/linux.h
+@@ -37,13 +37,18 @@
+ /* Define this for shared library support because it isn't in the main
+ linux.h file. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "\
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux-ia64.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}"
+
+
+--- gcc-3.4.4/gcc/config/m68k/linux.h
++++ gcc-3.4.4/gcc/config/m68k/linux.h
+@@ -131,12 +131,17 @@
+
+ /* If ELF is the default format, we should not use /lib/elf. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "-m m68kelf %{shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker*:-dynamic-linker /lib/ld.so.1}} \
++ %{!dynamic-linker*:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static}}"
+
+ /* For compatibility with linux/a.out */
+--- gcc-3.4.1-dist/gcc/config/mips/linux.h 2004-06-15 20:42:24.000000000 -0500
++++ gcc-3.4.1/gcc/config/mips/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -109,14 +109,19 @@
+
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #define LINK_SPEC \
+ "%(endian_spec) \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}}"
+
+ #undef SUBTARGET_ASM_SPEC
+--- gcc-3.4.4/gcc/config/pa/pa-linux.h
++++ gcc-3.4.4/gcc/config/pa/pa-linux.h
+@@ -77,13 +77,18 @@
+ /* Define this for shared library support because it isn't in the main
+ linux.h file. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "\
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}"
+
+ /* glibc's profiling functions don't need gcc to allocate counters. */
+--- gcc-3.4.1-dist/gcc/config/rs6000/linux.h 2004-02-25 09:11:19.000000000 -0600
++++ gcc-3.4.1/gcc/config/rs6000/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -69,7 +69,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+
+ #undef LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+
+ #define LINK_GCC_C_SEQUENCE_SPEC \
+ "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+--- gcc-3.4.1-dist/gcc/config/rs6000/sysv4.h 2004-06-10 01:39:50.000000000 -0500
++++ gcc-3.4.1/gcc/config/rs6000/sysv4.h 2004-08-12 15:54:43.000000000 -0500
+@@ -947,6 +947,7 @@
+ mcall-linux : %(link_os_linux) ; \
+ mcall-gnu : %(link_os_gnu) ; \
+ mcall-netbsd : %(link_os_netbsd) ; \
++ mcall-linux-uclibc : %(link_os_linux_uclibc); \
+ mcall-openbsd: %(link_os_openbsd) ; \
+ : %(link_os_default) }"
+
+@@ -1125,6 +1126,10 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+ #endif
+@@ -1291,6 +1296,7 @@
+ { "link_os_sim", LINK_OS_SIM_SPEC }, \
+ { "link_os_freebsd", LINK_OS_FREEBSD_SPEC }, \
+ { "link_os_linux", LINK_OS_LINUX_SPEC }, \
++ { "link_os_linux_uclibc", LINK_OS_LINUX_UCLIBC_SPEC }, \
+ { "link_os_gnu", LINK_OS_GNU_SPEC }, \
+ { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \
+ { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \
+--- gcc-3.4.4/gcc/config/s390/linux.h
++++ gcc-3.4.4/gcc/config/s390/linux.h
+@@ -77,6 +77,13 @@
+ #define MULTILIB_DEFAULTS { "m31" }
+ #endif
+
++#ifdef USE_UCLIBC
++#define ELF31_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64-uClibc.so.0"
++#else
++#define ELF31_DYNAMIC_LINKER "/lib/ld.so.1"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64.so.1"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC \
+ "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
+@@ -86,8 +93,8 @@
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker: \
+- %{m31:-dynamic-linker /lib/ld.so.1} \
+- %{m64:-dynamic-linker /lib/ld64.so.1}}}}"
++ %{m31:-dynamic-linker " ELF31_DYNAMIC_LINKER "} \
++ %{m64:-dynamic-linker " ELF64_DYNAMIC_LINKER "}}}}"
+
+
+ #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
+--- gcc-3.4.1-dist/gcc/config/sh/linux.h 2004-01-11 20:29:13.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -73,11 +73,16 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+ #define SUBTARGET_LINK_SPEC \
+ "%{shared:-shared} \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}"
+
+ #undef LIB_SPEC
+--- gcc-3.4.4/gcc/config/sparc/linux.h
++++ gcc-3.4.4/gcc/config/sparc/linux.h
+@@ -162,13 +162,18 @@
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.1}} \
+ %{static:-static}}}"
+ #else
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+ #define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
+ %{!mno-relax:%{!r:-relax}} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}}"
+ #endif
+
+--- gcc-3.4.4/gcc/config/sparc/linux64.h
++++ gcc-3.4.4/gcc/config/sparc/linux64.h
+@@ -167,12 +166,17 @@
+ { "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \
+ { "link_arch", LINK_ARCH_SPEC },
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+ #define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}} \
+ "
+
+--- gcc-3.4.1-dist/libtool.m4 2004-05-18 04:08:37.000000000 -0500
++++ gcc-3.4.1/libtool.m4 2004-08-12 15:54:43.000000000 -0500
+@@ -689,6 +689,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*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+--- gcc-3.4.1-dist/ltconfig 2004-03-05 15:05:41.000000000 -0600
++++ gcc-3.4.1/ltconfig 2004-08-12 15:55:48.000000000 -0500
+@@ -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
+@@ -1262,6 +1263,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
+--- gcc-3.4.1-dist/boehm-gc/configure 2004-07-01 14:14:03.000000000 -0500
++++ gcc-3.4.1/boehm-gc/configure 2004-08-12 16:22:57.000000000 -0500
+@@ -1947,6 +1947,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*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+--- gcc-3.4.1-dist/boehm-gc/ltconfig 2002-11-20 09:59:06.000000000 -0600
++++ gcc-3.4.1/boehm-gc/ltconfig 2004-08-12 15:54:42.000000000 -0500
+@@ -1981,6 +1981,23 @@
+ fi
+ ;;
+
++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
++ deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
++ file_magic_cmd=/usr/bin/file
++ file_magic_test_file=`echo /lib/libuClibc-*.so`
++
++ # Assume using the uClibc dynamic linker.
++ dynamic_linker="uClibc ld.so"
++ ;;
++
+ netbsd*)
+ version_type=sunos
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
diff --git a/toolchain/gcc/patches/3.4.5/200-uclibc-locale.patch b/toolchain/gcc/patches/3.4.5/200-uclibc-locale.patch
new file mode 100644
index 0000000000..a97f22b49a
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.5/200-uclibc-locale.patch
@@ -0,0 +1,3255 @@
+diff -urN gcc-3.4.2-dist/libstdc++-v3/acinclude.m4 gcc-3.4.2/libstdc++-v3/acinclude.m4
+--- gcc-3.4.2-dist/libstdc++-v3/acinclude.m4 2004-07-15 12:42:45.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/acinclude.m4 2004-09-10 10:47:40.000000000 -0500
+@@ -996,7 +996,7 @@
+ AC_MSG_CHECKING([for C locale to use])
+ GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+ [use MODEL for target locale package],
+- [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++ [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
+
+ # If they didn't use this option switch, or if they specified --enable
+ # with no specific model, we'll have to look for one. If they
+@@ -1012,6 +1012,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case x${target_os} in
++ x*-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+ AC_EGREP_CPP([_GLIBCXX_ok], [
+ #include <features.h>
+@@ -1138,6 +1141,41 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ AC_MSG_RESULT(uclibc)
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++ AC_SUBST(glibcxx_MOFILES)
++ AC_SUBST(glibcxx_POFILES)
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/aclocal.m4 gcc-3.4.2/libstdc++-v3/aclocal.m4
+--- gcc-3.4.2-dist/libstdc++-v3/aclocal.m4 2004-08-13 15:44:03.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/aclocal.m4 2004-09-10 10:47:40.000000000 -0500
+@@ -1025,6 +1025,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case x${target_os} in
++ x*-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+ AC_EGREP_CPP([_GLIBCXX_ok], [
+ #include <features.h>
+@@ -1151,6 +1154,41 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ AC_MSG_RESULT(uclibc)
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++ AC_SUBST(glibcxx_MOFILES)
++ AC_SUBST(glibcxx_POFILES)
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,59 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,160 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno> // For errno
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L) strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B))
++#define __strtof_l(S, E, L) strtof((S), (E))
++#define __strtod_l(S, E, L) strtod((S), (E))
++#define __strtold_l(S, E, L) strtold((S), (E))
++#warning should dummy __newlocale check for C|POSIX ?
++#define __newlocale(a, b, c) NULL
++#define __freelocale(a) ((void)0)
++#define __duplocale(a) __c_locale()
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ float __f = __strtof_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __f;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ double __d = __strtod_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __d;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ long double __ld = __strtold_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __ld;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ void
++ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
++ __c_locale __old)
++ {
++ __cloc = __newlocale(1 << LC_ALL, __s, __old);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ if (!__cloc)
++ {
++ // This named locale is not supported by the underlying OS.
++ __throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++ "name not valid"));
++ }
++#endif
++ }
++
++ void
++ locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++ {
++ if (_S_get_c_locale() != __cloc)
++ __freelocale(__cloc);
++ }
++
++ __c_locale
++ locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++ { return __duplocale(__cloc); }
++} // namespace std
++
++namespace __gnu_cxx
++{
++ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++ {
++ "LC_CTYPE",
++ "LC_NUMERIC",
++ "LC_TIME",
++ "LC_COLLATE",
++ "LC_MONETARY",
++ "LC_MESSAGES",
++#if _GLIBCXX_NUM_CATEGORIES != 0
++ "LC_PAPER",
++ "LC_NAME",
++ "LC_ADDRESS",
++ "LC_TELEPHONE",
++ "LC_MEASUREMENT",
++ "LC_IDENTIFICATION"
++#endif
++ };
++}
++
++namespace std
++{
++ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++} // namespace std
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.h 2004-09-10 10:48:08.000000000 -0500
+@@ -0,0 +1,115 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _C_LOCALE_H
++#define _C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <cstring> // get std::strlen
++#include <cstdio> // get std::snprintf or std::sprintf
++#include <clocale>
++#include <langinfo.h> // For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h> // For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> // For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCXX_C_LOCALE_GNU for
++#endif
++#define _GLIBCXX_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCXX_NUM_CATEGORIES 6
++#define _GLIBCXX_NUM_CATEGORIES 0
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++ extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++ typedef __locale_t __c_locale;
++#else
++ typedef int* __c_locale;
++#endif
++
++ // Convert numeric value of type _Tv to string and return length of
++ // string. If snprintf is available use it, otherwise fall back to
++ // the unsafe sprintf which, in general, can be dangerous and should
++ // be avoided.
++ template<typename _Tv>
++ int
++ __convert_from_v(char* __out, const int __size, const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ _Tv __v, const __c_locale& __cloc, int __prec)
++ {
++ __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++ _Tv __v, const __c_locale&, int __prec)
++ {
++# ifdef __UCLIBC_HAS_LOCALE__
++ char* __old = std::setlocale(LC_ALL, NULL);
++ char* __sav = new char[std::strlen(__old) + 1];
++ std::strcpy(__sav, __old);
++ std::setlocale(LC_ALL, "C");
++# endif
++#endif
++
++ const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++ std::setlocale(LC_ALL, __sav);
++ delete [] __sav;
++#endif
++ return __ret;
++ }
++}
++
++#endif
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,306 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++ // Specializations.
++#ifdef _GLIBCXX_USE_WCHAR_T
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_out(state_type& __state, const intern_type* __from,
++ const intern_type* __from_end, const intern_type*& __from_next,
++ extern_type* __to, extern_type* __to_end,
++ extern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // wcsnrtombs is *very* fast but stops if encounters NUL characters:
++ // in case we fall back to wcrtomb and then continue, in a loop.
++ // NB: wcsnrtombs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
++ __from_end - __from_next);
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ const size_t __conv = wcsnrtombs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // wcrtomb.
++ for (; __from < __from_next; ++__from)
++ __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ extern_type __buf[MB_LEN_MAX];
++ __tmp_state = __state;
++ const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
++ if (__conv > static_cast<size_t>(__to_end - __to_next))
++ __ret = partial;
++ else
++ {
++ memcpy(__to_next, __buf, __conv);
++ __state = __tmp_state;
++ __to_next += __conv;
++ ++__from_next;
++ }
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_in(state_type& __state, const extern_type* __from,
++ const extern_type* __from_end, const extern_type*& __from_next,
++ intern_type* __to, intern_type* __to_end,
++ intern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we store a L'\0' and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
++ __from_end
++ - __from_next));
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ size_t __conv = mbsnrtowcs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (;; ++__to_next, __from += __conv)
++ {
++ __conv = mbrtowc(__to_next, __from, __from_end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __from_next = __from;
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ // It is unclear what to return in this case (see DR 382).
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ if (__to_next < __to_end)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from_next;
++ *__to_next++ = L'\0';
++ }
++ else
++ __ret = partial;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_encoding() const throw()
++ {
++ // XXX This implementation assumes that the encoding is
++ // stateless and is either single-byte or variable-width.
++ int __ret = 0;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ if (MB_CUR_MAX == 1)
++ __ret = 1;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_max_length() const throw()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ // XXX Probably wrong for stateful encodings.
++ int __ret = MB_CUR_MAX;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_length(state_type& __state, const extern_type* __from,
++ const extern_type* __end, size_t __max) const
++ {
++ int __ret = 0;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we advance past it and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++
++ // A dummy internal buffer is needed in order for mbsnrtocws to consider
++ // its fourth parameter (it wouldn't with NULL as first parameter).
++ wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
++ * __max));
++ while (__from < __end && __max)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
++ __end
++ - __from));
++ if (!__from_chunk_end)
++ __from_chunk_end = __end;
++
++ const extern_type* __tmp_from = __from;
++ size_t __conv = mbsnrtowcs(__to, &__from,
++ __from_chunk_end - __from,
++ __max, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (__from = __tmp_from;; __from += __conv)
++ {
++ __conv = mbrtowc(NULL, __from, __end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __state = __tmp_state;
++ __ret += __from - __tmp_from;
++ break;
++ }
++ if (!__from)
++ __from = __from_chunk_end;
++
++ __ret += __from - __tmp_from;
++ __max -= __conv;
++
++ if (__from < __end && __max)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from;
++ ++__ret;
++ --__max;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/collate_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L) strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++ // These are basically extensions to char_traits, and perhaps should
++ // be put there instead of here.
++ template<>
++ int
++ collate<char>::_M_compare(const char* __one, const char* __two) const
++ {
++ int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<char>::_M_transform(char* __to, const char* __from,
++ size_t __n) const
++ { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ int
++ collate<wchar_t>::_M_compare(const wchar_t* __one,
++ const wchar_t* __two) const
++ {
++ int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++ size_t __n) const
++ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,300 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L) wctype((S))
++#define __towupper_l(C, L) towupper((C))
++#define __towlower_l(C, L) towlower((C))
++#define __iswctype_l(C, M, L) iswctype((C), (M))
++#endif
++
++namespace std
++{
++ // NB: The other ctype<char> specializations are in src/locale.cc and
++ // various /config/os/* files.
++ template<>
++ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++ : ctype<char>(0, false, __refs)
++ {
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
++ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
++ this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
++ this->_M_table = this->_M_c_locale_ctype->__ctype_b;
++#endif
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ ctype<wchar_t>::__wmask_type
++ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++ {
++ __wmask_type __ret;
++ switch (__m)
++ {
++ case space:
++ __ret = __wctype_l("space", _M_c_locale_ctype);
++ break;
++ case print:
++ __ret = __wctype_l("print", _M_c_locale_ctype);
++ break;
++ case cntrl:
++ __ret = __wctype_l("cntrl", _M_c_locale_ctype);
++ break;
++ case upper:
++ __ret = __wctype_l("upper", _M_c_locale_ctype);
++ break;
++ case lower:
++ __ret = __wctype_l("lower", _M_c_locale_ctype);
++ break;
++ case alpha:
++ __ret = __wctype_l("alpha", _M_c_locale_ctype);
++ break;
++ case digit:
++ __ret = __wctype_l("digit", _M_c_locale_ctype);
++ break;
++ case punct:
++ __ret = __wctype_l("punct", _M_c_locale_ctype);
++ break;
++ case xdigit:
++ __ret = __wctype_l("xdigit", _M_c_locale_ctype);
++ break;
++ case alnum:
++ __ret = __wctype_l("alnum", _M_c_locale_ctype);
++ break;
++ case graph:
++ __ret = __wctype_l("graph", _M_c_locale_ctype);
++ break;
++ default:
++ __ret = 0;
++ }
++ return __ret;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_toupper(wchar_t __c) const
++ { return __towupper_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_tolower(wchar_t __c) const
++ { return __towlower_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ bool
++ ctype<wchar_t>::
++ do_is(mask __m, wchar_t __c) const
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ bool __ret = false;
++ const size_t __bitmasksize = 11;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__m & _M_bit[__bitcur]
++ && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
++ {
++ __ret = true;
++ break;
++ }
++ return __ret;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++ {
++ for (; __lo < __hi; ++__vec, ++__lo)
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ const size_t __bitmasksize = 11;
++ mask __m = 0;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
++ __m |= _M_bit[__bitcur];
++ *__vec = __m;
++ }
++ return __hi;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi && !this->do_is(__m, *__lo))
++ ++__lo;
++ return __lo;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++ {
++ while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++ ++__lo;
++ return __lo;
++ }
++
++ wchar_t
++ ctype<wchar_t>::
++ do_widen(char __c) const
++ { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<wchar_t>::
++ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++ {
++ while (__lo < __hi)
++ {
++ *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++ ++__lo;
++ ++__dest;
++ }
++ return __hi;
++ }
++
++ char
++ ctype<wchar_t>::
++ do_narrow(wchar_t __wc, char __dfault) const
++ {
++ if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++ return _M_narrow[__wc];
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ const int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
++ char* __dest) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ if (_M_narrow_ok)
++ while (__lo < __hi)
++ {
++ if (*__lo >= 0 && *__lo < 128)
++ *__dest = _M_narrow[*__lo];
++ else
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++ ++__lo;
++ ++__dest;
++ }
++ else
++ while (__lo < __hi)
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ ++__lo;
++ ++__dest;
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __hi;
++ }
++
++ void
++ ctype<wchar_t>::_M_initialize_ctype()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ wint_t __i;
++ for (__i = 0; __i < 128; ++__i)
++ {
++ const int __c = wctob(__i);
++ if (__c == EOF)
++ break;
++ else
++ _M_narrow[__i] = static_cast<char>(__c);
++ }
++ if (__i == 128)
++ _M_narrow_ok = true;
++ else
++ _M_narrow_ok = false;
++ for (size_t __j = 0;
++ __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
++ _M_widen[__j] = btowc(__j);
++
++ for (size_t __k = 0; __k <= 11; ++__k)
++ {
++ _M_bit[__k] = static_cast<mask>(_ISbit(__k));
++ _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ }
++#endif // _GLIBCXX_USE_WCHAR_T
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++ const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++ // Specializations.
++ template<>
++ string
++ messages<char>::do_get(catalog, int, int, const string& __dfault) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++ __uselocale(__old);
++ return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ const char* __msg = gettext(__dfault.c_str());
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return string(__msg);
++#else
++ const char* __msg = gettext(__dfault.c_str());
++ return string(__msg);
++#endif
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ wstring
++ messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++ {
++# ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ __uselocale(__old);
++ return _M_convert_from_char(__msg);
++# elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return _M_convert_from_char(__msg);
++# else
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ return _M_convert_from_char(__msg);
++# endif
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,118 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++ const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D) ((void)0)
++#define __bindtextdomain(D,P) ((void)0)
++#endif
++
++ // Non-virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::messages(size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
++ _M_name_messages(_S_get_c_name())
++ { }
++
++ template<typename _CharT>
++ messages<_CharT>::messages(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
++ _M_name_messages(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_messages = __tmp;
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
++ const char* __dir) const
++ {
++ __bindtextdomain(__s.c_str(), __dir);
++ return this->do_open(__s, __loc);
++ }
++
++ // Virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::~messages()
++ {
++ if (_M_name_messages != _S_get_c_name())
++ delete [] _M_name_messages;
++ _S_destroy_c_locale(_M_c_locale_messages);
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::do_open(const basic_string<char>& __s,
++ const locale&) const
++ {
++ // No error checking is done, assume the catalog exists and can
++ // be used.
++ __textdomain(__s.c_str());
++ return 0;
++ }
++
++ template<typename _CharT>
++ void
++ messages<_CharT>::do_close(catalog) const
++ { }
++
++ // messages_byname
++ template<typename _CharT>
++ messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++ : messages<_CharT>(__refs)
++ {
++ if (this->_M_name_messages != locale::facet::_S_get_c_name())
++ delete [] this->_M_name_messages;
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ this->_M_name_messages = __tmp;
++
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_messages);
++ this->_S_create_c_locale(this->_M_c_locale_messages, __s);
++ }
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,698 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ // Construct and return valid pattern consisting of some combination of:
++ // space none symbol sign value
++ money_base::pattern
++ money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++ {
++ pattern __ret;
++
++ // This insanely complicated routine attempts to construct a valid
++ // pattern for use with monyepunct. A couple of invariants:
++
++ // if (__precedes) symbol -> value
++ // else value -> symbol
++
++ // if (__space) space
++ // else none
++
++ // none == never first
++ // space never first or last
++
++ // Any elegant implementations of this are welcome.
++ switch (__posn)
++ {
++ case 0:
++ case 1:
++ // 1 The sign precedes the value and symbol.
++ __ret.field[0] = sign;
++ if (__space)
++ {
++ // Pattern starts with sign.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[3] = symbol;
++ }
++ __ret.field[2] = space;
++ }
++ else
++ {
++ // Pattern starts with sign and ends with none.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[3] = none;
++ }
++ break;
++ case 2:
++ // 2 The sign follows the value and symbol.
++ if (__space)
++ {
++ // Pattern either ends with sign.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[1] = space;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ // Pattern ends with sign then none.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[1] = symbol;
++ }
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ break;
++ case 3:
++ // 3 The sign immediately precedes the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = sign;
++ __ret.field[1] = symbol;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = sign;
++ __ret.field[3] = symbol;
++ }
++ else
++ {
++ __ret.field[1] = sign;
++ __ret.field[2] = symbol;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ case 4:
++ // 4 The sign immediately follows the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = sign;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = symbol;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ default:
++ ;
++ }
++ return __ret;
++ }
++
++ template<>
++ void
++ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == true
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ void
++ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == false
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ moneypunct<char, true>::~moneypunct()
++ { delete _M_data; }
++
++ template<>
++ moneypunct<char, false>::~moneypunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ {
++ uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++ _M_data->_M_atoms[__i] = btowc(uc);
++ }
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ void
++ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ {
++ uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++ _M_data->_M_atoms[__i] = btowc(uc);
++ }
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len;
++ __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ moneypunct<wchar_t, true>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++
++ template<>
++ moneypunct<wchar_t, false>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,183 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP,
++ __cloc));
++
++ // Check for NULL, which implies no grouping.
++ if (_M_data->_M_thousands_sep == '\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = "true";
++ _M_data->_M_truename_size = strlen(_M_data->_M_truename);
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = "false";
++ _M_data->_M_falsename_size = strlen(_M_data->_M_falsename);
++ }
++
++ template<>
++ numpunct<char>::~numpunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<wchar_t>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_S_get_c_locale());
++#endif
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ {
++ uc = static_cast<unsigned char>(__num_base::_S_atoms_out[__i]);
++ _M_data->_M_atoms_out[__i] = btowc(uc);
++ }
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ {
++ uc = static_cast<unsigned char>(__num_base::_S_atoms_in[__j]);
++ _M_data->_M_atoms_in[__j] = btowc(uc);
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++
++ if (_M_data->_M_thousands_sep == L'\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = L"true";
++ _M_data->_M_truename_size = wcslen(_M_data->_M_truename);
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = L"false";
++ _M_data->_M_falsename_size = wcslen(_M_data->_M_falsename);
++ }
++
++ template<>
++ numpunct<wchar_t>::~numpunct()
++ { delete _M_data; }
++ #endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.cc 2004-09-10 10:48:00.000000000 -0500
+@@ -0,0 +1,356 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __timepunct<char>::
++ _M_put(char* __s, size_t __maxlen, const char* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = strftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = '\0';
++ }
++
++ template<>
++ void
++ __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = "%m/%d/%y";
++ _M_data->_M_date_era_format = "%m/%d/%y";
++ _M_data->_M_time_format = "%H:%M:%S";
++ _M_data->_M_time_era_format = "%H:%M:%S";
++ _M_data->_M_date_time_format = "";
++ _M_data->_M_date_time_era_format = "";
++ _M_data->_M_am = "AM";
++ _M_data->_M_pm = "PM";
++ _M_data->_M_am_pm_format = "";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = "Sunday";
++ _M_data->_M_day2 = "Monday";
++ _M_data->_M_day3 = "Tuesday";
++ _M_data->_M_day4 = "Wednesday";
++ _M_data->_M_day5 = "Thursday";
++ _M_data->_M_day6 = "Friday";
++ _M_data->_M_day7 = "Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = "Sun";
++ _M_data->_M_aday2 = "Mon";
++ _M_data->_M_aday3 = "Tue";
++ _M_data->_M_aday4 = "Wed";
++ _M_data->_M_aday5 = "Thu";
++ _M_data->_M_aday6 = "Fri";
++ _M_data->_M_aday7 = "Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = "January";
++ _M_data->_M_month02 = "February";
++ _M_data->_M_month03 = "March";
++ _M_data->_M_month04 = "April";
++ _M_data->_M_month05 = "May";
++ _M_data->_M_month06 = "June";
++ _M_data->_M_month07 = "July";
++ _M_data->_M_month08 = "August";
++ _M_data->_M_month09 = "September";
++ _M_data->_M_month10 = "October";
++ _M_data->_M_month11 = "November";
++ _M_data->_M_month12 = "December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = "Jan";
++ _M_data->_M_amonth02 = "Feb";
++ _M_data->_M_amonth03 = "Mar";
++ _M_data->_M_amonth04 = "Apr";
++ _M_data->_M_amonth05 = "May";
++ _M_data->_M_amonth06 = "Jun";
++ _M_data->_M_amonth07 = "Jul";
++ _M_data->_M_amonth08 = "Aug";
++ _M_data->_M_amonth09 = "Sep";
++ _M_data->_M_amonth10 = "Oct";
++ _M_data->_M_amonth11 = "Nov";
++ _M_data->_M_amonth12 = "Dec";
++ }
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++ _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++ _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++ _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++ _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++ _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
++ _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
++ _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
++ _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++ _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++ _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++ _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++ _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++ _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++ _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
++ _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
++ _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
++ _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
++ _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
++ _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
++ _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
++ _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
++ _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
++ _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
++ _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
++ _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
++ _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
++ _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
++ _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
++ _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
++ _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
++ _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
++ _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
++ _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
++ _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
++ _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
++ _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
++ _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
++ _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
++ _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
++ _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
++ _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
++ _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ __timepunct<wchar_t>::
++ _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++ const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = L'\0';
++ }
++
++ template<>
++ void
++ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<wchar_t>;
++
++#warning wide time stuff
++// if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = L"%m/%d/%y";
++ _M_data->_M_date_era_format = L"%m/%d/%y";
++ _M_data->_M_time_format = L"%H:%M:%S";
++ _M_data->_M_time_era_format = L"%H:%M:%S";
++ _M_data->_M_date_time_format = L"";
++ _M_data->_M_date_time_era_format = L"";
++ _M_data->_M_am = L"AM";
++ _M_data->_M_pm = L"PM";
++ _M_data->_M_am_pm_format = L"";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = L"Sunday";
++ _M_data->_M_day2 = L"Monday";
++ _M_data->_M_day3 = L"Tuesday";
++ _M_data->_M_day4 = L"Wednesday";
++ _M_data->_M_day5 = L"Thursday";
++ _M_data->_M_day6 = L"Friday";
++ _M_data->_M_day7 = L"Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = L"Sun";
++ _M_data->_M_aday2 = L"Mon";
++ _M_data->_M_aday3 = L"Tue";
++ _M_data->_M_aday4 = L"Wed";
++ _M_data->_M_aday5 = L"Thu";
++ _M_data->_M_aday6 = L"Fri";
++ _M_data->_M_aday7 = L"Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = L"January";
++ _M_data->_M_month02 = L"February";
++ _M_data->_M_month03 = L"March";
++ _M_data->_M_month04 = L"April";
++ _M_data->_M_month05 = L"May";
++ _M_data->_M_month06 = L"June";
++ _M_data->_M_month07 = L"July";
++ _M_data->_M_month08 = L"August";
++ _M_data->_M_month09 = L"September";
++ _M_data->_M_month10 = L"October";
++ _M_data->_M_month11 = L"November";
++ _M_data->_M_month12 = L"December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = L"Jan";
++ _M_data->_M_amonth02 = L"Feb";
++ _M_data->_M_amonth03 = L"Mar";
++ _M_data->_M_amonth04 = L"Apr";
++ _M_data->_M_amonth05 = L"May";
++ _M_data->_M_amonth06 = L"Jun";
++ _M_data->_M_amonth07 = L"Jul";
++ _M_data->_M_amonth08 = L"Aug";
++ _M_data->_M_amonth09 = L"Sep";
++ _M_data->_M_amonth10 = L"Oct";
++ _M_data->_M_amonth11 = L"Nov";
++ _M_data->_M_amonth12 = L"Dec";
++ }
++#if 0
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ _M_data->_M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
++ _M_data->_M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
++ _M_data->_M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
++ _M_data->_M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
++ _M_data->_M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
++ _M_data->_M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
++ _M_data->_M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
++ _M_data->_M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
++ _M_data->_M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
++ _M_data->_M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
++ _M_data->_M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
++ _M_data->_M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
++ _M_data->_M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
++ _M_data->_M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
++ _M_data->_M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
++ _M_data->_M_aday2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
++ _M_data->_M_aday3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
++ _M_data->_M_aday4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
++ _M_data->_M_aday5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
++ _M_data->_M_aday6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
++ _M_data->_M_aday7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
++ _M_data->_M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
++ _M_data->_M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
++ _M_data->_M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
++ _M_data->_M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
++ _M_data->_M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
++ _M_data->_M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
++ _M_data->_M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
++ _M_data->_M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
++ _M_data->_M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
++ _M_data->_M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
++ _M_data->_M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
++ _M_data->_M_amonth02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
++ _M_data->_M_amonth03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
++ _M_data->_M_amonth04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
++ _M_data->_M_amonth05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
++ _M_data->_M_amonth06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
++ _M_data->_M_amonth07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
++ _M_data->_M_amonth08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
++ _M_data->_M_amonth09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
++ _M_data->_M_amonth10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
++ _M_data->_M_amonth11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
++ _M_data->_M_amonth12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
++ }
++#endif // 0
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
++ : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_timepunct = __tmp;
++ _M_initialize_timepunct(__cloc);
++ }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::~__timepunct()
++ {
++ if (_M_name_timepunct != _S_get_c_name())
++ delete [] _M_name_timepunct;
++ delete _M_data;
++ _S_destroy_c_locale(_M_c_locale_timepunct);
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_base.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_base.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,58 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ struct ctype_base
++ {
++ // Note: In uClibc, the following two types depend on configuration.
++
++ // Non-standard typedefs.
++ typedef const __ctype_touplow_t* __to_type;
++
++ // NB: Offsets into ctype<char>::_M_table force a particular size
++ // on the mask type. Because of this, we don't use an enum.
++ typedef __ctype_mask_t mask;
++ static const mask upper = _ISupper;
++ static const mask lower = _ISlower;
++ static const mask alpha = _ISalpha;
++ static const mask digit = _ISdigit;
++ static const mask xdigit = _ISxdigit;
++ static const mask space = _ISspace;
++ static const mask print = _ISprint;
++ static const mask graph = _ISalpha | _ISdigit | _ISpunct;
++ static const mask cntrl = _IScntrl;
++ static const mask punct = _ISpunct;
++ static const mask alnum = _ISalpha | _ISdigit;
++ };
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_inline.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++
++ bool
++ ctype<char>::
++ is(mask __m, char __c) const
++ { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++ const char*
++ ctype<char>::
++ is(const char* __low, const char* __high, mask* __vec) const
++ {
++ while (__low < __high)
++ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++ return __high;
++ }
++
++ const char*
++ ctype<char>::
++ scan_is(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++ ++__low;
++ return __low;
++ }
++
++ const char*
++ ctype<char>::
++ scan_not(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++ ++__low;
++ return __low;
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,92 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ const ctype_base::mask*
++ ctype<char>::classic_table() throw()
++ { return __C_ctype_b; }
++
++ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ char
++ ctype<char>::do_toupper(char __c) const
++ { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_toupper(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_toupper[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
++
++ char
++ ctype<char>::do_tolower(char __c) const
++ { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_tolower(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_tolower[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/os_defines.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/os_defines.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/os_defines.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,44 @@
++// Specific definitions for GNU/Linux -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here. This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
+diff -urN gcc-3.4.2-dist/libstdc++-v3/configure gcc-3.4.2/libstdc++-v3/configure
+--- gcc-3.4.2-dist/libstdc++-v3/configure 2004-08-13 15:44:04.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/configure 2004-09-10 10:47:40.000000000 -0500
+@@ -3878,6 +3878,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*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5479,7 +5479,7 @@
+ enableval="$enable_clocale"
+
+ case "$enableval" in
+- generic|gnu|ieee_1003.1-2001|yes|no|auto) ;;
++ generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto) ;;
+ *) { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable clocale" >&5
+ echo "$as_me: error: Unknown argument to enable/disable clocale" >&2;}
+ { (exit 1); exit 1; }; } ;;
+@@ -5545,6 +5550,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case x${target_os} in
++ xlinux-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+ cat >conftest.$ac_ext <<_ACEOF
+ #line $LINENO "configure"
+@@ -5759,6 +5767,77 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ echo "$as_me:$LINENO: result: uclibc" >&5
++echo "${ECHO_T}uclibc" >&6
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ if test -n "$check_msgfmt"; then
++ ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_check_msgfmt="yes"
++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++done
++
++ test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt=$ac_cv_prog_check_msgfmt
++if test -n "$check_msgfmt"; then
++ echo "$as_me:$LINENO: result: $check_msgfmt" >&5
++echo "${ECHO_T}$check_msgfmt" >&6
++else
++ echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++
++
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/configure.host gcc-3.4.2/libstdc++-v3/configure.host
+--- gcc-3.4.2-dist/libstdc++-v3/configure.host 2004-08-27 14:52:30.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/configure.host 2004-09-10 10:47:40.000000000 -0500
+@@ -217,6 +217,12 @@
+ ;;
+ esac
+
++# Override for uClibc since linux-uclibc gets mishandled above.
++case "${host_os}" in
++ *-uclibc*)
++ os_include_dir="os/uclibc"
++ ;;
++esac
+
+ # Set any OS-dependent and CPU-dependent bits.
+ # THIS TABLE IS SORTED. KEEP IT THAT WAY.
+diff -urN gcc-3.4.2-dist/libstdc++-v3/crossconfig.m4 gcc-3.4.2/libstdc++-v3/crossconfig.m4
+--- gcc-3.4.2-dist/libstdc++-v3/crossconfig.m4 2004-07-06 20:23:49.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/crossconfig.m4 2004-09-10 10:47:40.000000000 -0500
+@@ -138,6 +138,99 @@
+ ;;
+ esac
+ ;;
++ *-uclibc*)
++# Temporary hack until we implement the float versions of the libm funcs
++ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++ machine/endian.h machine/param.h sys/machine.h sys/types.h \
++ fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
++ SECTION_FLAGS='-ffunction-sections -fdata-sections'
++ AC_SUBST(SECTION_FLAGS)
++ GLIBCXX_CHECK_LINKER_FEATURES
++ GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
++ GLIBCXX_CHECK_WCHAR_T_SUPPORT
++
++ # For LFS.
++ AC_DEFINE(HAVE_INT64_T)
++ case "$target" in
++ *-uclinux*)
++ # Don't enable LFS with uClinux
++ ;;
++ *)
++ AC_DEFINE(_GLIBCXX_USE_LFS)
++ esac
++
++ # For showmanyc_helper().
++ AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
++ GLIBCXX_CHECK_POLL
++ GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
++
++ # For xsputn_2().
++ AC_CHECK_HEADERS(sys/uio.h)
++ GLIBCXX_CHECK_WRITEV
++
++# AC_DEFINE(HAVE_ACOSF)
++# AC_DEFINE(HAVE_ASINF)
++# AC_DEFINE(HAVE_ATANF)
++# AC_DEFINE(HAVE_ATAN2F)
++ AC_DEFINE(HAVE_CEILF)
++ AC_DEFINE(HAVE_COPYSIGN)
++# AC_DEFINE(HAVE_COPYSIGNF)
++# AC_DEFINE(HAVE_COSF)
++# AC_DEFINE(HAVE_COSHF)
++# AC_DEFINE(HAVE_EXPF)
++# AC_DEFINE(HAVE_FABSF)
++ AC_DEFINE(HAVE_FINITE)
++ AC_DEFINE(HAVE_FINITEF)
++ AC_DEFINE(HAVE_FLOORF)
++# AC_DEFINE(HAVE_FMODF)
++# AC_DEFINE(HAVE_FREXPF)
++ AC_DEFINE(HAVE_HYPOT)
++# AC_DEFINE(HAVE_HYPOTF)
++ AC_DEFINE(HAVE_ISINF)
++ AC_DEFINE(HAVE_ISINFF)
++ AC_DEFINE(HAVE_ISNAN)
++ AC_DEFINE(HAVE_ISNANF)
++# AC_DEFINE(HAVE_LOGF)
++# AC_DEFINE(HAVE_LOG10F)
++# AC_DEFINE(HAVE_MODFF)
++# AC_DEFINE(HAVE_SINF)
++# AC_DEFINE(HAVE_SINHF)
++# AC_DEFINE(HAVE_SINCOS)
++# AC_DEFINE(HAVE_SINCOSF)
++ AC_DEFINE(HAVE_SQRTF)
++# AC_DEFINE(HAVE_TANF)
++# AC_DEFINE(HAVE_TANHF)
++ if test x"long_double_math_on_this_cpu" = x"yes"; then
++ AC_MSG_ERROR([long_double_math_on_this_cpu is yes!])
++# AC_DEFINE(HAVE_ACOSL)
++# AC_DEFINE(HAVE_ASINL)
++# AC_DEFINE(HAVE_ATANL)
++# AC_DEFINE(HAVE_ATAN2L)
++# AC_DEFINE(HAVE_CEILL)
++# AC_DEFINE(HAVE_COPYSIGNL)
++# AC_DEFINE(HAVE_COSL)
++# AC_DEFINE(HAVE_COSHL)
++# AC_DEFINE(HAVE_EXPL)
++# AC_DEFINE(HAVE_FABSL)
++# AC_DEFINE(HAVE_FINITEL)
++# AC_DEFINE(HAVE_FLOORL)
++# AC_DEFINE(HAVE_FMODL)
++# AC_DEFINE(HAVE_FREXPL)
++# AC_DEFINE(HAVE_HYPOTL)
++# AC_DEFINE(HAVE_ISINFL)
++# AC_DEFINE(HAVE_ISNANL)
++# AC_DEFINE(HAVE_LOGL)
++# AC_DEFINE(HAVE_LOG10L)
++# AC_DEFINE(HAVE_MODFL)
++# AC_DEFINE(HAVE_POWL)
++# AC_DEFINE(HAVE_SINL)
++# AC_DEFINE(HAVE_SINHL)
++# AC_DEFINE(HAVE_SINCOSL)
++# AC_DEFINE(HAVE_SQRTL)
++# AC_DEFINE(HAVE_TANL)
++# AC_DEFINE(HAVE_TANHL)
++ fi
++ ;;
+ *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
+ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+ machine/endian.h machine/param.h sys/machine.h sys/types.h \
+@@ -152,7 +245,7 @@
+ AC_DEFINE(HAVE_INT64_T)
+ case "$target" in
+ *-uclinux*)
+- # Don't enable LFS with uClibc
++ # Don't enable LFS with uClinux
+ ;;
+ *)
+ AC_DEFINE(_GLIBCXX_USE_LFS)
+diff -urN gcc-3.4.2-dist/libstdc++-v3/include/c_compatibility/wchar.h gcc-3.4.2/libstdc++-v3/include/c_compatibility/wchar.h
+--- gcc-3.4.2-dist/libstdc++-v3/include/c_compatibility/wchar.h 2003-12-08 21:51:45.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/include/c_compatibility/wchar.h 2004-09-10 10:47:40.000000000 -0500
+@@ -101,7 +101,9 @@
+ using std::wmemcpy;
+ using std::wmemmove;
+ using std::wmemset;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using std::wcsftime;
++#endif
+
+ #if _GLIBCXX_USE_C99
+ using std::wcstold;
+diff -urN gcc-3.4.2-dist/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.4.2/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-3.4.2-dist/libstdc++-v3/include/c_std/std_cwchar.h 2004-07-20 03:52:12.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/include/c_std/std_cwchar.h 2004-09-10 10:47:40.000000000 -0500
+@@ -179,7 +179,9 @@
+ using ::wcscoll;
+ using ::wcscpy;
+ using ::wcscspn;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using ::wcsftime;
++#endif
+ using ::wcslen;
+ using ::wcsncat;
+ using ::wcsncmp;
diff --git a/toolchain/gcc/patches/3.4.5/300-libstdc++-pic.patch b/toolchain/gcc/patches/3.4.5/300-libstdc++-pic.patch
new file mode 100644
index 0000000000..c030ba6205
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.5/300-libstdc++-pic.patch
@@ -0,0 +1,47 @@
+# DP: Build and install libstdc++_pic.a library.
+
+--- gcc/libstdc++-v3/src/Makefile.am~ 2003-02-28 09:21:05.000000000 +0100
++++ gcc/libstdc++-v3/src/Makefile.am 2003-02-28 09:28:50.000000000 +0100
+@@ -224,6 +224,10 @@
+ @OPT_LDFLAGS@ @SECTION_LDFLAGS@ $(AM_CXXFLAGS) $(LDFLAGS) -o $@
+
+
++install-exec-local:
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Added bits to build debug library.
+ if GLIBCPP_BUILD_DEBUG
+ all-local: build_debug
+
+--- gcc/libstdc++-v3/src/Makefile.in~ 2004-02-21 09:55:48.000000000 +0100
++++ gcc/libstdc++-v3/src/Makefile.in 2004-02-21 09:59:34.000000000 +0100
+@@ -585,7 +585,7 @@
+
+ install-data-am: install-data-local
+
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+
+ install-info: install-info-am
+
+@@ -618,6 +618,7 @@
+ distclean-tags distdir dvi dvi-am info info-am install \
+ install-am install-data install-data-am install-data-local \
+ install-exec install-exec-am install-info install-info-am \
++ install-exec-local \
+ install-man install-strip install-toolexeclibLTLIBRARIES \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+@@ -707,6 +708,11 @@
+ install_debug:
+ (cd ${debugdir} && $(MAKE) \
+ toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
++
++install-exec-local:
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff --git a/toolchain/gcc/patches/3.4.5/600-gcc34-arm-ldm-peephole.patch b/toolchain/gcc/patches/3.4.5/600-gcc34-arm-ldm-peephole.patch
new file mode 100644
index 0000000000..0c370502c8
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.5/600-gcc34-arm-ldm-peephole.patch
@@ -0,0 +1,65 @@
+--- gcc-3.4.0/gcc/config/arm/arm.md.arm-ldm-peephole 2004-01-13 08:24:37.000000000 -0500
++++ gcc-3.4.0/gcc/config/arm/arm.md 2004-04-24 18:18:04.000000000 -0400
+@@ -8810,13 +8810,16 @@
+ (set_attr "length" "4,8,8")]
+ )
+
++; Try to convert LDR+LDR+arith into [add+]LDM+arith
++; On XScale, LDM is always slower than two LDRs, so only do this if
++; optimising for size.
+ (define_insn "*arith_adjacentmem"
+ [(set (match_operand:SI 0 "s_register_operand" "=r")
+ (match_operator:SI 1 "shiftable_operator"
+ [(match_operand:SI 2 "memory_operand" "m")
+ (match_operand:SI 3 "memory_operand" "m")]))
+ (clobber (match_scratch:SI 4 "=r"))]
+- "TARGET_ARM && adjacent_mem_locations (operands[2], operands[3])"
++ "TARGET_ARM && (!arm_tune_xscale || optimize_size) && adjacent_mem_locations (operands[2], operands[3])"
+ "*
+ {
+ rtx ldm[3];
+@@ -8851,6 +8854,8 @@
+ }
+ if (val1 && val2)
+ {
++ /* This would be a loss on a Harvard core, but adjacent_mem_locations()
++ will prevent it from happening. */
+ rtx ops[3];
+ ldm[0] = ops[0] = operands[4];
+ ops[1] = XEXP (XEXP (operands[2], 0), 0);
+--- gcc-3.4.0/gcc/config/arm/arm.c.arm-ldm-peephole 2004-04-24 18:16:25.000000000 -0400
++++ gcc-3.4.0/gcc/config/arm/arm.c 2004-04-24 18:18:04.000000000 -0400
+@@ -4838,6 +4841,11 @@
+ *load_offset = unsorted_offsets[order[0]];
+ }
+
++ /* For XScale a two-word LDM is a performance loss, so only do this if
++ size is more important. See comments in arm_gen_load_multiple. */
++ if (nops == 2 && arm_tune_xscale && !optimize_size)
++ return 0;
++
+ if (unsorted_offsets[order[0]] == 0)
+ return 1; /* ldmia */
+
+@@ -5064,6 +5072,11 @@
+ *load_offset = unsorted_offsets[order[0]];
+ }
+
++ /* For XScale a two-word LDM is a performance loss, so only do this if
++ size is more important. See comments in arm_gen_load_multiple. */
++ if (nops == 2 && arm_tune_xscale && !optimize_size)
++ return 0;
++
+ if (unsorted_offsets[order[0]] == 0)
+ return 1; /* stmia */
+
+--- gcc-3.4.0/gcc/genpeep.c.arm-ldm-peephole 2003-07-05 01:27:22.000000000 -0400
++++ gcc-3.4.0/gcc/genpeep.c 2004-04-24 18:18:04.000000000 -0400
+@@ -381,6 +381,7 @@
+ printf ("#include \"recog.h\"\n");
+ printf ("#include \"except.h\"\n\n");
+ printf ("#include \"function.h\"\n\n");
++ printf ("#include \"flags.h\"\n\n");
+
+ printf ("#ifdef HAVE_peephole\n");
+ printf ("extern rtx peep_operand[];\n\n");
diff --git a/toolchain/gcc/patches/3.4.5/601-gcc34-arm-ldm-peephole2.patch b/toolchain/gcc/patches/3.4.5/601-gcc34-arm-ldm-peephole2.patch
new file mode 100644
index 0000000000..27f7c07db9
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.5/601-gcc34-arm-ldm-peephole2.patch
@@ -0,0 +1,42 @@
+The 30_all_gcc34-arm-ldm-peephole.patch from Debian was conflicting
+with the newer 36_all_pr16201-fix.patch, so i cut out the hunk from
+it that was causing problems and grabbed an updated version from
+upstream cvs.
+
+Index: gcc/config/arm/arm.c
+===================================================================
+RCS file: /cvsroot/gcc/gcc/gcc/config/arm/arm.c,v
+retrieving revision 1.432
+retrieving revision 1.433
+diff -u -r1.432 -r1.433
+--- gcc-3.4.4/gcc/config/arm/arm.c 29 Mar 2005 03:00:23 -0000 1.432
++++ gcc-3.4.4/gcc/config/arm/arm.c 1 Apr 2005 11:02:22 -0000 1.433
+@@ -5139,6 +5139,10 @@
+ int
+ adjacent_mem_locations (rtx a, rtx b)
+ {
++ /* We don't guarantee to preserve the order of these memory refs. */
++ if (volatile_refs_p (a) || volatile_refs_p (b))
++ return 0;
++
+ if ((GET_CODE (XEXP (a, 0)) == REG
+ || (GET_CODE (XEXP (a, 0)) == PLUS
+ && GET_CODE (XEXP (XEXP (a, 0), 1)) == CONST_INT))
+@@ -5178,6 +5182,17 @@
+ return 0;
+
+ val_diff = val1 - val0;
++
++ if (arm_ld_sched)
++ {
++ /* If the target has load delay slots, then there's no benefit
++ to using an ldm instruction unless the offset is zero and
++ we are optimizing for size. */
++ return (optimize_size && (REGNO (reg0) == REGNO (reg1))
++ && (val0 == 0 || val1 == 0 || val0 == 4 || val1 == 4)
++ && (val_diff == 4 || val_diff == -4));
++ }
++
+ return ((REGNO (reg0) == REGNO (reg1))
+ && (val_diff == 4 || val_diff == -4));
+ }
diff --git a/toolchain/gcc/patches/3.4.5/601-gcc34-arm-ldm.patch b/toolchain/gcc/patches/3.4.5/601-gcc34-arm-ldm.patch
new file mode 100644
index 0000000000..142052fdf0
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.5/601-gcc34-arm-ldm.patch
@@ -0,0 +1,119 @@
+--- gcc-3.4.0/gcc/config/arm/arm.c.arm-ldm 2004-02-27 09:51:05.000000000 -0500
++++ gcc-3.4.0/gcc/config/arm/arm.c 2004-04-24 18:16:25.000000000 -0400
+@@ -8520,6 +8520,26 @@
+ return_used_this_function = 0;
+ }
+
++/* Return the number (counting from 0) of
++ the least significant set bit in MASK. */
++
++#ifdef __GNUC__
++inline
++#endif
++static int
++number_of_first_bit_set (mask)
++ int mask;
++{
++ int bit;
++
++ for (bit = 0;
++ (mask & (1 << bit)) == 0;
++ ++bit)
++ continue;
++
++ return bit;
++}
++
+ const char *
+ arm_output_epilogue (rtx sibling)
+ {
+@@ -8753,27 +8773,47 @@
+ saved_regs_mask |= (1 << PC_REGNUM);
+ }
+
+- /* Load the registers off the stack. If we only have one register
+- to load use the LDR instruction - it is faster. */
+- if (saved_regs_mask == (1 << LR_REGNUM))
+- {
+- /* The exception handler ignores the LR, so we do
+- not really need to load it off the stack. */
+- if (eh_ofs)
+- asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
+- else
+- asm_fprintf (f, "\tldr\t%r, [%r], #4\n", LR_REGNUM, SP_REGNUM);
+- }
+- else if (saved_regs_mask)
++ if (saved_regs_mask)
+ {
+- if (saved_regs_mask & (1 << SP_REGNUM))
+- /* Note - write back to the stack register is not enabled
+- (ie "ldmfd sp!..."). We know that the stack pointer is
+- in the list of registers and if we add writeback the
+- instruction becomes UNPREDICTABLE. */
+- print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
++ /* Load the registers off the stack. If we only have one register
++ to load use the LDR instruction - it is faster. */
++ if (bit_count (saved_regs_mask) == 1)
++ {
++ int reg = number_of_first_bit_set (saved_regs_mask);
++
++ switch (reg)
++ {
++ case SP_REGNUM:
++ /* Mustn't use base writeback when loading SP. */
++ asm_fprintf (f, "\tldr\t%r, [%r]\n", SP_REGNUM, SP_REGNUM);
++ break;
++
++ case LR_REGNUM:
++ if (eh_ofs)
++ {
++ /* The exception handler ignores the LR, so we do
++ not really need to load it off the stack. */
++ asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
++ break;
++ }
++ /* else fall through */
++
++ default:
++ asm_fprintf (f, "\tldr\t%r, [%r], #4\n", reg, SP_REGNUM);
++ break;
++ }
++ }
+ else
+- print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
++ {
++ if (saved_regs_mask & (1 << SP_REGNUM))
++ /* Note - write back to the stack register is not enabled
++ (ie "ldmfd sp!..."). We know that the stack pointer is
++ in the list of registers and if we add writeback the
++ instruction becomes UNPREDICTABLE. */
++ print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
++ else
++ print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
++ }
+ }
+
+ if (current_function_pretend_args_size)
+@@ -11401,22 +11441,6 @@
+ }
+ }
+
+-/* Return the number (counting from 0) of
+- the least significant set bit in MASK. */
+-
+-inline static int
+-number_of_first_bit_set (int mask)
+-{
+- int bit;
+-
+- for (bit = 0;
+- (mask & (1 << bit)) == 0;
+- ++bit)
+- continue;
+-
+- return bit;
+-}
+-
+ /* Generate code to return from a thumb function.
+ If 'reg_containing_return_addr' is -1, then the return address is
+ actually on the stack, at the stack pointer. */
diff --git a/toolchain/gcc/patches/3.4.5/602-sdk-libstdc++-includes.patch b/toolchain/gcc/patches/3.4.5/602-sdk-libstdc++-includes.patch
new file mode 100644
index 0000000000..4377c2143b
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.5/602-sdk-libstdc++-includes.patch
@@ -0,0 +1,22 @@
+--- gcc-3.4.1/libstdc++-v3/libmath/Makefile.am~ 2003-08-27 22:29:42.000000000 +0100
++++ gcc-3.4.1/libstdc++-v3/libmath/Makefile.am 2004-07-22 16:41:45.152130128 +0100
+@@ -32,7 +32,7 @@
+
+ libmath_la_SOURCES = stubs.c
+
+-AM_CPPFLAGS = $(CANADIAN_INCLUDES)
++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include
+
+ # Only compiling "C" sources in this directory.
+ LIBTOOL = @LIBTOOL@ --tag CC
+--- gcc-3.4.1/libstdc++-v3/fragment.am.old 2004-07-22 18:24:58.024083656 +0100
++++ gcc-3.4.1/libstdc++-v3/fragment.am 2004-07-22 18:24:59.019932264 +0100
+@@ -18,7 +18,7 @@
+ $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+
+ # -I/-D flags to pass when compiling.
+-AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include
+
+
+
diff --git a/toolchain/gcc/patches/3.4.5/700-pr15068-fix.patch b/toolchain/gcc/patches/3.4.5/700-pr15068-fix.patch
new file mode 100644
index 0000000000..2977765c5f
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.5/700-pr15068-fix.patch
@@ -0,0 +1,44 @@
+See http://gcc.gnu.org/PR15068
+
+Fixes error
+
+../sysdeps/generic/s_fmax.c: In function `__fmax':
+../sysdeps/generic/s_fmax.c:28: internal compiler error: in elim_reg_cond, at flow.c:3257
+Please submit a full bug report,
+with preprocessed source if appropriate.
+See <URL:http://gcc.gnu.org/bugs.html> for instructions.
+make[2]: *** [/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/build-glibc/math/s_fmax.o] Error 1
+make[2]: Leaving directory `/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/glibc-20040822/math'
+make[1]: *** [math/others] Error 2
+make[1]: Leaving directory `/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/glibc-20040822'
+make: *** [all] Error 2
+
+[ rediffed against gcc-3.4.1, with elbow grease, ending up with same thing as
+http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/flow.c.diff?cvsroot=gcc&only_with_tag=csl-arm-branch&r1=1.563.4.2&r2=1.563.4.3 ]
+
+--- gcc-3.4.1/gcc/flow.c.old 2004-02-27 19:39:19.000000000 -0800
++++ gcc-3.4.1/gcc/flow.c 2004-08-26 07:29:46.000000000 -0700
+@@ -1878,6 +1878,7 @@
+ rtx set_src = SET_SRC (pc_set (BB_END (bb)));
+ rtx cond_true = XEXP (set_src, 0);
+ rtx reg = XEXP (cond_true, 0);
++ enum rtx_code inv_cond;
+
+ if (GET_CODE (reg) == SUBREG)
+ reg = SUBREG_REG (reg);
+@@ -1886,11 +1887,13 @@
+ in the form of a comparison of a register against zero.
+ If the condition is more complex than that, then it is safe
+ not to record any information. */
+- if (GET_CODE (reg) == REG
++ inv_cond = reversed_comparison_code (cond_true, BB_END (bb));
++ if (inv_cond != UNKNOWN
++ && GET_CODE (reg) == REG
+ && XEXP (cond_true, 1) == const0_rtx)
+ {
+ rtx cond_false
+- = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
++ = gen_rtx_fmt_ee (inv_cond,
+ GET_MODE (cond_true), XEXP (cond_true, 0),
+ XEXP (cond_true, 1));
+ if (GET_CODE (XEXP (set_src, 1)) == PC)
diff --git a/toolchain/gcc/patches/3.4.5/71_all_sh-pr16665-fix.patch b/toolchain/gcc/patches/3.4.5/71_all_sh-pr16665-fix.patch
new file mode 100644
index 0000000000..680bb3978d
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.5/71_all_sh-pr16665-fix.patch
@@ -0,0 +1,43 @@
+--- gcc/gcc/config/sh/sh.c
++++ gcc/gcc/config/sh/sh.c
+@@ -9106,6 +9106,15 @@ sh_output_mi_thunk (FILE *file, tree thu
+ }
+ this = FUNCTION_ARG (cum, Pmode, ptr_type_node, 1);
+
++ /* In PIC case, we set PIC register to compute the target address. We
++ can use a scratch register to save and restore the original value
++ except for SHcompact. For SHcompact, use stack. */
++ if (flag_pic && TARGET_SHCOMPACT)
++ {
++ push (PIC_OFFSET_TABLE_REGNUM);
++ emit_insn (gen_GOTaddr2picreg ());
++ }
++
+ /* For SHcompact, we only have r0 for a scratch register: r1 is the
+ static chain pointer (even if you can't have nested virtual functions
+ right now, someone might implement them sometime), and the rest of the
+@@ -9188,8 +9197,24 @@ sh_output_mi_thunk (FILE *file, tree thu
+ assemble_external (function);
+ TREE_USED (function) = 1;
+ }
++ /* We can use scratch1 to save and restore the original value of
++ PIC register except for SHcompact. */
++ if (flag_pic && ! TARGET_SHCOMPACT)
++ {
++ emit_move_insn (scratch1,
++ gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM));
++ emit_insn (gen_GOTaddr2picreg ());
++ }
+ funexp = XEXP (DECL_RTL (function), 0);
+ emit_move_insn (scratch2, funexp);
++ if (flag_pic)
++ {
++ if (! TARGET_SHCOMPACT)
++ emit_move_insn (gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM),
++ scratch1);
++ else
++ pop (PIC_OFFSET_TABLE_REGNUM);
++ }
+ funexp = gen_rtx_MEM (FUNCTION_MODE, scratch2);
+ sibcall = emit_call_insn (gen_sibcall (funexp, const0_rtx, NULL_RTX));
+ SIBLING_CALL_P (sibcall) = 1;
diff --git a/toolchain/gcc/patches/3.4.5/72_all_sh-no-reorder-blocks.patch b/toolchain/gcc/patches/3.4.5/72_all_sh-no-reorder-blocks.patch
new file mode 100644
index 0000000000..8b9826831b
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.5/72_all_sh-no-reorder-blocks.patch
@@ -0,0 +1,13 @@
+--- g/gcc/config/sh/sh.h
++++ g/gcc/config/sh/sh.h
+@@ -422,6 +422,10 @@
+ do { \
+ if (LEVEL) \
+ flag_omit_frame_pointer = -1; \
++ if (LEVEL <= 2) \
++ { \
++ flag_reorder_blocks = 0; \
++ } \
+ if (SIZE) \
+ target_flags |= SPACE_BIT; \
+ if (TARGET_SHMEDIA && LEVEL > 1) \
diff --git a/toolchain/gcc/patches/3.4.5/73_all_sh-pr20617.patch b/toolchain/gcc/patches/3.4.5/73_all_sh-pr20617.patch
new file mode 100644
index 0000000000..6d8021cc70
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.5/73_all_sh-pr20617.patch
@@ -0,0 +1,28 @@
+2005-03-24 J"orn Rennecke <joern.rennecke@st.com>
+
+ Band aid for PR target/20617:
+ * config/sh/lib1funcs.asm (FUNC, ALIAS): Add .hidden directive.
+
+--- g/gcc/config/sh/lib1funcs.asm
++++ g/gcc/config/sh/lib1funcs.asm
+@@ -37,9 +37,19 @@ Boston, MA 02111-1307, USA. */
+ ELF local label prefixes by J"orn Rennecke
+ amylaar@cygnus.com */
+
++#define ALIAS(X,Y) .global GLOBAL(X); .set GLOBAL(X),GLOBAL(Y)
++
+ #ifdef __ELF__
+ #define LOCAL(X) .L_##X
+-#define FUNC(X) .type X,@function
++
++#if 1 /* ??? The export list mechanism is broken, everything that is not
++ hidden is exported. */
++#undef FUNC
++#define FUNC(X) .type X,@function; .hidden X
++#undef ALIAS
++#define ALIAS(X,Y) .global GLOBAL(X); .set GLOBAL(X),GLOBAL(Y); .hidden GLOBAL(X)
++#endif
++
+ #define ENDFUNC0(X) .Lfe_##X: .size X,.Lfe_##X-X
+ #define ENDFUNC(X) ENDFUNC0(X)
+ #else
diff --git a/toolchain/gcc/patches/3.4.5/800-arm-bigendian.patch b/toolchain/gcc/patches/3.4.5/800-arm-bigendian.patch
new file mode 100644
index 0000000000..0bae8f474c
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.5/800-arm-bigendian.patch
@@ -0,0 +1,70 @@
+By Lennert Buytenhek <buytenh@wantstofly.org>
+Adds support for arm*b-linux* big-endian ARM targets
+
+See http://gcc.gnu.org/PR16350
+
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h 2004-08-16 16:01:50.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-08-16 15:43:40.000000000 -0500
+@@ -30,17 +30,34 @@
+ /* Do not assume anything about header files. */
+ #define NO_IMPLICIT_EXTERN_C
+
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT ARM_FLAG_BIG_END
++#define TARGET_ENDIAN_OPTION "mbig-endian"
++#define TARGET_LINKER_EMULATION "armelfb_linux"
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#define TARGET_ENDIAN_OPTION "mlittle-endian"
++#define TARGET_LINKER_EMULATION "armelf_linux"
++#endif
++
+ /* Default is to use APCS-32 mode. */
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_APCS_32 | \
++ ARM_FLAG_MMU_TRAPS | \
++ TARGET_ENDIAN_DEFAULT )
+
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
+
+ #undef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" }
++ { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
+
+ #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+
+@@ -101,7 +118,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
+ -X \
+- %{mbig-endian:-EB}" \
++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+ #endif
+
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc 2004-08-16 16:01:50.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc 2004-08-16 16:01:25.000000000 -0500
+@@ -672,6 +672,11 @@
+ ;;
+ arm*-*-linux*) # ARM GNU/Linux with ELF
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++ case $target in
++ arm*b-*)
++ tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++ ;;
++ esac
+ tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ gnu_ld=yes
diff --git a/toolchain/gcc/patches/3.4.5/800-powerpc-libc_stack_end-uclibc.patch b/toolchain/gcc/patches/3.4.5/800-powerpc-libc_stack_end-uclibc.patch
new file mode 100644
index 0000000000..a209470f7a
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.5/800-powerpc-libc_stack_end-uclibc.patch
@@ -0,0 +1,15 @@
+--- gcc-3.4.4/gcc/config/rs6000/linux-unwind.h.org 2005-06-23 17:50:34.000000000 -0600
++++ gcc-3.4.4/gcc/config/rs6000/linux-unwind.h 2005-06-23 17:52:02.000000000 -0600
+@@ -32,6 +32,7 @@
+ these structs elsewhere; Many fields are missing, particularly
+ from the end of the structures. */
+
++#ifndef inhibit_libc
+ struct gcc_vregs
+ {
+ __attribute__ ((vector_size (16))) int vr[32];
+@@ -320,3 +321,4 @@
+ \
+ goto SUCCESS; \
+ } while (0)
++#endif
diff --git a/toolchain/gcc/patches/3.4.6-nonmips/001-non_mips.patch b/toolchain/gcc/patches/3.4.6-nonmips/001-non_mips.patch
new file mode 100644
index 0000000000..5de77a4419
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6-nonmips/001-non_mips.patch
@@ -0,0 +1,85 @@
+diff -urN gcc-3.4.6/gcc/config/mips/mips.c gcc-3.4.6-nonmips/gcc/config/mips/mips.c
+--- gcc-3.4.6/gcc/config/mips/mips.c 2005-07-31 10:35:15.000000000 +0200
++++ gcc-3.4.6-nonmips/gcc/config/mips/mips.c 2006-07-19 20:25:03.000000000 +0200
+@@ -3466,26 +3466,26 @@
+ for (offset = 0, i = 0; offset + delta <= length; offset += delta, i++)
+ {
+ regs[i] = gen_reg_rtx (mode);
+- if (MEM_ALIGN (src) >= bits)
++ //if (MEM_ALIGN (src) >= bits)
+ emit_move_insn (regs[i], adjust_address (src, mode, offset));
+- else
+- {
+- rtx part = adjust_address (src, BLKmode, offset);
+- if (!mips_expand_unaligned_load (regs[i], part, bits, 0))
+- abort ();
+- }
++ //else
++ //{
++ //rtx part = adjust_address (src, BLKmode, offset);
++ //if (!mips_expand_unaligned_load (regs[i], part, bits, 0))
++ //abort ();
++ //}
+ }
+
+ /* Copy the chunks to the destination. */
+ for (offset = 0, i = 0; offset + delta <= length; offset += delta, i++)
+- if (MEM_ALIGN (dest) >= bits)
++ //if (MEM_ALIGN (dest) >= bits)
+ emit_move_insn (adjust_address (dest, mode, offset), regs[i]);
+- else
+- {
+- rtx part = adjust_address (dest, BLKmode, offset);
+- if (!mips_expand_unaligned_store (part, regs[i], bits, 0))
+- abort ();
+- }
++ //else
++ //{
++ //rtx part = adjust_address (dest, BLKmode, offset);
++ //if (!mips_expand_unaligned_store (part, regs[i], bits, 0))
++ //abort ();
++ //}
+
+ /* Mop up any left-over bytes. */
+ if (offset < length)
+@@ -4488,6 +4488,7 @@
+ mips_expand_unaligned_load (rtx dest, rtx src, unsigned int width, int bitpos)
+ {
+ rtx left, right, temp;
++ return false;
+
+ /* If TARGET_64BIT, the destination of a 32-bit load will be a
+ paradoxical word_mode subreg. This is the only case in which
+@@ -4514,8 +4515,9 @@
+ }
+ else
+ {
+- emit_insn (gen_mov_lwl (temp, src, left));
+- emit_insn (gen_mov_lwr (dest, copy_rtx (src), right, temp));
++ return false;
++ //emit_insn (gen_mov_lwl (temp, src, left));
++ //emit_insn (gen_mov_lwr (dest, copy_rtx (src), right, temp));
+ }
+ return true;
+ }
+@@ -4528,6 +4530,7 @@
+ mips_expand_unaligned_store (rtx dest, rtx src, unsigned int width, int bitpos)
+ {
+ rtx left, right;
++ return false;
+
+ if (!mips_get_unaligned_mem (&dest, width, bitpos, &left, &right))
+ return false;
+@@ -4541,8 +4544,10 @@
+ }
+ else
+ {
+- emit_insn (gen_mov_swl (dest, src, left));
+- emit_insn (gen_mov_swr (copy_rtx (dest), copy_rtx (src), right));
++ /* Patented instructions */
++ //emit_insn (gen_mov_swl (dest, src, left));
++ //emit_insn (gen_mov_swr (copy_rtx (dest), copy_rtx (src), right));
++ return false;
+ }
+ return true;
+ }
diff --git a/toolchain/gcc/patches/3.4.6-nonmips/100-uclibc-conf.patch b/toolchain/gcc/patches/3.4.6-nonmips/100-uclibc-conf.patch
new file mode 100644
index 0000000000..29e4c802e2
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6-nonmips/100-uclibc-conf.patch
@@ -0,0 +1,442 @@
+diff -urN gcc-3.4.1-dist/boehm-gc/configure gcc-3.4.1/boehm-gc/configure
+--- gcc-3.4.1-dist/boehm-gc/configure 2004-07-01 14:14:03.000000000 -0500
++++ gcc-3.4.1/boehm-gc/configure 2004-08-12 16:22:57.000000000 -0500
+@@ -1947,6 +1947,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*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN gcc-3.4.1-dist/boehm-gc/ltconfig gcc-3.4.1/boehm-gc/ltconfig
+--- gcc-3.4.1-dist/boehm-gc/ltconfig 2002-11-20 09:59:06.000000000 -0600
++++ gcc-3.4.1/boehm-gc/ltconfig 2004-08-12 15:54:42.000000000 -0500
+@@ -1981,6 +1981,23 @@
+ fi
+ ;;
+
++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
++ deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
++ file_magic_cmd=/usr/bin/file
++ file_magic_test_file=`echo /lib/libuClibc-*.so`
++
++ # Assume using the uClibc dynamic linker.
++ dynamic_linker="uClibc ld.so"
++ ;;
++
+ netbsd*)
+ version_type=sunos
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h 2004-01-31 00:18:11.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-08-12 15:54:42.000000000 -0500
+@@ -81,6 +81,18 @@
+ "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC "%{h*} %{version:-v} \
++ %{b} %{Wl,*:%*} \
++ %{static:-Bstatic} \
++ %{shared:-shared} \
++ %{symbolic:-Bsymbolic} \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++ -X \
++ %{mbig-endian:-EB}" \
++ SUBTARGET_EXTRA_LINK_SPEC
++#else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+ %{b} %{Wl,*:%*} \
+ %{static:-Bstatic} \
+@@ -91,6 +103,7 @@
+ -X \
+ %{mbig-endian:-EB}" \
+ SUBTARGET_EXTRA_LINK_SPEC
++#endif
+
+ #define TARGET_OS_CPP_BUILTINS() LINUX_TARGET_OS_CPP_BUILTINS()
+
+diff -urN gcc-3.4.1-dist/gcc/config/cris/linux.h gcc-3.4.1/gcc/config/cris/linux.h
+--- gcc-3.4.1-dist/gcc/config/cris/linux.h 2003-11-28 21:08:09.000000000 -0600
++++ gcc-3.4.1/gcc/config/cris/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -79,6 +79,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++ -rpath-link include/asm/../..%s\
++ %{shared} %{static}\
++ %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++ %{!shared: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++ %{!r:%{O2|O3: --gc-sections}}"
++
++#else /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+
+@@ -93,6 +112,8 @@
+ %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+ %{!r:%{O2|O3: --gc-sections}}"
+
++#endif /* USE_UCLIBC */
++
+
+ /* Node: Run-time Target */
+
+diff -urN gcc-3.4.1-dist/gcc/config/cris/t-linux-uclibc gcc-3.4.1/gcc/config/cris/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/cris/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/cris/t-linux-uclibc 2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,3 @@
++T_CFLAGS = -DUSE_UCLIBC
++TARGET_LIBGCC2_CFLAGS += -fPIC
++CRTSTUFF_T_CFLAGS_S = $(TARGET_LIBGCC2_CFLAGS)
+diff -urN gcc-3.4.1-dist/gcc/config/i386/linux.h gcc-3.4.1/gcc/config/i386/linux.h
+--- gcc-3.4.1-dist/gcc/config/i386/linux.h 2003-11-28 21:08:10.000000000 -0600
++++ gcc-3.4.1/gcc/config/i386/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -118,6 +118,15 @@
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.1}} \
+ %{static:-static}}}"
+ #else
++#if defined USE_UCLIBC
++#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
++ %{!shared: \
++ %{!ibcs: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}}}"
++#else
+ #define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+@@ -126,6 +135,7 @@
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ %{static:-static}}}"
+ #endif
++#endif
+
+ /* A C statement (sans semicolon) to output to the stdio stream
+ FILE the assembler definition of uninitialized global DECL named
+diff -urN gcc-3.4.1-dist/gcc/config/mips/linux.h gcc-3.4.1/gcc/config/mips/linux.h
+--- gcc-3.4.1-dist/gcc/config/mips/linux.h 2004-06-15 20:42:24.000000000 -0500
++++ gcc-3.4.1/gcc/config/mips/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -109,6 +109,17 @@
+
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC \
++ "%(endian_spec) \
++ %{shared:-shared} \
++ %{!shared: \
++ %{!ibcs: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}}}"
++#else
+ #define LINK_SPEC \
+ "%(endian_spec) \
+ %{shared:-shared} \
+@@ -118,6 +129,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+ %{static:-static}}}"
++#endif
+
+ #undef SUBTARGET_ASM_SPEC
+ #define SUBTARGET_ASM_SPEC "\
+diff -urN gcc-3.4.1-dist/gcc/config/rs6000/linux.h gcc-3.4.1/gcc/config/rs6000/linux.h
+--- gcc-3.4.1-dist/gcc/config/rs6000/linux.h 2004-02-25 09:11:19.000000000 -0600
++++ gcc-3.4.1/gcc/config/rs6000/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -61,7 +61,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+
+ #undef LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+
+ #define LINK_GCC_C_SEQUENCE_SPEC \
+ "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+diff -urN gcc-3.4.1-dist/gcc/config/rs6000/sysv4.h gcc-3.4.1/gcc/config/rs6000/sysv4.h
+--- gcc-3.4.1-dist/gcc/config/rs6000/sysv4.h 2004-06-10 01:39:50.000000000 -0500
++++ gcc-3.4.1/gcc/config/rs6000/sysv4.h 2004-08-12 15:54:43.000000000 -0500
+@@ -947,6 +947,7 @@
+ mcall-linux : %(link_os_linux) ; \
+ mcall-gnu : %(link_os_gnu) ; \
+ mcall-netbsd : %(link_os_netbsd) ; \
++ mcall-linux-uclibc : %(link_os_linux_uclibc); \
+ mcall-openbsd: %(link_os_openbsd) ; \
+ : %(link_os_default) }"
+
+@@ -1124,6 +1125,10 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+ #endif
+@@ -1290,6 +1295,7 @@
+ { "link_os_sim", LINK_OS_SIM_SPEC }, \
+ { "link_os_freebsd", LINK_OS_FREEBSD_SPEC }, \
+ { "link_os_linux", LINK_OS_LINUX_SPEC }, \
++ { "link_os_linux_uclibc", LINK_OS_LINUX_UCLIBC_SPEC }, \
+ { "link_os_gnu", LINK_OS_GNU_SPEC }, \
+ { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \
+ { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \
+diff -urN gcc-3.4.1-dist/gcc/config/sh/linux.h gcc-3.4.1/gcc/config/sh/linux.h
+--- gcc-3.4.1-dist/gcc/config/sh/linux.h 2004-01-11 20:29:13.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -73,12 +73,21 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++ "%{shared:-shared} \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+ "%{shared:-shared} \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ %{static:-static}"
++#endif
+
+ #undef LIB_SPEC
+ #define LIB_SPEC \
+diff -urN gcc-3.4.1-dist/gcc/config/sh/t-linux-uclibc gcc-3.4.1/gcc/config/sh/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/sh/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/t-linux-uclibc 2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,13 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++TARGET_LIBGCC2_CFLAGS = -fpic -DNO_FPSCR_VALUES
++LIB1ASMFUNCS_CACHE = _ic_invalidate
++
++LIB2FUNCS_EXTRA=
++
++MULTILIB_OPTIONS= $(MULTILIB_ENDIAN) m3e/m4
++MULTILIB_DIRNAMES=
++MULTILIB_MATCHES =
++MULTILIB_EXCEPTIONS=
++
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
+diff -urN gcc-3.4.1-dist/gcc/config/sh/t-sh64-uclibc gcc-3.4.1/gcc/config/sh/t-sh64-uclibc
+--- gcc-3.4.1-dist/gcc/config/sh/t-sh64-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/t-sh64-uclibc 2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,13 @@
++EXTRA_MULTILIB_PARTS= crt1.o crti.o crtn.o crtbegin.o crtend.o
++
++LIB1ASMFUNCS = \
++ _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
++ _shcompact_call_trampoline _shcompact_return_trampoline \
++ _shcompact_incoming_args _ic_invalidate _nested_trampoline \
++ _push_pop_shmedia_regs \
++ _udivdi3 _divdi3 _umoddi3 _moddi3
++
++MULTILIB_OPTIONS = $(MULTILIB_ENDIAN) m5-32media-nofpu/m5-compact/m5-compact-nofpu/m5-64media/m5-64media-nofpu
++MULTILIB_DIRNAMES= $(MULTILIB_ENDIAN) nofpu compact nofpu/compact media64 nofpu/media64
++MULTILIB_MATCHES=
++MULTILIB_EXCEPTIONS=
+diff -urN gcc-3.4.1-dist/gcc/config/t-linux-uclibc gcc-3.4.1/gcc/config/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/t-linux-uclibc 2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,15 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Compile crtbeginS.o and crtendS.o with pic.
++CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
++# Compile libgcc2.a with pic.
++TARGET_LIBGCC2_CFLAGS = -fPIC
++
++# Override t-slibgcc-elf-ver to export some libgcc symbols with
++# the symbol versions that glibc used.
++#SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
++
++# Use unwind-dw2-fde
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
++ $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc 2004-04-21 10:12:35.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc 2004-08-12 15:59:46.000000000 -0500
+@@ -664,6 +664,12 @@
+ extra_parts=""
+ use_collect2=yes
+ ;;
++arm*-*-linux-uclibc*) # ARM GNU/Linux with ELF - uClibc
++ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++ tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
++ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++ gnu_ld=yes
++ ;;
+ arm*-*-linux*) # ARM GNU/Linux with ELF
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
+ tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+@@ -725,6 +731,10 @@
+ tmake_file="cris/t-cris cris/t-elfmulti"
+ gas=yes
+ ;;
++cris-*-linux-uclibc*)
++ tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
++ tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux-uclibc"
++ ;;
+ cris-*-linux*)
+ tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
+ tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux"
+@@ -988,6 +998,11 @@
+ thread_file='single'
+ fi
+ ;;
++i[34567]86-*-linux*uclibc*) # Intel 80386's running GNU/Linux
++ # with ELF format using uClibc
++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h"
++ tmake_file="t-slibgcc-elf-ver t-linux-uclibc i386/t-crtstuff"
++ ;;
+ i[34567]86-*-linux*) # Intel 80386's running GNU/Linux
+ # with ELF format using glibc 2
+ # aka GNU/Linux C library 6
+@@ -1547,6 +1562,16 @@
+ gnu_ld=yes
+ gas=yes
+ ;;
++mips*-*-linux-uclibc*) # Linux MIPS, either endian. uClibc
++ tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
++ case ${target} in
++ mipsisa32*-*)
++ target_cpu_default="MASK_SOFT_FLOAT"
++ tm_defines="MIPS_ISA_DEFAULT=32"
++ ;;
++ esac
++ tmake_file="t-slibgcc-elf-ver t-linux-uclibc"
++ ;;
+ mips*-*-linux*) # Linux MIPS, either endian.
+ tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
+ case ${target} in
+@@ -1764,6 +1789,10 @@
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxspe.h"
+ tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+ ;;
++powerpc-*-linux-uclibc*)
++ tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
++ tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux-uclibc rs6000/t-ppccomm"
++ ;;
+ powerpc-*-linux*)
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
+ tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+@@ -1916,7 +1945,7 @@
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/embed-elf.h sh/rtemself.h rtems.h"
+ ;;
+ sh-*-linux* | sh[2346lbe]*-*-linux*)
+- tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver t-linux"
++ tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver"
+ case ${target} in
+ sh*be-*-* | sh*eb-*-*) ;;
+ *)
+@@ -1924,9 +1953,17 @@
+ tmake_file="${tmake_file} sh/t-le"
+ ;;
+ esac
+- tmake_file="${tmake_file} sh/t-linux"
++ case ${target} in
++ *-*-linux-uclibc*) tmake_file="${tmake_file} t-linux-uclibc sh/t-linux-uclibc" ;;
++ *) tmake_file="${tmake_file} t-linux sh/t-linux" ;;
++ esac
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/linux.h"
+ case ${target} in
++ sh64*-*-linux-uclibc*)
++ tmake_file="${tmake_file} sh/t-sh64-uclibc"
++ tm_file="${tm_file} sh/sh64.h"
++ extra_headers="shmedia.h ushmedia.h sshmedia.h"
++ ;;
+ sh64*)
+ tmake_file="${tmake_file} sh/t-sh64"
+ tm_file="${tm_file} sh/sh64.h"
+diff -urN gcc-3.4.1-dist/libtool.m4 gcc-3.4.1/libtool.m4
+--- gcc-3.4.1-dist/libtool.m4 2004-05-18 04:08:37.000000000 -0500
++++ gcc-3.4.1/libtool.m4 2004-08-12 15:54:43.000000000 -0500
+@@ -689,6 +689,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*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN gcc-3.4.1-dist/ltconfig gcc-3.4.1/ltconfig
+--- gcc-3.4.1-dist/ltconfig 2004-03-05 15:05:41.000000000 -0600
++++ gcc-3.4.1/ltconfig 2004-08-12 15:55:48.000000000 -0500
+@@ -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
+@@ -1262,6 +1263,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/toolchain/gcc/patches/3.4.6-nonmips/200-uclibc-locale.patch b/toolchain/gcc/patches/3.4.6-nonmips/200-uclibc-locale.patch
new file mode 100644
index 0000000000..3fc4900b06
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6-nonmips/200-uclibc-locale.patch
@@ -0,0 +1,3246 @@
+diff -urN gcc-3.4.2-dist/libstdc++-v3/acinclude.m4 gcc-3.4.2/libstdc++-v3/acinclude.m4
+--- gcc-3.4.2-dist/libstdc++-v3/acinclude.m4 2004-07-15 12:42:45.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/acinclude.m4 2004-09-10 10:47:40.000000000 -0500
+@@ -996,7 +996,7 @@
+ AC_MSG_CHECKING([for C locale to use])
+ GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+ [use MODEL for target locale package],
+- [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++ [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
+
+ # If they didn't use this option switch, or if they specified --enable
+ # with no specific model, we'll have to look for one. If they
+@@ -1012,6 +1012,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case x${target_os} in
++ x*-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+ AC_EGREP_CPP([_GLIBCXX_ok], [
+ #include <features.h>
+@@ -1138,6 +1141,41 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ AC_MSG_RESULT(uclibc)
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++ AC_SUBST(glibcxx_MOFILES)
++ AC_SUBST(glibcxx_POFILES)
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/aclocal.m4 gcc-3.4.2/libstdc++-v3/aclocal.m4
+--- gcc-3.4.2-dist/libstdc++-v3/aclocal.m4 2004-08-13 15:44:03.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/aclocal.m4 2004-09-10 10:47:40.000000000 -0500
+@@ -1025,6 +1025,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case x${target_os} in
++ x*-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+ AC_EGREP_CPP([_GLIBCXX_ok], [
+ #include <features.h>
+@@ -1151,6 +1154,41 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ AC_MSG_RESULT(uclibc)
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++ AC_SUBST(glibcxx_MOFILES)
++ AC_SUBST(glibcxx_POFILES)
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,59 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,160 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno> // For errno
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L) strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B))
++#define __strtof_l(S, E, L) strtof((S), (E))
++#define __strtod_l(S, E, L) strtod((S), (E))
++#define __strtold_l(S, E, L) strtold((S), (E))
++#warning should dummy __newlocale check for C|POSIX ?
++#define __newlocale(a, b, c) NULL
++#define __freelocale(a) ((void)0)
++#define __duplocale(a) __c_locale()
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ float __f = __strtof_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __f;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ double __d = __strtod_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __d;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ long double __ld = __strtold_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __ld;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ void
++ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
++ __c_locale __old)
++ {
++ __cloc = __newlocale(1 << LC_ALL, __s, __old);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ if (!__cloc)
++ {
++ // This named locale is not supported by the underlying OS.
++ __throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++ "name not valid"));
++ }
++#endif
++ }
++
++ void
++ locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++ {
++ if (_S_get_c_locale() != __cloc)
++ __freelocale(__cloc);
++ }
++
++ __c_locale
++ locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++ { return __duplocale(__cloc); }
++} // namespace std
++
++namespace __gnu_cxx
++{
++ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++ {
++ "LC_CTYPE",
++ "LC_NUMERIC",
++ "LC_TIME",
++ "LC_COLLATE",
++ "LC_MONETARY",
++ "LC_MESSAGES",
++#if _GLIBCXX_NUM_CATEGORIES != 0
++ "LC_PAPER",
++ "LC_NAME",
++ "LC_ADDRESS",
++ "LC_TELEPHONE",
++ "LC_MEASUREMENT",
++ "LC_IDENTIFICATION"
++#endif
++ };
++}
++
++namespace std
++{
++ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++} // namespace std
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.h 2004-09-10 10:48:08.000000000 -0500
+@@ -0,0 +1,115 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _C_LOCALE_H
++#define _C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <cstring> // get std::strlen
++#include <cstdio> // get std::snprintf or std::sprintf
++#include <clocale>
++#include <langinfo.h> // For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h> // For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> // For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCXX_C_LOCALE_GNU for
++#endif
++#define _GLIBCXX_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCXX_NUM_CATEGORIES 6
++#define _GLIBCXX_NUM_CATEGORIES 0
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++ extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++ typedef __locale_t __c_locale;
++#else
++ typedef int* __c_locale;
++#endif
++
++ // Convert numeric value of type _Tv to string and return length of
++ // string. If snprintf is available use it, otherwise fall back to
++ // the unsafe sprintf which, in general, can be dangerous and should
++ // be avoided.
++ template<typename _Tv>
++ int
++ __convert_from_v(char* __out, const int __size, const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ _Tv __v, const __c_locale& __cloc, int __prec)
++ {
++ __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++ _Tv __v, const __c_locale&, int __prec)
++ {
++# ifdef __UCLIBC_HAS_LOCALE__
++ char* __old = std::setlocale(LC_ALL, NULL);
++ char* __sav = new char[std::strlen(__old) + 1];
++ std::strcpy(__sav, __old);
++ std::setlocale(LC_ALL, "C");
++# endif
++#endif
++
++ const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++ std::setlocale(LC_ALL, __sav);
++ delete [] __sav;
++#endif
++ return __ret;
++ }
++}
++
++#endif
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,306 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++ // Specializations.
++#ifdef _GLIBCXX_USE_WCHAR_T
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_out(state_type& __state, const intern_type* __from,
++ const intern_type* __from_end, const intern_type*& __from_next,
++ extern_type* __to, extern_type* __to_end,
++ extern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // wcsnrtombs is *very* fast but stops if encounters NUL characters:
++ // in case we fall back to wcrtomb and then continue, in a loop.
++ // NB: wcsnrtombs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
++ __from_end - __from_next);
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ const size_t __conv = wcsnrtombs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // wcrtomb.
++ for (; __from < __from_next; ++__from)
++ __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ extern_type __buf[MB_LEN_MAX];
++ __tmp_state = __state;
++ const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
++ if (__conv > static_cast<size_t>(__to_end - __to_next))
++ __ret = partial;
++ else
++ {
++ memcpy(__to_next, __buf, __conv);
++ __state = __tmp_state;
++ __to_next += __conv;
++ ++__from_next;
++ }
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_in(state_type& __state, const extern_type* __from,
++ const extern_type* __from_end, const extern_type*& __from_next,
++ intern_type* __to, intern_type* __to_end,
++ intern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we store a L'\0' and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
++ __from_end
++ - __from_next));
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ size_t __conv = mbsnrtowcs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (;; ++__to_next, __from += __conv)
++ {
++ __conv = mbrtowc(__to_next, __from, __from_end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __from_next = __from;
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ // It is unclear what to return in this case (see DR 382).
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ if (__to_next < __to_end)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from_next;
++ *__to_next++ = L'\0';
++ }
++ else
++ __ret = partial;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_encoding() const throw()
++ {
++ // XXX This implementation assumes that the encoding is
++ // stateless and is either single-byte or variable-width.
++ int __ret = 0;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ if (MB_CUR_MAX == 1)
++ __ret = 1;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_max_length() const throw()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ // XXX Probably wrong for stateful encodings.
++ int __ret = MB_CUR_MAX;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_length(state_type& __state, const extern_type* __from,
++ const extern_type* __end, size_t __max) const
++ {
++ int __ret = 0;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we advance past it and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++
++ // A dummy internal buffer is needed in order for mbsnrtocws to consider
++ // its fourth parameter (it wouldn't with NULL as first parameter).
++ wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
++ * __max));
++ while (__from < __end && __max)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
++ __end
++ - __from));
++ if (!__from_chunk_end)
++ __from_chunk_end = __end;
++
++ const extern_type* __tmp_from = __from;
++ size_t __conv = mbsnrtowcs(__to, &__from,
++ __from_chunk_end - __from,
++ __max, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (__from = __tmp_from;; __from += __conv)
++ {
++ __conv = mbrtowc(NULL, __from, __end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __state = __tmp_state;
++ __ret += __from - __tmp_from;
++ break;
++ }
++ if (!__from)
++ __from = __from_chunk_end;
++
++ __ret += __from - __tmp_from;
++ __max -= __conv;
++
++ if (__from < __end && __max)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from;
++ ++__ret;
++ --__max;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/collate_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L) strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++ // These are basically extensions to char_traits, and perhaps should
++ // be put there instead of here.
++ template<>
++ int
++ collate<char>::_M_compare(const char* __one, const char* __two) const
++ {
++ int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<char>::_M_transform(char* __to, const char* __from,
++ size_t __n) const
++ { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ int
++ collate<wchar_t>::_M_compare(const wchar_t* __one,
++ const wchar_t* __two) const
++ {
++ int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++ size_t __n) const
++ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,300 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L) wctype((S))
++#define __towupper_l(C, L) towupper((C))
++#define __towlower_l(C, L) towlower((C))
++#define __iswctype_l(C, M, L) iswctype((C), (M))
++#endif
++
++namespace std
++{
++ // NB: The other ctype<char> specializations are in src/locale.cc and
++ // various /config/os/* files.
++ template<>
++ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++ : ctype<char>(0, false, __refs)
++ {
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
++ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
++ this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
++ this->_M_table = this->_M_c_locale_ctype->__ctype_b;
++#endif
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ ctype<wchar_t>::__wmask_type
++ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++ {
++ __wmask_type __ret;
++ switch (__m)
++ {
++ case space:
++ __ret = __wctype_l("space", _M_c_locale_ctype);
++ break;
++ case print:
++ __ret = __wctype_l("print", _M_c_locale_ctype);
++ break;
++ case cntrl:
++ __ret = __wctype_l("cntrl", _M_c_locale_ctype);
++ break;
++ case upper:
++ __ret = __wctype_l("upper", _M_c_locale_ctype);
++ break;
++ case lower:
++ __ret = __wctype_l("lower", _M_c_locale_ctype);
++ break;
++ case alpha:
++ __ret = __wctype_l("alpha", _M_c_locale_ctype);
++ break;
++ case digit:
++ __ret = __wctype_l("digit", _M_c_locale_ctype);
++ break;
++ case punct:
++ __ret = __wctype_l("punct", _M_c_locale_ctype);
++ break;
++ case xdigit:
++ __ret = __wctype_l("xdigit", _M_c_locale_ctype);
++ break;
++ case alnum:
++ __ret = __wctype_l("alnum", _M_c_locale_ctype);
++ break;
++ case graph:
++ __ret = __wctype_l("graph", _M_c_locale_ctype);
++ break;
++ default:
++ __ret = 0;
++ }
++ return __ret;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_toupper(wchar_t __c) const
++ { return __towupper_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_tolower(wchar_t __c) const
++ { return __towlower_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ bool
++ ctype<wchar_t>::
++ do_is(mask __m, wchar_t __c) const
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ bool __ret = false;
++ const size_t __bitmasksize = 11;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__m & _M_bit[__bitcur]
++ && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
++ {
++ __ret = true;
++ break;
++ }
++ return __ret;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++ {
++ for (; __lo < __hi; ++__vec, ++__lo)
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ const size_t __bitmasksize = 11;
++ mask __m = 0;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
++ __m |= _M_bit[__bitcur];
++ *__vec = __m;
++ }
++ return __hi;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi && !this->do_is(__m, *__lo))
++ ++__lo;
++ return __lo;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++ {
++ while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++ ++__lo;
++ return __lo;
++ }
++
++ wchar_t
++ ctype<wchar_t>::
++ do_widen(char __c) const
++ { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<wchar_t>::
++ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++ {
++ while (__lo < __hi)
++ {
++ *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++ ++__lo;
++ ++__dest;
++ }
++ return __hi;
++ }
++
++ char
++ ctype<wchar_t>::
++ do_narrow(wchar_t __wc, char __dfault) const
++ {
++ if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++ return _M_narrow[__wc];
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ const int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
++ char* __dest) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ if (_M_narrow_ok)
++ while (__lo < __hi)
++ {
++ if (*__lo >= 0 && *__lo < 128)
++ *__dest = _M_narrow[*__lo];
++ else
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++ ++__lo;
++ ++__dest;
++ }
++ else
++ while (__lo < __hi)
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ ++__lo;
++ ++__dest;
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __hi;
++ }
++
++ void
++ ctype<wchar_t>::_M_initialize_ctype()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ wint_t __i;
++ for (__i = 0; __i < 128; ++__i)
++ {
++ const int __c = wctob(__i);
++ if (__c == EOF)
++ break;
++ else
++ _M_narrow[__i] = static_cast<char>(__c);
++ }
++ if (__i == 128)
++ _M_narrow_ok = true;
++ else
++ _M_narrow_ok = false;
++ for (size_t __j = 0;
++ __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
++ _M_widen[__j] = btowc(__j);
++
++ for (size_t __k = 0; __k <= 11; ++__k)
++ {
++ _M_bit[__k] = static_cast<mask>(_ISbit(__k));
++ _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ }
++#endif // _GLIBCXX_USE_WCHAR_T
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++ const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++ // Specializations.
++ template<>
++ string
++ messages<char>::do_get(catalog, int, int, const string& __dfault) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++ __uselocale(__old);
++ return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ const char* __msg = gettext(__dfault.c_str());
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return string(__msg);
++#else
++ const char* __msg = gettext(__dfault.c_str());
++ return string(__msg);
++#endif
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ wstring
++ messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++ {
++# ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ __uselocale(__old);
++ return _M_convert_from_char(__msg);
++# elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return _M_convert_from_char(__msg);
++# else
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ return _M_convert_from_char(__msg);
++# endif
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,118 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++ const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D) ((void)0)
++#define __bindtextdomain(D,P) ((void)0)
++#endif
++
++ // Non-virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::messages(size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
++ _M_name_messages(_S_get_c_name())
++ { }
++
++ template<typename _CharT>
++ messages<_CharT>::messages(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
++ _M_name_messages(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_messages = __tmp;
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
++ const char* __dir) const
++ {
++ __bindtextdomain(__s.c_str(), __dir);
++ return this->do_open(__s, __loc);
++ }
++
++ // Virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::~messages()
++ {
++ if (_M_name_messages != _S_get_c_name())
++ delete [] _M_name_messages;
++ _S_destroy_c_locale(_M_c_locale_messages);
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::do_open(const basic_string<char>& __s,
++ const locale&) const
++ {
++ // No error checking is done, assume the catalog exists and can
++ // be used.
++ __textdomain(__s.c_str());
++ return 0;
++ }
++
++ template<typename _CharT>
++ void
++ messages<_CharT>::do_close(catalog) const
++ { }
++
++ // messages_byname
++ template<typename _CharT>
++ messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++ : messages<_CharT>(__refs)
++ {
++ if (this->_M_name_messages != locale::facet::_S_get_c_name())
++ delete [] this->_M_name_messages;
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ this->_M_name_messages = __tmp;
++
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_messages);
++ this->_S_create_c_locale(this->_M_c_locale_messages, __s);
++ }
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,698 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ // Construct and return valid pattern consisting of some combination of:
++ // space none symbol sign value
++ money_base::pattern
++ money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++ {
++ pattern __ret;
++
++ // This insanely complicated routine attempts to construct a valid
++ // pattern for use with monyepunct. A couple of invariants:
++
++ // if (__precedes) symbol -> value
++ // else value -> symbol
++
++ // if (__space) space
++ // else none
++
++ // none == never first
++ // space never first or last
++
++ // Any elegant implementations of this are welcome.
++ switch (__posn)
++ {
++ case 0:
++ case 1:
++ // 1 The sign precedes the value and symbol.
++ __ret.field[0] = sign;
++ if (__space)
++ {
++ // Pattern starts with sign.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[3] = symbol;
++ }
++ __ret.field[2] = space;
++ }
++ else
++ {
++ // Pattern starts with sign and ends with none.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[3] = none;
++ }
++ break;
++ case 2:
++ // 2 The sign follows the value and symbol.
++ if (__space)
++ {
++ // Pattern either ends with sign.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[1] = space;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ // Pattern ends with sign then none.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[1] = symbol;
++ }
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ break;
++ case 3:
++ // 3 The sign immediately precedes the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = sign;
++ __ret.field[1] = symbol;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = sign;
++ __ret.field[3] = symbol;
++ }
++ else
++ {
++ __ret.field[1] = sign;
++ __ret.field[2] = symbol;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ case 4:
++ // 4 The sign immediately follows the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = sign;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = symbol;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ default:
++ ;
++ }
++ return __ret;
++ }
++
++ template<>
++ void
++ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == true
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ void
++ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == false
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ moneypunct<char, true>::~moneypunct()
++ { delete _M_data; }
++
++ template<>
++ moneypunct<char, false>::~moneypunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ {
++ uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++ _M_data->_M_atoms[__i] = btowc(uc);
++ }
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ void
++ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ {
++ uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++ _M_data->_M_atoms[__i] = btowc(uc);
++ }
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len;
++ __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ moneypunct<wchar_t, true>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++
++ template<>
++ moneypunct<wchar_t, false>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,183 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP,
++ __cloc));
++
++ // Check for NULL, which implies no grouping.
++ if (_M_data->_M_thousands_sep == '\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = "true";
++ _M_data->_M_truename_size = strlen(_M_data->_M_truename);
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = "false";
++ _M_data->_M_falsename_size = strlen(_M_data->_M_falsename);
++ }
++
++ template<>
++ numpunct<char>::~numpunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<wchar_t>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_S_get_c_locale());
++#endif
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ {
++ uc = static_cast<unsigned char>(__num_base::_S_atoms_out[__i]);
++ _M_data->_M_atoms_out[__i] = btowc(uc);
++ }
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ {
++ uc = static_cast<unsigned char>(__num_base::_S_atoms_in[__j]);
++ _M_data->_M_atoms_in[__j] = btowc(uc);
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++
++ if (_M_data->_M_thousands_sep == L'\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = L"true";
++ _M_data->_M_truename_size = wcslen(_M_data->_M_truename);
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = L"false";
++ _M_data->_M_falsename_size = wcslen(_M_data->_M_falsename);
++ }
++
++ template<>
++ numpunct<wchar_t>::~numpunct()
++ { delete _M_data; }
++ #endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.cc 2004-09-10 10:48:00.000000000 -0500
+@@ -0,0 +1,356 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __timepunct<char>::
++ _M_put(char* __s, size_t __maxlen, const char* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = strftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = '\0';
++ }
++
++ template<>
++ void
++ __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = "%m/%d/%y";
++ _M_data->_M_date_era_format = "%m/%d/%y";
++ _M_data->_M_time_format = "%H:%M:%S";
++ _M_data->_M_time_era_format = "%H:%M:%S";
++ _M_data->_M_date_time_format = "";
++ _M_data->_M_date_time_era_format = "";
++ _M_data->_M_am = "AM";
++ _M_data->_M_pm = "PM";
++ _M_data->_M_am_pm_format = "";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = "Sunday";
++ _M_data->_M_day2 = "Monday";
++ _M_data->_M_day3 = "Tuesday";
++ _M_data->_M_day4 = "Wednesday";
++ _M_data->_M_day5 = "Thursday";
++ _M_data->_M_day6 = "Friday";
++ _M_data->_M_day7 = "Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = "Sun";
++ _M_data->_M_aday2 = "Mon";
++ _M_data->_M_aday3 = "Tue";
++ _M_data->_M_aday4 = "Wed";
++ _M_data->_M_aday5 = "Thu";
++ _M_data->_M_aday6 = "Fri";
++ _M_data->_M_aday7 = "Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = "January";
++ _M_data->_M_month02 = "February";
++ _M_data->_M_month03 = "March";
++ _M_data->_M_month04 = "April";
++ _M_data->_M_month05 = "May";
++ _M_data->_M_month06 = "June";
++ _M_data->_M_month07 = "July";
++ _M_data->_M_month08 = "August";
++ _M_data->_M_month09 = "September";
++ _M_data->_M_month10 = "October";
++ _M_data->_M_month11 = "November";
++ _M_data->_M_month12 = "December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = "Jan";
++ _M_data->_M_amonth02 = "Feb";
++ _M_data->_M_amonth03 = "Mar";
++ _M_data->_M_amonth04 = "Apr";
++ _M_data->_M_amonth05 = "May";
++ _M_data->_M_amonth06 = "Jun";
++ _M_data->_M_amonth07 = "Jul";
++ _M_data->_M_amonth08 = "Aug";
++ _M_data->_M_amonth09 = "Sep";
++ _M_data->_M_amonth10 = "Oct";
++ _M_data->_M_amonth11 = "Nov";
++ _M_data->_M_amonth12 = "Dec";
++ }
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++ _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++ _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++ _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++ _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++ _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
++ _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
++ _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
++ _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++ _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++ _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++ _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++ _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++ _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++ _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
++ _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
++ _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
++ _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
++ _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
++ _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
++ _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
++ _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
++ _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
++ _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
++ _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
++ _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
++ _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
++ _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
++ _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
++ _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
++ _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
++ _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
++ _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
++ _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
++ _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
++ _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
++ _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
++ _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
++ _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
++ _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
++ _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
++ _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
++ _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ __timepunct<wchar_t>::
++ _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++ const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = L'\0';
++ }
++
++ template<>
++ void
++ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<wchar_t>;
++
++#warning wide time stuff
++// if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = L"%m/%d/%y";
++ _M_data->_M_date_era_format = L"%m/%d/%y";
++ _M_data->_M_time_format = L"%H:%M:%S";
++ _M_data->_M_time_era_format = L"%H:%M:%S";
++ _M_data->_M_date_time_format = L"";
++ _M_data->_M_date_time_era_format = L"";
++ _M_data->_M_am = L"AM";
++ _M_data->_M_pm = L"PM";
++ _M_data->_M_am_pm_format = L"";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = L"Sunday";
++ _M_data->_M_day2 = L"Monday";
++ _M_data->_M_day3 = L"Tuesday";
++ _M_data->_M_day4 = L"Wednesday";
++ _M_data->_M_day5 = L"Thursday";
++ _M_data->_M_day6 = L"Friday";
++ _M_data->_M_day7 = L"Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = L"Sun";
++ _M_data->_M_aday2 = L"Mon";
++ _M_data->_M_aday3 = L"Tue";
++ _M_data->_M_aday4 = L"Wed";
++ _M_data->_M_aday5 = L"Thu";
++ _M_data->_M_aday6 = L"Fri";
++ _M_data->_M_aday7 = L"Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = L"January";
++ _M_data->_M_month02 = L"February";
++ _M_data->_M_month03 = L"March";
++ _M_data->_M_month04 = L"April";
++ _M_data->_M_month05 = L"May";
++ _M_data->_M_month06 = L"June";
++ _M_data->_M_month07 = L"July";
++ _M_data->_M_month08 = L"August";
++ _M_data->_M_month09 = L"September";
++ _M_data->_M_month10 = L"October";
++ _M_data->_M_month11 = L"November";
++ _M_data->_M_month12 = L"December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = L"Jan";
++ _M_data->_M_amonth02 = L"Feb";
++ _M_data->_M_amonth03 = L"Mar";
++ _M_data->_M_amonth04 = L"Apr";
++ _M_data->_M_amonth05 = L"May";
++ _M_data->_M_amonth06 = L"Jun";
++ _M_data->_M_amonth07 = L"Jul";
++ _M_data->_M_amonth08 = L"Aug";
++ _M_data->_M_amonth09 = L"Sep";
++ _M_data->_M_amonth10 = L"Oct";
++ _M_data->_M_amonth11 = L"Nov";
++ _M_data->_M_amonth12 = L"Dec";
++ }
++#if 0
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ _M_data->_M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
++ _M_data->_M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
++ _M_data->_M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
++ _M_data->_M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
++ _M_data->_M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
++ _M_data->_M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
++ _M_data->_M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
++ _M_data->_M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
++ _M_data->_M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
++ _M_data->_M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
++ _M_data->_M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
++ _M_data->_M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
++ _M_data->_M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
++ _M_data->_M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
++ _M_data->_M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
++ _M_data->_M_aday2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
++ _M_data->_M_aday3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
++ _M_data->_M_aday4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
++ _M_data->_M_aday5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
++ _M_data->_M_aday6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
++ _M_data->_M_aday7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
++ _M_data->_M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
++ _M_data->_M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
++ _M_data->_M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
++ _M_data->_M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
++ _M_data->_M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
++ _M_data->_M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
++ _M_data->_M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
++ _M_data->_M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
++ _M_data->_M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
++ _M_data->_M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
++ _M_data->_M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
++ _M_data->_M_amonth02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
++ _M_data->_M_amonth03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
++ _M_data->_M_amonth04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
++ _M_data->_M_amonth05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
++ _M_data->_M_amonth06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
++ _M_data->_M_amonth07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
++ _M_data->_M_amonth08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
++ _M_data->_M_amonth09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
++ _M_data->_M_amonth10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
++ _M_data->_M_amonth11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
++ _M_data->_M_amonth12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
++ }
++#endif // 0
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
++ : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_timepunct = __tmp;
++ _M_initialize_timepunct(__cloc);
++ }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::~__timepunct()
++ {
++ if (_M_name_timepunct != _S_get_c_name())
++ delete [] _M_name_timepunct;
++ delete _M_data;
++ _S_destroy_c_locale(_M_c_locale_timepunct);
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_base.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_base.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,58 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ struct ctype_base
++ {
++ // Note: In uClibc, the following two types depend on configuration.
++
++ // Non-standard typedefs.
++ typedef const __ctype_touplow_t* __to_type;
++
++ // NB: Offsets into ctype<char>::_M_table force a particular size
++ // on the mask type. Because of this, we don't use an enum.
++ typedef __ctype_mask_t mask;
++ static const mask upper = _ISupper;
++ static const mask lower = _ISlower;
++ static const mask alpha = _ISalpha;
++ static const mask digit = _ISdigit;
++ static const mask xdigit = _ISxdigit;
++ static const mask space = _ISspace;
++ static const mask print = _ISprint;
++ static const mask graph = _ISalpha | _ISdigit | _ISpunct;
++ static const mask cntrl = _IScntrl;
++ static const mask punct = _ISpunct;
++ static const mask alnum = _ISalpha | _ISdigit;
++ };
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_inline.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++
++ bool
++ ctype<char>::
++ is(mask __m, char __c) const
++ { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++ const char*
++ ctype<char>::
++ is(const char* __low, const char* __high, mask* __vec) const
++ {
++ while (__low < __high)
++ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++ return __high;
++ }
++
++ const char*
++ ctype<char>::
++ scan_is(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++ ++__low;
++ return __low;
++ }
++
++ const char*
++ ctype<char>::
++ scan_not(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++ ++__low;
++ return __low;
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,92 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ const ctype_base::mask*
++ ctype<char>::classic_table() throw()
++ { return __C_ctype_b; }
++
++ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ char
++ ctype<char>::do_toupper(char __c) const
++ { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_toupper(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_toupper[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
++
++ char
++ ctype<char>::do_tolower(char __c) const
++ { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_tolower(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_tolower[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/os_defines.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/os_defines.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/os_defines.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,44 @@
++// Specific definitions for GNU/Linux -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here. This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
+diff -urN gcc-3.4.2-dist/libstdc++-v3/configure gcc-3.4.2/libstdc++-v3/configure
+--- gcc-3.4.2-dist/libstdc++-v3/configure 2004-08-13 15:44:04.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/configure 2004-09-10 10:47:40.000000000 -0500
+@@ -3878,6 +3878,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*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5545,6 +5550,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case x${target_os} in
++ xlinux-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+ cat >conftest.$ac_ext <<_ACEOF
+ #line $LINENO "configure"
+@@ -5759,6 +5767,77 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ echo "$as_me:$LINENO: result: uclibc" >&5
++echo "${ECHO_T}uclibc" >&6
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ if test -n "$check_msgfmt"; then
++ ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_check_msgfmt="yes"
++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++done
++
++ test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt=$ac_cv_prog_check_msgfmt
++if test -n "$check_msgfmt"; then
++ echo "$as_me:$LINENO: result: $check_msgfmt" >&5
++echo "${ECHO_T}$check_msgfmt" >&6
++else
++ echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++
++
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/configure.host gcc-3.4.2/libstdc++-v3/configure.host
+--- gcc-3.4.2-dist/libstdc++-v3/configure.host 2004-08-27 14:52:30.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/configure.host 2004-09-10 10:47:40.000000000 -0500
+@@ -217,6 +217,12 @@
+ ;;
+ esac
+
++# Override for uClibc since linux-uclibc gets mishandled above.
++case "${host_os}" in
++ *-uclibc*)
++ os_include_dir="os/uclibc"
++ ;;
++esac
+
+ # Set any OS-dependent and CPU-dependent bits.
+ # THIS TABLE IS SORTED. KEEP IT THAT WAY.
+diff -urN gcc-3.4.2-dist/libstdc++-v3/crossconfig.m4 gcc-3.4.2/libstdc++-v3/crossconfig.m4
+--- gcc-3.4.2-dist/libstdc++-v3/crossconfig.m4 2004-07-06 20:23:49.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/crossconfig.m4 2004-09-10 10:47:40.000000000 -0500
+@@ -138,6 +138,99 @@
+ ;;
+ esac
+ ;;
++ *-uclibc*)
++# Temporary hack until we implement the float versions of the libm funcs
++ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++ machine/endian.h machine/param.h sys/machine.h sys/types.h \
++ fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
++ SECTION_FLAGS='-ffunction-sections -fdata-sections'
++ AC_SUBST(SECTION_FLAGS)
++ GLIBCXX_CHECK_LINKER_FEATURES
++ GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
++ GLIBCXX_CHECK_WCHAR_T_SUPPORT
++
++ # For LFS.
++ AC_DEFINE(HAVE_INT64_T)
++ case "$target" in
++ *-uclinux*)
++ # Don't enable LFS with uClinux
++ ;;
++ *)
++ AC_DEFINE(_GLIBCXX_USE_LFS)
++ esac
++
++ # For showmanyc_helper().
++ AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
++ GLIBCXX_CHECK_POLL
++ GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
++
++ # For xsputn_2().
++ AC_CHECK_HEADERS(sys/uio.h)
++ GLIBCXX_CHECK_WRITEV
++
++# AC_DEFINE(HAVE_ACOSF)
++# AC_DEFINE(HAVE_ASINF)
++# AC_DEFINE(HAVE_ATANF)
++# AC_DEFINE(HAVE_ATAN2F)
++ AC_DEFINE(HAVE_CEILF)
++ AC_DEFINE(HAVE_COPYSIGN)
++# AC_DEFINE(HAVE_COPYSIGNF)
++# AC_DEFINE(HAVE_COSF)
++# AC_DEFINE(HAVE_COSHF)
++# AC_DEFINE(HAVE_EXPF)
++# AC_DEFINE(HAVE_FABSF)
++ AC_DEFINE(HAVE_FINITE)
++ AC_DEFINE(HAVE_FINITEF)
++ AC_DEFINE(HAVE_FLOORF)
++# AC_DEFINE(HAVE_FMODF)
++# AC_DEFINE(HAVE_FREXPF)
++ AC_DEFINE(HAVE_HYPOT)
++# AC_DEFINE(HAVE_HYPOTF)
++ AC_DEFINE(HAVE_ISINF)
++ AC_DEFINE(HAVE_ISINFF)
++ AC_DEFINE(HAVE_ISNAN)
++ AC_DEFINE(HAVE_ISNANF)
++# AC_DEFINE(HAVE_LOGF)
++# AC_DEFINE(HAVE_LOG10F)
++# AC_DEFINE(HAVE_MODFF)
++# AC_DEFINE(HAVE_SINF)
++# AC_DEFINE(HAVE_SINHF)
++# AC_DEFINE(HAVE_SINCOS)
++# AC_DEFINE(HAVE_SINCOSF)
++ AC_DEFINE(HAVE_SQRTF)
++# AC_DEFINE(HAVE_TANF)
++# AC_DEFINE(HAVE_TANHF)
++ if test x"long_double_math_on_this_cpu" = x"yes"; then
++ AC_MSG_ERROR([long_double_math_on_this_cpu is yes!])
++# AC_DEFINE(HAVE_ACOSL)
++# AC_DEFINE(HAVE_ASINL)
++# AC_DEFINE(HAVE_ATANL)
++# AC_DEFINE(HAVE_ATAN2L)
++# AC_DEFINE(HAVE_CEILL)
++# AC_DEFINE(HAVE_COPYSIGNL)
++# AC_DEFINE(HAVE_COSL)
++# AC_DEFINE(HAVE_COSHL)
++# AC_DEFINE(HAVE_EXPL)
++# AC_DEFINE(HAVE_FABSL)
++# AC_DEFINE(HAVE_FINITEL)
++# AC_DEFINE(HAVE_FLOORL)
++# AC_DEFINE(HAVE_FMODL)
++# AC_DEFINE(HAVE_FREXPL)
++# AC_DEFINE(HAVE_HYPOTL)
++# AC_DEFINE(HAVE_ISINFL)
++# AC_DEFINE(HAVE_ISNANL)
++# AC_DEFINE(HAVE_LOGL)
++# AC_DEFINE(HAVE_LOG10L)
++# AC_DEFINE(HAVE_MODFL)
++# AC_DEFINE(HAVE_POWL)
++# AC_DEFINE(HAVE_SINL)
++# AC_DEFINE(HAVE_SINHL)
++# AC_DEFINE(HAVE_SINCOSL)
++# AC_DEFINE(HAVE_SQRTL)
++# AC_DEFINE(HAVE_TANL)
++# AC_DEFINE(HAVE_TANHL)
++ fi
++ ;;
+ *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
+ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+ machine/endian.h machine/param.h sys/machine.h sys/types.h \
+@@ -152,7 +245,7 @@
+ AC_DEFINE(HAVE_INT64_T)
+ case "$target" in
+ *-uclinux*)
+- # Don't enable LFS with uClibc
++ # Don't enable LFS with uClinux
+ ;;
+ *)
+ AC_DEFINE(_GLIBCXX_USE_LFS)
+diff -urN gcc-3.4.2-dist/libstdc++-v3/include/c_compatibility/wchar.h gcc-3.4.2/libstdc++-v3/include/c_compatibility/wchar.h
+--- gcc-3.4.2-dist/libstdc++-v3/include/c_compatibility/wchar.h 2003-12-08 21:51:45.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/include/c_compatibility/wchar.h 2004-09-10 10:47:40.000000000 -0500
+@@ -101,7 +101,9 @@
+ using std::wmemcpy;
+ using std::wmemmove;
+ using std::wmemset;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using std::wcsftime;
++#endif
+
+ #if _GLIBCXX_USE_C99
+ using std::wcstold;
+diff -urN gcc-3.4.2-dist/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.4.2/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-3.4.2-dist/libstdc++-v3/include/c_std/std_cwchar.h 2004-07-20 03:52:12.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/include/c_std/std_cwchar.h 2004-09-10 10:47:40.000000000 -0500
+@@ -179,7 +179,9 @@
+ using ::wcscoll;
+ using ::wcscpy;
+ using ::wcscspn;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using ::wcsftime;
++#endif
+ using ::wcslen;
+ using ::wcsncat;
+ using ::wcsncmp;
diff --git a/toolchain/gcc/patches/3.4.6-nonmips/300-libstdc++-pic.patch b/toolchain/gcc/patches/3.4.6-nonmips/300-libstdc++-pic.patch
new file mode 100644
index 0000000000..c030ba6205
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6-nonmips/300-libstdc++-pic.patch
@@ -0,0 +1,47 @@
+# DP: Build and install libstdc++_pic.a library.
+
+--- gcc/libstdc++-v3/src/Makefile.am~ 2003-02-28 09:21:05.000000000 +0100
++++ gcc/libstdc++-v3/src/Makefile.am 2003-02-28 09:28:50.000000000 +0100
+@@ -224,6 +224,10 @@
+ @OPT_LDFLAGS@ @SECTION_LDFLAGS@ $(AM_CXXFLAGS) $(LDFLAGS) -o $@
+
+
++install-exec-local:
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Added bits to build debug library.
+ if GLIBCPP_BUILD_DEBUG
+ all-local: build_debug
+
+--- gcc/libstdc++-v3/src/Makefile.in~ 2004-02-21 09:55:48.000000000 +0100
++++ gcc/libstdc++-v3/src/Makefile.in 2004-02-21 09:59:34.000000000 +0100
+@@ -585,7 +585,7 @@
+
+ install-data-am: install-data-local
+
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+
+ install-info: install-info-am
+
+@@ -618,6 +618,7 @@
+ distclean-tags distdir dvi dvi-am info info-am install \
+ install-am install-data install-data-am install-data-local \
+ install-exec install-exec-am install-info install-info-am \
++ install-exec-local \
+ install-man install-strip install-toolexeclibLTLIBRARIES \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+@@ -707,6 +708,11 @@
+ install_debug:
+ (cd ${debugdir} && $(MAKE) \
+ toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
++
++install-exec-local:
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff --git a/toolchain/gcc/patches/3.4.6-nonmips/601-gcc34-arm-ldm.patch b/toolchain/gcc/patches/3.4.6-nonmips/601-gcc34-arm-ldm.patch
new file mode 100644
index 0000000000..142052fdf0
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6-nonmips/601-gcc34-arm-ldm.patch
@@ -0,0 +1,119 @@
+--- gcc-3.4.0/gcc/config/arm/arm.c.arm-ldm 2004-02-27 09:51:05.000000000 -0500
++++ gcc-3.4.0/gcc/config/arm/arm.c 2004-04-24 18:16:25.000000000 -0400
+@@ -8520,6 +8520,26 @@
+ return_used_this_function = 0;
+ }
+
++/* Return the number (counting from 0) of
++ the least significant set bit in MASK. */
++
++#ifdef __GNUC__
++inline
++#endif
++static int
++number_of_first_bit_set (mask)
++ int mask;
++{
++ int bit;
++
++ for (bit = 0;
++ (mask & (1 << bit)) == 0;
++ ++bit)
++ continue;
++
++ return bit;
++}
++
+ const char *
+ arm_output_epilogue (rtx sibling)
+ {
+@@ -8753,27 +8773,47 @@
+ saved_regs_mask |= (1 << PC_REGNUM);
+ }
+
+- /* Load the registers off the stack. If we only have one register
+- to load use the LDR instruction - it is faster. */
+- if (saved_regs_mask == (1 << LR_REGNUM))
+- {
+- /* The exception handler ignores the LR, so we do
+- not really need to load it off the stack. */
+- if (eh_ofs)
+- asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
+- else
+- asm_fprintf (f, "\tldr\t%r, [%r], #4\n", LR_REGNUM, SP_REGNUM);
+- }
+- else if (saved_regs_mask)
++ if (saved_regs_mask)
+ {
+- if (saved_regs_mask & (1 << SP_REGNUM))
+- /* Note - write back to the stack register is not enabled
+- (ie "ldmfd sp!..."). We know that the stack pointer is
+- in the list of registers and if we add writeback the
+- instruction becomes UNPREDICTABLE. */
+- print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
++ /* Load the registers off the stack. If we only have one register
++ to load use the LDR instruction - it is faster. */
++ if (bit_count (saved_regs_mask) == 1)
++ {
++ int reg = number_of_first_bit_set (saved_regs_mask);
++
++ switch (reg)
++ {
++ case SP_REGNUM:
++ /* Mustn't use base writeback when loading SP. */
++ asm_fprintf (f, "\tldr\t%r, [%r]\n", SP_REGNUM, SP_REGNUM);
++ break;
++
++ case LR_REGNUM:
++ if (eh_ofs)
++ {
++ /* The exception handler ignores the LR, so we do
++ not really need to load it off the stack. */
++ asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
++ break;
++ }
++ /* else fall through */
++
++ default:
++ asm_fprintf (f, "\tldr\t%r, [%r], #4\n", reg, SP_REGNUM);
++ break;
++ }
++ }
+ else
+- print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
++ {
++ if (saved_regs_mask & (1 << SP_REGNUM))
++ /* Note - write back to the stack register is not enabled
++ (ie "ldmfd sp!..."). We know that the stack pointer is
++ in the list of registers and if we add writeback the
++ instruction becomes UNPREDICTABLE. */
++ print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
++ else
++ print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
++ }
+ }
+
+ if (current_function_pretend_args_size)
+@@ -11401,22 +11441,6 @@
+ }
+ }
+
+-/* Return the number (counting from 0) of
+- the least significant set bit in MASK. */
+-
+-inline static int
+-number_of_first_bit_set (int mask)
+-{
+- int bit;
+-
+- for (bit = 0;
+- (mask & (1 << bit)) == 0;
+- ++bit)
+- continue;
+-
+- return bit;
+-}
+-
+ /* Generate code to return from a thumb function.
+ If 'reg_containing_return_addr' is -1, then the return address is
+ actually on the stack, at the stack pointer. */
diff --git a/toolchain/gcc/patches/3.4.6-nonmips/602-sdk-libstdc++-includes.patch b/toolchain/gcc/patches/3.4.6-nonmips/602-sdk-libstdc++-includes.patch
new file mode 100644
index 0000000000..4377c2143b
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6-nonmips/602-sdk-libstdc++-includes.patch
@@ -0,0 +1,22 @@
+--- gcc-3.4.1/libstdc++-v3/libmath/Makefile.am~ 2003-08-27 22:29:42.000000000 +0100
++++ gcc-3.4.1/libstdc++-v3/libmath/Makefile.am 2004-07-22 16:41:45.152130128 +0100
+@@ -32,7 +32,7 @@
+
+ libmath_la_SOURCES = stubs.c
+
+-AM_CPPFLAGS = $(CANADIAN_INCLUDES)
++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include
+
+ # Only compiling "C" sources in this directory.
+ LIBTOOL = @LIBTOOL@ --tag CC
+--- gcc-3.4.1/libstdc++-v3/fragment.am.old 2004-07-22 18:24:58.024083656 +0100
++++ gcc-3.4.1/libstdc++-v3/fragment.am 2004-07-22 18:24:59.019932264 +0100
+@@ -18,7 +18,7 @@
+ $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+
+ # -I/-D flags to pass when compiling.
+-AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include
+
+
+
diff --git a/toolchain/gcc/patches/3.4.6-nonmips/700-pr15068-fix.patch b/toolchain/gcc/patches/3.4.6-nonmips/700-pr15068-fix.patch
new file mode 100644
index 0000000000..2977765c5f
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6-nonmips/700-pr15068-fix.patch
@@ -0,0 +1,44 @@
+See http://gcc.gnu.org/PR15068
+
+Fixes error
+
+../sysdeps/generic/s_fmax.c: In function `__fmax':
+../sysdeps/generic/s_fmax.c:28: internal compiler error: in elim_reg_cond, at flow.c:3257
+Please submit a full bug report,
+with preprocessed source if appropriate.
+See <URL:http://gcc.gnu.org/bugs.html> for instructions.
+make[2]: *** [/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/build-glibc/math/s_fmax.o] Error 1
+make[2]: Leaving directory `/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/glibc-20040822/math'
+make[1]: *** [math/others] Error 2
+make[1]: Leaving directory `/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/glibc-20040822'
+make: *** [all] Error 2
+
+[ rediffed against gcc-3.4.1, with elbow grease, ending up with same thing as
+http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/flow.c.diff?cvsroot=gcc&only_with_tag=csl-arm-branch&r1=1.563.4.2&r2=1.563.4.3 ]
+
+--- gcc-3.4.1/gcc/flow.c.old 2004-02-27 19:39:19.000000000 -0800
++++ gcc-3.4.1/gcc/flow.c 2004-08-26 07:29:46.000000000 -0700
+@@ -1878,6 +1878,7 @@
+ rtx set_src = SET_SRC (pc_set (BB_END (bb)));
+ rtx cond_true = XEXP (set_src, 0);
+ rtx reg = XEXP (cond_true, 0);
++ enum rtx_code inv_cond;
+
+ if (GET_CODE (reg) == SUBREG)
+ reg = SUBREG_REG (reg);
+@@ -1886,11 +1887,13 @@
+ in the form of a comparison of a register against zero.
+ If the condition is more complex than that, then it is safe
+ not to record any information. */
+- if (GET_CODE (reg) == REG
++ inv_cond = reversed_comparison_code (cond_true, BB_END (bb));
++ if (inv_cond != UNKNOWN
++ && GET_CODE (reg) == REG
+ && XEXP (cond_true, 1) == const0_rtx)
+ {
+ rtx cond_false
+- = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
++ = gen_rtx_fmt_ee (inv_cond,
+ GET_MODE (cond_true), XEXP (cond_true, 0),
+ XEXP (cond_true, 1));
+ if (GET_CODE (XEXP (set_src, 1)) == PC)
diff --git a/toolchain/gcc/patches/3.4.6-nonmips/800-arm-bigendian.patch b/toolchain/gcc/patches/3.4.6-nonmips/800-arm-bigendian.patch
new file mode 100644
index 0000000000..0bae8f474c
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6-nonmips/800-arm-bigendian.patch
@@ -0,0 +1,70 @@
+By Lennert Buytenhek <buytenh@wantstofly.org>
+Adds support for arm*b-linux* big-endian ARM targets
+
+See http://gcc.gnu.org/PR16350
+
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h 2004-08-16 16:01:50.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-08-16 15:43:40.000000000 -0500
+@@ -30,17 +30,34 @@
+ /* Do not assume anything about header files. */
+ #define NO_IMPLICIT_EXTERN_C
+
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT ARM_FLAG_BIG_END
++#define TARGET_ENDIAN_OPTION "mbig-endian"
++#define TARGET_LINKER_EMULATION "armelfb_linux"
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#define TARGET_ENDIAN_OPTION "mlittle-endian"
++#define TARGET_LINKER_EMULATION "armelf_linux"
++#endif
++
+ /* Default is to use APCS-32 mode. */
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_APCS_32 | \
++ ARM_FLAG_MMU_TRAPS | \
++ TARGET_ENDIAN_DEFAULT )
+
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
+
+ #undef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" }
++ { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
+
+ #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+
+@@ -101,7 +118,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
+ -X \
+- %{mbig-endian:-EB}" \
++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+ #endif
+
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc 2004-08-16 16:01:50.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc 2004-08-16 16:01:25.000000000 -0500
+@@ -672,6 +672,11 @@
+ ;;
+ arm*-*-linux*) # ARM GNU/Linux with ELF
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++ case $target in
++ arm*b-*)
++ tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++ ;;
++ esac
+ tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ gnu_ld=yes
diff --git a/toolchain/gcc/patches/3.4.6-nonmips/810-arm-bigendian-uclibc.patch b/toolchain/gcc/patches/3.4.6-nonmips/810-arm-bigendian-uclibc.patch
new file mode 100644
index 0000000000..a4d87e2317
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6-nonmips/810-arm-bigendian-uclibc.patch
@@ -0,0 +1,27 @@
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h 2004-08-16 16:08:18.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-08-16 16:06:24.000000000 -0500
+@@ -107,7 +107,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
+ -X \
+- %{mbig-endian:-EB}" \
++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+ #else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc 2004-08-16 16:08:18.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc 2004-08-16 16:03:25.000000000 -0500
+@@ -666,6 +666,11 @@
+ ;;
+ arm*-*-linux-uclibc*) # ARM GNU/Linux with ELF - uClibc
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++ case $target in
++ arm*b-*)
++ tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++ ;;
++ esac
+ tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ gnu_ld=yes
diff --git a/toolchain/gcc/patches/3.4.6-nonmips/arm-softfloat.patch.conditional b/toolchain/gcc/patches/3.4.6-nonmips/arm-softfloat.patch.conditional
new file mode 100644
index 0000000000..19d1b90dac
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6-nonmips/arm-softfloat.patch.conditional
@@ -0,0 +1,270 @@
+Note... modified my mjn3 to not conflict with the big endian arm patch.
+Warning!!! Only the linux target is aware of TARGET_ENDIAN_DEFAULT.
+Also changed
+ #define SUBTARGET_EXTRA_ASM_SPEC "\
+ %{!mcpu=*:-mcpu=xscale} \
+ %{mhard-float:-mfpu=fpa} \
+ %{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+to
+ #define SUBTARGET_EXTRA_ASM_SPEC "\
+ %{mhard-float:-mfpu=fpa} \
+ %{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+in gcc/config/arm/linux-elf.h.
+#
+# Submitted:
+#
+# Dimitry Andric <dimitry@andric.com>, 2004-05-01
+#
+# Description:
+#
+# Nicholas Pitre released this patch for gcc soft-float support here:
+# http://lists.arm.linux.org.uk/pipermail/linux-arm/2003-October/006436.html
+#
+# This version has been adapted to work with gcc 3.4.0.
+#
+# The original patch doesn't distinguish between softfpa and softvfp modes
+# in the way Nicholas Pitre probably meant. His description is:
+#
+# "Default is to use APCS-32 mode with soft-vfp. The old Linux default for
+# floats can be achieved with -mhard-float or with the configure
+# --with-float=hard option. If -msoft-float or --with-float=soft is used then
+# software float support will be used just like the default but with the legacy
+# big endian word ordering for double float representation instead."
+#
+# Which means the following:
+#
+# * If you compile without -mhard-float or -msoft-float, you should get
+# software floating point, using the VFP format. The produced object file
+# should have these flags in its header:
+#
+# private flags = 600: [APCS-32] [VFP float format] [software FP]
+#
+# * If you compile with -mhard-float, you should get hardware floating point,
+# which always uses the FPA format. Object file header flags should be:
+#
+# private flags = 0: [APCS-32] [FPA float format]
+#
+# * If you compile with -msoft-float, you should get software floating point,
+# using the FPA format. This is done for compatibility reasons with many
+# existing distributions. Object file header flags should be:
+#
+# private flags = 200: [APCS-32] [FPA float format] [software FP]
+#
+# The original patch from Nicholas Pitre contained the following constructs:
+#
+# #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+# %{mhard-float:-mfpu=fpa} \
+# %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
+#
+# However, gcc doesn't accept this ";:" notation, used in the 3rd line. This
+# is probably the reason Robert Schwebel modified it to:
+#
+# #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+# %{mhard-float:-mfpu=fpa} \
+# %{!mhard-float: %{msoft-float:-mfpu=softfpa -mfpu=softvfp}}"
+#
+# But this causes the following behaviour:
+#
+# * If you compile without -mhard-float or -msoft-float, the compiler generates
+# software floating point instructions, but *nothing* is passed to the
+# assembler, which results in an object file which has flags:
+#
+# private flags = 0: [APCS-32] [FPA float format]
+#
+# This is not correct!
+#
+# * If you compile with -mhard-float, the compiler generates hardware floating
+# point instructions, and passes "-mfpu=fpa" to the assembler, which results
+# in an object file which has the same flags as in the previous item, but now
+# those *are* correct.
+#
+# * If you compile with -msoft-float, the compiler generates software floating
+# point instructions, and passes "-mfpu=softfpa -mfpu=softvfp" (in that
+# order) to the assembler, which results in an object file with flags:
+#
+# private flags = 600: [APCS-32] [VFP float format] [software FP]
+#
+# This is not correct, because the last "-mfpu=" option on the assembler
+# command line determines the actual FPU convention used (which should be FPA
+# in this case).
+#
+# Therefore, I modified this patch to get the desired behaviour. Every
+# instance of the notation:
+#
+# %{msoft-float:-mfpu=softfpa -mfpu=softvfp}
+#
+# was changed to:
+#
+# %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}
+#
+# I also did the following:
+#
+# * Modified all TARGET_DEFAULT macros I could find to include ARM_FLAG_VFP, to
+# be consistent with Nicholas' original patch.
+# * Removed any "msoft-float" or "mhard-float" from all MULTILIB_DEFAULTS
+# macros I could find. I think that if you compile without any options, you
+# would like to get the defaults. :)
+# * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed
+# anymore. (The required functions are now in libgcc.)
+
+diff -urN gcc-3.4.1-old/gcc/config/arm/coff.h gcc-3.4.1/gcc/config/arm/coff.h
+--- gcc-3.4.1-old/gcc/config/arm/coff.h 2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/coff.h 2004-09-02 21:51:15.000000000 -0500
+@@ -31,11 +31,16 @@
+ #define TARGET_VERSION fputs (" (ARM/coff)", stderr)
+
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_SOFT_FLOAT \
++ | ARM_FLAG_VFP \
++ | ARM_FLAG_APCS_32 \
++ | ARM_FLAG_APCS_FRAME \
++ | ARM_FLAG_MMU_TRAPS )
+
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork" }
++ { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork" }
+ #endif
+
+ /* This is COFF, but prefer stabs. */
+diff -urN gcc-3.4.1-old/gcc/config/arm/elf.h gcc-3.4.1/gcc/config/arm/elf.h
+--- gcc-3.4.1-old/gcc/config/arm/elf.h 2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/elf.h 2004-09-02 21:51:15.000000000 -0500
+@@ -46,7 +46,9 @@
+
+ #ifndef SUBTARGET_ASM_FLOAT_SPEC
+ #define SUBTARGET_ASM_FLOAT_SPEC "\
+-%{mapcs-float:-mfloat} %{msoft-float:-mfpu=softfpa}"
++%{mapcs-float:-mfloat} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ #endif
+
+ #ifndef ASM_SPEC
+@@ -106,12 +108,17 @@
+ #endif
+
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_SOFT_FLOAT \
++ | ARM_FLAG_VFP \
++ | ARM_FLAG_APCS_32 \
++ | ARM_FLAG_APCS_FRAME \
++ | ARM_FLAG_MMU_TRAPS )
+ #endif
+
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
++ { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
+ #endif
+
+ #define TARGET_ASM_FILE_START_APP_OFF true
+diff -urN gcc-3.4.1-old/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/linux-elf.h 2004-09-02 21:50:52.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-09-02 22:00:49.000000000 -0500
+@@ -44,12 +44,26 @@
+ #define TARGET_LINKER_EMULATION "armelf_linux"
+ #endif
+
+-/* Default is to use APCS-32 mode. */
++/*
++ * Default is to use APCS-32 mode with soft-vfp.
++ * The old Linux default for floats can be achieved with -mhard-float
++ * or with the configure --with-float=hard option.
++ * If -msoft-float or --with-float=soft is used then software float
++ * support will be used just like the default but with the legacy
++ * big endian word ordering for double float representation instead.
++ */
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT \
+- ( ARM_FLAG_APCS_32 | \
+- ARM_FLAG_MMU_TRAPS | \
+- TARGET_ENDIAN_DEFAULT )
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_APCS_32 \
++ | ARM_FLAG_SOFT_FLOAT \
++ | TARGET_ENDIAN_DEFAULT \
++ | ARM_FLAG_VFP \
++ | ARM_FLAG_MMU_TRAPS )
++
++#undef SUBTARGET_EXTRA_ASM_SPEC
++#define SUBTARGET_EXTRA_ASM_SPEC "\
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+
+@@ -57,7 +71,7 @@
+
+ #undef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
++ { "marm", TARGET_ENDIAN_OPTION, "mapcs-32", "mno-thumb-interwork" }
+
+ #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+
+@@ -72,7 +86,7 @@
+ %{shared:-lc} \
+ %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
+
+-#define LIBGCC_SPEC "%{msoft-float:-lfloat} -lgcc"
++#define LIBGCC_SPEC "-lgcc"
+
+ /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add
+ the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
+diff -urN gcc-3.4.1-old/gcc/config/arm/t-linux gcc-3.4.1/gcc/config/arm/t-linux
+--- gcc-3.4.1-old/gcc/config/arm/t-linux 2003-09-20 16:09:07.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/t-linux 2004-09-02 21:51:15.000000000 -0500
+@@ -4,7 +4,10 @@
+ LIBGCC2_DEBUG_CFLAGS = -g0
+
+ LIB1ASMSRC = arm/lib1funcs.asm
+-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx
++LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \
++ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
++ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
++ _fixsfsi _fixunssfsi
+
+ # MULTILIB_OPTIONS = mhard-float/msoft-float
+ # MULTILIB_DIRNAMES = hard-float soft-float
+diff -urN gcc-3.4.1-old/gcc/config/arm/unknown-elf.h gcc-3.4.1/gcc/config/arm/unknown-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/unknown-elf.h 2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/unknown-elf.h 2004-09-02 21:51:15.000000000 -0500
+@@ -30,7 +30,12 @@
+
+ /* Default to using APCS-32 and software floating point. */
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_SOFT_FLOAT \
++ | ARM_FLAG_VFP \
++ | ARM_FLAG_APCS_32 \
++ | ARM_FLAG_APCS_FRAME \
++ | ARM_FLAG_MMU_TRAPS )
+ #endif
+
+ /* Now we define the strings used to build the spec file. */
+diff -urN gcc-3.4.1-old/gcc/config/arm/xscale-elf.h gcc-3.4.1/gcc/config/arm/xscale-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/xscale-elf.h 2003-07-01 18:26:43.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/xscale-elf.h 2004-09-02 21:51:15.000000000 -0500
+@@ -49,11 +49,12 @@
+ endian, regardless of the endian-ness of the memory
+ system. */
+
+-#define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+- %{mhard-float:-mfpu=fpa} \
+- %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
++#define SUBTARGET_EXTRA_ASM_SPEC "\
++%{!mcpu=*:-mcpu=xscale} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "mlittle-endian", "mno-thumb-interwork", "marm", "msoft-float" }
++ { "mlittle-endian", "mno-thumb-interwork", "marm" }
+ #endif
diff --git a/toolchain/gcc/patches/3.4.6/100-uclibc-conf.patch b/toolchain/gcc/patches/3.4.6/100-uclibc-conf.patch
new file mode 100644
index 0000000000..29e4c802e2
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6/100-uclibc-conf.patch
@@ -0,0 +1,442 @@
+diff -urN gcc-3.4.1-dist/boehm-gc/configure gcc-3.4.1/boehm-gc/configure
+--- gcc-3.4.1-dist/boehm-gc/configure 2004-07-01 14:14:03.000000000 -0500
++++ gcc-3.4.1/boehm-gc/configure 2004-08-12 16:22:57.000000000 -0500
+@@ -1947,6 +1947,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*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN gcc-3.4.1-dist/boehm-gc/ltconfig gcc-3.4.1/boehm-gc/ltconfig
+--- gcc-3.4.1-dist/boehm-gc/ltconfig 2002-11-20 09:59:06.000000000 -0600
++++ gcc-3.4.1/boehm-gc/ltconfig 2004-08-12 15:54:42.000000000 -0500
+@@ -1981,6 +1981,23 @@
+ fi
+ ;;
+
++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
++ deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
++ file_magic_cmd=/usr/bin/file
++ file_magic_test_file=`echo /lib/libuClibc-*.so`
++
++ # Assume using the uClibc dynamic linker.
++ dynamic_linker="uClibc ld.so"
++ ;;
++
+ netbsd*)
+ version_type=sunos
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h 2004-01-31 00:18:11.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-08-12 15:54:42.000000000 -0500
+@@ -81,6 +81,18 @@
+ "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC "%{h*} %{version:-v} \
++ %{b} %{Wl,*:%*} \
++ %{static:-Bstatic} \
++ %{shared:-shared} \
++ %{symbolic:-Bsymbolic} \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++ -X \
++ %{mbig-endian:-EB}" \
++ SUBTARGET_EXTRA_LINK_SPEC
++#else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+ %{b} %{Wl,*:%*} \
+ %{static:-Bstatic} \
+@@ -91,6 +103,7 @@
+ -X \
+ %{mbig-endian:-EB}" \
+ SUBTARGET_EXTRA_LINK_SPEC
++#endif
+
+ #define TARGET_OS_CPP_BUILTINS() LINUX_TARGET_OS_CPP_BUILTINS()
+
+diff -urN gcc-3.4.1-dist/gcc/config/cris/linux.h gcc-3.4.1/gcc/config/cris/linux.h
+--- gcc-3.4.1-dist/gcc/config/cris/linux.h 2003-11-28 21:08:09.000000000 -0600
++++ gcc-3.4.1/gcc/config/cris/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -79,6 +79,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++ -rpath-link include/asm/../..%s\
++ %{shared} %{static}\
++ %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++ %{!shared: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++ %{!r:%{O2|O3: --gc-sections}}"
++
++#else /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+
+@@ -93,6 +112,8 @@
+ %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+ %{!r:%{O2|O3: --gc-sections}}"
+
++#endif /* USE_UCLIBC */
++
+
+ /* Node: Run-time Target */
+
+diff -urN gcc-3.4.1-dist/gcc/config/cris/t-linux-uclibc gcc-3.4.1/gcc/config/cris/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/cris/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/cris/t-linux-uclibc 2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,3 @@
++T_CFLAGS = -DUSE_UCLIBC
++TARGET_LIBGCC2_CFLAGS += -fPIC
++CRTSTUFF_T_CFLAGS_S = $(TARGET_LIBGCC2_CFLAGS)
+diff -urN gcc-3.4.1-dist/gcc/config/i386/linux.h gcc-3.4.1/gcc/config/i386/linux.h
+--- gcc-3.4.1-dist/gcc/config/i386/linux.h 2003-11-28 21:08:10.000000000 -0600
++++ gcc-3.4.1/gcc/config/i386/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -118,6 +118,15 @@
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.1}} \
+ %{static:-static}}}"
+ #else
++#if defined USE_UCLIBC
++#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
++ %{!shared: \
++ %{!ibcs: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}}}"
++#else
+ #define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+@@ -126,6 +135,7 @@
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ %{static:-static}}}"
+ #endif
++#endif
+
+ /* A C statement (sans semicolon) to output to the stdio stream
+ FILE the assembler definition of uninitialized global DECL named
+diff -urN gcc-3.4.1-dist/gcc/config/mips/linux.h gcc-3.4.1/gcc/config/mips/linux.h
+--- gcc-3.4.1-dist/gcc/config/mips/linux.h 2004-06-15 20:42:24.000000000 -0500
++++ gcc-3.4.1/gcc/config/mips/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -109,6 +109,17 @@
+
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC \
++ "%(endian_spec) \
++ %{shared:-shared} \
++ %{!shared: \
++ %{!ibcs: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}}}"
++#else
+ #define LINK_SPEC \
+ "%(endian_spec) \
+ %{shared:-shared} \
+@@ -118,6 +129,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+ %{static:-static}}}"
++#endif
+
+ #undef SUBTARGET_ASM_SPEC
+ #define SUBTARGET_ASM_SPEC "\
+diff -urN gcc-3.4.1-dist/gcc/config/rs6000/linux.h gcc-3.4.1/gcc/config/rs6000/linux.h
+--- gcc-3.4.1-dist/gcc/config/rs6000/linux.h 2004-02-25 09:11:19.000000000 -0600
++++ gcc-3.4.1/gcc/config/rs6000/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -61,7 +61,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+
+ #undef LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+
+ #define LINK_GCC_C_SEQUENCE_SPEC \
+ "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+diff -urN gcc-3.4.1-dist/gcc/config/rs6000/sysv4.h gcc-3.4.1/gcc/config/rs6000/sysv4.h
+--- gcc-3.4.1-dist/gcc/config/rs6000/sysv4.h 2004-06-10 01:39:50.000000000 -0500
++++ gcc-3.4.1/gcc/config/rs6000/sysv4.h 2004-08-12 15:54:43.000000000 -0500
+@@ -947,6 +947,7 @@
+ mcall-linux : %(link_os_linux) ; \
+ mcall-gnu : %(link_os_gnu) ; \
+ mcall-netbsd : %(link_os_netbsd) ; \
++ mcall-linux-uclibc : %(link_os_linux_uclibc); \
+ mcall-openbsd: %(link_os_openbsd) ; \
+ : %(link_os_default) }"
+
+@@ -1124,6 +1125,10 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+ #endif
+@@ -1290,6 +1295,7 @@
+ { "link_os_sim", LINK_OS_SIM_SPEC }, \
+ { "link_os_freebsd", LINK_OS_FREEBSD_SPEC }, \
+ { "link_os_linux", LINK_OS_LINUX_SPEC }, \
++ { "link_os_linux_uclibc", LINK_OS_LINUX_UCLIBC_SPEC }, \
+ { "link_os_gnu", LINK_OS_GNU_SPEC }, \
+ { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \
+ { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \
+diff -urN gcc-3.4.1-dist/gcc/config/sh/linux.h gcc-3.4.1/gcc/config/sh/linux.h
+--- gcc-3.4.1-dist/gcc/config/sh/linux.h 2004-01-11 20:29:13.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/linux.h 2004-08-12 15:54:43.000000000 -0500
+@@ -73,12 +73,21 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++ "%{shared:-shared} \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+ "%{shared:-shared} \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ %{static:-static}"
++#endif
+
+ #undef LIB_SPEC
+ #define LIB_SPEC \
+diff -urN gcc-3.4.1-dist/gcc/config/sh/t-linux-uclibc gcc-3.4.1/gcc/config/sh/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/sh/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/t-linux-uclibc 2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,13 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++TARGET_LIBGCC2_CFLAGS = -fpic -DNO_FPSCR_VALUES
++LIB1ASMFUNCS_CACHE = _ic_invalidate
++
++LIB2FUNCS_EXTRA=
++
++MULTILIB_OPTIONS= $(MULTILIB_ENDIAN) m3e/m4
++MULTILIB_DIRNAMES=
++MULTILIB_MATCHES =
++MULTILIB_EXCEPTIONS=
++
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
+diff -urN gcc-3.4.1-dist/gcc/config/sh/t-sh64-uclibc gcc-3.4.1/gcc/config/sh/t-sh64-uclibc
+--- gcc-3.4.1-dist/gcc/config/sh/t-sh64-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/t-sh64-uclibc 2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,13 @@
++EXTRA_MULTILIB_PARTS= crt1.o crti.o crtn.o crtbegin.o crtend.o
++
++LIB1ASMFUNCS = \
++ _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
++ _shcompact_call_trampoline _shcompact_return_trampoline \
++ _shcompact_incoming_args _ic_invalidate _nested_trampoline \
++ _push_pop_shmedia_regs \
++ _udivdi3 _divdi3 _umoddi3 _moddi3
++
++MULTILIB_OPTIONS = $(MULTILIB_ENDIAN) m5-32media-nofpu/m5-compact/m5-compact-nofpu/m5-64media/m5-64media-nofpu
++MULTILIB_DIRNAMES= $(MULTILIB_ENDIAN) nofpu compact nofpu/compact media64 nofpu/media64
++MULTILIB_MATCHES=
++MULTILIB_EXCEPTIONS=
+diff -urN gcc-3.4.1-dist/gcc/config/t-linux-uclibc gcc-3.4.1/gcc/config/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/t-linux-uclibc 2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,15 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Compile crtbeginS.o and crtendS.o with pic.
++CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
++# Compile libgcc2.a with pic.
++TARGET_LIBGCC2_CFLAGS = -fPIC
++
++# Override t-slibgcc-elf-ver to export some libgcc symbols with
++# the symbol versions that glibc used.
++#SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
++
++# Use unwind-dw2-fde
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
++ $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc 2004-04-21 10:12:35.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc 2004-08-12 15:59:46.000000000 -0500
+@@ -664,6 +664,12 @@
+ extra_parts=""
+ use_collect2=yes
+ ;;
++arm*-*-linux-uclibc*) # ARM GNU/Linux with ELF - uClibc
++ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++ tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
++ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++ gnu_ld=yes
++ ;;
+ arm*-*-linux*) # ARM GNU/Linux with ELF
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
+ tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+@@ -725,6 +731,10 @@
+ tmake_file="cris/t-cris cris/t-elfmulti"
+ gas=yes
+ ;;
++cris-*-linux-uclibc*)
++ tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
++ tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux-uclibc"
++ ;;
+ cris-*-linux*)
+ tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
+ tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux"
+@@ -988,6 +998,11 @@
+ thread_file='single'
+ fi
+ ;;
++i[34567]86-*-linux*uclibc*) # Intel 80386's running GNU/Linux
++ # with ELF format using uClibc
++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h"
++ tmake_file="t-slibgcc-elf-ver t-linux-uclibc i386/t-crtstuff"
++ ;;
+ i[34567]86-*-linux*) # Intel 80386's running GNU/Linux
+ # with ELF format using glibc 2
+ # aka GNU/Linux C library 6
+@@ -1547,6 +1562,16 @@
+ gnu_ld=yes
+ gas=yes
+ ;;
++mips*-*-linux-uclibc*) # Linux MIPS, either endian. uClibc
++ tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
++ case ${target} in
++ mipsisa32*-*)
++ target_cpu_default="MASK_SOFT_FLOAT"
++ tm_defines="MIPS_ISA_DEFAULT=32"
++ ;;
++ esac
++ tmake_file="t-slibgcc-elf-ver t-linux-uclibc"
++ ;;
+ mips*-*-linux*) # Linux MIPS, either endian.
+ tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
+ case ${target} in
+@@ -1764,6 +1789,10 @@
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxspe.h"
+ tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+ ;;
++powerpc-*-linux-uclibc*)
++ tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
++ tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux-uclibc rs6000/t-ppccomm"
++ ;;
+ powerpc-*-linux*)
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
+ tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+@@ -1916,7 +1945,7 @@
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/embed-elf.h sh/rtemself.h rtems.h"
+ ;;
+ sh-*-linux* | sh[2346lbe]*-*-linux*)
+- tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver t-linux"
++ tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver"
+ case ${target} in
+ sh*be-*-* | sh*eb-*-*) ;;
+ *)
+@@ -1924,9 +1953,17 @@
+ tmake_file="${tmake_file} sh/t-le"
+ ;;
+ esac
+- tmake_file="${tmake_file} sh/t-linux"
++ case ${target} in
++ *-*-linux-uclibc*) tmake_file="${tmake_file} t-linux-uclibc sh/t-linux-uclibc" ;;
++ *) tmake_file="${tmake_file} t-linux sh/t-linux" ;;
++ esac
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/linux.h"
+ case ${target} in
++ sh64*-*-linux-uclibc*)
++ tmake_file="${tmake_file} sh/t-sh64-uclibc"
++ tm_file="${tm_file} sh/sh64.h"
++ extra_headers="shmedia.h ushmedia.h sshmedia.h"
++ ;;
+ sh64*)
+ tmake_file="${tmake_file} sh/t-sh64"
+ tm_file="${tm_file} sh/sh64.h"
+diff -urN gcc-3.4.1-dist/libtool.m4 gcc-3.4.1/libtool.m4
+--- gcc-3.4.1-dist/libtool.m4 2004-05-18 04:08:37.000000000 -0500
++++ gcc-3.4.1/libtool.m4 2004-08-12 15:54:43.000000000 -0500
+@@ -689,6 +689,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*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN gcc-3.4.1-dist/ltconfig gcc-3.4.1/ltconfig
+--- gcc-3.4.1-dist/ltconfig 2004-03-05 15:05:41.000000000 -0600
++++ gcc-3.4.1/ltconfig 2004-08-12 15:55:48.000000000 -0500
+@@ -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
+@@ -1262,6 +1263,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/toolchain/gcc/patches/3.4.6/200-uclibc-locale.patch b/toolchain/gcc/patches/3.4.6/200-uclibc-locale.patch
new file mode 100644
index 0000000000..3fc4900b06
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6/200-uclibc-locale.patch
@@ -0,0 +1,3246 @@
+diff -urN gcc-3.4.2-dist/libstdc++-v3/acinclude.m4 gcc-3.4.2/libstdc++-v3/acinclude.m4
+--- gcc-3.4.2-dist/libstdc++-v3/acinclude.m4 2004-07-15 12:42:45.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/acinclude.m4 2004-09-10 10:47:40.000000000 -0500
+@@ -996,7 +996,7 @@
+ AC_MSG_CHECKING([for C locale to use])
+ GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+ [use MODEL for target locale package],
+- [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++ [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
+
+ # If they didn't use this option switch, or if they specified --enable
+ # with no specific model, we'll have to look for one. If they
+@@ -1012,6 +1012,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case x${target_os} in
++ x*-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+ AC_EGREP_CPP([_GLIBCXX_ok], [
+ #include <features.h>
+@@ -1138,6 +1141,41 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ AC_MSG_RESULT(uclibc)
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++ AC_SUBST(glibcxx_MOFILES)
++ AC_SUBST(glibcxx_POFILES)
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/aclocal.m4 gcc-3.4.2/libstdc++-v3/aclocal.m4
+--- gcc-3.4.2-dist/libstdc++-v3/aclocal.m4 2004-08-13 15:44:03.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/aclocal.m4 2004-09-10 10:47:40.000000000 -0500
+@@ -1025,6 +1025,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case x${target_os} in
++ x*-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+ AC_EGREP_CPP([_GLIBCXX_ok], [
+ #include <features.h>
+@@ -1151,6 +1154,41 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ AC_MSG_RESULT(uclibc)
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++ AC_SUBST(glibcxx_MOFILES)
++ AC_SUBST(glibcxx_POFILES)
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,59 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,160 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno> // For errno
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L) strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B))
++#define __strtof_l(S, E, L) strtof((S), (E))
++#define __strtod_l(S, E, L) strtod((S), (E))
++#define __strtold_l(S, E, L) strtold((S), (E))
++#warning should dummy __newlocale check for C|POSIX ?
++#define __newlocale(a, b, c) NULL
++#define __freelocale(a) ((void)0)
++#define __duplocale(a) __c_locale()
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ float __f = __strtof_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __f;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ double __d = __strtod_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __d;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ long double __ld = __strtold_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __ld;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ void
++ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
++ __c_locale __old)
++ {
++ __cloc = __newlocale(1 << LC_ALL, __s, __old);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ if (!__cloc)
++ {
++ // This named locale is not supported by the underlying OS.
++ __throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++ "name not valid"));
++ }
++#endif
++ }
++
++ void
++ locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++ {
++ if (_S_get_c_locale() != __cloc)
++ __freelocale(__cloc);
++ }
++
++ __c_locale
++ locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++ { return __duplocale(__cloc); }
++} // namespace std
++
++namespace __gnu_cxx
++{
++ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++ {
++ "LC_CTYPE",
++ "LC_NUMERIC",
++ "LC_TIME",
++ "LC_COLLATE",
++ "LC_MONETARY",
++ "LC_MESSAGES",
++#if _GLIBCXX_NUM_CATEGORIES != 0
++ "LC_PAPER",
++ "LC_NAME",
++ "LC_ADDRESS",
++ "LC_TELEPHONE",
++ "LC_MEASUREMENT",
++ "LC_IDENTIFICATION"
++#endif
++ };
++}
++
++namespace std
++{
++ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++} // namespace std
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.h 2004-09-10 10:48:08.000000000 -0500
+@@ -0,0 +1,115 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _C_LOCALE_H
++#define _C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <cstring> // get std::strlen
++#include <cstdio> // get std::snprintf or std::sprintf
++#include <clocale>
++#include <langinfo.h> // For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h> // For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> // For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCXX_C_LOCALE_GNU for
++#endif
++#define _GLIBCXX_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCXX_NUM_CATEGORIES 6
++#define _GLIBCXX_NUM_CATEGORIES 0
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++ extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++ typedef __locale_t __c_locale;
++#else
++ typedef int* __c_locale;
++#endif
++
++ // Convert numeric value of type _Tv to string and return length of
++ // string. If snprintf is available use it, otherwise fall back to
++ // the unsafe sprintf which, in general, can be dangerous and should
++ // be avoided.
++ template<typename _Tv>
++ int
++ __convert_from_v(char* __out, const int __size, const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ _Tv __v, const __c_locale& __cloc, int __prec)
++ {
++ __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++ _Tv __v, const __c_locale&, int __prec)
++ {
++# ifdef __UCLIBC_HAS_LOCALE__
++ char* __old = std::setlocale(LC_ALL, NULL);
++ char* __sav = new char[std::strlen(__old) + 1];
++ std::strcpy(__sav, __old);
++ std::setlocale(LC_ALL, "C");
++# endif
++#endif
++
++ const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++ std::setlocale(LC_ALL, __sav);
++ delete [] __sav;
++#endif
++ return __ret;
++ }
++}
++
++#endif
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,306 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++ // Specializations.
++#ifdef _GLIBCXX_USE_WCHAR_T
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_out(state_type& __state, const intern_type* __from,
++ const intern_type* __from_end, const intern_type*& __from_next,
++ extern_type* __to, extern_type* __to_end,
++ extern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // wcsnrtombs is *very* fast but stops if encounters NUL characters:
++ // in case we fall back to wcrtomb and then continue, in a loop.
++ // NB: wcsnrtombs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
++ __from_end - __from_next);
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ const size_t __conv = wcsnrtombs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // wcrtomb.
++ for (; __from < __from_next; ++__from)
++ __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ extern_type __buf[MB_LEN_MAX];
++ __tmp_state = __state;
++ const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
++ if (__conv > static_cast<size_t>(__to_end - __to_next))
++ __ret = partial;
++ else
++ {
++ memcpy(__to_next, __buf, __conv);
++ __state = __tmp_state;
++ __to_next += __conv;
++ ++__from_next;
++ }
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_in(state_type& __state, const extern_type* __from,
++ const extern_type* __from_end, const extern_type*& __from_next,
++ intern_type* __to, intern_type* __to_end,
++ intern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we store a L'\0' and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
++ __from_end
++ - __from_next));
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ size_t __conv = mbsnrtowcs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (;; ++__to_next, __from += __conv)
++ {
++ __conv = mbrtowc(__to_next, __from, __from_end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __from_next = __from;
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ // It is unclear what to return in this case (see DR 382).
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ if (__to_next < __to_end)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from_next;
++ *__to_next++ = L'\0';
++ }
++ else
++ __ret = partial;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_encoding() const throw()
++ {
++ // XXX This implementation assumes that the encoding is
++ // stateless and is either single-byte or variable-width.
++ int __ret = 0;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ if (MB_CUR_MAX == 1)
++ __ret = 1;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_max_length() const throw()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ // XXX Probably wrong for stateful encodings.
++ int __ret = MB_CUR_MAX;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_length(state_type& __state, const extern_type* __from,
++ const extern_type* __end, size_t __max) const
++ {
++ int __ret = 0;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we advance past it and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++
++ // A dummy internal buffer is needed in order for mbsnrtocws to consider
++ // its fourth parameter (it wouldn't with NULL as first parameter).
++ wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
++ * __max));
++ while (__from < __end && __max)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
++ __end
++ - __from));
++ if (!__from_chunk_end)
++ __from_chunk_end = __end;
++
++ const extern_type* __tmp_from = __from;
++ size_t __conv = mbsnrtowcs(__to, &__from,
++ __from_chunk_end - __from,
++ __max, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (__from = __tmp_from;; __from += __conv)
++ {
++ __conv = mbrtowc(NULL, __from, __end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __state = __tmp_state;
++ __ret += __from - __tmp_from;
++ break;
++ }
++ if (!__from)
++ __from = __from_chunk_end;
++
++ __ret += __from - __tmp_from;
++ __max -= __conv;
++
++ if (__from < __end && __max)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from;
++ ++__ret;
++ --__max;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/collate_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L) strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++ // These are basically extensions to char_traits, and perhaps should
++ // be put there instead of here.
++ template<>
++ int
++ collate<char>::_M_compare(const char* __one, const char* __two) const
++ {
++ int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<char>::_M_transform(char* __to, const char* __from,
++ size_t __n) const
++ { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ int
++ collate<wchar_t>::_M_compare(const wchar_t* __one,
++ const wchar_t* __two) const
++ {
++ int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++ size_t __n) const
++ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,300 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L) wctype((S))
++#define __towupper_l(C, L) towupper((C))
++#define __towlower_l(C, L) towlower((C))
++#define __iswctype_l(C, M, L) iswctype((C), (M))
++#endif
++
++namespace std
++{
++ // NB: The other ctype<char> specializations are in src/locale.cc and
++ // various /config/os/* files.
++ template<>
++ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++ : ctype<char>(0, false, __refs)
++ {
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
++ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
++ this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
++ this->_M_table = this->_M_c_locale_ctype->__ctype_b;
++#endif
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ ctype<wchar_t>::__wmask_type
++ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++ {
++ __wmask_type __ret;
++ switch (__m)
++ {
++ case space:
++ __ret = __wctype_l("space", _M_c_locale_ctype);
++ break;
++ case print:
++ __ret = __wctype_l("print", _M_c_locale_ctype);
++ break;
++ case cntrl:
++ __ret = __wctype_l("cntrl", _M_c_locale_ctype);
++ break;
++ case upper:
++ __ret = __wctype_l("upper", _M_c_locale_ctype);
++ break;
++ case lower:
++ __ret = __wctype_l("lower", _M_c_locale_ctype);
++ break;
++ case alpha:
++ __ret = __wctype_l("alpha", _M_c_locale_ctype);
++ break;
++ case digit:
++ __ret = __wctype_l("digit", _M_c_locale_ctype);
++ break;
++ case punct:
++ __ret = __wctype_l("punct", _M_c_locale_ctype);
++ break;
++ case xdigit:
++ __ret = __wctype_l("xdigit", _M_c_locale_ctype);
++ break;
++ case alnum:
++ __ret = __wctype_l("alnum", _M_c_locale_ctype);
++ break;
++ case graph:
++ __ret = __wctype_l("graph", _M_c_locale_ctype);
++ break;
++ default:
++ __ret = 0;
++ }
++ return __ret;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_toupper(wchar_t __c) const
++ { return __towupper_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_tolower(wchar_t __c) const
++ { return __towlower_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ bool
++ ctype<wchar_t>::
++ do_is(mask __m, wchar_t __c) const
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ bool __ret = false;
++ const size_t __bitmasksize = 11;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__m & _M_bit[__bitcur]
++ && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
++ {
++ __ret = true;
++ break;
++ }
++ return __ret;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++ {
++ for (; __lo < __hi; ++__vec, ++__lo)
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ const size_t __bitmasksize = 11;
++ mask __m = 0;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
++ __m |= _M_bit[__bitcur];
++ *__vec = __m;
++ }
++ return __hi;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi && !this->do_is(__m, *__lo))
++ ++__lo;
++ return __lo;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++ {
++ while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++ ++__lo;
++ return __lo;
++ }
++
++ wchar_t
++ ctype<wchar_t>::
++ do_widen(char __c) const
++ { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<wchar_t>::
++ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++ {
++ while (__lo < __hi)
++ {
++ *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++ ++__lo;
++ ++__dest;
++ }
++ return __hi;
++ }
++
++ char
++ ctype<wchar_t>::
++ do_narrow(wchar_t __wc, char __dfault) const
++ {
++ if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++ return _M_narrow[__wc];
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ const int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
++ char* __dest) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ if (_M_narrow_ok)
++ while (__lo < __hi)
++ {
++ if (*__lo >= 0 && *__lo < 128)
++ *__dest = _M_narrow[*__lo];
++ else
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++ ++__lo;
++ ++__dest;
++ }
++ else
++ while (__lo < __hi)
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ ++__lo;
++ ++__dest;
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __hi;
++ }
++
++ void
++ ctype<wchar_t>::_M_initialize_ctype()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ wint_t __i;
++ for (__i = 0; __i < 128; ++__i)
++ {
++ const int __c = wctob(__i);
++ if (__c == EOF)
++ break;
++ else
++ _M_narrow[__i] = static_cast<char>(__c);
++ }
++ if (__i == 128)
++ _M_narrow_ok = true;
++ else
++ _M_narrow_ok = false;
++ for (size_t __j = 0;
++ __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
++ _M_widen[__j] = btowc(__j);
++
++ for (size_t __k = 0; __k <= 11; ++__k)
++ {
++ _M_bit[__k] = static_cast<mask>(_ISbit(__k));
++ _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ }
++#endif // _GLIBCXX_USE_WCHAR_T
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++ const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++ // Specializations.
++ template<>
++ string
++ messages<char>::do_get(catalog, int, int, const string& __dfault) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++ __uselocale(__old);
++ return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ const char* __msg = gettext(__dfault.c_str());
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return string(__msg);
++#else
++ const char* __msg = gettext(__dfault.c_str());
++ return string(__msg);
++#endif
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ wstring
++ messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++ {
++# ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ __uselocale(__old);
++ return _M_convert_from_char(__msg);
++# elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return _M_convert_from_char(__msg);
++# else
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ return _M_convert_from_char(__msg);
++# endif
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,118 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++ const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D) ((void)0)
++#define __bindtextdomain(D,P) ((void)0)
++#endif
++
++ // Non-virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::messages(size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
++ _M_name_messages(_S_get_c_name())
++ { }
++
++ template<typename _CharT>
++ messages<_CharT>::messages(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
++ _M_name_messages(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_messages = __tmp;
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
++ const char* __dir) const
++ {
++ __bindtextdomain(__s.c_str(), __dir);
++ return this->do_open(__s, __loc);
++ }
++
++ // Virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::~messages()
++ {
++ if (_M_name_messages != _S_get_c_name())
++ delete [] _M_name_messages;
++ _S_destroy_c_locale(_M_c_locale_messages);
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::do_open(const basic_string<char>& __s,
++ const locale&) const
++ {
++ // No error checking is done, assume the catalog exists and can
++ // be used.
++ __textdomain(__s.c_str());
++ return 0;
++ }
++
++ template<typename _CharT>
++ void
++ messages<_CharT>::do_close(catalog) const
++ { }
++
++ // messages_byname
++ template<typename _CharT>
++ messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++ : messages<_CharT>(__refs)
++ {
++ if (this->_M_name_messages != locale::facet::_S_get_c_name())
++ delete [] this->_M_name_messages;
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ this->_M_name_messages = __tmp;
++
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_messages);
++ this->_S_create_c_locale(this->_M_c_locale_messages, __s);
++ }
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,698 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ // Construct and return valid pattern consisting of some combination of:
++ // space none symbol sign value
++ money_base::pattern
++ money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++ {
++ pattern __ret;
++
++ // This insanely complicated routine attempts to construct a valid
++ // pattern for use with monyepunct. A couple of invariants:
++
++ // if (__precedes) symbol -> value
++ // else value -> symbol
++
++ // if (__space) space
++ // else none
++
++ // none == never first
++ // space never first or last
++
++ // Any elegant implementations of this are welcome.
++ switch (__posn)
++ {
++ case 0:
++ case 1:
++ // 1 The sign precedes the value and symbol.
++ __ret.field[0] = sign;
++ if (__space)
++ {
++ // Pattern starts with sign.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[3] = symbol;
++ }
++ __ret.field[2] = space;
++ }
++ else
++ {
++ // Pattern starts with sign and ends with none.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[3] = none;
++ }
++ break;
++ case 2:
++ // 2 The sign follows the value and symbol.
++ if (__space)
++ {
++ // Pattern either ends with sign.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[1] = space;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ // Pattern ends with sign then none.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[1] = symbol;
++ }
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ break;
++ case 3:
++ // 3 The sign immediately precedes the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = sign;
++ __ret.field[1] = symbol;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = sign;
++ __ret.field[3] = symbol;
++ }
++ else
++ {
++ __ret.field[1] = sign;
++ __ret.field[2] = symbol;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ case 4:
++ // 4 The sign immediately follows the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = sign;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = symbol;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ default:
++ ;
++ }
++ return __ret;
++ }
++
++ template<>
++ void
++ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == true
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ void
++ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == false
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ moneypunct<char, true>::~moneypunct()
++ { delete _M_data; }
++
++ template<>
++ moneypunct<char, false>::~moneypunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ {
++ uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++ _M_data->_M_atoms[__i] = btowc(uc);
++ }
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ void
++ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ {
++ uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++ _M_data->_M_atoms[__i] = btowc(uc);
++ }
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len;
++ __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ moneypunct<wchar_t, true>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++
++ template<>
++ moneypunct<wchar_t, false>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,183 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP,
++ __cloc));
++
++ // Check for NULL, which implies no grouping.
++ if (_M_data->_M_thousands_sep == '\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = "true";
++ _M_data->_M_truename_size = strlen(_M_data->_M_truename);
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = "false";
++ _M_data->_M_falsename_size = strlen(_M_data->_M_falsename);
++ }
++
++ template<>
++ numpunct<char>::~numpunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<wchar_t>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_S_get_c_locale());
++#endif
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ {
++ uc = static_cast<unsigned char>(__num_base::_S_atoms_out[__i]);
++ _M_data->_M_atoms_out[__i] = btowc(uc);
++ }
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ {
++ uc = static_cast<unsigned char>(__num_base::_S_atoms_in[__j]);
++ _M_data->_M_atoms_in[__j] = btowc(uc);
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++
++ if (_M_data->_M_thousands_sep == L'\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = L"true";
++ _M_data->_M_truename_size = wcslen(_M_data->_M_truename);
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = L"false";
++ _M_data->_M_falsename_size = wcslen(_M_data->_M_falsename);
++ }
++
++ template<>
++ numpunct<wchar_t>::~numpunct()
++ { delete _M_data; }
++ #endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.cc 2004-09-10 10:48:00.000000000 -0500
+@@ -0,0 +1,356 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __timepunct<char>::
++ _M_put(char* __s, size_t __maxlen, const char* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = strftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = '\0';
++ }
++
++ template<>
++ void
++ __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = "%m/%d/%y";
++ _M_data->_M_date_era_format = "%m/%d/%y";
++ _M_data->_M_time_format = "%H:%M:%S";
++ _M_data->_M_time_era_format = "%H:%M:%S";
++ _M_data->_M_date_time_format = "";
++ _M_data->_M_date_time_era_format = "";
++ _M_data->_M_am = "AM";
++ _M_data->_M_pm = "PM";
++ _M_data->_M_am_pm_format = "";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = "Sunday";
++ _M_data->_M_day2 = "Monday";
++ _M_data->_M_day3 = "Tuesday";
++ _M_data->_M_day4 = "Wednesday";
++ _M_data->_M_day5 = "Thursday";
++ _M_data->_M_day6 = "Friday";
++ _M_data->_M_day7 = "Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = "Sun";
++ _M_data->_M_aday2 = "Mon";
++ _M_data->_M_aday3 = "Tue";
++ _M_data->_M_aday4 = "Wed";
++ _M_data->_M_aday5 = "Thu";
++ _M_data->_M_aday6 = "Fri";
++ _M_data->_M_aday7 = "Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = "January";
++ _M_data->_M_month02 = "February";
++ _M_data->_M_month03 = "March";
++ _M_data->_M_month04 = "April";
++ _M_data->_M_month05 = "May";
++ _M_data->_M_month06 = "June";
++ _M_data->_M_month07 = "July";
++ _M_data->_M_month08 = "August";
++ _M_data->_M_month09 = "September";
++ _M_data->_M_month10 = "October";
++ _M_data->_M_month11 = "November";
++ _M_data->_M_month12 = "December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = "Jan";
++ _M_data->_M_amonth02 = "Feb";
++ _M_data->_M_amonth03 = "Mar";
++ _M_data->_M_amonth04 = "Apr";
++ _M_data->_M_amonth05 = "May";
++ _M_data->_M_amonth06 = "Jun";
++ _M_data->_M_amonth07 = "Jul";
++ _M_data->_M_amonth08 = "Aug";
++ _M_data->_M_amonth09 = "Sep";
++ _M_data->_M_amonth10 = "Oct";
++ _M_data->_M_amonth11 = "Nov";
++ _M_data->_M_amonth12 = "Dec";
++ }
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++ _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++ _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++ _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++ _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++ _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
++ _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
++ _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
++ _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++ _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++ _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++ _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++ _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++ _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++ _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
++ _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
++ _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
++ _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
++ _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
++ _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
++ _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
++ _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
++ _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
++ _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
++ _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
++ _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
++ _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
++ _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
++ _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
++ _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
++ _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
++ _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
++ _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
++ _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
++ _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
++ _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
++ _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
++ _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
++ _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
++ _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
++ _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
++ _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
++ _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ __timepunct<wchar_t>::
++ _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++ const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = L'\0';
++ }
++
++ template<>
++ void
++ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<wchar_t>;
++
++#warning wide time stuff
++// if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = L"%m/%d/%y";
++ _M_data->_M_date_era_format = L"%m/%d/%y";
++ _M_data->_M_time_format = L"%H:%M:%S";
++ _M_data->_M_time_era_format = L"%H:%M:%S";
++ _M_data->_M_date_time_format = L"";
++ _M_data->_M_date_time_era_format = L"";
++ _M_data->_M_am = L"AM";
++ _M_data->_M_pm = L"PM";
++ _M_data->_M_am_pm_format = L"";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = L"Sunday";
++ _M_data->_M_day2 = L"Monday";
++ _M_data->_M_day3 = L"Tuesday";
++ _M_data->_M_day4 = L"Wednesday";
++ _M_data->_M_day5 = L"Thursday";
++ _M_data->_M_day6 = L"Friday";
++ _M_data->_M_day7 = L"Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = L"Sun";
++ _M_data->_M_aday2 = L"Mon";
++ _M_data->_M_aday3 = L"Tue";
++ _M_data->_M_aday4 = L"Wed";
++ _M_data->_M_aday5 = L"Thu";
++ _M_data->_M_aday6 = L"Fri";
++ _M_data->_M_aday7 = L"Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = L"January";
++ _M_data->_M_month02 = L"February";
++ _M_data->_M_month03 = L"March";
++ _M_data->_M_month04 = L"April";
++ _M_data->_M_month05 = L"May";
++ _M_data->_M_month06 = L"June";
++ _M_data->_M_month07 = L"July";
++ _M_data->_M_month08 = L"August";
++ _M_data->_M_month09 = L"September";
++ _M_data->_M_month10 = L"October";
++ _M_data->_M_month11 = L"November";
++ _M_data->_M_month12 = L"December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = L"Jan";
++ _M_data->_M_amonth02 = L"Feb";
++ _M_data->_M_amonth03 = L"Mar";
++ _M_data->_M_amonth04 = L"Apr";
++ _M_data->_M_amonth05 = L"May";
++ _M_data->_M_amonth06 = L"Jun";
++ _M_data->_M_amonth07 = L"Jul";
++ _M_data->_M_amonth08 = L"Aug";
++ _M_data->_M_amonth09 = L"Sep";
++ _M_data->_M_amonth10 = L"Oct";
++ _M_data->_M_amonth11 = L"Nov";
++ _M_data->_M_amonth12 = L"Dec";
++ }
++#if 0
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ _M_data->_M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
++ _M_data->_M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
++ _M_data->_M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
++ _M_data->_M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
++ _M_data->_M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
++ _M_data->_M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
++ _M_data->_M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
++ _M_data->_M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
++ _M_data->_M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
++ _M_data->_M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
++ _M_data->_M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
++ _M_data->_M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
++ _M_data->_M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
++ _M_data->_M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
++ _M_data->_M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
++ _M_data->_M_aday2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
++ _M_data->_M_aday3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
++ _M_data->_M_aday4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
++ _M_data->_M_aday5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
++ _M_data->_M_aday6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
++ _M_data->_M_aday7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
++ _M_data->_M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
++ _M_data->_M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
++ _M_data->_M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
++ _M_data->_M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
++ _M_data->_M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
++ _M_data->_M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
++ _M_data->_M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
++ _M_data->_M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
++ _M_data->_M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
++ _M_data->_M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
++ _M_data->_M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
++ _M_data->_M_amonth02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
++ _M_data->_M_amonth03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
++ _M_data->_M_amonth04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
++ _M_data->_M_amonth05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
++ _M_data->_M_amonth06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
++ _M_data->_M_amonth07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
++ _M_data->_M_amonth08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
++ _M_data->_M_amonth09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
++ _M_data->_M_amonth10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
++ _M_data->_M_amonth11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
++ _M_data->_M_amonth12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
++ }
++#endif // 0
++ }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
++ : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_timepunct = __tmp;
++ _M_initialize_timepunct(__cloc);
++ }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::~__timepunct()
++ {
++ if (_M_name_timepunct != _S_get_c_name())
++ delete [] _M_name_timepunct;
++ delete _M_data;
++ _S_destroy_c_locale(_M_c_locale_timepunct);
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_base.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_base.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,58 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ struct ctype_base
++ {
++ // Note: In uClibc, the following two types depend on configuration.
++
++ // Non-standard typedefs.
++ typedef const __ctype_touplow_t* __to_type;
++
++ // NB: Offsets into ctype<char>::_M_table force a particular size
++ // on the mask type. Because of this, we don't use an enum.
++ typedef __ctype_mask_t mask;
++ static const mask upper = _ISupper;
++ static const mask lower = _ISlower;
++ static const mask alpha = _ISalpha;
++ static const mask digit = _ISdigit;
++ static const mask xdigit = _ISxdigit;
++ static const mask space = _ISspace;
++ static const mask print = _ISprint;
++ static const mask graph = _ISalpha | _ISdigit | _ISpunct;
++ static const mask cntrl = _IScntrl;
++ static const mask punct = _ISpunct;
++ static const mask alnum = _ISalpha | _ISdigit;
++ };
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_inline.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++
++ bool
++ ctype<char>::
++ is(mask __m, char __c) const
++ { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++ const char*
++ ctype<char>::
++ is(const char* __low, const char* __high, mask* __vec) const
++ {
++ while (__low < __high)
++ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++ return __high;
++ }
++
++ const char*
++ ctype<char>::
++ scan_is(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++ ++__low;
++ return __low;
++ }
++
++ const char*
++ ctype<char>::
++ scan_not(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++ ++__low;
++ return __low;
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,92 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ const ctype_base::mask*
++ ctype<char>::classic_table() throw()
++ { return __C_ctype_b; }
++
++ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ char
++ ctype<char>::do_toupper(char __c) const
++ { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_toupper(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_toupper[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
++
++ char
++ ctype<char>::do_tolower(char __c) const
++ { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_tolower(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_tolower[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/os_defines.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/os_defines.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/os_defines.h 2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,44 @@
++// Specific definitions for GNU/Linux -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here. This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
+diff -urN gcc-3.4.2-dist/libstdc++-v3/configure gcc-3.4.2/libstdc++-v3/configure
+--- gcc-3.4.2-dist/libstdc++-v3/configure 2004-08-13 15:44:04.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/configure 2004-09-10 10:47:40.000000000 -0500
+@@ -3878,6 +3878,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*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5545,6 +5550,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case x${target_os} in
++ xlinux-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+ cat >conftest.$ac_ext <<_ACEOF
+ #line $LINENO "configure"
+@@ -5759,6 +5767,77 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ echo "$as_me:$LINENO: result: uclibc" >&5
++echo "${ECHO_T}uclibc" >&6
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ if test -n "$check_msgfmt"; then
++ ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_check_msgfmt="yes"
++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++done
++
++ test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt=$ac_cv_prog_check_msgfmt
++if test -n "$check_msgfmt"; then
++ echo "$as_me:$LINENO: result: $check_msgfmt" >&5
++echo "${ECHO_T}$check_msgfmt" >&6
++else
++ echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++
++
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/configure.host gcc-3.4.2/libstdc++-v3/configure.host
+--- gcc-3.4.2-dist/libstdc++-v3/configure.host 2004-08-27 14:52:30.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/configure.host 2004-09-10 10:47:40.000000000 -0500
+@@ -217,6 +217,12 @@
+ ;;
+ esac
+
++# Override for uClibc since linux-uclibc gets mishandled above.
++case "${host_os}" in
++ *-uclibc*)
++ os_include_dir="os/uclibc"
++ ;;
++esac
+
+ # Set any OS-dependent and CPU-dependent bits.
+ # THIS TABLE IS SORTED. KEEP IT THAT WAY.
+diff -urN gcc-3.4.2-dist/libstdc++-v3/crossconfig.m4 gcc-3.4.2/libstdc++-v3/crossconfig.m4
+--- gcc-3.4.2-dist/libstdc++-v3/crossconfig.m4 2004-07-06 20:23:49.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/crossconfig.m4 2004-09-10 10:47:40.000000000 -0500
+@@ -138,6 +138,99 @@
+ ;;
+ esac
+ ;;
++ *-uclibc*)
++# Temporary hack until we implement the float versions of the libm funcs
++ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++ machine/endian.h machine/param.h sys/machine.h sys/types.h \
++ fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
++ SECTION_FLAGS='-ffunction-sections -fdata-sections'
++ AC_SUBST(SECTION_FLAGS)
++ GLIBCXX_CHECK_LINKER_FEATURES
++ GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
++ GLIBCXX_CHECK_WCHAR_T_SUPPORT
++
++ # For LFS.
++ AC_DEFINE(HAVE_INT64_T)
++ case "$target" in
++ *-uclinux*)
++ # Don't enable LFS with uClinux
++ ;;
++ *)
++ AC_DEFINE(_GLIBCXX_USE_LFS)
++ esac
++
++ # For showmanyc_helper().
++ AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
++ GLIBCXX_CHECK_POLL
++ GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
++
++ # For xsputn_2().
++ AC_CHECK_HEADERS(sys/uio.h)
++ GLIBCXX_CHECK_WRITEV
++
++# AC_DEFINE(HAVE_ACOSF)
++# AC_DEFINE(HAVE_ASINF)
++# AC_DEFINE(HAVE_ATANF)
++# AC_DEFINE(HAVE_ATAN2F)
++ AC_DEFINE(HAVE_CEILF)
++ AC_DEFINE(HAVE_COPYSIGN)
++# AC_DEFINE(HAVE_COPYSIGNF)
++# AC_DEFINE(HAVE_COSF)
++# AC_DEFINE(HAVE_COSHF)
++# AC_DEFINE(HAVE_EXPF)
++# AC_DEFINE(HAVE_FABSF)
++ AC_DEFINE(HAVE_FINITE)
++ AC_DEFINE(HAVE_FINITEF)
++ AC_DEFINE(HAVE_FLOORF)
++# AC_DEFINE(HAVE_FMODF)
++# AC_DEFINE(HAVE_FREXPF)
++ AC_DEFINE(HAVE_HYPOT)
++# AC_DEFINE(HAVE_HYPOTF)
++ AC_DEFINE(HAVE_ISINF)
++ AC_DEFINE(HAVE_ISINFF)
++ AC_DEFINE(HAVE_ISNAN)
++ AC_DEFINE(HAVE_ISNANF)
++# AC_DEFINE(HAVE_LOGF)
++# AC_DEFINE(HAVE_LOG10F)
++# AC_DEFINE(HAVE_MODFF)
++# AC_DEFINE(HAVE_SINF)
++# AC_DEFINE(HAVE_SINHF)
++# AC_DEFINE(HAVE_SINCOS)
++# AC_DEFINE(HAVE_SINCOSF)
++ AC_DEFINE(HAVE_SQRTF)
++# AC_DEFINE(HAVE_TANF)
++# AC_DEFINE(HAVE_TANHF)
++ if test x"long_double_math_on_this_cpu" = x"yes"; then
++ AC_MSG_ERROR([long_double_math_on_this_cpu is yes!])
++# AC_DEFINE(HAVE_ACOSL)
++# AC_DEFINE(HAVE_ASINL)
++# AC_DEFINE(HAVE_ATANL)
++# AC_DEFINE(HAVE_ATAN2L)
++# AC_DEFINE(HAVE_CEILL)
++# AC_DEFINE(HAVE_COPYSIGNL)
++# AC_DEFINE(HAVE_COSL)
++# AC_DEFINE(HAVE_COSHL)
++# AC_DEFINE(HAVE_EXPL)
++# AC_DEFINE(HAVE_FABSL)
++# AC_DEFINE(HAVE_FINITEL)
++# AC_DEFINE(HAVE_FLOORL)
++# AC_DEFINE(HAVE_FMODL)
++# AC_DEFINE(HAVE_FREXPL)
++# AC_DEFINE(HAVE_HYPOTL)
++# AC_DEFINE(HAVE_ISINFL)
++# AC_DEFINE(HAVE_ISNANL)
++# AC_DEFINE(HAVE_LOGL)
++# AC_DEFINE(HAVE_LOG10L)
++# AC_DEFINE(HAVE_MODFL)
++# AC_DEFINE(HAVE_POWL)
++# AC_DEFINE(HAVE_SINL)
++# AC_DEFINE(HAVE_SINHL)
++# AC_DEFINE(HAVE_SINCOSL)
++# AC_DEFINE(HAVE_SQRTL)
++# AC_DEFINE(HAVE_TANL)
++# AC_DEFINE(HAVE_TANHL)
++ fi
++ ;;
+ *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
+ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+ machine/endian.h machine/param.h sys/machine.h sys/types.h \
+@@ -152,7 +245,7 @@
+ AC_DEFINE(HAVE_INT64_T)
+ case "$target" in
+ *-uclinux*)
+- # Don't enable LFS with uClibc
++ # Don't enable LFS with uClinux
+ ;;
+ *)
+ AC_DEFINE(_GLIBCXX_USE_LFS)
+diff -urN gcc-3.4.2-dist/libstdc++-v3/include/c_compatibility/wchar.h gcc-3.4.2/libstdc++-v3/include/c_compatibility/wchar.h
+--- gcc-3.4.2-dist/libstdc++-v3/include/c_compatibility/wchar.h 2003-12-08 21:51:45.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/include/c_compatibility/wchar.h 2004-09-10 10:47:40.000000000 -0500
+@@ -101,7 +101,9 @@
+ using std::wmemcpy;
+ using std::wmemmove;
+ using std::wmemset;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using std::wcsftime;
++#endif
+
+ #if _GLIBCXX_USE_C99
+ using std::wcstold;
+diff -urN gcc-3.4.2-dist/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.4.2/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-3.4.2-dist/libstdc++-v3/include/c_std/std_cwchar.h 2004-07-20 03:52:12.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/include/c_std/std_cwchar.h 2004-09-10 10:47:40.000000000 -0500
+@@ -179,7 +179,9 @@
+ using ::wcscoll;
+ using ::wcscpy;
+ using ::wcscspn;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using ::wcsftime;
++#endif
+ using ::wcslen;
+ using ::wcsncat;
+ using ::wcsncmp;
diff --git a/toolchain/gcc/patches/3.4.6/300-libstdc++-pic.patch b/toolchain/gcc/patches/3.4.6/300-libstdc++-pic.patch
new file mode 100644
index 0000000000..c030ba6205
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6/300-libstdc++-pic.patch
@@ -0,0 +1,47 @@
+# DP: Build and install libstdc++_pic.a library.
+
+--- gcc/libstdc++-v3/src/Makefile.am~ 2003-02-28 09:21:05.000000000 +0100
++++ gcc/libstdc++-v3/src/Makefile.am 2003-02-28 09:28:50.000000000 +0100
+@@ -224,6 +224,10 @@
+ @OPT_LDFLAGS@ @SECTION_LDFLAGS@ $(AM_CXXFLAGS) $(LDFLAGS) -o $@
+
+
++install-exec-local:
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Added bits to build debug library.
+ if GLIBCPP_BUILD_DEBUG
+ all-local: build_debug
+
+--- gcc/libstdc++-v3/src/Makefile.in~ 2004-02-21 09:55:48.000000000 +0100
++++ gcc/libstdc++-v3/src/Makefile.in 2004-02-21 09:59:34.000000000 +0100
+@@ -585,7 +585,7 @@
+
+ install-data-am: install-data-local
+
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+
+ install-info: install-info-am
+
+@@ -618,6 +618,7 @@
+ distclean-tags distdir dvi dvi-am info info-am install \
+ install-am install-data install-data-am install-data-local \
+ install-exec install-exec-am install-info install-info-am \
++ install-exec-local \
+ install-man install-strip install-toolexeclibLTLIBRARIES \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+@@ -707,6 +708,11 @@
+ install_debug:
+ (cd ${debugdir} && $(MAKE) \
+ toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
++
++install-exec-local:
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff --git a/toolchain/gcc/patches/3.4.6/601-gcc34-arm-ldm.patch b/toolchain/gcc/patches/3.4.6/601-gcc34-arm-ldm.patch
new file mode 100644
index 0000000000..142052fdf0
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6/601-gcc34-arm-ldm.patch
@@ -0,0 +1,119 @@
+--- gcc-3.4.0/gcc/config/arm/arm.c.arm-ldm 2004-02-27 09:51:05.000000000 -0500
++++ gcc-3.4.0/gcc/config/arm/arm.c 2004-04-24 18:16:25.000000000 -0400
+@@ -8520,6 +8520,26 @@
+ return_used_this_function = 0;
+ }
+
++/* Return the number (counting from 0) of
++ the least significant set bit in MASK. */
++
++#ifdef __GNUC__
++inline
++#endif
++static int
++number_of_first_bit_set (mask)
++ int mask;
++{
++ int bit;
++
++ for (bit = 0;
++ (mask & (1 << bit)) == 0;
++ ++bit)
++ continue;
++
++ return bit;
++}
++
+ const char *
+ arm_output_epilogue (rtx sibling)
+ {
+@@ -8753,27 +8773,47 @@
+ saved_regs_mask |= (1 << PC_REGNUM);
+ }
+
+- /* Load the registers off the stack. If we only have one register
+- to load use the LDR instruction - it is faster. */
+- if (saved_regs_mask == (1 << LR_REGNUM))
+- {
+- /* The exception handler ignores the LR, so we do
+- not really need to load it off the stack. */
+- if (eh_ofs)
+- asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
+- else
+- asm_fprintf (f, "\tldr\t%r, [%r], #4\n", LR_REGNUM, SP_REGNUM);
+- }
+- else if (saved_regs_mask)
++ if (saved_regs_mask)
+ {
+- if (saved_regs_mask & (1 << SP_REGNUM))
+- /* Note - write back to the stack register is not enabled
+- (ie "ldmfd sp!..."). We know that the stack pointer is
+- in the list of registers and if we add writeback the
+- instruction becomes UNPREDICTABLE. */
+- print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
++ /* Load the registers off the stack. If we only have one register
++ to load use the LDR instruction - it is faster. */
++ if (bit_count (saved_regs_mask) == 1)
++ {
++ int reg = number_of_first_bit_set (saved_regs_mask);
++
++ switch (reg)
++ {
++ case SP_REGNUM:
++ /* Mustn't use base writeback when loading SP. */
++ asm_fprintf (f, "\tldr\t%r, [%r]\n", SP_REGNUM, SP_REGNUM);
++ break;
++
++ case LR_REGNUM:
++ if (eh_ofs)
++ {
++ /* The exception handler ignores the LR, so we do
++ not really need to load it off the stack. */
++ asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
++ break;
++ }
++ /* else fall through */
++
++ default:
++ asm_fprintf (f, "\tldr\t%r, [%r], #4\n", reg, SP_REGNUM);
++ break;
++ }
++ }
+ else
+- print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
++ {
++ if (saved_regs_mask & (1 << SP_REGNUM))
++ /* Note - write back to the stack register is not enabled
++ (ie "ldmfd sp!..."). We know that the stack pointer is
++ in the list of registers and if we add writeback the
++ instruction becomes UNPREDICTABLE. */
++ print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
++ else
++ print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
++ }
+ }
+
+ if (current_function_pretend_args_size)
+@@ -11401,22 +11441,6 @@
+ }
+ }
+
+-/* Return the number (counting from 0) of
+- the least significant set bit in MASK. */
+-
+-inline static int
+-number_of_first_bit_set (int mask)
+-{
+- int bit;
+-
+- for (bit = 0;
+- (mask & (1 << bit)) == 0;
+- ++bit)
+- continue;
+-
+- return bit;
+-}
+-
+ /* Generate code to return from a thumb function.
+ If 'reg_containing_return_addr' is -1, then the return address is
+ actually on the stack, at the stack pointer. */
diff --git a/toolchain/gcc/patches/3.4.6/602-sdk-libstdc++-includes.patch b/toolchain/gcc/patches/3.4.6/602-sdk-libstdc++-includes.patch
new file mode 100644
index 0000000000..4377c2143b
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6/602-sdk-libstdc++-includes.patch
@@ -0,0 +1,22 @@
+--- gcc-3.4.1/libstdc++-v3/libmath/Makefile.am~ 2003-08-27 22:29:42.000000000 +0100
++++ gcc-3.4.1/libstdc++-v3/libmath/Makefile.am 2004-07-22 16:41:45.152130128 +0100
+@@ -32,7 +32,7 @@
+
+ libmath_la_SOURCES = stubs.c
+
+-AM_CPPFLAGS = $(CANADIAN_INCLUDES)
++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include
+
+ # Only compiling "C" sources in this directory.
+ LIBTOOL = @LIBTOOL@ --tag CC
+--- gcc-3.4.1/libstdc++-v3/fragment.am.old 2004-07-22 18:24:58.024083656 +0100
++++ gcc-3.4.1/libstdc++-v3/fragment.am 2004-07-22 18:24:59.019932264 +0100
+@@ -18,7 +18,7 @@
+ $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+
+ # -I/-D flags to pass when compiling.
+-AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include
+
+
+
diff --git a/toolchain/gcc/patches/3.4.6/700-pr15068-fix.patch b/toolchain/gcc/patches/3.4.6/700-pr15068-fix.patch
new file mode 100644
index 0000000000..2977765c5f
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6/700-pr15068-fix.patch
@@ -0,0 +1,44 @@
+See http://gcc.gnu.org/PR15068
+
+Fixes error
+
+../sysdeps/generic/s_fmax.c: In function `__fmax':
+../sysdeps/generic/s_fmax.c:28: internal compiler error: in elim_reg_cond, at flow.c:3257
+Please submit a full bug report,
+with preprocessed source if appropriate.
+See <URL:http://gcc.gnu.org/bugs.html> for instructions.
+make[2]: *** [/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/build-glibc/math/s_fmax.o] Error 1
+make[2]: Leaving directory `/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/glibc-20040822/math'
+make[1]: *** [math/others] Error 2
+make[1]: Leaving directory `/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/glibc-20040822'
+make: *** [all] Error 2
+
+[ rediffed against gcc-3.4.1, with elbow grease, ending up with same thing as
+http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/flow.c.diff?cvsroot=gcc&only_with_tag=csl-arm-branch&r1=1.563.4.2&r2=1.563.4.3 ]
+
+--- gcc-3.4.1/gcc/flow.c.old 2004-02-27 19:39:19.000000000 -0800
++++ gcc-3.4.1/gcc/flow.c 2004-08-26 07:29:46.000000000 -0700
+@@ -1878,6 +1878,7 @@
+ rtx set_src = SET_SRC (pc_set (BB_END (bb)));
+ rtx cond_true = XEXP (set_src, 0);
+ rtx reg = XEXP (cond_true, 0);
++ enum rtx_code inv_cond;
+
+ if (GET_CODE (reg) == SUBREG)
+ reg = SUBREG_REG (reg);
+@@ -1886,11 +1887,13 @@
+ in the form of a comparison of a register against zero.
+ If the condition is more complex than that, then it is safe
+ not to record any information. */
+- if (GET_CODE (reg) == REG
++ inv_cond = reversed_comparison_code (cond_true, BB_END (bb));
++ if (inv_cond != UNKNOWN
++ && GET_CODE (reg) == REG
+ && XEXP (cond_true, 1) == const0_rtx)
+ {
+ rtx cond_false
+- = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
++ = gen_rtx_fmt_ee (inv_cond,
+ GET_MODE (cond_true), XEXP (cond_true, 0),
+ XEXP (cond_true, 1));
+ if (GET_CODE (XEXP (set_src, 1)) == PC)
diff --git a/toolchain/gcc/patches/3.4.6/800-arm-bigendian.patch b/toolchain/gcc/patches/3.4.6/800-arm-bigendian.patch
new file mode 100644
index 0000000000..0bae8f474c
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6/800-arm-bigendian.patch
@@ -0,0 +1,70 @@
+By Lennert Buytenhek <buytenh@wantstofly.org>
+Adds support for arm*b-linux* big-endian ARM targets
+
+See http://gcc.gnu.org/PR16350
+
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h 2004-08-16 16:01:50.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-08-16 15:43:40.000000000 -0500
+@@ -30,17 +30,34 @@
+ /* Do not assume anything about header files. */
+ #define NO_IMPLICIT_EXTERN_C
+
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT ARM_FLAG_BIG_END
++#define TARGET_ENDIAN_OPTION "mbig-endian"
++#define TARGET_LINKER_EMULATION "armelfb_linux"
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#define TARGET_ENDIAN_OPTION "mlittle-endian"
++#define TARGET_LINKER_EMULATION "armelf_linux"
++#endif
++
+ /* Default is to use APCS-32 mode. */
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_APCS_32 | \
++ ARM_FLAG_MMU_TRAPS | \
++ TARGET_ENDIAN_DEFAULT )
+
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
+
+ #undef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" }
++ { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
+
+ #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+
+@@ -101,7 +118,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
+ -X \
+- %{mbig-endian:-EB}" \
++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+ #endif
+
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc 2004-08-16 16:01:50.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc 2004-08-16 16:01:25.000000000 -0500
+@@ -672,6 +672,11 @@
+ ;;
+ arm*-*-linux*) # ARM GNU/Linux with ELF
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++ case $target in
++ arm*b-*)
++ tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++ ;;
++ esac
+ tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ gnu_ld=yes
diff --git a/toolchain/gcc/patches/3.4.6/810-arm-bigendian-uclibc.patch b/toolchain/gcc/patches/3.4.6/810-arm-bigendian-uclibc.patch
new file mode 100644
index 0000000000..a4d87e2317
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6/810-arm-bigendian-uclibc.patch
@@ -0,0 +1,27 @@
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h 2004-08-16 16:08:18.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-08-16 16:06:24.000000000 -0500
+@@ -107,7 +107,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
+ -X \
+- %{mbig-endian:-EB}" \
++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+ #else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc 2004-08-16 16:08:18.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc 2004-08-16 16:03:25.000000000 -0500
+@@ -666,6 +666,11 @@
+ ;;
+ arm*-*-linux-uclibc*) # ARM GNU/Linux with ELF - uClibc
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++ case $target in
++ arm*b-*)
++ tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++ ;;
++ esac
+ tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ gnu_ld=yes
diff --git a/toolchain/gcc/patches/3.4.6/arm-softfloat.patch.conditional b/toolchain/gcc/patches/3.4.6/arm-softfloat.patch.conditional
new file mode 100644
index 0000000000..19d1b90dac
--- /dev/null
+++ b/toolchain/gcc/patches/3.4.6/arm-softfloat.patch.conditional
@@ -0,0 +1,270 @@
+Note... modified my mjn3 to not conflict with the big endian arm patch.
+Warning!!! Only the linux target is aware of TARGET_ENDIAN_DEFAULT.
+Also changed
+ #define SUBTARGET_EXTRA_ASM_SPEC "\
+ %{!mcpu=*:-mcpu=xscale} \
+ %{mhard-float:-mfpu=fpa} \
+ %{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+to
+ #define SUBTARGET_EXTRA_ASM_SPEC "\
+ %{mhard-float:-mfpu=fpa} \
+ %{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+in gcc/config/arm/linux-elf.h.
+#
+# Submitted:
+#
+# Dimitry Andric <dimitry@andric.com>, 2004-05-01
+#
+# Description:
+#
+# Nicholas Pitre released this patch for gcc soft-float support here:
+# http://lists.arm.linux.org.uk/pipermail/linux-arm/2003-October/006436.html
+#
+# This version has been adapted to work with gcc 3.4.0.
+#
+# The original patch doesn't distinguish between softfpa and softvfp modes
+# in the way Nicholas Pitre probably meant. His description is:
+#
+# "Default is to use APCS-32 mode with soft-vfp. The old Linux default for
+# floats can be achieved with -mhard-float or with the configure
+# --with-float=hard option. If -msoft-float or --with-float=soft is used then
+# software float support will be used just like the default but with the legacy
+# big endian word ordering for double float representation instead."
+#
+# Which means the following:
+#
+# * If you compile without -mhard-float or -msoft-float, you should get
+# software floating point, using the VFP format. The produced object file
+# should have these flags in its header:
+#
+# private flags = 600: [APCS-32] [VFP float format] [software FP]
+#
+# * If you compile with -mhard-float, you should get hardware floating point,
+# which always uses the FPA format. Object file header flags should be:
+#
+# private flags = 0: [APCS-32] [FPA float format]
+#
+# * If you compile with -msoft-float, you should get software floating point,
+# using the FPA format. This is done for compatibility reasons with many
+# existing distributions. Object file header flags should be:
+#
+# private flags = 200: [APCS-32] [FPA float format] [software FP]
+#
+# The original patch from Nicholas Pitre contained the following constructs:
+#
+# #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+# %{mhard-float:-mfpu=fpa} \
+# %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
+#
+# However, gcc doesn't accept this ";:" notation, used in the 3rd line. This
+# is probably the reason Robert Schwebel modified it to:
+#
+# #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+# %{mhard-float:-mfpu=fpa} \
+# %{!mhard-float: %{msoft-float:-mfpu=softfpa -mfpu=softvfp}}"
+#
+# But this causes the following behaviour:
+#
+# * If you compile without -mhard-float or -msoft-float, the compiler generates
+# software floating point instructions, but *nothing* is passed to the
+# assembler, which results in an object file which has flags:
+#
+# private flags = 0: [APCS-32] [FPA float format]
+#
+# This is not correct!
+#
+# * If you compile with -mhard-float, the compiler generates hardware floating
+# point instructions, and passes "-mfpu=fpa" to the assembler, which results
+# in an object file which has the same flags as in the previous item, but now
+# those *are* correct.
+#
+# * If you compile with -msoft-float, the compiler generates software floating
+# point instructions, and passes "-mfpu=softfpa -mfpu=softvfp" (in that
+# order) to the assembler, which results in an object file with flags:
+#
+# private flags = 600: [APCS-32] [VFP float format] [software FP]
+#
+# This is not correct, because the last "-mfpu=" option on the assembler
+# command line determines the actual FPU convention used (which should be FPA
+# in this case).
+#
+# Therefore, I modified this patch to get the desired behaviour. Every
+# instance of the notation:
+#
+# %{msoft-float:-mfpu=softfpa -mfpu=softvfp}
+#
+# was changed to:
+#
+# %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}
+#
+# I also did the following:
+#
+# * Modified all TARGET_DEFAULT macros I could find to include ARM_FLAG_VFP, to
+# be consistent with Nicholas' original patch.
+# * Removed any "msoft-float" or "mhard-float" from all MULTILIB_DEFAULTS
+# macros I could find. I think that if you compile without any options, you
+# would like to get the defaults. :)
+# * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed
+# anymore. (The required functions are now in libgcc.)
+
+diff -urN gcc-3.4.1-old/gcc/config/arm/coff.h gcc-3.4.1/gcc/config/arm/coff.h
+--- gcc-3.4.1-old/gcc/config/arm/coff.h 2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/coff.h 2004-09-02 21:51:15.000000000 -0500
+@@ -31,11 +31,16 @@
+ #define TARGET_VERSION fputs (" (ARM/coff)", stderr)
+
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_SOFT_FLOAT \
++ | ARM_FLAG_VFP \
++ | ARM_FLAG_APCS_32 \
++ | ARM_FLAG_APCS_FRAME \
++ | ARM_FLAG_MMU_TRAPS )
+
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork" }
++ { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork" }
+ #endif
+
+ /* This is COFF, but prefer stabs. */
+diff -urN gcc-3.4.1-old/gcc/config/arm/elf.h gcc-3.4.1/gcc/config/arm/elf.h
+--- gcc-3.4.1-old/gcc/config/arm/elf.h 2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/elf.h 2004-09-02 21:51:15.000000000 -0500
+@@ -46,7 +46,9 @@
+
+ #ifndef SUBTARGET_ASM_FLOAT_SPEC
+ #define SUBTARGET_ASM_FLOAT_SPEC "\
+-%{mapcs-float:-mfloat} %{msoft-float:-mfpu=softfpa}"
++%{mapcs-float:-mfloat} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ #endif
+
+ #ifndef ASM_SPEC
+@@ -106,12 +108,17 @@
+ #endif
+
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_SOFT_FLOAT \
++ | ARM_FLAG_VFP \
++ | ARM_FLAG_APCS_32 \
++ | ARM_FLAG_APCS_FRAME \
++ | ARM_FLAG_MMU_TRAPS )
+ #endif
+
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
++ { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
+ #endif
+
+ #define TARGET_ASM_FILE_START_APP_OFF true
+diff -urN gcc-3.4.1-old/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/linux-elf.h 2004-09-02 21:50:52.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-09-02 22:00:49.000000000 -0500
+@@ -44,12 +44,26 @@
+ #define TARGET_LINKER_EMULATION "armelf_linux"
+ #endif
+
+-/* Default is to use APCS-32 mode. */
++/*
++ * Default is to use APCS-32 mode with soft-vfp.
++ * The old Linux default for floats can be achieved with -mhard-float
++ * or with the configure --with-float=hard option.
++ * If -msoft-float or --with-float=soft is used then software float
++ * support will be used just like the default but with the legacy
++ * big endian word ordering for double float representation instead.
++ */
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT \
+- ( ARM_FLAG_APCS_32 | \
+- ARM_FLAG_MMU_TRAPS | \
+- TARGET_ENDIAN_DEFAULT )
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_APCS_32 \
++ | ARM_FLAG_SOFT_FLOAT \
++ | TARGET_ENDIAN_DEFAULT \
++ | ARM_FLAG_VFP \
++ | ARM_FLAG_MMU_TRAPS )
++
++#undef SUBTARGET_EXTRA_ASM_SPEC
++#define SUBTARGET_EXTRA_ASM_SPEC "\
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+
+@@ -57,7 +71,7 @@
+
+ #undef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
++ { "marm", TARGET_ENDIAN_OPTION, "mapcs-32", "mno-thumb-interwork" }
+
+ #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+
+@@ -72,7 +86,7 @@
+ %{shared:-lc} \
+ %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
+
+-#define LIBGCC_SPEC "%{msoft-float:-lfloat} -lgcc"
++#define LIBGCC_SPEC "-lgcc"
+
+ /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add
+ the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
+diff -urN gcc-3.4.1-old/gcc/config/arm/t-linux gcc-3.4.1/gcc/config/arm/t-linux
+--- gcc-3.4.1-old/gcc/config/arm/t-linux 2003-09-20 16:09:07.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/t-linux 2004-09-02 21:51:15.000000000 -0500
+@@ -4,7 +4,10 @@
+ LIBGCC2_DEBUG_CFLAGS = -g0
+
+ LIB1ASMSRC = arm/lib1funcs.asm
+-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx
++LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \
++ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
++ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
++ _fixsfsi _fixunssfsi
+
+ # MULTILIB_OPTIONS = mhard-float/msoft-float
+ # MULTILIB_DIRNAMES = hard-float soft-float
+diff -urN gcc-3.4.1-old/gcc/config/arm/unknown-elf.h gcc-3.4.1/gcc/config/arm/unknown-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/unknown-elf.h 2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/unknown-elf.h 2004-09-02 21:51:15.000000000 -0500
+@@ -30,7 +30,12 @@
+
+ /* Default to using APCS-32 and software floating point. */
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++ ( ARM_FLAG_SOFT_FLOAT \
++ | ARM_FLAG_VFP \
++ | ARM_FLAG_APCS_32 \
++ | ARM_FLAG_APCS_FRAME \
++ | ARM_FLAG_MMU_TRAPS )
+ #endif
+
+ /* Now we define the strings used to build the spec file. */
+diff -urN gcc-3.4.1-old/gcc/config/arm/xscale-elf.h gcc-3.4.1/gcc/config/arm/xscale-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/xscale-elf.h 2003-07-01 18:26:43.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/xscale-elf.h 2004-09-02 21:51:15.000000000 -0500
+@@ -49,11 +49,12 @@
+ endian, regardless of the endian-ness of the memory
+ system. */
+
+-#define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+- %{mhard-float:-mfpu=fpa} \
+- %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
++#define SUBTARGET_EXTRA_ASM_SPEC "\
++%{!mcpu=*:-mcpu=xscale} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "mlittle-endian", "mno-thumb-interwork", "marm", "msoft-float" }
++ { "mlittle-endian", "mno-thumb-interwork", "marm" }
+ #endif
diff --git a/toolchain/gcc/patches/4.0.2/100-uclibc-conf.patch b/toolchain/gcc/patches/4.0.2/100-uclibc-conf.patch
new file mode 100644
index 0000000000..9436c7d1ce
--- /dev/null
+++ b/toolchain/gcc/patches/4.0.2/100-uclibc-conf.patch
@@ -0,0 +1,410 @@
+diff -urN gcc-4.1.0/boehm-gc/configure gcc-4.1.0-patched/boehm-gc/configure
+--- gcc-4.1.0/boehm-gc/configure 2005-04-13 19:31:24.000000000 -0500
++++ gcc-4.1.0-patched/boehm-gc/configure 2005-04-25 20:47:19.919723167 -0500
+@@ -4320,6 +4320,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd* | knetbsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN gcc-4.1.0/gcc/config/arm/linux-elf.h gcc-4.1.0-patched/gcc/config/arm/linux-elf.h
+--- gcc-4.1.0/gcc/config/arm/linux-elf.h 2005-03-02 10:27:42.000000000 -0600
++++ gcc-4.1.0-patched/gcc/config/arm/linux-elf.h 2005-04-25 20:45:31.795953620 -0500
+@@ -82,6 +82,18 @@
+ "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC "%{h*} %{version:-v} \
++ %{b} %{Wl,*:%*} \
++ %{static:-Bstatic} \
++ %{shared:-shared} \
++ %{symbolic:-Bsymbolic} \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++ -X \
++ %{mbig-endian:-EB}" \
++ SUBTARGET_EXTRA_LINK_SPEC
++#else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+ %{b} %{Wl,*:%*} \
+ %{static:-Bstatic} \
+@@ -92,6 +104,7 @@
+ -X \
+ %{mbig-endian:-EB}" \
+ SUBTARGET_EXTRA_LINK_SPEC
++#endif
+
+ #define TARGET_OS_CPP_BUILTINS() \
+ do \
+diff -urN gcc-4.1.0/gcc/config/cris/linux.h gcc-4.1.0-patched/gcc/config/cris/linux.h
+--- gcc-4.1.0/gcc/config/cris/linux.h 2005-04-23 23:01:27.000000000 -0500
++++ gcc-4.1.0-patched/gcc/config/cris/linux.h 2005-04-25 20:45:31.796953451 -0500
+@@ -73,6 +73,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++ -rpath-link include/asm/../..%s\
++ %{shared} %{static}\
++ %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++ %{!shared: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++ %{!r:%{O2|O3: --gc-sections}}"
++
++#else /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+
+@@ -87,6 +106,8 @@
+ %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+ %{!r:%{O2|O3: --gc-sections}}"
+
++#endif /* USE_UCLIBC */
++
+
+ /* Node: Run-time Target */
+
+diff -urN gcc-4.1.0/gcc/config/cris/t-linux-uclibc gcc-4.1.0-patched/gcc/config/cris/t-linux-uclibc
+--- gcc-4.1.0/gcc/config/cris/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/gcc/config/cris/t-linux-uclibc 2005-04-25 20:45:31.797953283 -0500
+@@ -0,0 +1,3 @@
++T_CFLAGS = -DUSE_UCLIBC
++TARGET_LIBGCC2_CFLAGS += -fPIC
++CRTSTUFF_T_CFLAGS_S = $(TARGET_LIBGCC2_CFLAGS)
+diff -urN gcc-4.1.0/gcc/config/i386/linux.h gcc-4.1.0-patched/gcc/config/i386/linux.h
+--- gcc-4.1.0/gcc/config/i386/linux.h 2004-11-27 10:45:14.000000000 -0600
++++ gcc-4.1.0-patched/gcc/config/i386/linux.h 2005-04-25 21:21:05.828409973 -0500
+@@ -104,8 +104,13 @@
+
+ /* If ELF is the default format, we should not use /lib/elf. */
+
++#if defined USE_UCLIBC
++#define LINK_EMULATION "elf_i386"
++#define DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
+ #define LINK_EMULATION "elf_i386"
+ #define DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+
+ #undef SUBTARGET_EXTRA_SPECS
+ #define SUBTARGET_EXTRA_SPECS \
+@@ -144,6 +149,7 @@
+ } \
+ } while (0)
+ #endif
++#endif
+
+ /* Handle special EH pointer encodings. Absolute, pc-relative, and
+ indirect are handled automatically. */
+diff -urN gcc-4.1.0/gcc/config/mips/linux.h gcc-4.1.0-patched/gcc/config/mips/linux.h
+--- gcc-4.1.0/gcc/config/mips/linux.h 2005-01-25 20:04:46.000000000 -0600
++++ gcc-4.1.0-patched/gcc/config/mips/linux.h 2005-04-25 20:45:31.809951259 -0500
+@@ -108,6 +108,17 @@
+
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC \
++ "%(endian_spec) \
++ %{shared:-shared} \
++ %{!shared: \
++ %{!ibcs: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}}}"
++#else
+ #define LINK_SPEC \
+ "%(endian_spec) \
+ %{shared:-shared} \
+@@ -117,6 +128,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+ %{static:-static}}}"
++#endif
+
+ #undef SUBTARGET_ASM_SPEC
+ #define SUBTARGET_ASM_SPEC "%{mabi=64: -64} %{!mno-abicalls:-KPIC}"
+diff -urN gcc-4.1.0/gcc/config/rs6000/linux.h gcc-4.1.0-patched/gcc/config/rs6000/linux.h
+--- gcc-4.1.0/gcc/config/rs6000/linux.h 2004-12-01 20:21:28.000000000 -0600
++++ gcc-4.1.0-patched/gcc/config/rs6000/linux.h 2005-04-25 20:45:31.810951091 -0500
+@@ -69,7 +69,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+
+ #undef LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+
+ #define LINK_GCC_C_SEQUENCE_SPEC \
+ "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+diff -urN gcc-4.1.0/gcc/config/rs6000/sysv4.h gcc-4.1.0-patched/gcc/config/rs6000/sysv4.h
+--- gcc-4.1.0/gcc/config/rs6000/sysv4.h 2005-04-13 19:26:50.000000000 -0500
++++ gcc-4.1.0-patched/gcc/config/rs6000/sysv4.h 2005-04-25 20:45:31.812950754 -0500
+@@ -957,6 +957,7 @@
+ mcall-linux : %(link_os_linux) ; \
+ mcall-gnu : %(link_os_gnu) ; \
+ mcall-netbsd : %(link_os_netbsd) ; \
++ mcall-linux-uclibc : %(link_os_linux_uclibc); \
+ mcall-openbsd: %(link_os_openbsd) ; \
+ : %(link_os_default) }"
+
+@@ -1135,6 +1136,10 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+ #endif
+@@ -1301,6 +1306,7 @@
+ { "link_os_sim", LINK_OS_SIM_SPEC }, \
+ { "link_os_freebsd", LINK_OS_FREEBSD_SPEC }, \
+ { "link_os_linux", LINK_OS_LINUX_SPEC }, \
++ { "link_os_linux_uclibc", LINK_OS_LINUX_UCLIBC_SPEC }, \
+ { "link_os_gnu", LINK_OS_GNU_SPEC }, \
+ { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \
+ { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \
+diff -urN gcc-4.1.0/gcc/config/sh/linux.h gcc-4.1.0-patched/gcc/config/sh/linux.h
+--- gcc-4.1.0/gcc/config/sh/linux.h 2005-02-28 21:39:03.000000000 -0600
++++ gcc-4.1.0-patched/gcc/config/sh/linux.h 2005-04-25 20:45:31.814950416 -0500
+@@ -55,12 +55,21 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++ "%{shared:-shared} \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+ "%{shared:-shared} \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ %{static:-static}"
++#endif
+
+ /* Output assembler code to STREAM to call the profiler. */
+
+diff -urN gcc-4.1.0/gcc/config/sh/t-linux-uclibc gcc-4.1.0-patched/gcc/config/sh/t-linux-uclibc
+--- gcc-4.1.0/gcc/config/sh/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/gcc/config/sh/t-linux-uclibc 2005-04-25 20:45:31.814950416 -0500
+@@ -0,0 +1,13 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++TARGET_LIBGCC2_CFLAGS = -fpic -DNO_FPSCR_VALUES
++LIB1ASMFUNCS_CACHE = _ic_invalidate
++
++LIB2FUNCS_EXTRA=
++
++MULTILIB_OPTIONS= $(MULTILIB_ENDIAN) m3e/m4
++MULTILIB_DIRNAMES=
++MULTILIB_MATCHES =
++MULTILIB_EXCEPTIONS=
++
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
+diff -urN gcc-4.1.0/gcc/config/sh/t-sh64-uclibc gcc-4.1.0-patched/gcc/config/sh/t-sh64-uclibc
+--- gcc-4.1.0/gcc/config/sh/t-sh64-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/gcc/config/sh/t-sh64-uclibc 2005-04-25 20:45:31.815950248 -0500
+@@ -0,0 +1,13 @@
++EXTRA_MULTILIB_PARTS= crt1.o crti.o crtn.o crtbegin.o crtend.o
++
++LIB1ASMFUNCS = \
++ _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
++ _shcompact_call_trampoline _shcompact_return_trampoline \
++ _shcompact_incoming_args _ic_invalidate _nested_trampoline \
++ _push_pop_shmedia_regs \
++ _udivdi3 _divdi3 _umoddi3 _moddi3
++
++MULTILIB_OPTIONS = $(MULTILIB_ENDIAN) m5-32media-nofpu/m5-compact/m5-compact-nofpu/m5-64media/m5-64media-nofpu
++MULTILIB_DIRNAMES= $(MULTILIB_ENDIAN) nofpu compact nofpu/compact media64 nofpu/media64
++MULTILIB_MATCHES=
++MULTILIB_EXCEPTIONS=
+diff -urN gcc-4.1.0/gcc/config/t-linux-uclibc gcc-4.1.0-patched/gcc/config/t-linux-uclibc
+--- gcc-4.1.0/gcc/config/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/gcc/config/t-linux-uclibc 2005-04-25 20:45:31.815950248 -0500
+@@ -0,0 +1,15 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Compile crtbeginS.o and crtendS.o with pic.
++CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
++# Compile libgcc2.a with pic.
++TARGET_LIBGCC2_CFLAGS = -fPIC
++
++# Override t-slibgcc-elf-ver to export some libgcc symbols with
++# the symbol versions that glibc used.
++#SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
++
++# Use unwind-dw2-fde
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
++ $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
+diff -urN gcc-4.1.0/gcc/config.gcc gcc-4.1.0-patched/gcc/config.gcc
+--- gcc-4.1.0/gcc/config.gcc 2005-04-23 23:01:23.000000000 -0500
++++ gcc-4.1.0-patched/gcc/config.gcc 2005-04-25 21:12:43.375594576 -0500
+@@ -448,7 +448,14 @@
+ case ${enable_threads} in
+ "" | yes | posix) thread_file='posix' ;;
+ esac
+- tmake_file="t-slibgcc-elf-ver t-linux"
++ case ${target} in
++ *-linux*uclibc*)
++ tmake_file="t-slibgcc-elf-ver t-linux-uclibc"
++ ;;
++ *)
++ tmake_file="t-slibgcc-elf-ver t-linux"
++ ;;
++ esac
+ ;;
+ *-*-gnu*)
+ # On the Hurd, the setup is just about the same on
+@@ -667,6 +674,12 @@
+ extra_parts=""
+ use_collect2=yes
+ ;;
++arm*-*-linux-uclibc*) # ARM GNU/Linux with ELF - uClibc
++ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++ tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
++ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++ gnu_ld=yes
++ ;;
+ arm*-*-linux*) # ARM GNU/Linux with ELF
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
+ tmake_file="${tmake_file} arm/t-arm arm/t-linux"
+@@ -765,6 +778,10 @@
+ gas=yes
+ extra_options="${extra_options} cris/elf.opt"
+ ;;
++cris-*-linux-uclibc*)
++ tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
++ tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux-uclibc"
++ ;;
+ cris-*-linux*)
+ tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
+ # We need to avoid using t-linux, so override default tmake_file
+@@ -1443,6 +1460,16 @@
+ gnu_ld=yes
+ gas=yes
+ ;;
++mips*-*-linux-uclibc*) # Linux MIPS, either endian. uClibc
++ tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
++ case ${target} in
++ mipsisa32*-*)
++ target_cpu_default="MASK_SOFT_FLOAT"
++ tm_defines="MIPS_ISA_DEFAULT=32"
++ ;;
++ esac
++ tmake_file="t-slibgcc-elf-ver t-linux-uclibc"
++ ;;
+ mips*-*-linux*) # Linux MIPS, either endian.
+ tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
+ case ${target} in
+@@ -1659,6 +1686,10 @@
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxspe.h"
+ tmake_file="rs6000/t-fprules rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm"
+ ;;
++powerpc-*-linux-uclibc*)
++ tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
++ tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux-uclibc rs6000/t-ppccomm"
++ ;;
+ powerpc-*-linux*)
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h"
+ tmake_file="rs6000/t-fprules rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm"
+@@ -1821,6 +1852,8 @@
+ esac
+ tm_file="${tm_file} sh/elf.h"
+ case ${target} in
++ sh*-*-linux-uclibc*) tmake_file="${tmake_file} t-linux-uclibc sh/t-linux-uclibc"
++ tm_file="${tm_file} linux.h sh/linux.h" ;;
+ sh*-*-linux*) tmake_file="${tmake_file} sh/t-linux"
+ tm_file="${tm_file} linux.h sh/linux.h" ;;
+ sh*-*-kaos*) tm_file="${tm_file} sh/embed-elf.h kaos.h sh/kaos-sh.h"
+@@ -1840,6 +1873,11 @@
+ *-*-netbsd)
+ tmake_file="${tmake_file} sh/t-netbsd"
+ ;;
++ sh64*-*-linux-uclibc*)
++ tmake_file="${tmake_file} sh/t-sh64-uclibc"
++ tm_file="${tm_file} sh/sh64.h"
++ extra_headers="shmedia.h ushmedia.h sshmedia.h"
++ ;;
+ sh64*-*-linux*)
+ tmake_file="${tmake_file} sh/t-sh64 sh/t-linux64"
+ tm_file="${tm_file} sh/sh64.h"
+diff -urN gcc-4.1.0/libtool.m4 gcc-4.1.0-patched/libtool.m4
+--- gcc-4.1.0/libtool.m4 2005-04-13 19:31:24.000000000 -0500
++++ gcc-4.1.0-patched/libtool.m4 2005-04-25 20:47:51.679369687 -0500
+@@ -743,6 +743,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd* | knetbsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN gcc-4.1.0/ltconfig gcc-4.1.0-patched/ltconfig
+--- gcc-4.1.0/ltconfig 2004-10-02 11:33:06.000000000 -0500
++++ gcc-4.1.0-patched/ltconfig 2005-04-25 20:45:31.836946707 -0500
+@@ -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
+@@ -1273,6 +1274,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/toolchain/gcc/patches/4.0.2/200-uclibc-locale.patch b/toolchain/gcc/patches/4.0.2/200-uclibc-locale.patch
new file mode 100644
index 0000000000..c57f17312b
--- /dev/null
+++ b/toolchain/gcc/patches/4.0.2/200-uclibc-locale.patch
@@ -0,0 +1,3191 @@
+diff -urN gcc-4.1.0/libstdc++-v3/acinclude.m4 gcc-4.1.0-patched/libstdc++-v3/acinclude.m4
+--- gcc-4.1.0/libstdc++-v3/acinclude.m4 2005-04-11 19:13:06.000000000 -0500
++++ gcc-4.1.0-patched/libstdc++-v3/acinclude.m4 2005-04-27 22:20:27.569248995 -0500
+@@ -1047,7 +1047,7 @@
+ AC_MSG_CHECKING([for C locale to use])
+ GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+ [use MODEL for target locale package],
+- [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++ [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
+
+ # If they didn't use this option switch, or if they specified --enable
+ # with no specific model, we'll have to look for one. If they
+@@ -1063,6 +1063,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case ${target_os} in
++ *-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+ AC_EGREP_CPP([_GLIBCXX_ok], [
+ #include <features.h>
+@@ -1206,6 +1209,41 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ AC_MSG_RESULT(uclibc)
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++ AC_SUBST(glibcxx_MOFILES)
++ AC_SUBST(glibcxx_POFILES)
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2005-04-27 22:20:27.571248664 -0500
+@@ -0,0 +1,59 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/c_locale.cc 2005-04-27 22:20:27.572248498 -0500
+@@ -0,0 +1,160 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno> // For errno
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L) strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B))
++#define __strtof_l(S, E, L) strtof((S), (E))
++#define __strtod_l(S, E, L) strtod((S), (E))
++#define __strtold_l(S, E, L) strtold((S), (E))
++#warning should dummy __newlocale check for C|POSIX ?
++#define __newlocale(a, b, c) NULL
++#define __freelocale(a) ((void)0)
++#define __duplocale(a) __c_locale()
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ float __f = __strtof_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __f;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ double __d = __strtod_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __d;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ long double __ld = __strtold_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __ld;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ void
++ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
++ __c_locale __old)
++ {
++ __cloc = __newlocale(1 << LC_ALL, __s, __old);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ if (!__cloc)
++ {
++ // This named locale is not supported by the underlying OS.
++ __throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++ "name not valid"));
++ }
++#endif
++ }
++
++ void
++ locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++ {
++ if (_S_get_c_locale() != __cloc)
++ __freelocale(__cloc);
++ }
++
++ __c_locale
++ locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++ { return __duplocale(__cloc); }
++} // namespace std
++
++namespace __gnu_cxx
++{
++ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++ {
++ "LC_CTYPE",
++ "LC_NUMERIC",
++ "LC_TIME",
++ "LC_COLLATE",
++ "LC_MONETARY",
++ "LC_MESSAGES",
++#if _GLIBCXX_NUM_CATEGORIES != 0
++ "LC_PAPER",
++ "LC_NAME",
++ "LC_ADDRESS",
++ "LC_TELEPHONE",
++ "LC_MEASUREMENT",
++ "LC_IDENTIFICATION"
++#endif
++ };
++}
++
++namespace std
++{
++ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++} // namespace std
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/c_locale.h 2005-04-27 22:20:27.573248332 -0500
+@@ -0,0 +1,115 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _C_LOCALE_H
++#define _C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <cstring> // get std::strlen
++#include <cstdio> // get std::snprintf or std::sprintf
++#include <clocale>
++#include <langinfo.h> // For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h> // For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> // For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCXX_C_LOCALE_GNU for
++#endif
++#define _GLIBCXX_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCXX_NUM_CATEGORIES 6
++#define _GLIBCXX_NUM_CATEGORIES 0
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++ extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++ typedef __locale_t __c_locale;
++#else
++ typedef int* __c_locale;
++#endif
++
++ // Convert numeric value of type _Tv to string and return length of
++ // string. If snprintf is available use it, otherwise fall back to
++ // the unsafe sprintf which, in general, can be dangerous and should
++ // be avoided.
++ template<typename _Tv>
++ int
++ __convert_from_v(char* __out, const int __size, const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ _Tv __v, const __c_locale& __cloc, int __prec)
++ {
++ __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++ _Tv __v, const __c_locale&, int __prec)
++ {
++# ifdef __UCLIBC_HAS_LOCALE__
++ char* __old = std::setlocale(LC_ALL, NULL);
++ char* __sav = new char[std::strlen(__old) + 1];
++ std::strcpy(__sav, __old);
++ std::setlocale(LC_ALL, "C");
++# endif
++#endif
++
++ const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++ std::setlocale(LC_ALL, __sav);
++ delete [] __sav;
++#endif
++ return __ret;
++ }
++}
++
++#endif
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 2005-04-27 22:20:27.574248167 -0500
+@@ -0,0 +1,306 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++ // Specializations.
++#ifdef _GLIBCXX_USE_WCHAR_T
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_out(state_type& __state, const intern_type* __from,
++ const intern_type* __from_end, const intern_type*& __from_next,
++ extern_type* __to, extern_type* __to_end,
++ extern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // wcsnrtombs is *very* fast but stops if encounters NUL characters:
++ // in case we fall back to wcrtomb and then continue, in a loop.
++ // NB: wcsnrtombs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
++ __from_end - __from_next);
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ const size_t __conv = wcsnrtombs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // wcrtomb.
++ for (; __from < __from_next; ++__from)
++ __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ extern_type __buf[MB_LEN_MAX];
++ __tmp_state = __state;
++ const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
++ if (__conv > static_cast<size_t>(__to_end - __to_next))
++ __ret = partial;
++ else
++ {
++ memcpy(__to_next, __buf, __conv);
++ __state = __tmp_state;
++ __to_next += __conv;
++ ++__from_next;
++ }
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_in(state_type& __state, const extern_type* __from,
++ const extern_type* __from_end, const extern_type*& __from_next,
++ intern_type* __to, intern_type* __to_end,
++ intern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we store a L'\0' and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
++ __from_end
++ - __from_next));
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ size_t __conv = mbsnrtowcs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (;; ++__to_next, __from += __conv)
++ {
++ __conv = mbrtowc(__to_next, __from, __from_end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __from_next = __from;
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ // It is unclear what to return in this case (see DR 382).
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ if (__to_next < __to_end)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from_next;
++ *__to_next++ = L'\0';
++ }
++ else
++ __ret = partial;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_encoding() const throw()
++ {
++ // XXX This implementation assumes that the encoding is
++ // stateless and is either single-byte or variable-width.
++ int __ret = 0;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ if (MB_CUR_MAX == 1)
++ __ret = 1;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_max_length() const throw()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ // XXX Probably wrong for stateful encodings.
++ int __ret = MB_CUR_MAX;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_length(state_type& __state, const extern_type* __from,
++ const extern_type* __end, size_t __max) const
++ {
++ int __ret = 0;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we advance past it and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++
++ // A dummy internal buffer is needed in order for mbsnrtocws to consider
++ // its fourth parameter (it wouldn't with NULL as first parameter).
++ wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
++ * __max));
++ while (__from < __end && __max)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
++ __end
++ - __from));
++ if (!__from_chunk_end)
++ __from_chunk_end = __end;
++
++ const extern_type* __tmp_from = __from;
++ size_t __conv = mbsnrtowcs(__to, &__from,
++ __from_chunk_end - __from,
++ __max, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (__from = __tmp_from;; __from += __conv)
++ {
++ __conv = mbrtowc(NULL, __from, __end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __state = __tmp_state;
++ __ret += __from - __tmp_from;
++ break;
++ }
++ if (!__from)
++ __from = __from_chunk_end;
++
++ __ret += __from - __tmp_from;
++ __max -= __conv;
++
++ if (__from < __end && __max)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from;
++ ++__ret;
++ --__max;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++#endif
++}
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/collate_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/collate_members.cc 2005-04-27 22:20:27.575248001 -0500
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L) strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++ // These are basically extensions to char_traits, and perhaps should
++ // be put there instead of here.
++ template<>
++ int
++ collate<char>::_M_compare(const char* __one, const char* __two) const
++ {
++ int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<char>::_M_transform(char* __to, const char* __from,
++ size_t __n) const
++ { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ int
++ collate<wchar_t>::_M_compare(const wchar_t* __one,
++ const wchar_t* __two) const
++ {
++ int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++ size_t __n) const
++ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2005-04-27 22:20:27.595244687 -0500
+@@ -0,0 +1,300 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L) wctype((S))
++#define __towupper_l(C, L) towupper((C))
++#define __towlower_l(C, L) towlower((C))
++#define __iswctype_l(C, M, L) iswctype((C), (M))
++#endif
++
++namespace std
++{
++ // NB: The other ctype<char> specializations are in src/locale.cc and
++ // various /config/os/* files.
++ template<>
++ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++ : ctype<char>(0, false, __refs)
++ {
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
++ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
++ this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
++ this->_M_table = this->_M_c_locale_ctype->__ctype_b;
++#endif
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ ctype<wchar_t>::__wmask_type
++ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++ {
++ __wmask_type __ret;
++ switch (__m)
++ {
++ case space:
++ __ret = __wctype_l("space", _M_c_locale_ctype);
++ break;
++ case print:
++ __ret = __wctype_l("print", _M_c_locale_ctype);
++ break;
++ case cntrl:
++ __ret = __wctype_l("cntrl", _M_c_locale_ctype);
++ break;
++ case upper:
++ __ret = __wctype_l("upper", _M_c_locale_ctype);
++ break;
++ case lower:
++ __ret = __wctype_l("lower", _M_c_locale_ctype);
++ break;
++ case alpha:
++ __ret = __wctype_l("alpha", _M_c_locale_ctype);
++ break;
++ case digit:
++ __ret = __wctype_l("digit", _M_c_locale_ctype);
++ break;
++ case punct:
++ __ret = __wctype_l("punct", _M_c_locale_ctype);
++ break;
++ case xdigit:
++ __ret = __wctype_l("xdigit", _M_c_locale_ctype);
++ break;
++ case alnum:
++ __ret = __wctype_l("alnum", _M_c_locale_ctype);
++ break;
++ case graph:
++ __ret = __wctype_l("graph", _M_c_locale_ctype);
++ break;
++ default:
++ __ret = 0;
++ }
++ return __ret;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_toupper(wchar_t __c) const
++ { return __towupper_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_tolower(wchar_t __c) const
++ { return __towlower_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ bool
++ ctype<wchar_t>::
++ do_is(mask __m, wchar_t __c) const
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ bool __ret = false;
++ const size_t __bitmasksize = 11;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__m & _M_bit[__bitcur]
++ && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
++ {
++ __ret = true;
++ break;
++ }
++ return __ret;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++ {
++ for (; __lo < __hi; ++__vec, ++__lo)
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ const size_t __bitmasksize = 11;
++ mask __m = 0;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
++ __m |= _M_bit[__bitcur];
++ *__vec = __m;
++ }
++ return __hi;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi && !this->do_is(__m, *__lo))
++ ++__lo;
++ return __lo;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++ {
++ while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++ ++__lo;
++ return __lo;
++ }
++
++ wchar_t
++ ctype<wchar_t>::
++ do_widen(char __c) const
++ { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<wchar_t>::
++ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++ {
++ while (__lo < __hi)
++ {
++ *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++ ++__lo;
++ ++__dest;
++ }
++ return __hi;
++ }
++
++ char
++ ctype<wchar_t>::
++ do_narrow(wchar_t __wc, char __dfault) const
++ {
++ if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++ return _M_narrow[__wc];
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ const int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
++ char* __dest) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ if (_M_narrow_ok)
++ while (__lo < __hi)
++ {
++ if (*__lo >= 0 && *__lo < 128)
++ *__dest = _M_narrow[*__lo];
++ else
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++ ++__lo;
++ ++__dest;
++ }
++ else
++ while (__lo < __hi)
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ ++__lo;
++ ++__dest;
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __hi;
++ }
++
++ void
++ ctype<wchar_t>::_M_initialize_ctype()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ wint_t __i;
++ for (__i = 0; __i < 128; ++__i)
++ {
++ const int __c = wctob(__i);
++ if (__c == EOF)
++ break;
++ else
++ _M_narrow[__i] = static_cast<char>(__c);
++ }
++ if (__i == 128)
++ _M_narrow_ok = true;
++ else
++ _M_narrow_ok = false;
++ for (size_t __j = 0;
++ __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
++ _M_widen[__j] = btowc(__j);
++
++ for (size_t __k = 0; __k <= 11; ++__k)
++ {
++ _M_bit[__k] = static_cast<mask>(_ISbit(__k));
++ _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ }
++#endif // _GLIBCXX_USE_WCHAR_T
++}
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/messages_members.cc 2005-04-27 22:20:27.618240876 -0500
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++ const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++ // Specializations.
++ template<>
++ string
++ messages<char>::do_get(catalog, int, int, const string& __dfault) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++ __uselocale(__old);
++ return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ const char* __msg = gettext(__dfault.c_str());
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return string(__msg);
++#else
++ const char* __msg = gettext(__dfault.c_str());
++ return string(__msg);
++#endif
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ wstring
++ messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++ {
++# ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ __uselocale(__old);
++ return _M_convert_from_char(__msg);
++# elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return _M_convert_from_char(__msg);
++# else
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ return _M_convert_from_char(__msg);
++# endif
++ }
++#endif
++}
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/messages_members.h 2005-04-27 22:20:27.619240710 -0500
+@@ -0,0 +1,118 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++ const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D) ((void)0)
++#define __bindtextdomain(D,P) ((void)0)
++#endif
++
++ // Non-virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::messages(size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
++ _M_name_messages(_S_get_c_name())
++ { }
++
++ template<typename _CharT>
++ messages<_CharT>::messages(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
++ _M_name_messages(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_messages = __tmp;
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
++ const char* __dir) const
++ {
++ __bindtextdomain(__s.c_str(), __dir);
++ return this->do_open(__s, __loc);
++ }
++
++ // Virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::~messages()
++ {
++ if (_M_name_messages != _S_get_c_name())
++ delete [] _M_name_messages;
++ _S_destroy_c_locale(_M_c_locale_messages);
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::do_open(const basic_string<char>& __s,
++ const locale&) const
++ {
++ // No error checking is done, assume the catalog exists and can
++ // be used.
++ __textdomain(__s.c_str());
++ return 0;
++ }
++
++ template<typename _CharT>
++ void
++ messages<_CharT>::do_close(catalog) const
++ { }
++
++ // messages_byname
++ template<typename _CharT>
++ messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++ : messages<_CharT>(__refs)
++ {
++ if (this->_M_name_messages != locale::facet::_S_get_c_name())
++ delete [] this->_M_name_messages;
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ this->_M_name_messages = __tmp;
++
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_messages);
++ this->_S_create_c_locale(this->_M_c_locale_messages, __s);
++ }
++ }
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2005-04-27 22:20:27.621240379 -0500
+@@ -0,0 +1,698 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ // Construct and return valid pattern consisting of some combination of:
++ // space none symbol sign value
++ money_base::pattern
++ money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++ {
++ pattern __ret;
++
++ // This insanely complicated routine attempts to construct a valid
++ // pattern for use with monyepunct. A couple of invariants:
++
++ // if (__precedes) symbol -> value
++ // else value -> symbol
++
++ // if (__space) space
++ // else none
++
++ // none == never first
++ // space never first or last
++
++ // Any elegant implementations of this are welcome.
++ switch (__posn)
++ {
++ case 0:
++ case 1:
++ // 1 The sign precedes the value and symbol.
++ __ret.field[0] = sign;
++ if (__space)
++ {
++ // Pattern starts with sign.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[3] = symbol;
++ }
++ __ret.field[2] = space;
++ }
++ else
++ {
++ // Pattern starts with sign and ends with none.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[3] = none;
++ }
++ break;
++ case 2:
++ // 2 The sign follows the value and symbol.
++ if (__space)
++ {
++ // Pattern either ends with sign.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[1] = space;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ // Pattern ends with sign then none.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[1] = symbol;
++ }
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ break;
++ case 3:
++ // 3 The sign immediately precedes the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = sign;
++ __ret.field[1] = symbol;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = sign;
++ __ret.field[3] = symbol;
++ }
++ else
++ {
++ __ret.field[1] = sign;
++ __ret.field[2] = symbol;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ case 4:
++ // 4 The sign immediately follows the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = sign;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = symbol;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ default:
++ ;
++ }
++ return __ret;
++ }
++
++ template<>
++ void
++ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == true
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ void
++ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == false
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ moneypunct<char, true>::~moneypunct()
++ { delete _M_data; }
++
++ template<>
++ moneypunct<char, false>::~moneypunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ {
++ uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++ _M_data->_M_atoms[__i] = btowc(uc);
++ }
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ void
++ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ {
++ uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++ _M_data->_M_atoms[__i] = btowc(uc);
++ }
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len;
++ __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ moneypunct<wchar_t, true>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++
++ template<>
++ moneypunct<wchar_t, false>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++#endif
++}
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2005-04-27 22:20:27.623240047 -0500
+@@ -0,0 +1,183 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP,
++ __cloc));
++
++ // Check for NULL, which implies no grouping.
++ if (_M_data->_M_thousands_sep == '\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = "true";
++ _M_data->_M_truename_size = strlen(_M_data->_M_truename);
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = "false";
++ _M_data->_M_falsename_size = strlen(_M_data->_M_falsename);
++ }
++
++ template<>
++ numpunct<char>::~numpunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<wchar_t>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_S_get_c_locale());
++#endif
++ // Use ctype::widen code without the facet...
++ unsigned char uc;
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ {
++ uc = static_cast<unsigned char>(__num_base::_S_atoms_out[__i]);
++ _M_data->_M_atoms_out[__i] = btowc(uc);
++ }
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ {
++ uc = static_cast<unsigned char>(__num_base::_S_atoms_in[__j]);
++ _M_data->_M_atoms_in[__j] = btowc(uc);
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union __s_and_w { const char *__s; unsigned int __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++
++ if (_M_data->_M_thousands_sep == L'\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = L"true";
++ _M_data->_M_truename_size = wcslen(_M_data->_M_truename);
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = L"false";
++ _M_data->_M_falsename_size = wcslen(_M_data->_M_falsename);
++ }
++
++ template<>
++ numpunct<wchar_t>::~numpunct()
++ { delete _M_data; }
++ #endif
++}
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/time_members.cc 2005-04-27 22:20:27.624239882 -0500
+@@ -0,0 +1,356 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __timepunct<char>::
++ _M_put(char* __s, size_t __maxlen, const char* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = strftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = '\0';
++ }
++
++ template<>
++ void
++ __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = "%m/%d/%y";
++ _M_data->_M_date_era_format = "%m/%d/%y";
++ _M_data->_M_time_format = "%H:%M:%S";
++ _M_data->_M_time_era_format = "%H:%M:%S";
++ _M_data->_M_date_time_format = "";
++ _M_data->_M_date_time_era_format = "";
++ _M_data->_M_am = "AM";
++ _M_data->_M_pm = "PM";
++ _M_data->_M_am_pm_format = "";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = "Sunday";
++ _M_data->_M_day2 = "Monday";
++ _M_data->_M_day3 = "Tuesday";
++ _M_data->_M_day4 = "Wednesday";
++ _M_data->_M_day5 = "Thursday";
++ _M_data->_M_day6 = "Friday";
++ _M_data->_M_day7 = "Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = "Sun";
++ _M_data->_M_aday2 = "Mon";
++ _M_data->_M_aday3 = "Tue";
++ _M_data->_M_aday4 = "Wed";
++ _M_data->_M_aday5 = "Thu";
++ _M_data->_M_aday6 = "Fri";
++ _M_data->_M_aday7 = "Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = "January";
++ _M_data->_M_month02 = "February";
++ _M_data->_M_month03 = "March";
++ _M_data->_M_month04 = "April";
++ _M_data->_M_month05 = "May";
++ _M_data->_M_month06 = "June";
++ _M_data->_M_month07 = "July";
++ _M_data->_M_month08 = "August";
++ _M_data->_M_month09 = "September";
++ _M_data->_M_month10 = "October";
++ _M_data->_M_month11 = "November";
++ _M_data->_M_month12 = "December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = "Jan";
++ _M_data->_M_amonth02 = "Feb";
++ _M_data->_M_amonth03 = "Mar";
++ _M_data->_M_amonth04 = "Apr";
++ _M_data->_M_amonth05 = "May";
++ _M_data->_M_amonth06 = "Jun";
++ _M_data->_M_amonth07 = "Jul";
++ _M_data->_M_amonth08 = "Aug";
++ _M_data->_M_amonth09 = "Sep";
++ _M_data->_M_amonth10 = "Oct";
++ _M_data->_M_amonth11 = "Nov";
++ _M_data->_M_amonth12 = "Dec";
++ }
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++ _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++ _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++ _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++ _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++ _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
++ _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
++ _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
++ _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++ _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++ _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++ _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++ _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++ _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++ _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
++ _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
++ _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
++ _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
++ _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
++ _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
++ _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
++ _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
++ _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
++ _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
++ _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
++ _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
++ _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
++ _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
++ _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
++ _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
++ _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
++ _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
++ _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
++ _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
++ _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
++ _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
++ _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
++ _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
++ _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
++ _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
++ _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
++ _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
++ _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ __timepunct<wchar_t>::
++ _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++ const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = L'\0';
++ }
++
++ template<>
++ void
++ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<wchar_t>;
++
++#warning wide time stuff
++// if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = L"%m/%d/%y";
++ _M_data->_M_date_era_format = L"%m/%d/%y";
++ _M_data->_M_time_format = L"%H:%M:%S";
++ _M_data->_M_time_era_format = L"%H:%M:%S";
++ _M_data->_M_date_time_format = L"";
++ _M_data->_M_date_time_era_format = L"";
++ _M_data->_M_am = L"AM";
++ _M_data->_M_pm = L"PM";
++ _M_data->_M_am_pm_format = L"";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = L"Sunday";
++ _M_data->_M_day2 = L"Monday";
++ _M_data->_M_day3 = L"Tuesday";
++ _M_data->_M_day4 = L"Wednesday";
++ _M_data->_M_day5 = L"Thursday";
++ _M_data->_M_day6 = L"Friday";
++ _M_data->_M_day7 = L"Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = L"Sun";
++ _M_data->_M_aday2 = L"Mon";
++ _M_data->_M_aday3 = L"Tue";
++ _M_data->_M_aday4 = L"Wed";
++ _M_data->_M_aday5 = L"Thu";
++ _M_data->_M_aday6 = L"Fri";
++ _M_data->_M_aday7 = L"Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = L"January";
++ _M_data->_M_month02 = L"February";
++ _M_data->_M_month03 = L"March";
++ _M_data->_M_month04 = L"April";
++ _M_data->_M_month05 = L"May";
++ _M_data->_M_month06 = L"June";
++ _M_data->_M_month07 = L"July";
++ _M_data->_M_month08 = L"August";
++ _M_data->_M_month09 = L"September";
++ _M_data->_M_month10 = L"October";
++ _M_data->_M_month11 = L"November";
++ _M_data->_M_month12 = L"December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = L"Jan";
++ _M_data->_M_amonth02 = L"Feb";
++ _M_data->_M_amonth03 = L"Mar";
++ _M_data->_M_amonth04 = L"Apr";
++ _M_data->_M_amonth05 = L"May";
++ _M_data->_M_amonth06 = L"Jun";
++ _M_data->_M_amonth07 = L"Jul";
++ _M_data->_M_amonth08 = L"Aug";
++ _M_data->_M_amonth09 = L"Sep";
++ _M_data->_M_amonth10 = L"Oct";
++ _M_data->_M_amonth11 = L"Nov";
++ _M_data->_M_amonth12 = L"Dec";
++ }
++#if 0
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ _M_data->_M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
++ _M_data->_M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
++ _M_data->_M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
++ _M_data->_M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
++ _M_data->_M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
++ _M_data->_M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
++ _M_data->_M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
++ _M_data->_M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
++ _M_data->_M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
++ _M_data->_M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
++ _M_data->_M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
++ _M_data->_M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
++ _M_data->_M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
++ _M_data->_M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
++ _M_data->_M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
++ _M_data->_M_aday2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
++ _M_data->_M_aday3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
++ _M_data->_M_aday4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
++ _M_data->_M_aday5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
++ _M_data->_M_aday6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
++ _M_data->_M_aday7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
++ _M_data->_M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
++ _M_data->_M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
++ _M_data->_M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
++ _M_data->_M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
++ _M_data->_M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
++ _M_data->_M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
++ _M_data->_M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
++ _M_data->_M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
++ _M_data->_M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
++ _M_data->_M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
++ _M_data->_M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
++ _M_data->_M_amonth02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
++ _M_data->_M_amonth03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
++ _M_data->_M_amonth04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
++ _M_data->_M_amonth05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
++ _M_data->_M_amonth06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
++ _M_data->_M_amonth07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
++ _M_data->_M_amonth08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
++ _M_data->_M_amonth09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
++ _M_data->_M_amonth10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
++ _M_data->_M_amonth11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
++ _M_data->_M_amonth12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
++ }
++#endif // 0
++ }
++#endif
++}
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.h gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/time_members.h 2005-04-27 22:20:27.625239716 -0500
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
++ : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_timepunct = __tmp;
++ _M_initialize_timepunct(__cloc);
++ }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::~__timepunct()
++ {
++ if (_M_name_timepunct != _S_get_c_name())
++ delete [] _M_name_timepunct;
++ delete _M_data;
++ _S_destroy_c_locale(_M_c_locale_timepunct);
++ }
+diff -urN gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_base.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/ctype_base.h 2005-04-27 22:20:27.626239550 -0500
+@@ -0,0 +1,58 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ struct ctype_base
++ {
++ // Note: In uClibc, the following two types depend on configuration.
++
++ // Non-standard typedefs.
++ typedef const __ctype_touplow_t* __to_type;
++
++ // NB: Offsets into ctype<char>::_M_table force a particular size
++ // on the mask type. Because of this, we don't use an enum.
++ typedef __ctype_mask_t mask;
++ static const mask upper = _ISupper;
++ static const mask lower = _ISlower;
++ static const mask alpha = _ISalpha;
++ static const mask digit = _ISdigit;
++ static const mask xdigit = _ISxdigit;
++ static const mask space = _ISspace;
++ static const mask print = _ISprint;
++ static const mask graph = _ISalpha | _ISdigit | _ISpunct;
++ static const mask cntrl = _IScntrl;
++ static const mask punct = _ISpunct;
++ static const mask alnum = _ISalpha | _ISdigit;
++ };
+diff -urN gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_inline.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/ctype_inline.h 2005-04-27 22:20:27.626239550 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++
++ bool
++ ctype<char>::
++ is(mask __m, char __c) const
++ { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++ const char*
++ ctype<char>::
++ is(const char* __low, const char* __high, mask* __vec) const
++ {
++ while (__low < __high)
++ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++ return __high;
++ }
++
++ const char*
++ ctype<char>::
++ scan_is(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++ ++__low;
++ return __low;
++ }
++
++ const char*
++ ctype<char>::
++ scan_not(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++ ++__low;
++ return __low;
++ }
+diff -urN gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/ctype_noninline.h 2005-04-27 22:20:27.627239385 -0500
+@@ -0,0 +1,92 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ const ctype_base::mask*
++ ctype<char>::classic_table() throw()
++ { return __C_ctype_b; }
++
++ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ char
++ ctype<char>::do_toupper(char __c) const
++ { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_toupper(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_toupper[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
++
++ char
++ ctype<char>::do_tolower(char __c) const
++ { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_tolower(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_tolower[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
+diff -urN gcc-4.1.0/libstdc++-v3/config/os/uclibc/os_defines.h gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-4.1.0/libstdc++-v3/config/os/uclibc/os_defines.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/os_defines.h 2005-04-27 22:20:27.628239219 -0500
+@@ -0,0 +1,44 @@
++// Specific definitions for GNU/Linux -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here. This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
+diff -urN gcc-4.1.0/libstdc++-v3/configure gcc-4.1.0-patched/libstdc++-v3/configure
+--- gcc-4.1.0/libstdc++-v3/configure 2005-04-13 19:31:43.000000000 -0500
++++ gcc-4.1.0-patched/libstdc++-v3/configure 2005-04-27 22:20:33.285301695 -0500
+@@ -3986,6 +3986,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+@@ -5744,6 +5749,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case ${target_os} in
++ linux-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+@@ -5974,6 +5982,77 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ echo "$as_me:$LINENO: result: uclibc" >&5
++echo "${ECHO_T}uclibc" >&6
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ if test -n "$check_msgfmt"; then
++ ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_check_msgfmt="yes"
++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++done
++
++ test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt=$ac_cv_prog_check_msgfmt
++if test -n "$check_msgfmt"; then
++ echo "$as_me:$LINENO: result: $check_msgfmt" >&5
++echo "${ECHO_T}$check_msgfmt" >&6
++else
++ echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++
++
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-4.1.0/libstdc++-v3/configure.host gcc-4.1.0-patched/libstdc++-v3/configure.host
+--- gcc-4.1.0/libstdc++-v3/configure.host 2005-01-13 16:48:14.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/configure.host 2005-04-27 22:20:28.088162997 -0500
+@@ -249,6 +249,12 @@
+ ;;
+ esac
+
++# Override for uClibc since linux-uclibc gets mishandled above.
++case "${host_os}" in
++ *-uclibc*)
++ os_include_dir="os/uclibc"
++ ;;
++esac
+
+ # Set any OS-dependent and CPU-dependent bits.
+ # THIS TABLE IS SORTED. KEEP IT THAT WAY.
+diff -urN gcc-4.1.0/libstdc++-v3/crossconfig.m4 gcc-4.1.0-patched/libstdc++-v3/crossconfig.m4
+--- gcc-4.1.0/libstdc++-v3/crossconfig.m4 2005-04-06 18:31:16.000000000 -0500
++++ gcc-4.1.0-patched/libstdc++-v3/crossconfig.m4 2005-04-27 22:20:28.089162832 -0500
+@@ -143,6 +143,99 @@
+ ;;
+ esac
+ ;;
++ *-uclibc*)
++# Temporary hack until we implement the float versions of the libm funcs
++ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++ machine/endian.h machine/param.h sys/machine.h sys/types.h \
++ fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
++ SECTION_FLAGS='-ffunction-sections -fdata-sections'
++ AC_SUBST(SECTION_FLAGS)
++ GLIBCXX_CHECK_LINKER_FEATURES
++ GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
++ GLIBCXX_CHECK_WCHAR_T_SUPPORT
++
++ # For LFS.
++ AC_DEFINE(HAVE_INT64_T)
++ case "$target" in
++ *-uclinux*)
++ # Don't enable LFS with uClinux
++ ;;
++ *)
++ AC_DEFINE(_GLIBCXX_USE_LFS)
++ esac
++
++ # For showmanyc_helper().
++ AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
++ GLIBCXX_CHECK_POLL
++ GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
++
++ # For xsputn_2().
++ AC_CHECK_HEADERS(sys/uio.h)
++ GLIBCXX_CHECK_WRITEV
++
++# AC_DEFINE(HAVE_ACOSF)
++# AC_DEFINE(HAVE_ASINF)
++# AC_DEFINE(HAVE_ATANF)
++# AC_DEFINE(HAVE_ATAN2F)
++ AC_DEFINE(HAVE_CEILF)
++ AC_DEFINE(HAVE_COPYSIGN)
++# AC_DEFINE(HAVE_COPYSIGNF)
++# AC_DEFINE(HAVE_COSF)
++# AC_DEFINE(HAVE_COSHF)
++# AC_DEFINE(HAVE_EXPF)
++# AC_DEFINE(HAVE_FABSF)
++ AC_DEFINE(HAVE_FINITE)
++ AC_DEFINE(HAVE_FINITEF)
++ AC_DEFINE(HAVE_FLOORF)
++# AC_DEFINE(HAVE_FMODF)
++# AC_DEFINE(HAVE_FREXPF)
++ AC_DEFINE(HAVE_HYPOT)
++# AC_DEFINE(HAVE_HYPOTF)
++ AC_DEFINE(HAVE_ISINF)
++ AC_DEFINE(HAVE_ISINFF)
++ AC_DEFINE(HAVE_ISNAN)
++ AC_DEFINE(HAVE_ISNANF)
++# AC_DEFINE(HAVE_LOGF)
++# AC_DEFINE(HAVE_LOG10F)
++# AC_DEFINE(HAVE_MODFF)
++# AC_DEFINE(HAVE_SINF)
++# AC_DEFINE(HAVE_SINHF)
++# AC_DEFINE(HAVE_SINCOS)
++# AC_DEFINE(HAVE_SINCOSF)
++ AC_DEFINE(HAVE_SQRTF)
++# AC_DEFINE(HAVE_TANF)
++# AC_DEFINE(HAVE_TANHF)
++ if test x"long_double_math_on_this_cpu" = x"yes"; then
++ AC_MSG_ERROR([long_double_math_on_this_cpu is yes!])
++# AC_DEFINE(HAVE_ACOSL)
++# AC_DEFINE(HAVE_ASINL)
++# AC_DEFINE(HAVE_ATANL)
++# AC_DEFINE(HAVE_ATAN2L)
++# AC_DEFINE(HAVE_CEILL)
++# AC_DEFINE(HAVE_COPYSIGNL)
++# AC_DEFINE(HAVE_COSL)
++# AC_DEFINE(HAVE_COSHL)
++# AC_DEFINE(HAVE_EXPL)
++# AC_DEFINE(HAVE_FABSL)
++# AC_DEFINE(HAVE_FINITEL)
++# AC_DEFINE(HAVE_FLOORL)
++# AC_DEFINE(HAVE_FMODL)
++# AC_DEFINE(HAVE_FREXPL)
++# AC_DEFINE(HAVE_HYPOTL)
++# AC_DEFINE(HAVE_ISINFL)
++# AC_DEFINE(HAVE_ISNANL)
++# AC_DEFINE(HAVE_LOGL)
++# AC_DEFINE(HAVE_LOG10L)
++# AC_DEFINE(HAVE_MODFL)
++# AC_DEFINE(HAVE_POWL)
++# AC_DEFINE(HAVE_SINL)
++# AC_DEFINE(HAVE_SINHL)
++# AC_DEFINE(HAVE_SINCOSL)
++# AC_DEFINE(HAVE_SQRTL)
++# AC_DEFINE(HAVE_TANL)
++# AC_DEFINE(HAVE_TANHL)
++ fi
++ ;;
+ *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
+ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+ machine/endian.h machine/param.h sys/machine.h sys/types.h \
+@@ -157,7 +250,7 @@
+ AC_DEFINE(HAVE_INT64_T)
+ case "$target" in
+ *-uclinux*)
+- # Don't enable LFS with uClibc
++ # Don't enable LFS with uClinux
+ ;;
+ *)
+ AC_DEFINE(_GLIBCXX_USE_LFS)
+diff -urN gcc-4.1.0/libstdc++-v3/include/c_compatibility/wchar.h gcc-4.1.0-patched/libstdc++-v3/include/c_compatibility/wchar.h
+--- gcc-4.1.0/libstdc++-v3/include/c_compatibility/wchar.h 2003-12-08 21:51:45.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/include/c_compatibility/wchar.h 2005-04-27 22:20:28.089162832 -0500
+@@ -101,7 +101,9 @@
+ using std::wmemcpy;
+ using std::wmemmove;
+ using std::wmemset;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using std::wcsftime;
++#endif
+
+ #if _GLIBCXX_USE_C99
+ using std::wcstold;
+diff -urN gcc-4.1.0/libstdc++-v3/include/c_std/std_cwchar.h gcc-4.1.0-patched/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-4.1.0/libstdc++-v3/include/c_std/std_cwchar.h 2004-07-20 03:47:42.000000000 -0500
++++ gcc-4.1.0-patched/libstdc++-v3/include/c_std/std_cwchar.h 2005-04-27 22:20:28.090162666 -0500
+@@ -179,7 +179,9 @@
+ using ::wcscoll;
+ using ::wcscpy;
+ using ::wcscspn;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using ::wcsftime;
++#endif
+ using ::wcslen;
+ using ::wcsncat;
+ using ::wcsncmp;
diff --git a/toolchain/gcc/patches/4.0.3/100-uclibc-conf.patch b/toolchain/gcc/patches/4.0.3/100-uclibc-conf.patch
new file mode 100644
index 0000000000..3be7d0975d
--- /dev/null
+++ b/toolchain/gcc/patches/4.0.3/100-uclibc-conf.patch
@@ -0,0 +1,553 @@
+--- gcc-4.0.2/gcc/config/t-linux-uclibc
++++ gcc-4.0.2/gcc/config/t-linux-uclibc
+@@ -0,0 +1,5 @@
++# Remove glibc specific files added in t-linux
++SHLIB_MAPFILES := $(filter-out $(srcdir)/config/libgcc-glibc.ver, $(SHLIB_MAPFILES))
++
++# Use unwind-dw2-fde instead of unwind-dw2-fde-glibc
++LIB2ADDEH := $(subst unwind-dw2-fde-glibc.c,unwind-dw2-fde.c,$(LIB2ADDEH))
+--- gcc-4.0.2/gcc/config.gcc
++++ gcc-4.0.2/gcc/config.gcc
+@@ -1778,7 +1778,7 @@
+ ;;
+ sh-*-elf* | sh[12346l]*-*-elf* | sh*-*-kaos* | \
+ sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \
+- sh-*-linux* | sh[346lbe]*-*-linux* | \
++ sh*-*-linux* | sh[346lbe]*-*-linux* | \
+ sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
+ sh64-*-netbsd* | sh64l*-*-netbsd*)
+ tmake_file="${tmake_file} sh/t-sh sh/t-elf"
+@@ -2234,10 +2234,16 @@
+ *)
+ echo "*** Configuration ${target} not supported" 1>&2
+ exit 1
+ ;;
+ esac
++
++# Rather than hook into each target, just do it after all the linux
++# targets have been processed
++case ${target} in
++*-linux-uclibc*) tm_defines="${tm_defines} USE_UCLIBC" ; tmake_file="${tmake_file} t-linux-uclibc"
++esac
+
+ case ${target} in
+ i[34567]86-*-linux*aout* | i[34567]86-*-linux*libc1)
+ tmake_file="${tmake_file} i386/t-gmm_malloc"
+ ;;
+--- gcc-4.0.2/gcc/config/alpha/linux-elf.h
++++ gcc-4.0.2/gcc/config/alpha/linux-elf.h
+@@ -27,7 +27,11 @@
+ #define SUBTARGET_EXTRA_SPECS \
+ { "elf_dynamic_linker", ELF_DYNAMIC_LINKER },
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
+ #define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+
+ #define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \
+ %{O*:-O3} %{!O*:-O1} \
+--- gcc-4.0.2/gcc/config/arm/linux-elf.h
++++ gcc-4.0.2/gcc/config/arm/linux-elf.h
+@@ -81,14 +81,19 @@
+ #define ENDFILE_SPEC \
+ "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "%{h*} %{version:-v} \
+ %{b} %{Wl,*:%*} \
+ %{static:-Bstatic} \
+ %{shared:-shared} \
+ %{symbolic:-Bsymbolic} \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "} \
+ -X \
+ %{mbig-endian:-EB}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+--- gcc-4.0.2/gcc/config/cris/linux.h
++++ gcc-4.0.2/gcc/config/cris/linux.h
+@@ -79,6 +79,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++ -rpath-link include/asm/../..%s\
++ %{shared} %{static}\
++ %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++ %{!shared: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++ %{!r:%{O2|O3: --gc-sections}}"
++
++#else /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+
+@@ -93,6 +112,8 @@
+ %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+ %{!r:%{O2|O3: --gc-sections}}"
+
++#endif /* USE_UCLIBC */
++
+
+ /* Node: Run-time Target */
+
+--- gcc-4.0.2/gcc/config/i386/linux.h
++++ gcc-4.0.2/gcc/config/i386/linux.h
+@@ -107,6 +107,11 @@
+ #define LINK_EMULATION "elf_i386"
+ #define DYNAMIC_LINKER "/lib/ld-linux.so.2"
+
++#ifdef USE_UCLIBC
++#undef DYNAMIC_LINKER
++#define DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#endif
++
+ #undef SUBTARGET_EXTRA_SPECS
+ #define SUBTARGET_EXTRA_SPECS \
+ { "link_emulation", LINK_EMULATION },\
+--- gcc-4.0.2/gcc/config/i386/linux64.h
++++ gcc-4.0.2/gcc/config/i386/linux64.h
+@@ -54,14 +54,21 @@
+ When the -shared link option is used a final link is not being
+ done. */
+
++#ifdef USE_UCLIBC
++#define ELF32_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64-uClibc.so.0"
++#else
++#define ELF32_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#define ELF64_DYNAMIC_LINKER "/lib64/ld-linux-x86-64.so.2"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{m32:%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+- %{!m32:%{!dynamic-linker:-dynamic-linker /lib64/ld-linux-x86-64.so.2}}} \
++ %{m32:%{!dynamic-linker:-dynamic-linker " ELF32_DYNAMIC_LINKER "}} \
++ %{!m32:%{!dynamic-linker:-dynamic-linker " ELF64_DYNAMIC_LINKER "}}} \
+ %{static:-static}}"
+
+ #define MULTILIB_DEFAULTS { "m64" }
+--- gcc-4.0.2/gcc/config/ia64/linux.h
++++ gcc-4.0.2/gcc/config/ia64/linux.h
+@@ -37,13 +37,18 @@
+ /* Define this for shared library support because it isn't in the main
+ linux.h file. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "\
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux-ia64.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}"
+
+
+--- gcc-4.0.2/gcc/config/m68k/linux.h
++++ gcc-4.0.2/gcc/config/m68k/linux.h
+@@ -127,12 +127,17 @@
+
+ /* If ELF is the default format, we should not use /lib/elf. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "-m m68kelf %{shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker*:-dynamic-linker /lib/ld.so.1}} \
++ %{!dynamic-linker*:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static}}"
+
+ /* For compatibility with linux/a.out */
+--- gcc-4.0.2/gcc/config/mips/linux.h
++++ gcc-4.0.2/gcc/config/mips/linux.h
+@@ -108,14 +108,19 @@
+
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #define LINK_SPEC \
+ "%(endian_spec) \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}}"
+
+ #undef SUBTARGET_ASM_SPEC
+--- gcc-4.0.2/gcc/config/pa/pa-linux.h
++++ gcc-4.0.2/gcc/config/pa/pa-linux.h
+@@ -82,13 +82,18 @@
+ /* Define this for shared library support because it isn't in the main
+ linux.h file. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "\
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}"
+
+ /* glibc's profiling functions don't need gcc to allocate counters. */
+--- gcc-4.0.2/gcc/config/rs6000/linux.h
++++ gcc-4.0.2/gcc/config/rs6000/linux.h
+@@ -69,7 +69,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+
+ #undef LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+
+ #define LINK_GCC_C_SEQUENCE_SPEC \
+ "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+--- gcc-4.0.2/gcc/config/rs6000/sysv4.h
++++ gcc-4.0.2/gcc/config/rs6000/sysv4.h
+@@ -949,6 +949,7 @@
+ mcall-linux : %(link_os_linux) ; \
+ mcall-gnu : %(link_os_gnu) ; \
+ mcall-netbsd : %(link_os_netbsd) ; \
++ mcall-linux-uclibc : %(link_os_linux_uclibc); \
+ mcall-openbsd: %(link_os_openbsd) ; \
+ : %(link_os_default) }"
+
+@@ -1127,6 +1128,10 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+ #endif
+@@ -1293,6 +1298,7 @@
+ { "link_os_sim", LINK_OS_SIM_SPEC }, \
+ { "link_os_freebsd", LINK_OS_FREEBSD_SPEC }, \
+ { "link_os_linux", LINK_OS_LINUX_SPEC }, \
++ { "link_os_linux_uclibc", LINK_OS_LINUX_UCLIBC_SPEC }, \
+ { "link_os_gnu", LINK_OS_GNU_SPEC }, \
+ { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \
+ { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \
+--- gcc-4.0.2/gcc/config/s390/linux.h
++++ gcc-4.0.2/gcc/config/s390/linux.h
+@@ -77,6 +77,13 @@
+ #define MULTILIB_DEFAULTS { "m31" }
+ #endif
+
++#ifdef USE_UCLIBC
++#define ELF31_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64-uClibc.so.0"
++#else
++#define ELF31_DYNAMIC_LINKER "/lib/ld.so.1"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64.so.1"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC \
+ "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
+@@ -86,8 +93,8 @@
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker: \
+- %{m31:-dynamic-linker /lib/ld.so.1} \
+- %{m64:-dynamic-linker /lib/ld64.so.1}}}}"
++ %{m31:-dynamic-linker " ELF31_DYNAMIC_LINKER "} \
++ %{m64:-dynamic-linker " ELF64_DYNAMIC_LINKER "}}}}"
+
+
+ #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
+--- gcc-4.0.2/gcc/config/sh/linux.h
++++ gcc-4.0.2/gcc/config/sh/linux.h
+@@ -67,11 +67,16 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+ #define SUBTARGET_LINK_SPEC \
+ "%{shared:-shared} \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}"
+
+ #undef LIB_SPEC
+--- gcc-4.0.2/gcc/config/sparc/linux.h
++++ gcc-4.0.2/gcc/config/sparc/linux.h
+@@ -130,14 +130,19 @@
+
+ /* If ELF is the default format, we should not use /lib/elf. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
+ %{!mno-relax:%{!r:-relax}} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}}"
+
+ /* The sun bundled assembler doesn't accept -Yd, (and neither does gas).
+--- gcc-4.0.2/gcc/config/sparc/linux64.h
++++ gcc-4.0.2/gcc/config/sparc/linux64.h
+@@ -167,12 +166,17 @@
+ { "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \
+ { "link_arch", LINK_ARCH_SPEC },
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+ #define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}} \
+ "
+
+--- gcc-4.0.2/libtool.m4
++++ gcc-4.0.2/libtool.m4
+@@ -682,6 +682,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$']
+--- gcc-4.0.2/ltconfig
++++ gcc-4.0.2/ltconfig
+@@ -603,6 +603,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
+@@ -1274,6 +1275,23 @@
+ 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.
++ hardcode_into_libs=yes
++ # Assume using the uClibc dynamic linker.
++ dynamic_linker="uClibc ld.so"
++ ;;
++
+ netbsd*)
+ need_lib_prefix=no
+ need_version=no
+--- gcc-4.0.2/libffi/configure
++++ gcc-4.0.2/libffi/configure
+@@ -3457,6 +3457,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.0.2/libgfortran/configure
++++ gcc-4.0.2/libgfortran/configure
+@@ -3681,6 +3681,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.0.2/libjava/configure
++++ gcc-4.0.2/libjava/configure
+@@ -4351,6 +4351,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.0.2/libmudflap/configure
++++ gcc-4.0.2/libmudflap/configure
+@@ -5380,6 +5380,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.0.2/libobjc/configure
++++ gcc-4.0.2/libobjc/configure
+@@ -3283,6 +3283,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.0.2/boehm-gc/configure
++++ gcc-4.0.2/boehm-gc/configure
+@@ -4320,6 +4320,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.0.2/configure
++++ gcc-4.0.2/configure
+@@ -1141,7 +1141,7 @@
+ ;;
+ "")
+ case "${target}" in
+- *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
++ *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu | *-*-linux-uclibc*)
+ # Enable libmudflap by default in GNU and friends.
+ ;;
+ *-*-freebsd*)
+--- gcc-4.0.2/configure.in
++++ gcc-4.0.2/configure.in
+@@ -350,7 +350,7 @@
+ ;;
+ "")
+ case "${target}" in
+- *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
++ *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu | *-*-linux-uclibc*)
+ # Enable libmudflap by default in GNU and friends.
+ ;;
+ *-*-freebsd*)
+--- gcc-4.0.2/contrib/regression/objs-gcc.sh
++++ gcc-4.0.2/contrib/regression/objs-gcc.sh
+@@ -105,6 +105,10 @@
+ then
+ make all-gdb all-dejagnu all-ld || exit 1
+ make install-gdb install-dejagnu install-ld || exit 1
++elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-uclibc ]
++ then
++ make all-gdb all-dejagnu all-ld || exit 1
++ make install-gdb install-dejagnu install-ld || exit 1
+ elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then
+ make bootstrap || exit 1
+ make install || exit 1
+--- gcc-4.0.2/zlib/configure
++++ gcc-4.0.2/zlib/configure
+@@ -3426,6 +3426,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd* | knetbsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/toolchain/gcc/patches/4.0.3/200-uclibc-locale.patch b/toolchain/gcc/patches/4.0.3/200-uclibc-locale.patch
new file mode 100644
index 0000000000..ac4cf97209
--- /dev/null
+++ b/toolchain/gcc/patches/4.0.3/200-uclibc-locale.patch
@@ -0,0 +1,3237 @@
+diff -urN gcc-4.0.0-100/libstdc++-v3/acinclude.m4 gcc-4.0.0/libstdc++-v3/acinclude.m4
+--- gcc-4.0.0-100/libstdc++-v3/acinclude.m4 2005-04-30 13:06:53.000000000 -0500
++++ gcc-4.0.0/libstdc++-v3/acinclude.m4 2005-04-28 20:19:01.000000000 -0500
+@@ -1104,7 +1104,7 @@
+ AC_MSG_CHECKING([for C locale to use])
+ GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+ [use MODEL for target locale package],
+- [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++ [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
+
+ # If they didn't use this option switch, or if they specified --enable
+ # with no specific model, we'll have to look for one. If they
+@@ -1120,6 +1120,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case ${target_os} in
++ *-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+ AC_EGREP_CPP([_GLIBCXX_ok], [
+ #include <features.h>
+@@ -1263,6 +1266,40 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ AC_MSG_RESULT(uclibc)
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++ AC_SUBST(glibcxx_MOFILES)
++ AC_SUBST(glibcxx_POFILES)
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2005-04-28 01:13:15.000000000 -0500
+@@ -0,0 +1,59 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c_locale.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c_locale.cc 2005-04-28 01:13:15.000000000 -0500
+@@ -0,0 +1,160 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno> // For errno
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L) strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B))
++#define __strtof_l(S, E, L) strtof((S), (E))
++#define __strtod_l(S, E, L) strtod((S), (E))
++#define __strtold_l(S, E, L) strtold((S), (E))
++#warning should dummy __newlocale check for C|POSIX ?
++#define __newlocale(a, b, c) NULL
++#define __freelocale(a) ((void)0)
++#define __duplocale(a) __c_locale()
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ float __f = __strtof_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __f;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ double __d = __strtod_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __d;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ long double __ld = __strtold_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __ld;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ void
++ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
++ __c_locale __old)
++ {
++ __cloc = __newlocale(1 << LC_ALL, __s, __old);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ if (!__cloc)
++ {
++ // This named locale is not supported by the underlying OS.
++ __throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++ "name not valid"));
++ }
++#endif
++ }
++
++ void
++ locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++ {
++ if (_S_get_c_locale() != __cloc)
++ __freelocale(__cloc);
++ }
++
++ __c_locale
++ locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++ { return __duplocale(__cloc); }
++} // namespace std
++
++namespace __gnu_cxx
++{
++ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++ {
++ "LC_CTYPE",
++ "LC_NUMERIC",
++ "LC_TIME",
++ "LC_COLLATE",
++ "LC_MONETARY",
++ "LC_MESSAGES",
++#if _GLIBCXX_NUM_CATEGORIES != 0
++ "LC_PAPER",
++ "LC_NAME",
++ "LC_ADDRESS",
++ "LC_TELEPHONE",
++ "LC_MEASUREMENT",
++ "LC_IDENTIFICATION"
++#endif
++ };
++}
++
++namespace std
++{
++ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++} // namespace std
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/c_locale.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/c_locale.h 2005-04-28 01:13:15.000000000 -0500
+@@ -0,0 +1,115 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _C_LOCALE_H
++#define _C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <cstring> // get std::strlen
++#include <cstdio> // get std::snprintf or std::sprintf
++#include <clocale>
++#include <langinfo.h> // For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h> // For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> // For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCXX_C_LOCALE_GNU for
++#endif
++#define _GLIBCXX_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCXX_NUM_CATEGORIES 6
++#define _GLIBCXX_NUM_CATEGORIES 0
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++ extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++ typedef __locale_t __c_locale;
++#else
++ typedef int* __c_locale;
++#endif
++
++ // Convert numeric value of type _Tv to string and return length of
++ // string. If snprintf is available use it, otherwise fall back to
++ // the unsafe sprintf which, in general, can be dangerous and should
++ // be avoided.
++ template<typename _Tv>
++ int
++ __convert_from_v(char* __out, const int __size, const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ _Tv __v, const __c_locale& __cloc, int __prec)
++ {
++ __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++ _Tv __v, const __c_locale&, int __prec)
++ {
++# ifdef __UCLIBC_HAS_LOCALE__
++ char* __old = std::setlocale(LC_ALL, NULL);
++ char* __sav = new char[std::strlen(__old) + 1];
++ std::strcpy(__sav, __old);
++ std::setlocale(LC_ALL, "C");
++# endif
++#endif
++
++ const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++ std::setlocale(LC_ALL, __sav);
++ delete [] __sav;
++#endif
++ return __ret;
++ }
++}
++
++#endif
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 2005-04-28 01:13:15.000000000 -0500
+@@ -0,0 +1,306 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++ // Specializations.
++#ifdef _GLIBCXX_USE_WCHAR_T
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_out(state_type& __state, const intern_type* __from,
++ const intern_type* __from_end, const intern_type*& __from_next,
++ extern_type* __to, extern_type* __to_end,
++ extern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // wcsnrtombs is *very* fast but stops if encounters NUL characters:
++ // in case we fall back to wcrtomb and then continue, in a loop.
++ // NB: wcsnrtombs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
++ __from_end - __from_next);
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ const size_t __conv = wcsnrtombs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // wcrtomb.
++ for (; __from < __from_next; ++__from)
++ __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ extern_type __buf[MB_LEN_MAX];
++ __tmp_state = __state;
++ const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
++ if (__conv > static_cast<size_t>(__to_end - __to_next))
++ __ret = partial;
++ else
++ {
++ memcpy(__to_next, __buf, __conv);
++ __state = __tmp_state;
++ __to_next += __conv;
++ ++__from_next;
++ }
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_in(state_type& __state, const extern_type* __from,
++ const extern_type* __from_end, const extern_type*& __from_next,
++ intern_type* __to, intern_type* __to_end,
++ intern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we store a L'\0' and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
++ __from_end
++ - __from_next));
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ size_t __conv = mbsnrtowcs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (;; ++__to_next, __from += __conv)
++ {
++ __conv = mbrtowc(__to_next, __from, __from_end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __from_next = __from;
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ // It is unclear what to return in this case (see DR 382).
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ if (__to_next < __to_end)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from_next;
++ *__to_next++ = L'\0';
++ }
++ else
++ __ret = partial;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_encoding() const throw()
++ {
++ // XXX This implementation assumes that the encoding is
++ // stateless and is either single-byte or variable-width.
++ int __ret = 0;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ if (MB_CUR_MAX == 1)
++ __ret = 1;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_max_length() const throw()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ // XXX Probably wrong for stateful encodings.
++ int __ret = MB_CUR_MAX;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_length(state_type& __state, const extern_type* __from,
++ const extern_type* __end, size_t __max) const
++ {
++ int __ret = 0;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we advance past it and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++
++ // A dummy internal buffer is needed in order for mbsnrtocws to consider
++ // its fourth parameter (it wouldn't with NULL as first parameter).
++ wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
++ * __max));
++ while (__from < __end && __max)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
++ __end
++ - __from));
++ if (!__from_chunk_end)
++ __from_chunk_end = __end;
++
++ const extern_type* __tmp_from = __from;
++ size_t __conv = mbsnrtowcs(__to, &__from,
++ __from_chunk_end - __from,
++ __max, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (__from = __tmp_from;; __from += __conv)
++ {
++ __conv = mbrtowc(NULL, __from, __end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __state = __tmp_state;
++ __ret += __from - __tmp_from;
++ break;
++ }
++ if (!__from)
++ __from = __from_chunk_end;
++
++ __ret += __from - __tmp_from;
++ __max -= __conv;
++
++ if (__from < __end && __max)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from;
++ ++__ret;
++ --__max;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++#endif
++}
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/collate_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/collate_members.cc 2005-04-28 01:13:15.000000000 -0500
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L) strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++ // These are basically extensions to char_traits, and perhaps should
++ // be put there instead of here.
++ template<>
++ int
++ collate<char>::_M_compare(const char* __one, const char* __two) const
++ {
++ int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<char>::_M_transform(char* __to, const char* __from,
++ size_t __n) const
++ { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ int
++ collate<wchar_t>::_M_compare(const wchar_t* __one,
++ const wchar_t* __two) const
++ {
++ int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++ size_t __n) const
++ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/ctype_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2005-04-28 01:13:15.000000000 -0500
+@@ -0,0 +1,300 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L) wctype((S))
++#define __towupper_l(C, L) towupper((C))
++#define __towlower_l(C, L) towlower((C))
++#define __iswctype_l(C, M, L) iswctype((C), (M))
++#endif
++
++namespace std
++{
++ // NB: The other ctype<char> specializations are in src/locale.cc and
++ // various /config/os/* files.
++ template<>
++ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++ : ctype<char>(0, false, __refs)
++ {
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
++ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
++ this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
++ this->_M_table = this->_M_c_locale_ctype->__ctype_b;
++#endif
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ ctype<wchar_t>::__wmask_type
++ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++ {
++ __wmask_type __ret;
++ switch (__m)
++ {
++ case space:
++ __ret = __wctype_l("space", _M_c_locale_ctype);
++ break;
++ case print:
++ __ret = __wctype_l("print", _M_c_locale_ctype);
++ break;
++ case cntrl:
++ __ret = __wctype_l("cntrl", _M_c_locale_ctype);
++ break;
++ case upper:
++ __ret = __wctype_l("upper", _M_c_locale_ctype);
++ break;
++ case lower:
++ __ret = __wctype_l("lower", _M_c_locale_ctype);
++ break;
++ case alpha:
++ __ret = __wctype_l("alpha", _M_c_locale_ctype);
++ break;
++ case digit:
++ __ret = __wctype_l("digit", _M_c_locale_ctype);
++ break;
++ case punct:
++ __ret = __wctype_l("punct", _M_c_locale_ctype);
++ break;
++ case xdigit:
++ __ret = __wctype_l("xdigit", _M_c_locale_ctype);
++ break;
++ case alnum:
++ __ret = __wctype_l("alnum", _M_c_locale_ctype);
++ break;
++ case graph:
++ __ret = __wctype_l("graph", _M_c_locale_ctype);
++ break;
++ default:
++ __ret = __wmask_type();
++ }
++ return __ret;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_toupper(wchar_t __c) const
++ { return __towupper_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_tolower(wchar_t __c) const
++ { return __towlower_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ bool
++ ctype<wchar_t>::
++ do_is(mask __m, wchar_t __c) const
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ bool __ret = false;
++ const size_t __bitmasksize = 11;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__m & _M_bit[__bitcur]
++ && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
++ {
++ __ret = true;
++ break;
++ }
++ return __ret;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++ {
++ for (; __lo < __hi; ++__vec, ++__lo)
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ const size_t __bitmasksize = 11;
++ mask __m = 0;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
++ __m |= _M_bit[__bitcur];
++ *__vec = __m;
++ }
++ return __hi;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi && !this->do_is(__m, *__lo))
++ ++__lo;
++ return __lo;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++ {
++ while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++ ++__lo;
++ return __lo;
++ }
++
++ wchar_t
++ ctype<wchar_t>::
++ do_widen(char __c) const
++ { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<wchar_t>::
++ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++ {
++ while (__lo < __hi)
++ {
++ *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++ ++__lo;
++ ++__dest;
++ }
++ return __hi;
++ }
++
++ char
++ ctype<wchar_t>::
++ do_narrow(wchar_t __wc, char __dfault) const
++ {
++ if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++ return _M_narrow[__wc];
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ const int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
++ char* __dest) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ if (_M_narrow_ok)
++ while (__lo < __hi)
++ {
++ if (*__lo >= 0 && *__lo < 128)
++ *__dest = _M_narrow[*__lo];
++ else
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++ ++__lo;
++ ++__dest;
++ }
++ else
++ while (__lo < __hi)
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ ++__lo;
++ ++__dest;
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __hi;
++ }
++
++ void
++ ctype<wchar_t>::_M_initialize_ctype()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ wint_t __i;
++ for (__i = 0; __i < 128; ++__i)
++ {
++ const int __c = wctob(__i);
++ if (__c == EOF)
++ break;
++ else
++ _M_narrow[__i] = static_cast<char>(__c);
++ }
++ if (__i == 128)
++ _M_narrow_ok = true;
++ else
++ _M_narrow_ok = false;
++ for (size_t __j = 0;
++ __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
++ _M_widen[__j] = btowc(__j);
++
++ for (size_t __k = 0; __k <= 11; ++__k)
++ {
++ _M_bit[__k] = static_cast<mask>(_ISbit(__k));
++ _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ }
++#endif // _GLIBCXX_USE_WCHAR_T
++}
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/messages_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/messages_members.cc 2005-04-28 01:13:15.000000000 -0500
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++ const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++ // Specializations.
++ template<>
++ string
++ messages<char>::do_get(catalog, int, int, const string& __dfault) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++ __uselocale(__old);
++ return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ const char* __msg = gettext(__dfault.c_str());
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return string(__msg);
++#else
++ const char* __msg = gettext(__dfault.c_str());
++ return string(__msg);
++#endif
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ wstring
++ messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++ {
++# ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ __uselocale(__old);
++ return _M_convert_from_char(__msg);
++# elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return _M_convert_from_char(__msg);
++# else
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ return _M_convert_from_char(__msg);
++# endif
++ }
++#endif
++}
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-4.0.0/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/messages_members.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/messages_members.h 2005-04-28 01:13:15.000000000 -0500
+@@ -0,0 +1,118 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++ const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D) ((void)0)
++#define __bindtextdomain(D,P) ((void)0)
++#endif
++
++ // Non-virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::messages(size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
++ _M_name_messages(_S_get_c_name())
++ { }
++
++ template<typename _CharT>
++ messages<_CharT>::messages(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
++ _M_name_messages(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_messages = __tmp;
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
++ const char* __dir) const
++ {
++ __bindtextdomain(__s.c_str(), __dir);
++ return this->do_open(__s, __loc);
++ }
++
++ // Virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::~messages()
++ {
++ if (_M_name_messages != _S_get_c_name())
++ delete [] _M_name_messages;
++ _S_destroy_c_locale(_M_c_locale_messages);
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::do_open(const basic_string<char>& __s,
++ const locale&) const
++ {
++ // No error checking is done, assume the catalog exists and can
++ // be used.
++ __textdomain(__s.c_str());
++ return 0;
++ }
++
++ template<typename _CharT>
++ void
++ messages<_CharT>::do_close(catalog) const
++ { }
++
++ // messages_byname
++ template<typename _CharT>
++ messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++ : messages<_CharT>(__refs)
++ {
++ if (this->_M_name_messages != locale::facet::_S_get_c_name())
++ delete [] this->_M_name_messages;
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ this->_M_name_messages = __tmp;
++
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_messages);
++ this->_S_create_c_locale(this->_M_c_locale_messages, __s);
++ }
++ }
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/monetary_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2005-04-28 01:23:02.000000000 -0500
+@@ -0,0 +1,692 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ // Construct and return valid pattern consisting of some combination of:
++ // space none symbol sign value
++ money_base::pattern
++ money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++ {
++ pattern __ret;
++
++ // This insanely complicated routine attempts to construct a valid
++ // pattern for use with monyepunct. A couple of invariants:
++
++ // if (__precedes) symbol -> value
++ // else value -> symbol
++
++ // if (__space) space
++ // else none
++
++ // none == never first
++ // space never first or last
++
++ // Any elegant implementations of this are welcome.
++ switch (__posn)
++ {
++ case 0:
++ case 1:
++ // 1 The sign precedes the value and symbol.
++ __ret.field[0] = sign;
++ if (__space)
++ {
++ // Pattern starts with sign.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[3] = symbol;
++ }
++ __ret.field[2] = space;
++ }
++ else
++ {
++ // Pattern starts with sign and ends with none.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[3] = none;
++ }
++ break;
++ case 2:
++ // 2 The sign follows the value and symbol.
++ if (__space)
++ {
++ // Pattern either ends with sign.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[1] = space;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ // Pattern ends with sign then none.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[1] = symbol;
++ }
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ break;
++ case 3:
++ // 3 The sign immediately precedes the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = sign;
++ __ret.field[1] = symbol;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = sign;
++ __ret.field[3] = symbol;
++ }
++ else
++ {
++ __ret.field[1] = sign;
++ __ret.field[2] = symbol;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ case 4:
++ // 4 The sign immediately follows the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = sign;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = symbol;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ default:
++ __ret = pattern();
++ }
++ return __ret;
++ }
++
++ template<>
++ void
++ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == true
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ void
++ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == false
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ moneypunct<char, true>::~moneypunct()
++ { delete _M_data; }
++
++ template<>
++ moneypunct<char, false>::~moneypunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] =
++ static_cast<wchar_t>(money_base::_S_atoms[__i]);
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union { char *__s; wchar_t __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = __u.__w;
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = __u.__w;
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ void
++ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] =
++ static_cast<wchar_t>(money_base::_S_atoms[__i]);
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union { char *__s; wchar_t __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = __u.__w;
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = __u.__w;
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len;
++ __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ moneypunct<wchar_t, true>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++
++ template<>
++ moneypunct<wchar_t, false>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++#endif
++}
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/numeric_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2005-04-28 01:20:20.000000000 -0500
+@@ -0,0 +1,173 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP,
++ __cloc));
++
++ // Check for NULL, which implies no grouping.
++ if (_M_data->_M_thousands_sep == '\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = "true";
++ _M_data->_M_truename_size = 4;
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = "false";
++ _M_data->_M_falsename_size = 5;
++ }
++
++ template<>
++ numpunct<char>::~numpunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<wchar_t>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++
++ // Use ctype::widen code without the facet...
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ _M_data->_M_atoms_out[__i] =
++ static_cast<wchar_t>(__num_base::_S_atoms_out[__i]);
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ _M_data->_M_atoms_in[__j] =
++ static_cast<wchar_t>(__num_base::_S_atoms_in[__j]);
++ }
++ else
++ {
++ // Named locale.
++ // NB: In the GNU model wchar_t is always 32 bit wide.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union { char *__s; wchar_t __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = __u.__w;
++
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = __u.__w;
++#endif
++
++ if (_M_data->_M_thousands_sep == L'\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = L"true";
++ _M_data->_M_truename_size = 4;
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = L"false";
++ _M_data->_M_falsename_size = 5;
++ }
++
++ template<>
++ numpunct<wchar_t>::~numpunct()
++ { delete _M_data; }
++ #endif
++}
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-4.0.0/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/time_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/time_members.cc 2005-04-28 01:13:15.000000000 -0500
+@@ -0,0 +1,406 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __timepunct<char>::
++ _M_put(char* __s, size_t __maxlen, const char* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = strftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = '\0';
++ }
++
++ template<>
++ void
++ __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = "%m/%d/%y";
++ _M_data->_M_date_era_format = "%m/%d/%y";
++ _M_data->_M_time_format = "%H:%M:%S";
++ _M_data->_M_time_era_format = "%H:%M:%S";
++ _M_data->_M_date_time_format = "";
++ _M_data->_M_date_time_era_format = "";
++ _M_data->_M_am = "AM";
++ _M_data->_M_pm = "PM";
++ _M_data->_M_am_pm_format = "";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = "Sunday";
++ _M_data->_M_day2 = "Monday";
++ _M_data->_M_day3 = "Tuesday";
++ _M_data->_M_day4 = "Wednesday";
++ _M_data->_M_day5 = "Thursday";
++ _M_data->_M_day6 = "Friday";
++ _M_data->_M_day7 = "Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = "Sun";
++ _M_data->_M_aday2 = "Mon";
++ _M_data->_M_aday3 = "Tue";
++ _M_data->_M_aday4 = "Wed";
++ _M_data->_M_aday5 = "Thu";
++ _M_data->_M_aday6 = "Fri";
++ _M_data->_M_aday7 = "Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = "January";
++ _M_data->_M_month02 = "February";
++ _M_data->_M_month03 = "March";
++ _M_data->_M_month04 = "April";
++ _M_data->_M_month05 = "May";
++ _M_data->_M_month06 = "June";
++ _M_data->_M_month07 = "July";
++ _M_data->_M_month08 = "August";
++ _M_data->_M_month09 = "September";
++ _M_data->_M_month10 = "October";
++ _M_data->_M_month11 = "November";
++ _M_data->_M_month12 = "December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = "Jan";
++ _M_data->_M_amonth02 = "Feb";
++ _M_data->_M_amonth03 = "Mar";
++ _M_data->_M_amonth04 = "Apr";
++ _M_data->_M_amonth05 = "May";
++ _M_data->_M_amonth06 = "Jun";
++ _M_data->_M_amonth07 = "Jul";
++ _M_data->_M_amonth08 = "Aug";
++ _M_data->_M_amonth09 = "Sep";
++ _M_data->_M_amonth10 = "Oct";
++ _M_data->_M_amonth11 = "Nov";
++ _M_data->_M_amonth12 = "Dec";
++ }
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++ _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++ _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++ _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++ _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++ _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT,
++ __cloc);
++ _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
++ _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
++ _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++ _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++ _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++ _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++ _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++ _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++ _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
++ _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
++ _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
++ _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
++ _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
++ _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
++ _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
++ _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
++ _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
++ _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
++ _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
++ _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
++ _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
++ _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
++ _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
++ _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
++ _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
++ _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
++ _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
++ _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
++ _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
++ _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
++ _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
++ _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
++ _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
++ _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
++ _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
++ _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
++ _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ __timepunct<wchar_t>::
++ _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++ const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = L'\0';
++ }
++
++ template<>
++ void
++ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<wchar_t>;
++
++#warning wide time stuff
++// if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = L"%m/%d/%y";
++ _M_data->_M_date_era_format = L"%m/%d/%y";
++ _M_data->_M_time_format = L"%H:%M:%S";
++ _M_data->_M_time_era_format = L"%H:%M:%S";
++ _M_data->_M_date_time_format = L"";
++ _M_data->_M_date_time_era_format = L"";
++ _M_data->_M_am = L"AM";
++ _M_data->_M_pm = L"PM";
++ _M_data->_M_am_pm_format = L"";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = L"Sunday";
++ _M_data->_M_day2 = L"Monday";
++ _M_data->_M_day3 = L"Tuesday";
++ _M_data->_M_day4 = L"Wednesday";
++ _M_data->_M_day5 = L"Thursday";
++ _M_data->_M_day6 = L"Friday";
++ _M_data->_M_day7 = L"Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = L"Sun";
++ _M_data->_M_aday2 = L"Mon";
++ _M_data->_M_aday3 = L"Tue";
++ _M_data->_M_aday4 = L"Wed";
++ _M_data->_M_aday5 = L"Thu";
++ _M_data->_M_aday6 = L"Fri";
++ _M_data->_M_aday7 = L"Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = L"January";
++ _M_data->_M_month02 = L"February";
++ _M_data->_M_month03 = L"March";
++ _M_data->_M_month04 = L"April";
++ _M_data->_M_month05 = L"May";
++ _M_data->_M_month06 = L"June";
++ _M_data->_M_month07 = L"July";
++ _M_data->_M_month08 = L"August";
++ _M_data->_M_month09 = L"September";
++ _M_data->_M_month10 = L"October";
++ _M_data->_M_month11 = L"November";
++ _M_data->_M_month12 = L"December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = L"Jan";
++ _M_data->_M_amonth02 = L"Feb";
++ _M_data->_M_amonth03 = L"Mar";
++ _M_data->_M_amonth04 = L"Apr";
++ _M_data->_M_amonth05 = L"May";
++ _M_data->_M_amonth06 = L"Jun";
++ _M_data->_M_amonth07 = L"Jul";
++ _M_data->_M_amonth08 = L"Aug";
++ _M_data->_M_amonth09 = L"Sep";
++ _M_data->_M_amonth10 = L"Oct";
++ _M_data->_M_amonth11 = L"Nov";
++ _M_data->_M_amonth12 = L"Dec";
++ }
++#if 0
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ union { char *__s; wchar_t *__w; } __u;
++
++ __u.__s = __nl_langinfo_l(_NL_WD_FMT, __cloc);
++ _M_data->_M_date_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WERA_D_FMT, __cloc);
++ _M_data->_M_date_era_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WT_FMT, __cloc);
++ _M_data->_M_time_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WERA_T_FMT, __cloc);
++ _M_data->_M_time_era_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WD_T_FMT, __cloc);
++ _M_data->_M_date_time_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc);
++ _M_data->_M_date_time_era_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WAM_STR, __cloc);
++ _M_data->_M_am = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WPM_STR, __cloc);
++ _M_data->_M_pm = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc);
++ _M_data->_M_am_pm_format = __u.__w;
++
++ // Day names, starting with "C"'s Sunday.
++ __u.__s = __nl_langinfo_l(_NL_WDAY_1, __cloc);
++ _M_data->_M_day1 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_2, __cloc);
++ _M_data->_M_day2 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_3, __cloc);
++ _M_data->_M_day3 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_4, __cloc);
++ _M_data->_M_day4 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_5, __cloc);
++ _M_data->_M_day5 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_6, __cloc);
++ _M_data->_M_day6 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_7, __cloc);
++ _M_data->_M_day7 = __u.__w;
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_1, __cloc);
++ _M_data->_M_aday1 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_2, __cloc);
++ _M_data->_M_aday2 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_3, __cloc);
++ _M_data->_M_aday3 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_4, __cloc);
++ _M_data->_M_aday4 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_5, __cloc);
++ _M_data->_M_aday5 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_6, __cloc);
++ _M_data->_M_aday6 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_7, __cloc);
++ _M_data->_M_aday7 = __u.__w;
++
++ // Month names, starting with "C"'s January.
++ __u.__s = __nl_langinfo_l(_NL_WMON_1, __cloc);
++ _M_data->_M_month01 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_2, __cloc);
++ _M_data->_M_month02 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_3, __cloc);
++ _M_data->_M_month03 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_4, __cloc);
++ _M_data->_M_month04 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_5, __cloc);
++ _M_data->_M_month05 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_6, __cloc);
++ _M_data->_M_month06 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_7, __cloc);
++ _M_data->_M_month07 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_8, __cloc);
++ _M_data->_M_month08 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_9, __cloc);
++ _M_data->_M_month09 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_10, __cloc);
++ _M_data->_M_month10 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_11, __cloc);
++ _M_data->_M_month11 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_12, __cloc);
++ _M_data->_M_month12 = __u.__w;
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ __u.__s = __nl_langinfo_l(_NL_WABMON_1, __cloc);
++ _M_data->_M_amonth01 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_2, __cloc);
++ _M_data->_M_amonth02 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_3, __cloc);
++ _M_data->_M_amonth03 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_4, __cloc);
++ _M_data->_M_amonth04 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_5, __cloc);
++ _M_data->_M_amonth05 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_6, __cloc);
++ _M_data->_M_amonth06 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_7, __cloc);
++ _M_data->_M_amonth07 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_8, __cloc);
++ _M_data->_M_amonth08 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_9, __cloc);
++ _M_data->_M_amonth09 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_10, __cloc);
++ _M_data->_M_amonth10 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_11, __cloc);
++ _M_data->_M_amonth11 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_12, __cloc);
++ _M_data->_M_amonth12 = __u.__w;
++ }
++#endif // 0
++ }
++#endif
++}
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/time_members.h gcc-4.0.0/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-4.0.0-100/libstdc++-v3/config/locale/uclibc/time_members.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/locale/uclibc/time_members.h 2004-05-22 18:46:31.000000000 -0500
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
++ : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_timepunct = __tmp;
++ _M_initialize_timepunct(__cloc);
++ }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::~__timepunct()
++ {
++ if (_M_name_timepunct != _S_get_c_name())
++ delete [] _M_name_timepunct;
++ delete _M_data;
++ _S_destroy_c_locale(_M_c_locale_timepunct);
++ }
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_base.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_base.h 2005-04-28 01:10:27.000000000 -0500
+@@ -0,0 +1,64 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++/** @file ctype_base.h
++ * This is an internal header file, included by other library headers.
++ * You should not attempt to use it directly.
++ */
++
++// Information as gleaned from /usr/include/ctype.h
++
++ /// @brief Base class for ctype.
++ struct ctype_base
++ {
++ // Note: In uClibc, the following two types depend on configuration.
++
++ // Non-standard typedefs.
++ typedef const __ctype_touplow_t* __to_type;
++
++ // NB: Offsets into ctype<char>::_M_table force a particular size
++ // on the mask type. Because of this, we don't use an enum.
++ typedef __ctype_mask_t mask;
++ static const mask upper = _ISupper;
++ static const mask lower = _ISlower;
++ static const mask alpha = _ISalpha;
++ static const mask digit = _ISdigit;
++ static const mask xdigit = _ISxdigit;
++ static const mask space = _ISspace;
++ static const mask print = _ISprint;
++ static const mask graph = _ISalpha | _ISdigit | _ISpunct;
++ static const mask cntrl = _IScntrl;
++ static const mask punct = _ISpunct;
++ static const mask alnum = _ISalpha | _ISdigit;
++ };
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_inline.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_inline.h 2002-06-24 00:49:19.000000000 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++
++ bool
++ ctype<char>::
++ is(mask __m, char __c) const
++ { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++ const char*
++ ctype<char>::
++ is(const char* __low, const char* __high, mask* __vec) const
++ {
++ while (__low < __high)
++ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++ return __high;
++ }
++
++ const char*
++ ctype<char>::
++ scan_is(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++ ++__low;
++ return __low;
++ }
++
++ const char*
++ ctype<char>::
++ scan_not(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++ ++__low;
++ return __low;
++ }
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/ctype_noninline.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h 2005-04-28 01:10:27.000000000 -0500
+@@ -0,0 +1,92 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ const ctype_base::mask*
++ ctype<char>::classic_table() throw()
++ { return __C_ctype_b; }
++
++ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ char
++ ctype<char>::do_toupper(char __c) const
++ { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_toupper(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_toupper[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
++
++ char
++ ctype<char>::do_tolower(char __c) const
++ { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_tolower(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_tolower[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
+diff -urN gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/os_defines.h gcc-4.0.0/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-4.0.0-100/libstdc++-v3/config/os/uclibc/os_defines.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/config/os/uclibc/os_defines.h 2005-04-28 01:10:27.000000000 -0500
+@@ -0,0 +1,44 @@
++// Specific definitions for GNU/Linux -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here. This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
+diff -urN gcc-4.0.0-100/libstdc++-v3/configure gcc-4.0.0/libstdc++-v3/configure
+--- gcc-4.0.0-100/libstdc++-v3/configure 2005-04-30 13:06:53.683055232 -0500
++++ gcc-4.0.0/libstdc++-v3/configure 2005-04-30 12:24:24.000000000 -0500
+@@ -3998,6 +3998,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+@@ -5672,7 +5677,7 @@
+ enableval="$enable_clocale"
+
+ case "$enableval" in
+- generic|gnu|ieee_1003.1-2001|yes|no|auto) ;;
++ generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto) ;;
+ *) { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable clocale" >&5
+ echo "$as_me: error: Unknown argument to enable/disable clocale" >&2;}
+ { (exit 1); exit 1; }; } ;;
+@@ -5697,6 +5702,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case ${target_os} in
++ linux-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+@@ -5927,6 +5935,76 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ echo "$as_me:$LINENO: result: uclibc" >&5
++echo "${ECHO_T}uclibc" >&6
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ if test -n "$check_msgfmt"; then
++ ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_check_msgfmt="yes"
++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++done
++
++ test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt=$ac_cv_prog_check_msgfmt
++if test -n "$check_msgfmt"; then
++ echo "$as_me:$LINENO: result: $check_msgfmt" >&5
++echo "${ECHO_T}$check_msgfmt" >&6
++else
++ echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++
++
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-4.0.0-100/libstdc++-v3/configure.host gcc-4.0.0/libstdc++-v3/configure.host
+--- gcc-4.0.0-100/libstdc++-v3/configure.host 2005-04-30 13:06:53.688054472 -0500
++++ gcc-4.0.0/libstdc++-v3/configure.host 2005-04-28 20:20:32.000000000 -0500
+@@ -249,6 +249,12 @@
+ ;;
+ esac
+
++# Override for uClibc since linux-uclibc gets mishandled above.
++case "${host_os}" in
++ *-uclibc*)
++ os_include_dir="os/uclibc"
++ ;;
++esac
+
+ # Set any OS-dependent and CPU-dependent bits.
+ # THIS TABLE IS SORTED. KEEP IT THAT WAY.
+diff -urN gcc-4.0.0-100/libstdc++-v3/crossconfig.m4 gcc-4.0.0/libstdc++-v3/crossconfig.m4
+--- gcc-4.0.0-100/libstdc++-v3/crossconfig.m4 2005-04-30 13:06:53.689054320 -0500
++++ gcc-4.0.0/libstdc++-v3/crossconfig.m4 2005-04-28 20:27:15.000000000 -0500
+@@ -142,6 +142,98 @@
+ ;;
+ esac
+ ;;
++ *-uclibc*)
++# Temporary hack until we implement the float versions of the libm funcs
++ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++ machine/endian.h machine/param.h sys/machine.h sys/types.h \
++ fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
++ SECTION_FLAGS='-ffunction-sections -fdata-sections'
++ AC_SUBST(SECTION_FLAGS)
++ GLIBCXX_CHECK_LINKER_FEATURES
++ GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
++ GLIBCXX_CHECK_WCHAR_T_SUPPORT
++
++ # For LFS.
++ AC_DEFINE(HAVE_INT64_T)
++ case "$target" in
++ *-uclinux*)
++ # Don't enable LFS with uClinux
++ ;;
++ *)
++ AC_DEFINE(_GLIBCXX_USE_LFS)
++ esac
++
++ # For showmanyc_helper().
++ AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
++ GLIBCXX_CHECK_POLL
++ GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
++
++ # For xsputn_2().
++ AC_CHECK_HEADERS(sys/uio.h)
++ GLIBCXX_CHECK_WRITEV
++
++# AC_DEFINE(HAVE_ACOSF)
++# AC_DEFINE(HAVE_ASINF)
++# AC_DEFINE(HAVE_ATANF)
++# AC_DEFINE(HAVE_ATAN2F)
++ AC_DEFINE(HAVE_CEILF)
++ AC_DEFINE(HAVE_COPYSIGN)
++# AC_DEFINE(HAVE_COPYSIGNF)
++# AC_DEFINE(HAVE_COSF)
++# AC_DEFINE(HAVE_COSHF)
++# AC_DEFINE(HAVE_EXPF)
++# AC_DEFINE(HAVE_FABSF)
++ AC_DEFINE(HAVE_FINITE)
++ AC_DEFINE(HAVE_FINITEF)
++ AC_DEFINE(HAVE_FLOORF)
++# AC_DEFINE(HAVE_FMODF)
++# AC_DEFINE(HAVE_FREXPF)
++ AC_DEFINE(HAVE_HYPOT)
++# AC_DEFINE(HAVE_HYPOTF)
++ AC_DEFINE(HAVE_ISINF)
++ AC_DEFINE(HAVE_ISINFF)
++ AC_DEFINE(HAVE_ISNAN)
++ AC_DEFINE(HAVE_ISNANF)
++# AC_DEFINE(HAVE_LOGF)
++# AC_DEFINE(HAVE_LOG10F)
++# AC_DEFINE(HAVE_MODFF)
++# AC_DEFINE(HAVE_SINF)
++# AC_DEFINE(HAVE_SINHF)
++# AC_DEFINE(HAVE_SINCOS)
++# AC_DEFINE(HAVE_SINCOSF)
++ AC_DEFINE(HAVE_SQRTF)
++# AC_DEFINE(HAVE_TANF)
++# AC_DEFINE(HAVE_TANHF)
++ if test x"long_double_math_on_this_cpu" = x"yes"; then
++# AC_DEFINE(HAVE_ACOSL)
++# AC_DEFINE(HAVE_ASINL)
++# AC_DEFINE(HAVE_ATANL)
++# AC_DEFINE(HAVE_ATAN2L)
++# AC_DEFINE(HAVE_CEILL)
++# AC_DEFINE(HAVE_COPYSIGNL)
++# AC_DEFINE(HAVE_COSL)
++# AC_DEFINE(HAVE_COSHL)
++# AC_DEFINE(HAVE_EXPL)
++# AC_DEFINE(HAVE_FABSL)
++# AC_DEFINE(HAVE_FINITEL)
++# AC_DEFINE(HAVE_FLOORL)
++# AC_DEFINE(HAVE_FMODL)
++# AC_DEFINE(HAVE_FREXPL)
++# AC_DEFINE(HAVE_HYPOTL)
++# AC_DEFINE(HAVE_ISINFL)
++# AC_DEFINE(HAVE_ISNANL)
++# AC_DEFINE(HAVE_LOGL)
++# AC_DEFINE(HAVE_LOG10L)
++# AC_DEFINE(HAVE_MODFL)
++# AC_DEFINE(HAVE_POWL)
++# AC_DEFINE(HAVE_SINL)
++# AC_DEFINE(HAVE_SINHL)
++# AC_DEFINE(HAVE_SINCOSL)
++# AC_DEFINE(HAVE_SQRTL)
++# AC_DEFINE(HAVE_TANL)
++# AC_DEFINE(HAVE_TANHL)
++ fi
++ ;;
+ *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
+ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+ machine/endian.h machine/param.h sys/machine.h sys/types.h \
+@@ -156,7 +248,7 @@
+ AC_DEFINE(HAVE_INT64_T)
+ case "$target" in
+ *-uclinux*)
+- # Don't enable LFS with uClibc
++ # Don't enable LFS with uClinux
+ ;;
+ *)
+ AC_DEFINE(_GLIBCXX_USE_LFS)
+diff -urN gcc-4.0.0-100/libstdc++-v3/include/c_compatibility/wchar.h gcc-4.0.0/libstdc++-v3/include/c_compatibility/wchar.h
+--- gcc-4.0.0-100/libstdc++-v3/include/c_compatibility/wchar.h 2005-04-30 13:06:53.690054168 -0500
++++ gcc-4.0.0/libstdc++-v3/include/c_compatibility/wchar.h 2005-04-28 20:15:56.000000000 -0500
+@@ -101,7 +101,9 @@
+ using std::wmemcpy;
+ using std::wmemmove;
+ using std::wmemset;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using std::wcsftime;
++#endif
+
+ #if _GLIBCXX_USE_C99
+ using std::wcstold;
+diff -urN gcc-4.0.0-100/libstdc++-v3/include/c_std/std_cwchar.h gcc-4.0.0/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-4.0.0-100/libstdc++-v3/include/c_std/std_cwchar.h 2005-04-30 13:06:53.691054016 -0500
++++ gcc-4.0.0/libstdc++-v3/include/c_std/std_cwchar.h 2005-04-28 20:15:56.000000000 -0500
+@@ -179,7 +179,9 @@
+ using ::wcscoll;
+ using ::wcscpy;
+ using ::wcscspn;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using ::wcsftime;
++#endif
+ using ::wcslen;
+ using ::wcsncat;
+ using ::wcsncmp;
diff --git a/toolchain/gcc/patches/4.0.3/300-libstdc++-pic.patch b/toolchain/gcc/patches/4.0.3/300-libstdc++-pic.patch
new file mode 100644
index 0000000000..63aed34ea5
--- /dev/null
+++ b/toolchain/gcc/patches/4.0.3/300-libstdc++-pic.patch
@@ -0,0 +1,47 @@
+diff -urN gcc-4.0.0-200/libstdc++-v3/src/Makefile.am gcc-4.0.0/libstdc++-v3/src/Makefile.am
+--- gcc-4.0.0-200/libstdc++-v3/src/Makefile.am 2004-11-15 17:33:05.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/src/Makefile.am 2005-04-28 21:42:18.614344056 -0500
+@@ -214,6 +214,10 @@
+ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LDFLAGS) -o $@
+
+
++install-exec-local:
++ $(AR) cru libstdc++_pic.a *.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Added bits to build debug library.
+ if GLIBCXX_BUILD_DEBUG
+ all-local: build_debug
+diff -urN gcc-4.0.0-200/libstdc++-v3/src/Makefile.in gcc-4.0.0/libstdc++-v3/src/Makefile.in
+--- gcc-4.0.0-200/libstdc++-v3/src/Makefile.in 2005-02-01 00:56:27.000000000 -0600
++++ gcc-4.0.0/libstdc++-v3/src/Makefile.in 2005-04-28 21:44:20.868758560 -0500
+@@ -625,7 +625,7 @@
+
+ install-data-am: install-data-local
+
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+
+ install-info: install-info-am
+
+@@ -664,7 +664,7 @@
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-info-am \
+- uninstall-toolexeclibLTLIBRARIES
++ uninstall-toolexeclibLTLIBRARIES install-exec-local
+
+ @GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@libstdc++-symbol.ver: ${glibcxx_srcdir}/$(SYMVER_MAP)
+ @GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ cp ${glibcxx_srcdir}/$(SYMVER_MAP) ./libstdc++-symbol.ver
+@@ -743,6 +743,11 @@
+ install_debug:
+ (cd ${debugdir} && $(MAKE) \
+ toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
++
++install-exec-local:
++ $(AR) cru libstdc++_pic.a *.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff --git a/toolchain/gcc/patches/4.0.3/301-missing-execinfo_h.patch b/toolchain/gcc/patches/4.0.3/301-missing-execinfo_h.patch
new file mode 100644
index 0000000000..0e2092f3fb
--- /dev/null
+++ b/toolchain/gcc/patches/4.0.3/301-missing-execinfo_h.patch
@@ -0,0 +1,11 @@
+--- gcc-4.0.0/boehm-gc/include/gc.h-orig 2005-04-28 22:28:57.000000000 -0500
++++ gcc-4.0.0/boehm-gc/include/gc.h 2005-04-28 22:30:38.000000000 -0500
+@@ -500,7 +500,7 @@
+ #ifdef __linux__
+ # include <features.h>
+ # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \
+- && !defined(__ia64__)
++ && !defined(__ia64__) && !defined(__UCLIBC__)
+ # ifndef GC_HAVE_BUILTIN_BACKTRACE
+ # define GC_HAVE_BUILTIN_BACKTRACE
+ # endif
diff --git a/toolchain/gcc/patches/4.0.3/302-c99-snprintf.patch b/toolchain/gcc/patches/4.0.3/302-c99-snprintf.patch
new file mode 100644
index 0000000000..dfb22d681b
--- /dev/null
+++ b/toolchain/gcc/patches/4.0.3/302-c99-snprintf.patch
@@ -0,0 +1,11 @@
+--- gcc-4.0.0/libstdc++-v3/include/c_std/std_cstdio.h-orig 2005-04-29 00:08:41.000000000 -0500
++++ gcc-4.0.0/libstdc++-v3/include/c_std/std_cstdio.h 2005-04-29 00:08:45.000000000 -0500
+@@ -142,7 +142,7 @@
+ using ::vsprintf;
+ }
+
+-#if _GLIBCXX_USE_C99
++#if _GLIBCXX_USE_C99 || defined(__UCLIBC__)
+
+ #undef snprintf
+ #undef vfscanf
diff --git a/toolchain/gcc/patches/4.0.3/303-c99-complex-ugly-hack.patch b/toolchain/gcc/patches/4.0.3/303-c99-complex-ugly-hack.patch
new file mode 100644
index 0000000000..2ccc80d9bb
--- /dev/null
+++ b/toolchain/gcc/patches/4.0.3/303-c99-complex-ugly-hack.patch
@@ -0,0 +1,12 @@
+--- gcc-4.0.0/libstdc++-v3/configure-old 2005-04-30 22:04:48.061603912 -0500
++++ gcc-4.0.0/libstdc++-v3/configure 2005-04-30 22:06:13.678588152 -0500
+@@ -7194,6 +7194,9 @@
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ #include <complex.h>
++#ifdef __UCLIBC__
++#error ugly hack to make sure configure test fails here for cross until uClibc supports the complex funcs
++#endif
+ int
+ main ()
+ {
diff --git a/toolchain/gcc/patches/4.0.3/602-sdk-libstdc++-includes.patch b/toolchain/gcc/patches/4.0.3/602-sdk-libstdc++-includes.patch
new file mode 100644
index 0000000000..c7676ae6a2
--- /dev/null
+++ b/toolchain/gcc/patches/4.0.3/602-sdk-libstdc++-includes.patch
@@ -0,0 +1,22 @@
+diff -urN gcc-4.0.0-100/libstdc++-v3/fragment.am gcc-4.0.0/libstdc++-v3/fragment.am
+--- gcc-4.0.0-100/libstdc++-v3/fragment.am 2004-10-25 15:32:40.000000000 -0500
++++ gcc-4.0.0/libstdc++-v3/fragment.am 2005-04-28 21:48:43.000000000 -0500
+@@ -18,5 +18,5 @@
+ $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+
+ # -I/-D flags to pass when compiling.
+-AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include
+
+diff -urN gcc-4.0.0-100/libstdc++-v3/libmath/Makefile.am gcc-4.0.0/libstdc++-v3/libmath/Makefile.am
+--- gcc-4.0.0-100/libstdc++-v3/libmath/Makefile.am 2003-08-27 16:29:42.000000000 -0500
++++ gcc-4.0.0/libstdc++-v3/libmath/Makefile.am 2005-04-28 21:48:43.000000000 -0500
+@@ -32,7 +32,7 @@
+
+ libmath_la_SOURCES = stubs.c
+
+-AM_CPPFLAGS = $(CANADIAN_INCLUDES)
++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include
+
+ # Only compiling "C" sources in this directory.
+ LIBTOOL = @LIBTOOL@ --tag CC
diff --git a/toolchain/gcc/patches/4.0.3/800-arm-bigendian.patch b/toolchain/gcc/patches/4.0.3/800-arm-bigendian.patch
new file mode 100644
index 0000000000..307aea3ea3
--- /dev/null
+++ b/toolchain/gcc/patches/4.0.3/800-arm-bigendian.patch
@@ -0,0 +1,67 @@
+By Lennert Buytenhek <buytenh@wantstofly.org>
+Adds support for arm*b-linux* big-endian ARM targets
+
+See http://gcc.gnu.org/PR16350
+
+--- gcc-4.0.3/gcc/config/arm/linux-elf.h
++++ gcc-4.0.3/gcc/config/arm/linux-elf.h
+@@ -31,19 +31,33 @@
+ /* Do not assume anything about header files. */
+ #define NO_IMPLICIT_EXTERN_C
+
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT ARM_FLAG_BIG_END
++#define TARGET_ENDIAN_OPTION "mbig-endian"
++#define TARGET_LINKER_EMULATION "armelfb_linux"
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#define TARGET_ENDIAN_OPTION "mlittle-endian"
++#define TARGET_LINKER_EMULATION "armelf_linux"
++#endif
++
+ #undef TARGET_DEFAULT_FLOAT_ABI
+ #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD
+
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT (0)
++#define TARGET_DEFAULT (TARGET_ENDIAN_DEFAULT)
+
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
+
+ #undef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork" }
++ { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mno-thumb-interwork" }
+
+ /* The GNU C++ standard library requires that these macros be defined. */
+ #undef CPLUSPLUS_CPP_SPEC
+@@ -90,7 +104,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
+ -X \
+- %{mbig-endian:-EB}" \
++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+
+ #define TARGET_OS_CPP_BUILTINS() \
+--- gcc-4.0.3/gcc/config.gcc
++++ gcc-4.0.3/gcc/config.gcc
+@@ -672,6 +672,11 @@
+ ;;
+ arm*-*-linux*) # ARM GNU/Linux with ELF
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++ case $target in
++ arm*b-*)
++ tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++ ;;
++ esac
+ tmake_file="${tmake_file} arm/t-arm arm/t-linux"
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ gnu_ld=yes
diff --git a/toolchain/gcc/patches/4.1.0/100-uclibc-conf.patch b/toolchain/gcc/patches/4.1.0/100-uclibc-conf.patch
new file mode 100644
index 0000000000..49d576c7dd
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.0/100-uclibc-conf.patch
@@ -0,0 +1,544 @@
+--- gcc-4.1.0/gcc/config/t-linux-uclibc
++++ gcc-4.1.0/gcc/config/t-linux-uclibc
+@@ -0,0 +1,5 @@
++# Remove glibc specific files added in t-linux
++SHLIB_MAPFILES := $(filter-out $(srcdir)/config/libgcc-glibc.ver, $(SHLIB_MAPFILES))
++
++# Use unwind-dw2-fde instead of unwind-dw2-fde-glibc
++LIB2ADDEH := $(subst unwind-dw2-fde-glibc.c,unwind-dw2-fde.c,$(LIB2ADDEH))
+--- gcc-4.1.0/gcc/config.gcc
++++ gcc-4.1.0/gcc/config.gcc
+@@ -1887,7 +1887,7 @@ s390x-ibm-tpf*)
+ ;;
+ sh-*-elf* | sh[12346l]*-*-elf* | sh*-*-kaos* | \
+ sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \
+- sh-*-linux* | sh[346lbe]*-*-linux* | \
++ sh*-*-linux* | sh[346lbe]*-*-linux* | \
+ sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
+ sh64-*-netbsd* | sh64l*-*-netbsd*)
+ tmake_file="${tmake_file} sh/t-sh sh/t-elf"
+@@ -2341,6 +2341,12 @@ m32c-*-elf*)
+ ;;
+ esac
+
++# Rather than hook into each target, just do it after all the linux
++# targets have been processed
++case ${target} in
++*-linux-uclibc*) tm_defines="${tm_defines} USE_UCLIBC" ; tmake_file="${tmake_file} t-linux-uclibc"
++esac
++
+ case ${target} in
+ i[34567]86-*-linux*aout* | i[34567]86-*-linux*libc1)
+ tmake_file="${tmake_file} i386/t-gmm_malloc"
+--- gcc-4.1.0/boehm-gc/configure
++++ gcc-4.1.0/boehm-gc/configure
+@@ -4320,6 +4320,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.1.0/configure
++++ gcc-4.1.0/configure
+@@ -1133,7 +1133,7 @@ no)
+ ;;
+ "")
+ case "${target}" in
+- *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
++ *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu | *-*-linux-uclibc*)
+ # Enable libmudflap by default in GNU and friends.
+ ;;
+ *-*-freebsd*)
+--- gcc-4.1.0/configure.in
++++ gcc-4.1.0/configure.in
+@@ -341,7 +341,7 @@ no)
+ ;;
+ "")
+ case "${target}" in
+- *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
++ *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu | *-*-linux-uclibc*)
+ # Enable libmudflap by default in GNU and friends.
+ ;;
+ *-*-freebsd*)
+--- gcc-4.1.0/contrib/regression/objs-gcc.sh
++++ gcc-4.1.0/contrib/regression/objs-gcc.sh
+@@ -105,6 +105,10 @@ if [ $H_REAL_TARGET = $H_REAL_HOST -a $H
+ then
+ make all-gdb all-dejagnu all-ld || exit 1
+ make install-gdb install-dejagnu install-ld || exit 1
++elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-uclibc ]
++ then
++ make all-gdb all-dejagnu all-ld || exit 1
++ make install-gdb install-dejagnu install-ld || exit 1
+ elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then
+ make bootstrap || exit 1
+ make install || exit 1
+--- gcc-4.1.0/gcc/config/alpha/linux-elf.h
++++ gcc-4.1.0/gcc/config/alpha/linux-elf.h
+@@ -27,7 +27,11 @@ Boston, MA 02110-1301, USA. */
+ #define SUBTARGET_EXTRA_SPECS \
+ { "elf_dynamic_linker", ELF_DYNAMIC_LINKER },
+
++#if defined USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
+ #define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+
+ #define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \
+ %{O*:-O3} %{!O*:-O1} \
+--- gcc-4.1.0/gcc/config/arm/linux-elf.h
++++ gcc-4.1.0/gcc/config/arm/linux-elf.h
+@@ -51,7 +51,11 @@
+
+ #define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"
+
++#ifdef USE_UCLIBC
++#define LINUX_TARGET_INTERPRETER "/lib/ld-uClibc.so.0"
++#else
+ #define LINUX_TARGET_INTERPRETER "/lib/ld-linux.so.2"
++#endif
+
+ #define LINUX_TARGET_LINK_SPEC "%{h*} %{version:-v} \
+ %{b} \
+--- gcc-4.1.0/gcc/config/cris/linux.h
++++ gcc-4.1.0/gcc/config/cris/linux.h
+@@ -73,6 +73,25 @@ Boston, MA 02110-1301, USA. */
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++ -rpath-link include/asm/../..%s\
++ %{shared} %{static}\
++ %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++ %{!shared: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++ %{!r:%{O2|O3: --gc-sections}}"
++
++#else /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+
+@@ -87,6 +106,8 @@ Boston, MA 02110-1301, USA. */
+ %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+ %{!r:%{O2|O3: --gc-sections}}"
+
++#endif /* USE_UCLIBC */
++
+
+ /* Node: Run-time Target */
+
+--- gcc-4.1.0/gcc/config/i386/linux.h
++++ gcc-4.1.0/gcc/config/i386/linux.h
+@@ -107,6 +107,11 @@ Boston, MA 02110-1301, USA. */
+ #define LINK_EMULATION "elf_i386"
+ #define DYNAMIC_LINKER "/lib/ld-linux.so.2"
+
++#if defined USE_UCLIBC
++#undef DYNAMIC_LINKER
++#define DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#endif
++
+ #undef SUBTARGET_EXTRA_SPECS
+ #define SUBTARGET_EXTRA_SPECS \
+ { "link_emulation", LINK_EMULATION },\
+--- gcc-4.1.0/gcc/config/i386/linux64.h
++++ gcc-4.1.0/gcc/config/i386/linux64.h
+@@ -54,14 +54,21 @@ Boston, MA 02110-1301, USA. */
+ When the -shared link option is used a final link is not being
+ done. */
+
++#ifdef USE_UCLIBC
++#define ELF32_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64-uClibc.so.0"
++#else
++#define ELF32_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#define ELF64_DYNAMIC_LINKER "/lib64/ld-linux-x86-64.so.2"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{m32:%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+- %{!m32:%{!dynamic-linker:-dynamic-linker /lib64/ld-linux-x86-64.so.2}}} \
++ %{m32:%{!dynamic-linker:-dynamic-linker " ELF32_DYNAMIC_LINKER "}} \
++ %{!m32:%{!dynamic-linker:-dynamic-linker " ELF64_DYNAMIC_LINKER "}}} \
+ %{static:-static}}"
+
+ /* Similar to standard Linux, but adding -ffast-math support. */
+--- gcc-4.1.0/gcc/config/ia64/linux.h
++++ gcc-4.1.0/gcc/config/ia64/linux.h
+@@ -37,13 +37,18 @@ do { \
+ /* Define this for shared library support because it isn't in the main
+ linux.h file. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "\
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux-ia64.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}"
+
+
+--- gcc-4.1.0/gcc/config/m68k/linux.h
++++ gcc-4.1.0/gcc/config/m68k/linux.h
+@@ -123,12 +123,17 @@ Boston, MA 02110-1301, USA. */
+
+ /* If ELF is the default format, we should not use /lib/elf. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "-m m68kelf %{shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker*:-dynamic-linker /lib/ld.so.1}} \
++ %{!dynamic-linker*:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static}}"
+
+ /* For compatibility with linux/a.out */
+--- gcc-4.1.0/gcc/config/mips/linux.h
++++ gcc-4.1.0/gcc/config/mips/linux.h
+@@ -105,6 +105,11 @@ Boston, MA 02110-1301, USA. */
+
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #define LINK_SPEC \
+ "%(endian_spec) \
+ %{shared:-shared} \
+@@ -112,7 +117,7 @@ Boston, MA 02110-1301, USA. */
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}}"
+
+ #undef SUBTARGET_ASM_SPEC
+--- gcc-4.1.0/gcc/config/pa/pa-linux.h
++++ gcc-4.1.0/gcc/config/pa/pa-linux.h
+@@ -49,13 +49,18 @@ Boston, MA 02110-1301, USA. */
+ /* Define this for shared library support because it isn't in the main
+ linux.h file. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "\
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}"
+
+ /* glibc's profiling functions don't need gcc to allocate counters. */
+--- gcc-4.1.0/gcc/config/rs6000/linux.h
++++ gcc-4.1.0/gcc/config/rs6000/linux.h
+@@ -72,7 +72,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+
+ #undef LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+
+ #define LINK_GCC_C_SEQUENCE_SPEC \
+ "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+--- gcc-4.1.0/gcc/config/rs6000/sysv4.h
++++ gcc-4.1.0/gcc/config/rs6000/sysv4.h
+@@ -866,6 +866,7 @@ extern int fixuplabelno;
+ mcall-linux : %(link_os_linux) ; \
+ mcall-gnu : %(link_os_gnu) ; \
+ mcall-netbsd : %(link_os_netbsd) ; \
++ mcall-linux-uclibc : %(link_os_linux_uclibc); \
+ mcall-openbsd: %(link_os_openbsd) ; \
+ : %(link_os_default) }"
+
+@@ -1043,6 +1044,10 @@ extern int fixuplabelno;
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+ #endif
+@@ -1209,6 +1214,7 @@ ncrtn.o%s"
+ { "link_os_sim", LINK_OS_SIM_SPEC }, \
+ { "link_os_freebsd", LINK_OS_FREEBSD_SPEC }, \
+ { "link_os_linux", LINK_OS_LINUX_SPEC }, \
++ { "link_os_linux_uclibc", LINK_OS_LINUX_UCLIBC_SPEC }, \
+ { "link_os_gnu", LINK_OS_GNU_SPEC }, \
+ { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \
+ { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \
+--- gcc-4.1.0/gcc/config/s390/linux.h
++++ gcc-4.1.0/gcc/config/s390/linux.h
+@@ -77,6 +77,13 @@ Software Foundation, 51 Franklin Street,
+ #define MULTILIB_DEFAULTS { "m31" }
+ #endif
+
++#ifdef USE_UCLIBC
++#define ELF31_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64-uClibc.so.0"
++#else
++#define ELF31_DYNAMIC_LINKER "/lib/ld.so.1"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64.so.1"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC \
+ "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
+@@ -86,8 +93,8 @@ Software Foundation, 51 Franklin Street,
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker: \
+- %{m31:-dynamic-linker /lib/ld.so.1} \
+- %{m64:-dynamic-linker /lib/ld64.so.1}}}}"
++ %{m31:-dynamic-linker " ELF31_DYNAMIC_LINKER "} \
++ %{m64:-dynamic-linker " ELF64_DYNAMIC_LINKER "}}}}"
+
+
+ #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
+--- gcc-4.1.0/gcc/config/sh/linux.h
++++ gcc-4.1.0/gcc/config/sh/linux.h
+@@ -56,12 +56,21 @@ Boston, MA 02110-1301, USA. */
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++ "%{shared:-shared} \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+ "%{shared:-shared} \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ %{static:-static}"
++#endif
+
+ /* Output assembler code to STREAM to call the profiler. */
+
+--- gcc-4.1.0/gcc/config/sparc/linux.h
++++ gcc-4.1.0/gcc/config/sparc/linux.h
+@@ -125,6 +125,11 @@ Boston, MA 02110-1301, USA. */
+
+ /* If ELF is the default format, we should not use /lib/elf. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
+ %{!mno-relax:%{!r:-relax}} \
+@@ -132,7 +137,7 @@ Boston, MA 02110-1301, USA. */
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}}"
+
+ /* The sun bundled assembler doesn't accept -Yd, (and neither does gas).
+--- gcc-4.1.0/gcc/config/sparc/linux64.h
++++ gcc-4.1.0/gcc/config/sparc/linux64.h
+@@ -162,12 +162,17 @@ Boston, MA 02110-1301, USA. */
+ { "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \
+ { "link_arch", LINK_ARCH_SPEC },
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+ #define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}} \
+ "
+
+--- gcc-4.1.0/libffi/configure
++++ gcc-4.1.0/libffi/configure
+@@ -3457,6 +3457,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.1.0/libgfortran/configure
++++ gcc-4.1.0/libgfortran/configure
+@@ -3699,6 +3699,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.1.0/libjava/configure
++++ gcc-4.1.0/libjava/configure
+@@ -5137,6 +5137,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.1.0/libmudflap/configure
++++ gcc-4.1.0/libmudflap/configure
+@@ -5382,6 +5382,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.1.0/libobjc/configure
++++ gcc-4.1.0/libobjc/configure
+@@ -3312,6 +3312,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.1.0/libtool.m4
++++ gcc-4.1.0/libtool.m4
+@@ -743,6 +743,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$']
+--- gcc-4.1.0/ltconfig
++++ gcc-4.1.0/ltconfig
+@@ -603,6 +603,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-
+
+ # 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
+@@ -1274,6 +1275,23 @@ linux-gnu*)
+ 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.
++ hardcode_into_libs=yes
++ # Assume using the uClibc dynamic linker.
++ dynamic_linker="uClibc ld.so"
++ ;;
++
+ netbsd*)
+ need_lib_prefix=no
+ need_version=no
+--- gcc-4.1.0/zlib/configure
++++ gcc-4.1.0/zlib/configure
+@@ -3426,6 +3426,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd* | knetbsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/toolchain/gcc/patches/4.1.0/110-arm-eabi.patch b/toolchain/gcc/patches/4.1.0/110-arm-eabi.patch
new file mode 100644
index 0000000000..acebe5308f
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.0/110-arm-eabi.patch
@@ -0,0 +1,27 @@
+--- gcc-2005q3-1.orig/gcc/config.gcc 2005-10-31 19:02:54.000000000 +0300
++++ gcc-2005q3-1/gcc/config.gcc 2006-01-27 01:09:09.000000000 +0300
+@@ -674,7 +674,7 @@
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
+ tmake_file="t-slibgcc-elf-ver t-linux arm/t-arm"
+ case ${target} in
+- arm*-*-linux-gnueabi)
++ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi)
+ tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
+ tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi"
+ # The BPABI long long divmod functions return a 128-bit value in
+
+diff -urN gcc-2005q3-2/gcc/config/arm/linux-eabi.h gcc-2005q3-2.new/gcc/config/arm/linux-eabi.h
+--- gcc-2005q3-2/gcc/config/arm/linux-eabi.h 2005-12-07 23:14:16.000000000 +0300
++++ gcc-2005q3-2.new/gcc/config/arm/linux-eabi.h 2006-03-29 19:02:34.000000000 +0400
+@@ -53,7 +53,11 @@
+ /* Use ld-linux.so.3 so that it will be possible to run "classic"
+ GNU/Linux binaries on an EABI system. */
+ #undef LINUX_TARGET_INTERPRETER
++#ifdef USE_UCLIBC
++#define LINUX_TARGET_INTERPRETER "/lib/ld-uClibc.so.0"
++#else
+ #define LINUX_TARGET_INTERPRETER "/lib/ld-linux.so.3"
++#endif
+
+ /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
+ use the GNU/Linux version, not the generic BPABI version. */
diff --git a/toolchain/gcc/patches/4.1.0/200-uclibc-locale.patch b/toolchain/gcc/patches/4.1.0/200-uclibc-locale.patch
new file mode 100644
index 0000000000..bba729ce79
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.0/200-uclibc-locale.patch
@@ -0,0 +1,3246 @@
+diff -urN gcc-4.1.0/libstdc++-v3/acinclude.m4 gcc-4.1.0-patched/libstdc++-v3/acinclude.m4
+--- gcc-4.1.0/libstdc++-v3/acinclude.m4 2005-04-11 19:13:06.000000000 -0500
++++ gcc-4.1.0-patched/libstdc++-v3/acinclude.m4 2005-04-30 19:36:16.917899167 -0500
+@@ -1047,7 +1047,7 @@
+ AC_MSG_CHECKING([for C locale to use])
+ GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+ [use MODEL for target locale package],
+- [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++ [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
+
+ # If they didn't use this option switch, or if they specified --enable
+ # with no specific model, we'll have to look for one. If they
+@@ -1063,6 +1063,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case ${target_os} in
++ *-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+ AC_EGREP_CPP([_GLIBCXX_ok], [
+ #include <features.h>
+@@ -1206,6 +1209,41 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ AC_MSG_RESULT(uclibc)
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++ AC_SUBST(glibcxx_MOFILES)
++ AC_SUBST(glibcxx_POFILES)
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2005-04-30 19:36:16.918898999 -0500
+@@ -0,0 +1,63 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <bits/c++config.h>
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++#endif
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/c_locale.cc 2005-04-30 19:36:16.919898830 -0500
+@@ -0,0 +1,160 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno> // For errno
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L) strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B))
++#define __strtof_l(S, E, L) strtof((S), (E))
++#define __strtod_l(S, E, L) strtod((S), (E))
++#define __strtold_l(S, E, L) strtold((S), (E))
++#warning should dummy __newlocale check for C|POSIX ?
++#define __newlocale(a, b, c) NULL
++#define __freelocale(a) ((void)0)
++#define __duplocale(a) __c_locale()
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ float __f = __strtof_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __f;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ double __d = __strtod_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __d;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ long double __ld = __strtold_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __ld;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ void
++ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
++ __c_locale __old)
++ {
++ __cloc = __newlocale(1 << LC_ALL, __s, __old);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ if (!__cloc)
++ {
++ // This named locale is not supported by the underlying OS.
++ __throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++ "name not valid"));
++ }
++#endif
++ }
++
++ void
++ locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++ {
++ if (_S_get_c_locale() != __cloc)
++ __freelocale(__cloc);
++ }
++
++ __c_locale
++ locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++ { return __duplocale(__cloc); }
++} // namespace std
++
++namespace __gnu_cxx
++{
++ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++ {
++ "LC_CTYPE",
++ "LC_NUMERIC",
++ "LC_TIME",
++ "LC_COLLATE",
++ "LC_MONETARY",
++ "LC_MESSAGES",
++#if _GLIBCXX_NUM_CATEGORIES != 0
++ "LC_PAPER",
++ "LC_NAME",
++ "LC_ADDRESS",
++ "LC_TELEPHONE",
++ "LC_MEASUREMENT",
++ "LC_IDENTIFICATION"
++#endif
++ };
++}
++
++namespace std
++{
++ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++} // namespace std
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/c_locale.h 2005-04-30 19:36:16.920898661 -0500
+@@ -0,0 +1,117 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _C_LOCALE_H
++#define _C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <cstring> // get std::strlen
++#include <cstdio> // get std::snprintf or std::sprintf
++#include <clocale>
++#include <langinfo.h> // For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h> // For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> // For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCXX_C_LOCALE_GNU for
++#endif
++#define _GLIBCXX_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCXX_NUM_CATEGORIES 6
++#define _GLIBCXX_NUM_CATEGORIES 0
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++ extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++ typedef __locale_t __c_locale;
++#else
++ typedef int* __c_locale;
++#endif
++
++ // Convert numeric value of type _Tv to string and return length of
++ // string. If snprintf is available use it, otherwise fall back to
++ // the unsafe sprintf which, in general, can be dangerous and should
++ // be avoided.
++ template<typename _Tv>
++ int
++ __convert_from_v(char* __out,
++ const int __size __attribute__ ((__unused__)),
++ const char* __fmt,
++#ifdef __UCLIBC_HAS_XCLOCALE__
++ _Tv __v, const __c_locale& __cloc, int __prec)
++ {
++ __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++ _Tv __v, const __c_locale&, int __prec)
++ {
++# ifdef __UCLIBC_HAS_LOCALE__
++ char* __old = std::setlocale(LC_ALL, NULL);
++ char* __sav = new char[std::strlen(__old) + 1];
++ std::strcpy(__sav, __old);
++ std::setlocale(LC_ALL, "C");
++# endif
++#endif
++
++ const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
++
++#ifdef __UCLIBC_HAS_XCLOCALE__
++ __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++ std::setlocale(LC_ALL, __sav);
++ delete [] __sav;
++#endif
++ return __ret;
++ }
++}
++
++#endif
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 2005-04-30 19:36:16.921898492 -0500
+@@ -0,0 +1,306 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++ // Specializations.
++#ifdef _GLIBCXX_USE_WCHAR_T
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_out(state_type& __state, const intern_type* __from,
++ const intern_type* __from_end, const intern_type*& __from_next,
++ extern_type* __to, extern_type* __to_end,
++ extern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // wcsnrtombs is *very* fast but stops if encounters NUL characters:
++ // in case we fall back to wcrtomb and then continue, in a loop.
++ // NB: wcsnrtombs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
++ __from_end - __from_next);
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ const size_t __conv = wcsnrtombs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // wcrtomb.
++ for (; __from < __from_next; ++__from)
++ __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ extern_type __buf[MB_LEN_MAX];
++ __tmp_state = __state;
++ const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
++ if (__conv > static_cast<size_t>(__to_end - __to_next))
++ __ret = partial;
++ else
++ {
++ memcpy(__to_next, __buf, __conv);
++ __state = __tmp_state;
++ __to_next += __conv;
++ ++__from_next;
++ }
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_in(state_type& __state, const extern_type* __from,
++ const extern_type* __from_end, const extern_type*& __from_next,
++ intern_type* __to, intern_type* __to_end,
++ intern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we store a L'\0' and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
++ __from_end
++ - __from_next));
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ size_t __conv = mbsnrtowcs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (;; ++__to_next, __from += __conv)
++ {
++ __conv = mbrtowc(__to_next, __from, __from_end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __from_next = __from;
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ // It is unclear what to return in this case (see DR 382).
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ if (__to_next < __to_end)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from_next;
++ *__to_next++ = L'\0';
++ }
++ else
++ __ret = partial;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_encoding() const throw()
++ {
++ // XXX This implementation assumes that the encoding is
++ // stateless and is either single-byte or variable-width.
++ int __ret = 0;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ if (MB_CUR_MAX == 1)
++ __ret = 1;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_max_length() const throw()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ // XXX Probably wrong for stateful encodings.
++ int __ret = MB_CUR_MAX;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_length(state_type& __state, const extern_type* __from,
++ const extern_type* __end, size_t __max) const
++ {
++ int __ret = 0;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we advance past it and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++
++ // A dummy internal buffer is needed in order for mbsnrtocws to consider
++ // its fourth parameter (it wouldn't with NULL as first parameter).
++ wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
++ * __max));
++ while (__from < __end && __max)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
++ __end
++ - __from));
++ if (!__from_chunk_end)
++ __from_chunk_end = __end;
++
++ const extern_type* __tmp_from = __from;
++ size_t __conv = mbsnrtowcs(__to, &__from,
++ __from_chunk_end - __from,
++ __max, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (__from = __tmp_from;; __from += __conv)
++ {
++ __conv = mbrtowc(NULL, __from, __end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __state = __tmp_state;
++ __ret += __from - __tmp_from;
++ break;
++ }
++ if (!__from)
++ __from = __from_chunk_end;
++
++ __ret += __from - __tmp_from;
++ __max -= __conv;
++
++ if (__from < __end && __max)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from;
++ ++__ret;
++ --__max;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++#endif
++}
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/collate_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/collate_members.cc 2005-04-30 19:36:16.922898323 -0500
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L) strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++ // These are basically extensions to char_traits, and perhaps should
++ // be put there instead of here.
++ template<>
++ int
++ collate<char>::_M_compare(const char* __one, const char* __two) const
++ {
++ int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<char>::_M_transform(char* __to, const char* __from,
++ size_t __n) const
++ { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ int
++ collate<wchar_t>::_M_compare(const wchar_t* __one,
++ const wchar_t* __two) const
++ {
++ int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++ size_t __n) const
++ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2005-04-30 19:36:16.923898155 -0500
+@@ -0,0 +1,300 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L) wctype((S))
++#define __towupper_l(C, L) towupper((C))
++#define __towlower_l(C, L) towlower((C))
++#define __iswctype_l(C, M, L) iswctype((C), (M))
++#endif
++
++namespace std
++{
++ // NB: The other ctype<char> specializations are in src/locale.cc and
++ // various /config/os/* files.
++ template<>
++ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++ : ctype<char>(0, false, __refs)
++ {
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
++ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
++ this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
++ this->_M_table = this->_M_c_locale_ctype->__ctype_b;
++#endif
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ ctype<wchar_t>::__wmask_type
++ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++ {
++ __wmask_type __ret;
++ switch (__m)
++ {
++ case space:
++ __ret = __wctype_l("space", _M_c_locale_ctype);
++ break;
++ case print:
++ __ret = __wctype_l("print", _M_c_locale_ctype);
++ break;
++ case cntrl:
++ __ret = __wctype_l("cntrl", _M_c_locale_ctype);
++ break;
++ case upper:
++ __ret = __wctype_l("upper", _M_c_locale_ctype);
++ break;
++ case lower:
++ __ret = __wctype_l("lower", _M_c_locale_ctype);
++ break;
++ case alpha:
++ __ret = __wctype_l("alpha", _M_c_locale_ctype);
++ break;
++ case digit:
++ __ret = __wctype_l("digit", _M_c_locale_ctype);
++ break;
++ case punct:
++ __ret = __wctype_l("punct", _M_c_locale_ctype);
++ break;
++ case xdigit:
++ __ret = __wctype_l("xdigit", _M_c_locale_ctype);
++ break;
++ case alnum:
++ __ret = __wctype_l("alnum", _M_c_locale_ctype);
++ break;
++ case graph:
++ __ret = __wctype_l("graph", _M_c_locale_ctype);
++ break;
++ default:
++ __ret = __wmask_type();
++ }
++ return __ret;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_toupper(wchar_t __c) const
++ { return __towupper_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_tolower(wchar_t __c) const
++ { return __towlower_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ bool
++ ctype<wchar_t>::
++ do_is(mask __m, wchar_t __c) const
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ bool __ret = false;
++ const size_t __bitmasksize = 11;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__m & _M_bit[__bitcur]
++ && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
++ {
++ __ret = true;
++ break;
++ }
++ return __ret;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++ {
++ for (; __lo < __hi; ++__vec, ++__lo)
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ const size_t __bitmasksize = 11;
++ mask __m = 0;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
++ __m |= _M_bit[__bitcur];
++ *__vec = __m;
++ }
++ return __hi;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi && !this->do_is(__m, *__lo))
++ ++__lo;
++ return __lo;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++ {
++ while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++ ++__lo;
++ return __lo;
++ }
++
++ wchar_t
++ ctype<wchar_t>::
++ do_widen(char __c) const
++ { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<wchar_t>::
++ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++ {
++ while (__lo < __hi)
++ {
++ *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++ ++__lo;
++ ++__dest;
++ }
++ return __hi;
++ }
++
++ char
++ ctype<wchar_t>::
++ do_narrow(wchar_t __wc, char __dfault) const
++ {
++ if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++ return _M_narrow[__wc];
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ const int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
++ char* __dest) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ if (_M_narrow_ok)
++ while (__lo < __hi)
++ {
++ if (*__lo >= 0 && *__lo < 128)
++ *__dest = _M_narrow[*__lo];
++ else
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++ ++__lo;
++ ++__dest;
++ }
++ else
++ while (__lo < __hi)
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ ++__lo;
++ ++__dest;
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __hi;
++ }
++
++ void
++ ctype<wchar_t>::_M_initialize_ctype()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ wint_t __i;
++ for (__i = 0; __i < 128; ++__i)
++ {
++ const int __c = wctob(__i);
++ if (__c == EOF)
++ break;
++ else
++ _M_narrow[__i] = static_cast<char>(__c);
++ }
++ if (__i == 128)
++ _M_narrow_ok = true;
++ else
++ _M_narrow_ok = false;
++ for (size_t __j = 0;
++ __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
++ _M_widen[__j] = btowc(__j);
++
++ for (size_t __k = 0; __k <= 11; ++__k)
++ {
++ _M_bit[__k] = static_cast<mask>(_ISbit(__k));
++ _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ }
++#endif // _GLIBCXX_USE_WCHAR_T
++}
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/messages_members.cc 2005-04-30 19:36:16.925897817 -0500
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++ const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++ // Specializations.
++ template<>
++ string
++ messages<char>::do_get(catalog, int, int, const string& __dfault) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++ __uselocale(__old);
++ return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ const char* __msg = gettext(__dfault.c_str());
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return string(__msg);
++#else
++ const char* __msg = gettext(__dfault.c_str());
++ return string(__msg);
++#endif
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ wstring
++ messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++ {
++# ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ __uselocale(__old);
++ return _M_convert_from_char(__msg);
++# elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return _M_convert_from_char(__msg);
++# else
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ return _M_convert_from_char(__msg);
++# endif
++ }
++#endif
++}
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/messages_members.h 2005-04-30 19:36:16.925897817 -0500
+@@ -0,0 +1,118 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++ const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D) ((void)0)
++#define __bindtextdomain(D,P) ((void)0)
++#endif
++
++ // Non-virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::messages(size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
++ _M_name_messages(_S_get_c_name())
++ { }
++
++ template<typename _CharT>
++ messages<_CharT>::messages(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
++ _M_name_messages(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_messages = __tmp;
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
++ const char* __dir) const
++ {
++ __bindtextdomain(__s.c_str(), __dir);
++ return this->do_open(__s, __loc);
++ }
++
++ // Virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::~messages()
++ {
++ if (_M_name_messages != _S_get_c_name())
++ delete [] _M_name_messages;
++ _S_destroy_c_locale(_M_c_locale_messages);
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::do_open(const basic_string<char>& __s,
++ const locale&) const
++ {
++ // No error checking is done, assume the catalog exists and can
++ // be used.
++ __textdomain(__s.c_str());
++ return 0;
++ }
++
++ template<typename _CharT>
++ void
++ messages<_CharT>::do_close(catalog) const
++ { }
++
++ // messages_byname
++ template<typename _CharT>
++ messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++ : messages<_CharT>(__refs)
++ {
++ if (this->_M_name_messages != locale::facet::_S_get_c_name())
++ delete [] this->_M_name_messages;
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ this->_M_name_messages = __tmp;
++
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_messages);
++ this->_S_create_c_locale(this->_M_c_locale_messages, __s);
++ }
++ }
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2005-04-30 19:36:16.927897479 -0500
+@@ -0,0 +1,692 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ // Construct and return valid pattern consisting of some combination of:
++ // space none symbol sign value
++ money_base::pattern
++ money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++ {
++ pattern __ret;
++
++ // This insanely complicated routine attempts to construct a valid
++ // pattern for use with monyepunct. A couple of invariants:
++
++ // if (__precedes) symbol -> value
++ // else value -> symbol
++
++ // if (__space) space
++ // else none
++
++ // none == never first
++ // space never first or last
++
++ // Any elegant implementations of this are welcome.
++ switch (__posn)
++ {
++ case 0:
++ case 1:
++ // 1 The sign precedes the value and symbol.
++ __ret.field[0] = sign;
++ if (__space)
++ {
++ // Pattern starts with sign.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[3] = symbol;
++ }
++ __ret.field[2] = space;
++ }
++ else
++ {
++ // Pattern starts with sign and ends with none.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[3] = none;
++ }
++ break;
++ case 2:
++ // 2 The sign follows the value and symbol.
++ if (__space)
++ {
++ // Pattern either ends with sign.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[1] = space;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ // Pattern ends with sign then none.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[1] = symbol;
++ }
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ break;
++ case 3:
++ // 3 The sign immediately precedes the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = sign;
++ __ret.field[1] = symbol;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = sign;
++ __ret.field[3] = symbol;
++ }
++ else
++ {
++ __ret.field[1] = sign;
++ __ret.field[2] = symbol;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ case 4:
++ // 4 The sign immediately follows the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = sign;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = symbol;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ default:
++ ;
++ }
++ return __ret;
++ }
++
++ template<>
++ void
++ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == true
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ void
++ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == false
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ moneypunct<char, true>::~moneypunct()
++ { delete _M_data; }
++
++ template<>
++ moneypunct<char, false>::~moneypunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] =
++ static_cast<wchar_t>(money_base::_S_atoms[__i]);
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union { char *__s; wchar_t __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = __u.__w;
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = __u.__w;
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ void
++ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] =
++ static_cast<wchar_t>(money_base::_S_atoms[__i]);
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union { char *__s; wchar_t __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = __u.__w;
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = __u.__w;
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len;
++ __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ moneypunct<wchar_t, true>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++
++ template<>
++ moneypunct<wchar_t, false>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++#endif
++}
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2005-04-30 19:36:38.467261324 -0500
+@@ -0,0 +1,160 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP,
++ __cloc));
++
++ // Check for NULL, which implies no grouping.
++ if (_M_data->_M_thousands_sep == '\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = "true";
++ _M_data->_M_truename_size = 4;
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = "false";
++ _M_data->_M_falsename_size = 5;
++ }
++
++ template<>
++ numpunct<char>::~numpunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<wchar_t>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++
++ // Use ctype::widen code without the facet...
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ _M_data->_M_atoms_out[__i] =
++ static_cast<wchar_t>(__num_base::_S_atoms_out[__i]);
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ _M_data->_M_atoms_in[__j] =
++ static_cast<wchar_t>(__num_base::_S_atoms_in[__j]);
++ }
++ else
++ {
++ // Named locale.
++ // NB: In the GNU model wchar_t is always 32 bit wide.
++ union { char *__s; wchar_t __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = __u.__w;
++
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = __u.__w;
++
++ if (_M_data->_M_thousands_sep == L'\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = L"true";
++ _M_data->_M_truename_size = 4;
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = L"false";
++ _M_data->_M_falsename_size = 5;
++ }
++
++ template<>
++ numpunct<wchar_t>::~numpunct()
++ { delete _M_data; }
++ #endif
++}
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/time_members.cc 2005-04-30 19:36:16.929897142 -0500
+@@ -0,0 +1,406 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __timepunct<char>::
++ _M_put(char* __s, size_t __maxlen, const char* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = strftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = '\0';
++ }
++
++ template<>
++ void
++ __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = "%m/%d/%y";
++ _M_data->_M_date_era_format = "%m/%d/%y";
++ _M_data->_M_time_format = "%H:%M:%S";
++ _M_data->_M_time_era_format = "%H:%M:%S";
++ _M_data->_M_date_time_format = "";
++ _M_data->_M_date_time_era_format = "";
++ _M_data->_M_am = "AM";
++ _M_data->_M_pm = "PM";
++ _M_data->_M_am_pm_format = "";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = "Sunday";
++ _M_data->_M_day2 = "Monday";
++ _M_data->_M_day3 = "Tuesday";
++ _M_data->_M_day4 = "Wednesday";
++ _M_data->_M_day5 = "Thursday";
++ _M_data->_M_day6 = "Friday";
++ _M_data->_M_day7 = "Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = "Sun";
++ _M_data->_M_aday2 = "Mon";
++ _M_data->_M_aday3 = "Tue";
++ _M_data->_M_aday4 = "Wed";
++ _M_data->_M_aday5 = "Thu";
++ _M_data->_M_aday6 = "Fri";
++ _M_data->_M_aday7 = "Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = "January";
++ _M_data->_M_month02 = "February";
++ _M_data->_M_month03 = "March";
++ _M_data->_M_month04 = "April";
++ _M_data->_M_month05 = "May";
++ _M_data->_M_month06 = "June";
++ _M_data->_M_month07 = "July";
++ _M_data->_M_month08 = "August";
++ _M_data->_M_month09 = "September";
++ _M_data->_M_month10 = "October";
++ _M_data->_M_month11 = "November";
++ _M_data->_M_month12 = "December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = "Jan";
++ _M_data->_M_amonth02 = "Feb";
++ _M_data->_M_amonth03 = "Mar";
++ _M_data->_M_amonth04 = "Apr";
++ _M_data->_M_amonth05 = "May";
++ _M_data->_M_amonth06 = "Jun";
++ _M_data->_M_amonth07 = "Jul";
++ _M_data->_M_amonth08 = "Aug";
++ _M_data->_M_amonth09 = "Sep";
++ _M_data->_M_amonth10 = "Oct";
++ _M_data->_M_amonth11 = "Nov";
++ _M_data->_M_amonth12 = "Dec";
++ }
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++ _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++ _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++ _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++ _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++ _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT,
++ __cloc);
++ _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
++ _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
++ _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++ _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++ _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++ _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++ _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++ _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++ _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
++ _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
++ _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
++ _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
++ _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
++ _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
++ _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
++ _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
++ _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
++ _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
++ _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
++ _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
++ _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
++ _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
++ _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
++ _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
++ _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
++ _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
++ _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
++ _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
++ _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
++ _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
++ _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
++ _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
++ _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
++ _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
++ _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
++ _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
++ _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ __timepunct<wchar_t>::
++ _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++ const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = L'\0';
++ }
++
++ template<>
++ void
++ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<wchar_t>;
++
++#warning wide time stuff
++// if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = L"%m/%d/%y";
++ _M_data->_M_date_era_format = L"%m/%d/%y";
++ _M_data->_M_time_format = L"%H:%M:%S";
++ _M_data->_M_time_era_format = L"%H:%M:%S";
++ _M_data->_M_date_time_format = L"";
++ _M_data->_M_date_time_era_format = L"";
++ _M_data->_M_am = L"AM";
++ _M_data->_M_pm = L"PM";
++ _M_data->_M_am_pm_format = L"";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = L"Sunday";
++ _M_data->_M_day2 = L"Monday";
++ _M_data->_M_day3 = L"Tuesday";
++ _M_data->_M_day4 = L"Wednesday";
++ _M_data->_M_day5 = L"Thursday";
++ _M_data->_M_day6 = L"Friday";
++ _M_data->_M_day7 = L"Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = L"Sun";
++ _M_data->_M_aday2 = L"Mon";
++ _M_data->_M_aday3 = L"Tue";
++ _M_data->_M_aday4 = L"Wed";
++ _M_data->_M_aday5 = L"Thu";
++ _M_data->_M_aday6 = L"Fri";
++ _M_data->_M_aday7 = L"Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = L"January";
++ _M_data->_M_month02 = L"February";
++ _M_data->_M_month03 = L"March";
++ _M_data->_M_month04 = L"April";
++ _M_data->_M_month05 = L"May";
++ _M_data->_M_month06 = L"June";
++ _M_data->_M_month07 = L"July";
++ _M_data->_M_month08 = L"August";
++ _M_data->_M_month09 = L"September";
++ _M_data->_M_month10 = L"October";
++ _M_data->_M_month11 = L"November";
++ _M_data->_M_month12 = L"December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = L"Jan";
++ _M_data->_M_amonth02 = L"Feb";
++ _M_data->_M_amonth03 = L"Mar";
++ _M_data->_M_amonth04 = L"Apr";
++ _M_data->_M_amonth05 = L"May";
++ _M_data->_M_amonth06 = L"Jun";
++ _M_data->_M_amonth07 = L"Jul";
++ _M_data->_M_amonth08 = L"Aug";
++ _M_data->_M_amonth09 = L"Sep";
++ _M_data->_M_amonth10 = L"Oct";
++ _M_data->_M_amonth11 = L"Nov";
++ _M_data->_M_amonth12 = L"Dec";
++ }
++#if 0
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ union { char *__s; wchar_t *__w; } __u;
++
++ __u.__s = __nl_langinfo_l(_NL_WD_FMT, __cloc);
++ _M_data->_M_date_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WERA_D_FMT, __cloc);
++ _M_data->_M_date_era_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WT_FMT, __cloc);
++ _M_data->_M_time_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WERA_T_FMT, __cloc);
++ _M_data->_M_time_era_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WD_T_FMT, __cloc);
++ _M_data->_M_date_time_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc);
++ _M_data->_M_date_time_era_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WAM_STR, __cloc);
++ _M_data->_M_am = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WPM_STR, __cloc);
++ _M_data->_M_pm = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc);
++ _M_data->_M_am_pm_format = __u.__w;
++
++ // Day names, starting with "C"'s Sunday.
++ __u.__s = __nl_langinfo_l(_NL_WDAY_1, __cloc);
++ _M_data->_M_day1 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_2, __cloc);
++ _M_data->_M_day2 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_3, __cloc);
++ _M_data->_M_day3 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_4, __cloc);
++ _M_data->_M_day4 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_5, __cloc);
++ _M_data->_M_day5 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_6, __cloc);
++ _M_data->_M_day6 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_7, __cloc);
++ _M_data->_M_day7 = __u.__w;
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_1, __cloc);
++ _M_data->_M_aday1 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_2, __cloc);
++ _M_data->_M_aday2 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_3, __cloc);
++ _M_data->_M_aday3 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_4, __cloc);
++ _M_data->_M_aday4 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_5, __cloc);
++ _M_data->_M_aday5 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_6, __cloc);
++ _M_data->_M_aday6 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_7, __cloc);
++ _M_data->_M_aday7 = __u.__w;
++
++ // Month names, starting with "C"'s January.
++ __u.__s = __nl_langinfo_l(_NL_WMON_1, __cloc);
++ _M_data->_M_month01 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_2, __cloc);
++ _M_data->_M_month02 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_3, __cloc);
++ _M_data->_M_month03 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_4, __cloc);
++ _M_data->_M_month04 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_5, __cloc);
++ _M_data->_M_month05 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_6, __cloc);
++ _M_data->_M_month06 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_7, __cloc);
++ _M_data->_M_month07 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_8, __cloc);
++ _M_data->_M_month08 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_9, __cloc);
++ _M_data->_M_month09 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_10, __cloc);
++ _M_data->_M_month10 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_11, __cloc);
++ _M_data->_M_month11 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_12, __cloc);
++ _M_data->_M_month12 = __u.__w;
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ __u.__s = __nl_langinfo_l(_NL_WABMON_1, __cloc);
++ _M_data->_M_amonth01 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_2, __cloc);
++ _M_data->_M_amonth02 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_3, __cloc);
++ _M_data->_M_amonth03 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_4, __cloc);
++ _M_data->_M_amonth04 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_5, __cloc);
++ _M_data->_M_amonth05 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_6, __cloc);
++ _M_data->_M_amonth06 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_7, __cloc);
++ _M_data->_M_amonth07 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_8, __cloc);
++ _M_data->_M_amonth08 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_9, __cloc);
++ _M_data->_M_amonth09 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_10, __cloc);
++ _M_data->_M_amonth10 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_11, __cloc);
++ _M_data->_M_amonth11 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_12, __cloc);
++ _M_data->_M_amonth12 = __u.__w;
++ }
++#endif // 0
++ }
++#endif
++}
+diff -urN gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.h gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/locale/uclibc/time_members.h 2005-04-30 19:36:16.929897142 -0500
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
++ : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_timepunct = __tmp;
++ _M_initialize_timepunct(__cloc);
++ }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::~__timepunct()
++ {
++ if (_M_name_timepunct != _S_get_c_name())
++ delete [] _M_name_timepunct;
++ delete _M_data;
++ _S_destroy_c_locale(_M_c_locale_timepunct);
++ }
+diff -urN gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_base.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/ctype_base.h 2005-04-30 19:36:16.930896973 -0500
+@@ -0,0 +1,64 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++/** @file ctype_base.h
++ * This is an internal header file, included by other library headers.
++ * You should not attempt to use it directly.
++ */
++
++// Information as gleaned from /usr/include/ctype.h
++
++ /// @brief Base class for ctype.
++ struct ctype_base
++ {
++ // Note: In uClibc, the following two types depend on configuration.
++
++ // Non-standard typedefs.
++ typedef const __ctype_touplow_t* __to_type;
++
++ // NB: Offsets into ctype<char>::_M_table force a particular size
++ // on the mask type. Because of this, we don't use an enum.
++ typedef __ctype_mask_t mask;
++ static const mask upper = _ISupper;
++ static const mask lower = _ISlower;
++ static const mask alpha = _ISalpha;
++ static const mask digit = _ISdigit;
++ static const mask xdigit = _ISxdigit;
++ static const mask space = _ISspace;
++ static const mask print = _ISprint;
++ static const mask graph = _ISalpha | _ISdigit | _ISpunct;
++ static const mask cntrl = _IScntrl;
++ static const mask punct = _ISpunct;
++ static const mask alnum = _ISalpha | _ISdigit;
++ };
+diff -urN gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_inline.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/ctype_inline.h 2005-04-30 19:36:16.931896804 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++
++ bool
++ ctype<char>::
++ is(mask __m, char __c) const
++ { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++ const char*
++ ctype<char>::
++ is(const char* __low, const char* __high, mask* __vec) const
++ {
++ while (__low < __high)
++ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++ return __high;
++ }
++
++ const char*
++ ctype<char>::
++ scan_is(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++ ++__low;
++ return __low;
++ }
++
++ const char*
++ ctype<char>::
++ scan_not(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++ ++__low;
++ return __low;
++ }
+diff -urN gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/ctype_noninline.h 2005-04-30 19:36:16.931896804 -0500
+@@ -0,0 +1,92 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ const ctype_base::mask*
++ ctype<char>::classic_table() throw()
++ { return __C_ctype_b; }
++
++ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ char
++ ctype<char>::do_toupper(char __c) const
++ { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_toupper(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_toupper[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
++
++ char
++ ctype<char>::do_tolower(char __c) const
++ { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_tolower(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_tolower[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
+diff -urN gcc-4.1.0/libstdc++-v3/config/os/uclibc/os_defines.h gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-4.1.0/libstdc++-v3/config/os/uclibc/os_defines.h 1969-12-31 18:00:00.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/config/os/uclibc/os_defines.h 2005-04-30 19:36:16.932896635 -0500
+@@ -0,0 +1,44 @@
++// Specific definitions for GNU/Linux -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here. This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
+diff -urN gcc-4.1.0/libstdc++-v3/configure gcc-4.1.0-patched/libstdc++-v3/configure
+--- gcc-4.1.0/libstdc++-v3/configure 2005-04-13 19:31:43.000000000 -0500
++++ gcc-4.1.0-patched/libstdc++-v3/configure 2005-04-30 19:36:16.993886339 -0500
+@@ -3986,6 +3986,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+@@ -5744,6 +5749,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case ${target_os} in
++ linux-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+@@ -5974,6 +5982,77 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ echo "$as_me:$LINENO: result: uclibc" >&5
++echo "${ECHO_T}uclibc" >&6
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ if test -n "$check_msgfmt"; then
++ ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_check_msgfmt="yes"
++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++done
++
++ test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt=$ac_cv_prog_check_msgfmt
++if test -n "$check_msgfmt"; then
++ echo "$as_me:$LINENO: result: $check_msgfmt" >&5
++echo "${ECHO_T}$check_msgfmt" >&6
++else
++ echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++
++
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+@@ -7686,21 +7765,6 @@
+ echo "${ECHO_T}$enable_long_long" >&6
+
+
+- # Check whether --enable-wchar_t or --disable-wchar_t was given.
+-if test "${enable_wchar_t+set}" = set; then
+- enableval="$enable_wchar_t"
+-
+- case "$enableval" in
+- yes|no) ;;
+- *) { { echo "$as_me:$LINENO: error: Argument to enable/disable wchar_t must be yes or no" >&5
+-echo "$as_me: error: Argument to enable/disable wchar_t must be yes or no" >&2;}
+- { (exit 1); exit 1; }; } ;;
+- esac
+-
+-else
+- enable_wchar_t=yes
+-fi;
+-
+ if test x"$ac_c99_wchar" = x"yes" && test x"$enable_wchar_t" = x"yes"; then
+
+ cat >>confdefs.h <<\_ACEOF
+diff -urN gcc-4.1.0/libstdc++-v3/configure.host gcc-4.1.0-patched/libstdc++-v3/configure.host
+--- gcc-4.1.0/libstdc++-v3/configure.host 2005-01-13 16:48:14.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/configure.host 2005-04-30 19:36:16.996885833 -0500
+@@ -249,6 +249,12 @@
+ ;;
+ esac
+
++# Override for uClibc since linux-uclibc gets mishandled above.
++case "${host_os}" in
++ *-uclibc*)
++ os_include_dir="os/uclibc"
++ ;;
++esac
+
+ # Set any OS-dependent and CPU-dependent bits.
+ # THIS TABLE IS SORTED. KEEP IT THAT WAY.
+diff -urN gcc-4.1.0/libstdc++-v3/crossconfig.m4 gcc-4.1.0-patched/libstdc++-v3/crossconfig.m4
+--- gcc-4.1.0/libstdc++-v3/crossconfig.m4 2005-04-06 18:31:16.000000000 -0500
++++ gcc-4.1.0-patched/libstdc++-v3/crossconfig.m4 2005-04-30 19:36:16.997885664 -0500
+@@ -143,6 +143,99 @@
+ ;;
+ esac
+ ;;
++ *-uclibc*)
++# Temporary hack until we implement the float versions of the libm funcs
++ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++ machine/endian.h machine/param.h sys/machine.h sys/types.h \
++ fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
++ SECTION_FLAGS='-ffunction-sections -fdata-sections'
++ AC_SUBST(SECTION_FLAGS)
++ GLIBCXX_CHECK_LINKER_FEATURES
++ GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
++ GLIBCXX_CHECK_WCHAR_T_SUPPORT
++
++ # For LFS.
++ AC_DEFINE(HAVE_INT64_T)
++ case "$target" in
++ *-uclinux*)
++ # Don't enable LFS with uClinux
++ ;;
++ *)
++ AC_DEFINE(_GLIBCXX_USE_LFS)
++ esac
++
++ # For showmanyc_helper().
++ AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
++ GLIBCXX_CHECK_POLL
++ GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
++
++ # For xsputn_2().
++ AC_CHECK_HEADERS(sys/uio.h)
++ GLIBCXX_CHECK_WRITEV
++
++# AC_DEFINE(HAVE_ACOSF)
++# AC_DEFINE(HAVE_ASINF)
++# AC_DEFINE(HAVE_ATANF)
++# AC_DEFINE(HAVE_ATAN2F)
++ AC_DEFINE(HAVE_CEILF)
++ AC_DEFINE(HAVE_COPYSIGN)
++# AC_DEFINE(HAVE_COPYSIGNF)
++# AC_DEFINE(HAVE_COSF)
++# AC_DEFINE(HAVE_COSHF)
++# AC_DEFINE(HAVE_EXPF)
++# AC_DEFINE(HAVE_FABSF)
++ AC_DEFINE(HAVE_FINITE)
++ AC_DEFINE(HAVE_FINITEF)
++ AC_DEFINE(HAVE_FLOORF)
++# AC_DEFINE(HAVE_FMODF)
++# AC_DEFINE(HAVE_FREXPF)
++ AC_DEFINE(HAVE_HYPOT)
++# AC_DEFINE(HAVE_HYPOTF)
++ AC_DEFINE(HAVE_ISINF)
++ AC_DEFINE(HAVE_ISINFF)
++ AC_DEFINE(HAVE_ISNAN)
++ AC_DEFINE(HAVE_ISNANF)
++# AC_DEFINE(HAVE_LOGF)
++# AC_DEFINE(HAVE_LOG10F)
++# AC_DEFINE(HAVE_MODFF)
++# AC_DEFINE(HAVE_SINF)
++# AC_DEFINE(HAVE_SINHF)
++# AC_DEFINE(HAVE_SINCOS)
++# AC_DEFINE(HAVE_SINCOSF)
++ AC_DEFINE(HAVE_SQRTF)
++# AC_DEFINE(HAVE_TANF)
++# AC_DEFINE(HAVE_TANHF)
++ if test x"long_double_math_on_this_cpu" = x"yes"; then
++ AC_MSG_ERROR([long_double_math_on_this_cpu is yes!])
++# AC_DEFINE(HAVE_ACOSL)
++# AC_DEFINE(HAVE_ASINL)
++# AC_DEFINE(HAVE_ATANL)
++# AC_DEFINE(HAVE_ATAN2L)
++# AC_DEFINE(HAVE_CEILL)
++# AC_DEFINE(HAVE_COPYSIGNL)
++# AC_DEFINE(HAVE_COSL)
++# AC_DEFINE(HAVE_COSHL)
++# AC_DEFINE(HAVE_EXPL)
++# AC_DEFINE(HAVE_FABSL)
++# AC_DEFINE(HAVE_FINITEL)
++# AC_DEFINE(HAVE_FLOORL)
++# AC_DEFINE(HAVE_FMODL)
++# AC_DEFINE(HAVE_FREXPL)
++# AC_DEFINE(HAVE_HYPOTL)
++# AC_DEFINE(HAVE_ISINFL)
++# AC_DEFINE(HAVE_ISNANL)
++# AC_DEFINE(HAVE_LOGL)
++# AC_DEFINE(HAVE_LOG10L)
++# AC_DEFINE(HAVE_MODFL)
++# AC_DEFINE(HAVE_POWL)
++# AC_DEFINE(HAVE_SINL)
++# AC_DEFINE(HAVE_SINHL)
++# AC_DEFINE(HAVE_SINCOSL)
++# AC_DEFINE(HAVE_SQRTL)
++# AC_DEFINE(HAVE_TANL)
++# AC_DEFINE(HAVE_TANHL)
++ fi
++ ;;
+ *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
+ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+ machine/endian.h machine/param.h sys/machine.h sys/types.h \
+@@ -157,7 +250,7 @@
+ AC_DEFINE(HAVE_INT64_T)
+ case "$target" in
+ *-uclinux*)
+- # Don't enable LFS with uClibc
++ # Don't enable LFS with uClinux
+ ;;
+ *)
+ AC_DEFINE(_GLIBCXX_USE_LFS)
+diff -urN gcc-4.1.0/libstdc++-v3/include/c_compatibility/wchar.h gcc-4.1.0-patched/libstdc++-v3/include/c_compatibility/wchar.h
+--- gcc-4.1.0/libstdc++-v3/include/c_compatibility/wchar.h 2003-12-08 21:51:45.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/include/c_compatibility/wchar.h 2005-04-30 19:36:16.997885664 -0500
+@@ -101,7 +101,9 @@
+ using std::wmemcpy;
+ using std::wmemmove;
+ using std::wmemset;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using std::wcsftime;
++#endif
+
+ #if _GLIBCXX_USE_C99
+ using std::wcstold;
+diff -urN gcc-4.1.0/libstdc++-v3/include/c_std/std_cwchar.h gcc-4.1.0-patched/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-4.1.0/libstdc++-v3/include/c_std/std_cwchar.h 2004-07-20 03:47:42.000000000 -0500
++++ gcc-4.1.0-patched/libstdc++-v3/include/c_std/std_cwchar.h 2005-04-30 19:36:16.998885495 -0500
+@@ -179,7 +179,9 @@
+ using ::wcscoll;
+ using ::wcscpy;
+ using ::wcscspn;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using ::wcsftime;
++#endif
+ using ::wcslen;
+ using ::wcsncat;
+ using ::wcsncmp;
diff --git a/toolchain/gcc/patches/4.1.0/300-libstdc++-pic.patch b/toolchain/gcc/patches/4.1.0/300-libstdc++-pic.patch
new file mode 100644
index 0000000000..89d03a85e5
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.0/300-libstdc++-pic.patch
@@ -0,0 +1,46 @@
+# DP: Build and install libstdc++_pic.a library.
+
+--- gcc-4.1.0/libstdc++-v3/src/Makefile.am 2004-11-15 17:33:05.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/src/Makefile.am 2005-04-25 20:05:59.186930896 -0500
+@@ -214,6 +214,10 @@
+ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LDFLAGS) -o $@
+
+
++install-exec-local:
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Added bits to build debug library.
+ if GLIBCXX_BUILD_DEBUG
+ all-local: build_debug
+--- gcc-4.1.0/libstdc++-v3/src/Makefile.in 2005-04-11 19:13:08.000000000 -0500
++++ gcc-4.1.0-patched/libstdc++-v3/src/Makefile.in 2005-04-25 20:12:33.284316275 -0500
+@@ -627,7 +627,7 @@
+
+ install-data-am: install-data-local
+
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+
+ install-info: install-info-am
+
+@@ -660,6 +660,7 @@
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-data-local install-exec \
++ install-exec-local \
+ install-exec-am install-info install-info-am install-man \
+ install-strip install-toolexeclibLTLIBRARIES installcheck \
+ installcheck-am installdirs maintainer-clean \
+@@ -745,6 +746,11 @@
+ install_debug:
+ (cd ${debugdir} && $(MAKE) \
+ toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
++
++install-exec-local:
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff --git a/toolchain/gcc/patches/4.1.0/301-missing-execinfo_h.patch b/toolchain/gcc/patches/4.1.0/301-missing-execinfo_h.patch
new file mode 100644
index 0000000000..0e2092f3fb
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.0/301-missing-execinfo_h.patch
@@ -0,0 +1,11 @@
+--- gcc-4.0.0/boehm-gc/include/gc.h-orig 2005-04-28 22:28:57.000000000 -0500
++++ gcc-4.0.0/boehm-gc/include/gc.h 2005-04-28 22:30:38.000000000 -0500
+@@ -500,7 +500,7 @@
+ #ifdef __linux__
+ # include <features.h>
+ # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \
+- && !defined(__ia64__)
++ && !defined(__ia64__) && !defined(__UCLIBC__)
+ # ifndef GC_HAVE_BUILTIN_BACKTRACE
+ # define GC_HAVE_BUILTIN_BACKTRACE
+ # endif
diff --git a/toolchain/gcc/patches/4.1.0/302-c99-snprintf.patch b/toolchain/gcc/patches/4.1.0/302-c99-snprintf.patch
new file mode 100644
index 0000000000..dfb22d681b
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.0/302-c99-snprintf.patch
@@ -0,0 +1,11 @@
+--- gcc-4.0.0/libstdc++-v3/include/c_std/std_cstdio.h-orig 2005-04-29 00:08:41.000000000 -0500
++++ gcc-4.0.0/libstdc++-v3/include/c_std/std_cstdio.h 2005-04-29 00:08:45.000000000 -0500
+@@ -142,7 +142,7 @@
+ using ::vsprintf;
+ }
+
+-#if _GLIBCXX_USE_C99
++#if _GLIBCXX_USE_C99 || defined(__UCLIBC__)
+
+ #undef snprintf
+ #undef vfscanf
diff --git a/toolchain/gcc/patches/4.1.0/303-c99-complex-ugly-hack.patch b/toolchain/gcc/patches/4.1.0/303-c99-complex-ugly-hack.patch
new file mode 100644
index 0000000000..2ccc80d9bb
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.0/303-c99-complex-ugly-hack.patch
@@ -0,0 +1,12 @@
+--- gcc-4.0.0/libstdc++-v3/configure-old 2005-04-30 22:04:48.061603912 -0500
++++ gcc-4.0.0/libstdc++-v3/configure 2005-04-30 22:06:13.678588152 -0500
+@@ -7194,6 +7194,9 @@
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ #include <complex.h>
++#ifdef __UCLIBC__
++#error ugly hack to make sure configure test fails here for cross until uClibc supports the complex funcs
++#endif
+ int
+ main ()
+ {
diff --git a/toolchain/gcc/patches/4.1.0/602-sdk-libstdc++-includes.patch b/toolchain/gcc/patches/4.1.0/602-sdk-libstdc++-includes.patch
new file mode 100644
index 0000000000..23fce7544d
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.0/602-sdk-libstdc++-includes.patch
@@ -0,0 +1,20 @@
+--- gcc-4.1.0/libstdc++-v3/fragment.am 2005-03-21 11:40:14.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/fragment.am 2005-04-25 20:14:39.856251785 -0500
+@@ -21,5 +21,5 @@
+ $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+
+ # -I/-D flags to pass when compiling.
+-AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include
+
+--- gcc-4.1.0/libstdc++-v3/libmath/Makefile.am 2005-03-21 11:40:18.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/libmath/Makefile.am 2005-04-25 20:14:39.682280735 -0500
+@@ -35,7 +35,7 @@
+
+ libmath_la_SOURCES = stubs.c
+
+-AM_CPPFLAGS = $(CANADIAN_INCLUDES)
++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include
+
+ # Only compiling "C" sources in this directory.
+ LIBTOOL = @LIBTOOL@ --tag CC
diff --git a/toolchain/gcc/patches/4.1.0/740-sh-pr24836.patch b/toolchain/gcc/patches/4.1.0/740-sh-pr24836.patch
new file mode 100644
index 0000000000..7992282cff
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.0/740-sh-pr24836.patch
@@ -0,0 +1,25 @@
+http://sourceforge.net/mailarchive/forum.php?thread_id=8959304&forum_id=5348
+http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24836
+
+--- gcc/gcc/configure.ac (revision 106699)
++++ gcc/gcc/configure.ac (working copy)
+@@ -2446,7 +2446,7 @@
+ tls_first_minor=14
+ tls_as_opt="-m64 -Aesame --fatal-warnings"
+ ;;
+- sh-*-* | sh[34]-*-*)
++ sh-*-* | sh[34]*-*-*)
+ conftest_s='
+ .section ".tdata","awT",@progbits
+ foo: .long 25
+--- gcc/gcc/configure
++++ gcc/gcc/configure
+@@ -14846,7 +14846,7 @@
+ tls_first_minor=14
+ tls_as_opt="-m64 -Aesame --fatal-warnings"
+ ;;
+- sh-*-* | sh[34]-*-*)
++ sh-*-* | sh[34]*-*-*)
+ conftest_s='
+ .section ".tdata","awT",@progbits
+ foo: .long 25
diff --git a/toolchain/gcc/patches/4.1.0/800-arm-bigendian.patch b/toolchain/gcc/patches/4.1.0/800-arm-bigendian.patch
new file mode 100644
index 0000000000..1fa5ae1cd2
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.0/800-arm-bigendian.patch
@@ -0,0 +1,67 @@
+By Lennert Buytenhek <buytenh@wantstofly.org>
+Adds support for arm*b-linux* big-endian ARM targets
+
+See http://gcc.gnu.org/PR16350
+
+--- gcc-4.1.0/gcc/config/arm/linux-elf.h
++++ gcc-4.1.0/gcc/config/arm/linux-elf.h
+@@ -28,19 +28,33 @@
+ #undef TARGET_VERSION
+ #define TARGET_VERSION fputs (" (ARM GNU/Linux with ELF)", stderr);
+
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT MASK_BIG_END
++#define TARGET_ENDIAN_OPTION "mbig-endian"
++#define TARGET_LINKER_EMULATION "armelfb_linux"
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#define TARGET_ENDIAN_OPTION "mlittle-endian"
++#define TARGET_LINKER_EMULATION "armelf_linux"
++#endif
++
+ #undef TARGET_DEFAULT_FLOAT_ABI
+ #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD
+
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT (0)
++#define TARGET_DEFAULT (TARGET_ENDIAN_DEFAULT)
+
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
+
+ #undef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork" }
++ { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mno-thumb-interwork" }
+
+ /* Now we define the strings used to build the spec file. */
+ #undef LIB_SPEC
+@@ -61,7 +75,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker " LINUX_TARGET_INTERPRETER "} \
+ -X \
+- %{mbig-endian:-EB}" \
++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+
+ #undef LINK_SPEC
+--- gcc-4.1.0/gcc/config.gcc
++++ gcc-4.1.0/gcc/config.gcc
+@@ -672,6 +672,11 @@
+ ;;
+ arm*-*-linux*) # ARM GNU/Linux with ELF
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
++ case $target in
++ arm*b-*)
++ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
++ ;;
++ esac
+ tmake_file="${tmake_file} t-linux arm/t-arm"
+ case ${target} in
+ arm*-*-linux-gnueabi)
diff --git a/toolchain/gcc/patches/4.1.1/100-uclibc-conf.patch b/toolchain/gcc/patches/4.1.1/100-uclibc-conf.patch
new file mode 100644
index 0000000000..49d576c7dd
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.1/100-uclibc-conf.patch
@@ -0,0 +1,544 @@
+--- gcc-4.1.0/gcc/config/t-linux-uclibc
++++ gcc-4.1.0/gcc/config/t-linux-uclibc
+@@ -0,0 +1,5 @@
++# Remove glibc specific files added in t-linux
++SHLIB_MAPFILES := $(filter-out $(srcdir)/config/libgcc-glibc.ver, $(SHLIB_MAPFILES))
++
++# Use unwind-dw2-fde instead of unwind-dw2-fde-glibc
++LIB2ADDEH := $(subst unwind-dw2-fde-glibc.c,unwind-dw2-fde.c,$(LIB2ADDEH))
+--- gcc-4.1.0/gcc/config.gcc
++++ gcc-4.1.0/gcc/config.gcc
+@@ -1887,7 +1887,7 @@ s390x-ibm-tpf*)
+ ;;
+ sh-*-elf* | sh[12346l]*-*-elf* | sh*-*-kaos* | \
+ sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \
+- sh-*-linux* | sh[346lbe]*-*-linux* | \
++ sh*-*-linux* | sh[346lbe]*-*-linux* | \
+ sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
+ sh64-*-netbsd* | sh64l*-*-netbsd*)
+ tmake_file="${tmake_file} sh/t-sh sh/t-elf"
+@@ -2341,6 +2341,12 @@ m32c-*-elf*)
+ ;;
+ esac
+
++# Rather than hook into each target, just do it after all the linux
++# targets have been processed
++case ${target} in
++*-linux-uclibc*) tm_defines="${tm_defines} USE_UCLIBC" ; tmake_file="${tmake_file} t-linux-uclibc"
++esac
++
+ case ${target} in
+ i[34567]86-*-linux*aout* | i[34567]86-*-linux*libc1)
+ tmake_file="${tmake_file} i386/t-gmm_malloc"
+--- gcc-4.1.0/boehm-gc/configure
++++ gcc-4.1.0/boehm-gc/configure
+@@ -4320,6 +4320,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.1.0/configure
++++ gcc-4.1.0/configure
+@@ -1133,7 +1133,7 @@ no)
+ ;;
+ "")
+ case "${target}" in
+- *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
++ *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu | *-*-linux-uclibc*)
+ # Enable libmudflap by default in GNU and friends.
+ ;;
+ *-*-freebsd*)
+--- gcc-4.1.0/configure.in
++++ gcc-4.1.0/configure.in
+@@ -341,7 +341,7 @@ no)
+ ;;
+ "")
+ case "${target}" in
+- *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
++ *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu | *-*-linux-uclibc*)
+ # Enable libmudflap by default in GNU and friends.
+ ;;
+ *-*-freebsd*)
+--- gcc-4.1.0/contrib/regression/objs-gcc.sh
++++ gcc-4.1.0/contrib/regression/objs-gcc.sh
+@@ -105,6 +105,10 @@ if [ $H_REAL_TARGET = $H_REAL_HOST -a $H
+ then
+ make all-gdb all-dejagnu all-ld || exit 1
+ make install-gdb install-dejagnu install-ld || exit 1
++elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-uclibc ]
++ then
++ make all-gdb all-dejagnu all-ld || exit 1
++ make install-gdb install-dejagnu install-ld || exit 1
+ elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then
+ make bootstrap || exit 1
+ make install || exit 1
+--- gcc-4.1.0/gcc/config/alpha/linux-elf.h
++++ gcc-4.1.0/gcc/config/alpha/linux-elf.h
+@@ -27,7 +27,11 @@ Boston, MA 02110-1301, USA. */
+ #define SUBTARGET_EXTRA_SPECS \
+ { "elf_dynamic_linker", ELF_DYNAMIC_LINKER },
+
++#if defined USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
+ #define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+
+ #define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \
+ %{O*:-O3} %{!O*:-O1} \
+--- gcc-4.1.0/gcc/config/arm/linux-elf.h
++++ gcc-4.1.0/gcc/config/arm/linux-elf.h
+@@ -51,7 +51,11 @@
+
+ #define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"
+
++#ifdef USE_UCLIBC
++#define LINUX_TARGET_INTERPRETER "/lib/ld-uClibc.so.0"
++#else
+ #define LINUX_TARGET_INTERPRETER "/lib/ld-linux.so.2"
++#endif
+
+ #define LINUX_TARGET_LINK_SPEC "%{h*} %{version:-v} \
+ %{b} \
+--- gcc-4.1.0/gcc/config/cris/linux.h
++++ gcc-4.1.0/gcc/config/cris/linux.h
+@@ -73,6 +73,25 @@ Boston, MA 02110-1301, USA. */
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++ -rpath-link include/asm/../..%s\
++ %{shared} %{static}\
++ %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++ %{!shared: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++ %{!r:%{O2|O3: --gc-sections}}"
++
++#else /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+
+@@ -87,6 +106,8 @@ Boston, MA 02110-1301, USA. */
+ %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+ %{!r:%{O2|O3: --gc-sections}}"
+
++#endif /* USE_UCLIBC */
++
+
+ /* Node: Run-time Target */
+
+--- gcc-4.1.0/gcc/config/i386/linux.h
++++ gcc-4.1.0/gcc/config/i386/linux.h
+@@ -107,6 +107,11 @@ Boston, MA 02110-1301, USA. */
+ #define LINK_EMULATION "elf_i386"
+ #define DYNAMIC_LINKER "/lib/ld-linux.so.2"
+
++#if defined USE_UCLIBC
++#undef DYNAMIC_LINKER
++#define DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#endif
++
+ #undef SUBTARGET_EXTRA_SPECS
+ #define SUBTARGET_EXTRA_SPECS \
+ { "link_emulation", LINK_EMULATION },\
+--- gcc-4.1.0/gcc/config/i386/linux64.h
++++ gcc-4.1.0/gcc/config/i386/linux64.h
+@@ -54,14 +54,21 @@ Boston, MA 02110-1301, USA. */
+ When the -shared link option is used a final link is not being
+ done. */
+
++#ifdef USE_UCLIBC
++#define ELF32_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64-uClibc.so.0"
++#else
++#define ELF32_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#define ELF64_DYNAMIC_LINKER "/lib64/ld-linux-x86-64.so.2"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{m32:%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+- %{!m32:%{!dynamic-linker:-dynamic-linker /lib64/ld-linux-x86-64.so.2}}} \
++ %{m32:%{!dynamic-linker:-dynamic-linker " ELF32_DYNAMIC_LINKER "}} \
++ %{!m32:%{!dynamic-linker:-dynamic-linker " ELF64_DYNAMIC_LINKER "}}} \
+ %{static:-static}}"
+
+ /* Similar to standard Linux, but adding -ffast-math support. */
+--- gcc-4.1.0/gcc/config/ia64/linux.h
++++ gcc-4.1.0/gcc/config/ia64/linux.h
+@@ -37,13 +37,18 @@ do { \
+ /* Define this for shared library support because it isn't in the main
+ linux.h file. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "\
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux-ia64.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}"
+
+
+--- gcc-4.1.0/gcc/config/m68k/linux.h
++++ gcc-4.1.0/gcc/config/m68k/linux.h
+@@ -123,12 +123,17 @@ Boston, MA 02110-1301, USA. */
+
+ /* If ELF is the default format, we should not use /lib/elf. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "-m m68kelf %{shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker*:-dynamic-linker /lib/ld.so.1}} \
++ %{!dynamic-linker*:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static}}"
+
+ /* For compatibility with linux/a.out */
+--- gcc-4.1.0/gcc/config/mips/linux.h
++++ gcc-4.1.0/gcc/config/mips/linux.h
+@@ -105,6 +105,11 @@ Boston, MA 02110-1301, USA. */
+
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #define LINK_SPEC \
+ "%(endian_spec) \
+ %{shared:-shared} \
+@@ -112,7 +117,7 @@ Boston, MA 02110-1301, USA. */
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}}"
+
+ #undef SUBTARGET_ASM_SPEC
+--- gcc-4.1.0/gcc/config/pa/pa-linux.h
++++ gcc-4.1.0/gcc/config/pa/pa-linux.h
+@@ -49,13 +49,18 @@ Boston, MA 02110-1301, USA. */
+ /* Define this for shared library support because it isn't in the main
+ linux.h file. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "\
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}"
+
+ /* glibc's profiling functions don't need gcc to allocate counters. */
+--- gcc-4.1.0/gcc/config/rs6000/linux.h
++++ gcc-4.1.0/gcc/config/rs6000/linux.h
+@@ -72,7 +72,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+
+ #undef LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+
+ #define LINK_GCC_C_SEQUENCE_SPEC \
+ "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+--- gcc-4.1.0/gcc/config/rs6000/sysv4.h
++++ gcc-4.1.0/gcc/config/rs6000/sysv4.h
+@@ -866,6 +866,7 @@ extern int fixuplabelno;
+ mcall-linux : %(link_os_linux) ; \
+ mcall-gnu : %(link_os_gnu) ; \
+ mcall-netbsd : %(link_os_netbsd) ; \
++ mcall-linux-uclibc : %(link_os_linux_uclibc); \
+ mcall-openbsd: %(link_os_openbsd) ; \
+ : %(link_os_default) }"
+
+@@ -1043,6 +1044,10 @@ extern int fixuplabelno;
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+ #endif
+@@ -1209,6 +1214,7 @@ ncrtn.o%s"
+ { "link_os_sim", LINK_OS_SIM_SPEC }, \
+ { "link_os_freebsd", LINK_OS_FREEBSD_SPEC }, \
+ { "link_os_linux", LINK_OS_LINUX_SPEC }, \
++ { "link_os_linux_uclibc", LINK_OS_LINUX_UCLIBC_SPEC }, \
+ { "link_os_gnu", LINK_OS_GNU_SPEC }, \
+ { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \
+ { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \
+--- gcc-4.1.0/gcc/config/s390/linux.h
++++ gcc-4.1.0/gcc/config/s390/linux.h
+@@ -77,6 +77,13 @@ Software Foundation, 51 Franklin Street,
+ #define MULTILIB_DEFAULTS { "m31" }
+ #endif
+
++#ifdef USE_UCLIBC
++#define ELF31_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64-uClibc.so.0"
++#else
++#define ELF31_DYNAMIC_LINKER "/lib/ld.so.1"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64.so.1"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC \
+ "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
+@@ -86,8 +93,8 @@ Software Foundation, 51 Franklin Street,
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker: \
+- %{m31:-dynamic-linker /lib/ld.so.1} \
+- %{m64:-dynamic-linker /lib/ld64.so.1}}}}"
++ %{m31:-dynamic-linker " ELF31_DYNAMIC_LINKER "} \
++ %{m64:-dynamic-linker " ELF64_DYNAMIC_LINKER "}}}}"
+
+
+ #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
+--- gcc-4.1.0/gcc/config/sh/linux.h
++++ gcc-4.1.0/gcc/config/sh/linux.h
+@@ -56,12 +56,21 @@ Boston, MA 02110-1301, USA. */
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++ "%{shared:-shared} \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++ %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+ "%{shared:-shared} \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ %{static:-static}"
++#endif
+
+ /* Output assembler code to STREAM to call the profiler. */
+
+--- gcc-4.1.0/gcc/config/sparc/linux.h
++++ gcc-4.1.0/gcc/config/sparc/linux.h
+@@ -125,6 +125,11 @@ Boston, MA 02110-1301, USA. */
+
+ /* If ELF is the default format, we should not use /lib/elf. */
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
+ %{!mno-relax:%{!r:-relax}} \
+@@ -132,7 +137,7 @@ Boston, MA 02110-1301, USA. */
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}}"
+
+ /* The sun bundled assembler doesn't accept -Yd, (and neither does gas).
+--- gcc-4.1.0/gcc/config/sparc/linux64.h
++++ gcc-4.1.0/gcc/config/sparc/linux64.h
+@@ -162,12 +162,17 @@ Boston, MA 02110-1301, USA. */
+ { "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \
+ { "link_arch", LINK_ARCH_SPEC },
+
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+ #define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+ %{static:-static}}} \
+ "
+
+--- gcc-4.1.0/libffi/configure
++++ gcc-4.1.0/libffi/configure
+@@ -3457,6 +3457,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.1.0/libgfortran/configure
++++ gcc-4.1.0/libgfortran/configure
+@@ -3699,6 +3699,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.1.0/libjava/configure
++++ gcc-4.1.0/libjava/configure
+@@ -5137,6 +5137,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.1.0/libmudflap/configure
++++ gcc-4.1.0/libmudflap/configure
+@@ -5382,6 +5382,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.1.0/libobjc/configure
++++ gcc-4.1.0/libobjc/configure
+@@ -3312,6 +3312,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+--- gcc-4.1.0/libtool.m4
++++ gcc-4.1.0/libtool.m4
+@@ -743,6 +743,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$']
+--- gcc-4.1.0/ltconfig
++++ gcc-4.1.0/ltconfig
+@@ -603,6 +603,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-
+
+ # 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
+@@ -1274,6 +1275,23 @@ linux-gnu*)
+ 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.
++ hardcode_into_libs=yes
++ # Assume using the uClibc dynamic linker.
++ dynamic_linker="uClibc ld.so"
++ ;;
++
+ netbsd*)
+ need_lib_prefix=no
+ need_version=no
+--- gcc-4.1.0/zlib/configure
++++ gcc-4.1.0/zlib/configure
+@@ -3426,6 +3426,11 @@ linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd* | knetbsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/toolchain/gcc/patches/4.1.1/110-arm-eabi.patch b/toolchain/gcc/patches/4.1.1/110-arm-eabi.patch
new file mode 100644
index 0000000000..acebe5308f
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.1/110-arm-eabi.patch
@@ -0,0 +1,27 @@
+--- gcc-2005q3-1.orig/gcc/config.gcc 2005-10-31 19:02:54.000000000 +0300
++++ gcc-2005q3-1/gcc/config.gcc 2006-01-27 01:09:09.000000000 +0300
+@@ -674,7 +674,7 @@
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
+ tmake_file="t-slibgcc-elf-ver t-linux arm/t-arm"
+ case ${target} in
+- arm*-*-linux-gnueabi)
++ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi)
+ tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
+ tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi"
+ # The BPABI long long divmod functions return a 128-bit value in
+
+diff -urN gcc-2005q3-2/gcc/config/arm/linux-eabi.h gcc-2005q3-2.new/gcc/config/arm/linux-eabi.h
+--- gcc-2005q3-2/gcc/config/arm/linux-eabi.h 2005-12-07 23:14:16.000000000 +0300
++++ gcc-2005q3-2.new/gcc/config/arm/linux-eabi.h 2006-03-29 19:02:34.000000000 +0400
+@@ -53,7 +53,11 @@
+ /* Use ld-linux.so.3 so that it will be possible to run "classic"
+ GNU/Linux binaries on an EABI system. */
+ #undef LINUX_TARGET_INTERPRETER
++#ifdef USE_UCLIBC
++#define LINUX_TARGET_INTERPRETER "/lib/ld-uClibc.so.0"
++#else
+ #define LINUX_TARGET_INTERPRETER "/lib/ld-linux.so.3"
++#endif
+
+ /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
+ use the GNU/Linux version, not the generic BPABI version. */
diff --git a/toolchain/gcc/patches/4.1.1/200-uclibc-locale.patch b/toolchain/gcc/patches/4.1.1/200-uclibc-locale.patch
new file mode 100644
index 0000000000..6cfbc62509
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.1/200-uclibc-locale.patch
@@ -0,0 +1,3239 @@
+--- gcc-4.1.0-dist/libstdc++-v3/acinclude.m4
++++ gcc-4.1.0/libstdc++-v3/acinclude.m4
+@@ -1071,7 +1071,7 @@
+ AC_MSG_CHECKING([for C locale to use])
+ GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+ [use MODEL for target locale package],
+- [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++ [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
+
+ # If they didn't use this option switch, or if they specified --enable
+ # with no specific model, we'll have to look for one. If they
+@@ -1087,6 +1087,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case ${target_os} in
++ *-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+ AC_EGREP_CPP([_GLIBCXX_ok], [
+ #include <features.h>
+@@ -1230,6 +1233,40 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ AC_MSG_RESULT(uclibc)
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++ AC_SUBST(glibcxx_MOFILES)
++ AC_SUBST(glibcxx_POFILES)
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+@@ -0,0 +1,63 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <bits/c++config.h>
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++#endif
++
++#endif // GLIBC 2.3 and later
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
+@@ -0,0 +1,152 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004, 2005
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno> // For errno
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L) strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B))
++#define __strtof_l(S, E, L) strtof((S), (E))
++#define __strtod_l(S, E, L) strtod((S), (E))
++#define __strtold_l(S, E, L) strtold((S), (E))
++#warning should dummy __newlocale check for C|POSIX ?
++#define __newlocale(a, b, c) NULL
++#define __freelocale(a) ((void)0)
++#define __duplocale(a) __c_locale()
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ char* __sanity;
++ errno = 0;
++ float __f = __strtof_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __f;
++ else
++ __err |= ios_base::failbit;
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ char* __sanity;
++ errno = 0;
++ double __d = __strtod_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __d;
++ else
++ __err |= ios_base::failbit;
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ char* __sanity;
++ errno = 0;
++ long double __ld = __strtold_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __ld;
++ else
++ __err |= ios_base::failbit;
++ }
++
++ void
++ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
++ __c_locale __old)
++ {
++ __cloc = __newlocale(1 << LC_ALL, __s, __old);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ if (!__cloc)
++ {
++ // This named locale is not supported by the underlying OS.
++ __throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++ "name not valid"));
++ }
++#endif
++ }
++
++ void
++ locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++ {
++ if (__cloc && _S_get_c_locale() != __cloc)
++ __freelocale(__cloc);
++ }
++
++ __c_locale
++ locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++ { return __duplocale(__cloc); }
++} // namespace std
++
++namespace __gnu_cxx
++{
++ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++ {
++ "LC_CTYPE",
++ "LC_NUMERIC",
++ "LC_TIME",
++ "LC_COLLATE",
++ "LC_MONETARY",
++ "LC_MESSAGES",
++#if _GLIBCXX_NUM_CATEGORIES != 0
++ "LC_PAPER",
++ "LC_NAME",
++ "LC_ADDRESS",
++ "LC_TELEPHONE",
++ "LC_MEASUREMENT",
++ "LC_IDENTIFICATION"
++#endif
++ };
++}
++
++namespace std
++{
++ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++} // namespace std
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.h
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.h
+@@ -0,0 +1,117 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _C_LOCALE_H
++#define _C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <cstring> // get std::strlen
++#include <cstdio> // get std::snprintf or std::sprintf
++#include <clocale>
++#include <langinfo.h> // For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h> // For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> // For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCXX_C_LOCALE_GNU for
++#endif
++#define _GLIBCXX_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCXX_NUM_CATEGORIES 6
++#define _GLIBCXX_NUM_CATEGORIES 0
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++ extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++ typedef __locale_t __c_locale;
++#else
++ typedef int* __c_locale;
++#endif
++
++ // Convert numeric value of type _Tv to string and return length of
++ // string. If snprintf is available use it, otherwise fall back to
++ // the unsafe sprintf which, in general, can be dangerous and should
++ // be avoided.
++ template<typename _Tv>
++ int
++ __convert_from_v(char* __out,
++ const int __size __attribute__ ((__unused__)),
++ const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ _Tv __v, const __c_locale& __cloc, int __prec)
++ {
++ __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++ _Tv __v, const __c_locale&, int __prec)
++ {
++# ifdef __UCLIBC_HAS_LOCALE__
++ char* __old = std::setlocale(LC_ALL, NULL);
++ char* __sav = new char[std::strlen(__old) + 1];
++ std::strcpy(__sav, __old);
++ std::setlocale(LC_ALL, "C");
++# endif
++#endif
++
++ const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++ std::setlocale(LC_ALL, __sav);
++ delete [] __sav;
++#endif
++ return __ret;
++ }
++}
++
++#endif
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+@@ -0,0 +1,306 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++ // Specializations.
++#ifdef _GLIBCXX_USE_WCHAR_T
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_out(state_type& __state, const intern_type* __from,
++ const intern_type* __from_end, const intern_type*& __from_next,
++ extern_type* __to, extern_type* __to_end,
++ extern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // wcsnrtombs is *very* fast but stops if encounters NUL characters:
++ // in case we fall back to wcrtomb and then continue, in a loop.
++ // NB: wcsnrtombs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
++ __from_end - __from_next);
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ const size_t __conv = wcsnrtombs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // wcrtomb.
++ for (; __from < __from_next; ++__from)
++ __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ extern_type __buf[MB_LEN_MAX];
++ __tmp_state = __state;
++ const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
++ if (__conv > static_cast<size_t>(__to_end - __to_next))
++ __ret = partial;
++ else
++ {
++ memcpy(__to_next, __buf, __conv);
++ __state = __tmp_state;
++ __to_next += __conv;
++ ++__from_next;
++ }
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_in(state_type& __state, const extern_type* __from,
++ const extern_type* __from_end, const extern_type*& __from_next,
++ intern_type* __to, intern_type* __to_end,
++ intern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we store a L'\0' and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
++ __from_end
++ - __from_next));
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ size_t __conv = mbsnrtowcs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (;; ++__to_next, __from += __conv)
++ {
++ __conv = mbrtowc(__to_next, __from, __from_end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __from_next = __from;
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ // It is unclear what to return in this case (see DR 382).
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ if (__to_next < __to_end)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from_next;
++ *__to_next++ = L'\0';
++ }
++ else
++ __ret = partial;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_encoding() const throw()
++ {
++ // XXX This implementation assumes that the encoding is
++ // stateless and is either single-byte or variable-width.
++ int __ret = 0;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ if (MB_CUR_MAX == 1)
++ __ret = 1;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_max_length() const throw()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ // XXX Probably wrong for stateful encodings.
++ int __ret = MB_CUR_MAX;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_length(state_type& __state, const extern_type* __from,
++ const extern_type* __end, size_t __max) const
++ {
++ int __ret = 0;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we advance past it and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++
++ // A dummy internal buffer is needed in order for mbsnrtocws to consider
++ // its fourth parameter (it wouldn't with NULL as first parameter).
++ wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
++ * __max));
++ while (__from < __end && __max)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
++ __end
++ - __from));
++ if (!__from_chunk_end)
++ __from_chunk_end = __end;
++
++ const extern_type* __tmp_from = __from;
++ size_t __conv = mbsnrtowcs(__to, &__from,
++ __from_chunk_end - __from,
++ __max, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (__from = __tmp_from;; __from += __conv)
++ {
++ __conv = mbrtowc(NULL, __from, __end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __state = __tmp_state;
++ __ret += __from - __tmp_from;
++ break;
++ }
++ if (!__from)
++ __from = __from_chunk_end;
++
++ __ret += __from - __tmp_from;
++ __max -= __conv;
++
++ if (__from < __end && __max)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from;
++ ++__ret;
++ --__max;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++#endif
++}
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/collate_members.cc
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L) strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++ // These are basically extensions to char_traits, and perhaps should
++ // be put there instead of here.
++ template<>
++ int
++ collate<char>::_M_compare(const char* __one, const char* __two) const
++ {
++ int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<char>::_M_transform(char* __to, const char* __from,
++ size_t __n) const
++ { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ int
++ collate<wchar_t>::_M_compare(const wchar_t* __one,
++ const wchar_t* __two) const
++ {
++ int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++ size_t __n) const
++ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+@@ -0,0 +1,314 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L) wctype((S))
++#define __towupper_l(C, L) towupper((C))
++#define __towlower_l(C, L) towlower((C))
++#define __iswctype_l(C, M, L) iswctype((C), (M))
++#endif
++
++namespace std
++{
++ // NB: The other ctype<char> specializations are in src/locale.cc and
++ // various /config/os/* files.
++ template<>
++ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++ : ctype<char>(0, false, __refs)
++ {
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
++ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
++ this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
++ this->_M_table = this->_M_c_locale_ctype->__ctype_b;
++#endif
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ ctype<wchar_t>::__wmask_type
++ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++ {
++ __wmask_type __ret;
++ switch (__m)
++ {
++ case space:
++ __ret = __wctype_l("space", _M_c_locale_ctype);
++ break;
++ case print:
++ __ret = __wctype_l("print", _M_c_locale_ctype);
++ break;
++ case cntrl:
++ __ret = __wctype_l("cntrl", _M_c_locale_ctype);
++ break;
++ case upper:
++ __ret = __wctype_l("upper", _M_c_locale_ctype);
++ break;
++ case lower:
++ __ret = __wctype_l("lower", _M_c_locale_ctype);
++ break;
++ case alpha:
++ __ret = __wctype_l("alpha", _M_c_locale_ctype);
++ break;
++ case digit:
++ __ret = __wctype_l("digit", _M_c_locale_ctype);
++ break;
++ case punct:
++ __ret = __wctype_l("punct", _M_c_locale_ctype);
++ break;
++ case xdigit:
++ __ret = __wctype_l("xdigit", _M_c_locale_ctype);
++ break;
++ case alnum:
++ __ret = __wctype_l("alnum", _M_c_locale_ctype);
++ break;
++ case graph:
++ __ret = __wctype_l("graph", _M_c_locale_ctype);
++ break;
++ default:
++ __ret = __wmask_type();
++ }
++ return __ret;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_toupper(wchar_t __c) const
++ { return __towupper_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_tolower(wchar_t __c) const
++ { return __towlower_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ bool
++ ctype<wchar_t>::
++ do_is(mask __m, wchar_t __c) const
++ {
++ // The case of __m == ctype_base::space is particularly important,
++ // due to its use in many istream functions. Therefore we deal with
++ // it first, exploiting the knowledge that on GNU systems _M_bit[5]
++ // is the mask corresponding to ctype_base::space. NB: an encoding
++ // change would not affect correctness!
++ bool __ret = false;
++ if (__m == _M_bit[5])
++ __ret = __iswctype_l(__c, _M_wmask[5], _M_c_locale_ctype);
++ else
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ const size_t __bitmasksize = 11;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__m & _M_bit[__bitcur])
++ {
++ if (__iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
++ {
++ __ret = true;
++ break;
++ }
++ else if (__m == _M_bit[__bitcur])
++ break;
++ }
++ }
++ return __ret;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++ {
++ for (; __lo < __hi; ++__vec, ++__lo)
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ const size_t __bitmasksize = 11;
++ mask __m = 0;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
++ __m |= _M_bit[__bitcur];
++ *__vec = __m;
++ }
++ return __hi;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi && !this->do_is(__m, *__lo))
++ ++__lo;
++ return __lo;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++ {
++ while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++ ++__lo;
++ return __lo;
++ }
++
++ wchar_t
++ ctype<wchar_t>::
++ do_widen(char __c) const
++ { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<wchar_t>::
++ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++ {
++ while (__lo < __hi)
++ {
++ *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++ ++__lo;
++ ++__dest;
++ }
++ return __hi;
++ }
++
++ char
++ ctype<wchar_t>::
++ do_narrow(wchar_t __wc, char __dfault) const
++ {
++ if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++ return _M_narrow[__wc];
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ const int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
++ char* __dest) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ if (_M_narrow_ok)
++ while (__lo < __hi)
++ {
++ if (*__lo >= 0 && *__lo < 128)
++ *__dest = _M_narrow[*__lo];
++ else
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++ ++__lo;
++ ++__dest;
++ }
++ else
++ while (__lo < __hi)
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ ++__lo;
++ ++__dest;
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __hi;
++ }
++
++ void
++ ctype<wchar_t>::_M_initialize_ctype()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ wint_t __i;
++ for (__i = 0; __i < 128; ++__i)
++ {
++ const int __c = wctob(__i);
++ if (__c == EOF)
++ break;
++ else
++ _M_narrow[__i] = static_cast<char>(__c);
++ }
++ if (__i == 128)
++ _M_narrow_ok = true;
++ else
++ _M_narrow_ok = false;
++ for (size_t __j = 0;
++ __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
++ _M_widen[__j] = btowc(__j);
++
++ for (size_t __k = 0; __k <= 11; ++__k)
++ {
++ _M_bit[__k] = static_cast<mask>(_ISbit(__k));
++ _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ }
++#endif // _GLIBCXX_USE_WCHAR_T
++}
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.cc
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++ const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++ // Specializations.
++ template<>
++ string
++ messages<char>::do_get(catalog, int, int, const string& __dfault) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++ __uselocale(__old);
++ return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ const char* __msg = gettext(__dfault.c_str());
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return string(__msg);
++#else
++ const char* __msg = gettext(__dfault.c_str());
++ return string(__msg);
++#endif
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ wstring
++ messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++ {
++# ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ __uselocale(__old);
++ return _M_convert_from_char(__msg);
++# elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return _M_convert_from_char(__msg);
++# else
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ return _M_convert_from_char(__msg);
++# endif
++ }
++#endif
++}
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.h
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.h
+@@ -0,0 +1,121 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++ const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D) ((void)0)
++#define __bindtextdomain(D,P) ((void)0)
++#endif
++
++ // Non-virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::messages(size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
++ _M_name_messages(_S_get_c_name())
++ { }
++
++ template<typename _CharT>
++ messages<_CharT>::messages(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_messages(NULL), _M_name_messages(NULL)
++ {
++ const size_t __len = std::strlen(__s) + 1;
++ char* __tmp = new char[__len];
++ std::memcpy(__tmp, __s, __len);
++ _M_name_messages = __tmp;
++
++ // Last to avoid leaking memory if new throws.
++ _M_c_locale_messages = _S_clone_c_locale(__cloc);
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
++ const char* __dir) const
++ {
++ __bindtextdomain(__s.c_str(), __dir);
++ return this->do_open(__s, __loc);
++ }
++
++ // Virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::~messages()
++ {
++ if (_M_name_messages != _S_get_c_name())
++ delete [] _M_name_messages;
++ _S_destroy_c_locale(_M_c_locale_messages);
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::do_open(const basic_string<char>& __s,
++ const locale&) const
++ {
++ // No error checking is done, assume the catalog exists and can
++ // be used.
++ __textdomain(__s.c_str());
++ return 0;
++ }
++
++ template<typename _CharT>
++ void
++ messages<_CharT>::do_close(catalog) const
++ { }
++
++ // messages_byname
++ template<typename _CharT>
++ messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++ : messages<_CharT>(__refs)
++ {
++ if (this->_M_name_messages != locale::facet::_S_get_c_name())
++ delete [] this->_M_name_messages;
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ this->_M_name_messages = __tmp;
++
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_messages);
++ this->_S_create_c_locale(this->_M_c_locale_messages, __s);
++ }
++ }
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+@@ -0,0 +1,692 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ // Construct and return valid pattern consisting of some combination of:
++ // space none symbol sign value
++ money_base::pattern
++ money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++ {
++ pattern __ret;
++
++ // This insanely complicated routine attempts to construct a valid
++ // pattern for use with monyepunct. A couple of invariants:
++
++ // if (__precedes) symbol -> value
++ // else value -> symbol
++
++ // if (__space) space
++ // else none
++
++ // none == never first
++ // space never first or last
++
++ // Any elegant implementations of this are welcome.
++ switch (__posn)
++ {
++ case 0:
++ case 1:
++ // 1 The sign precedes the value and symbol.
++ __ret.field[0] = sign;
++ if (__space)
++ {
++ // Pattern starts with sign.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[3] = symbol;
++ }
++ __ret.field[2] = space;
++ }
++ else
++ {
++ // Pattern starts with sign and ends with none.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[3] = none;
++ }
++ break;
++ case 2:
++ // 2 The sign follows the value and symbol.
++ if (__space)
++ {
++ // Pattern either ends with sign.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[1] = space;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ // Pattern ends with sign then none.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[1] = symbol;
++ }
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ break;
++ case 3:
++ // 3 The sign immediately precedes the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = sign;
++ __ret.field[1] = symbol;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = sign;
++ __ret.field[3] = symbol;
++ }
++ else
++ {
++ __ret.field[1] = sign;
++ __ret.field[2] = symbol;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ case 4:
++ // 4 The sign immediately follows the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = sign;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = symbol;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ default:
++ __ret = pattern();
++ }
++ return __ret;
++ }
++
++ template<>
++ void
++ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == true
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ void
++ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == false
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ moneypunct<char, true>::~moneypunct()
++ { delete _M_data; }
++
++ template<>
++ moneypunct<char, false>::~moneypunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] =
++ static_cast<wchar_t>(money_base::_S_atoms[__i]);
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union { char *__s; wchar_t __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = __u.__w;
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = __u.__w;
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ void
++ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] =
++ static_cast<wchar_t>(money_base::_S_atoms[__i]);
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union { char *__s; wchar_t __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = __u.__w;
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = __u.__w;
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len;
++ __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ moneypunct<wchar_t, true>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++
++ template<>
++ moneypunct<wchar_t, false>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++#endif
++}
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+@@ -0,0 +1,173 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP,
++ __cloc));
++
++ // Check for NULL, which implies no grouping.
++ if (_M_data->_M_thousands_sep == '\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = "true";
++ _M_data->_M_truename_size = 4;
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = "false";
++ _M_data->_M_falsename_size = 5;
++ }
++
++ template<>
++ numpunct<char>::~numpunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<wchar_t>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++
++ // Use ctype::widen code without the facet...
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ _M_data->_M_atoms_out[__i] =
++ static_cast<wchar_t>(__num_base::_S_atoms_out[__i]);
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ _M_data->_M_atoms_in[__j] =
++ static_cast<wchar_t>(__num_base::_S_atoms_in[__j]);
++ }
++ else
++ {
++ // Named locale.
++ // NB: In the GNU model wchar_t is always 32 bit wide.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union { char *__s; wchar_t __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = __u.__w;
++
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = __u.__w;
++#endif
++
++ if (_M_data->_M_thousands_sep == L'\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = L"true";
++ _M_data->_M_truename_size = 4;
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = L"false";
++ _M_data->_M_falsename_size = 5;
++ }
++
++ template<>
++ numpunct<wchar_t>::~numpunct()
++ { delete _M_data; }
++ #endif
++}
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/time_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.cc
+@@ -0,0 +1,406 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __timepunct<char>::
++ _M_put(char* __s, size_t __maxlen, const char* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = strftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = '\0';
++ }
++
++ template<>
++ void
++ __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = "%m/%d/%y";
++ _M_data->_M_date_era_format = "%m/%d/%y";
++ _M_data->_M_time_format = "%H:%M:%S";
++ _M_data->_M_time_era_format = "%H:%M:%S";
++ _M_data->_M_date_time_format = "";
++ _M_data->_M_date_time_era_format = "";
++ _M_data->_M_am = "AM";
++ _M_data->_M_pm = "PM";
++ _M_data->_M_am_pm_format = "";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = "Sunday";
++ _M_data->_M_day2 = "Monday";
++ _M_data->_M_day3 = "Tuesday";
++ _M_data->_M_day4 = "Wednesday";
++ _M_data->_M_day5 = "Thursday";
++ _M_data->_M_day6 = "Friday";
++ _M_data->_M_day7 = "Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = "Sun";
++ _M_data->_M_aday2 = "Mon";
++ _M_data->_M_aday3 = "Tue";
++ _M_data->_M_aday4 = "Wed";
++ _M_data->_M_aday5 = "Thu";
++ _M_data->_M_aday6 = "Fri";
++ _M_data->_M_aday7 = "Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = "January";
++ _M_data->_M_month02 = "February";
++ _M_data->_M_month03 = "March";
++ _M_data->_M_month04 = "April";
++ _M_data->_M_month05 = "May";
++ _M_data->_M_month06 = "June";
++ _M_data->_M_month07 = "July";
++ _M_data->_M_month08 = "August";
++ _M_data->_M_month09 = "September";
++ _M_data->_M_month10 = "October";
++ _M_data->_M_month11 = "November";
++ _M_data->_M_month12 = "December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = "Jan";
++ _M_data->_M_amonth02 = "Feb";
++ _M_data->_M_amonth03 = "Mar";
++ _M_data->_M_amonth04 = "Apr";
++ _M_data->_M_amonth05 = "May";
++ _M_data->_M_amonth06 = "Jun";
++ _M_data->_M_amonth07 = "Jul";
++ _M_data->_M_amonth08 = "Aug";
++ _M_data->_M_amonth09 = "Sep";
++ _M_data->_M_amonth10 = "Oct";
++ _M_data->_M_amonth11 = "Nov";
++ _M_data->_M_amonth12 = "Dec";
++ }
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++ _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++ _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++ _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++ _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++ _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT,
++ __cloc);
++ _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
++ _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
++ _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++ _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++ _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++ _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++ _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++ _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++ _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
++ _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
++ _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
++ _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
++ _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
++ _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
++ _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
++ _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
++ _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
++ _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
++ _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
++ _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
++ _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
++ _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
++ _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
++ _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
++ _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
++ _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
++ _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
++ _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
++ _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
++ _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
++ _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
++ _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
++ _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
++ _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
++ _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
++ _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
++ _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ __timepunct<wchar_t>::
++ _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++ const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = L'\0';
++ }
++
++ template<>
++ void
++ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<wchar_t>;
++
++#warning wide time stuff
++// if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = L"%m/%d/%y";
++ _M_data->_M_date_era_format = L"%m/%d/%y";
++ _M_data->_M_time_format = L"%H:%M:%S";
++ _M_data->_M_time_era_format = L"%H:%M:%S";
++ _M_data->_M_date_time_format = L"";
++ _M_data->_M_date_time_era_format = L"";
++ _M_data->_M_am = L"AM";
++ _M_data->_M_pm = L"PM";
++ _M_data->_M_am_pm_format = L"";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = L"Sunday";
++ _M_data->_M_day2 = L"Monday";
++ _M_data->_M_day3 = L"Tuesday";
++ _M_data->_M_day4 = L"Wednesday";
++ _M_data->_M_day5 = L"Thursday";
++ _M_data->_M_day6 = L"Friday";
++ _M_data->_M_day7 = L"Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = L"Sun";
++ _M_data->_M_aday2 = L"Mon";
++ _M_data->_M_aday3 = L"Tue";
++ _M_data->_M_aday4 = L"Wed";
++ _M_data->_M_aday5 = L"Thu";
++ _M_data->_M_aday6 = L"Fri";
++ _M_data->_M_aday7 = L"Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = L"January";
++ _M_data->_M_month02 = L"February";
++ _M_data->_M_month03 = L"March";
++ _M_data->_M_month04 = L"April";
++ _M_data->_M_month05 = L"May";
++ _M_data->_M_month06 = L"June";
++ _M_data->_M_month07 = L"July";
++ _M_data->_M_month08 = L"August";
++ _M_data->_M_month09 = L"September";
++ _M_data->_M_month10 = L"October";
++ _M_data->_M_month11 = L"November";
++ _M_data->_M_month12 = L"December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = L"Jan";
++ _M_data->_M_amonth02 = L"Feb";
++ _M_data->_M_amonth03 = L"Mar";
++ _M_data->_M_amonth04 = L"Apr";
++ _M_data->_M_amonth05 = L"May";
++ _M_data->_M_amonth06 = L"Jun";
++ _M_data->_M_amonth07 = L"Jul";
++ _M_data->_M_amonth08 = L"Aug";
++ _M_data->_M_amonth09 = L"Sep";
++ _M_data->_M_amonth10 = L"Oct";
++ _M_data->_M_amonth11 = L"Nov";
++ _M_data->_M_amonth12 = L"Dec";
++ }
++#if 0
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ union { char *__s; wchar_t *__w; } __u;
++
++ __u.__s = __nl_langinfo_l(_NL_WD_FMT, __cloc);
++ _M_data->_M_date_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WERA_D_FMT, __cloc);
++ _M_data->_M_date_era_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WT_FMT, __cloc);
++ _M_data->_M_time_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WERA_T_FMT, __cloc);
++ _M_data->_M_time_era_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WD_T_FMT, __cloc);
++ _M_data->_M_date_time_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc);
++ _M_data->_M_date_time_era_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WAM_STR, __cloc);
++ _M_data->_M_am = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WPM_STR, __cloc);
++ _M_data->_M_pm = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc);
++ _M_data->_M_am_pm_format = __u.__w;
++
++ // Day names, starting with "C"'s Sunday.
++ __u.__s = __nl_langinfo_l(_NL_WDAY_1, __cloc);
++ _M_data->_M_day1 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_2, __cloc);
++ _M_data->_M_day2 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_3, __cloc);
++ _M_data->_M_day3 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_4, __cloc);
++ _M_data->_M_day4 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_5, __cloc);
++ _M_data->_M_day5 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_6, __cloc);
++ _M_data->_M_day6 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_7, __cloc);
++ _M_data->_M_day7 = __u.__w;
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_1, __cloc);
++ _M_data->_M_aday1 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_2, __cloc);
++ _M_data->_M_aday2 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_3, __cloc);
++ _M_data->_M_aday3 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_4, __cloc);
++ _M_data->_M_aday4 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_5, __cloc);
++ _M_data->_M_aday5 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_6, __cloc);
++ _M_data->_M_aday6 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_7, __cloc);
++ _M_data->_M_aday7 = __u.__w;
++
++ // Month names, starting with "C"'s January.
++ __u.__s = __nl_langinfo_l(_NL_WMON_1, __cloc);
++ _M_data->_M_month01 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_2, __cloc);
++ _M_data->_M_month02 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_3, __cloc);
++ _M_data->_M_month03 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_4, __cloc);
++ _M_data->_M_month04 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_5, __cloc);
++ _M_data->_M_month05 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_6, __cloc);
++ _M_data->_M_month06 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_7, __cloc);
++ _M_data->_M_month07 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_8, __cloc);
++ _M_data->_M_month08 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_9, __cloc);
++ _M_data->_M_month09 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_10, __cloc);
++ _M_data->_M_month10 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_11, __cloc);
++ _M_data->_M_month11 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_12, __cloc);
++ _M_data->_M_month12 = __u.__w;
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ __u.__s = __nl_langinfo_l(_NL_WABMON_1, __cloc);
++ _M_data->_M_amonth01 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_2, __cloc);
++ _M_data->_M_amonth02 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_3, __cloc);
++ _M_data->_M_amonth03 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_4, __cloc);
++ _M_data->_M_amonth04 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_5, __cloc);
++ _M_data->_M_amonth05 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_6, __cloc);
++ _M_data->_M_amonth06 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_7, __cloc);
++ _M_data->_M_amonth07 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_8, __cloc);
++ _M_data->_M_amonth08 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_9, __cloc);
++ _M_data->_M_amonth09 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_10, __cloc);
++ _M_data->_M_amonth10 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_11, __cloc);
++ _M_data->_M_amonth11 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_12, __cloc);
++ _M_data->_M_amonth12 = __u.__w;
++ }
++#endif // 0
++ }
++#endif
++}
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/time_members.h
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.h
+@@ -0,0 +1,76 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
++ : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(NULL)
++ {
++ const size_t __len = std::strlen(__s) + 1;
++ char* __tmp = new char[__len];
++ std::memcpy(__tmp, __s, __len);
++ _M_name_timepunct = __tmp;
++
++ try
++ { _M_initialize_timepunct(__cloc); }
++ catch(...)
++ {
++ delete [] _M_name_timepunct;
++ __throw_exception_again;
++ }
++ }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::~__timepunct()
++ {
++ if (_M_name_timepunct != _S_get_c_name())
++ delete [] _M_name_timepunct;
++ delete _M_data;
++ _S_destroy_c_locale(_M_c_locale_timepunct);
++ }
+--- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_base.h
++++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_base.h
+@@ -0,0 +1,64 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++/** @file ctype_base.h
++ * This is an internal header file, included by other library headers.
++ * You should not attempt to use it directly.
++ */
++
++// Information as gleaned from /usr/include/ctype.h
++
++ /// @brief Base class for ctype.
++ struct ctype_base
++ {
++ // Note: In uClibc, the following two types depend on configuration.
++
++ // Non-standard typedefs.
++ typedef const __ctype_touplow_t* __to_type;
++
++ // NB: Offsets into ctype<char>::_M_table force a particular size
++ // on the mask type. Because of this, we don't use an enum.
++ typedef __ctype_mask_t mask;
++ static const mask upper = _ISupper;
++ static const mask lower = _ISlower;
++ static const mask alpha = _ISalpha;
++ static const mask digit = _ISdigit;
++ static const mask xdigit = _ISxdigit;
++ static const mask space = _ISspace;
++ static const mask print = _ISprint;
++ static const mask graph = _ISalpha | _ISdigit | _ISpunct;
++ static const mask cntrl = _IScntrl;
++ static const mask punct = _ISpunct;
++ static const mask alnum = _ISalpha | _ISdigit;
++ };
+--- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h
++++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_inline.h
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++
++ bool
++ ctype<char>::
++ is(mask __m, char __c) const
++ { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++ const char*
++ ctype<char>::
++ is(const char* __low, const char* __high, mask* __vec) const
++ {
++ while (__low < __high)
++ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++ return __high;
++ }
++
++ const char*
++ ctype<char>::
++ scan_is(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++ ++__low;
++ return __low;
++ }
++
++ const char*
++ ctype<char>::
++ scan_not(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high
++ && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++ ++__low;
++ return __low;
++ }
+--- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h
++++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+@@ -0,0 +1,92 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ const ctype_base::mask*
++ ctype<char>::classic_table() throw()
++ { return __C_ctype_b; }
++
++ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
++ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
++ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++ {
++ _M_toupper = __C_ctype_toupper;
++ _M_tolower = __C_ctype_tolower;
++ _M_table = __table ? __table : __C_ctype_b;
++ memset(_M_widen, 0, sizeof(_M_widen));
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ }
++
++ char
++ ctype<char>::do_toupper(char __c) const
++ { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_toupper(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_toupper[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
++
++ char
++ ctype<char>::do_tolower(char __c) const
++ { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<char>::do_tolower(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = _M_tolower[static_cast<unsigned char>(*__low)];
++ ++__low;
++ }
++ return __high;
++ }
+--- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/os_defines.h
++++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/os_defines.h
+@@ -0,0 +1,44 @@
++// Specific definitions for GNU/Linux -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here. This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
+--- gcc-4.1.0-dist/libstdc++-v3/configure
++++ gcc-4.1.0/libstdc++-v3/configure
+@@ -4005,6 +4005,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++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]+$'
+@@ -5740,7 +5745,7 @@
+ enableval="$enable_clocale"
+
+ case "$enableval" in
+- generic|gnu|ieee_1003.1-2001|yes|no|auto) ;;
++ generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto) ;;
+ *) { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable clocale" >&5
+ echo "$as_me: error: Unknown argument to enable/disable clocale" >&2;}
+ { (exit 1); exit 1; }; } ;;
+@@ -5765,6 +5770,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case ${target_os} in
++ linux-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+@@ -5995,6 +6003,76 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ echo "$as_me:$LINENO: result: uclibc" >&5
++echo "${ECHO_T}uclibc" >&6
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ if test -n "$check_msgfmt"; then
++ ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_check_msgfmt="yes"
++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++done
++
++ test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt=$ac_cv_prog_check_msgfmt
++if test -n "$check_msgfmt"; then
++ echo "$as_me:$LINENO: result: $check_msgfmt" >&5
++echo "${ECHO_T}$check_msgfmt" >&6
++else
++ echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++
++
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+--- gcc-4.1.0-dist/libstdc++-v3/configure.host
++++ gcc-4.1.0/libstdc++-v3/configure.host
+@@ -261,6 +261,12 @@
+ ;;
+ esac
+
++# Override for uClibc since linux-uclibc gets mishandled above.
++case "${host_os}" in
++ *-uclibc*)
++ os_include_dir="os/uclibc"
++ ;;
++esac
+
+ # Set any OS-dependent and CPU-dependent bits.
+ # THIS TABLE IS SORTED. KEEP IT THAT WAY.
+--- gcc-4.1.0-dist/libstdc++-v3/crossconfig.m4
++++ gcc-4.1.0/libstdc++-v3/crossconfig.m4
+@@ -143,6 +143,99 @@
+ ;;
+ esac
+ ;;
++ *-uclibc*)
++# Temporary hack until we implement the float versions of the libm funcs
++ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++ machine/endian.h machine/param.h sys/machine.h sys/types.h \
++ fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
++ SECTION_FLAGS='-ffunction-sections -fdata-sections'
++ AC_SUBST(SECTION_FLAGS)
++ GLIBCXX_CHECK_LINKER_FEATURES
++ GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
++ GLIBCXX_CHECK_WCHAR_T_SUPPORT
++
++ # For LFS.
++ AC_DEFINE(HAVE_INT64_T)
++ case "$target" in
++ *-uclinux*)
++ # Don't enable LFS with uClinux
++ ;;
++ *)
++ AC_DEFINE(_GLIBCXX_USE_LFS)
++ esac
++
++ # For showmanyc_helper().
++ AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
++ GLIBCXX_CHECK_POLL
++ GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
++
++ # For xsputn_2().
++ AC_CHECK_HEADERS(sys/uio.h)
++ GLIBCXX_CHECK_WRITEV
++
++# AC_DEFINE(HAVE_ACOSF)
++# AC_DEFINE(HAVE_ASINF)
++# AC_DEFINE(HAVE_ATANF)
++# AC_DEFINE(HAVE_ATAN2F)
++ AC_DEFINE(HAVE_CEILF)
++ AC_DEFINE(HAVE_COPYSIGN)
++# AC_DEFINE(HAVE_COPYSIGNF)
++# AC_DEFINE(HAVE_COSF)
++# AC_DEFINE(HAVE_COSHF)
++# AC_DEFINE(HAVE_EXPF)
++# AC_DEFINE(HAVE_FABSF)
++ AC_DEFINE(HAVE_FINITE)
++ AC_DEFINE(HAVE_FINITEF)
++ AC_DEFINE(HAVE_FLOORF)
++# AC_DEFINE(HAVE_FMODF)
++# AC_DEFINE(HAVE_FREXPF)
++ AC_DEFINE(HAVE_HYPOT)
++# AC_DEFINE(HAVE_HYPOTF)
++ AC_DEFINE(HAVE_ISINF)
++ AC_DEFINE(HAVE_ISINFF)
++ AC_DEFINE(HAVE_ISNAN)
++ AC_DEFINE(HAVE_ISNANF)
++# AC_DEFINE(HAVE_LOGF)
++# AC_DEFINE(HAVE_LOG10F)
++# AC_DEFINE(HAVE_MODFF)
++# AC_DEFINE(HAVE_SINF)
++# AC_DEFINE(HAVE_SINHF)
++# AC_DEFINE(HAVE_SINCOS)
++# AC_DEFINE(HAVE_SINCOSF)
++ AC_DEFINE(HAVE_SQRTF)
++# AC_DEFINE(HAVE_TANF)
++# AC_DEFINE(HAVE_TANHF)
++ if test x"long_double_math_on_this_cpu" = x"yes"; then
++ AC_MSG_ERROR([long_double_math_on_this_cpu is yes!])
++# AC_DEFINE(HAVE_ACOSL)
++# AC_DEFINE(HAVE_ASINL)
++# AC_DEFINE(HAVE_ATANL)
++# AC_DEFINE(HAVE_ATAN2L)
++# AC_DEFINE(HAVE_CEILL)
++# AC_DEFINE(HAVE_COPYSIGNL)
++# AC_DEFINE(HAVE_COSL)
++# AC_DEFINE(HAVE_COSHL)
++# AC_DEFINE(HAVE_EXPL)
++# AC_DEFINE(HAVE_FABSL)
++# AC_DEFINE(HAVE_FINITEL)
++# AC_DEFINE(HAVE_FLOORL)
++# AC_DEFINE(HAVE_FMODL)
++# AC_DEFINE(HAVE_FREXPL)
++# AC_DEFINE(HAVE_HYPOTL)
++# AC_DEFINE(HAVE_ISINFL)
++# AC_DEFINE(HAVE_ISNANL)
++# AC_DEFINE(HAVE_LOGL)
++# AC_DEFINE(HAVE_LOG10L)
++# AC_DEFINE(HAVE_MODFL)
++# AC_DEFINE(HAVE_POWL)
++# AC_DEFINE(HAVE_SINL)
++# AC_DEFINE(HAVE_SINHL)
++# AC_DEFINE(HAVE_SINCOSL)
++# AC_DEFINE(HAVE_SQRTL)
++# AC_DEFINE(HAVE_TANL)
++# AC_DEFINE(HAVE_TANHL)
++ fi
++ ;;
+ *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
+ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+ machine/endian.h machine/param.h sys/machine.h sys/types.h \
+@@ -157,7 +250,7 @@
+ AC_DEFINE(HAVE_INT64_T)
+ case "$target" in
+ *-uclinux*)
+- # Don't enable LFS with uClibc
++ # Don't enable LFS with uClinux
+ ;;
+ *)
+ AC_DEFINE(_GLIBCXX_USE_LFS)
+--- gcc-4.1.0-dist/libstdc++-v3/include/c_compatibility/wchar.h
++++ gcc-4.1.0/libstdc++-v3/include/c_compatibility/wchar.h
+@@ -101,7 +101,9 @@
+ using std::wmemcpy;
+ using std::wmemmove;
+ using std::wmemset;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using std::wcsftime;
++#endif
+
+ #if _GLIBCXX_USE_C99
+ using std::wcstold;
+--- gcc-4.1.0-dist/libstdc++-v3/include/c_std/std_cwchar.h
++++ gcc-4.1.0/libstdc++-v3/include/c_std/std_cwchar.h
+@@ -180,7 +180,9 @@
+ using ::wcscoll;
+ using ::wcscpy;
+ using ::wcscspn;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using ::wcsftime;
++#endif
+ using ::wcslen;
+ using ::wcsncat;
+ using ::wcsncmp;
diff --git a/toolchain/gcc/patches/4.1.1/300-libstdc++-pic.patch b/toolchain/gcc/patches/4.1.1/300-libstdc++-pic.patch
new file mode 100644
index 0000000000..560bcb237b
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.1/300-libstdc++-pic.patch
@@ -0,0 +1,50 @@
+# DP: Build and install libstdc++_pic.a library.
+
+--- gcc/libstdc++-v3/src/Makefile.am
++++ gcc/libstdc++-v3/src/Makefile.am
+@@ -214,6 +214,12 @@
+ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LDFLAGS) -o $@
+
+
++install-exec-local:
++ifeq ($(enable_shared),yes)
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++endif
++
+ # Added bits to build debug library.
+ if GLIBCXX_BUILD_DEBUG
+ all-local: build_debug
+--- gcc/libstdc++-v3/src/Makefile.in
++++ gcc/libstdc++-v3/src/Makefile.in
+@@ -627,7 +627,7 @@
+
+ install-data-am: install-data-local
+
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+
+ install-info: install-info-am
+
+@@ -660,6 +660,7 @@
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-data-local install-exec \
++ install-exec-local \
+ install-exec-am install-info install-info-am install-man \
+ install-strip install-toolexeclibLTLIBRARIES installcheck \
+ installcheck-am installdirs maintainer-clean \
+@@ -743,6 +743,13 @@
+ install_debug:
+ (cd ${debugdir} && $(MAKE) \
+ toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
++
++install-exec-local:
++ifeq ($(enable_shared),yes)
++ $(AR) cru libstdc++_pic.a *.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++endif
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff --git a/toolchain/gcc/patches/4.1.1/301-missing-execinfo_h.patch b/toolchain/gcc/patches/4.1.1/301-missing-execinfo_h.patch
new file mode 100644
index 0000000000..0e2092f3fb
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.1/301-missing-execinfo_h.patch
@@ -0,0 +1,11 @@
+--- gcc-4.0.0/boehm-gc/include/gc.h-orig 2005-04-28 22:28:57.000000000 -0500
++++ gcc-4.0.0/boehm-gc/include/gc.h 2005-04-28 22:30:38.000000000 -0500
+@@ -500,7 +500,7 @@
+ #ifdef __linux__
+ # include <features.h>
+ # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \
+- && !defined(__ia64__)
++ && !defined(__ia64__) && !defined(__UCLIBC__)
+ # ifndef GC_HAVE_BUILTIN_BACKTRACE
+ # define GC_HAVE_BUILTIN_BACKTRACE
+ # endif
diff --git a/toolchain/gcc/patches/4.1.1/302-c99-snprintf.patch b/toolchain/gcc/patches/4.1.1/302-c99-snprintf.patch
new file mode 100644
index 0000000000..dfb22d681b
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.1/302-c99-snprintf.patch
@@ -0,0 +1,11 @@
+--- gcc-4.0.0/libstdc++-v3/include/c_std/std_cstdio.h-orig 2005-04-29 00:08:41.000000000 -0500
++++ gcc-4.0.0/libstdc++-v3/include/c_std/std_cstdio.h 2005-04-29 00:08:45.000000000 -0500
+@@ -142,7 +142,7 @@
+ using ::vsprintf;
+ }
+
+-#if _GLIBCXX_USE_C99
++#if _GLIBCXX_USE_C99 || defined(__UCLIBC__)
+
+ #undef snprintf
+ #undef vfscanf
diff --git a/toolchain/gcc/patches/4.1.1/303-c99-complex-ugly-hack.patch b/toolchain/gcc/patches/4.1.1/303-c99-complex-ugly-hack.patch
new file mode 100644
index 0000000000..2ccc80d9bb
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.1/303-c99-complex-ugly-hack.patch
@@ -0,0 +1,12 @@
+--- gcc-4.0.0/libstdc++-v3/configure-old 2005-04-30 22:04:48.061603912 -0500
++++ gcc-4.0.0/libstdc++-v3/configure 2005-04-30 22:06:13.678588152 -0500
+@@ -7194,6 +7194,9 @@
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ #include <complex.h>
++#ifdef __UCLIBC__
++#error ugly hack to make sure configure test fails here for cross until uClibc supports the complex funcs
++#endif
+ int
+ main ()
+ {
diff --git a/toolchain/gcc/patches/4.1.1/304-index_macro.patch b/toolchain/gcc/patches/4.1.1/304-index_macro.patch
new file mode 100644
index 0000000000..1fac112fa9
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.1/304-index_macro.patch
@@ -0,0 +1,24 @@
+--- gcc-4.1.0/libstdc++-v3/include/ext/rope.mps 2006-03-24 01:49:51 +0100
++++ gcc-4.1.0/libstdc++-v3/include/ext/rope 2006-03-24 01:49:37 +0100
+@@ -59,6 +59,9 @@
+ #include <bits/allocator.h>
+ #include <ext/hash_fun.h>
+
++/* cope w/ index defined as macro, SuSv3 proposal */
++#undef index
++
+ # ifdef __GC
+ # define __GC_CONST const
+ # else
+--- gcc-4.1.0/libstdc++-v3/include/ext/ropeimpl.h.mps 2006-03-24 01:50:04 +0100
++++ gcc-4.1.0/libstdc++-v3/include/ext/ropeimpl.h 2006-03-24 01:50:28 +0100
+@@ -53,6 +53,9 @@
+ #include <ext/memory> // For uninitialized_copy_n
+ #include <ext/numeric> // For power
+
++/* cope w/ index defined as macro, SuSv3 proposal */
++#undef index
++
+ namespace __gnu_cxx
+ {
+ using std::size_t;
diff --git a/toolchain/gcc/patches/4.1.1/740-sh-pr24836.patch b/toolchain/gcc/patches/4.1.1/740-sh-pr24836.patch
new file mode 100644
index 0000000000..7992282cff
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.1/740-sh-pr24836.patch
@@ -0,0 +1,25 @@
+http://sourceforge.net/mailarchive/forum.php?thread_id=8959304&forum_id=5348
+http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24836
+
+--- gcc/gcc/configure.ac (revision 106699)
++++ gcc/gcc/configure.ac (working copy)
+@@ -2446,7 +2446,7 @@
+ tls_first_minor=14
+ tls_as_opt="-m64 -Aesame --fatal-warnings"
+ ;;
+- sh-*-* | sh[34]-*-*)
++ sh-*-* | sh[34]*-*-*)
+ conftest_s='
+ .section ".tdata","awT",@progbits
+ foo: .long 25
+--- gcc/gcc/configure
++++ gcc/gcc/configure
+@@ -14846,7 +14846,7 @@
+ tls_first_minor=14
+ tls_as_opt="-m64 -Aesame --fatal-warnings"
+ ;;
+- sh-*-* | sh[34]-*-*)
++ sh-*-* | sh[34]*-*-*)
+ conftest_s='
+ .section ".tdata","awT",@progbits
+ foo: .long 25
diff --git a/toolchain/gcc/patches/4.1.1/800-arm-bigendian.patch b/toolchain/gcc/patches/4.1.1/800-arm-bigendian.patch
new file mode 100644
index 0000000000..1fa5ae1cd2
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.1/800-arm-bigendian.patch
@@ -0,0 +1,67 @@
+By Lennert Buytenhek <buytenh@wantstofly.org>
+Adds support for arm*b-linux* big-endian ARM targets
+
+See http://gcc.gnu.org/PR16350
+
+--- gcc-4.1.0/gcc/config/arm/linux-elf.h
++++ gcc-4.1.0/gcc/config/arm/linux-elf.h
+@@ -28,19 +28,33 @@
+ #undef TARGET_VERSION
+ #define TARGET_VERSION fputs (" (ARM GNU/Linux with ELF)", stderr);
+
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT MASK_BIG_END
++#define TARGET_ENDIAN_OPTION "mbig-endian"
++#define TARGET_LINKER_EMULATION "armelfb_linux"
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#define TARGET_ENDIAN_OPTION "mlittle-endian"
++#define TARGET_LINKER_EMULATION "armelf_linux"
++#endif
++
+ #undef TARGET_DEFAULT_FLOAT_ABI
+ #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD
+
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT (0)
++#define TARGET_DEFAULT (TARGET_ENDIAN_DEFAULT)
+
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
+
+ #undef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork" }
++ { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mno-thumb-interwork" }
+
+ /* Now we define the strings used to build the spec file. */
+ #undef LIB_SPEC
+@@ -61,7 +75,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker " LINUX_TARGET_INTERPRETER "} \
+ -X \
+- %{mbig-endian:-EB}" \
++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+
+ #undef LINK_SPEC
+--- gcc-4.1.0/gcc/config.gcc
++++ gcc-4.1.0/gcc/config.gcc
+@@ -672,6 +672,11 @@
+ ;;
+ arm*-*-linux*) # ARM GNU/Linux with ELF
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
++ case $target in
++ arm*b-*)
++ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
++ ;;
++ esac
+ tmake_file="${tmake_file} t-linux arm/t-arm"
+ case ${target} in
+ arm*-*-linux-gnueabi)
diff --git a/toolchain/gcc/patches/4.1.1/900-c++_fixes.patch b/toolchain/gcc/patches/4.1.1/900-c++_fixes.patch
new file mode 100644
index 0000000000..173c6e2fa5
--- /dev/null
+++ b/toolchain/gcc/patches/4.1.1/900-c++_fixes.patch
@@ -0,0 +1,37 @@
+diff -ur gcc.old/libstdc++-v3/configure gcc.dev/libstdc++-v3/configure
+--- gcc.old/libstdc++-v3/configure 2006-06-29 23:26:47.000000000 +0200
++++ gcc.dev/libstdc++-v3/configure 2006-06-05 15:48:03.000000000 +0200
+@@ -5745,7 +5745,7 @@
+ enableval="$enable_clocale"
+
+ case "$enableval" in
+- generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto) ;;
++ generic|gnu|ieee_1003.1-2001|yes|no|auto) ;;
+ *) { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable clocale" >&5
+ echo "$as_me: error: Unknown argument to enable/disable clocale" >&2;}
+ { (exit 1); exit 1; }; } ;;
+@@ -6524,23 +6525,6 @@
+ echo "${ECHO_T}$enable_long_long" >&6
+
+
+-
+- # Check whether --enable-wchar_t or --disable-wchar_t was given.
+-if test "${enable_wchar_t+set}" = set; then
+- enableval="$enable_wchar_t"
+-
+- case "$enableval" in
+- yes|no) ;;
+- *) { { echo "$as_me:$LINENO: error: Argument to enable/disable wchar_t must be yes or no" >&5
+-echo "$as_me: error: Argument to enable/disable wchar_t must be yes or no" >&2;}
+- { (exit 1); exit 1; }; } ;;
+- esac
+-
+-else
+- enable_wchar_t=yes
+-fi;
+-
+-
+ # Test wchar.h for mbstate_t, which is needed for char_traits and fpos.
+
+ for ac_header in wchar.h
+
diff --git a/toolchain/gdb/Config.in b/toolchain/gdb/Config.in
new file mode 100644
index 0000000000..f8560cbd90
--- /dev/null
+++ b/toolchain/gdb/Config.in
@@ -0,0 +1,8 @@
+comment "Gdb Options"
+
+config PACKAGE_GDB_CLIENT
+ bool "Build gdb client for the Host"
+ default n
+ help
+ Build gdb to run on the host to debug programs running on the target.
+
diff --git a/toolchain/gdb/Makefile b/toolchain/gdb/Makefile
new file mode 100644
index 0000000000..34dca715a7
--- /dev/null
+++ b/toolchain/gdb/Makefile
@@ -0,0 +1,55 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=gdb
+PKG_VERSION:=6.3
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_MD5SUM:=05b928f41fa5b482e49ca2c24762a0ae
+PKG_SOURCE_URL:=http://ftp.gnu.org/gnu/gdb
+PKG_CAT:=bzcat
+
+PKG_BUILD_DIR:=$(TOOLCHAIN_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/host-build.mk
+
+define Build/Configure
+ (cd $(PKG_BUILD_DIR); \
+ gdb_cv_func_sigsetjmp=yes \
+ $(PKG_BUILD_DIR)/configure \
+ --prefix=$(STAGING_DIR) \
+ --build=$(GNU_HOST_NAME) \
+ --host=$(GNU_HOST_NAME) \
+ --target=$(REAL_GNU_TARGET_NAME) \
+ $(DISABLE_NLS) \
+ --without-uiout --disable-gdbmi \
+ --disable-tui --disable-gdbtk --without-x \
+ --without-included-gettext \
+ --enable-threads \
+ );
+endef
+
+define Build/Compile
+ $(MAKE) -C $(PKG_BUILD_DIR)
+ strip $(PKG_BUILD_DIR)/gdb/gdb
+endef
+
+define Build/Install
+ (cd $(STAGING_DIR)/bin; \
+ install -c $(PKG_BUILD_DIR)/gdb/gdb $(TARGET_CROSS)gdb; \
+ ln -fs $(TARGET_CROSS)gdb $(GNU_TARGET_NAME)-gdb; \
+ );
+endef
+
+define Build/Clean
+ rm -rf $(PKG_BUILD_DIR)
+ rm -f $(STAGING_DIR)/bin/$(TARGET_CROSS)gdb
+ rm -f $(STAGING_DIR)/bin/$(GNU_TARGET_NAME)-gdb
+endef
+
+$(eval $(call HostBuild))
diff --git a/toolchain/gdb/patches/100-uclibc-conf.patch b/toolchain/gdb/patches/100-uclibc-conf.patch
new file mode 100644
index 0000000000..cc69ff33bd
--- /dev/null
+++ b/toolchain/gdb/patches/100-uclibc-conf.patch
@@ -0,0 +1,280 @@
+--- gdb-6.3/bfd/config.bfd.orig Fri Oct 15 07:47:11 2004
++++ gdb-6.3/bfd/config.bfd Mon Feb 28 00:04:43 2005
+@@ -129,7 +129,7 @@
+ targ_defvec=ecoffalpha_little_vec
+ targ_selvecs=bfd_elf64_alpha_vec
+ ;;
+- alpha*-*-linux-gnu* | alpha*-*-elf*)
++ alpha*-*-linux-* | alpha*-*-elf*)
+ targ_defvec=bfd_elf64_alpha_vec
+ targ_selvecs=ecoffalpha_little_vec
+ ;;
+@@ -139,7 +139,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-* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
+ targ_defvec=bfd_elf64_ia64_little_vec
+ targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+ ;;
+@@ -216,7 +216,7 @@
+ targ_defvec=bfd_elf32_littlearm_vec
+ targ_selvecs=bfd_elf32_bigarm_vec
+ ;;
+- armeb-*-elf | arm*b-*-linux-gnu*)
++ armeb-*-elf | arm*b-*-linux-*)
+ targ_defvec=bfd_elf32_bigarm_vec
+ targ_selvecs=bfd_elf32_littlearm_vec
+ ;;
+@@ -224,7 +224,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-* | arm*-*-conix* | \
+ arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks | \
+ arm*-*-eabi* )
+ targ_defvec=bfd_elf32_littlearm_vec
+@@ -378,7 +378,7 @@
+ ;;
+
+ #ifdef BFD64
+- hppa*64*-*-linux-gnu*)
++ hppa*64*-*-linux-*)
+ targ_defvec=bfd_elf64_hppa_linux_vec
+ targ_selvecs=bfd_elf64_hppa_vec
+ ;;
+@@ -389,7 +389,7 @@
+ ;;
+ #endif
+
+- hppa*-*-linux-gnu*)
++ hppa*-*-linux-*)
+ targ_defvec=bfd_elf32_hppa_linux_vec
+ targ_selvecs=bfd_elf32_hppa_vec
+ ;;
+@@ -522,7 +522,7 @@
+ targ_selvecs=bfd_elf32_i386_vec
+ targ_underscore=yes
+ ;;
+- i[3-7]86-*-linux-gnu*)
++ i[3-7]86-*-linux-*)
+ targ_defvec=bfd_elf32_i386_vec
+ targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+ targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -536,7 +536,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-*)
+ targ_defvec=bfd_elf64_x86_64_vec
+ targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+ ;;
+@@ -706,7 +706,7 @@
+ targ_defvec=hp300hpux_vec
+ targ_underscore=yes
+ ;;
+- m68*-*-linux*aout*)
++ m68*-*-linux*aout* | m68*-*-linux-uclibc*)
+ targ_defvec=m68klinux_vec
+ targ_selvecs=bfd_elf32_m68k_vec
+ targ_underscore=yes
+@@ -987,7 +987,7 @@
+ ;;
+ #endif
+ powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+- powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++ powerpc-*-solaris2* | powerpc-*-linux-* | powerpc-*-rtems* | \
+ powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+ targ_defvec=bfd_elf32_powerpc_vec
+ targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -1024,7 +1024,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-* | powerpcle-*-vxworks* |\
+ powerpcle-*-rtems*)
+ targ_defvec=bfd_elf32_powerpcle_vec
+ targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+@@ -1192,7 +1192,7 @@
+ targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+ targ_underscore=yes
+ ;;
+- sparc-*-linux-gnu*)
++ sparc-*-linux-*)
+ targ_defvec=bfd_elf32_sparc_vec
+ targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+ ;;
+@@ -1239,7 +1239,7 @@
+ targ_defvec=sunos_big_vec
+ targ_underscore=yes
+ ;;
+- sparc64-*-linux-gnu*)
++ sparc64-*-linux-*)
+ targ_defvec=bfd_elf64_sparc_vec
+ targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+ ;;
+@@ -1308,7 +1308,7 @@
+ targ_underscore=yes
+ ;;
+
+- vax-*-linux-gnu*)
++ vax-*-linux-*)
+ targ_defvec=bfd_elf32_vax_vec
+ ;;
+
+--- gdb-6.3/bfd/configure.orig Fri Oct 8 16:53:56 2004
++++ gdb-6.3/bfd/configure Sun Feb 27 18:32:58 2005
+@@ -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-*)
+ 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-*)
+ 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-*)
+ COREFILE=trad-core.lo
+ TRAD_HEADER='"hosts/m68klinux.h"'
+ ;;
+@@ -10150,7 +10155,7 @@
+ COREFILE=trad-core.lo
+ TRAD_HEADER='"hosts/vaxult2.h"'
+ ;;
+- vax-*-linux-gnu*)
++ vax-*-linux-*)
+ COREFILE=trad-core.lo
+ TRAD_HEADER='"hosts/vaxlinux.h"'
+ ;;
+--- gdb-6.3/bfd/configure.in.orig Fri Oct 8 16:53:59 2004
++++ gdb-6.3/bfd/configure.in Sun Feb 27 18:14:41 2005
+@@ -163,7 +163,7 @@
+ alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ COREFILE=''
+ ;;
+- alpha*-*-linux-gnu*)
++ alpha*-*-linux-*)
+ 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-*)
+ 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-*)
+ 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-*)
+ COREFILE=trad-core.lo
+ TRAD_HEADER='"hosts/vaxlinux.h"'
+ ;;
+--- gdb-6.3/libtool.m4.orig Wed Jul 21 21:21:41 2004
++++ gdb-6.3/libtool.m4 Mon Feb 28 00:08:11 2005
+@@ -653,6 +653,11 @@
+ fi
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ newsos6)
+ [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)']
+ lt_cv_file_magic_cmd=/usr/bin/file
+--- gdb-6.3/ltconfig.orig Tue Oct 5 15:34:42 2004
++++ gdb-6.3/ltconfig Sun Feb 27 18:14:41 2005
+@@ -602,7 +602,7 @@
+
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+-linux-gnu*) ;;
++linux-gnu*|linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+
+@@ -1270,6 +1270,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
+--- gdb-6.3/opcodes/configure.orig Fri Sep 17 08:13:38 2004
++++ gdb-6.3/opcodes/configure Mon Feb 28 00:09:42 2005
+@@ -3595,6 +3595,11 @@
+ fi
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ newsos6)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
diff --git a/toolchain/gdb/patches/200-uclibc-readline-conf.patch b/toolchain/gdb/patches/200-uclibc-readline-conf.patch
new file mode 100644
index 0000000000..ffe792dd05
--- /dev/null
+++ b/toolchain/gdb/patches/200-uclibc-readline-conf.patch
@@ -0,0 +1,15 @@
+--- gdb-6.1.1-dist/readline/configure 2003-05-27 18:29:47.000000000 -0500
++++ gdb-6.1.1/readline/configure 2004-08-09 14:20:23.000000000 -0500
+@@ -6249,7 +6249,12 @@
+
+
+ echo "$as_me:$LINENO: checking for mbstate_t" >&5
++echo $ECHO_N "bash_cv_have_mbstate_t=$bash_cv_have_mbstate_t" >&6
+ echo $ECHO_N "checking for mbstate_t... $ECHO_C" >&6
++if test "${bash_cv_have_mbstate_t+set}" != set; then
++ bash_cv_have_mbstate_t=yes
++ echo $ECHO_N "WARNING!! forcing to yes!!! $ECHO_C" >&6
++fi
+ if test "${bash_cv_have_mbstate_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
diff --git a/toolchain/gdb/patches/400-mips-coredump.patch b/toolchain/gdb/patches/400-mips-coredump.patch
new file mode 100644
index 0000000000..4e17ba7bea
--- /dev/null
+++ b/toolchain/gdb/patches/400-mips-coredump.patch
@@ -0,0 +1,28 @@
+Sometime around 2.4.22-23, the mips pt_regs.h fields were reordered, breaking
+coredump handling by gdb for current kernels. Update the hardcoded constants
+to reflect the change.
+--- gdb-6.2.1/gdb/mips-linux-tdep.c-orig 2004-10-29 14:23:55.000000000 -0500
++++ gdb-6.2.1/gdb/mips-linux-tdep.c 2004-10-29 14:26:44.000000000 -0500
+@@ -53,12 +53,22 @@
+
+ #define EF_REG0 6
+ #define EF_REG31 37
++
++#if 0
+ #define EF_LO 38
+ #define EF_HI 39
+ #define EF_CP0_EPC 40
+ #define EF_CP0_BADVADDR 41
+ #define EF_CP0_STATUS 42
+ #define EF_CP0_CAUSE 43
++#else
++#define EF_CP0_STATUS 38
++#define EF_LO 39
++#define EF_HI 40
++#define EF_CP0_BADVADDR 41
++#define EF_CP0_CAUSE 42
++#define EF_CP0_EPC 43
++#endif
+
+ #define EF_SIZE 180
+
diff --git a/toolchain/gdb/patches/500-thread-timeout.patch b/toolchain/gdb/patches/500-thread-timeout.patch
new file mode 100644
index 0000000000..6db0a7a474
--- /dev/null
+++ b/toolchain/gdb/patches/500-thread-timeout.patch
@@ -0,0 +1,34 @@
+--- gdb-6.3.org/gdb/gdbserver/thread-db.c 2004-10-17 02:42:00.000000000 +0900
++++ gdb-6.3/gdb/gdbserver/thread-db.c 2005-01-27 12:19:29.000000000 +0900
+@@ -21,6 +21,7 @@
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
++#include <unistd.h>
+ #include "server.h"
+
+ #include "linux-low.h"
+@@ -142,6 +143,7 @@
+ td_event_msg_t msg;
+ td_err_e err;
+ struct inferior_linux_data *tdata;
++ int timeout;
+
+ if (debug_threads)
+ fprintf (stderr, "Thread creation event.\n");
+@@ -152,7 +154,13 @@
+ In the LinuxThreads implementation, this is safe,
+ because all events come from the manager thread
+ (except for its own creation, of course). */
+- err = td_ta_event_getmsg (thread_agent, &msg);
++ for (timeout = 0; timeout < 50000; timeout++)
++ {
++ err = td_ta_event_getmsg (thread_agent, &msg);
++ if (err != TD_NOMSG)
++ break;
++ usleep(1000);
++ }
+ if (err != TD_OK)
+ fprintf (stderr, "thread getmsg err: %s\n",
+ thread_db_err_str (err));
+
diff --git a/toolchain/gdb/patches/600-debian_10.selected-frame.patch b/toolchain/gdb/patches/600-debian_10.selected-frame.patch
new file mode 100644
index 0000000000..5970f9ba40
--- /dev/null
+++ b/toolchain/gdb/patches/600-debian_10.selected-frame.patch
@@ -0,0 +1,552 @@
+2004-10-11
+
+This patch is not submitted. Many of these functions should be passing
+a frame around rather than calling get_selected_frame, but at least it
+is an improvement over deprecated_selected_frame.
+
+Index: gdb-6.3/gdb/breakpoint.c
+===================================================================
+--- gdb-6.3.orig/gdb/breakpoint.c 2004-10-08 13:30:46.000000000 -0400
++++ gdb-6.3/gdb/breakpoint.c 2004-11-09 22:55:11.231620957 -0500
+@@ -922,7 +922,7 @@ insert_bp_location (struct bp_location *
+ /* FIXME drow/2003-09-09: It would be nice if evaluate_expression
+ took a frame parameter, so that we didn't have to change the
+ selected frame. */
+- saved_frame_id = get_frame_id (deprecated_selected_frame);
++ saved_frame_id = get_frame_id (get_selected_frame ());
+
+ /* Determine if the watchpoint is within scope. */
+ if (bpt->owner->exp_valid_block == NULL)
+@@ -5464,14 +5464,9 @@ break_at_finish_at_depth_command_1 (char
+
+ if (default_breakpoint_valid)
+ {
+- if (deprecated_selected_frame)
+- {
+- selected_pc = get_frame_pc (deprecated_selected_frame);
+- if (arg)
+- if_arg = 1;
+- }
+- else
+- error ("No selected frame.");
++ selected_pc = get_frame_pc (get_selected_frame ());
++ if (arg)
++ if_arg = 1;
+ }
+ else
+ error ("No default breakpoint address now.");
+@@ -5542,15 +5537,10 @@ break_at_finish_command_1 (char *arg, in
+ {
+ if (default_breakpoint_valid)
+ {
+- if (deprecated_selected_frame)
+- {
+- addr_string = xstrprintf ("*0x%s",
+- paddr_nz (get_frame_pc (deprecated_selected_frame)));
+- if (arg)
+- if_arg = 1;
+- }
+- else
+- error ("No selected frame.");
++ addr_string = xstrprintf ("*0x%s",
++ paddr_nz (get_frame_pc (get_selected_frame ())));
++ if (arg)
++ if_arg = 1;
+ }
+ else
+ error ("No default breakpoint address now.");
+@@ -6082,7 +6072,7 @@ until_break_command (char *arg, int from
+ {
+ struct symtabs_and_lines sals;
+ struct symtab_and_line sal;
+- struct frame_info *prev_frame = get_prev_frame (deprecated_selected_frame);
++ struct frame_info *prev_frame = get_prev_frame (get_selected_frame ());
+ struct breakpoint *breakpoint;
+ struct cleanup *old_chain;
+ struct continuation_arg *arg1;
+@@ -6119,7 +6109,7 @@ until_break_command (char *arg, int from
+ /* Otherwise, specify the current frame, because we want to stop only
+ at the very same frame. */
+ breakpoint = set_momentary_breakpoint (sal,
+- get_frame_id (deprecated_selected_frame),
++ get_frame_id (get_selected_frame ()),
+ bp_until);
+
+ if (!target_can_async_p ())
+Index: gdb-6.3/gdb/cli/cli-cmds.c
+===================================================================
+--- gdb-6.3.orig/gdb/cli/cli-cmds.c 2004-09-11 06:24:53.000000000 -0400
++++ gdb-6.3/gdb/cli/cli-cmds.c 2004-11-09 22:51:07.323246218 -0500
+@@ -845,10 +845,7 @@ disassemble_command (char *arg, int from
+ name = NULL;
+ if (!arg)
+ {
+- if (!deprecated_selected_frame)
+- error ("No frame selected.\n");
+-
+- pc = get_frame_pc (deprecated_selected_frame);
++ pc = get_frame_pc (get_selected_frame ());
+ if (find_pc_partial_function (pc, &name, &low, &high) == 0)
+ error ("No function contains program counter for selected frame.\n");
+ #if defined(TUI)
+Index: gdb-6.3/gdb/f-valprint.c
+===================================================================
+--- gdb-6.3.orig/gdb/f-valprint.c 2003-10-14 02:51:14.000000000 -0400
++++ gdb-6.3/gdb/f-valprint.c 2004-11-09 22:51:07.326245632 -0500
+@@ -76,7 +76,7 @@ f77_get_dynamic_lowerbound (struct type
+ switch (TYPE_ARRAY_LOWER_BOUND_TYPE (type))
+ {
+ case BOUND_BY_VALUE_ON_STACK:
+- current_frame_addr = get_frame_base (deprecated_selected_frame);
++ current_frame_addr = get_frame_base (get_selected_frame ());
+ if (current_frame_addr > 0)
+ {
+ *lower_bound =
+@@ -100,7 +100,7 @@ f77_get_dynamic_lowerbound (struct type
+ break;
+
+ case BOUND_BY_REF_ON_STACK:
+- current_frame_addr = get_frame_base (deprecated_selected_frame);
++ current_frame_addr = get_frame_base (get_selected_frame ());
+ if (current_frame_addr > 0)
+ {
+ ptr_to_lower_bound =
+@@ -134,7 +134,7 @@ f77_get_dynamic_upperbound (struct type
+ switch (TYPE_ARRAY_UPPER_BOUND_TYPE (type))
+ {
+ case BOUND_BY_VALUE_ON_STACK:
+- current_frame_addr = get_frame_base (deprecated_selected_frame);
++ current_frame_addr = get_frame_base (get_selected_frame ());
+ if (current_frame_addr > 0)
+ {
+ *upper_bound =
+@@ -163,7 +163,7 @@ f77_get_dynamic_upperbound (struct type
+ break;
+
+ case BOUND_BY_REF_ON_STACK:
+- current_frame_addr = get_frame_base (deprecated_selected_frame);
++ current_frame_addr = get_frame_base (get_selected_frame ());
+ if (current_frame_addr > 0)
+ {
+ ptr_to_upper_bound =
+@@ -630,10 +630,7 @@ info_common_command (char *comname, int
+ first make sure that it is visible and if so, let
+ us display its contents */
+
+- fi = deprecated_selected_frame;
+-
+- if (fi == NULL)
+- error ("No frame selected");
++ fi = get_selected_frame ();
+
+ /* The following is generally ripped off from stack.c's routine
+ print_frame_info() */
+@@ -722,10 +719,7 @@ there_is_a_visible_common_named (char *c
+ if (comname == NULL)
+ error ("Cannot deal with NULL common name!");
+
+- fi = deprecated_selected_frame;
+-
+- if (fi == NULL)
+- error ("No frame selected");
++ fi = get_selected_frame ();
+
+ /* The following is generally ripped off from stack.c's routine
+ print_frame_info() */
+Index: gdb-6.3/gdb/infcmd.c
+===================================================================
+--- gdb-6.3.orig/gdb/infcmd.c 2004-09-13 14:26:28.000000000 -0400
++++ gdb-6.3/gdb/infcmd.c 2004-11-09 22:57:37.274099559 -0500
+@@ -1214,10 +1214,8 @@ finish_command (char *arg, int from_tty)
+ error ("The \"finish\" command does not take any arguments.");
+ if (!target_has_execution)
+ error ("The program is not running.");
+- if (deprecated_selected_frame == NULL)
+- error ("No selected frame.");
+
+- frame = get_prev_frame (deprecated_selected_frame);
++ frame = get_prev_frame (get_selected_frame ());
+ if (frame == 0)
+ error ("\"finish\" not meaningful in the outermost frame.");
+
+@@ -1235,7 +1233,7 @@ finish_command (char *arg, int from_tty)
+
+ /* Find the function we will return from. */
+
+- function = find_pc_function (get_frame_pc (deprecated_selected_frame));
++ function = find_pc_function (get_frame_pc (get_selected_frame ()));
+
+ /* Print info on the selected frame, including level number but not
+ source. */
+@@ -1600,13 +1598,11 @@ registers_info (char *addr_exp, int fpre
+
+ if (!target_has_registers)
+ error ("The program has no registers now.");
+- if (deprecated_selected_frame == NULL)
+- error ("No selected frame.");
+
+ if (!addr_exp)
+ {
+ gdbarch_print_registers_info (current_gdbarch, gdb_stdout,
+- deprecated_selected_frame, -1, fpregs);
++ get_selected_frame (), -1, fpregs);
+ return;
+ }
+
+@@ -1644,7 +1640,7 @@ registers_info (char *addr_exp, int fpre
+ if (regnum >= 0)
+ {
+ gdbarch_print_registers_info (current_gdbarch, gdb_stdout,
+- deprecated_selected_frame, regnum, fpregs);
++ get_selected_frame (), regnum, fpregs);
+ continue;
+ }
+ }
+@@ -1658,7 +1654,7 @@ registers_info (char *addr_exp, int fpre
+ && regnum < NUM_REGS + NUM_PSEUDO_REGS)
+ {
+ gdbarch_print_registers_info (current_gdbarch, gdb_stdout,
+- deprecated_selected_frame, regnum, fpregs);
++ get_selected_frame (), regnum, fpregs);
+ continue;
+ }
+ }
+@@ -1684,7 +1680,7 @@ registers_info (char *addr_exp, int fpre
+ if (gdbarch_register_reggroup_p (current_gdbarch, regnum,
+ group))
+ gdbarch_print_registers_info (current_gdbarch,
+- gdb_stdout, deprecated_selected_frame,
++ gdb_stdout, get_selected_frame (),
+ regnum, fpregs);
+ }
+ continue;
+@@ -1714,8 +1710,6 @@ print_vector_info (struct gdbarch *gdbar
+ {
+ if (!target_has_registers)
+ error ("The program has no registers now.");
+- if (deprecated_selected_frame == NULL)
+- error ("No selected frame.");
+
+ if (gdbarch_print_vector_info_p (gdbarch))
+ gdbarch_print_vector_info (gdbarch, file, frame, args);
+@@ -1740,7 +1734,7 @@ print_vector_info (struct gdbarch *gdbar
+ static void
+ vector_info (char *args, int from_tty)
+ {
+- print_vector_info (current_gdbarch, gdb_stdout, deprecated_selected_frame, args);
++ print_vector_info (current_gdbarch, gdb_stdout, get_selected_frame (), args);
+ }
+
+
+@@ -1910,8 +1904,6 @@ print_float_info (struct gdbarch *gdbarc
+ {
+ if (!target_has_registers)
+ error ("The program has no registers now.");
+- if (deprecated_selected_frame == NULL)
+- error ("No selected frame.");
+
+ if (gdbarch_print_float_info_p (gdbarch))
+ gdbarch_print_float_info (gdbarch, file, frame, args);
+@@ -1937,7 +1929,7 @@ No floating-point info available for thi
+ static void
+ float_info (char *args, int from_tty)
+ {
+- print_float_info (current_gdbarch, gdb_stdout, deprecated_selected_frame, args);
++ print_float_info (current_gdbarch, gdb_stdout, get_selected_frame (), args);
+ }
+
+ static void
+Index: gdb-6.3/gdb/inflow.c
+===================================================================
+--- gdb-6.3.orig/gdb/inflow.c 2004-08-11 05:00:57.000000000 -0400
++++ gdb-6.3/gdb/inflow.c 2004-11-09 22:58:37.488338883 -0500
+@@ -591,10 +591,7 @@ kill_command (char *arg, int from_tty)
+ if (target_has_stack)
+ {
+ printf_filtered ("In %s,\n", target_longname);
+- if (deprecated_selected_frame == NULL)
+- fputs_filtered ("No selected stack frame.\n", gdb_stdout);
+- else
+- print_stack_frame (get_selected_frame (), 1, SRC_AND_LOC);
++ print_stack_frame (get_selected_frame (), 1, SRC_AND_LOC);
+ }
+ bfd_cache_close_all ();
+ }
+Index: gdb-6.3/gdb/infrun.c
+===================================================================
+--- gdb-6.3.orig/gdb/infrun.c 2004-09-27 13:58:08.000000000 -0400
++++ gdb-6.3/gdb/infrun.c 2004-11-09 22:51:07.351240752 -0500
+@@ -3485,7 +3485,7 @@ save_inferior_status (int restore_stack_
+
+ inf_status->registers = regcache_dup (current_regcache);
+
+- inf_status->selected_frame_id = get_frame_id (deprecated_selected_frame);
++ inf_status->selected_frame_id = get_frame_id (get_selected_frame ());
+ return inf_status;
+ }
+
+Index: gdb-6.3/gdb/mi/mi-main.c
+===================================================================
+--- gdb-6.3.orig/gdb/mi/mi-main.c 2004-09-12 11:00:42.000000000 -0400
++++ gdb-6.3/gdb/mi/mi-main.c 2004-11-09 22:53:29.998389013 -0500
+@@ -388,7 +388,7 @@ register_changed_p (int regnum)
+ {
+ char raw_buffer[MAX_REGISTER_SIZE];
+
+- if (! frame_register_read (deprecated_selected_frame, regnum, raw_buffer))
++ if (! frame_register_read (get_selected_frame (), regnum, raw_buffer))
+ return -1;
+
+ if (memcmp (&old_regs[DEPRECATED_REGISTER_BYTE (regnum)], raw_buffer,
+@@ -509,7 +509,7 @@ get_register (int regnum, int format)
+ if (format == 'N')
+ format = 0;
+
+- frame_register (deprecated_selected_frame, regnum, &optim, &lval, &addr,
++ frame_register (get_selected_frame (), regnum, &optim, &lval, &addr,
+ &realnum, buffer);
+
+ if (optim)
+Index: gdb-6.3/gdb/mn10300-tdep.c
+===================================================================
+--- gdb-6.3.orig/gdb/mn10300-tdep.c 2004-08-02 22:02:22.000000000 -0400
++++ gdb-6.3/gdb/mn10300-tdep.c 2004-11-09 22:51:07.356239776 -0500
+@@ -1154,7 +1154,7 @@ mn10300_print_register (const char *name
+ printf_filtered ("%s: ", name);
+
+ /* Get the data */
+- if (!frame_register_read (deprecated_selected_frame, regnum, raw_buffer))
++ if (!frame_register_read (get_selected_frame (), regnum, raw_buffer))
+ {
+ printf_filtered ("[invalid]");
+ return;
+Index: gdb-6.3/gdb/stack.c
+===================================================================
+--- gdb-6.3.orig/gdb/stack.c 2004-08-02 20:57:26.000000000 -0400
++++ gdb-6.3/gdb/stack.c 2004-11-09 22:51:07.361238800 -0500
+@@ -758,9 +758,7 @@ parse_frame_specification (char *frame_e
+ switch (numargs)
+ {
+ case 0:
+- if (deprecated_selected_frame == NULL)
+- error ("No selected frame.");
+- return deprecated_selected_frame;
++ return get_selected_frame ();
+ /* NOTREACHED */
+ case 1:
+ {
+@@ -902,10 +900,10 @@ frame_info (char *addr_exp, int from_tty
+ }
+ calling_frame_info = get_prev_frame (fi);
+
+- if (!addr_exp && frame_relative_level (deprecated_selected_frame) >= 0)
++ if (!addr_exp && frame_relative_level (get_selected_frame ()) >= 0)
+ {
+ printf_filtered ("Stack level %d, frame at ",
+- frame_relative_level (deprecated_selected_frame));
++ frame_relative_level (get_selected_frame ()));
+ print_address_numeric (get_frame_base (fi), 1, gdb_stdout);
+ printf_filtered (":\n");
+ }
+@@ -1445,9 +1443,7 @@ print_frame_label_vars (struct frame_inf
+ void
+ locals_info (char *args, int from_tty)
+ {
+- if (!deprecated_selected_frame)
+- error ("No frame selected.");
+- print_frame_local_vars (deprecated_selected_frame, 0, gdb_stdout);
++ print_frame_local_vars (get_selected_frame (), 0, gdb_stdout);
+ }
+
+ static void
+@@ -1470,7 +1466,7 @@ catch_info (char *ignore, int from_tty)
+ if (!deprecated_selected_frame)
+ error ("No frame selected.");
+
+- print_frame_label_vars (deprecated_selected_frame, 0, gdb_stdout);
++ print_frame_label_vars (get_selected_frame (), 0, gdb_stdout);
+ }
+ }
+
+@@ -1537,9 +1533,7 @@ print_frame_arg_vars (struct frame_info
+ void
+ args_info (char *ignore, int from_tty)
+ {
+- if (!deprecated_selected_frame)
+- error ("No frame selected.");
+- print_frame_arg_vars (deprecated_selected_frame, gdb_stdout);
++ print_frame_arg_vars (get_selected_frame (), gdb_stdout);
+ }
+
+
+@@ -1724,7 +1718,7 @@ down_silently_base (char *count_exp)
+ if (target_has_stack == 0 || deprecated_selected_frame == 0)
+ error ("No stack.");
+
+- frame = find_relative_frame (deprecated_selected_frame, &count1);
++ frame = find_relative_frame (get_selected_frame (), &count1);
+ if (count1 != 0 && count_exp == 0)
+ {
+
+@@ -1944,7 +1938,7 @@ func_command (char *arg, int from_tty)
+
+ if (!found)
+ printf_filtered ("'%s' not within current stack frame.\n", arg);
+- else if (fp != deprecated_selected_frame)
++ else if (fp != get_selected_frame ())
+ select_and_print_frame (fp);
+ }
+
+@@ -1965,7 +1959,7 @@ get_frame_language (void)
+ instruction of another function. So we rely on
+ get_frame_address_in_block(), it provides us with a PC which is
+ guaranteed to be inside the frame's code block. */
+- s = find_pc_symtab (get_frame_address_in_block (deprecated_selected_frame));
++ s = find_pc_symtab (get_frame_address_in_block (get_selected_frame ()));
+ if (s)
+ flang = s->language;
+ else
+Index: gdb-6.3/gdb/tui/tui-disasm.c
+===================================================================
+--- gdb-6.3.orig/gdb/tui/tui-disasm.c 2004-02-24 20:10:01.000000000 -0500
++++ gdb-6.3/gdb/tui/tui-disasm.c 2004-11-09 22:51:07.370237044 -0500
+@@ -382,7 +382,7 @@ tui_vertical_disassem_scroll (enum tui_s
+
+ content = (tui_win_content) TUI_DISASM_WIN->generic.content;
+ if (cursal.symtab == (struct symtab *) NULL)
+- s = find_pc_symtab (get_frame_pc (deprecated_selected_frame));
++ s = find_pc_symtab (get_frame_pc (get_selected_frame ()));
+ else
+ s = cursal.symtab;
+
+Index: gdb-6.3/gdb/tui/tui-source.c
+===================================================================
+--- gdb-6.3.orig/gdb/tui/tui-source.c 2004-02-16 16:05:09.000000000 -0500
++++ gdb-6.3/gdb/tui/tui-source.c 2004-11-09 22:51:07.370237044 -0500
+@@ -326,7 +326,7 @@ tui_vertical_source_scroll (enum tui_scr
+ struct symtab_and_line cursal = get_current_source_symtab_and_line ();
+
+ if (cursal.symtab == (struct symtab *) NULL)
+- s = find_pc_symtab (get_frame_pc (deprecated_selected_frame));
++ s = find_pc_symtab (get_frame_pc (get_selected_frame ()));
+ else
+ s = cursal.symtab;
+
+Index: gdb-6.3/gdb/tui/tui-winsource.c
+===================================================================
+--- gdb-6.3.orig/gdb/tui/tui-winsource.c 2004-02-16 16:05:09.000000000 -0500
++++ gdb-6.3/gdb/tui/tui-winsource.c 2004-11-09 22:51:07.371236848 -0500
+@@ -311,7 +311,7 @@ tui_horizontal_source_scroll (struct tui
+ struct symtab_and_line cursal = get_current_source_symtab_and_line ();
+
+ if (cursal.symtab == (struct symtab *) NULL)
+- s = find_pc_symtab (get_frame_pc (deprecated_selected_frame));
++ s = find_pc_symtab (get_frame_pc (get_selected_frame ()));
+ else
+ s = cursal.symtab;
+
+Index: gdb-6.3/gdb/valops.c
+===================================================================
+--- gdb-6.3.orig/gdb/valops.c 2004-09-13 23:01:48.000000000 -0400
++++ gdb-6.3/gdb/valops.c 2004-11-09 22:51:07.374236263 -0500
+@@ -2663,15 +2663,10 @@ value_of_local (const char *name, int co
+ struct block *b;
+ struct value * ret;
+
+- if (deprecated_selected_frame == 0)
+- {
+- if (complain)
+- error ("no frame selected");
+- else
+- return 0;
+- }
++ if (!complain && deprecated_selected_frame == 0)
++ return 0;
+
+- func = get_frame_function (deprecated_selected_frame);
++ func = get_frame_function (get_selected_frame ());
+ if (!func)
+ {
+ if (complain)
+@@ -2700,7 +2695,7 @@ value_of_local (const char *name, int co
+ return NULL;
+ }
+
+- ret = read_var_value (sym, deprecated_selected_frame);
++ ret = read_var_value (sym, get_selected_frame ());
+ if (ret == 0 && complain)
+ error ("`%s' argument unreadable", name);
+ return ret;
+Index: gdb-6.3/gdb/varobj.c
+===================================================================
+--- gdb-6.3.orig/gdb/varobj.c 2004-07-26 10:53:06.000000000 -0400
++++ gdb-6.3/gdb/varobj.c 2004-11-09 22:51:07.377235677 -0500
+@@ -488,7 +488,7 @@ varobj_create (char *objname,
+ if (fi != NULL)
+ {
+ var->root->frame = get_frame_id (fi);
+- old_fi = deprecated_selected_frame;
++ old_fi = get_selected_frame ();
+ select_frame (fi);
+ }
+
+Index: gdb-6.3/gdb/testsuite/gdb.base/default.exp
+===================================================================
+--- gdb-6.3.orig/gdb/testsuite/gdb.base/default.exp 2003-03-20 09:45:50.000000000 -0500
++++ gdb-6.3/gdb/testsuite/gdb.base/default.exp 2004-11-09 22:51:07.379235287 -0500
+@@ -167,7 +167,7 @@ gdb_test "disable breakpoints" "" "disab
+ #test disable display
+ gdb_test "disable display" "" "disable display"
+ #test disassemble
+-gdb_test "disassemble" "No frame selected." "disassemble"
++gdb_test "disassemble" "No (frame selected|registers)." "disassemble"
+ #test display
+ gdb_test "display" "" "display"
+ #test do
+@@ -229,9 +229,9 @@ gdb_expect {
+ }
+
+ #test frame "f" abbreviation
+-gdb_test "f" "No stack." "frame \"f\" abbreviation"
++gdb_test "f" "No (stack|registers)." "frame \"f\" abbreviation"
+ #test frame
+-gdb_test "frame" "No stack." "frame"
++gdb_test "frame" "No (stack|registers)." "frame"
+ #test fg
+ gdb_test "fg" "The program is not being run." "fg"
+ # FIXME: fg kills the udi connection
+@@ -294,9 +294,9 @@ gdb_test "ignore" "Argument required .a
+ #test info address
+ gdb_test "info address" "Argument required." "info address"
+ #test info all-registers
+-gdb_test "info all-registers" "The program has no registers now." "info all-registers"
++gdb_test "info all-registers" "(The program has no registers now|No registers)." "info all-registers"
+ #test info args
+-gdb_test "info args" "No frame selected." "info args"
++gdb_test "info args" "No (frame selected|registers)." "info args"
+ #test info bogus-gdb-command
+ gdb_test "info bogus-gdb-command" "Undefined info command: \"bogus-gdb-command\". Try \"help info\".*" "info bogus-gdb-command"
+ #test info breakpoints
+@@ -320,11 +320,11 @@ gdb_test "info frame" "No stack.|No sele
+ #test info files
+ gdb_test "info files" "" "info files"
+ #test info float
+-gdb_test "info float" "The program has no registers now." "info float"
++gdb_test "info float" "(The program has no registers now|No registers)." "info float"
+ #test info functions
+ gdb_test "info functions" "All defined functions:" "info functions"
+ #test info locals
+-gdb_test "info locals" "No frame selected." "info locals"
++gdb_test "info locals" "(No frame selected|No registers)." "info locals"
+ #test info program
+ gdb_test "info program" "The program being debugged is not being run." "info program"
+ #test info registers
+@@ -352,7 +352,7 @@ gdb_test "info types" "All defined types
+ #test info variables
+ gdb_test "info variables" "All defined variables:" "info variables"
+ #test info vector
+-gdb_test "info vector" "The program has no registers now." "info vector"
++gdb_test "info vector" "(The program has no registers now|No registers)." "info vector"
+ #test info warranty
+ gdb_test "info warranty" "NO WARRANTY(\[^\r\n\]*\[\r\n\])+ *11. *BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY(\[^\r\n\]*\[\r\n\])+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN(\[^\r\n\]*\[\r\n\])+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES(\[^\r\n\]*\[\r\n\])+PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED(\[^\r\n\]*\[\r\n\])+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF(\[^\r\n\]*\[\r\n\])+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS(\[^\r\n\]*\[\r\n\])+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE(\[^\r\n\]*\[\r\n\])+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,(\[^\r\n\]*\[\r\n\])+REPAIR OR CORRECTION.(\[^\r\n\]*\[\r\n\])+ *12. *IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING(\[^\r\n\]*\[\r\n\])+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR(\[^\r\n\]*\[\r\n\])+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,(\[^\r\n\]*\[\r\n\])+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING(\[^\r\n\]*\[\r\n\])+OUT OF THE USE OR INABILITY TO USE THE PROGRAM .INCLUDING BUT NOT LIMITED(\[^\r\n\]*\[\r\n\])+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY(\[^\r\n\]*\[\r\n\])+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER(\[^\r\n\]*\[\r\n\])+PROGRAMS., EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE(\[^\r\n\]*\[\r\n\])+POSSIBILITY OF SUCH DAMAGES.*" "info warranty"
+ #test info watchpoints
diff --git a/toolchain/gdb/patches/620-debian_static-thread-db.patch b/toolchain/gdb/patches/620-debian_static-thread-db.patch
new file mode 100644
index 0000000000..c5ac5a6237
--- /dev/null
+++ b/toolchain/gdb/patches/620-debian_static-thread-db.patch
@@ -0,0 +1,156 @@
+Status: submitted similar patch 2004-12-08
+
+This patch cleans up the initialization of thread_db. It works for static
+binaries now. The vsyscall patches hide this problem, since new static
+binaries will load the vsyscall DSO and then trigger thread_db; but
+this is still a good cleanup.
+
+Index: gdb-6.3/gdb/thread-db.c
+===================================================================
+--- gdb-6.3.orig/gdb/thread-db.c 2004-10-08 16:29:56.000000000 -0400
++++ gdb-6.3/gdb/thread-db.c 2004-11-10 00:19:30.626530413 -0500
+@@ -34,6 +34,7 @@
+ #include "target.h"
+ #include "regcache.h"
+ #include "solib-svr4.h"
++#include "observer.h"
+
+ #ifdef HAVE_GNU_LIBC_VERSION_H
+ #include <gnu/libc-version.h>
+@@ -627,59 +628,49 @@ check_thread_signals (void)
+ #endif
+ }
+
++/* Check whether thread_db is usable. This function is called when
++ an inferior is created (or otherwise acquired, e.g. attached to)
++ and when new shared libraries are loaded into a running process. */
++
+ static void
+-thread_db_new_objfile (struct objfile *objfile)
++check_for_thread_db (void)
+ {
+ td_err_e err;
++ static int already_loaded;
+
+ /* First time through, report that libthread_db was successfuly
+ loaded. Can't print this in in thread_db_load as, at that stage,
+- the interpreter and it's console haven't started. The real
+- problem here is that libthread_db is loaded too early - it should
+- only be loaded when there is a program to debug. */
+- {
+- static int dejavu;
+- if (!dejavu)
+- {
+- Dl_info info;
+- const char *library = NULL;
+- /* Try dladdr. */
+- if (dladdr ((*td_ta_new_p), &info) != 0)
+- library = info.dli_fname;
+- /* Try dlinfo? */
+- if (library == NULL)
+- /* Paranoid - don't let a NULL path slip through. */
+- library = LIBTHREAD_DB_SO;
+- printf_unfiltered ("Using host libthread_db library \"%s\".\n",
+- library);
+- dejavu = 1;
+- }
+- }
++ the interpreter and it's console haven't started. */
+
+- /* Don't attempt to use thread_db on targets which can not run
+- (core files). */
+- if (objfile == NULL || !target_has_execution)
++ if (!already_loaded)
+ {
+- /* All symbols have been discarded. If the thread_db target is
+- active, deactivate it now. */
+- if (using_thread_db)
+- {
+- gdb_assert (proc_handle.pid == 0);
+- unpush_target (&thread_db_ops);
+- using_thread_db = 0;
+- }
++ Dl_info info;
++ const char *library = NULL;
++ if (dladdr ((*td_ta_new_p), &info) != 0)
++ library = info.dli_fname;
++
++ /* Try dlinfo? */
+
+- goto quit;
++ if (library == NULL)
++ /* Paranoid - don't let a NULL path slip through. */
++ library = LIBTHREAD_DB_SO;
++
++ printf_unfiltered ("Using host libthread_db library \"%s\".\n",
++ library);
++ already_loaded = 1;
+ }
+
+ if (using_thread_db)
+ /* Nothing to do. The thread library was already detected and the
+ target vector was already activated. */
+- goto quit;
++ return;
++
++ /* Don't attempt to use thread_db on targets which can not run
++ (executables not running yet, core files) for now. */
++ if (!target_has_execution)
++ return;
+
+- /* Initialize the structure that identifies the child process. Note
+- that at this point there is no guarantee that we actually have a
+- child process. */
++ /* Initialize the structure that identifies the child process. */
+ proc_handle.pid = GET_PID (inferior_ptid);
+
+ /* Now attempt to open a connection to the thread library. */
+@@ -706,12 +697,24 @@ thread_db_new_objfile (struct objfile *o
+ thread_db_err_str (err));
+ break;
+ }
++}
++
++static void
++thread_db_new_objfile (struct objfile *objfile)
++{
++ if (objfile != NULL)
++ check_for_thread_db ();
+
+-quit:
+ if (target_new_objfile_chain)
+ target_new_objfile_chain (objfile);
+ }
+
++static void
++check_for_thread_db_observer (struct target_ops *target, int from_tty)
++{
++ check_for_thread_db ();
++}
++
+ /* Attach to a new thread. This function is called when we receive a
+ TD_CREATE event or when we iterate over all threads and find one
+ that wasn't already in our list. */
+@@ -1366,5 +1369,8 @@ _initialize_thread_db (void)
+ /* Add ourselves to objfile event chain. */
+ target_new_objfile_chain = deprecated_target_new_objfile_hook;
+ deprecated_target_new_objfile_hook = thread_db_new_objfile;
++
++ /* Register ourselves for the new inferior observer. */
++ observer_attach_inferior_created (check_for_thread_db_observer);
+ }
+ }
+Index: gdb-6.3/gdb/Makefile.in
+===================================================================
+--- gdb-6.3.orig/gdb/Makefile.in 2004-11-09 23:04:57.000000000 -0500
++++ gdb-6.3/gdb/Makefile.in 2004-11-10 00:19:26.440347022 -0500
+@@ -2626,7 +2626,8 @@ thread.o: thread.c $(defs_h) $(symtab_h)
+ $(gdbcmd_h) $(regcache_h) $(gdb_h) $(gdb_string_h) $(ui_out_h)
+ thread-db.o: thread-db.c $(defs_h) $(gdb_assert_h) $(gdb_proc_service_h) \
+ $(gdb_thread_db_h) $(bfd_h) $(gdbthread_h) $(inferior_h) \
+- $(symfile_h) $(objfiles_h) $(target_h) $(regcache_h) $(solib_svr4_h)
++ $(symfile_h) $(objfiles_h) $(target_h) $(regcache_h) $(solib_svr4_h) \
++ $(observer_h)
+ top.o: top.c $(defs_h) $(gdbcmd_h) $(call_cmds_h) $(cli_cmds_h) \
+ $(cli_script_h) $(cli_setshow_h) $(cli_decode_h) $(symtab_h) \
+ $(inferior_h) $(target_h) $(breakpoint_h) $(gdbtypes_h) \
diff --git a/toolchain/gdb/patches/630-debian_24.tracepoint-segv.patch b/toolchain/gdb/patches/630-debian_24.tracepoint-segv.patch
new file mode 100644
index 0000000000..d038ff8ecc
--- /dev/null
+++ b/toolchain/gdb/patches/630-debian_24.tracepoint-segv.patch
@@ -0,0 +1,15 @@
+Trivial. Still need to submit this.
+
+Index: gdb-6.1/gdb/tracepoint.c
+===================================================================
+--- gdb-6.1.orig/gdb/tracepoint.c 2004-04-05 13:26:43.000000000 -0400
++++ gdb-6.1/gdb/tracepoint.c 2004-04-05 13:26:45.000000000 -0400
+@@ -853,6 +853,8 @@ read_actions (struct tracepoint *t)
+ else
+ line = gdb_readline (0);
+
++ if (line == NULL || *line == EOF)
++ break;
+ linetype = validate_actionline (&line, t);
+ if (linetype == BADLINE)
+ continue; /* already warned -- collect another line */
diff --git a/toolchain/gdb/patches/640-debian_dwarf2-frame-signal-unwinder.patch b/toolchain/gdb/patches/640-debian_dwarf2-frame-signal-unwinder.patch
new file mode 100644
index 0000000000..246427ee6f
--- /dev/null
+++ b/toolchain/gdb/patches/640-debian_dwarf2-frame-signal-unwinder.patch
@@ -0,0 +1,120 @@
+Status: Checked in to HEAD after 6.3.
+
+2004-11-07 Daniel Jacobowitz <dan@debian.org>
+
+ * dwarf2-frame.c (struct dwarf2_frame_ops): Add signal_frame_p.
+ (dwarf2_frame_set_signal_frame_p, dwarf2_frame_signal_frame_p)
+ (dwarf2_signal_frame_unwind): New.
+ (dwarf2_frame_sniffer): Use dwarf2_frame_signal_frame_p.
+ * dwarf2-frame.h (dwarf2_frame_set_signal_frame_p): New prototype.
+
+Index: src/gdb/dwarf2-frame.c
+===================================================================
+RCS file: /big/fsf/rsync/src-cvs/src/gdb/dwarf2-frame.c,v
+retrieving revision 1.41
+diff -u -p -r1.41 dwarf2-frame.c
+--- src/gdb/dwarf2-frame.c 4 Nov 2004 21:15:15 -0000 1.41
++++ src/gdb/dwarf2-frame.c 7 Nov 2004 17:41:58 -0000
+@@ -471,6 +471,10 @@ struct dwarf2_frame_ops
+ {
+ /* Pre-initialize the register state REG for register REGNUM. */
+ void (*init_reg) (struct gdbarch *, int, struct dwarf2_frame_state_reg *);
++
++ /* Check whether the frame preceding NEXT_FRAME will be a signal
++ trampoline. */
++ int (*signal_frame_p) (struct gdbarch *, struct frame_info *);
+ };
+
+ /* Default architecture-specific register state initialization
+@@ -547,6 +551,33 @@ dwarf2_frame_init_reg (struct gdbarch *g
+
+ ops->init_reg (gdbarch, regnum, reg);
+ }
++
++/* Set the architecture-specific signal trampoline recognition
++ function for GDBARCH to SIGNAL_FRAME_P. */
++
++void
++dwarf2_frame_set_signal_frame_p (struct gdbarch *gdbarch,
++ int (*signal_frame_p) (struct gdbarch *,
++ struct frame_info *))
++{
++ struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
++
++ ops->signal_frame_p = signal_frame_p;
++}
++
++/* Query the architecture-specific signal frame recognizer for
++ NEXT_FRAME. */
++
++static int
++dwarf2_frame_signal_frame_p (struct gdbarch *gdbarch,
++ struct frame_info *next_frame)
++{
++ struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
++
++ if (ops->signal_frame_p == NULL)
++ return 0;
++ return ops->signal_frame_p (gdbarch, next_frame);
++}
+
+
+ struct dwarf2_frame_cache
+@@ -841,6 +872,13 @@ static const struct frame_unwind dwarf2_
+ dwarf2_frame_prev_register
+ };
+
++static const struct frame_unwind dwarf2_signal_frame_unwind =
++{
++ SIGTRAMP_FRAME,
++ dwarf2_frame_this_id,
++ dwarf2_frame_prev_register
++};
++
+ const struct frame_unwind *
+ dwarf2_frame_sniffer (struct frame_info *next_frame)
+ {
+@@ -848,10 +886,18 @@ dwarf2_frame_sniffer (struct frame_info
+ function. frame_pc_unwind(), for a no-return next function, can
+ end up returning something past the end of this function's body. */
+ CORE_ADDR block_addr = frame_unwind_address_in_block (next_frame);
+- if (dwarf2_frame_find_fde (&block_addr))
+- return &dwarf2_frame_unwind;
++ if (!dwarf2_frame_find_fde (&block_addr))
++ return NULL;
+
+- return NULL;
++ /* On some targets, signal trampolines may have unwind information.
++ We need to recognize them so that we set the frame type
++ correctly. */
++
++ if (dwarf2_frame_signal_frame_p (get_frame_arch (next_frame),
++ next_frame))
++ return &dwarf2_signal_frame_unwind;
++
++ return &dwarf2_frame_unwind;
+ }
+
+
+Index: src/gdb/dwarf2-frame.h
+===================================================================
+RCS file: /big/fsf/rsync/src-cvs/src/gdb/dwarf2-frame.h,v
+retrieving revision 1.6
+diff -u -p -r1.6 dwarf2-frame.h
+--- src/gdb/dwarf2-frame.h 28 Feb 2004 16:59:32 -0000 1.6
++++ src/gdb/dwarf2-frame.h 7 Nov 2004 17:40:41 -0000
+@@ -79,6 +79,14 @@ extern void dwarf2_frame_set_init_reg (s
+ void (*init_reg) (struct gdbarch *, int,
+ struct dwarf2_frame_state_reg *));
+
++/* Set the architecture-specific signal trampoline recognition
++ function for GDBARCH to SIGNAL_FRAME_P. */
++
++extern void
++ dwarf2_frame_set_signal_frame_p (struct gdbarch *gdbarch,
++ int (*signal_frame_p) (struct gdbarch *,
++ struct frame_info *));
++
+ /* Return the frame unwind methods for the function that contains PC,
+ or NULL if it can't be handled by DWARF CFI frame unwinder. */
+
diff --git a/toolchain/gdb/patches/650-debian_vsyscall-gdb-support.patch b/toolchain/gdb/patches/650-debian_vsyscall-gdb-support.patch
new file mode 100644
index 0000000000..e725f9c549
--- /dev/null
+++ b/toolchain/gdb/patches/650-debian_vsyscall-gdb-support.patch
@@ -0,0 +1,245 @@
+Status: Checked in to HEAD after 6.3.
+
+2004-11-07 Andrew Cagney <cagney@redhat.com>
+ Daniel Jacobowitz <dan@debian.org>
+ Roland McGrath <roland@redhat.com>
+
+ * Makefile.in (symfile-mem.o): Update dependencies.
+ * i386-linux-tdep.c (i386_linux_dwarf_signal_frame_p): New.
+ (i386_linux_init_abi): Call dwarf2_frame_set_signal_frame_p.
+ * inf-ptrace.c (inf_ptrace_attach): Call
+ observer_notify_inferior_created.
+ * inftarg.c (child_attach): Likewise.
+ * symfile-mem.c: Include "observer.h", "auxv.h", and "elf/common.h".
+ (symbol_file_add_from_memory): Take NAME argument. Use it for
+ the new BFD's filename.
+ (add_symbol_file_from_memory_command): Update call to
+ symbol_file_add_from_memory.
+ (struct symbol_file_add_from_memory_args, add_vsyscall_page)
+ (symbol_file_add_from_memory_wrapper): New.
+ (_initialize_symfile_mem): Register add_vsyscall_page as an
+ inferior_created observer.
+
+Index: gdb-6.3/gdb/i386-linux-tdep.c
+===================================================================
+--- gdb-6.3.orig/gdb/i386-linux-tdep.c 2004-08-06 16:58:28.000000000 -0400
++++ gdb-6.3/gdb/i386-linux-tdep.c 2004-11-10 00:55:06.669398770 -0500
+@@ -27,6 +27,7 @@
+ #include "inferior.h"
+ #include "osabi.h"
+ #include "reggroups.h"
++#include "dwarf2-frame.h"
+
+ #include "gdb_string.h"
+
+@@ -244,6 +245,27 @@ i386_linux_sigtramp_p (struct frame_info
+ || strcmp ("__restore_rt", name) == 0);
+ }
+
++/* Return one if the unwound PC from NEXT_FRAME is in a signal trampoline
++ which may have DWARF-2 CFI. */
++
++static int
++i386_linux_dwarf_signal_frame_p (struct gdbarch *gdbarch,
++ struct frame_info *next_frame)
++{
++ CORE_ADDR pc = frame_pc_unwind (next_frame);
++ char *name;
++
++ find_pc_partial_function (pc, &name, NULL, NULL);
++
++ /* If a vsyscall DSO is in use, the signal trampolines may have these
++ names. */
++ if (name && (strcmp (name, "__kernel_sigreturn") == 0
++ || strcmp (name, "__kernel_rt_sigreturn") == 0))
++ return 1;
++
++ return 0;
++}
++
+ /* Offset to struct sigcontext in ucontext, from <asm/ucontext.h>. */
+ #define I386_LINUX_UCONTEXT_SIGCONTEXT_OFFSET 20
+
+@@ -414,6 +436,8 @@ i386_linux_init_abi (struct gdbarch_info
+
+ /* GNU/Linux uses the dynamic linker included in the GNU C Library. */
+ set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
++
++ dwarf2_frame_set_signal_frame_p (gdbarch, i386_linux_dwarf_signal_frame_p);
+ }
+
+ /* Provide a prototype to silence -Wmissing-prototypes. */
+Index: gdb-6.3/gdb/inf-ptrace.c
+===================================================================
+--- gdb-6.3.orig/gdb/inf-ptrace.c 2004-10-15 09:29:33.000000000 -0400
++++ gdb-6.3/gdb/inf-ptrace.c 2004-11-10 00:53:43.697615843 -0500
+@@ -220,6 +220,10 @@ inf_ptrace_attach (char *args, int from_
+
+ inferior_ptid = pid_to_ptid (pid);
+ push_target (ptrace_ops_hack);
++
++ /* Do this first, before anything has had a chance to query the
++ inferior's symbol table or similar. */
++ observer_notify_inferior_created (&current_target, from_tty);
+ }
+
+ static void
+Index: gdb-6.3/gdb/inftarg.c
+===================================================================
+--- gdb-6.3.orig/gdb/inftarg.c 2004-10-08 16:29:47.000000000 -0400
++++ gdb-6.3/gdb/inftarg.c 2004-11-10 00:53:43.711613107 -0500
+@@ -211,6 +211,10 @@ child_attach (char *args, int from_tty)
+
+ inferior_ptid = pid_to_ptid (pid);
+ push_target (&deprecated_child_ops);
++
++ /* Do this first, before anything has had a chance to query the
++ inferior's symbol table or similar. */
++ observer_notify_inferior_created (&current_target, from_tty);
+ }
+
+ #if !defined(CHILD_POST_ATTACH)
+Index: gdb-6.3/gdb/symfile-mem.c
+===================================================================
+--- gdb-6.3.orig/gdb/symfile-mem.c 2004-07-17 10:24:07.000000000 -0400
++++ gdb-6.3/gdb/symfile-mem.c 2004-11-10 00:53:43.722610958 -0500
+@@ -52,13 +52,19 @@
+ #include "target.h"
+ #include "value.h"
+ #include "symfile.h"
++#include "observer.h"
++#include "auxv.h"
++#include "elf/common.h"
+
+
+ /* Read inferior memory at ADDR to find the header of a loaded object file
+ and read its in-core symbols out of inferior memory. TEMPL is a bfd
+- representing the target's format. */
++ representing the target's format. NAME is the name to use for this
++ symbol file in messages; it can be NULL or a malloc-allocated string
++ which will be attached to the BFD. */
+ static struct objfile *
+-symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, int from_tty)
++symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, char *name,
++ int from_tty)
+ {
+ struct objfile *objf;
+ struct bfd *nbfd;
+@@ -75,7 +81,10 @@ symbol_file_add_from_memory (struct bfd
+ if (nbfd == NULL)
+ error ("Failed to read a valid object file image from memory.");
+
+- nbfd->filename = xstrdup ("shared object read from target memory");
++ if (name == NULL)
++ nbfd->filename = xstrdup ("shared object read from target memory");
++ else
++ nbfd->filename = name;
+
+ if (!bfd_check_format (nbfd, bfd_object))
+ {
+@@ -129,7 +138,73 @@ add_symbol_file_from_memory_command (cha
+ error ("\
+ Must use symbol-file or exec-file before add-symbol-file-from-memory.");
+
+- symbol_file_add_from_memory (templ, addr, from_tty);
++ symbol_file_add_from_memory (templ, addr, NULL, from_tty);
++}
++
++/* Arguments for symbol_file_add_from_memory_wrapper. */
++
++struct symbol_file_add_from_memory_args
++{
++ struct bfd *bfd;
++ CORE_ADDR sysinfo_ehdr;
++ char *name;
++ int from_tty;
++};
++
++/* Wrapper function for symbol_file_add_from_memory, for
++ catch_exceptions. */
++
++static int
++symbol_file_add_from_memory_wrapper (struct ui_out *uiout, void *data)
++{
++ struct symbol_file_add_from_memory_args *args = data;
++
++ symbol_file_add_from_memory (args->bfd, args->sysinfo_ehdr, args->name,
++ args->from_tty);
++ return 0;
++}
++
++/* Try to add the symbols for the vsyscall page, if there is one. This function
++ is called via the inferior_created observer. */
++
++static void
++add_vsyscall_page (struct target_ops *target, int from_tty)
++{
++ CORE_ADDR sysinfo_ehdr;
++
++ if (target_auxv_search (target, AT_SYSINFO_EHDR, &sysinfo_ehdr) > 0
++ && sysinfo_ehdr != (CORE_ADDR) 0)
++ {
++ struct bfd *bfd;
++ struct symbol_file_add_from_memory_args args;
++
++ if (core_bfd != NULL)
++ bfd = core_bfd;
++ else if (exec_bfd != NULL)
++ bfd = exec_bfd;
++ else
++ /* FIXME: cagney/2004-05-06: Should not require an existing
++ BFD when trying to create a run-time BFD of the VSYSCALL
++ page in the inferior. Unfortunately that's the current
++ interface so for the moment bail. Introducing a
++ ``bfd_runtime'' (a BFD created using the loaded image) file
++ format should fix this. */
++ {
++ warning ("could not load vsyscall page because no executable was specified");
++ warning ("try using the \"file\" command first");
++ return;
++ }
++ args.bfd = bfd;
++ args.sysinfo_ehdr = sysinfo_ehdr;
++ xasprintf (&args.name, "system-supplied DSO at 0x%s",
++ paddr_nz (sysinfo_ehdr));
++ /* Pass zero for FROM_TTY, because the action of loading the
++ vsyscall DSO was not triggered by the user, even if the user
++ typed "run" at the TTY. */
++ args.from_tty = 0;
++ catch_exceptions (uiout, symbol_file_add_from_memory_wrapper,
++ &args, NULL, RETURN_MASK_ALL);
++ }
+ }
+
+
+@@ -143,4 +218,7 @@ Load the symbols out of memory from a dy
+ Give an expression for the address of the file's shared object file header.",
+ &cmdlist);
+
++ /* Want to know of each new inferior so that its vsyscall info can
++ be extracted. */
++ observer_attach_inferior_created (add_vsyscall_page);
+ }
+Index: gdb-6.3/gdb/Makefile.in
+===================================================================
+--- gdb-6.3.orig/gdb/Makefile.in 2004-11-10 00:29:00.000000000 -0500
++++ gdb-6.3/gdb/Makefile.in 2004-11-10 00:54:47.728100986 -0500
+@@ -2020,7 +2020,7 @@ i386-linux-nat.o: i386-linux-nat.c $(def
+ i386-linux-tdep.o: i386-linux-tdep.c $(defs_h) $(gdbcore_h) $(frame_h) \
+ $(value_h) $(regcache_h) $(inferior_h) $(osabi_h) $(reggroups_h) \
+ $(gdb_string_h) $(i386_tdep_h) $(i386_linux_tdep_h) $(glibc_tdep_h) \
+- $(solib_svr4_h)
++ $(solib_svr4_h) $(dwarf2_frame_h)
+ i386ly-tdep.o: i386ly-tdep.c $(defs_h) $(gdbcore_h) $(inferior_h) \
+ $(regcache_h) $(target_h) $(osabi_h) $(i386_tdep_h)
+ i386-nat.o: i386-nat.c $(defs_h) $(breakpoint_h) $(command_h) $(gdbcmd_h)
+@@ -2606,7 +2606,8 @@ symfile.o: symfile.c $(defs_h) $(bfdlink
+ $(hashtab_h) $(readline_h) $(gdb_assert_h) $(block_h) \
+ $(gdb_string_h) $(gdb_stat_h)
+ symfile-mem.o: symfile-mem.c $(defs_h) $(symtab_h) $(gdbcore_h) \
+- $(objfiles_h) $(gdbcmd_h) $(target_h) $(value_h) $(symfile_h)
++ $(objfiles_h) $(gdbcmd_h) $(target_h) $(value_h) $(symfile_h) \
++ $(observer_h) $(auxv_h) $(elf_common_h)
+ symmisc.o: symmisc.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(bfd_h) \
+ $(symfile_h) $(objfiles_h) $(breakpoint_h) $(command_h) \
+ $(gdb_obstack_h) $(language_h) $(bcache_h) $(block_h) $(gdb_regex_h) \
diff --git a/toolchain/gdb/patches/660-debian_dwarf-cfa-restore.patch b/toolchain/gdb/patches/660-debian_dwarf-cfa-restore.patch
new file mode 100644
index 0000000000..8b81cca710
--- /dev/null
+++ b/toolchain/gdb/patches/660-debian_dwarf-cfa-restore.patch
@@ -0,0 +1,23 @@
+Status: Checked in to HEAD after 6.3.
+
+2004-11-09 Daniel Jacobowitz <dan@debian.org>
+
+ * dwarf2-frame.c (dwarf2_frame_state_alloc_regs): Correct allocated
+ size.
+
+Index: src/gdb/dwarf2-frame.c
+===================================================================
+RCS file: /cvs/src/src/gdb/dwarf2-frame.c,v
+retrieving revision 1.45
+diff -u -p -r1.45 dwarf2-frame.c
+--- src/gdb/dwarf2-frame.c 7 Nov 2004 21:16:11 -0000 1.45
++++ src/gdb/dwarf2-frame.c 9 Nov 2004 14:42:52 -0000
+@@ -162,7 +162,7 @@ dwarf2_frame_state_alloc_regs (struct dw
+ static struct dwarf2_frame_state_reg *
+ dwarf2_frame_state_copy_regs (struct dwarf2_frame_state_reg_info *rs)
+ {
+- size_t size = rs->num_regs * sizeof (struct dwarf2_frame_state_reg_info);
++ size_t size = rs->num_regs * sizeof (struct dwarf2_frame_state_reg);
+ struct dwarf2_frame_state_reg *reg;
+
+ reg = (struct dwarf2_frame_state_reg *) xmalloc (size);
diff --git a/toolchain/gdb/patches/680-debian_sim-destdir.patch b/toolchain/gdb/patches/680-debian_sim-destdir.patch
new file mode 100644
index 0000000000..71f60b5c67
--- /dev/null
+++ b/toolchain/gdb/patches/680-debian_sim-destdir.patch
@@ -0,0 +1,53 @@
+Fix some missing uses of DESTDIR in the sim/ directories. The Debian
+packages use DESTDIR to build.
+
+%patch
+Index: gdb-6.3/sim/Makefile.in
+===================================================================
+--- gdb-6.3.orig/sim/Makefile.in 2003-09-03 14:46:52.000000000 -0400
++++ gdb-6.3/sim/Makefile.in 2004-11-10 00:39:25.381315738 -0500
+@@ -93,6 +93,7 @@ FLAGS_TO_PASS = \
+ "CC=$(CC)" \
+ "CC_FOR_BUILD=$(CC_FOR_BUILD)" \
+ "CFLAGS=$(CFLAGS)" \
++ "DESTDIR=$(DESTDIR)" \
+ "RANLIB=$(RANLIB)" \
+ "MAKEINFO=$(MAKEINFO)" \
+ "INSTALL=$(INSTALL)" \
+Index: gdb-6.3/sim/common/Make-common.in
+===================================================================
+--- gdb-6.3.orig/sim/common/Make-common.in 2003-09-08 13:24:59.000000000 -0400
++++ gdb-6.3/sim/common/Make-common.in 2004-11-10 00:39:25.383315347 -0500
+@@ -581,14 +581,14 @@ install: install-common $(SIM_EXTRA_INST
+
+ install-common: installdirs
+ n=`echo run | sed '$(program_transform_name)'`; \
+- $(INSTALL_PROGRAM) run$(EXEEXT) $(bindir)/$$n$(EXEEXT)
++ $(INSTALL_PROGRAM) run$(EXEEXT) $(DESTDIR)$(bindir)/$$n$(EXEEXT)
+ n=`echo libsim.a | sed s/libsim.a/lib$(target_alias)-sim.a/`; \
+- $(INSTALL_DATA) libsim.a $(libdir)/$$n ; \
+- ( cd $(libdir) ; $(RANLIB) $$n )
++ $(INSTALL_DATA) libsim.a $(DESTDIR)$(libdir)/$$n ; \
++ ( cd $(DESTDIR)$(libdir) ; $(RANLIB) $$n )
+
+ installdirs:
+- $(SHELL) $(srcdir)/../../mkinstalldirs $(bindir)
+- $(SHELL) $(srcdir)/../../mkinstalldirs $(libdir)
++ $(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(bindir)
++ $(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(libdir)
+
+ check:
+ cd ../testsuite && $(MAKE) check RUNTESTFLAGS="$(RUNTESTFLAGS)"
+Index: gdb-6.3/sim/erc32/Makefile.in
+===================================================================
+--- gdb-6.3.orig/sim/erc32/Makefile.in 2000-03-07 10:32:49.000000000 -0500
++++ gdb-6.3/sim/erc32/Makefile.in 2004-11-10 00:39:25.385314957 -0500
+@@ -53,7 +53,7 @@ end.h: end
+ # Copy the files into directories where they will be run.
+ install-sis: installdirs
+ n=`echo sis | sed '$(program_transform_name)'`; \
+- $(INSTALL_PROGRAM) sis$(EXEEXT) $(bindir)/$$n$(EXEEXT)
++ $(INSTALL_PROGRAM) sis$(EXEEXT) $(DESTDIR)$(bindir)/$$n$(EXEEXT)
+
+ clean-sis:
+ rm -f sis end end.h
diff --git a/toolchain/gdb/patches/690-debian_member-field-symtab.patch b/toolchain/gdb/patches/690-debian_member-field-symtab.patch
new file mode 100644
index 0000000000..4f5fb45c33
--- /dev/null
+++ b/toolchain/gdb/patches/690-debian_member-field-symtab.patch
@@ -0,0 +1,35 @@
+Status: unsubmitted
+
+This patch was for Debian bug #239535. It needs to be tested, and
+submitted.
+
+Index: gdb-6.3/gdb/valops.c
+===================================================================
+--- gdb-6.3.orig/gdb/valops.c 2004-11-09 22:51:07.000000000 -0500
++++ gdb-6.3/gdb/valops.c 2004-11-10 00:43:54.036837699 -0500
+@@ -2314,8 +2314,10 @@ check_field_in (struct type *type, const
+ return 1;
+ }
+
++ /* Check each baseclass. Call check_typedef, which will follow typedefs
++ and do opaque/stub type resolution. */
+ for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
+- if (check_field_in (TYPE_BASECLASS (type, i), name))
++ if (check_field_in (check_typedef (TYPE_BASECLASS (type, i)), name))
+ return 1;
+
+ return 0;
+Index: gdb-6.3/gdb/dwarf2read.c
+===================================================================
+--- gdb-6.3.orig/gdb/dwarf2read.c 2004-10-15 20:41:00.000000000 -0400
++++ gdb-6.3/gdb/dwarf2read.c 2004-11-10 00:46:21.970935829 -0500
+@@ -2099,8 +2099,8 @@ guess_structure_name (struct partial_die
+ strlen (actual_class_name),
+ &cu->comp_unit_obstack);
+ xfree (actual_class_name);
++ break;
+ }
+- break;
+ }
+
+ child_pdi = child_pdi->die_sibling;
diff --git a/toolchain/gdb/patches/700-debian_cp-pass-by-reference.patch b/toolchain/gdb/patches/700-debian_cp-pass-by-reference.patch
new file mode 100644
index 0000000000..666d343429
--- /dev/null
+++ b/toolchain/gdb/patches/700-debian_cp-pass-by-reference.patch
@@ -0,0 +1,464 @@
+This patch needs to be submitted for the FSF. Also, there may be testcases
+already in the GDB testsuite (currently disabled) that it would probably fix.
+
+Index: gdb-6.3/gdb/infcall.c
+===================================================================
+--- gdb-6.3.orig/gdb/infcall.c 2004-10-08 04:15:56.000000000 -0400
++++ gdb-6.3/gdb/infcall.c 2004-11-10 12:30:07.000000000 -0500
+@@ -36,6 +36,7 @@
+ #include "gdb_string.h"
+ #include "infcall.h"
+ #include "dummy-frame.h"
++#include "cp-abi.h"
+
+ /* NOTE: cagney/2003-04-16: What's the future of this code?
+
+@@ -297,8 +298,8 @@ call_function_by_hand (struct value *fun
+ {
+ CORE_ADDR sp;
+ CORE_ADDR dummy_addr;
+- struct type *value_type;
+- unsigned char struct_return;
++ struct type *value_type, *target_value_type;
++ unsigned char struct_return = 0, cp_struct_return = 0;
+ CORE_ADDR struct_addr = 0;
+ struct regcache *retbuf;
+ struct cleanup *retbuf_cleanup;
+@@ -312,6 +313,7 @@ call_function_by_hand (struct value *fun
+ struct regcache *caller_regcache;
+ struct cleanup *caller_regcache_cleanup;
+ struct frame_id dummy_id;
++ struct cleanup *args_cleanup;
+
+ if (!target_has_execution)
+ noprocess ();
+@@ -410,10 +412,31 @@ call_function_by_hand (struct value *fun
+ using_gcc = (b == NULL ? 2 : BLOCK_GCC_COMPILED (b));
+ }
+
+- /* Are we returning a value using a structure return or a normal
+- value return? */
++ /* Are we returning a value using a structure return (passing a
++ hidden argument pointing to storage) or a normal value return?
++ There are two cases: C++ ABI mandated structure return and
++ target ABI structure return. The variable STRUCT_RETURN only
++ describes the latter. The C++ version is handled by passing
++ the return location as the first parameter to the function,
++ even preceding "this". This is different from the target
++ ABI version, which is target-specific; for instance, on ia64
++ the first argument is passed in out0 but the hidden structure
++ return pointer would normally be passed in r8. */
+
+- struct_return = using_struct_return (value_type, using_gcc);
++ if (current_language->la_language == language_cplus
++ && cp_pass_by_reference (value_type))
++ {
++ cp_struct_return = 1;
++
++ /* Tell the target specific argument pushing routine not to
++ expect a value. */
++ target_value_type = builtin_type_void;
++ }
++ else
++ {
++ struct_return = using_struct_return (value_type, using_gcc);
++ target_value_type = value_type;
++ }
+
+ /* Determine the location of the breakpoint (and possibly other
+ stuff) that the called function will return to. The SPARC, for a
+@@ -432,7 +455,7 @@ call_function_by_hand (struct value *fun
+ if (INNER_THAN (1, 2))
+ {
+ sp = push_dummy_code (current_gdbarch, sp, funaddr,
+- using_gcc, args, nargs, value_type,
++ using_gcc, args, nargs, target_value_type,
+ &real_pc, &bp_addr);
+ dummy_addr = sp;
+ }
+@@ -440,7 +463,7 @@ call_function_by_hand (struct value *fun
+ {
+ dummy_addr = sp;
+ sp = push_dummy_code (current_gdbarch, sp, funaddr,
+- using_gcc, args, nargs, value_type,
++ using_gcc, args, nargs, target_value_type,
+ &real_pc, &bp_addr);
+ }
+ break;
+@@ -507,9 +530,15 @@ call_function_by_hand (struct value *fun
+ param_type = TYPE_FIELD_TYPE (ftype, i);
+ else
+ param_type = NULL;
+-
++
+ args[i] = value_arg_coerce (args[i], param_type, prototyped);
+
++ /* FIXME: Is current_language the right language? */
++ if (current_language->la_language == language_cplus
++ && param_type != NULL
++ && cp_pass_by_reference (param_type))
++ args[i] = value_addr (args[i]);
++
+ /* elz: this code is to handle the case in which the function
+ to be called has a pointer to function as parameter and the
+ corresponding actual argument is the address of a function
+@@ -607,7 +636,7 @@ You must use a pointer to function type
+ stack, if necessary. Make certain that the value is correctly
+ aligned. */
+
+- if (struct_return)
++ if (struct_return || cp_struct_return)
+ {
+ int len = TYPE_LENGTH (value_type);
+ if (INNER_THAN (1, 2))
+@@ -632,6 +661,22 @@ You must use a pointer to function type
+ }
+ }
+
++ if (cp_struct_return)
++ {
++ struct value **new_args;
++
++ /* Add the new argument to the front of the argument list. */
++ new_args = xmalloc (sizeof (struct value *) * (nargs + 1));
++ new_args[0] = value_from_pointer (lookup_pointer_type (value_type),
++ struct_addr);
++ memcpy (&new_args[1], &args[0], sizeof (struct value *) * nargs);
++ args = new_args;
++ nargs++;
++ args_cleanup = make_cleanup (xfree, args);
++ }
++ else
++ args_cleanup = make_cleanup (null_cleanup, NULL);
++
+ /* Create the dummy stack frame. Pass in the call dummy address as,
+ presumably, the ABI code knows where, in the call dummy, the
+ return address should be pointed. */
+@@ -649,6 +694,8 @@ You must use a pointer to function type
+ else
+ error ("This target does not support function calls");
+
++ do_cleanups (args_cleanup);
++
+ /* Set up a frame ID for the dummy frame so we can pass it to
+ set_momentary_breakpoint. We need to give the breakpoint a frame
+ ID so that the breakpoint code can correctly re-identify the
+@@ -839,11 +886,7 @@ the function call).", name);
+ /* Figure out the value returned by the function, return that. */
+ {
+ struct value *retval;
+- if (TYPE_CODE (value_type) == TYPE_CODE_VOID)
+- /* If the function returns void, don't bother fetching the
+- return value. */
+- retval = allocate_value (value_type);
+- else if (struct_return)
++ if (struct_return || cp_struct_return)
+ /* NOTE: cagney/2003-09-27: This assumes that PUSH_DUMMY_CALL
+ has correctly stored STRUCT_ADDR in the target. In the past
+ that hasn't been the case, the old MIPS PUSH_ARGUMENTS
+@@ -853,6 +896,10 @@ the function call).", name);
+ "struct return convention", check that PUSH_DUMMY_CALL isn't
+ playing tricks. */
+ retval = value_at (value_type, struct_addr, NULL);
++ else if (TYPE_CODE (value_type) == TYPE_CODE_VOID)
++ /* If the function returns void, don't bother fetching the
++ return value. */
++ retval = allocate_value (value_type);
+ else
+ {
+ /* This code only handles "register convention". */
+Index: gdb-6.3/gdb/cp-abi.h
+===================================================================
+--- gdb-6.3.orig/gdb/cp-abi.h 2003-04-12 13:41:25.000000000 -0400
++++ gdb-6.3/gdb/cp-abi.h 2004-11-10 12:30:07.000000000 -0500
+@@ -1,7 +1,7 @@
+ /* Abstraction of various C++ ABI's we support, and the info we need
+ to get from them.
+ Contributed by Daniel Berlin <dberlin@redhat.com>
+- Copyright 2001 Free Software Foundation, Inc.
++ Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+@@ -145,6 +145,10 @@ extern struct type *value_rtti_type (str
+ extern int baseclass_offset (struct type *type, int index, char *valaddr,
+ CORE_ADDR address);
+
++/* Return non-zero if an argument of type TYPE should be passed by reference
++ instead of value. */
++extern int cp_pass_by_reference (struct type *type);
++
+ struct cp_abi_ops
+ {
+ const char *shortname;
+@@ -162,6 +166,7 @@ struct cp_abi_ops
+ int *using_enc);
+ int (*baseclass_offset) (struct type *type, int index, char *valaddr,
+ CORE_ADDR address);
++ int (*pass_by_reference) (struct type *type);
+ };
+
+
+Index: gdb-6.3/gdb/cp-abi.c
+===================================================================
+--- gdb-6.3.orig/gdb/cp-abi.c 2003-11-26 17:04:00.000000000 -0500
++++ gdb-6.3/gdb/cp-abi.c 2004-11-10 12:30:07.000000000 -0500
+@@ -1,5 +1,5 @@
+ /* Generic code for supporting multiple C++ ABI's
+- Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
++ Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+@@ -94,6 +94,14 @@ value_rtti_type (struct value *v, int *f
+ return (*current_cp_abi.rtti_type) (v, full, top, using_enc);
+ }
+
++int
++cp_pass_by_reference (struct type *type)
++{
++ if ((current_cp_abi.pass_by_reference) == NULL)
++ return 0;
++ return (*current_cp_abi.pass_by_reference) (type);
++}
++
+ /* Set the current C++ ABI to SHORT_NAME. */
+
+ static int
+Index: gdb-6.3/gdb/gnu-v3-abi.c
+===================================================================
+--- gdb-6.3.orig/gdb/gnu-v3-abi.c 2004-03-15 15:38:08.000000000 -0500
++++ gdb-6.3/gdb/gnu-v3-abi.c 2004-11-10 12:30:07.000000000 -0500
+@@ -1,7 +1,7 @@
+ /* Abstraction of GNU v3 abi.
+ Contributed by Jim Blandy <jimb@redhat.com>
+
+- Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
++ Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+@@ -419,6 +419,84 @@ gnuv3_baseclass_offset (struct type *typ
+ return base_offset;
+ }
+
++/* Return nonzero if a type should be passed by reference.
++
++ The rule in the v3 ABI document comes from section 3.1.1. If the
++ type has a non-trivial copy constructor or destructor, then the
++ caller must make a copy (by calling the copy constructor if there
++ is one or perform the copy itself otherwise), pass the address of
++ the copy, and then destroy the temporary (if necessary).
++
++ For return values with non-trivial copy constructors or
++ destructors, space will be allocated in the caller, and a pointer
++ will be passed as the first argument (preceding "this").
++
++ We don't have a bulletproof mechanism for determining whether a
++ constructor or destructor is trivial. For GCC and DWARF2 debug
++ information, we can check the artificial flag.
++
++ We don't do anything with the constructors or destructors yet,
++ but we have to get the argument passing right anyway. */
++static int
++gnuv3_pass_by_reference (struct type *type)
++{
++ int fieldnum, fieldelem, basenum;
++
++ CHECK_TYPEDEF (type);
++
++ /* We're only interested in things that can have methods. */
++ if (TYPE_CODE (type) != TYPE_CODE_STRUCT
++ && TYPE_CODE (type) != TYPE_CODE_CLASS
++ && TYPE_CODE (type) != TYPE_CODE_UNION)
++ return 0;
++
++ for (fieldnum = 0; fieldnum < TYPE_NFN_FIELDS (type); fieldnum++)
++ for (fieldelem = 0; fieldelem < TYPE_FN_FIELDLIST_LENGTH (type, fieldnum);
++ fieldelem++)
++ {
++ struct fn_field *fn = TYPE_FN_FIELDLIST1 (type, fieldnum);
++ char *name = TYPE_FN_FIELDLIST_NAME (type, fieldnum);
++ struct type *fieldtype = TYPE_FN_FIELD_TYPE (fn, fieldelem);
++
++ /* If this function is marked as artificial, it is compiler-generated,
++ and we assume it is trivial. */
++ if (TYPE_FN_FIELD_ARTIFICIAL (fn, fieldelem))
++ continue;
++
++ /* If we've found a destructor, we must pass this by reference. */
++ if (name[0] == '~')
++ return 1;
++
++ /* If the mangled name of this method doesn't indicate that it
++ is a constructor, we're not interested.
++
++ FIXME drow/2004-05-27: We could do this using the name of
++ the method and the name of the class instead of dealing
++ with the mangled name. We don't have a convenient function
++ to strip off both leading scope qualifiers and trailing
++ template arguments yet. */
++ if (!is_constructor_name (TYPE_FN_FIELD_PHYSNAME (fn, fieldelem)))
++ continue;
++
++ /* If this method takes two arguments, and the second argument is
++ a reference to this class, then it is a copy constructor. */
++ if (TYPE_NFIELDS (fieldtype) == 2
++ && TYPE_CODE (TYPE_FIELD_TYPE (fieldtype, 1)) == TYPE_CODE_REF
++ && check_typedef (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (fieldtype, 1))) == type)
++ return 1;
++ }
++
++ /* Even if all the constructors and destructors were artificial, one
++ of them may have invoked a non-artificial constructor or
++ destructor in a base class. If any base class needs to be passed
++ by reference, so does this class. */
++ for (basenum = 0; basenum < TYPE_N_BASECLASSES (type); basenum++)
++ if (gnuv3_pass_by_reference (TYPE_BASECLASS (type, basenum)))
++ return 1;
++
++ return 0;
++}
++
+ static void
+ init_gnuv3_ops (void)
+ {
+@@ -434,6 +512,7 @@ init_gnuv3_ops (void)
+ gnu_v3_abi_ops.rtti_type = gnuv3_rtti_type;
+ gnu_v3_abi_ops.virtual_fn_field = gnuv3_virtual_fn_field;
+ gnu_v3_abi_ops.baseclass_offset = gnuv3_baseclass_offset;
++ gnu_v3_abi_ops.pass_by_reference = gnuv3_pass_by_reference;
+ }
+
+ extern initialize_file_ftype _initialize_gnu_v3_abi; /* -Wmissing-prototypes */
+Index: gdb-6.3/gdb/hpacc-abi.c
+===================================================================
+--- gdb-6.3.orig/gdb/hpacc-abi.c 2003-06-08 14:27:13.000000000 -0400
++++ gdb-6.3/gdb/hpacc-abi.c 2004-11-10 12:30:07.000000000 -0500
+@@ -3,7 +3,7 @@
+ Most of the real code is from HP, i've just fiddled it to fit in
+ the C++ ABI abstraction framework.
+
+- Copyright 2001 Free Software Foundation, Inc.
++ Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+Index: gdb-6.3/gdb/Makefile.in
+===================================================================
+--- gdb-6.3.orig/gdb/Makefile.in 2004-11-10 12:30:06.000000000 -0500
++++ gdb-6.3/gdb/Makefile.in 2004-11-10 12:30:07.000000000 -0500
+@@ -2073,7 +2073,7 @@ ia64-tdep.o: ia64-tdep.c $(defs_h) $(inf
+ infcall.o: infcall.c $(defs_h) $(breakpoint_h) $(target_h) $(regcache_h) \
+ $(inferior_h) $(gdb_assert_h) $(block_h) $(gdbcore_h) $(language_h) \
+ $(objfiles_h) $(gdbcmd_h) $(command_h) $(gdb_string_h) $(infcall_h) \
+- $(dummy_frame_h)
++ $(dummy_frame_h) $(cp_abi_h)
+ inf-child.o: inf-child.c $(defs_h) $(regcache_h) $(memattr_h) $(symtab_h) \
+ $(target_h) $(inferior_h) $(gdb_string_h)
+ infcmd.o: infcmd.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \
+Index: gdb-6.3/gdb/testsuite/gdb.cp/pass-by-ref.exp
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb-6.3/gdb/testsuite/gdb.cp/pass-by-ref.exp 2004-11-11 09:48:00.498518899 -0500
+@@ -0,0 +1,38 @@
++# This testcase is part of GDB, the GNU debugger.
++
++# Copyright 2004 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Check that GDB can call C++ functions whose parameters have
++# object type, but are passed by reference.
++
++set testfile "pass-by-ref"
++set srcfile ${testfile}.cc
++set binfile ${objdir}/${subdir}/${testfile}
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
++ return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++if ![runto_main] then {
++ return -1
++}
++
++gdb_test "print foo (global_obj)" " = 3" "call function"
+Index: gdb-6.3/gdb/testsuite/gdb.cp/pass-by-ref.cc
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb-6.3/gdb/testsuite/gdb.cp/pass-by-ref.cc 2004-11-11 09:44:17.815014667 -0500
+@@ -0,0 +1,57 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++ Copyright 2004 Free Software Foundation, Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++ USA. */
++
++class Obj {
++public:
++ Obj ();
++ Obj (const Obj &);
++ ~Obj ();
++ int var[2];
++};
++
++int foo (Obj arg)
++{
++ return arg.var[0] + arg.var[1];
++}
++
++Obj::Obj ()
++{
++ var[0] = 1;
++ var[1] = 2;
++}
++
++Obj::Obj (const Obj &obj)
++{
++ var[0] = obj.var[0];
++ var[1] = obj.var[1];
++}
++
++Obj::~Obj ()
++{
++
++}
++
++Obj global_obj;
++
++int
++main ()
++{
++ int bar = foo (global_obj);
++ return bar;
++}
diff --git a/toolchain/gdb/patches/710-debian_thread-db-multiple-libraries.patch b/toolchain/gdb/patches/710-debian_thread-db-multiple-libraries.patch
new file mode 100644
index 0000000000..c164bd11a2
--- /dev/null
+++ b/toolchain/gdb/patches/710-debian_thread-db-multiple-libraries.patch
@@ -0,0 +1,593 @@
+Support loading two libthread_db DSOs. In this case, the LinuxThreads
+and NPTL ones.
+
+Index: gdb-6.3/gdb/thread-db.c
+===================================================================
+--- gdb-6.3.orig/gdb/thread-db.c 2004-11-10 10:46:24.000000000 -0500
++++ gdb-6.3/gdb/thread-db.c 2004-11-10 11:22:34.858812426 -0500
+@@ -79,53 +79,63 @@ static td_thragent_t *thread_agent;
+
+ /* Pointers to the libthread_db functions. */
+
+-static td_err_e (*td_init_p) (void);
++struct thread_db_pointers
++{
++ const char *filename;
++
++ td_err_e (*td_init_p) (void);
+
+-static td_err_e (*td_ta_new_p) (struct ps_prochandle * ps,
+- td_thragent_t **ta);
+-static td_err_e (*td_ta_map_id2thr_p) (const td_thragent_t *ta, thread_t pt,
+- td_thrhandle_t *__th);
+-static td_err_e (*td_ta_map_lwp2thr_p) (const td_thragent_t *ta,
+- lwpid_t lwpid, td_thrhandle_t *th);
+-static td_err_e (*td_ta_thr_iter_p) (const td_thragent_t *ta,
+- td_thr_iter_f *callback, void *cbdata_p,
+- td_thr_state_e state, int ti_pri,
+- sigset_t *ti_sigmask_p,
+- unsigned int ti_user_flags);
+-static td_err_e (*td_ta_event_addr_p) (const td_thragent_t *ta,
+- td_event_e event, td_notify_t *ptr);
+-static td_err_e (*td_ta_set_event_p) (const td_thragent_t *ta,
+- td_thr_events_t *event);
+-static td_err_e (*td_ta_event_getmsg_p) (const td_thragent_t *ta,
+- td_event_msg_t *msg);
+-
+-static td_err_e (*td_thr_validate_p) (const td_thrhandle_t *th);
+-static td_err_e (*td_thr_get_info_p) (const td_thrhandle_t *th,
+- td_thrinfo_t *infop);
+-static td_err_e (*td_thr_getfpregs_p) (const td_thrhandle_t *th,
+- gdb_prfpregset_t *regset);
+-static td_err_e (*td_thr_getgregs_p) (const td_thrhandle_t *th,
+- prgregset_t gregs);
+-static td_err_e (*td_thr_setfpregs_p) (const td_thrhandle_t *th,
+- const gdb_prfpregset_t *fpregs);
+-static td_err_e (*td_thr_setgregs_p) (const td_thrhandle_t *th,
+- prgregset_t gregs);
+-static td_err_e (*td_thr_event_enable_p) (const td_thrhandle_t *th,
+- int event);
+-
+-static td_err_e (*td_thr_tls_get_addr_p) (const td_thrhandle_t *th,
+- void *map_address,
+- size_t offset, void **address);
++ td_err_e (*td_ta_new_p) (struct ps_prochandle * ps,
++ td_thragent_t **ta);
++ td_err_e (*td_ta_map_id2thr_p) (const td_thragent_t *ta, thread_t pt,
++ td_thrhandle_t *__th);
++ td_err_e (*td_ta_map_lwp2thr_p) (const td_thragent_t *ta,
++ lwpid_t lwpid, td_thrhandle_t *th);
++
++ td_err_e (*td_ta_thr_iter_p) (const td_thragent_t *ta,
++ td_thr_iter_f *callback, void *cbdata_p,
++ td_thr_state_e state, int ti_pri,
++ sigset_t *ti_sigmask_p,
++ unsigned int ti_user_flags);
++ td_err_e (*td_ta_event_addr_p) (const td_thragent_t *ta,
++ td_event_e event, td_notify_t *ptr);
++ td_err_e (*td_ta_set_event_p) (const td_thragent_t *ta,
++ td_thr_events_t *event);
++ td_err_e (*td_ta_event_getmsg_p) (const td_thragent_t *ta,
++ td_event_msg_t *msg);
++
++ td_err_e (*td_thr_validate_p) (const td_thrhandle_t *th);
++ td_err_e (*td_thr_get_info_p) (const td_thrhandle_t *th,
++ td_thrinfo_t *infop);
++ td_err_e (*td_thr_getfpregs_p) (const td_thrhandle_t *th,
++ gdb_prfpregset_t *regset);
++ td_err_e (*td_thr_getgregs_p) (const td_thrhandle_t *th,
++ prgregset_t gregs);
++ td_err_e (*td_thr_setfpregs_p) (const td_thrhandle_t *th,
++ const gdb_prfpregset_t *fpregs);
++ td_err_e (*td_thr_setgregs_p) (const td_thrhandle_t *th,
++ prgregset_t gregs);
++ td_err_e (*td_thr_event_enable_p) (const td_thrhandle_t *th,
++ int event);
++
++ td_err_e (*td_thr_tls_get_addr_p) (const td_thrhandle_t *th,
++ void *map_address,
++ size_t offset, void **address);
++
++ struct thread_db_pointers *next;
++};
+
+ /* Location of the thread creation event breakpoint. The code at this
+ location in the child process will be called by the pthread library
+ whenever a new thread is created. By setting a special breakpoint
+ at this location, GDB can detect when a new thread is created. We
+ obtain this location via the td_ta_event_addr call. */
+-static CORE_ADDR td_create_bp_addr;
++CORE_ADDR td_create_bp_addr;
+
+ /* Location of the thread death event breakpoint. */
+-static CORE_ADDR td_death_bp_addr;
++CORE_ADDR td_death_bp_addr;
++
++static struct thread_db_pointers *current_pointers, *all_pointers;
+
+ /* Prototypes for local functions. */
+ static void thread_db_find_new_threads (void);
+@@ -262,7 +272,7 @@ thread_get_info_callback (const td_thrha
+ struct thread_info *thread_info;
+ ptid_t thread_ptid;
+
+- err = td_thr_get_info_p (thp, &ti);
++ err = current_pointers->td_thr_get_info_p (thp, &ti);
+ if (err != TD_OK)
+ error ("thread_get_info_callback: cannot get thread info: %s",
+ thread_db_err_str (err));
+@@ -316,8 +326,9 @@ thread_db_map_id2thr (struct thread_info
+ if (thread_info->private->th_valid)
+ return;
+
+- err = td_ta_map_id2thr_p (thread_agent, GET_THREAD (thread_info->ptid),
+- &thread_info->private->th);
++ err = current_pointers->td_ta_map_id2thr_p (thread_agent,
++ GET_THREAD (thread_info->ptid),
++ &thread_info->private->th);
+ if (err != TD_OK)
+ {
+ if (fatal)
+@@ -340,8 +351,8 @@ thread_db_get_info (struct thread_info *
+ if (!thread_info->private->th_valid)
+ thread_db_map_id2thr (thread_info, 1);
+
+- err =
+- td_thr_get_info_p (&thread_info->private->th, &thread_info->private->ti);
++ err = current_pointers->td_thr_get_info_p (&thread_info->private->th,
++ &thread_info->private->ti);
+ if (err != TD_OK)
+ error ("thread_db_get_info: cannot get thread info: %s",
+ thread_db_err_str (err));
+@@ -365,7 +376,8 @@ thread_from_lwp (ptid_t ptid)
+
+ gdb_assert (is_lwp (ptid));
+
+- err = td_ta_map_lwp2thr_p (thread_agent, GET_LWP (ptid), &th);
++ err = current_pointers->td_ta_map_lwp2thr_p (thread_agent, GET_LWP (ptid),
++ &th);
+ if (err != TD_OK)
+ error ("Cannot find user-level thread for LWP %ld: %s",
+ GET_LWP (ptid), thread_db_err_str (err));
+@@ -420,85 +432,102 @@ verbose_dlsym (void *handle, const char
+ return sym;
+ }
+
+-static int
+-thread_db_load (void)
++static struct thread_db_pointers *
++thread_db_load (const char *name)
+ {
++ struct thread_db_pointers *ptrs;
++ Dl_info info;
+ void *handle;
+ td_err_e err;
+
+- handle = dlopen (LIBTHREAD_DB_SO, RTLD_NOW);
++ ptrs = xcalloc (1, sizeof (struct thread_db_pointers));
++
++ handle = dlopen (name, RTLD_NOW);
+ if (handle == NULL)
+ {
+- fprintf_filtered (gdb_stderr, "\n\ndlopen failed on '%s' - %s\n",
+- LIBTHREAD_DB_SO, dlerror ());
+- fprintf_filtered (gdb_stderr,
+- "GDB will not be able to debug pthreads.\n\n");
++ if (all_pointers == NULL)
++ {
++ fprintf_filtered (gdb_stderr, "\n\ndlopen failed on '%s' - %s\n",
++ name, dlerror ());
++ fprintf_filtered (gdb_stderr,
++ "GDB will not be able to debug pthreads.\n\n");
++ }
+ return 0;
+ }
+
+ /* Initialize pointers to the dynamic library functions we will use.
+ Essential functions first. */
+
+- td_init_p = verbose_dlsym (handle, "td_init");
+- if (td_init_p == NULL)
++ ptrs->td_init_p = verbose_dlsym (handle, "td_init");
++ if (ptrs->td_init_p == NULL)
+ return 0;
+
+- td_ta_new_p = verbose_dlsym (handle, "td_ta_new");
+- if (td_ta_new_p == NULL)
++ ptrs->td_ta_new_p = verbose_dlsym (handle, "td_ta_new");
++ if (ptrs->td_ta_new_p == NULL)
+ return 0;
+
+- td_ta_map_id2thr_p = verbose_dlsym (handle, "td_ta_map_id2thr");
+- if (td_ta_map_id2thr_p == NULL)
++ ptrs->td_ta_map_id2thr_p = verbose_dlsym (handle, "td_ta_map_id2thr");
++ if (ptrs->td_ta_map_id2thr_p == NULL)
+ return 0;
+
+- td_ta_map_lwp2thr_p = verbose_dlsym (handle, "td_ta_map_lwp2thr");
+- if (td_ta_map_lwp2thr_p == NULL)
++ ptrs->td_ta_map_lwp2thr_p = verbose_dlsym (handle, "td_ta_map_lwp2thr");
++ if (ptrs->td_ta_map_lwp2thr_p == NULL)
+ return 0;
+
+- td_ta_thr_iter_p = verbose_dlsym (handle, "td_ta_thr_iter");
+- if (td_ta_thr_iter_p == NULL)
++ ptrs->td_ta_thr_iter_p = verbose_dlsym (handle, "td_ta_thr_iter");
++ if (ptrs->td_ta_thr_iter_p == NULL)
+ return 0;
+
+- td_thr_validate_p = verbose_dlsym (handle, "td_thr_validate");
+- if (td_thr_validate_p == NULL)
++ ptrs->td_thr_validate_p = verbose_dlsym (handle, "td_thr_validate");
++ if (ptrs->td_thr_validate_p == NULL)
+ return 0;
+
+- td_thr_get_info_p = verbose_dlsym (handle, "td_thr_get_info");
+- if (td_thr_get_info_p == NULL)
++ ptrs->td_thr_get_info_p = verbose_dlsym (handle, "td_thr_get_info");
++ if (ptrs->td_thr_get_info_p == NULL)
+ return 0;
+
+- td_thr_getfpregs_p = verbose_dlsym (handle, "td_thr_getfpregs");
+- if (td_thr_getfpregs_p == NULL)
++ ptrs->td_thr_getfpregs_p = verbose_dlsym (handle, "td_thr_getfpregs");
++ if (ptrs->td_thr_getfpregs_p == NULL)
+ return 0;
+
+- td_thr_getgregs_p = verbose_dlsym (handle, "td_thr_getgregs");
+- if (td_thr_getgregs_p == NULL)
++ ptrs->td_thr_getgregs_p = verbose_dlsym (handle, "td_thr_getgregs");
++ if (ptrs->td_thr_getgregs_p == NULL)
+ return 0;
+
+- td_thr_setfpregs_p = verbose_dlsym (handle, "td_thr_setfpregs");
+- if (td_thr_setfpregs_p == NULL)
++ ptrs->td_thr_setfpregs_p = verbose_dlsym (handle, "td_thr_setfpregs");
++ if (ptrs->td_thr_setfpregs_p == NULL)
+ return 0;
+
+- td_thr_setgregs_p = verbose_dlsym (handle, "td_thr_setgregs");
+- if (td_thr_setgregs_p == NULL)
++ ptrs->td_thr_setgregs_p = verbose_dlsym (handle, "td_thr_setgregs");
++ if (ptrs->td_thr_setgregs_p == NULL)
+ return 0;
+
+ /* Initialize the library. */
+- err = td_init_p ();
++ err = ptrs->td_init_p ();
+ if (err != TD_OK)
+ {
+ warning ("Cannot initialize libthread_db: %s", thread_db_err_str (err));
++ xfree (ptrs);
+ return 0;
+ }
+
+ /* These are not essential. */
+- td_ta_event_addr_p = dlsym (handle, "td_ta_event_addr");
+- td_ta_set_event_p = dlsym (handle, "td_ta_set_event");
+- td_ta_event_getmsg_p = dlsym (handle, "td_ta_event_getmsg");
+- td_thr_event_enable_p = dlsym (handle, "td_thr_event_enable");
+- td_thr_tls_get_addr_p = dlsym (handle, "td_thr_tls_get_addr");
++ ptrs->td_ta_event_addr_p = dlsym (handle, "td_ta_event_addr");
++ ptrs->td_ta_set_event_p = dlsym (handle, "td_ta_set_event");
++ ptrs->td_ta_event_getmsg_p = dlsym (handle, "td_ta_event_getmsg");
++ ptrs->td_thr_event_enable_p = dlsym (handle, "td_thr_event_enable");
++ ptrs->td_thr_tls_get_addr_p = dlsym (handle, "td_thr_tls_get_addr");
++
++ if (dladdr (ptrs->td_ta_new_p, &info) != 0)
++ ptrs->filename = info.dli_fname;
++
++ /* Try dlinfo? */
++
++ if (ptrs->filename == NULL)
++ /* Paranoid - don't let a NULL path slip through. */
++ ptrs->filename = name;
+
+- return 1;
++ return ptrs;
+ }
+
+ static td_err_e
+@@ -508,7 +537,7 @@ enable_thread_event (td_thragent_t *thre
+ td_err_e err;
+
+ /* Get the breakpoint address for thread EVENT. */
+- err = td_ta_event_addr_p (thread_agent, event, &notify);
++ err = current_pointers->td_ta_event_addr_p (thread_agent, event, &notify);
+ if (err != TD_OK)
+ return err;
+
+@@ -534,8 +563,10 @@ enable_thread_event_reporting (void)
+
+ /* We cannot use the thread event reporting facility if these
+ functions aren't available. */
+- if (td_ta_event_addr_p == NULL || td_ta_set_event_p == NULL
+- || td_ta_event_getmsg_p == NULL || td_thr_event_enable_p == NULL)
++ if (current_pointers->td_ta_event_addr_p == NULL
++ || current_pointers->td_ta_set_event_p == NULL
++ || current_pointers->td_ta_event_getmsg_p == NULL
++ || current_pointers->td_thr_event_enable_p == NULL)
+ return;
+
+ /* Set the process wide mask saying which events we're interested in. */
+@@ -552,7 +583,7 @@ enable_thread_event_reporting (void)
+ #endif
+ td_event_addset (&events, TD_DEATH);
+
+- err = td_ta_set_event_p (thread_agent, &events);
++ err = current_pointers->td_ta_set_event_p (thread_agent, &events);
+ if (err != TD_OK)
+ {
+ warning ("Unable to set global thread event mask: %s",
+@@ -592,7 +623,7 @@ disable_thread_event_reporting (void)
+ /* Set the process wide mask saying we aren't interested in any
+ events anymore. */
+ td_event_emptyset (&events);
+- td_ta_set_event_p (thread_agent, &events);
++ current_pointers->td_ta_set_event_p (thread_agent, &events);
+
+ /* Delete thread event breakpoints, if any. */
+ remove_thread_event_breakpoints ();
+@@ -635,7 +666,6 @@ check_thread_signals (void)
+ static void
+ check_for_thread_db (void)
+ {
+- td_err_e err;
+ static int already_loaded;
+
+ /* First time through, report that libthread_db was successfuly
+@@ -644,19 +674,8 @@ check_for_thread_db (void)
+
+ if (!already_loaded)
+ {
+- Dl_info info;
+- const char *library = NULL;
+- if (dladdr ((*td_ta_new_p), &info) != 0)
+- library = info.dli_fname;
+-
+- /* Try dlinfo? */
+-
+- if (library == NULL)
+- /* Paranoid - don't let a NULL path slip through. */
+- library = LIBTHREAD_DB_SO;
+-
+ printf_unfiltered ("Using host libthread_db library \"%s\".\n",
+- library);
++ all_pointers->filename);
+ already_loaded = 1;
+ }
+
+@@ -674,28 +693,34 @@ check_for_thread_db (void)
+ proc_handle.pid = GET_PID (inferior_ptid);
+
+ /* Now attempt to open a connection to the thread library. */
+- err = td_ta_new_p (&proc_handle, &thread_agent);
+- switch (err)
++ for (current_pointers = all_pointers;
++ current_pointers != NULL;
++ current_pointers = current_pointers->next)
+ {
+- case TD_NOLIBTHREAD:
+- /* No thread library was detected. */
+- break;
+-
+- case TD_OK:
+- printf_unfiltered ("[Thread debugging using libthread_db enabled]\n");
++ td_err_e err;
++ err = current_pointers->td_ta_new_p (&proc_handle, &thread_agent);
++ switch (err)
++ {
++ case TD_NOLIBTHREAD:
++ /* No thread library was detected. */
++ break;
+
+- /* The thread library was detected. Activate the thread_db target. */
+- push_target (&thread_db_ops);
+- using_thread_db = 1;
++ case TD_OK:
++ printf_unfiltered ("[Thread debugging using libthread_db enabled]\n");
+
+- enable_thread_event_reporting ();
+- thread_db_find_new_threads ();
+- break;
++ /* The thread library was detected. Activate the thread_db target. */
++ push_target (&thread_db_ops);
++ using_thread_db = 1;
++
++ enable_thread_event_reporting ();
++ thread_db_find_new_threads ();
++ return;
+
+- default:
+- warning ("Cannot initialize thread debugging library: %s",
+- thread_db_err_str (err));
+- break;
++ default:
++ warning ("Cannot initialize thread debugging library: %s",
++ thread_db_err_str (err));
++ break;
++ }
+ }
+ }
+
+@@ -766,7 +791,7 @@ attach_thread (ptid_t ptid, const td_thr
+ #endif
+
+ /* Enable thread event reporting for this thread. */
+- err = td_thr_event_enable_p (th_p, 1);
++ err = current_pointers->td_thr_event_enable_p (th_p, 1);
+ if (err != TD_OK)
+ error ("Cannot enable thread event reporting for %s: %s",
+ target_pid_to_str (ptid), thread_db_err_str (err));
+@@ -892,7 +917,7 @@ check_event (ptid_t ptid)
+
+ do
+ {
+- err = td_ta_event_getmsg_p (thread_agent, &msg);
++ err = current_pointers->td_ta_event_getmsg_p (thread_agent, &msg);
+ if (err != TD_OK)
+ {
+ if (err == TD_NOMSG)
+@@ -902,7 +927,7 @@ check_event (ptid_t ptid)
+ thread_db_err_str (err));
+ }
+
+- err = td_thr_get_info_p (msg.th_p, &ti);
++ err = current_pointers->td_thr_get_info_p (msg.th_p, &ti);
+ if (err != TD_OK)
+ error ("Cannot get thread info: %s", thread_db_err_str (err));
+
+@@ -1015,12 +1040,14 @@ thread_db_fetch_registers (int regno)
+ thread_info = find_thread_pid (inferior_ptid);
+ thread_db_map_id2thr (thread_info, 1);
+
+- err = td_thr_getgregs_p (&thread_info->private->th, gregset);
++ err = current_pointers->td_thr_getgregs_p (&thread_info->private->th,
++ gregset);
+ if (err != TD_OK)
+ error ("Cannot fetch general-purpose registers for thread %ld: %s",
+ (long) GET_THREAD (inferior_ptid), thread_db_err_str (err));
+
+- err = td_thr_getfpregs_p (&thread_info->private->th, &fpregset);
++ err = current_pointers->td_thr_getfpregs_p (&thread_info->private->th,
++ &fpregset);
+ if (err != TD_OK)
+ error ("Cannot get floating-point registers for thread %ld: %s",
+ (long) GET_THREAD (inferior_ptid), thread_db_err_str (err));
+@@ -1062,11 +1089,13 @@ thread_db_store_registers (int regno)
+ fill_gregset ((gdb_gregset_t *) gregset, -1);
+ fill_fpregset (&fpregset, -1);
+
+- err = td_thr_setgregs_p (&thread_info->private->th, gregset);
++ err = current_pointers->td_thr_setgregs_p (&thread_info->private->th,
++ gregset);
+ if (err != TD_OK)
+ error ("Cannot store general-purpose registers for thread %ld: %s",
+ (long) GET_THREAD (inferior_ptid), thread_db_err_str (err));
+- err = td_thr_setfpregs_p (&thread_info->private->th, &fpregset);
++ err = current_pointers->td_thr_setfpregs_p (&thread_info->private->th,
++ &fpregset);
+ if (err != TD_OK)
+ error ("Cannot store floating-point registers for thread %ld: %s",
+ (long) GET_THREAD (inferior_ptid), thread_db_err_str (err));
+@@ -1136,15 +1165,14 @@ thread_db_thread_alive (ptid_t ptid)
+ if (!thread_info->private->th_valid)
+ return 0;
+
+- err = td_thr_validate_p (&thread_info->private->th);
++ err = current_pointers->td_thr_validate_p (&thread_info->private->th);
+ if (err != TD_OK)
+ return 0;
+
+ if (!thread_info->private->ti_valid)
+ {
+- err =
+- td_thr_get_info_p (&thread_info->private->th,
+- &thread_info->private->ti);
++ err = current_pointers->td_thr_get_info_p
++ (&thread_info->private->th, &thread_info->private->ti);
+ if (err != TD_OK)
+ return 0;
+ thread_info->private->ti_valid = 1;
+@@ -1170,7 +1198,7 @@ find_new_threads_callback (const td_thrh
+ td_err_e err;
+ ptid_t ptid;
+
+- err = td_thr_get_info_p (th_p, &ti);
++ err = current_pointers->td_thr_get_info_p (th_p, &ti);
+ if (err != TD_OK)
+ error ("find_new_threads_callback: cannot get thread info: %s",
+ thread_db_err_str (err));
+@@ -1192,9 +1220,10 @@ thread_db_find_new_threads (void)
+ td_err_e err;
+
+ /* Iterate over all user-space threads to discover new threads. */
+- err = td_ta_thr_iter_p (thread_agent, find_new_threads_callback, NULL,
+- TD_THR_ANY_STATE, TD_THR_LOWEST_PRIORITY,
+- TD_SIGNO_MASK, TD_THR_ANY_USER_FLAGS);
++ err = current_pointers->td_ta_thr_iter_p
++ (thread_agent, find_new_threads_callback, NULL,
++ TD_THR_ANY_STATE, TD_THR_LOWEST_PRIORITY,
++ TD_SIGNO_MASK, TD_THR_ANY_USER_FLAGS);
+ if (err != TD_OK)
+ error ("Cannot find new threads: %s", thread_db_err_str (err));
+ }
+@@ -1257,7 +1286,7 @@ thread_db_get_thread_local_address (ptid
+ struct thread_info *thread_info;
+
+ /* glibc doesn't provide the needed interface. */
+- if (!td_thr_tls_get_addr_p)
++ if (!current_pointers->td_thr_tls_get_addr_p)
+ error ("Cannot find thread-local variables in this thread library.");
+
+ /* Get the address of the link map for this objfile. */
+@@ -1279,8 +1308,8 @@ thread_db_get_thread_local_address (ptid
+ thread_db_map_id2thr (thread_info, 1);
+
+ /* Finally, get the address of the variable. */
+- err = td_thr_tls_get_addr_p (&thread_info->private->th, (void *) lm,
+- offset, &address);
++ err = current_pointers->td_thr_tls_get_addr_p
++ (&thread_info->private->th, (void *) lm, offset, &address);
+
+ #ifdef THREAD_DB_HAS_TD_NOTALLOC
+ /* The memory hasn't been allocated, yet. */
+@@ -1360,17 +1389,49 @@ init_thread_db_ops (void)
+ void
+ _initialize_thread_db (void)
+ {
++ struct thread_db_pointers *ptrs;
++ const char *p;
++
+ /* Only initialize the module if we can load libthread_db. */
+- if (thread_db_load ())
+- {
+- init_thread_db_ops ();
+- add_target (&thread_db_ops);
++ ptrs = thread_db_load (LIBTHREAD_DB_SO);
++ if (ptrs == NULL)
++ return;
++
++ all_pointers = ptrs;
+
+- /* Add ourselves to objfile event chain. */
+- target_new_objfile_chain = deprecated_target_new_objfile_hook;
+- deprecated_target_new_objfile_hook = thread_db_new_objfile;
++ /* Some GNU/Linux systems have more than one binary-compatible copy
++ of libthread_db. If we can find a second one, load that too.
++ The inferior may force the use of a different threading package
++ than we expect. Our guess for the location is somewhat hokey:
++ strip out anything between /lib (or /lib64) and LIBTHREAD_DB_SO.
++ If we loaded the NPTL libthread_db by default, this may find us
++ the LinuxThreads copy. */
++ p = strrchr (ptrs->filename, '/');
++ while (p != NULL && p > ptrs->filename)
++ {
++ const char *component;
+
+- /* Register ourselves for the new inferior observer. */
+- observer_attach_inferior_created (check_for_thread_db_observer);
++ component = memrchr (ptrs->filename, '/', p - ptrs->filename);
++ if (component != NULL && strncmp (component, "/lib", 4) == 0)
++ {
++ char *new_name = xmalloc (p - ptrs->filename + 2
++ + strlen (LIBTHREAD_DB_SO));
++ memcpy (new_name, ptrs->filename, p - ptrs->filename + 1);
++ strcpy (new_name + (p - ptrs->filename) + 1, LIBTHREAD_DB_SO);
++ ptrs->next = thread_db_load (new_name);
++ xfree (new_name);
++ break;
++ }
++ p = component;
+ }
++
++ init_thread_db_ops ();
++ add_target (&thread_db_ops);
++
++ /* Add ourselves to objfile event chain. */
++ target_new_objfile_chain = deprecated_target_new_objfile_hook;
++ deprecated_target_new_objfile_hook = thread_db_new_objfile;
++
++ /* Register ourselves for the new inferior observer. */
++ observer_attach_inferior_created (check_for_thread_db_observer);
+ }
diff --git a/toolchain/gdb/patches/720-debian_static-threads-test.patch b/toolchain/gdb/patches/720-debian_static-threads-test.patch
new file mode 100644
index 0000000000..448c9b1d7c
--- /dev/null
+++ b/toolchain/gdb/patches/720-debian_static-threads-test.patch
@@ -0,0 +1,36 @@
+Update staticthreads.exp to handle debugging info in libpthread.a.
+
+Index: gdb-6.3/gdb/testsuite/gdb.threads/staticthreads.exp
+===================================================================
+--- gdb-6.3.orig/gdb/testsuite/gdb.threads/staticthreads.exp 2004-11-10 10:35:15.000000000 -0500
++++ gdb-6.3/gdb/testsuite/gdb.threads/staticthreads.exp 2004-11-10 11:22:48.671121466 -0500
+@@ -53,6 +53,10 @@ gdb_test_multiple "continue" "$test" {
+ -re " sem_post .*$gdb_prompt " {
+ pass "$test"
+ }
++ -re " (.*_)sem_post .*$gdb_prompt " {
++ # Glibc uses aliases for internal symbols; match __new_sem_post.
++ pass "$test"
++ }
+ -re "Program received signal .*$gdb_prompt " {
+ kfail gdb/1328 "$test"
+ }
+@@ -64,8 +68,16 @@ gdb_test_multiple "continue" "$test" {
+
+ rerun_to_main
+ gdb_test "handle SIG32 nostop noprint pass"
+-set test "Handle SIG32 helps"
+-gdb_test "continue" " sem_post .*" "handle SIG32 helps"
++set test "handle SIG32 helps"
++gdb_test_multiple "continue" "$test" {
++ -re " sem_post .*$gdb_prompt $" {
++ pass "$test"
++ }
++ -re " (.*_)sem_post .*$gdb_prompt $" {
++ # Glibc uses aliases for internal symbols; match __new_sem_post.
++ pass "$test"
++ }
++}
+
+
+ # See if info threads produces anything approaching a thread list.
diff --git a/toolchain/gdb/patches/730-debian_gdb-fix-tracefork-check.patch b/toolchain/gdb/patches/730-debian_gdb-fix-tracefork-check.patch
new file mode 100644
index 0000000000..9890d80c3e
--- /dev/null
+++ b/toolchain/gdb/patches/730-debian_gdb-fix-tracefork-check.patch
@@ -0,0 +1,225 @@
+Status: submitted for comments
+
+2004-11-12 Daniel Jacobowitz <dan@debian.org>
+
+ * linux-nat.c (my_waitpid): New function.
+ (linux_test_for_tracefork): Make more robust and verbose. Take
+ an ORIGINAL_PID argument and test for PTRACE_SETOPTIONS first.
+ (linux_supports_tracefork, linux_supports_tracevforkdone): Take a PID
+ argument. Update calls to linux_test_for_tracefork.
+ (linux_enable_event_reporting, child_follow_fork)
+ (child_insert_fork_catchpoint, child_insert_vfork_catchpoint)
+ (child_insert_exec_catchpoint): Update calls to
+ linux_supports_tracefork and linux_supports_tracevforkdone.
+
+Index: gdb-6.3/gdb/linux-nat.c
+===================================================================
+--- gdb-6.3.orig/gdb/linux-nat.c 2004-10-08 16:29:47.000000000 -0400
++++ gdb-6.3/gdb/linux-nat.c 2004-11-13 16:41:51.368720845 -0500
+@@ -150,18 +150,47 @@ linux_tracefork_child (void)
+ exit (0);
+ }
+
+-/* Determine if PTRACE_O_TRACEFORK can be used to follow fork events. We
++/* Wrapper function for waitpid which handles EINTR. */
++
++static int
++my_waitpid (int pid, int *status, int flags)
++{
++ int ret;
++ do
++ {
++ ret = waitpid (pid, status, flags);
++ }
++ while (ret == -1 && errno == EINTR);
++
++ return ret;
++}
++
++/* Determine if PTRACE_O_TRACEFORK can be used to follow fork events.
++
++ First, we try to enable fork tracing on ORIGINAL_PID. If this fails,
++ we know that the feature is not available. This may change the tracing
++ options for ORIGINAL_PID, but we'll be setting them shortly anyway.
++
++ However, if it succeeds, we don't know for sure that the feature is
++ available; old versions of PTRACE_SETOPTIONS ignored unknown options. We
+ create a child process, attach to it, use PTRACE_SETOPTIONS to enable
+- fork tracing, and let it fork. If the process exits, we assume that
+- we can't use TRACEFORK; if we get the fork notification, and we can
+- extract the new child's PID, then we assume that we can. */
++ fork tracing, and let it fork. If the process exits, we assume that we
++ can't use TRACEFORK; if we get the fork notification, and we can extract
++ the new child's PID, then we assume that we can. */
+
+ static void
+-linux_test_for_tracefork (void)
++linux_test_for_tracefork (int original_pid)
+ {
+ int child_pid, ret, status;
+ long second_pid;
+
++ linux_supports_tracefork_flag = 0;
++ linux_supports_tracevforkdone_flag = 0;
++
++ ret = ptrace (PTRACE_SETOPTIONS, original_pid, 0, PTRACE_O_TRACEFORK);
++ if (ret != 0)
++ return;
++
+ child_pid = fork ();
+ if (child_pid == -1)
+ perror_with_name ("linux_test_for_tracefork: fork");
+@@ -169,7 +198,7 @@ linux_test_for_tracefork (void)
+ if (child_pid == 0)
+ linux_tracefork_child ();
+
+- ret = waitpid (child_pid, &status, 0);
++ ret = my_waitpid (child_pid, &status, 0);
+ if (ret == -1)
+ perror_with_name ("linux_test_for_tracefork: waitpid");
+ else if (ret != child_pid)
+@@ -177,13 +206,23 @@ linux_test_for_tracefork (void)
+ if (! WIFSTOPPED (status))
+ error ("linux_test_for_tracefork: waitpid: unexpected status %d.", status);
+
+- linux_supports_tracefork_flag = 0;
+-
+ ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0, PTRACE_O_TRACEFORK);
+ if (ret != 0)
+ {
+- ptrace (PTRACE_KILL, child_pid, 0, 0);
+- waitpid (child_pid, &status, 0);
++ ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
++ if (ret != 0)
++ {
++ warning ("linux_test_for_tracefork: failed to kill child");
++ return;
++ }
++
++ ret = my_waitpid (child_pid, &status, 0);
++ if (ret != child_pid)
++ warning ("linux_test_for_tracefork: failed to wait for killed child");
++ else if (!WIFSIGNALED (status))
++ warning ("linux_test_for_tracefork: unexpected wait status 0x%x from "
++ "killed child", status);
++
+ return;
+ }
+
+@@ -192,8 +231,12 @@ linux_test_for_tracefork (void)
+ PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORKDONE);
+ linux_supports_tracevforkdone_flag = (ret == 0);
+
+- ptrace (PTRACE_CONT, child_pid, 0, 0);
+- ret = waitpid (child_pid, &status, 0);
++ ret = ptrace (PTRACE_CONT, child_pid, 0, 0);
++ if (ret != 0)
++ warning ("linux_test_for_tracefork: failed to resume child");
++
++ ret = my_waitpid (child_pid, &status, 0);
++
+ if (ret == child_pid && WIFSTOPPED (status)
+ && status >> 16 == PTRACE_EVENT_FORK)
+ {
+@@ -204,34 +247,38 @@ linux_test_for_tracefork (void)
+ int second_status;
+
+ linux_supports_tracefork_flag = 1;
+- waitpid (second_pid, &second_status, 0);
+- ptrace (PTRACE_DETACH, second_pid, 0, 0);
++ my_waitpid (second_pid, &second_status, 0);
++ ret = ptrace (PTRACE_KILL, second_pid, 0, 0);
++ if (ret != 0)
++ warning ("linux_test_for_tracefork: failed to kill second child");
+ }
+ }
++ else
++ warning ("linux_test_for_tracefork: unexpected result from waitpid "
++ "(%d, status 0x%x)", ret, status);
+
+- if (WIFSTOPPED (status))
+- {
+- ptrace (PTRACE_DETACH, child_pid, 0, 0);
+- waitpid (child_pid, &status, 0);
+- }
++ ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
++ if (ret != 0)
++ warning ("linux_test_for_tracefork: failed to kill child");
++ my_waitpid (child_pid, &status, 0);
+ }
+
+ /* Return non-zero iff we have tracefork functionality available.
+ This function also sets linux_supports_tracefork_flag. */
+
+ static int
+-linux_supports_tracefork (void)
++linux_supports_tracefork (int pid)
+ {
+ if (linux_supports_tracefork_flag == -1)
+- linux_test_for_tracefork ();
++ linux_test_for_tracefork (pid);
+ return linux_supports_tracefork_flag;
+ }
+
+ static int
+-linux_supports_tracevforkdone (void)
++linux_supports_tracevforkdone (int pid)
+ {
+ if (linux_supports_tracefork_flag == -1)
+- linux_test_for_tracefork ();
++ linux_test_for_tracefork (pid);
+ return linux_supports_tracevforkdone_flag;
+ }
+
+@@ -242,12 +289,12 @@ linux_enable_event_reporting (ptid_t pti
+ int pid = ptid_get_pid (ptid);
+ int options;
+
+- if (! linux_supports_tracefork ())
++ if (! linux_supports_tracefork (pid))
+ return;
+
+ options = PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACEEXEC
+ | PTRACE_O_TRACECLONE;
+- if (linux_supports_tracevforkdone ())
++ if (linux_supports_tracevforkdone (pid))
+ options |= PTRACE_O_TRACEVFORKDONE;
+
+ /* Do not enable PTRACE_O_TRACEEXIT until GDB is more prepared to support
+@@ -308,7 +355,8 @@ child_follow_fork (int follow_child)
+
+ if (has_vforked)
+ {
+- if (linux_supports_tracevforkdone ())
++ gdb_assert (linux_supports_tracefork_flag >= 0);
++ if (linux_supports_tracevforkdone (0))
+ {
+ int status;
+
+@@ -476,7 +524,7 @@ linux_handle_extended_wait (int pid, int
+ int
+ child_insert_fork_catchpoint (int pid)
+ {
+- if (! linux_supports_tracefork ())
++ if (! linux_supports_tracefork (pid))
+ error ("Your system does not support fork catchpoints.");
+
+ return 0;
+@@ -485,7 +533,7 @@ child_insert_fork_catchpoint (int pid)
+ int
+ child_insert_vfork_catchpoint (int pid)
+ {
+- if (!linux_supports_tracefork ())
++ if (!linux_supports_tracefork (pid))
+ error ("Your system does not support vfork catchpoints.");
+
+ return 0;
+@@ -494,7 +542,7 @@ child_insert_vfork_catchpoint (int pid)
+ int
+ child_insert_exec_catchpoint (int pid)
+ {
+- if (!linux_supports_tracefork ())
++ if (!linux_supports_tracefork (pid))
+ error ("Your system does not support exec catchpoints.");
+
+ return 0;
diff --git a/toolchain/gdb/patches/740-debian_make-cv-type-crash.patch b/toolchain/gdb/patches/740-debian_make-cv-type-crash.patch
new file mode 100644
index 0000000000..4e0b8cd72a
--- /dev/null
+++ b/toolchain/gdb/patches/740-debian_make-cv-type-crash.patch
@@ -0,0 +1,132 @@
+2004-11-04 Jim Blandy <jimb@redhat.com>
+
+ * gdbtypes.c (make_qualified_type): Doc fix. Add assertion to
+ prevent cross-objfile references.
+ (make_cv_type): Doc fix. Don't create cross-objfile references,
+ even for stub types.
+ (replace_type): Add assertion to prevent cross-objfile references.
+ (check_typedef): Never resolve a stub type by copying over a type
+ from another file.
+
+Index: src/gdb/gdbtypes.c
+===================================================================
+RCS file: /big/fsf/rsync/src-cvs/src/gdb/gdbtypes.c,v
+retrieving revision 1.92
+retrieving revision 1.93
+diff -u -p -r1.92 -r1.93
+--- src/gdb/gdbtypes.c 8 Aug 2004 17:18:16 -0000 1.92
++++ src/gdb/gdbtypes.c 4 Nov 2004 17:50:16 -0000 1.93
+@@ -433,7 +433,9 @@ address_space_int_to_name (int space_fla
+ }
+
+ /* Create a new type with instance flags NEW_FLAGS, based on TYPE.
+- If STORAGE is non-NULL, create the new type instance there. */
++
++ If STORAGE is non-NULL, create the new type instance there.
++ STORAGE must be in the same obstack as TYPE. */
+
+ static struct type *
+ make_qualified_type (struct type *type, int new_flags,
+@@ -453,6 +455,12 @@ make_qualified_type (struct type *type,
+ ntype = alloc_type_instance (type);
+ else
+ {
++ /* If STORAGE was provided, it had better be in the same objfile as
++ TYPE. Otherwise, we can't link it into TYPE's cv chain: if one
++ objfile is freed and the other kept, we'd have dangling
++ pointers. */
++ gdb_assert (TYPE_OBJFILE (type) == TYPE_OBJFILE (storage));
++
+ ntype = storage;
+ TYPE_MAIN_TYPE (ntype) = TYPE_MAIN_TYPE (type);
+ TYPE_CHAIN (ntype) = ntype;
+@@ -501,11 +509,12 @@ make_type_with_address_space (struct typ
+ CNST is a flag for setting the const attribute
+ VOLTL is a flag for setting the volatile attribute
+ TYPE is the base type whose variant we are creating.
+- TYPEPTR, if nonzero, points
+- to a pointer to memory where the reference type should be stored.
+- If *TYPEPTR is zero, update it to point to the reference type we return.
+- We allocate new memory if needed. */
+
++ If TYPEPTR and *TYPEPTR are non-zero, then *TYPEPTR points to
++ storage to hold the new qualified type; *TYPEPTR and TYPE must be
++ in the same objfile. Otherwise, allocate fresh memory for the new
++ type whereever TYPE lives. If TYPEPTR is non-zero, set it to the
++ new type we construct. */
+ struct type *
+ make_cv_type (int cnst, int voltl, struct type *type, struct type **typeptr)
+ {
+@@ -524,20 +533,19 @@ make_cv_type (int cnst, int voltl, struc
+
+ if (typeptr && *typeptr != NULL)
+ {
+- /* Objfile is per-core-type. This const-qualified type had best
+- belong to the same objfile as the type it is qualifying, unless
+- we are overwriting a stub type, in which case the safest thing
+- to do is to copy the core type into the new objfile. */
+-
+- gdb_assert (TYPE_OBJFILE (*typeptr) == TYPE_OBJFILE (type)
+- || TYPE_STUB (*typeptr));
+- if (TYPE_OBJFILE (*typeptr) != TYPE_OBJFILE (type))
+- {
+- TYPE_MAIN_TYPE (*typeptr)
+- = TYPE_ALLOC (*typeptr, sizeof (struct main_type));
+- *TYPE_MAIN_TYPE (*typeptr)
+- = *TYPE_MAIN_TYPE (type);
+- }
++ /* TYPE and *TYPEPTR must be in the same objfile. We can't have
++ a C-V variant chain that threads across objfiles: if one
++ objfile gets freed, then the other has a broken C-V chain.
++
++ This code used to try to copy over the main type from TYPE to
++ *TYPEPTR if they were in different objfiles, but that's
++ wrong, too: TYPE may have a field list or member function
++ lists, which refer to types of their own, etc. etc. The
++ whole shebang would need to be copied over recursively; you
++ can't have inter-objfile pointers. The only thing to do is
++ to leave stub types as stub types, and look them up afresh by
++ name each time you encounter them. */
++ gdb_assert (TYPE_OBJFILE (*typeptr) == TYPE_OBJFILE (type));
+ }
+
+ ntype = make_qualified_type (type, new_flags, typeptr ? *typeptr : NULL);
+@@ -562,6 +570,12 @@ replace_type (struct type *ntype, struct
+ {
+ struct type *chain;
+
++ /* These two types had better be in the same objfile. Otherwise,
++ the assignment of one type's main type structure to the other
++ will produce a type with references to objects (names; field
++ lists; etc.) allocated on an objfile other than its own. */
++ gdb_assert (TYPE_OBJFILE (ntype) == TYPE_OBJFILE (ntype));
++
+ *TYPE_MAIN_TYPE (ntype) = *TYPE_MAIN_TYPE (type);
+
+ /* The type length is not a part of the main type. Update it for each
+@@ -1416,8 +1430,24 @@ check_typedef (struct type *type)
+ return type;
+ }
+ newtype = lookup_transparent_type (name);
++
+ if (newtype)
+- make_cv_type (is_const, is_volatile, newtype, &type);
++ {
++ /* If the resolved type and the stub are in the same objfile,
++ then replace the stub type with the real deal. But if
++ they're in separate objfiles, leave the stub alone; we'll
++ just look up the transparent type every time we call
++ check_typedef. We can't create pointers between types
++ allocated to different objfiles, since they may have
++ different lifetimes. Trying to copy NEWTYPE over to TYPE's
++ objfile is pointless, too, since you'll have to move over any
++ other types NEWTYPE refers to, which could be an unbounded
++ amount of stuff. */
++ if (TYPE_OBJFILE (newtype) == TYPE_OBJFILE (type))
++ make_cv_type (is_const, is_volatile, newtype, &type);
++ else
++ type = newtype;
++ }
+ }
+ /* Otherwise, rely on the stub flag being set for opaque/stubbed types */
+ else if (TYPE_STUB (type) && !currently_reading_symtab)
diff --git a/toolchain/gdb/patches/750-debian_sparc-singlestep.patch b/toolchain/gdb/patches/750-debian_sparc-singlestep.patch
new file mode 100644
index 0000000000..904883c2fc
--- /dev/null
+++ b/toolchain/gdb/patches/750-debian_sparc-singlestep.patch
@@ -0,0 +1,37 @@
+Status: submitted for comments
+
+2004-11-13 Daniel Jacobowitz <dan@debian.org>
+
+ * sparc-tdep.c (sparc_software_single_step): Handle stepping to NULL.
+
+Index: gdb-6.3/gdb/sparc-tdep.c
+===================================================================
+--- gdb-6.3.orig/gdb/sparc-tdep.c 2004-06-06 22:02:55.000000000 -0400
++++ gdb-6.3/gdb/sparc-tdep.c 2004-11-13 17:06:05.000000000 -0500
+@@ -1026,10 +1026,10 @@
+
+ if (insert_breakpoints_p)
+ {
+- CORE_ADDR pc;
++ CORE_ADDR pc, orig_npc;
+
+ pc = sparc_address_from_register (tdep->pc_regnum);
+- npc = sparc_address_from_register (tdep->npc_regnum);
++ orig_npc = npc = sparc_address_from_register (tdep->npc_regnum);
+
+ /* Analyze the instruction at PC. */
+ nnpc = sparc_analyze_control_transfer (pc, &npc);
+@@ -1039,9 +1039,10 @@
+ target_insert_breakpoint (nnpc, nnpc_save);
+
+ /* Assert that we have set at least one breakpoint, and that
+- they're not set at the same spot. */
+- gdb_assert (npc != 0 || nnpc != 0);
+- gdb_assert (nnpc != npc);
++ they're not set at the same spot - unless we're going
++ from here straight to NULL, i.e. a call or jump to 0. */
++ gdb_assert (npc != 0 || nnpc != 0 || orig_npc == 0);
++ gdb_assert (nnpc != npc || orig_npc == 0);
+ }
+ else
+ {
diff --git a/toolchain/gdb/patches/760-debian_vsyscall-bfd-close-result.patch b/toolchain/gdb/patches/760-debian_vsyscall-bfd-close-result.patch
new file mode 100644
index 0000000000..56002bed0c
--- /dev/null
+++ b/toolchain/gdb/patches/760-debian_vsyscall-bfd-close-result.patch
@@ -0,0 +1,20 @@
+2004-10-24 Daniel Jacobowitz <dan@debian.org>
+
+ * opncls.c (bfd_close): Return TRUE for BFD_IN_MEMORY.
+
+Index: src/bfd/opncls.c
+===================================================================
+RCS file: /big/fsf/rsync/src-cvs/src/bfd/opncls.c,v
+retrieving revision 1.25
+diff -u -p -r1.25 opncls.c
+--- src/bfd/opncls.c 10 Oct 2004 13:58:05 -0000 1.25
++++ src/bfd/opncls.c 24 Oct 2004 17:52:53 -0000
+@@ -598,7 +598,7 @@ bfd_close (bfd *abfd)
+ if (!(abfd->flags & BFD_IN_MEMORY))
+ ret = abfd->iovec->bclose (abfd);
+ else
+- ret = 0;
++ ret = TRUE;
+
+ /* If the file was open for writing and is now executable,
+ make it so. */
diff --git a/toolchain/gdb/patches/770-debian_vfork-done-spelling.patch b/toolchain/gdb/patches/770-debian_vfork-done-spelling.patch
new file mode 100644
index 0000000000..f65db8d091
--- /dev/null
+++ b/toolchain/gdb/patches/770-debian_vfork-done-spelling.patch
@@ -0,0 +1,31 @@
+Index: gdb-6.3/gdb/linux-nat.c
+===================================================================
+--- gdb-6.3.orig/gdb/linux-nat.c 2004-11-14 00:36:41.000000000 -0500
++++ gdb-6.3/gdb/linux-nat.c 2004-11-15 11:51:43.954161476 -0500
+@@ -69,7 +69,7 @@
+ #define PTRACE_EVENT_VFORK 2
+ #define PTRACE_EVENT_CLONE 3
+ #define PTRACE_EVENT_EXEC 4
+-#define PTRACE_EVENT_VFORKDONE 5
++#define PTRACE_EVENT_VFORK_DONE 5
+ #define PTRACE_EVENT_EXIT 6
+
+ #endif /* PTRACE_EVENT_FORK */
+@@ -362,7 +362,7 @@ child_follow_fork (int follow_child)
+
+ ptrace (PTRACE_CONT, parent_pid, 0, 0);
+ waitpid (parent_pid, &status, __WALL);
+- if ((status >> 16) != PTRACE_EVENT_VFORKDONE)
++ if ((status >> 16) != PTRACE_EVENT_VFORK_DONE)
+ warning ("Unexpected waitpid result %06x when waiting for "
+ "vfork-done", status);
+ }
+@@ -434,7 +434,7 @@ child_follow_fork (int follow_child)
+ generally not encounter vfork (vfork is defined to fork
+ in libpthread.so).
+
+- The holding part is very easy if we have VFORKDONE events;
++ The holding part is very easy if we have VFORK_DONE events;
+ but keeping track of both processes is beyond GDB at the
+ moment. So we don't expose the parent to the rest of GDB.
+ Instead we quietly hold onto it until such time as we can
diff --git a/toolchain/gdb/patches/780-debian_gdbserver-rdynamic.patch b/toolchain/gdb/patches/780-debian_gdbserver-rdynamic.patch
new file mode 100644
index 0000000000..0311dde390
--- /dev/null
+++ b/toolchain/gdb/patches/780-debian_gdbserver-rdynamic.patch
@@ -0,0 +1,675 @@
+Status: Commited to GDB after 6.3.
+
+Index: gdb-6.3/gdb/gdbserver/acinclude.m4
+===================================================================
+--- gdb-6.3.orig/gdb/gdbserver/acinclude.m4 2002-06-11 13:32:39.000000000 -0400
++++ gdb-6.3/gdb/gdbserver/acinclude.m4 2004-12-07 17:19:31.115089905 -0500
+@@ -13,6 +13,7 @@ AC_DEFUN([SRV_CHECK_THREAD_DB],
+ void ps_lsetregs() {}
+ void ps_lgetfpregs() {}
+ void ps_lsetfpregs() {}
++ void ps_get_thread_area() {}
+ void ps_getpid() {}],
+ [td_ta_new();],
+ [srv_cv_thread_db="-lthread_db"],
+@@ -32,10 +33,11 @@ AC_DEFUN([SRV_CHECK_THREAD_DB],
+ void ps_lsetregs() {}
+ void ps_lgetfpregs() {}
+ void ps_lsetfpregs() {}
++ void ps_get_thread_area() {}
+ void ps_getpid() {}],
+ [td_ta_new();],
+ [srv_cv_thread_db="$thread_db"],
+ [srv_cv_thread_db=no])
++ ]])
+ LIBS="$old_LIBS"
+- ]])
+ )])
+Index: gdb-6.3/gdb/gdbserver/configure
+===================================================================
+--- gdb-6.3.orig/gdb/gdbserver/configure 2004-10-16 12:18:54.000000000 -0400
++++ gdb-6.3/gdb/gdbserver/configure 2004-12-07 17:22:17.343129771 -0500
+@@ -28,6 +28,7 @@ program_suffix=NONE
+ program_transform_name=s,x,x,
+ silent=
+ site=
++sitefile=
+ srcdir=
+ target=NONE
+ verbose=
+@@ -142,6 +143,7 @@ Configuration:
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
++ --site-file=FILE use FILE as the site file
+ --version print the version of autoconf that created configure
+ Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+@@ -312,6 +314,11 @@ EOF
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
++ -site-file | --site-file | --site-fil | --site-fi | --site-f)
++ ac_prev=sitefile ;;
++ -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
++ sitefile="$ac_optarg" ;;
++
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+@@ -477,12 +484,16 @@ fi
+ srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+ # Prefer explicitly selected file to automatically selected ones.
+-if test -z "$CONFIG_SITE"; then
+- if test "x$prefix" != xNONE; then
+- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+- else
+- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
++if test -z "$sitefile"; then
++ if test -z "$CONFIG_SITE"; then
++ if test "x$prefix" != xNONE; then
++ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
++ else
++ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
++ fi
+ fi
++else
++ CONFIG_SITE="$sitefile"
+ fi
+ for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+@@ -526,7 +537,7 @@ fi
+ # Extract the first word of "gcc", so it can be a program name with args.
+ set dummy gcc; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:530: checking for $ac_word" >&5
++echo "configure:541: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -556,7 +567,7 @@ if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:560: checking for $ac_word" >&5
++echo "configure:571: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -607,7 +618,7 @@ fi
+ # Extract the first word of "cl", so it can be a program name with args.
+ set dummy cl; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:611: checking for $ac_word" >&5
++echo "configure:622: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -639,7 +650,7 @@ fi
+ fi
+
+ echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+-echo "configure:643: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
++echo "configure:654: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ ac_ext=c
+ # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+@@ -650,12 +661,12 @@ cross_compiling=$ac_cv_prog_cc_cross
+
+ cat > conftest.$ac_ext << EOF
+
+-#line 654 "configure"
++#line 665 "configure"
+ #include "confdefs.h"
+
+ main(){return(0);}
+ EOF
+-if { (eval echo configure:659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ ac_cv_prog_cc_works=yes
+ # If we can't run a trivial program, we are probably using a cross compiler.
+ if (./conftest; exit) 2>/dev/null; then
+@@ -681,12 +692,12 @@ if test $ac_cv_prog_cc_works = no; then
+ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+ fi
+ echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+-echo "configure:685: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
++echo "configure:696: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+ echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+ cross_compiling=$ac_cv_prog_cc_cross
+
+ echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+-echo "configure:690: checking whether we are using GNU C" >&5
++echo "configure:701: checking whether we are using GNU C" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -695,7 +706,7 @@ else
+ yes;
+ #endif
+ EOF
+-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:699: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
++if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:710: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gcc=yes
+ else
+ ac_cv_prog_gcc=no
+@@ -714,7 +725,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=
+ echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+-echo "configure:718: checking whether ${CC-cc} accepts -g" >&5
++echo "configure:729: checking whether ${CC-cc} accepts -g" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -793,7 +804,7 @@ else { echo "configure: error: can not r
+ fi
+
+ echo $ac_n "checking host system type""... $ac_c" 1>&6
+-echo "configure:797: checking host system type" >&5
++echo "configure:808: checking host system type" >&5
+
+ host_alias=$host
+ case "$host_alias" in
+@@ -814,7 +825,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-
+ echo "$ac_t""$host" 1>&6
+
+ echo $ac_n "checking target system type""... $ac_c" 1>&6
+-echo "configure:818: checking target system type" >&5
++echo "configure:829: checking target system type" >&5
+
+ target_alias=$target
+ case "$target_alias" in
+@@ -832,7 +843,7 @@ target_os=`echo $target | sed 's/^\([^-]
+ echo "$ac_t""$target" 1>&6
+
+ echo $ac_n "checking build system type""... $ac_c" 1>&6
+-echo "configure:836: checking build system type" >&5
++echo "configure:847: checking build system type" >&5
+
+ build_alias=$build
+ case "$build_alias" in
+@@ -867,7 +878,7 @@ test "$host_alias" != "$target_alias" &&
+ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+ # ./install, which can be erroneously created by make from ./install.sh.
+ echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+-echo "configure:871: checking for a BSD compatible install" >&5
++echo "configure:882: checking for a BSD compatible install" >&5
+ if test -z "$INSTALL"; then
+ if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -921,7 +932,7 @@ test -z "$INSTALL_DATA" && INSTALL_DATA=
+
+
+ echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+-echo "configure:925: checking how to run the C preprocessor" >&5
++echo "configure:936: checking how to run the C preprocessor" >&5
+ # On Suns, sometimes $CPP names a directory.
+ if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+@@ -936,13 +947,13 @@ else
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp.
+ cat > conftest.$ac_ext <<EOF
+-#line 940 "configure"
++#line 951 "configure"
+ #include "confdefs.h"
+ #include <assert.h>
+ Syntax Error
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:946: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++{ (eval echo configure:957: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+ if test -z "$ac_err"; then
+ :
+@@ -953,13 +964,13 @@ else
+ rm -rf conftest*
+ CPP="${CC-cc} -E -traditional-cpp"
+ cat > conftest.$ac_ext <<EOF
+-#line 957 "configure"
++#line 968 "configure"
+ #include "confdefs.h"
+ #include <assert.h>
+ Syntax Error
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:963: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++{ (eval echo configure:974: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+ if test -z "$ac_err"; then
+ :
+@@ -970,13 +981,13 @@ else
+ rm -rf conftest*
+ CPP="${CC-cc} -nologo -E"
+ cat > conftest.$ac_ext <<EOF
+-#line 974 "configure"
++#line 985 "configure"
+ #include "confdefs.h"
+ #include <assert.h>
+ Syntax Error
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:980: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++{ (eval echo configure:991: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+ if test -z "$ac_err"; then
+ :
+@@ -1001,12 +1012,12 @@ fi
+ echo "$ac_t""$CPP" 1>&6
+
+ echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+-echo "configure:1005: checking for ANSI C header files" >&5
++echo "configure:1016: checking for ANSI C header files" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1010 "configure"
++#line 1021 "configure"
+ #include "confdefs.h"
+ #include <stdlib.h>
+ #include <stdarg.h>
+@@ -1014,7 +1025,7 @@ else
+ #include <float.h>
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:1018: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++{ (eval echo configure:1029: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+ if test -z "$ac_err"; then
+ rm -rf conftest*
+@@ -1031,7 +1042,7 @@ rm -f conftest*
+ if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat > conftest.$ac_ext <<EOF
+-#line 1035 "configure"
++#line 1046 "configure"
+ #include "confdefs.h"
+ #include <string.h>
+ EOF
+@@ -1049,7 +1060,7 @@ fi
+ if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat > conftest.$ac_ext <<EOF
+-#line 1053 "configure"
++#line 1064 "configure"
+ #include "confdefs.h"
+ #include <stdlib.h>
+ EOF
+@@ -1070,7 +1081,7 @@ if test "$cross_compiling" = yes; then
+ :
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1074 "configure"
++#line 1085 "configure"
+ #include "confdefs.h"
+ #include <ctype.h>
+ #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+@@ -1081,7 +1092,7 @@ if (XOR (islower (i), ISLOWER (i)) || to
+ exit (0); }
+
+ EOF
+-if { (eval echo configure:1085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++if { (eval echo configure:1096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+ then
+ :
+ else
+@@ -1109,17 +1120,17 @@ for ac_hdr in sgtty.h termio.h termios.h
+ do
+ ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+-echo "configure:1113: checking for $ac_hdr" >&5
++echo "configure:1124: checking for $ac_hdr" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1118 "configure"
++#line 1129 "configure"
+ #include "confdefs.h"
+ #include <$ac_hdr>
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:1123: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++{ (eval echo configure:1134: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+ if test -z "$ac_err"; then
+ rm -rf conftest*
+@@ -1147,12 +1158,12 @@ done
+
+
+ echo $ac_n "checking whether strerror must be declared""... $ac_c" 1>&6
+-echo "configure:1151: checking whether strerror must be declared" >&5
++echo "configure:1162: checking whether strerror must be declared" >&5
+ if eval "test \"`echo '$''{'bfd_cv_decl_needed_strerror'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1156 "configure"
++#line 1167 "configure"
+ #include "confdefs.h"
+
+ #include <stdio.h>
+@@ -1173,7 +1184,7 @@ int main() {
+ char *(*pfn) = (char *(*)) strerror
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1177: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:1188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ bfd_cv_decl_needed_strerror=no
+ else
+@@ -1205,19 +1216,19 @@ fi
+
+ if test "${srv_linux_regsets}" = "yes"; then
+ echo $ac_n "checking for PTRACE_GETREGS""... $ac_c" 1>&6
+-echo "configure:1209: checking for PTRACE_GETREGS" >&5
++echo "configure:1220: checking for PTRACE_GETREGS" >&5
+ if eval "test \"`echo '$''{'gdbsrv_cv_have_ptrace_getregs'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1214 "configure"
++#line 1225 "configure"
+ #include "confdefs.h"
+ #include <sys/ptrace.h>
+ int main() {
+ PTRACE_GETREGS;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1221: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:1232: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ gdbsrv_cv_have_ptrace_getregs=yes
+ else
+@@ -1238,19 +1249,19 @@ EOF
+ fi
+
+ echo $ac_n "checking for PTRACE_GETFPXREGS""... $ac_c" 1>&6
+-echo "configure:1242: checking for PTRACE_GETFPXREGS" >&5
++echo "configure:1253: checking for PTRACE_GETFPXREGS" >&5
+ if eval "test \"`echo '$''{'gdbsrv_cv_have_ptrace_getfpxregs'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1247 "configure"
++#line 1258 "configure"
+ #include "confdefs.h"
+ #include <sys/ptrace.h>
+ int main() {
+ PTRACE_GETFPXREGS;
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1254: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:1265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ gdbsrv_cv_have_ptrace_getfpxregs=yes
+ else
+@@ -1273,12 +1284,12 @@ fi
+
+ if test "$ac_cv_header_sys_procfs_h" = yes; then
+ echo $ac_n "checking for lwpid_t in sys/procfs.h""... $ac_c" 1>&6
+-echo "configure:1277: checking for lwpid_t in sys/procfs.h" >&5
++echo "configure:1288: checking for lwpid_t in sys/procfs.h" >&5
+ if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_lwpid_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1282 "configure"
++#line 1293 "configure"
+ #include "confdefs.h"
+
+ #define _SYSCALL32
+@@ -1287,7 +1298,7 @@ int main() {
+ lwpid_t avar
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1291: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:1302: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ bfd_cv_have_sys_procfs_type_lwpid_t=yes
+ else
+@@ -1309,12 +1320,12 @@ EOF
+ echo "$ac_t""$bfd_cv_have_sys_procfs_type_lwpid_t" 1>&6
+
+ echo $ac_n "checking for psaddr_t in sys/procfs.h""... $ac_c" 1>&6
+-echo "configure:1313: checking for psaddr_t in sys/procfs.h" >&5
++echo "configure:1324: checking for psaddr_t in sys/procfs.h" >&5
+ if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_psaddr_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1318 "configure"
++#line 1329 "configure"
+ #include "confdefs.h"
+
+ #define _SYSCALL32
+@@ -1323,7 +1334,7 @@ int main() {
+ psaddr_t avar
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1327: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:1338: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ bfd_cv_have_sys_procfs_type_psaddr_t=yes
+ else
+@@ -1345,12 +1356,12 @@ EOF
+ echo "$ac_t""$bfd_cv_have_sys_procfs_type_psaddr_t" 1>&6
+
+ echo $ac_n "checking for prgregset_t in sys/procfs.h""... $ac_c" 1>&6
+-echo "configure:1349: checking for prgregset_t in sys/procfs.h" >&5
++echo "configure:1360: checking for prgregset_t in sys/procfs.h" >&5
+ if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_prgregset_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1354 "configure"
++#line 1365 "configure"
+ #include "confdefs.h"
+
+ #define _SYSCALL32
+@@ -1359,7 +1370,7 @@ int main() {
+ prgregset_t avar
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1363: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:1374: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ bfd_cv_have_sys_procfs_type_prgregset_t=yes
+ else
+@@ -1381,12 +1392,12 @@ EOF
+ echo "$ac_t""$bfd_cv_have_sys_procfs_type_prgregset_t" 1>&6
+
+ echo $ac_n "checking for prfpregset_t in sys/procfs.h""... $ac_c" 1>&6
+-echo "configure:1385: checking for prfpregset_t in sys/procfs.h" >&5
++echo "configure:1396: checking for prfpregset_t in sys/procfs.h" >&5
+ if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_prfpregset_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1390 "configure"
++#line 1401 "configure"
+ #include "confdefs.h"
+
+ #define _SYSCALL32
+@@ -1395,7 +1406,7 @@ int main() {
+ prfpregset_t avar
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1399: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:1410: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ bfd_cv_have_sys_procfs_type_prfpregset_t=yes
+ else
+@@ -1421,7 +1432,7 @@ EOF
+
+ if test $bfd_cv_have_sys_procfs_type_prfpregset_t = yes; then
+ echo $ac_n "checking whether prfpregset_t type is broken""... $ac_c" 1>&6
+-echo "configure:1425: checking whether prfpregset_t type is broken" >&5
++echo "configure:1436: checking whether prfpregset_t type is broken" >&5
+ if eval "test \"`echo '$''{'gdb_cv_prfpregset_t_broken'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -1429,7 +1440,7 @@ else
+ gdb_cv_prfpregset_t_broken=yes
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1433 "configure"
++#line 1444 "configure"
+ #include "confdefs.h"
+ #include <sys/procfs.h>
+ int main ()
+@@ -1439,7 +1450,7 @@ else
+ return 0;
+ }
+ EOF
+-if { (eval echo configure:1443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++if { (eval echo configure:1454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+ then
+ gdb_cv_prfpregset_t_broken=no
+ else
+@@ -1463,12 +1474,12 @@ EOF
+ fi
+
+ echo $ac_n "checking for elf_fpregset_t in sys/procfs.h""... $ac_c" 1>&6
+-echo "configure:1467: checking for elf_fpregset_t in sys/procfs.h" >&5
++echo "configure:1478: checking for elf_fpregset_t in sys/procfs.h" >&5
+ if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_elf_fpregset_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1472 "configure"
++#line 1483 "configure"
+ #include "confdefs.h"
+
+ #define _SYSCALL32
+@@ -1477,7 +1488,7 @@ int main() {
+ elf_fpregset_t avar
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1481: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:1492: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ bfd_cv_have_sys_procfs_type_elf_fpregset_t=yes
+ else
+@@ -1506,14 +1517,14 @@ USE_THREAD_DB=
+
+ if test "$srv_linux_thread_db" = "yes"; then
+ echo $ac_n "checking for libthread_db""... $ac_c" 1>&6
+-echo "configure:1510: checking for libthread_db" >&5
++echo "configure:1521: checking for libthread_db" >&5
+ if eval "test \"`echo '$''{'srv_cv_thread_db'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ old_LIBS="$LIBS"
+ LIBS="$LIBS -lthread_db"
+ cat > conftest.$ac_ext <<EOF
+-#line 1517 "configure"
++#line 1528 "configure"
+ #include "confdefs.h"
+ void ps_pglobal_lookup() {}
+ void ps_pdread() {}
+@@ -1522,12 +1533,13 @@ void ps_pglobal_lookup() {}
+ void ps_lsetregs() {}
+ void ps_lgetfpregs() {}
+ void ps_lsetfpregs() {}
++ void ps_get_thread_area() {}
+ void ps_getpid() {}
+ int main() {
+ td_ta_new();
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1531: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:1543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ srv_cv_thread_db="-lthread_db"
+ else
+@@ -1543,7 +1555,7 @@ else
+ fi
+ LIBS="$old_LIBS `eval echo "$thread_db"`"
+ cat > conftest.$ac_ext <<EOF
+-#line 1547 "configure"
++#line 1559 "configure"
+ #include "confdefs.h"
+ void ps_pglobal_lookup() {}
+ void ps_pdread() {}
+@@ -1552,12 +1564,13 @@ void ps_pglobal_lookup() {}
+ void ps_lsetregs() {}
+ void ps_lgetfpregs() {}
+ void ps_lsetfpregs() {}
++ void ps_get_thread_area() {}
+ void ps_getpid() {}
+ int main() {
+ td_ta_new();
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:1574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ srv_cv_thread_db="$thread_db"
+ else
+@@ -1567,11 +1580,11 @@ else
+ srv_cv_thread_db=no
+ fi
+ rm -f conftest*
+- LIBS="$old_LIBS"
+-
++
+ fi
+
+ echo "$ac_t""$srv_cv_thread_db" 1>&6
++ LIBS="$old_LIBS"
+
+ fi
+ rm -f conftest*
+@@ -1585,14 +1598,14 @@ rm -f conftest*
+ old_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -rdynamic"
+ cat > conftest.$ac_ext <<EOF
+-#line 1589 "configure"
++#line 1602 "configure"
+ #include "confdefs.h"
+
+ int main() {
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:1596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:1609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ RDYNAMIC=-rdynamic
+ else
+Index: gdb-6.3/gdb/gdbserver/aclocal.m4
+===================================================================
+--- gdb-6.3.orig/gdb/gdbserver/aclocal.m4 2002-06-11 13:32:39.000000000 -0400
++++ gdb-6.3/gdb/gdbserver/aclocal.m4 2004-12-07 17:22:00.382495519 -0500
+@@ -1,4 +1,4 @@
+-dnl aclocal.m4 generated automatically by aclocal 1.4-p4
++dnl aclocal.m4 generated automatically by aclocal 1.4
+
+ dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+@@ -25,6 +25,7 @@ AC_DEFUN([SRV_CHECK_THREAD_DB],
+ void ps_lsetregs() {}
+ void ps_lgetfpregs() {}
+ void ps_lsetfpregs() {}
++ void ps_get_thread_area() {}
+ void ps_getpid() {}],
+ [td_ta_new();],
+ [srv_cv_thread_db="-lthread_db"],
+@@ -44,11 +45,12 @@ AC_DEFUN([SRV_CHECK_THREAD_DB],
+ void ps_lsetregs() {}
+ void ps_lgetfpregs() {}
+ void ps_lsetfpregs() {}
++ void ps_get_thread_area() {}
+ void ps_getpid() {}],
+ [td_ta_new();],
+ [srv_cv_thread_db="$thread_db"],
+ [srv_cv_thread_db=no])
++ ]])
+ LIBS="$old_LIBS"
+- ]])
+ )])
+
diff --git a/toolchain/gdb/patches/790-debian_dwarf2-cfi-warning.patch b/toolchain/gdb/patches/790-debian_dwarf2-cfi-warning.patch
new file mode 100644
index 0000000000..cfb3d95de5
--- /dev/null
+++ b/toolchain/gdb/patches/790-debian_dwarf2-cfi-warning.patch
@@ -0,0 +1,39 @@
+Status: Unsuitable for upstream (at least, without a lot of arguing).
+
+GCC does not specify the state of every last register in the CIE. Since
+GCC's focus is on correctness of runtime unwinding, any registers which
+have to be unwound will be specified; but unmodified registers will not
+be explicitly marked. (How about modified, call-clobbered registers?
+I'm not sure if they are marked as unavailable.)
+
+GDB issues a noisy warning about this. The warning is generally not useful,
+and we can get it extremely frequently (any time we load a new CIE).
+
+This patch disables the warning. Alternately we could set the complaints
+threshold to zero, or implement a default frame init-register method for
+every architecture. But someday the compiler will support using different
+calling conventions for internal functions, so that's not much of a stopgap.
+ARM has a complex algorithm for handling this, involving scanning all CIEs -
+benefit not completely clear outside of the ARM context of flexible register
+sets.
+
+Index: gdb-6.3/gdb/dwarf2-frame.c
+===================================================================
+--- gdb-6.3.orig/gdb/dwarf2-frame.c 2004-11-15 11:54:57.000000000 -0500
++++ gdb-6.3/gdb/dwarf2-frame.c 2004-12-08 18:02:23.896409471 -0500
+@@ -705,9 +705,12 @@ dwarf2_frame_cache (struct frame_info *n
+ table. We need a way of iterating through all the valid
+ DWARF2 register numbers. */
+ if (fs->regs.reg[column].how == DWARF2_FRAME_REG_UNSPECIFIED)
+- complaint (&symfile_complaints,
+- "Incomplete CFI data; unspecified registers at 0x%s",
+- paddr (fs->pc));
++ {
++ if (0)
++ complaint (&symfile_complaints,
++ "Incomplete CFI data; unspecified registers at 0x%s",
++ paddr (fs->pc));
++ }
+ else
+ cache->reg[regnum] = fs->regs.reg[column];
+ }
diff --git a/toolchain/gdb/patches/800-debian_linux-use-underscore-exit.patch b/toolchain/gdb/patches/800-debian_linux-use-underscore-exit.patch
new file mode 100644
index 0000000000..198918ccce
--- /dev/null
+++ b/toolchain/gdb/patches/800-debian_linux-use-underscore-exit.patch
@@ -0,0 +1,22 @@
+Status: committed upstream after 6.3. Fixes some terminal mangling in
+gdbtui.
+
+2004-12-04 Daniel Jacobowitz <dan@debian.org>
+
+ PR tui/1703
+ * linux-nat.c (linux_tracefork_child): Use _exit instead of exit.
+ Suggested by Joshua Neuheisel.
+
+Index: gdb-6.3/gdb/linux-nat.c
+===================================================================
+--- gdb-6.3.orig/gdb/linux-nat.c 2004-12-08 18:22:04.996973094 -0500
++++ gdb-6.3/gdb/linux-nat.c 2004-12-08 18:22:20.386956067 -0500
+@@ -147,7 +147,7 @@ linux_tracefork_child (void)
+ ptrace (PTRACE_TRACEME, 0, 0, 0);
+ kill (getpid (), SIGSTOP);
+ fork ();
+- exit (0);
++ _exit (0);
+ }
+
+ /* Wrapper function for waitpid which handles EINTR. */
diff --git a/toolchain/gdb/patches/810-debian_bfd-no-kylix-crash.patch b/toolchain/gdb/patches/810-debian_bfd-no-kylix-crash.patch
new file mode 100644
index 0000000000..9aba5ca236
--- /dev/null
+++ b/toolchain/gdb/patches/810-debian_bfd-no-kylix-crash.patch
@@ -0,0 +1,47 @@
+Status: committed upstream after 6.3.
+
+Fix a crash triggered by Kylix libraries.
+
+2004-12-06 Daniel Jacobowitz <dan@debian.org>
+
+ Suggested by Fergal Daly <fergal@esatclear.ie>:
+ * simple.c (simple_dummy_multiple_definition): New function.
+ (bfd_simple_get_relocated_section_contents): Use it.
+
+Index: src/bfd/simple.c
+===================================================================
+RCS file: /cvs/src/src/bfd/simple.c,v
+retrieving revision 1.19
+retrieving revision 1.20
+Index: gdb-6.3/bfd/simple.c
+===================================================================
+--- gdb-6.3.orig/bfd/simple.c 2004-09-24 03:07:19.000000000 -0400
++++ gdb-6.3/bfd/simple.c 2004-12-08 18:25:58.415216808 -0500
+@@ -78,6 +78,19 @@ simple_dummy_unattached_reloc (struct bf
+ return TRUE;
+ }
+
++static bfd_boolean
++simple_dummy_multiple_definition (struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
++ const char *name ATTRIBUTE_UNUSED,
++ bfd *obfd ATTRIBUTE_UNUSED,
++ asection *osec ATTRIBUTE_UNUSED,
++ bfd_vma oval ATTRIBUTE_UNUSED,
++ bfd *nbfd ATTRIBUTE_UNUSED,
++ asection *nsec ATTRIBUTE_UNUSED,
++ bfd_vma nval ATTRIBUTE_UNUSED)
++{
++ return TRUE;
++}
++
+ struct saved_output_info
+ {
+ bfd_vma offset;
+@@ -172,6 +185,7 @@ bfd_simple_get_relocated_section_content
+ callbacks.reloc_overflow = simple_dummy_reloc_overflow;
+ callbacks.reloc_dangerous = simple_dummy_reloc_dangerous;
+ callbacks.unattached_reloc = simple_dummy_unattached_reloc;
++ callbacks.multiple_definition = simple_dummy_multiple_definition;
+
+ memset (&link_order, 0, sizeof (link_order));
+ link_order.next = NULL;
diff --git a/toolchain/gdb/patches/820-debian_disable-linux-fork-messages.patch b/toolchain/gdb/patches/820-debian_disable-linux-fork-messages.patch
new file mode 100644
index 0000000000..60730abc19
--- /dev/null
+++ b/toolchain/gdb/patches/820-debian_disable-linux-fork-messages.patch
@@ -0,0 +1,46 @@
+Status: Proposed upstream after 6.3, not yet committed.
+
+2004-12-06 Daniel Jacobowitz <dan@debian.org>
+
+ * linux-nat.c (child_follow_fork): Call target_terminal_ours before
+ printing output. Use fprintf_unfiltered. Only print output when
+ debugging.
+
+Index: gdb-6.3/gdb/linux-nat.c
+===================================================================
+--- gdb-6.3.orig/gdb/linux-nat.c 2004-12-08 18:22:20.386956067 -0500
++++ gdb-6.3/gdb/linux-nat.c 2004-12-08 18:28:49.995585970 -0500
+@@ -347,9 +347,13 @@ child_follow_fork (int follow_child)
+ also, but they'll be reinserted below. */
+ detach_breakpoints (child_pid);
+
+- fprintf_filtered (gdb_stdout,
+- "Detaching after fork from child process %d.\n",
+- child_pid);
++ if (debug_linux_nat)
++ {
++ target_terminal_ours ();
++ fprintf_unfiltered (gdb_stdlog,
++ "Detaching after fork from child process %d.\n",
++ child_pid);
++ }
+
+ ptrace (PTRACE_DETACH, child_pid, 0, 0);
+
+@@ -418,9 +422,13 @@ child_follow_fork (int follow_child)
+ /* Before detaching from the parent, remove all breakpoints from it. */
+ remove_breakpoints ();
+
+- fprintf_filtered (gdb_stdout,
+- "Attaching after fork to child process %d.\n",
+- child_pid);
++ if (debug_linux_nat)
++ {
++ target_terminal_ours ();
++ fprintf_unfiltered (gdb_stdlog,
++ "Attaching after fork to child process %d.\n",
++ child_pid);
++ }
+
+ /* If we're vforking, we may want to hold on to the parent until
+ the child exits or execs. At exec time we can remove the old
diff --git a/toolchain/kernel-headers/Makefile b/toolchain/kernel-headers/Makefile
new file mode 100644
index 0000000000..a242ea23ac
--- /dev/null
+++ b/toolchain/kernel-headers/Makefile
@@ -0,0 +1,63 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+PKG_NAME=kernel-headers
+PKG_VERSION=2.4.32
+
+PKG_SOURCE=linux-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL= \
+ http://www.de.kernel.org/pub/linux/kernel/v2.4 \
+ http://www.fi.kernel.org/pub/linux/kernel/v2.4 \
+ http://www.fr.kernel.org/pub/linux/kernel/v2.4 \
+ http://www.kernel.org/pub/linux/kernel/v2.4
+PKG_MD5SUM:=38f4d0830e95a20f4bfed17622d5557c
+
+PKG_BUILD_DIR:=$(TOOLCHAIN_BUILD_DIR)/linux-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/host-build.mk
+
+LINUX_KARCH:=$(shell echo $(ARCH) | sed -e 's/i[3-9]86/i386/' \
+ -e 's/mipsel/mips/' \
+ -e 's/mipseb/mips/' \
+ -e 's/powerpc/ppc/' \
+ -e 's/sh[234]/sh/' \
+ -e 's/armeb/arm/' \
+)
+
+
+define Build/Prepare
+ mkdir -p $(TOOLCHAIN_BUILD_DIR)
+ bzcat $(DL_DIR)/$(PKG_SOURCE) | tar $(TAR_WILDCARDS) -C $(TOOLCHAIN_BUILD_DIR) $(TAR_OPTIONS) - \
+ linux-$(PKG_VERSION)/include \
+ linux-$(PKG_VERSION)/Makefile \
+ linux-$(PKG_VERSION)/Rules.make \
+ linux-$(PKG_VERSION)/arch/$(LINUX_KARCH)/Makefile \
+ linux-$(PKG_VERSION)/scripts \
+ linux-$(PKG_VERSION)/arch/$(LINUX_KARCH)/config*.in \
+ linux-$(PKG_VERSION)/*/*/Config.in \
+ linux-$(PKG_VERSION)/*/Config.in
+ $(PATCH) $(PKG_BUILD_DIR) ./patches
+ $(SED) 's/@expr length/@-expr length/' $(PKG_BUILD_DIR)/Makefile
+ ln -sf $(PKG_BUILD_DIR) $(LINUX_HEADERS_DIR)
+endef
+
+define Build/Configure
+ -$(CP) ./files/config.$(LINUX_KARCH) $(PKG_BUILD_DIR)/.config
+ $(MAKE) -C $(PKG_BUILD_DIR) \
+ ARCH=$(LINUX_KARCH) \
+ CONFIG_SHELL=$(shell which bash) \
+ oldconfig include/linux/version.h
+endef
+
+define Build/Compile
+endef
+
+define Build/Install
+endef
+
+$(eval $(call HostBuild))
diff --git a/toolchain/kernel-headers/files/config.arm b/toolchain/kernel-headers/files/config.arm
new file mode 100644
index 0000000000..fc7630a1ac
--- /dev/null
+++ b/toolchain/kernel-headers/files/config.arm
@@ -0,0 +1,778 @@
+#
+# Automatically generated make config: don't edit
+#
+CONFIG_ARM=y
+# CONFIG_EISA is not set
+# CONFIG_SBUS is not set
+# CONFIG_MCA is not set
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_GENERIC_BUST_SPINLOCK is not set
+# CONFIG_GENERIC_ISA_DMA is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_KMOD is not set
+
+#
+# System Type
+#
+# CONFIG_ARCH_ANAKIN is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+CONFIG_ARCH_INTEGRATOR=y
+# CONFIG_ARCH_OMAHA is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_MX1ADS is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_RISCSTATION is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_AT91RM9200 is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+
+#
+# Archimedes/A5000 Implementations (select only ONE)
+#
+# CONFIG_ARCH_ARC is not set
+# CONFIG_ARCH_A5K is not set
+
+#
+# Footbridge Implementations
+#
+# CONFIG_ARCH_CATS is not set
+# CONFIG_ARCH_PERSONAL_SERVER is not set
+# CONFIG_ARCH_EBSA285_ADDIN is not set
+# CONFIG_ARCH_EBSA285_HOST is not set
+# CONFIG_ARCH_NETWINDER is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ACCELENT is not set
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_ASSABET_NEPONSET is not set
+# CONFIG_SA1100_ADSAGC is not set
+# CONFIG_SA1100_ADSBITSY is not set
+# CONFIG_SA1100_ADSBITSYPLUS is not set
+# CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_CEP is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_H3XXX is not set
+# CONFIG_H3600_SLEEVE is not set
+# CONFIG_SA1100_EXTENEX1 is not set
+# CONFIG_SA1100_FLEXANET is not set
+# CONFIG_SA1100_FREEBIRD is not set
+# CONFIG_SA1100_FRODO is not set
+# CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_GRAPHICSMASTER is not set
+# CONFIG_SA1100_HACKKIT is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_HUW_WEBPANEL is not set
+# CONFIG_SA1100_ITSY is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_NANOENGINE is not set
+# CONFIG_SA1100_OMNIMETER is not set
+# CONFIG_SA1100_PANGOLIN is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_PT_SYSTEM3 is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_SIMPUTER is not set
+# CONFIG_SA1100_PFS168 is not set
+# CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_XP860 is not set
+# CONFIG_SA1100_YOPY is not set
+# CONFIG_SA1100_USB is not set
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+# CONFIG_SA1100_SSP is not set
+
+#
+# AT91RM9200 Implementations
+#
+# CONFIG_ARCH_AT91RM9200DK is not set
+
+#
+# CLPS711X/EP721X Implementations
+#
+# CONFIG_ARCH_AUTCPU12 is not set
+# CONFIG_ARCH_CDB89712 is not set
+# CONFIG_ARCH_CLEP7312 is not set
+# CONFIG_ARCH_EDB7211 is not set
+# CONFIG_ARCH_FORTUNET is not set
+# CONFIG_ARCH_GUIDEA07 is not set
+# CONFIG_ARCH_P720T is not set
+# CONFIG_ARCH_EP7211 is not set
+# CONFIG_ARCH_EP7212 is not set
+# CONFIG_ARCH_ACORN is not set
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
+# CONFIG_CPU_ARM610 is not set
+# CONFIG_CPU_ARM710 is not set
+# CONFIG_CPU_ARM720T is not set
+# CONFIG_CPU_ARM920T is not set
+# CONFIG_CPU_ARM922T is not set
+# CONFIG_PLD is not set
+# CONFIG_CPU_ARM926T is not set
+# CONFIG_CPU_ARM1020 is not set
+# CONFIG_CPU_ARM1026 is not set
+# CONFIG_CPU_SA110 is not set
+# CONFIG_CPU_SA1100 is not set
+# CONFIG_CPU_32v3 is not set
+CONFIG_CPU_32v4=y
+
+#
+# Processor Features
+#
+# CONFIG_DISCONTIGMEM is not set
+
+#
+# General setup
+#
+CONFIG_PCI_INTEGRATOR=y
+CONFIG_PCI=y
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+# CONFIG_CPU_FREQ is not set
+CONFIG_PCI_NAMES=y
+# CONFIG_HOTPLUG is not set
+# CONFIG_PCMCIA is not set
+CONFIG_NET=y
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+
+#
+# At least one math emulation must be selected
+#
+# CONFIG_FPE_NWFPE is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+CONFIG_BINFMT_AOUT=y
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_PM is not set
+# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="root=1f04 mem=32M"
+CONFIG_LEDS=y
+CONFIG_LEDS_TIMER=y
+CONFIG_LEDS_CPU=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_PARTITIONS is not set
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_AMDSTD is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_NORA is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_CDB89712 is not set
+# CONFIG_MTD_SA1100 is not set
+# CONFIG_MTD_DC21285 is not set
+# CONFIG_MTD_IQ80310 is not set
+# CONFIG_MTD_EPXA10DB is not set
+# CONFIG_MTD_FORTUNET is not set
+# CONFIG_MTD_AUTCPU12 is not set
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_CEIVA is not set
+# CONFIG_MTD_PCI is not set
+# CONFIG_MTD_PCMCIA is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_CISS_SCSI_TAPE is not set
+# CONFIG_CISS_MONITOR_THREAD is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=4096
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_BLK_STATS is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Networking options
+#
+# CONFIG_PACKET is not set
+# CONFIG_NETLINK_DEV is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_FILTER is not set
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_IPV6 is not set
+# CONFIG_KHTTPD is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_VLAN_8021Q is not set
+
+#
+#
+#
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_ETHERTAP is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_ARM_AM79C961A is not set
+# CONFIG_ARM_CIRRUS is not set
+# CONFIG_SUNLANCE is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_ISA is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_APRICOT is not set
+# CONFIG_B44 is not set
+# CONFIG_CS89x0 is not set
+CONFIG_TULIP=y
+# CONFIG_TULIP_MWI is not set
+# CONFIG_TULIP_MMIO is not set
+# CONFIG_DE4X5 is not set
+# CONFIG_DGRS is not set
+# CONFIG_DM9102 is not set
+CONFIG_EEPRO100=y
+# CONFIG_EEPRO100_PIO is not set
+# CONFIG_E100 is not set
+# CONFIG_LNE390 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_NE3210 is not set
+# CONFIG_ES3210 is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_8139TOO_PIO is not set
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_SUNDANCE_MMIO is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_WINBOND_840 is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+# CONFIG_IRDA is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI support
+#
+# CONFIG_SCSI is not set
+
+#
+# IEEE 1394 (FireWire) support (EXPERIMENTAL)
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_PCI is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+# CONFIG_INPUT is not set
+# CONFIG_INPUT_KEYBDEV is not set
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+# CONFIG_SERIAL is not set
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+CONFIG_MOUSE=y
+CONFIG_PSMOUSE=y
+# CONFIG_82C710_MOUSE is not set
+# CONFIG_PC110_PAD is not set
+# CONFIG_MK712_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+
+#
+# Input core support is needed for gameports
+#
+
+#
+# Input core support is needed for joysticks
+#
+# CONFIG_QIC02_TAPE is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_IPMI_PANIC_EVENT is not set
+# CONFIG_IPMI_DEVICE_INTERFACE is not set
+# CONFIG_IPMI_KCS is not set
+# CONFIG_IPMI_WATCHDOG is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_SCx200 is not set
+# CONFIG_SCx200_GPIO is not set
+# CONFIG_AMD_PM768 is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+
+#
+# Direct Rendering Manager (XFree86 DRI support)
+#
+# CONFIG_DRM is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_QFMT_V2 is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BEFS_DEBUG is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_FAT_FS is not set
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_TMPFS is not set
+CONFIG_RAMFS=y
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+CONFIG_DEVPTS_FS=y
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+CONFIG_ROMFS_FS=y
+CONFIG_EXT2_FS=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_TRACE is not set
+# CONFIG_XFS_DEBUG is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+# CONFIG_NFSD_V3 is not set
+# CONFIG_NFSD_TCP is not set
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+# CONFIG_SMB_FS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_ZISOFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+# CONFIG_MSDOS_PARTITION is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SMB_NLS is not set
+# CONFIG_NLS is not set
+
+#
+# Console drivers
+#
+CONFIG_KMI_KEYB=y
+CONFIG_KMI_MOUSE=y
+CONFIG_PC_KEYMAP=y
+CONFIG_VGA_CONSOLE=y
+
+#
+# Frame-buffer support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# Misc devices
+#
+
+#
+# USB support
+#
+# CONFIG_USB is not set
+
+#
+# Support for USB gadgets
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# Bluetooth support
+#
+# CONFIG_BLUEZ is not set
+
+#
+# Kernel hacking
+#
+CONFIG_FRAME_POINTER=y
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_NO_PGT_CACHE is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_LL is not set
+# CONFIG_DEBUG_DC21285_PORT is not set
+# CONFIG_DEBUG_CLPS711X_UART2 is not set
+CONFIG_LOG_BUF_SHIFT=0
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+# CONFIG_CRC32 is not set
+# CONFIG_ZLIB_INFLATE is not set
+# CONFIG_ZLIB_DEFLATE is not set
diff --git a/toolchain/kernel-headers/files/config.i386 b/toolchain/kernel-headers/files/config.i386
new file mode 100644
index 0000000000..2d218093ce
--- /dev/null
+++ b/toolchain/kernel-headers/files/config.i386
@@ -0,0 +1,950 @@
+#
+# Automatically generated make config: don't edit
+#
+CONFIG_X86=y
+# CONFIG_SBUS is not set
+CONFIG_UID16=y
+
+#
+# Code maturity level options
+#
+# CONFIG_EXPERIMENTAL is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODVERSIONS=y
+CONFIG_KMOD=y
+
+#
+# Processor type and features
+#
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+# CONFIG_M586 is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+# CONFIG_M686 is not set
+CONFIG_MPENTIUMIII=y
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MELAN is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_INVLPG=y
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_XADD=y
+CONFIG_X86_BSWAP=y
+CONFIG_X86_POPAD_OK=y
+# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_X86_L1_CACHE_SHIFT=5
+CONFIG_X86_HAS_TSC=y
+CONFIG_X86_GOOD_APIC=y
+CONFIG_X86_PGE=y
+CONFIG_X86_USE_PPRO_CHECKSUM=y
+CONFIG_X86_F00F_WORKS_OK=y
+CONFIG_X86_MCE=y
+# CONFIG_TOSHIBA is not set
+# CONFIG_I8K is not set
+# CONFIG_MICROCODE is not set
+# CONFIG_X86_MSR is not set
+# CONFIG_X86_CPUID is not set
+CONFIG_NOHIGHMEM=y
+# CONFIG_HIGHMEM4G is not set
+# CONFIG_HIGHMEM64G is not set
+# CONFIG_HIGHMEM is not set
+# CONFIG_MATH_EMULATION is not set
+# CONFIG_MTRR is not set
+CONFIG_SMP=y
+CONFIG_NR_CPUS=32
+# CONFIG_X86_NUMA is not set
+# CONFIG_X86_TSC_DISABLE is not set
+CONFIG_X86_TSC=y
+CONFIG_HAVE_DEC_LOCK=y
+
+#
+# General setup
+#
+CONFIG_NET=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GODIRECT is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_ISA=y
+CONFIG_PCI_NAMES=y
+# CONFIG_EISA is not set
+# CONFIG_MCA is not set
+CONFIG_HOTPLUG=y
+
+#
+# PCMCIA/CardBus support
+#
+CONFIG_PCMCIA=y
+CONFIG_CARDBUS=y
+# CONFIG_TCIC is not set
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+# CONFIG_HOTPLUG_PCI_COMPAQ is not set
+# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
+# CONFIG_HOTPLUG_PCI_IBM is not set
+# CONFIG_HOTPLUG_PCI_SHPC is not set
+# CONFIG_HOTPLUG_PCI_SHPC_POLL_EVENT_MODE is not set
+# CONFIG_HOTPLUG_PCI_SHPC_PHPRM_LEGACY is not set
+# CONFIG_HOTPLUG_PCI_PCIE is not set
+# CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE is not set
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+CONFIG_BINFMT_AOUT=y
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_MISC=y
+# CONFIG_OOM_KILLER is not set
+CONFIG_PM=y
+# CONFIG_APM is not set
+
+#
+# ACPI Support
+#
+# CONFIG_ACPI is not set
+CONFIG_ACPI_BOOT=y
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play configuration
+#
+CONFIG_PNP=y
+CONFIG_ISAPNP=y
+
+#
+# Block devices
+#
+CONFIG_BLK_DEV_FD=y
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_CISS_SCSI_TAPE is not set
+# CONFIG_CISS_MONITOR_THREAD is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_BLK_STATS is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+# CONFIG_NETLINK_DEV is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_FILTER is not set
+CONFIG_UNIX=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_INET_ECN is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_VLAN_8021Q is not set
+
+#
+#
+#
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+# CONFIG_PHONE_IXJ is not set
+# CONFIG_PHONE_IXJ_PCMCIA is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+CONFIG_IDEDISK_MULTI_MODE=y
+# CONFIG_IDEDISK_STROKE is not set
+# CONFIG_BLK_DEV_IDECS is not set
+# CONFIG_BLK_DEV_DELKIN is not set
+CONFIG_BLK_DEV_IDECD=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_BLK_DEV_CMD640=y
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+CONFIG_BLK_DEV_IDEPCI=y
+# CONFIG_BLK_DEV_GENERIC is not set
+CONFIG_IDEPCI_SHARE_IRQ=y
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_PCI_WIP is not set
+# CONFIG_BLK_DEV_ADMA100 is not set
+# CONFIG_BLK_DEV_AEC62XX is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_WDC_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+# CONFIG_AMD74XX_OVERRIDE is not set
+# CONFIG_BLK_DEV_ATIIXP is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_HPT34X_AUTODMA is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+CONFIG_BLK_DEV_PIIX=y
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_OPTI621 is not set
+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
+# CONFIG_PDC202XX_BURST is not set
+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+CONFIG_BLK_DEV_RZ1000=y
+# CONFIG_BLK_DEV_SC1200 is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SIS5513 is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+# CONFIG_IDE_CHIPSETS is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_IDEDMA_IVB is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_BLK_DEV_ATARAID is not set
+# CONFIG_BLK_DEV_ATARAID_PDC is not set
+# CONFIG_BLK_DEV_ATARAID_HPT is not set
+# CONFIG_BLK_DEV_ATARAID_MEDLEY is not set
+# CONFIG_BLK_DEV_ATARAID_SII is not set
+
+#
+# SCSI support
+#
+CONFIG_SCSI=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_SD_EXTRA_DEVS=40
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_DEBUG_QUEUES=y
+CONFIG_SCSI_MULTI_LUN=y
+CONFIG_SCSI_CONSTANTS=y
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AHA1740 is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_AM53C974 is not set
+# CONFIG_SCSI_MEGARAID is not set
+# CONFIG_SCSI_MEGARAID2 is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_SATA_AHCI is not set
+# CONFIG_SCSI_SATA_SVW is not set
+# CONFIG_SCSI_ATA_PIIX is not set
+# CONFIG_SCSI_SATA_NV is not set
+# CONFIG_SCSI_SATA_PROMISE is not set
+# CONFIG_SCSI_SATA_SX4 is not set
+# CONFIG_SCSI_SATA_SIL is not set
+# CONFIG_SCSI_SATA_SIS is not set
+# CONFIG_SCSI_SATA_ULI is not set
+# CONFIG_SCSI_SATA_VIA is not set
+# CONFIG_SCSI_SATA_VITESSE is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_CPQFCTS is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_EATA_DMA is not set
+# CONFIG_SCSI_EATA_PIO is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_NCR53C7xx is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_NCR53C8XX is not set
+CONFIG_SCSI_SYM53C8XX=y
+CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=4
+CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
+CONFIG_SCSI_NCR53C8XX_SYNC=20
+# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
+# CONFIG_SCSI_NCR53C8XX_IOMAPPED is not set
+# CONFIG_SCSI_NCR53C8XX_PQS_PDS is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PCI2000 is not set
+# CONFIG_SCSI_PCI2220I is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_QLOGIC_ISP is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_SEAGATE is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_ULTRASTOR is not set
+# CONFIG_SCSI_NSP32 is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_SCSI_PCMCIA is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_BOOT is not set
+# CONFIG_FUSION_ISENSE is not set
+# CONFIG_FUSION_CTL is not set
+# CONFIG_FUSION_LAN is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_PCI is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_NET_SB1000 is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_SUNLANCE is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_ISA is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_AC3200 is not set
+# CONFIG_APRICOT is not set
+# CONFIG_B44 is not set
+# CONFIG_CS89x0 is not set
+# CONFIG_TULIP is not set
+# CONFIG_DE4X5 is not set
+# CONFIG_DGRS is not set
+# CONFIG_DM9102 is not set
+CONFIG_EEPRO100=y
+# CONFIG_EEPRO100_PIO is not set
+# CONFIG_E100 is not set
+# CONFIG_LNE390 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_NE3210 is not set
+# CONFIG_ES3210 is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_8139TOO_PIO is not set
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_SUNDANCE_MMIO is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_WINBOND_840 is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_FDDI is not set
+# CONFIG_PLIP is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=y
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_ARCNET_COM20020_CS is not set
+# CONFIG_PCMCIA_IBMTR is not set
+# CONFIG_PCMCIA_XIRCOM is not set
+# CONFIG_PCMCIA_XIRTULIP is not set
+CONFIG_NET_PCMCIA_RADIO=y
+CONFIG_PCMCIA_RAYCS=y
+# CONFIG_PCMCIA_NETWAVE is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_AIRONET4500_CS is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+# CONFIG_IRDA is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Old CD-ROM drivers (not SCSI, not IDE)
+#
+# CONFIG_CD_NO_IDESCSI is not set
+
+#
+# Input core support
+#
+# CONFIG_INPUT is not set
+# CONFIG_INPUT_KEYBDEV is not set
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+# CONFIG_SERIAL_CONSOLE is not set
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+CONFIG_MOUSE=y
+CONFIG_PSMOUSE=y
+# CONFIG_82C710_MOUSE is not set
+# CONFIG_PC110_PAD is not set
+# CONFIG_MK712_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+
+#
+# Input core support is needed for gameports
+#
+
+#
+# Input core support is needed for joysticks
+#
+# CONFIG_QIC02_TAPE is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_IPMI_PANIC_EVENT is not set
+# CONFIG_IPMI_DEVICE_INTERFACE is not set
+# CONFIG_IPMI_KCS is not set
+# CONFIG_IPMI_WATCHDOG is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_SCx200 is not set
+# CONFIG_SCx200_GPIO is not set
+# CONFIG_AMD_RNG is not set
+# CONFIG_INTEL_RNG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_AMD_PM768 is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+CONFIG_AGP=y
+CONFIG_AGP_INTEL=y
+CONFIG_AGP_I810=y
+CONFIG_AGP_VIA=y
+CONFIG_AGP_AMD=y
+# CONFIG_AGP_AMD_K8 is not set
+CONFIG_AGP_SIS=y
+CONFIG_AGP_ALI=y
+# CONFIG_AGP_SWORKS is not set
+# CONFIG_AGP_NVIDIA is not set
+# CONFIG_AGP_ATI is not set
+
+#
+# Direct Rendering Manager (XFree86 DRI support)
+#
+CONFIG_DRM=y
+# CONFIG_DRM_OLD is not set
+
+#
+# DRM 4.1 drivers
+#
+CONFIG_DRM_NEW=y
+CONFIG_DRM_TDFX=y
+# CONFIG_DRM_GAMMA is not set
+# CONFIG_DRM_R128 is not set
+CONFIG_DRM_RADEON=y
+CONFIG_DRM_I810=y
+CONFIG_DRM_I810_XFREE_41=y
+# CONFIG_DRM_I830 is not set
+# CONFIG_DRM_MGA is not set
+# CONFIG_DRM_SIS is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_PCMCIA_SERIAL_CS is not set
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_MWAVE is not set
+# CONFIG_OBMOUSE is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_QFMT_V2 is not set
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BEFS_DEBUG is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_FAT_FS is not set
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+CONFIG_TMPFS=y
+CONFIG_RAMFS=y
+CONFIG_ISO9660_FS=y
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+CONFIG_DEVPTS_FS=y
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_TRACE is not set
+# CONFIG_XFS_DEBUG is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_ROOT_NFS is not set
+CONFIG_NFSD=y
+# CONFIG_NFSD_V3 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+# CONFIG_SMB_FS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_ZISOFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_SMB_NLS is not set
+# CONFIG_NLS is not set
+
+#
+# Console drivers
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VIDEO_SELECT is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+# CONFIG_SOUND_ALI5455 is not set
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_MIDI_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+CONFIG_SOUND_ES1371=y
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_FORTE is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_MIDI_VIA82CXXX is not set
+# CONFIG_SOUND_OSS is not set
+# CONFIG_SOUND_TVMIXER is not set
+# CONFIG_SOUND_AD1980 is not set
+# CONFIG_SOUND_WM97XX is not set
+
+#
+# USB support
+#
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_BANDWIDTH is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_EHCI_HCD is not set
+CONFIG_USB_UHCI_ALT=y
+# CONFIG_USB_OHCI is not set
+# CONFIG_USB_SL811HS_ALT is not set
+# CONFIG_USB_SL811HS is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_MIDI is not set
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# USB Human Interface Devices (HID)
+#
+# CONFIG_USB_HID is not set
+
+#
+# Input core support is needed for USB HID input layer or HIDBP support
+#
+# CONFIG_USB_HIDINPUT is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+
+#
+# USB Multimedia devices
+#
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network adaptors
+#
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_USBNET is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_TIGL is not set
+# CONFIG_USB_BRLVGER is not set
+# CONFIG_USB_LCD is not set
+
+#
+# Support for USB gadgets
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# Bluetooth support
+#
+# CONFIG_BLUEZ is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=0
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_CRC32=y
+# CONFIG_ZLIB_INFLATE is not set
+# CONFIG_ZLIB_DEFLATE is not set
diff --git a/toolchain/kernel-headers/files/config.mips b/toolchain/kernel-headers/files/config.mips
new file mode 100644
index 0000000000..d6412028b4
--- /dev/null
+++ b/toolchain/kernel-headers/files/config.mips
@@ -0,0 +1,1045 @@
+#
+# Automatically generated make config: don't edit
+#
+CONFIG_MIPS=y
+CONFIG_MIPS32=y
+# CONFIG_MIPS64 is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_KMOD is not set
+
+#
+# Machine selection
+#
+# CONFIG_ACER_PICA_61 is not set
+# CONFIG_MIPS_BOSPORUS is not set
+# CONFIG_MIPS_MIRAGE is not set
+# CONFIG_MIPS_DB1000 is not set
+# CONFIG_MIPS_DB1100 is not set
+# CONFIG_MIPS_DB1500 is not set
+# CONFIG_MIPS_DB1550 is not set
+# CONFIG_MIPS_PB1000 is not set
+# CONFIG_MIPS_PB1100 is not set
+# CONFIG_MIPS_PB1500 is not set
+# CONFIG_MIPS_HYDROGEN3 is not set
+# CONFIG_MIPS_PB1550 is not set
+# CONFIG_MIPS_XXS1500 is not set
+# CONFIG_MIPS_MTX1 is not set
+# CONFIG_COGENT_CSB250 is not set
+# CONFIG_BAGET_MIPS is not set
+# CONFIG_CASIO_E55 is not set
+# CONFIG_MIPS_COBALT is not set
+# CONFIG_DECSTATION is not set
+# CONFIG_MIPS_EV64120 is not set
+# CONFIG_MIPS_EV96100 is not set
+# CONFIG_MIPS_IVR is not set
+# CONFIG_HP_LASERJET is not set
+# CONFIG_IBM_WORKPAD is not set
+# CONFIG_LASAT is not set
+# CONFIG_MIPS_ITE8172 is not set
+# CONFIG_MIPS_ATLAS is not set
+# CONFIG_MIPS_MAGNUM_4000 is not set
+# CONFIG_MIPS_MALTA is not set
+# CONFIG_MIPS_SEAD is not set
+# CONFIG_MOMENCO_OCELOT is not set
+# CONFIG_MOMENCO_OCELOT_G is not set
+# CONFIG_MOMENCO_OCELOT_C is not set
+# CONFIG_MOMENCO_JAGUAR_ATX is not set
+# CONFIG_PMC_BIG_SUR is not set
+# CONFIG_PMC_STRETCH is not set
+# CONFIG_PMC_YOSEMITE is not set
+# CONFIG_DDB5074 is not set
+# CONFIG_DDB5476 is not set
+# CONFIG_DDB5477 is not set
+# CONFIG_NEC_OSPREY is not set
+# CONFIG_NEC_EAGLE is not set
+# CONFIG_OLIVETTI_M700 is not set
+# CONFIG_NINO is not set
+# CONFIG_SGI_IP22 is not set
+# CONFIG_SGI_IP27 is not set
+# CONFIG_SIBYTE_SB1xxx_SOC is not set
+# CONFIG_SNI_RM200_PCI is not set
+# CONFIG_TANBAC_TB0226 is not set
+# CONFIG_TANBAC_TB0229 is not set
+# CONFIG_TOSHIBA_JMR3927 is not set
+# CONFIG_TOSHIBA_RBTX4927 is not set
+# CONFIG_VICTOR_MPC30X is not set
+# CONFIG_ZAO_CAPCELLA is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_MIPS_AU1000 is not set
+
+#
+# CPU selection
+#
+CONFIG_CPU_MIPS32=y
+# CONFIG_CPU_MIPS64 is not set
+# CONFIG_CPU_R3000 is not set
+# CONFIG_CPU_TX39XX is not set
+# CONFIG_CPU_VR41XX is not set
+# CONFIG_CPU_R4300 is not set
+# CONFIG_CPU_R4X00 is not set
+# CONFIG_CPU_TX49XX is not set
+# CONFIG_CPU_R5000 is not set
+# CONFIG_CPU_R5432 is not set
+# CONFIG_CPU_R6000 is not set
+# CONFIG_CPU_NEVADA is not set
+# CONFIG_CPU_R8000 is not set
+# CONFIG_CPU_R10000 is not set
+# CONFIG_CPU_RM7000 is not set
+# CONFIG_CPU_RM9000 is not set
+# CONFIG_CPU_SB1 is not set
+CONFIG_PAGE_SIZE_4KB=y
+# CONFIG_PAGE_SIZE_16KB is not set
+# CONFIG_PAGE_SIZE_64KB is not set
+CONFIG_CPU_HAS_PREFETCH=y
+# CONFIG_VTAG_ICACHE is not set
+# CONFIG_64BIT_PHYS_ADDR is not set
+# CONFIG_CPU_ADVANCED is not set
+CONFIG_CPU_HAS_LLSC=y
+# CONFIG_CPU_HAS_LLDSCD is not set
+# CONFIG_CPU_HAS_WB is not set
+CONFIG_CPU_HAS_SYNC=y
+
+#
+# General setup
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
+# CONFIG_BUILD_ELF64 is not set
+CONFIG_NET=y
+CONFIG_PCI=y
+# CONFIG_PCI_NEW is not set
+CONFIG_PCI_AUTO=y
+# CONFIG_PCI_NAMES is not set
+# CONFIG_ISA is not set
+# CONFIG_TC is not set
+# CONFIG_MCA is not set
+# CONFIG_SBUS is not set
+# CONFIG_HOTPLUG is not set
+# CONFIG_PCMCIA is not set
+# CONFIG_HOTPLUG_PCI is not set
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_MIPS32_COMPAT is not set
+# CONFIG_MIPS32_O32 is not set
+# CONFIG_MIPS32_N32 is not set
+# CONFIG_BINFMT_ELF32 is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_OOM_KILLER is not set
+# CONFIG_CMDLINE_BOOL is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_CFI_B1 is not set
+CONFIG_MTD_CFI_B2=y
+# CONFIG_MTD_CFI_B4 is not set
+# CONFIG_MTD_CFI_B8 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_AMDSTD is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_PB1000 is not set
+# CONFIG_MTD_PB1500 is not set
+# CONFIG_MTD_PB1100 is not set
+# CONFIG_MTD_CSTM_MIPS_IXX is not set
+# CONFIG_MTD_OCELOT is not set
+# CONFIG_MTD_LASAT is not set
+# CONFIG_MTD_PCI is not set
+# CONFIG_MTD_PCMCIA is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_CISS_SCSI_TAPE is not set
+# CONFIG_CISS_MONITOR_THREAD is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_SX8 is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_BLK_STATS is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=m
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+# CONFIG_FILTER is not set
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_FWMARK=y
+CONFIG_IP_ROUTE_NAT=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_TOS=y
+# CONFIG_IP_ROUTE_VERBOSE is not set
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
+# CONFIG_SYN_COOKIES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=y
+CONFIG_IP_NF_FTP=y
+# CONFIG_IP_NF_AMANDA is not set
+CONFIG_IP_NF_TFTP=y
+CONFIG_IP_NF_IRC=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_LIMIT=m
+CONFIG_IP_NF_MATCH_MAC=m
+CONFIG_IP_NF_MATCH_PKTTYPE=m
+CONFIG_IP_NF_MATCH_MARK=y
+CONFIG_IP_NF_MATCH_MULTIPORT=y
+CONFIG_IP_NF_MATCH_TOS=m
+# CONFIG_IP_NF_MATCH_RECENT is not set
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_LENGTH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_TCPMSS=y
+CONFIG_IP_NF_MATCH_HELPER=m
+CONFIG_IP_NF_MATCH_STATE=y
+CONFIG_IP_NF_MATCH_CONNTRACK=m
+CONFIG_IP_NF_MATCH_UNCLEAN=m
+# CONFIG_IP_NF_MATCH_OWNER is not set
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_TARGET_MIRROR=m
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
+CONFIG_IP_NF_NAT_SNMP_BASIC=m
+CONFIG_IP_NF_NAT_IRC=y
+CONFIG_IP_NF_NAT_FTP=y
+CONFIG_IP_NF_NAT_TFTP=y
+CONFIG_IP_NF_MANGLE=y
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_MARK=y
+CONFIG_IP_NF_TARGET_LOG=y
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=y
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+# CONFIG_IP_NF_ARP_MANGLE is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_LIMIT=m
+CONFIG_IP6_NF_MATCH_MAC=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+CONFIG_IP6_NF_MATCH_MULTIPORT=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_MARK=m
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AHESP is not set
+CONFIG_IP6_NF_MATCH_LENGTH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_MARK=m
+# CONFIG_KHTTPD is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+CONFIG_VLAN_8021Q=y
+
+#
+#
+#
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
+CONFIG_BRIDGE=y
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_CSZ=m
+# CONFIG_NET_SCH_HFSC is not set
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+# CONFIG_NET_SCH_NETEM is not set
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_INGRESS=m
+CONFIG_NET_QOS=y
+CONFIG_NET_ESTIMATOR=y
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_POLICE=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+# CONFIG_PHONE_IXJ is not set
+# CONFIG_PHONE_IXJ_PCMCIA is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+# CONFIG_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI support
+#
+CONFIG_SCSI=m
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_SD_EXTRA_DEVS=5
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+CONFIG_CHR_DEV_SG=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_DEBUG_QUEUES is not set
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AHA1740 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_AM53C974 is not set
+# CONFIG_SCSI_MEGARAID is not set
+# CONFIG_SCSI_MEGARAID2 is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_SATA_AHCI is not set
+# CONFIG_SCSI_SATA_SVW is not set
+# CONFIG_SCSI_ATA_PIIX is not set
+# CONFIG_SCSI_SATA_NV is not set
+# CONFIG_SCSI_SATA_PROMISE is not set
+# CONFIG_SCSI_SATA_SX4 is not set
+# CONFIG_SCSI_SATA_SIL is not set
+# CONFIG_SCSI_SATA_SIS is not set
+# CONFIG_SCSI_SATA_ULI is not set
+# CONFIG_SCSI_SATA_VIA is not set
+# CONFIG_SCSI_SATA_VITESSE is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_CPQFCTS is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_EATA_DMA is not set
+# CONFIG_SCSI_EATA_PIO is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_NCR53C7xx is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_NCR53C8XX is not set
+# CONFIG_SCSI_SYM53C8XX is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PCI2000 is not set
+# CONFIG_SCSI_PCI2220I is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_QLOGIC_ISP is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_BOOT is not set
+# CONFIG_FUSION_ISENSE is not set
+# CONFIG_FUSION_CTL is not set
+# CONFIG_FUSION_LAN is not set
+
+#
+# IEEE 1394 (FireWire) support (EXPERIMENTAL)
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_PCI is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_ETHERTAP is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_SUNLANCE is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+CONFIG_SHAPER=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+# CONFIG_IRDA is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+# CONFIG_INPUT is not set
+# CONFIG_INPUT_KEYBDEV is not set
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+CONFIG_SERIAL=y
+CONFIG_SERIAL_CONSOLE=y
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=128
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+# CONFIG_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+
+#
+# Input core support is needed for gameports
+#
+
+#
+# Input core support is needed for joysticks
+#
+# CONFIG_QIC02_TAPE is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_IPMI_PANIC_EVENT is not set
+# CONFIG_IPMI_DEVICE_INTERFACE is not set
+# CONFIG_IPMI_KCS is not set
+# CONFIG_IPMI_WATCHDOG is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+# CONFIG_ACQUIRE_WDT is not set
+# CONFIG_ADVANTECH_WDT is not set
+# CONFIG_ALIM1535_WDT is not set
+# CONFIG_ALIM7101_WDT is not set
+# CONFIG_SC520_WDT is not set
+# CONFIG_PCWATCHDOG is not set
+# CONFIG_EUROTECH_WDT is not set
+# CONFIG_IB700_WDT is not set
+# CONFIG_WAFER_WDT is not set
+# CONFIG_I810_TCO is not set
+# CONFIG_MIXCOMWD is not set
+# CONFIG_60XX_WDT is not set
+# CONFIG_SC1200_WDT is not set
+# CONFIG_SCx200_WDT is not set
+CONFIG_SOFT_WATCHDOG=y
+# CONFIG_W83877F_WDT is not set
+# CONFIG_WDT is not set
+# CONFIG_WDTPCI is not set
+# CONFIG_MACHZ_WDT is not set
+# CONFIG_SCx200 is not set
+# CONFIG_SCx200_GPIO is not set
+# CONFIG_AMD_PM768 is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_MIPS_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+
+#
+# Direct Rendering Manager (XFree86 DRI support)
+#
+# CONFIG_DRM is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_QFMT_V2 is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BEFS_DEBUG is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+# CONFIG_UMSDOS_FS is not set
+CONFIG_VFAT_FS=m
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_CRAMFS=y
+# CONFIG_TMPFS is not set
+CONFIG_RAMFS=y
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+CONFIG_DEVFS_FS=y
+CONFIG_DEVFS_MOUNT=y
+# CONFIG_DEVFS_DEBUG is not set
+# CONFIG_DEVPTS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=m
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_TRACE is not set
+# CONFIG_XFS_DEBUG is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_ROOT_NFS is not set
+# CONFIG_NFSD is not set
+# CONFIG_NFSD_V3 is not set
+# CONFIG_NFSD_TCP is not set
+CONFIG_SUNRPC=m
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+# CONFIG_SMB_FS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_ZISOFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SMB_NLS is not set
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS_DEFAULT="iso8859-1"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ISO8859_1 is not set
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_UHCI is not set
+# CONFIG_USB_UHCI_ALT is not set
+CONFIG_USB_OHCI=m
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_BLUETOOTH is not set
+# CONFIG_USB_MIDI is not set
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+# CONFIG_USB_STORAGE_ISD200 is not set
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_HP8200e=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+# CONFIG_USB_ACM is not set
+CONFIG_USB_PRINTER=m
+
+#
+# USB Human Interface Devices (HID)
+#
+# CONFIG_USB_HID is not set
+
+#
+# Input core support is needed for USB HID input layer or HIDBP support
+#
+# CONFIG_USB_HIDINPUT is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+
+#
+# USB Multimedia devices
+#
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network adaptors
+#
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_USBNET is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_TIGL is not set
+# CONFIG_USB_BRLVGER is not set
+# CONFIG_USB_LCD is not set
+
+#
+# Support for USB gadgets
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# Bluetooth support
+#
+# CONFIG_BLUEZ is not set
+
+#
+# Kernel hacking
+#
+CONFIG_CROSSCOMPILE=y
+# CONFIG_RUNTIME_DEBUG is not set
+# CONFIG_KGDB is not set
+# CONFIG_GDB_CONSOLE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_MIPS_UNCACHED is not set
+CONFIG_LOG_BUF_SHIFT=0
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+# CONFIG_CRC32 is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff --git a/toolchain/kernel-headers/files/config.ppc b/toolchain/kernel-headers/files/config.ppc
new file mode 100644
index 0000000000..cbd1279a15
--- /dev/null
+++ b/toolchain/kernel-headers/files/config.ppc
@@ -0,0 +1,341 @@
+#
+# Automatically generated by make menuconfig: don't edit
+#
+# CONFIG_UID16 is not set
+# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_HAVE_DEC_LOCK=y
+
+#
+# Code maturity level options
+#
+# CONFIG_EXPERIMENTAL is not set
+# CONFIG_ADVANCED_OPTIONS is not set
+
+#
+# Loadable module support
+#
+# CONFIG_MODULES is not set
+
+#
+# Platform support
+#
+CONFIG_PPC=y
+CONFIG_PPC32=y
+# CONFIG_6xx is not set
+CONFIG_40x=y
+# CONFIG_44x is not set
+# CONFIG_POWER3 is not set
+# CONFIG_POWER4 is not set
+# CONFIG_8xx is not set
+CONFIG_4xx=y
+# CONFIG_CPCI405 is not set
+# CONFIG_EP405 is not set
+# CONFIG_REDWOOD_5 is not set
+# CONFIG_REDWOOD_6 is not set
+# CONFIG_OAK is not set
+CONFIG_WALNUT=y
+# CONFIG_SMP is not set
+# CONFIG_MATH_EMULATION is not set
+CONFIG_NOT_COHERENT_CACHE=y
+CONFIG_UART0_TTYS0=y
+# CONFIG_UART0_TTYS1 is not set
+CONFIG_405GP=y
+CONFIG_IBM_OCP=y
+CONFIG_PPC_OCP=y
+CONFIG_405=y
+CONFIG_IBM405_ERR51=y
+CONFIG_IBM405_ERR77=y
+# CONFIG_PPC4xx_DMA is not set
+CONFIG_IBM_OPENBIOS=y
+CONFIG_BIOS_FIXUP=y
+
+#
+# General setup
+#
+# CONFIG_HIGHMEM is not set
+CONFIG_HIGHMEM_START=0xfe000000
+CONFIG_LOWMEM_SIZE=0x30000000
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_TASK_SIZE=0x80000000
+# CONFIG_ISA is not set
+# CONFIG_EISA is not set
+# CONFIG_SBUS is not set
+# CONFIG_MCA is not set
+# CONFIG_PCI is not set
+# CONFIG_PC_KEYBOARD is not set
+# CONFIG_NET is not set
+# CONFIG_SYSCTL is not set
+# CONFIG_SYSVIPC is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_BINFMT_ELF=y
+CONFIG_KERNEL_ELF=y
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_OOM_KILLER is not set
+# CONFIG_HOTPLUG is not set
+# CONFIG_PCMCIA is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_PPC_RTC is not set
+# CONFIG_CMDLINE_BOOL is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_CISS_SCSI_TAPE is not set
+# CONFIG_CISS_MONITOR_THREAD is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_BLK_STATS is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+# CONFIG_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI support
+#
+# CONFIG_SCSI is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Old CD-ROM drivers (not SCSI, not IDE)
+#
+# CONFIG_CD_NO_IDESCSI is not set
+
+#
+# Console drivers
+#
+
+#
+# Frame-buffer support
+#
+# CONFIG_FB is not set
+
+#
+# Input core support
+#
+# CONFIG_INPUT is not set
+# CONFIG_INPUT_KEYBDEV is not set
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Macintosh device drivers
+#
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL is not set
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_UNIX98_PTYS is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+# CONFIG_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+# CONFIG_QIC02_TAPE is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_IPMI_PANIC_EVENT is not set
+# CONFIG_IPMI_DEVICE_INTERFACE is not set
+# CONFIG_IPMI_KCS is not set
+# CONFIG_IPMI_WATCHDOG is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_SCx200 is not set
+# CONFIG_SCx200_GPIO is not set
+# CONFIG_AMD_PM768 is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+
+#
+# Direct Rendering Manager (XFree86 DRI support)
+#
+# CONFIG_DRM is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_QFMT_V2 is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BEFS_DEBUG is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_FAT_FS is not set
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_TMPFS is not set
+CONFIG_RAMFS=y
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_PROC_FS is not set
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+# CONFIG_DEVPTS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_EXT2_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_TRACE is not set
+# CONFIG_XFS_DEBUG is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_ZISOFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_SMB_NLS is not set
+# CONFIG_NLS is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB is not set
+
+#
+# Support for USB gadgets
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+# CONFIG_CRC32 is not set
+# CONFIG_ZLIB_INFLATE is not set
+# CONFIG_ZLIB_DEFLATE is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=0
diff --git a/toolchain/kernel-headers/patches/include.patch b/toolchain/kernel-headers/patches/include.patch
new file mode 100644
index 0000000000..1618bbdfd3
--- /dev/null
+++ b/toolchain/kernel-headers/patches/include.patch
@@ -0,0 +1,17954 @@
+diff -Nur linux-2.4.32/include/asm-alpha/param.h linux-2.4.32.patched/include/asm-alpha/param.h
+--- linux-2.4.32/include/asm-alpha/param.h 2000-11-08 08:37:31.000000000 +0100
++++ linux-2.4.32.patched/include/asm-alpha/param.h 2006-03-13 18:55:54.000000000 +0100
+@@ -13,6 +13,9 @@
+ # else
+ # define HZ 1200
+ # endif
++#ifdef __KERNEL__
++# define hz_to_std(a) (a)
++#endif
+ #endif
+
+ #define EXEC_PAGESIZE 8192
+diff -Nur linux-2.4.32/include/asm-alpha/signal.h linux-2.4.32.patched/include/asm-alpha/signal.h
+--- linux-2.4.32/include/asm-alpha/signal.h 1998-06-24 23:30:11.000000000 +0200
++++ linux-2.4.32.patched/include/asm-alpha/signal.h 2006-03-13 18:55:56.000000000 +0100
+@@ -121,8 +121,15 @@
+ #define SA_PROBE SA_ONESHOT
+ #define SA_SAMPLE_RANDOM SA_RESTART
+ #define SA_SHIRQ 0x40000000
++
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
+ #endif
+
++#endif /* __KERNEL__ */
++
+ #define SIG_BLOCK 1 /* for blocking signals */
+ #define SIG_UNBLOCK 2 /* for unblocking signals */
+ #define SIG_SETMASK 3 /* for setting the signal mask */
+diff -Nur linux-2.4.32/include/asm-arm/signal.h linux-2.4.32.patched/include/asm-arm/signal.h
+--- linux-2.4.32/include/asm-arm/signal.h 2003-08-25 13:44:43.000000000 +0200
++++ linux-2.4.32.patched/include/asm-arm/signal.h 2006-03-13 18:55:56.000000000 +0100
+@@ -125,8 +125,15 @@
+ #define SA_PROBE 0x80000000
+ #define SA_SAMPLE_RANDOM 0x10000000
+ #define SA_SHIRQ 0x04000000
++
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
+ #endif
+
++#endif /* __KERNEL__ */
++
+ #define SIG_BLOCK 0 /* for blocking signals */
+ #define SIG_UNBLOCK 1 /* for unblocking signals */
+ #define SIG_SETMASK 2 /* for setting the signal mask */
+diff -Nur linux-2.4.32/include/asm-cris/signal.h linux-2.4.32.patched/include/asm-cris/signal.h
+--- linux-2.4.32/include/asm-cris/signal.h 2001-02-09 01:32:44.000000000 +0100
++++ linux-2.4.32.patched/include/asm-cris/signal.h 2006-03-13 18:55:56.000000000 +0100
+@@ -120,8 +120,15 @@
+ #define SA_PROBE SA_ONESHOT
+ #define SA_SAMPLE_RANDOM SA_RESTART
+ #define SA_SHIRQ 0x04000000
++
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
+ #endif
+
++#endif /* __KERNEL__ */
++
+ #define SIG_BLOCK 0 /* for blocking signals */
+ #define SIG_UNBLOCK 1 /* for unblocking signals */
+ #define SIG_SETMASK 2 /* for setting the signal mask */
+diff -Nur linux-2.4.32/include/asm-i386/byteorder.h linux-2.4.32.patched/include/asm-i386/byteorder.h
+--- linux-2.4.32/include/asm-i386/byteorder.h 2003-06-13 16:51:38.000000000 +0200
++++ linux-2.4.32.patched/include/asm-i386/byteorder.h 2006-03-13 18:55:55.000000000 +0100
+@@ -2,6 +2,7 @@
+ #define _I386_BYTEORDER_H
+
+ #include <asm/types.h>
++#include <linux/compiler.h>
+
+ #ifdef __GNUC__
+
+@@ -10,7 +11,7 @@
+ #include <linux/config.h>
+ #endif
+
+-static __inline__ __const__ __u32 ___arch__swab32(__u32 x)
++static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x)
+ {
+ #ifdef CONFIG_X86_BSWAP
+ __asm__("bswap %0" : "=r" (x) : "0" (x));
+@@ -26,7 +27,7 @@
+
+ /* gcc should generate this for open coded C now too. May be worth switching to
+ it because inline assembly cannot be scheduled. -AK */
+-static __inline__ __const__ __u16 ___arch__swab16(__u16 x)
++static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x)
+ {
+ __asm__("xchgb %b0,%h0" /* swap bytes */
+ : "=q" (x)
+diff -Nur linux-2.4.32/include/asm-i386/param.h linux-2.4.32.patched/include/asm-i386/param.h
+--- linux-2.4.32/include/asm-i386/param.h 2000-10-27 20:04:43.000000000 +0200
++++ linux-2.4.32.patched/include/asm-i386/param.h 2006-03-13 18:55:54.000000000 +0100
+@@ -3,6 +3,9 @@
+
+ #ifndef HZ
+ #define HZ 100
++#ifdef __KERNEL__
++#define hz_to_std(a) (a)
++#endif
+ #endif
+
+ #define EXEC_PAGESIZE 4096
+diff -Nur linux-2.4.32/include/asm-i386/processor.h linux-2.4.32.patched/include/asm-i386/processor.h
+--- linux-2.4.32/include/asm-i386/processor.h 2004-02-18 14:36:32.000000000 +0100
++++ linux-2.4.32.patched/include/asm-i386/processor.h 2006-03-13 18:55:55.000000000 +0100
+@@ -72,7 +72,6 @@
+ */
+
+ extern struct cpuinfo_x86 boot_cpu_data;
+-extern struct tss_struct init_tss[NR_CPUS];
+
+ #ifdef CONFIG_SMP
+ extern struct cpuinfo_x86 cpu_data[];
+@@ -357,6 +356,8 @@
+ unsigned long __cacheline_filler[5];
+ };
+
++extern struct tss_struct init_tss[NR_CPUS];
++
+ struct thread_struct {
+ unsigned long esp0;
+ unsigned long eip;
+diff -Nur linux-2.4.32/include/asm-i386/signal.h linux-2.4.32.patched/include/asm-i386/signal.h
+--- linux-2.4.32/include/asm-i386/signal.h 2001-11-22 20:46:18.000000000 +0100
++++ linux-2.4.32.patched/include/asm-i386/signal.h 2006-03-13 18:55:56.000000000 +0100
+@@ -119,8 +119,15 @@
+ #define SA_PROBE SA_ONESHOT
+ #define SA_SAMPLE_RANDOM SA_RESTART
+ #define SA_SHIRQ 0x04000000
++
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
+ #endif
+
++#endif /* __KERNEL__ */
++
+ #define SIG_BLOCK 0 /* for blocking signals */
+ #define SIG_UNBLOCK 1 /* for unblocking signals */
+ #define SIG_SETMASK 2 /* for setting the signal mask */
+diff -Nur linux-2.4.32/include/asm-i386/string.h linux-2.4.32.patched/include/asm-i386/string.h
+--- linux-2.4.32/include/asm-i386/string.h 2001-11-22 20:46:18.000000000 +0100
++++ linux-2.4.32.patched/include/asm-i386/string.h 2006-03-13 18:55:55.000000000 +0100
+@@ -337,7 +337,7 @@
+ #define struct_cpy(x,y) \
+ ({ \
+ if (sizeof(*(x)) != sizeof(*(y))) \
+- __struct_cpy_bug; \
++ __struct_cpy_bug(); \
+ memcpy(x, y, sizeof(*(x))); \
+ })
+
+diff -Nur linux-2.4.32/include/asm-ia64/param.h linux-2.4.32.patched/include/asm-ia64/param.h
+--- linux-2.4.32/include/asm-ia64/param.h 2004-04-14 15:05:40.000000000 +0200
++++ linux-2.4.32.patched/include/asm-ia64/param.h 2006-03-13 18:55:54.000000000 +0100
+@@ -7,9 +7,15 @@
+ * Based on <asm-i386/param.h>.
+ *
+ * Modified 1998, 1999, 2002-2003
+- * David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co
++ * David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co
+ */
+
++#include <linux/config.h>
++
++#ifdef __KERNEL__
++#define hz_to_std(a) (a)
++#endif
++
+ #define EXEC_PAGESIZE 65536
+
+ #ifndef NGROUPS
+diff -Nur linux-2.4.32/include/asm-ia64/signal.h linux-2.4.32.patched/include/asm-ia64/signal.h
+--- linux-2.4.32/include/asm-ia64/signal.h 2004-04-14 15:05:40.000000000 +0200
++++ linux-2.4.32.patched/include/asm-ia64/signal.h 2006-03-13 18:55:56.000000000 +0100
+@@ -117,6 +117,12 @@
+ #define SA_SHIRQ 0x04000000
+ #define SA_PERCPU_IRQ 0x02000000
+
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
++#endif
++
+ #endif /* __KERNEL__ */
+
+ #define SIG_BLOCK 0 /* for blocking signals */
+diff -Nur linux-2.4.32/include/asm-m68k/param.h linux-2.4.32.patched/include/asm-m68k/param.h
+--- linux-2.4.32/include/asm-m68k/param.h 2001-01-04 22:00:55.000000000 +0100
++++ linux-2.4.32.patched/include/asm-m68k/param.h 2006-03-13 18:55:54.000000000 +0100
+@@ -3,6 +3,9 @@
+
+ #ifndef HZ
+ #define HZ 100
++#ifdef __KERNEL__
++#define hz_to_std(a) (a)
++#endif
+ #endif
+
+ #define EXEC_PAGESIZE 8192
+diff -Nur linux-2.4.32/include/asm-m68k/setup.h linux-2.4.32.patched/include/asm-m68k/setup.h
+--- linux-2.4.32/include/asm-m68k/setup.h 2000-01-26 21:44:21.000000000 +0100
++++ linux-2.4.32.patched/include/asm-m68k/setup.h 2006-03-13 18:55:55.000000000 +0100
+@@ -361,12 +361,13 @@
+ #ifndef __ASSEMBLY__
+ extern int m68k_num_memory; /* # of memory blocks found (and used) */
+ extern int m68k_realnum_memory; /* real # of memory blocks found */
+-extern struct mem_info m68k_memory[NUM_MEMINFO];/* memory description */
+
+ struct mem_info {
+ unsigned long addr; /* physical address of memory chunk */
+ unsigned long size; /* length of memory chunk (in bytes) */
+ };
++
++extern struct mem_info m68k_memory[NUM_MEMINFO];/* memory description */
+ #endif
+
+ #endif /* __KERNEL__ */
+diff -Nur linux-2.4.32/include/asm-m68k/signal.h linux-2.4.32.patched/include/asm-m68k/signal.h
+--- linux-2.4.32/include/asm-m68k/signal.h 2004-02-18 14:36:32.000000000 +0100
++++ linux-2.4.32.patched/include/asm-m68k/signal.h 2006-03-13 18:55:56.000000000 +0100
+@@ -116,8 +116,15 @@
+ #define SA_PROBE SA_ONESHOT
+ #define SA_SAMPLE_RANDOM SA_RESTART
+ #define SA_SHIRQ 0x04000000
++
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
+ #endif
+
++#endif /* __KERNEL__ */
++
+ #define SIG_BLOCK 0 /* for blocking signals */
+ #define SIG_UNBLOCK 1 /* for unblocking signals */
+ #define SIG_SETMASK 2 /* for setting the signal mask */
+diff -Nur linux-2.4.32/include/asm-mips/au1000_gpio.h linux-2.4.32.patched/include/asm-mips/au1000_gpio.h
+--- linux-2.4.32/include/asm-mips/au1000_gpio.h 2002-11-29 00:53:15.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/au1000_gpio.h 2006-03-13 18:55:54.000000000 +0100
+@@ -30,6 +30,13 @@
+ * 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++/*
++ * Revision history
++ * 01/31/02 0.01 Initial release. Steve Longerbeam, MontaVista
++ * 10/12/03 0.1 Added Au1100/Au1500, GPIO2, and bit operations. K.C. Nishio, AMD
++ * 08/05/04 0.11 Added Au1550 and Au1200. K.C. Nishio
++ */
++
+ #ifndef __AU1000_GPIO_H
+ #define __AU1000_GPIO_H
+
+@@ -44,13 +51,94 @@
+ #define AU1000GPIO_TRISTATE _IOW (AU1000GPIO_IOC_MAGIC, 4, int)
+ #define AU1000GPIO_AVAIL_MASK _IOR (AU1000GPIO_IOC_MAGIC, 5, int)
+
++// bit operations
++#define AU1000GPIO_BIT_READ _IOW (AU1000GPIO_IOC_MAGIC, 6, int)
++#define AU1000GPIO_BIT_SET _IOW (AU1000GPIO_IOC_MAGIC, 7, int)
++#define AU1000GPIO_BIT_CLEAR _IOW (AU1000GPIO_IOC_MAGIC, 8, int)
++#define AU1000GPIO_BIT_TRISTATE _IOW (AU1000GPIO_IOC_MAGIC, 9, int)
++#define AU1000GPIO_BIT_INIT _IOW (AU1000GPIO_IOC_MAGIC, 10, int)
++#define AU1000GPIO_BIT_TERM _IOW (AU1000GPIO_IOC_MAGIC, 11, int)
++
++/* set this major numer same as the CRIS GPIO driver */
++#define AU1X00_GPIO_MAJOR (120)
++
++#define ENABLED_ZERO (0)
++#define ENABLED_ONE (1)
++#define ENABLED_10 (0x2)
++#define ENABLED_11 (0x3)
++#define ENABLED_111 (0x7)
++#define NOT_AVAIL (-1)
++#define AU1X00_MAX_PRIMARY_GPIO (32)
++
++#define AU1000_GPIO_MINOR_MAX AU1X00_MAX_PRIMARY_GPIO
++/* Au1100, 1500, 1550 and 1200 have the secondary GPIO block */
++#define AU1XX0_GPIO_MINOR_MAX (48)
++
++#define AU1X00_GPIO_NAME "gpio"
++
++/* GPIO pins which are not multiplexed */
++#if defined(CONFIG_SOC_AU1000)
++ #define NATIVE_GPIOPIN ((1 << 15) | (1 << 8) | (1 << 7) | (1 << 1) | (1 << 0))
++ #define NATIVE_GPIO2PIN (0)
++#elif defined(CONFIG_SOC_AU1100)
++ #define NATIVE_GPIOPIN ((1 << 23) | (1 << 22) | (1 << 21) | (1 << 20) | (1 << 19) | (1 << 18) | \
++ (1 << 17) | (1 << 16) | (1 << 7) | (1 << 1) | (1 << 0))
++ #define NATIVE_GPIO2PIN (0)
++#elif defined(CONFIG_SOC_AU1500)
++ #define NATIVE_GPIOPIN ((1 << 15) | (1 << 8) | (1 << 7) | (1 << 1) | (1 << 0))
++ /* exclude the PCI reset output signal: GPIO[200], DMA_REQ2 and DMA_REQ3 */
++ #define NATIVE_GPIO2PIN (0xfffe & ~((1 << 9) | (1 << 8)))
++#elif defined(CONFIG_SOC_AU1550)
++ #define NATIVE_GPIOPIN ((1 << 15) | (1 << 8) | (1 << 7) | (1 << 6) | (1 << 1) | (1 << 0))
++ /* please refere Au1550 Data Book, chapter 15 */
++ #define NATIVE_GPIO2PIN (1 << 5)
++#elif defined(CONFIG_SOC_AU1200)
++ #define NATIVE_GPIOPIN ((1 << 7) | (1 << 5))
++ #define NATIVE_GPIO2PIN (0)
++#endif
++
++/* minor as u32 */
++#define MINOR_TO_GPIOPIN(minor) ((minor < AU1X00_MAX_PRIMARY_GPIO) ? minor : (minor - AU1X00_MAX_PRIMARY_GPIO))
++#define IS_PRIMARY_GPIOPIN(minor) ((minor < AU1X00_MAX_PRIMARY_GPIO) ? 1 : 0)
++
++/*
++ * pin to minor mapping.
++ * GPIO0-GPIO31, minor=0-31.
++ * GPIO200-GPIO215, minor=32-47.
++ */
++typedef struct _au1x00_gpio_bit_ctl {
++ int direction; // The direction of this GPIO pin. 0: IN, 1: OUT.
++ int data; // Pin output when itized (0/1), or at the term. 0/1/-1 (tristate).
++} au1x00_gpio_bit_ctl;
++
++typedef struct _au1x00_gpio_driver {
++ const char *driver_name;
++ const char *name;
++ int name_base; /* offset of printed name */
++ short major; /* major device number */
++ short minor_start; /* start of minor device number*/
++ short num; /* number of devices */
++} au1x00_gpio_driver;
++
+ #ifdef __KERNEL__
+-extern u32 get_au1000_avail_gpio_mask(void);
+-extern int au1000gpio_tristate(u32 data);
+-extern int au1000gpio_in(u32 *data);
+-extern int au1000gpio_set(u32 data);
+-extern int au1000gpio_clear(u32 data);
+-extern int au1000gpio_out(u32 data);
++extern u32 get_au1000_avail_gpio_mask(u32 *avail_gpio2);
++extern int au1000gpio_tristate(u32 minor, u32 data);
++extern int au1000gpio_in(u32 minor, u32 *data);
++extern int au1000gpio_set(u32 minor, u32 data);
++extern int au1000gpio_clear(u32 minor, u32 data);
++extern int au1000gpio_out(u32 minor, u32 data);
++extern int au1000gpio_bit_read(u32 minor, u32 *read_data);
++extern int au1000gpio_bit_set(u32 minor);
++extern int au1000gpio_bit_clear(u32 minor);
++extern int au1000gpio_bit_tristate(u32 minor);
++extern int check_minor_to_gpio(u32 minor);
++extern int au1000gpio_bit_init(u32 minor, au1x00_gpio_bit_ctl *bit_opt);
++extern int au1000gpio_bit_term(u32 minor, au1x00_gpio_bit_ctl *bit_opt);
++
++extern void gpio_register_devfs (au1x00_gpio_driver *driver, unsigned int flags, unsigned minor);
++extern void gpio_unregister_devfs (au1x00_gpio_driver *driver, unsigned minor);
++extern int gpio_register_driver(au1x00_gpio_driver *driver);
++extern int gpio_unregister_driver(au1x00_gpio_driver *driver);
+ #endif
+
+ #endif
+diff -Nur linux-2.4.32/include/asm-mips/au1000.h linux-2.4.32.patched/include/asm-mips/au1000.h
+--- linux-2.4.32/include/asm-mips/au1000.h 2005-01-19 15:10:11.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/au1000.h 2006-03-13 18:55:54.000000000 +0100
+@@ -160,28 +160,356 @@
+ #define ALLINTS (IE_IRQ0 | IE_IRQ1 | IE_IRQ2 | IE_IRQ3 | IE_IRQ4 | IE_IRQ5)
+ #endif
+
+-/* SDRAM Controller */
++/*
++ * SDRAM Register Offsets
++ */
+ #if defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1500) || defined(CONFIG_SOC_AU1100)
+-#define MEM_SDMODE0 0xB4000000
+-#define MEM_SDMODE1 0xB4000004
+-#define MEM_SDMODE2 0xB4000008
+-
+-#define MEM_SDADDR0 0xB400000C
+-#define MEM_SDADDR1 0xB4000010
+-#define MEM_SDADDR2 0xB4000014
+-
+-#define MEM_SDREFCFG 0xB4000018
+-#define MEM_SDPRECMD 0xB400001C
+-#define MEM_SDAUTOREF 0xB4000020
+-
+-#define MEM_SDWRMD0 0xB4000024
+-#define MEM_SDWRMD1 0xB4000028
+-#define MEM_SDWRMD2 0xB400002C
++#define MEM_SDMODE0 (0x0000)
++#define MEM_SDMODE1 (0x0004)
++#define MEM_SDMODE2 (0x0008)
++#define MEM_SDADDR0 (0x000C)
++#define MEM_SDADDR1 (0x0010)
++#define MEM_SDADDR2 (0x0014)
++#define MEM_SDREFCFG (0x0018)
++#define MEM_SDPRECMD (0x001C)
++#define MEM_SDAUTOREF (0x0020)
++#define MEM_SDWRMD0 (0x0024)
++#define MEM_SDWRMD1 (0x0028)
++#define MEM_SDWRMD2 (0x002C)
++#define MEM_SDSLEEP (0x0030)
++#define MEM_SDSMCKE (0x0034)
++
++#ifndef ASSEMBLER
++/*typedef volatile struct
++{
++ uint32 sdmode0;
++ uint32 sdmode1;
++ uint32 sdmode2;
++ uint32 sdaddr0;
++ uint32 sdaddr1;
++ uint32 sdaddr2;
++ uint32 sdrefcfg;
++ uint32 sdautoref;
++ uint32 sdwrmd0;
++ uint32 sdwrmd1;
++ uint32 sdwrmd2;
++ uint32 sdsleep;
++ uint32 sdsmcke;
++
++} AU1X00_SDRAM;*/
++#endif
++
++/*
++ * MEM_SDMODE register content definitions
++ */
++#define MEM_SDMODE_F (1<<22)
++#define MEM_SDMODE_SR (1<<21)
++#define MEM_SDMODE_BS (1<<20)
++#define MEM_SDMODE_RS (3<<18)
++#define MEM_SDMODE_CS (7<<15)
++#define MEM_SDMODE_TRAS (15<<11)
++#define MEM_SDMODE_TMRD (3<<9)
++#define MEM_SDMODE_TWR (3<<7)
++#define MEM_SDMODE_TRP (3<<5)
++#define MEM_SDMODE_TRCD (3<<3)
++#define MEM_SDMODE_TCL (7<<0)
++
++#define MEM_SDMODE_BS_2Bank (0<<20)
++#define MEM_SDMODE_BS_4Bank (1<<20)
++#define MEM_SDMODE_RS_11Row (0<<18)
++#define MEM_SDMODE_RS_12Row (1<<18)
++#define MEM_SDMODE_RS_13Row (2<<18)
++#define MEM_SDMODE_RS_N(N) ((N)<<18)
++#define MEM_SDMODE_CS_7Col (0<<15)
++#define MEM_SDMODE_CS_8Col (1<<15)
++#define MEM_SDMODE_CS_9Col (2<<15)
++#define MEM_SDMODE_CS_10Col (3<<15)
++#define MEM_SDMODE_CS_11Col (4<<15)
++#define MEM_SDMODE_CS_N(N) ((N)<<15)
++#define MEM_SDMODE_TRAS_N(N) ((N)<<11)
++#define MEM_SDMODE_TMRD_N(N) ((N)<<9)
++#define MEM_SDMODE_TWR_N(N) ((N)<<7)
++#define MEM_SDMODE_TRP_N(N) ((N)<<5)
++#define MEM_SDMODE_TRCD_N(N) ((N)<<3)
++#define MEM_SDMODE_TCL_N(N) ((N)<<0)
++
++/*
++ * MEM_SDADDR register contents definitions
++ */
++#define MEM_SDADDR_E (1<<20)
++#define MEM_SDADDR_CSBA (0x03FF<<10)
++#define MEM_SDADDR_CSMASK (0x03FF<<0)
++#define MEM_SDADDR_CSBA_N(N) ((N)&(0x03FF<<22)>>12)
++#define MEM_SDADDR_CSMASK_N(N) ((N)&(0x03FF<<22)>>22)
++
++/*
++ * MEM_SDREFCFG register content definitions
++ */
++#define MEM_SDREFCFG_TRC (15<<28)
++#define MEM_SDREFCFG_TRPM (3<<26)
++#define MEM_SDREFCFG_E (1<<25)
++#define MEM_SDREFCFG_RE (0x1ffffff<<0)
++#define MEM_SDREFCFG_TRC_N(N) ((N)<<MEM_SDREFCFG_TRC)
++#define MEM_SDREFCFG_TRPM_N(N) ((N)<<MEM_SDREFCFG_TRPM)
++#define MEM_SDREFCFG_REF_N(N) (N)
++#endif
++
++/***********************************************************************/
++
++/*
++ * Au1550 SDRAM Register Offsets
++ */
++
++/***********************************************************************/
++
++#if defined(CONFIG_SOC_AU1550) || defined(CONFIG_SOC_AU1200)
++#define MEM_SDMODE0 (0x0800)
++#define MEM_SDMODE1 (0x0808)
++#define MEM_SDMODE2 (0x0810)
++#define MEM_SDADDR0 (0x0820)
++#define MEM_SDADDR1 (0x0828)
++#define MEM_SDADDR2 (0x0830)
++#define MEM_SDCONFIGA (0x0840)
++#define MEM_SDCONFIGB (0x0848)
++#define MEM_SDSTAT (0x0850)
++#define MEM_SDERRADDR (0x0858)
++#define MEM_SDSTRIDE0 (0x0860)
++#define MEM_SDSTRIDE1 (0x0868)
++#define MEM_SDSTRIDE2 (0x0870)
++#define MEM_SDWRMD0 (0x0880)
++#define MEM_SDWRMD1 (0x0888)
++#define MEM_SDWRMD2 (0x0890)
++#define MEM_SDPRECMD (0x08C0)
++#define MEM_SDAUTOREF (0x08C8)
++#define MEM_SDSREF (0x08D0)
++#define MEM_SDSLEEP MEM_SDSREF
++
++#ifndef ASSEMBLER
++/*typedef volatile struct
++{
++ uint32 sdmode0;
++ uint32 reserved0;
++ uint32 sdmode1;
++ uint32 reserved1;
++ uint32 sdmode2;
++ uint32 reserved2[3];
++ uint32 sdaddr0;
++ uint32 reserved3;
++ uint32 sdaddr1;
++ uint32 reserved4;
++ uint32 sdaddr2;
++ uint32 reserved5[3];
++ uint32 sdconfiga;
++ uint32 reserved6;
++ uint32 sdconfigb;
++ uint32 reserved7;
++ uint32 sdstat;
++ uint32 reserved8;
++ uint32 sderraddr;
++ uint32 reserved9;
++ uint32 sdstride0;
++ uint32 reserved10;
++ uint32 sdstride1;
++ uint32 reserved11;
++ uint32 sdstride2;
++ uint32 reserved12[3];
++ uint32 sdwrmd0;
++ uint32 reserved13;
++ uint32 sdwrmd1;
++ uint32 reserved14;
++ uint32 sdwrmd2;
++ uint32 reserved15[11];
++ uint32 sdprecmd;
++ uint32 reserved16;
++ uint32 sdautoref;
++ uint32 reserved17;
++ uint32 sdsref;
++
++} AU1550_SDRAM;*/
++#endif
++#endif
++
++/*
++ * Physical base addresses for integrated peripherals
++ */
++
++#ifdef CONFIG_SOC_AU1000
++#define MEM_PHYS_ADDR 0x14000000
++#define STATIC_MEM_PHYS_ADDR 0x14001000
++#define DMA0_PHYS_ADDR 0x14002000
++#define DMA1_PHYS_ADDR 0x14002100
++#define DMA2_PHYS_ADDR 0x14002200
++#define DMA3_PHYS_ADDR 0x14002300
++#define DMA4_PHYS_ADDR 0x14002400
++#define DMA5_PHYS_ADDR 0x14002500
++#define DMA6_PHYS_ADDR 0x14002600
++#define DMA7_PHYS_ADDR 0x14002700
++#define IC0_PHYS_ADDR 0x10400000
++#define IC1_PHYS_ADDR 0x11800000
++#define AC97_PHYS_ADDR 0x10000000
++#define USBH_PHYS_ADDR 0x10100000
++#define USBD_PHYS_ADDR 0x10200000
++#define IRDA_PHYS_ADDR 0x10300000
++#define MAC0_PHYS_ADDR 0x10500000
++#define MAC1_PHYS_ADDR 0x10510000
++#define MACEN_PHYS_ADDR 0x10520000
++#define MACDMA0_PHYS_ADDR 0x14004000
++#define MACDMA1_PHYS_ADDR 0x14004200
++#define I2S_PHYS_ADDR 0x11000000
++#define UART0_PHYS_ADDR 0x11100000
++#define UART1_PHYS_ADDR 0x11200000
++#define UART2_PHYS_ADDR 0x11300000
++#define UART3_PHYS_ADDR 0x11400000
++#define SSI0_PHYS_ADDR 0x11600000
++#define SSI1_PHYS_ADDR 0x11680000
++#define SYS_PHYS_ADDR 0x11900000
++#define PCMCIA_IO_PHYS_ADDR 0xF00000000
++#define PCMCIA_ATTR_PHYS_ADDR 0xF40000000
++#define PCMCIA_MEM_PHYS_ADDR 0xF80000000
++#endif
++
++/********************************************************************/
+
+-#define MEM_SDSLEEP 0xB4000030
+-#define MEM_SDSMCKE 0xB4000034
++#ifdef CONFIG_SOC_AU1500
++#define MEM_PHYS_ADDR 0x14000000
++#define STATIC_MEM_PHYS_ADDR 0x14001000
++#define DMA0_PHYS_ADDR 0x14002000
++#define DMA1_PHYS_ADDR 0x14002100
++#define DMA2_PHYS_ADDR 0x14002200
++#define DMA3_PHYS_ADDR 0x14002300
++#define DMA4_PHYS_ADDR 0x14002400
++#define DMA5_PHYS_ADDR 0x14002500
++#define DMA6_PHYS_ADDR 0x14002600
++#define DMA7_PHYS_ADDR 0x14002700
++#define IC0_PHYS_ADDR 0x10400000
++#define IC1_PHYS_ADDR 0x11800000
++#define AC97_PHYS_ADDR 0x10000000
++#define USBH_PHYS_ADDR 0x10100000
++#define USBD_PHYS_ADDR 0x10200000
++#define PCI_PHYS_ADDR 0x14005000
++#define MAC0_PHYS_ADDR 0x11500000
++#define MAC1_PHYS_ADDR 0x11510000
++#define MACEN_PHYS_ADDR 0x11520000
++#define MACDMA0_PHYS_ADDR 0x14004000
++#define MACDMA1_PHYS_ADDR 0x14004200
++#define I2S_PHYS_ADDR 0x11000000
++#define UART0_PHYS_ADDR 0x11100000
++#define UART3_PHYS_ADDR 0x11400000
++#define GPIO2_PHYS_ADDR 0x11700000
++#define SYS_PHYS_ADDR 0x11900000
++#define PCI_MEM_PHYS_ADDR 0x400000000
++#define PCI_IO_PHYS_ADDR 0x500000000
++#define PCI_CONFIG0_PHYS_ADDR 0x600000000
++#define PCI_CONFIG1_PHYS_ADDR 0x680000000
++#define PCMCIA_IO_PHYS_ADDR 0xF00000000
++#define PCMCIA_ATTR_PHYS_ADDR 0xF40000000
++#define PCMCIA_MEM_PHYS_ADDR 0xF80000000
+ #endif
+
++/********************************************************************/
++
++#ifdef CONFIG_SOC_AU1100
++#define MEM_PHYS_ADDR 0x14000000
++#define STATIC_MEM_PHYS_ADDR 0x14001000
++#define DMA0_PHYS_ADDR 0x14002000
++#define DMA1_PHYS_ADDR 0x14002100
++#define DMA2_PHYS_ADDR 0x14002200
++#define DMA3_PHYS_ADDR 0x14002300
++#define DMA4_PHYS_ADDR 0x14002400
++#define DMA5_PHYS_ADDR 0x14002500
++#define DMA6_PHYS_ADDR 0x14002600
++#define DMA7_PHYS_ADDR 0x14002700
++#define IC0_PHYS_ADDR 0x10400000
++#define SD0_PHYS_ADDR 0x10600000
++#define SD1_PHYS_ADDR 0x10680000
++#define IC1_PHYS_ADDR 0x11800000
++#define AC97_PHYS_ADDR 0x10000000
++#define USBH_PHYS_ADDR 0x10100000
++#define USBD_PHYS_ADDR 0x10200000
++#define IRDA_PHYS_ADDR 0x10300000
++#define MAC0_PHYS_ADDR 0x10500000
++#define MACEN_PHYS_ADDR 0x10520000
++#define MACDMA0_PHYS_ADDR 0x14004000
++#define MACDMA1_PHYS_ADDR 0x14004200
++#define I2S_PHYS_ADDR 0x11000000
++#define UART0_PHYS_ADDR 0x11100000
++#define UART1_PHYS_ADDR 0x11200000
++#define UART3_PHYS_ADDR 0x11400000
++#define SSI0_PHYS_ADDR 0x11600000
++#define SSI1_PHYS_ADDR 0x11680000
++#define GPIO2_PHYS_ADDR 0x11700000
++#define SYS_PHYS_ADDR 0x11900000
++#define LCD_PHYS_ADDR 0x15000000
++#define PCMCIA_IO_PHYS_ADDR 0xF00000000
++#define PCMCIA_ATTR_PHYS_ADDR 0xF40000000
++#define PCMCIA_MEM_PHYS_ADDR 0xF80000000
++#endif
++
++/***********************************************************************/
++
++#ifdef CONFIG_SOC_AU1550
++#define MEM_PHYS_ADDR 0x14000000
++#define STATIC_MEM_PHYS_ADDR 0x14001000
++#define IC0_PHYS_ADDR 0x10400000
++#define IC1_PHYS_ADDR 0x11800000
++#define USBH_PHYS_ADDR 0x14020000
++#define USBD_PHYS_ADDR 0x10200000
++#define PCI_PHYS_ADDR 0x14005000
++#define MAC0_PHYS_ADDR 0x10500000
++#define MAC1_PHYS_ADDR 0x10510000
++#define MACEN_PHYS_ADDR 0x10520000
++#define MACDMA0_PHYS_ADDR 0x14004000
++#define MACDMA1_PHYS_ADDR 0x14004200
++#define UART0_PHYS_ADDR 0x11100000
++#define UART1_PHYS_ADDR 0x11200000
++#define UART3_PHYS_ADDR 0x11400000
++#define GPIO2_PHYS_ADDR 0x11700000
++#define SYS_PHYS_ADDR 0x11900000
++#define DDMA_PHYS_ADDR 0x14002000
++#define PE_PHYS_ADDR 0x14008000
++#define PSC0_PHYS_ADDR 0x11A00000
++#define PSC1_PHYS_ADDR 0x11B00000
++#define PSC2_PHYS_ADDR 0x10A00000
++#define PSC3_PHYS_ADDR 0x10B00000
++#define PCI_MEM_PHYS_ADDR 0x400000000
++#define PCI_IO_PHYS_ADDR 0x500000000
++#define PCI_CONFIG0_PHYS_ADDR 0x600000000
++#define PCI_CONFIG1_PHYS_ADDR 0x680000000
++#define PCMCIA_IO_PHYS_ADDR 0xF00000000
++#define PCMCIA_ATTR_PHYS_ADDR 0xF40000000
++#define PCMCIA_MEM_PHYS_ADDR 0xF80000000
++#endif
++
++/***********************************************************************/
++
++#ifdef CONFIG_SOC_AU1200
++#define MEM_PHYS_ADDR 0x14000000
++#define STATIC_MEM_PHYS_ADDR 0x14001000
++#define AES_PHYS_ADDR 0x10300000
++#define CIM_PHYS_ADDR 0x14004000
++#define IC0_PHYS_ADDR 0x10400000
++#define IC1_PHYS_ADDR 0x11800000
++#define USBM_PHYS_ADDR 0x14020000
++#define USBH_PHYS_ADDR 0x14020100
++#define UART0_PHYS_ADDR 0x11100000
++#define UART1_PHYS_ADDR 0x11200000
++#define GPIO2_PHYS_ADDR 0x11700000
++#define SYS_PHYS_ADDR 0x11900000
++#define DDMA_PHYS_ADDR 0x14002000
++#define PSC0_PHYS_ADDR 0x11A00000
++#define PSC1_PHYS_ADDR 0x11B00000
++#define PCMCIA_IO_PHYS_ADDR 0xF00000000
++#define PCMCIA_ATTR_PHYS_ADDR 0xF40000000
++#define PCMCIA_MEM_PHYS_ADDR 0xF80000000
++#define SD0_PHYS_ADDR 0x10600000
++#define SD1_PHYS_ADDR 0x10680000
++#define LCD_PHYS_ADDR 0x15000000
++#define SWCNT_PHYS_ADDR 0x1110010C
++#define MAEFE_PHYS_ADDR 0x14012000
++#define MAEBE_PHYS_ADDR 0x14010000
++#endif
++
++
+ /* Static Bus Controller */
+ #define MEM_STCFG0 0xB4001000
+ #define MEM_STTIME0 0xB4001004
+@@ -367,7 +695,7 @@
+ #define AU1000_MAC0_ENABLE 0xB0520000
+ #define AU1000_MAC1_ENABLE 0xB0520004
+ #define NUM_ETH_INTERFACES 2
+-#endif // CONFIG_SOC_AU1000
++#endif /* CONFIG_SOC_AU1000 */
+
+ /* Au1500 */
+ #ifdef CONFIG_SOC_AU1500
+@@ -438,7 +766,7 @@
+ #define AU1500_MAC0_ENABLE 0xB1520000
+ #define AU1500_MAC1_ENABLE 0xB1520004
+ #define NUM_ETH_INTERFACES 2
+-#endif // CONFIG_SOC_AU1500
++#endif /* CONFIG_SOC_AU1500 */
+
+ /* Au1100 */
+ #ifdef CONFIG_SOC_AU1100
+@@ -483,6 +811,22 @@
+ #define AU1000_GPIO_13 45
+ #define AU1000_GPIO_14 46
+ #define AU1000_GPIO_15 47
++#define AU1000_GPIO_16 48
++#define AU1000_GPIO_17 49
++#define AU1000_GPIO_18 50
++#define AU1000_GPIO_19 51
++#define AU1000_GPIO_20 52
++#define AU1000_GPIO_21 53
++#define AU1000_GPIO_22 54
++#define AU1000_GPIO_23 55
++#define AU1000_GPIO_24 56
++#define AU1000_GPIO_25 57
++#define AU1000_GPIO_26 58
++#define AU1000_GPIO_27 59
++#define AU1000_GPIO_28 60
++#define AU1000_GPIO_29 61
++#define AU1000_GPIO_30 62
++#define AU1000_GPIO_31 63
+
+ #define UART0_ADDR 0xB1100000
+ #define UART1_ADDR 0xB1200000
+@@ -494,7 +838,7 @@
+ #define AU1100_ETH0_BASE 0xB0500000
+ #define AU1100_MAC0_ENABLE 0xB0520000
+ #define NUM_ETH_INTERFACES 1
+-#endif // CONFIG_SOC_AU1100
++#endif /* CONFIG_SOC_AU1100 */
+
+ #ifdef CONFIG_SOC_AU1550
+ #define AU1550_UART0_INT 0
+@@ -511,14 +855,14 @@
+ #define AU1550_PSC1_INT 11
+ #define AU1550_PSC2_INT 12
+ #define AU1550_PSC3_INT 13
+-#define AU1550_TOY_INT 14
+-#define AU1550_TOY_MATCH0_INT 15
+-#define AU1550_TOY_MATCH1_INT 16
+-#define AU1550_TOY_MATCH2_INT 17
+-#define AU1550_RTC_INT 18
+-#define AU1550_RTC_MATCH0_INT 19
+-#define AU1550_RTC_MATCH1_INT 20
+-#define AU1550_RTC_MATCH2_INT 21
++#define AU1000_TOY_INT 14
++#define AU1000_TOY_MATCH0_INT 15
++#define AU1000_TOY_MATCH1_INT 16
++#define AU1000_TOY_MATCH2_INT 17
++#define AU1000_RTC_INT 18
++#define AU1000_RTC_MATCH0_INT 19
++#define AU1000_RTC_MATCH1_INT 20
++#define AU1000_RTC_MATCH2_INT 21
+ #define AU1550_NAND_INT 23
+ #define AU1550_USB_DEV_REQ_INT 24
+ #define AU1550_USB_DEV_SUS_INT 25
+@@ -573,7 +917,7 @@
+ #define AU1550_MAC0_ENABLE 0xB0520000
+ #define AU1550_MAC1_ENABLE 0xB0520004
+ #define NUM_ETH_INTERFACES 2
+-#endif // CONFIG_SOC_AU1550
++#endif /* CONFIG_SOC_AU1550 */
+
+ #ifdef CONFIG_SOC_AU1200
+ #define AU1200_UART0_INT 0
+@@ -590,14 +934,14 @@
+ #define AU1200_PSC1_INT 11
+ #define AU1200_AES_INT 12
+ #define AU1200_CAMERA_INT 13
+-#define AU1200_TOY_INT 14
+-#define AU1200_TOY_MATCH0_INT 15
+-#define AU1200_TOY_MATCH1_INT 16
+-#define AU1200_TOY_MATCH2_INT 17
+-#define AU1200_RTC_INT 18
+-#define AU1200_RTC_MATCH0_INT 19
+-#define AU1200_RTC_MATCH1_INT 20
+-#define AU1200_RTC_MATCH2_INT 21
++#define AU1000_TOY_INT 14
++#define AU1000_TOY_MATCH0_INT 15
++#define AU1000_TOY_MATCH1_INT 16
++#define AU1000_TOY_MATCH2_INT 17
++#define AU1000_RTC_INT 18
++#define AU1000_RTC_MATCH0_INT 19
++#define AU1000_RTC_MATCH1_INT 20
++#define AU1000_RTC_MATCH2_INT 21
+ #define AU1200_NAND_INT 23
+ #define AU1200_GPIO_204 24
+ #define AU1200_GPIO_205 25
+@@ -605,6 +949,7 @@
+ #define AU1200_GPIO_207 27
+ #define AU1200_GPIO_208_215 28 // Logical OR of 208:215
+ #define AU1200_USB_INT 29
++#define AU1000_USB_HOST_INT AU1200_USB_INT
+ #define AU1200_LCD_INT 30
+ #define AU1200_MAE_BOTH_INT 31
+ #define AU1000_GPIO_0 32
+@@ -643,21 +988,36 @@
+ #define UART0_ADDR 0xB1100000
+ #define UART1_ADDR 0xB1200000
+
+-#define USB_OHCI_BASE 0x14020000 // phys addr for ioremap
+-#define USB_HOST_CONFIG 0xB4027ffc
++#define USB_UOC_BASE 0x14020020
++#define USB_UOC_LEN 0x20
++#define USB_OHCI_BASE 0x14020100
++#define USB_OHCI_LEN 0x100
++#define USB_EHCI_BASE 0x14020200
++#define USB_EHCI_LEN 0x100
++#define USB_UDC_BASE 0x14022000
++#define USB_UDC_LEN 0x2000
++#define USB_MSR_BASE 0xB4020000
++#define USB_MSR_MCFG 4
++#define USBMSRMCFG_OMEMEN 0
++#define USBMSRMCFG_OBMEN 1
++#define USBMSRMCFG_EMEMEN 2
++#define USBMSRMCFG_EBMEN 3
++#define USBMSRMCFG_DMEMEN 4
++#define USBMSRMCFG_DBMEN 5
++#define USBMSRMCFG_GMEMEN 6
++#define USBMSRMCFG_OHCCLKEN 16
++#define USBMSRMCFG_EHCCLKEN 17
++#define USBMSRMCFG_UDCCLKEN 18
++#define USBMSRMCFG_PHYPLLEN 19
++#define USBMSRMCFG_RDCOMB 30
++#define USBMSRMCFG_PFEN 31
+
+-// these are here for prototyping on au1550 (do not exist on au1200)
+-#define AU1200_ETH0_BASE 0xB0500000
+-#define AU1200_ETH1_BASE 0xB0510000
+-#define AU1200_MAC0_ENABLE 0xB0520000
+-#define AU1200_MAC1_ENABLE 0xB0520004
+-#define NUM_ETH_INTERFACES 2
+-#endif // CONFIG_SOC_AU1200
++#endif /* CONFIG_SOC_AU1200 */
+
+ #define AU1000_LAST_INTC0_INT 31
++#define AU1000_LAST_INTC1_INT 63
+ #define AU1000_MAX_INTR 63
+
+-
+ /* Programmable Counters 0 and 1 */
+ #define SYS_BASE 0xB1900000
+ #define SYS_COUNTER_CNTRL (SYS_BASE + 0x14)
+@@ -728,6 +1088,8 @@
+ #define I2S_CONTROL_D (1<<1)
+ #define I2S_CONTROL_CE (1<<0)
+
++#ifndef CONFIG_SOC_AU1200
++
+ /* USB Host Controller */
+ #define USB_OHCI_LEN 0x00100000
+
+@@ -773,6 +1135,8 @@
+ #define USBDEV_ENABLE (1<<1)
+ #define USBDEV_CE (1<<0)
+
++#endif /* !CONFIG_SOC_AU1200 */
++
+ /* Ethernet Controllers */
+
+ /* 4 byte offsets from AU1000_ETH_BASE */
+@@ -1171,6 +1535,37 @@
+ #define SYS_PF_PSC1_S1 (1 << 1)
+ #define SYS_PF_MUST_BE_SET ((1 << 5) | (1 << 2))
+
++/* Au1200 Only */
++#ifdef CONFIG_SOC_AU1200
++#define SYS_PINFUNC_DMA (1<<31)
++#define SYS_PINFUNC_S0A (1<<30)
++#define SYS_PINFUNC_S1A (1<<29)
++#define SYS_PINFUNC_LP0 (1<<28)
++#define SYS_PINFUNC_LP1 (1<<27)
++#define SYS_PINFUNC_LD16 (1<<26)
++#define SYS_PINFUNC_LD8 (1<<25)
++#define SYS_PINFUNC_LD1 (1<<24)
++#define SYS_PINFUNC_LD0 (1<<23)
++#define SYS_PINFUNC_P1A (3<<21)
++#define SYS_PINFUNC_P1B (1<<20)
++#define SYS_PINFUNC_FS3 (1<<19)
++#define SYS_PINFUNC_P0A (3<<17)
++#define SYS_PINFUNC_CS (1<<16)
++#define SYS_PINFUNC_CIM (1<<15)
++#define SYS_PINFUNC_P1C (1<<14)
++#define SYS_PINFUNC_U1T (1<<12)
++#define SYS_PINFUNC_U1R (1<<11)
++#define SYS_PINFUNC_EX1 (1<<10)
++#define SYS_PINFUNC_EX0 (1<<9)
++#define SYS_PINFUNC_U0R (1<<8)
++#define SYS_PINFUNC_MC (1<<7)
++#define SYS_PINFUNC_S0B (1<<6)
++#define SYS_PINFUNC_S0C (1<<5)
++#define SYS_PINFUNC_P0B (1<<4)
++#define SYS_PINFUNC_U0T (1<<3)
++#define SYS_PINFUNC_S1B (1<<2)
++#endif
++
+ #define SYS_TRIOUTRD 0xB1900100
+ #define SYS_TRIOUTCLR 0xB1900100
+ #define SYS_OUTPUTRD 0xB1900108
+@@ -1298,7 +1693,6 @@
+ #define SD1_XMIT_FIFO 0xB0680000
+ #define SD1_RECV_FIFO 0xB0680004
+
+-
+ #if defined (CONFIG_SOC_AU1500) || defined(CONFIG_SOC_AU1550)
+ /* Au1500 PCI Controller */
+ #define Au1500_CFG_BASE 0xB4005000 // virtual, kseg0 addr
+@@ -1388,9 +1782,60 @@
+
+ #endif
+
++#ifndef _LANGUAGE_ASSEMBLY
++typedef volatile struct
++{
++ /* 0x0000 */ u32 toytrim;
++ /* 0x0004 */ u32 toywrite;
++ /* 0x0008 */ u32 toymatch0;
++ /* 0x000C */ u32 toymatch1;
++ /* 0x0010 */ u32 toymatch2;
++ /* 0x0014 */ u32 cntrctrl;
++ /* 0x0018 */ u32 scratch0;
++ /* 0x001C */ u32 scratch1;
++ /* 0x0020 */ u32 freqctrl0;
++ /* 0x0024 */ u32 freqctrl1;
++ /* 0x0028 */ u32 clksrc;
++ /* 0x002C */ u32 pinfunc;
++ /* 0x0030 */ u32 reserved0;
++ /* 0x0034 */ u32 wakemsk;
++ /* 0x0038 */ u32 endian;
++ /* 0x003C */ u32 powerctrl;
++ /* 0x0040 */ u32 toyread;
++ /* 0x0044 */ u32 rtctrim;
++ /* 0x0048 */ u32 rtcwrite;
++ /* 0x004C */ u32 rtcmatch0;
++ /* 0x0050 */ u32 rtcmatch1;
++ /* 0x0054 */ u32 rtcmatch2;
++ /* 0x0058 */ u32 rtcread;
++ /* 0x005C */ u32 wakesrc;
++ /* 0x0060 */ u32 cpupll;
++ /* 0x0064 */ u32 auxpll;
++ /* 0x0068 */ u32 reserved1;
++ /* 0x006C */ u32 reserved2;
++ /* 0x0070 */ u32 reserved3;
++ /* 0x0074 */ u32 reserved4;
++ /* 0x0078 */ u32 slppwr;
++ /* 0x007C */ u32 sleep;
++ /* 0x0080 */ u32 reserved5[32];
++ /* 0x0100 */ u32 trioutrd;
++#define trioutclr trioutrd
++ /* 0x0104 */ u32 reserved6;
++ /* 0x0108 */ u32 outputrd;
++#define outputset outputrd
++ /* 0x010C */ u32 outputclr;
++ /* 0x0110 */ u32 pinstaterd;
++#define pininputen pinstaterd
++
++} AU1X00_SYS;
++
++static AU1X00_SYS* const sys = (AU1X00_SYS *)SYS_BASE;
++
++#endif
+ /* Processor information base on prid.
+ * Copied from PowerPC.
+ */
++#ifndef _LANGUAGE_ASSEMBLY
+ struct cpu_spec {
+ /* CPU is matched via (PRID & prid_mask) == prid_value */
+ unsigned int prid_mask;
+@@ -1404,3 +1849,6 @@
+ extern struct cpu_spec cpu_specs[];
+ extern struct cpu_spec *cur_cpu_spec[];
+ #endif
++
++#endif
++
+diff -Nur linux-2.4.32/include/asm-mips/au1000_pcmcia.h linux-2.4.32.patched/include/asm-mips/au1000_pcmcia.h
+--- linux-2.4.32/include/asm-mips/au1000_pcmcia.h 2005-01-19 15:10:11.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/au1000_pcmcia.h 2006-03-13 18:55:54.000000000 +0100
+@@ -38,16 +38,41 @@
+ #define AU1X_SOCK0_PHYS_MEM 0xF80000000
+
+ /* pcmcia socket 1 needs external glue logic so the memory map
+- * differs from board to board.
++ * differs from board to board. the general rule is that
++ * static bus address bit 26 should be used to decode socket 0
++ * from socket 1. alas, some boards dont follow this...
++ * These really belong in a board-specific header file...
+ */
+-#if defined(CONFIG_MIPS_PB1000) || defined(CONFIG_MIPS_PB1100) || defined(CONFIG_MIPS_PB1500)
+-#define AU1X_SOCK1_IO 0xF08000000
+-#define AU1X_SOCK1_PHYS_ATTR 0xF48000000
+-#define AU1X_SOCK1_PHYS_MEM 0xF88000000
+-#elif defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100) || defined(CONFIG_MIPS_DB1500) || defined(CONFIG_MIPS_PB1550) || defined(CONFIG_MIPS_DB1550)
+-#define AU1X_SOCK1_IO 0xF04000000
+-#define AU1X_SOCK1_PHYS_ATTR 0xF44000000
+-#define AU1X_SOCK1_PHYS_MEM 0xF84000000
++#ifdef CONFIG_MIPS_PB1000
++#define SOCK1_DECODE (1<<27)
++#endif
++#ifdef CONFIG_MIPS_DB1000
++#define SOCK1_DECODE (1<<26)
++#endif
++#ifdef CONFIG_MIPS_DB1500
++#define SOCK1_DECODE (1<<26)
++#endif
++#ifdef CONFIG_MIPS_DB1100
++#define SOCK1_DECODE (1<<26)
++#endif
++#ifdef CONFIG_MIPS_DB1550
++#define SOCK1_DECODE (1<<26)
++#endif
++#ifdef CONFIG_MIPS_DB1200
++#define SOCK1_DECODE (1<<26)
++#endif
++#ifdef CONFIG_MIPS_PB1550
++#define SOCK1_DECODE (1<<26)
++#endif
++#ifdef CONFIG_MIPS_PB1200
++#define SOCK1_DECODE (1<<26)
++#endif
++
++/* The board has a second PCMCIA socket */
++#ifdef SOCK1_DECODE
++#define AU1X_SOCK1_IO (0xF00000000|SOCK1_DECODE)
++#define AU1X_SOCK1_PHYS_ATTR (0xF40000000|SOCK1_DECODE)
++#define AU1X_SOCK1_PHYS_MEM (0xF80000000|SOCK1_DECODE)
+ #endif
+
+ struct pcmcia_state {
+diff -Nur linux-2.4.32/include/asm-mips/au1100_mmc.h linux-2.4.32.patched/include/asm-mips/au1100_mmc.h
+--- linux-2.4.32/include/asm-mips/au1100_mmc.h 2005-01-19 15:10:11.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/au1100_mmc.h 2006-03-13 18:55:54.000000000 +0100
+@@ -39,16 +39,22 @@
+ #define __ASM_AU1100_MMC_H
+
+
+-#define NUM_AU1100_MMC_CONTROLLERS 2
+-
+-
+-#define AU1100_SD_IRQ 2
+-
++#if defined(CONFIG_SOC_AU1100)
++#define NUM_MMC_CONTROLLERS 2
++#define AU1X_MMC_INT AU1100_SD_INT
++#endif
++
++#if defined(CONFIG_SOC_AU1200)
++#define NUM_MMC_CONTROLLERS 2
++#define AU1X_MMC_INT AU1200_SD_INT
++#endif
+
+ #define SD0_BASE 0xB0600000
+ #define SD1_BASE 0xB0680000
+
+
++
++
+ /*
+ * Register offsets.
+ */
+@@ -201,5 +207,12 @@
+ #define SD_CMD_RT_1B (0x00810000)
+
+
++/* support routines required on a platform-specific basis */
++extern void mmc_card_inserted(int _n_, int *_res_);
++extern void mmc_card_writable(int _n_, int *_res_);
++extern void mmc_power_on(int _n_);
++extern void mmc_power_off(int _n_);
++
++
+ #endif /* __ASM_AU1100_MMC_H */
+
+diff -Nur linux-2.4.32/include/asm-mips/au1xxx_dbdma.h linux-2.4.32.patched/include/asm-mips/au1xxx_dbdma.h
+--- linux-2.4.32/include/asm-mips/au1xxx_dbdma.h 2005-01-19 15:10:11.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/au1xxx_dbdma.h 2006-03-13 18:55:54.000000000 +0100
+@@ -43,7 +43,7 @@
+ #define DDMA_GLOBAL_BASE 0xb4003000
+ #define DDMA_CHANNEL_BASE 0xb4002000
+
+-typedef struct dbdma_global {
++typedef volatile struct dbdma_global {
+ u32 ddma_config;
+ u32 ddma_intstat;
+ u32 ddma_throttle;
+@@ -60,7 +60,7 @@
+
+ /* The structure of a DMA Channel.
+ */
+-typedef struct au1xxx_dma_channel {
++typedef volatile struct au1xxx_dma_channel {
+ u32 ddma_cfg; /* See below */
+ u32 ddma_desptr; /* 32-byte aligned pointer to descriptor */
+ u32 ddma_statptr; /* word aligned pointer to status word */
+@@ -96,7 +96,7 @@
+ /* "Standard" DDMA Descriptor.
+ * Must be 32-byte aligned.
+ */
+-typedef struct au1xxx_ddma_desc {
++typedef volatile struct au1xxx_ddma_desc {
+ u32 dscr_cmd0; /* See below */
+ u32 dscr_cmd1; /* See below */
+ u32 dscr_source0; /* source phys address */
+@@ -105,6 +105,12 @@
+ u32 dscr_dest1; /* See below */
+ u32 dscr_stat; /* completion status */
+ u32 dscr_nxtptr; /* Next descriptor pointer (mostly) */
++ /* First 32bytes are HW specific!!!
++ Lets have some SW data following.. make sure its 32bytes
++ */
++ u32 sw_status;
++ u32 sw_context;
++ u32 sw_reserved[6];
+ } au1x_ddma_desc_t;
+
+ #define DSCR_CMD0_V (1 << 31) /* Descriptor valid */
+@@ -123,6 +129,8 @@
+ #define DSCR_CMD0_CV (0x1 << 2) /* Clear Valid when done */
+ #define DSCR_CMD0_ST_MASK (0x3 << 0) /* Status instruction */
+
++#define SW_STATUS_INUSE (1<<0)
++
+ /* Command 0 device IDs.
+ */
+ #ifdef CONFIG_SOC_AU1550
+@@ -169,8 +177,8 @@
+ #define DSCR_CMD0_SDMS_RX0 9
+ #define DSCR_CMD0_SDMS_TX1 10
+ #define DSCR_CMD0_SDMS_RX1 11
+-#define DSCR_CMD0_AES_TX 12
+-#define DSCR_CMD0_AES_RX 13
++#define DSCR_CMD0_AES_TX 13
++#define DSCR_CMD0_AES_RX 12
+ #define DSCR_CMD0_PSC0_TX 14
+ #define DSCR_CMD0_PSC0_RX 15
+ #define DSCR_CMD0_PSC1_TX 16
+@@ -189,6 +197,10 @@
+ #define DSCR_CMD0_THROTTLE 30
+ #define DSCR_CMD0_ALWAYS 31
+ #define DSCR_NDEV_IDS 32
++/* THis macro is used to find/create custom device types */
++#define DSCR_DEV2CUSTOM_ID(x,d) (((((x)&0xFFFF)<<8)|0x32000000)|((d)&0xFF))
++#define DSCR_CUSTOM2DEV_ID(x) ((x)&0xFF)
++
+
+ #define DSCR_CMD0_SID(x) (((x) & 0x1f) << 25)
+ #define DSCR_CMD0_DID(x) (((x) & 0x1f) << 20)
+@@ -277,6 +289,43 @@
+ */
+ #define NUM_DBDMA_CHANS 16
+
++/*
++ * Ddma API definitions
++ * FIXME: may not fit to this header file
++ */
++typedef struct dbdma_device_table {
++ u32 dev_id;
++ u32 dev_flags;
++ u32 dev_tsize;
++ u32 dev_devwidth;
++ u32 dev_physaddr; /* If FIFO */
++ u32 dev_intlevel;
++ u32 dev_intpolarity;
++} dbdev_tab_t;
++
++
++typedef struct dbdma_chan_config {
++ spinlock_t lock;
++
++ u32 chan_flags;
++ u32 chan_index;
++ dbdev_tab_t *chan_src;
++ dbdev_tab_t *chan_dest;
++ au1x_dma_chan_t *chan_ptr;
++ au1x_ddma_desc_t *chan_desc_base;
++ au1x_ddma_desc_t *get_ptr, *put_ptr, *cur_ptr;
++ void *chan_callparam;
++ void (*chan_callback)(int, void *, struct pt_regs *);
++} chan_tab_t;
++
++#define DEV_FLAGS_INUSE (1 << 0)
++#define DEV_FLAGS_ANYUSE (1 << 1)
++#define DEV_FLAGS_OUT (1 << 2)
++#define DEV_FLAGS_IN (1 << 3)
++#define DEV_FLAGS_BURSTABLE (1 << 4)
++#define DEV_FLAGS_SYNC (1 << 5)
++/* end Ddma API definitions */
++
+ /* External functions for drivers to use.
+ */
+ /* Use this to allocate a dbdma channel. The device ids are one of the
+@@ -299,8 +348,8 @@
+
+ /* Put buffers on source/destination descriptors.
+ */
+-u32 au1xxx_dbdma_put_source(u32 chanid, void *buf, int nbytes);
+-u32 au1xxx_dbdma_put_dest(u32 chanid, void *buf, int nbytes);
++u32 _au1xxx_dbdma_put_source(u32 chanid, void *buf, int nbytes, u32 flags);
++u32 _au1xxx_dbdma_put_dest(u32 chanid, void *buf, int nbytes, u32 flags);
+
+ /* Get a buffer from the destination descriptor.
+ */
+@@ -314,5 +363,25 @@
+ void au1xxx_dbdma_chan_free(u32 chanid);
+ void au1xxx_dbdma_dump(u32 chanid);
+
++u32 au1xxx_dbdma_put_dscr(u32 chanid, au1x_ddma_desc_t *dscr );
++
++u32 au1xxx_ddma_add_device( dbdev_tab_t *dev );
++
++/*
++ Some compatibilty macros --
++ Needed to make changes to API without breaking existing drivers
++*/
++#define au1xxx_dbdma_put_source(chanid,buf,nbytes)_au1xxx_dbdma_put_source(chanid, buf, nbytes, DDMA_FLAGS_IE)
++#define au1xxx_dbdma_put_source_flags(chanid,buf,nbytes,flags) _au1xxx_dbdma_put_source(chanid, buf, nbytes, flags)
++
++#define au1xxx_dbdma_put_dest(chanid,buf,nbytes) _au1xxx_dbdma_put_dest(chanid, buf, nbytes, DDMA_FLAGS_IE)
++#define au1xxx_dbdma_put_dest_flags(chanid,buf,nbytes,flags) _au1xxx_dbdma_put_dest(chanid, buf, nbytes, flags)
++
++/*
++ * Flags for the put_source/put_dest functions.
++ */
++#define DDMA_FLAGS_IE (1<<0)
++#define DDMA_FLAGS_NOIE (1<<1)
++
+ #endif /* _LANGUAGE_ASSEMBLY */
+ #endif /* _AU1000_DBDMA_H_ */
+diff -Nur linux-2.4.32/include/asm-mips/au1xxx_gpio.h linux-2.4.32.patched/include/asm-mips/au1xxx_gpio.h
+--- linux-2.4.32/include/asm-mips/au1xxx_gpio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/au1xxx_gpio.h 2006-03-13 18:55:54.000000000 +0100
+@@ -0,0 +1,22 @@
++
++
++#ifndef __AU1XXX_GPIO_H
++#define __AU1XXX_GPIO_H
++
++void au1xxx_gpio1_set_inputs(void);
++void au1xxx_gpio_tristate(int signal);
++void au1xxx_gpio_write(int signal, int value);
++int au1xxx_gpio_read(int signal);
++
++typedef volatile struct
++{
++ u32 dir;
++ u32 reserved;
++ u32 output;
++ u32 pinstate;
++ u32 inten;
++ u32 enable;
++
++} AU1X00_GPIO2;
++
++#endif //__AU1XXX_GPIO_H
+diff -Nur linux-2.4.32/include/asm-mips/au1xxx_psc.h linux-2.4.32.patched/include/asm-mips/au1xxx_psc.h
+--- linux-2.4.32/include/asm-mips/au1xxx_psc.h 2005-01-19 15:10:11.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/au1xxx_psc.h 2006-03-13 18:55:54.000000000 +0100
+@@ -41,6 +41,11 @@
+ #define PSC3_BASE_ADDR 0xb0d00000
+ #endif
+
++#ifdef CONFIG_SOC_AU1200
++#define PSC0_BASE_ADDR 0xb1a00000
++#define PSC1_BASE_ADDR 0xb1b00000
++#endif
++
+ /* The PSC select and control registers are common to
+ * all protocols.
+ */
+@@ -226,6 +231,8 @@
+ #define PSC_I2SCFG_DD_DISABLE (1 << 27)
+ #define PSC_I2SCFG_DE_ENABLE (1 << 26)
+ #define PSC_I2SCFG_SET_WS(x) (((((x) / 2) - 1) & 0x7f) << 16)
++#define PSC_I2SCFG_WS(n) ((n&0xFF)<<16)
++#define PSC_I2SCFG_WS_MASK (PSC_I2SCFG_WS(0x3F))
+ #define PSC_I2SCFG_WI (1 << 15)
+
+ #define PSC_I2SCFG_DIV_MASK (3 << 13)
+diff -Nur linux-2.4.32/include/asm-mips/bootinfo.h linux-2.4.32.patched/include/asm-mips/bootinfo.h
+--- linux-2.4.32/include/asm-mips/bootinfo.h 2004-02-18 14:36:32.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/bootinfo.h 2006-03-13 18:55:59.000000000 +0100
+@@ -37,6 +37,7 @@
+ #define MACH_GROUP_HP_LJ 20 /* Hewlett Packard LaserJet */
+ #define MACH_GROUP_LASAT 21
+ #define MACH_GROUP_TITAN 22 /* PMC-Sierra Titan */
++#define MACH_GROUP_BRCM 23 /* Broadcom */
+
+ /*
+ * Valid machtype values for group unknown (low order halfword of mips_machtype)
+@@ -180,6 +181,9 @@
+ #define MACH_MTX1 7 /* 4G MTX-1 Au1500-based board */
+ #define MACH_CSB250 8 /* Cogent Au1500 */
+ #define MACH_PB1550 9 /* Au1550-based eval board */
++#define MACH_PB1200 10 /* Au1200-based eval board */
++#define MACH_DB1550 11 /* Au1550-based eval board */
++#define MACH_DB1200 12 /* Au1200-based eval board */
+
+ /*
+ * Valid machtype for group NEC_VR41XX
+@@ -194,6 +198,15 @@
+ #define MACH_TANBAC_TB0229 7 /* TANBAC TB0229 (VR4131DIMM) */
+
+ /*
++ * Valid machtypes for group Broadcom
++ */
++#define MACH_BCM93725 0
++#define MACH_BCM93725_VJ 1
++#define MACH_BCM93730 2
++#define MACH_BCM947XX 3
++#define MACH_BCM933XX 4
++
++/*
+ * Valid machtype for group TITAN
+ */
+ #define MACH_TITAN_YOSEMITE 1 /* PMC-Sierra Yosemite */
+diff -Nur linux-2.4.32/include/asm-mips/cpu.h linux-2.4.32.patched/include/asm-mips/cpu.h
+--- linux-2.4.32/include/asm-mips/cpu.h 2005-01-19 15:10:11.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/cpu.h 2006-03-13 18:55:59.000000000 +0100
+@@ -22,6 +22,11 @@
+ spec.
+ */
+
++#define PRID_COPT_MASK 0xff000000
++#define PRID_COMP_MASK 0x00ff0000
++#define PRID_IMP_MASK 0x0000ff00
++#define PRID_REV_MASK 0x000000ff
++
+ #define PRID_COMP_LEGACY 0x000000
+ #define PRID_COMP_MIPS 0x010000
+ #define PRID_COMP_BROADCOM 0x020000
+@@ -58,6 +63,7 @@
+ #define PRID_IMP_RM7000 0x2700
+ #define PRID_IMP_NEVADA 0x2800 /* RM5260 ??? */
+ #define PRID_IMP_RM9000 0x3400
++#define PRID_IMP_BCM4710 0x4000
+ #define PRID_IMP_R5432 0x5400
+ #define PRID_IMP_R5500 0x5500
+ #define PRID_IMP_4KC 0x8000
+@@ -66,10 +72,16 @@
+ #define PRID_IMP_4KEC 0x8400
+ #define PRID_IMP_4KSC 0x8600
+ #define PRID_IMP_25KF 0x8800
++#define PRID_IMP_BCM3302 0x9000
++#define PRID_IMP_BCM3303 0x9100
+ #define PRID_IMP_24K 0x9300
+
+ #define PRID_IMP_UNKNOWN 0xff00
+
++#define BCM330X(id) \
++ (((id & (PRID_COMP_MASK | PRID_IMP_MASK)) == (PRID_COMP_BROADCOM | PRID_IMP_BCM3302)) \
++ || ((id & (PRID_COMP_MASK | PRID_IMP_MASK)) == (PRID_COMP_BROADCOM | PRID_IMP_BCM3303)))
++
+ /*
+ * These are the PRID's for when 23:16 == PRID_COMP_SIBYTE
+ */
+@@ -174,7 +186,9 @@
+ #define CPU_AU1550 57
+ #define CPU_24K 58
+ #define CPU_AU1200 59
+-#define CPU_LAST 59
++#define CPU_BCM4710 60
++#define CPU_BCM3302 61
++#define CPU_LAST 61
+
+ /*
+ * ISA Level encodings
+diff -Nur linux-2.4.32/include/asm-mips/db1200.h linux-2.4.32.patched/include/asm-mips/db1200.h
+--- linux-2.4.32/include/asm-mips/db1200.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/db1200.h 2006-03-13 18:55:54.000000000 +0100
+@@ -0,0 +1,214 @@
++/*
++ * AMD Alchemy DB1200 Referrence Board
++ * Board Registers defines.
++ *
++ * ########################################################################
++ *
++ * This program is free software; you can distribute it and/or modify it
++ * under the terms of the GNU General Public License (Version 2) as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * for more details.
++ *
++ * You should have received a copy of the GNU General Public License along
++ * with this program; if not, write to the Free Software Foundation, Inc.,
++ * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++ *
++ * ########################################################################
++ *
++ *
++ */
++#ifndef __ASM_DB1200_H
++#define __ASM_DB1200_H
++
++#include <linux/types.h>
++
++// This is defined in au1000.h with bogus value
++#undef AU1X00_EXTERNAL_INT
++
++#define DBDMA_AC97_TX_CHAN DSCR_CMD0_PSC1_TX
++#define DBDMA_AC97_RX_CHAN DSCR_CMD0_PSC1_RX
++#define DBDMA_I2S_TX_CHAN DSCR_CMD0_PSC1_TX
++#define DBDMA_I2S_RX_CHAN DSCR_CMD0_PSC1_RX
++
++/* SPI and SMB are muxed on the Pb1200 board.
++ Refer to board documentation.
++ */
++#define SPI_PSC_BASE PSC0_BASE_ADDR
++#define SMBUS_PSC_BASE PSC0_BASE_ADDR
++/* AC97 and I2S are muxed on the Pb1200 board.
++ Refer to board documentation.
++ */
++#define AC97_PSC_BASE PSC1_BASE_ADDR
++#define I2S_PSC_BASE PSC1_BASE_ADDR
++
++#define BCSR_KSEG1_ADDR 0xB9800000
++
++typedef volatile struct
++{
++ /*00*/ u16 whoami;
++ u16 reserved0;
++ /*04*/ u16 status;
++ u16 reserved1;
++ /*08*/ u16 switches;
++ u16 reserved2;
++ /*0C*/ u16 resets;
++ u16 reserved3;
++
++ /*10*/ u16 pcmcia;
++ u16 reserved4;
++ /*14*/ u16 board;
++ u16 reserved5;
++ /*18*/ u16 disk_leds;
++ u16 reserved6;
++ /*1C*/ u16 system;
++ u16 reserved7;
++
++ /*20*/ u16 intclr;
++ u16 reserved8;
++ /*24*/ u16 intset;
++ u16 reserved9;
++ /*28*/ u16 intclr_mask;
++ u16 reserved10;
++ /*2C*/ u16 intset_mask;
++ u16 reserved11;
++
++ /*30*/ u16 sig_status;
++ u16 reserved12;
++ /*34*/ u16 int_status;
++ u16 reserved13;
++ /*38*/ u16 reserved14;
++ u16 reserved15;
++ /*3C*/ u16 reserved16;
++ u16 reserved17;
++
++} BCSR;
++
++static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR;
++
++/*
++ * Register bit definitions for the BCSRs
++ */
++#define BCSR_WHOAMI_DCID 0x000F
++#define BCSR_WHOAMI_CPLD 0x00F0
++#define BCSR_WHOAMI_BOARD 0x0F00
++
++#define BCSR_STATUS_PCMCIA0VS 0x0003
++#define BCSR_STATUS_PCMCIA1VS 0x000C
++#define BCSR_STATUS_SWAPBOOT 0x0040
++#define BCSR_STATUS_FLASHBUSY 0x0100
++#define BCSR_STATUS_IDECBLID 0x0200
++#define BCSR_STATUS_SD0WP 0x0400
++#define BCSR_STATUS_U0RXD 0x1000
++#define BCSR_STATUS_U1RXD 0x2000
++
++#define BCSR_SWITCHES_OCTAL 0x00FF
++#define BCSR_SWITCHES_DIP_1 0x0080
++#define BCSR_SWITCHES_DIP_2 0x0040
++#define BCSR_SWITCHES_DIP_3 0x0020
++#define BCSR_SWITCHES_DIP_4 0x0010
++#define BCSR_SWITCHES_DIP_5 0x0008
++#define BCSR_SWITCHES_DIP_6 0x0004
++#define BCSR_SWITCHES_DIP_7 0x0002
++#define BCSR_SWITCHES_DIP_8 0x0001
++#define BCSR_SWITCHES_ROTARY 0x0F00
++
++#define BCSR_RESETS_ETH 0x0001
++#define BCSR_RESETS_CAMERA 0x0002
++#define BCSR_RESETS_DC 0x0004
++#define BCSR_RESETS_IDE 0x0008
++#define BCSR_RESETS_TV 0x0010
++/* not resets but in the same register */
++#define BCSR_RESETS_PWMR1mUX 0x0800
++#define BCSR_RESETS_PCS0MUX 0x1000
++#define BCSR_RESETS_PCS1MUX 0x2000
++#define BCSR_RESETS_SPISEL 0x4000
++
++#define BCSR_PCMCIA_PC0VPP 0x0003
++#define BCSR_PCMCIA_PC0VCC 0x000C
++#define BCSR_PCMCIA_PC0DRVEN 0x0010
++#define BCSR_PCMCIA_PC0RST 0x0080
++#define BCSR_PCMCIA_PC1VPP 0x0300
++#define BCSR_PCMCIA_PC1VCC 0x0C00
++#define BCSR_PCMCIA_PC1DRVEN 0x1000
++#define BCSR_PCMCIA_PC1RST 0x8000
++
++#define BCSR_BOARD_LCDVEE 0x0001
++#define BCSR_BOARD_LCDVDD 0x0002
++#define BCSR_BOARD_LCDBL 0x0004
++#define BCSR_BOARD_CAMSNAP 0x0010
++#define BCSR_BOARD_CAMPWR 0x0020
++#define BCSR_BOARD_SD0PWR 0x0040
++
++#define BCSR_LEDS_DECIMALS 0x0003
++#define BCSR_LEDS_LED0 0x0100
++#define BCSR_LEDS_LED1 0x0200
++#define BCSR_LEDS_LED2 0x0400
++#define BCSR_LEDS_LED3 0x0800
++
++#define BCSR_SYSTEM_POWEROFF 0x4000
++#define BCSR_SYSTEM_RESET 0x8000
++
++/* Bit positions for the different interrupt sources */
++#define BCSR_INT_IDE 0x0001
++#define BCSR_INT_ETH 0x0002
++#define BCSR_INT_PC0 0x0004
++#define BCSR_INT_PC0STSCHG 0x0008
++#define BCSR_INT_PC1 0x0010
++#define BCSR_INT_PC1STSCHG 0x0020
++#define BCSR_INT_DC 0x0040
++#define BCSR_INT_FLASHBUSY 0x0080
++#define BCSR_INT_PC0INSERT 0x0100
++#define BCSR_INT_PC0EJECT 0x0200
++#define BCSR_INT_PC1INSERT 0x0400
++#define BCSR_INT_PC1EJECT 0x0800
++#define BCSR_INT_SD0INSERT 0x1000
++#define BCSR_INT_SD0EJECT 0x2000
++
++#define AU1XXX_SMC91111_PHYS_ADDR (0x19000300)
++#define AU1XXX_SMC91111_IRQ DB1200_ETH_INT
++
++#define AU1XXX_ATA_PHYS_ADDR (0x18800000)
++#define AU1XXX_ATA_PHYS_LEN (0x100)
++#define AU1XXX_ATA_REG_OFFSET (5)
++#define AU1XXX_ATA_INT DB1200_IDE_INT
++#define AU1XXX_ATA_DDMA_REQ DSCR_CMD0_DMA_REQ1;
++#define AU1XXX_ATA_RQSIZE 128
++
++#define NAND_PHYS_ADDR 0x20000000
++
++/*
++ * External Interrupts for Pb1200 as of 8/6/2004.
++ * Bit positions in the CPLD registers can be calculated by taking
++ * the interrupt define and subtracting the DB1200_INT_BEGIN value.
++ * *example: IDE bis pos is = 64 - 64
++ ETH bit pos is = 65 - 64
++ */
++#define DB1200_INT_BEGIN (AU1000_LAST_INTC1_INT + 1)
++#define DB1200_IDE_INT (DB1200_INT_BEGIN + 0)
++#define DB1200_ETH_INT (DB1200_INT_BEGIN + 1)
++#define DB1200_PC0_INT (DB1200_INT_BEGIN + 2)
++#define DB1200_PC0_STSCHG_INT (DB1200_INT_BEGIN + 3)
++#define DB1200_PC1_INT (DB1200_INT_BEGIN + 4)
++#define DB1200_PC1_STSCHG_INT (DB1200_INT_BEGIN + 5)
++#define DB1200_DC_INT (DB1200_INT_BEGIN + 6)
++#define DB1200_FLASHBUSY_INT (DB1200_INT_BEGIN + 7)
++#define DB1200_PC0_INSERT_INT (DB1200_INT_BEGIN + 8)
++#define DB1200_PC0_EJECT_INT (DB1200_INT_BEGIN + 9)
++#define DB1200_PC1_INSERT_INT (DB1200_INT_BEGIN + 10)
++#define DB1200_PC1_EJECT_INT (DB1200_INT_BEGIN + 11)
++#define DB1200_SD0_INSERT_INT (DB1200_INT_BEGIN + 12)
++#define DB1200_SD0_EJECT_INT (DB1200_INT_BEGIN + 13)
++
++#define DB1200_INT_END (DB1200_INT_BEGIN + 15)
++
++/* For drivers/pcmcia/au1000_db1x00.c */
++#define BOARD_PC0_INT DB1200_PC0_INT
++#define BOARD_PC1_INT DB1200_PC1_INT
++#define BOARD_CARD_INSERTED(SOCKET) bcsr->sig_status & (1<<(8+(2*SOCKET)))
++
++#endif /* __ASM_DB1200_H */
++
+diff -Nur linux-2.4.32/include/asm-mips/db1x00.h linux-2.4.32.patched/include/asm-mips/db1x00.h
+--- linux-2.4.32/include/asm-mips/db1x00.h 2005-01-19 15:10:11.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/db1x00.h 2006-03-13 18:55:54.000000000 +0100
+@@ -1,5 +1,5 @@
+ /*
+- * AMD Alchemy DB1x00 Reference Boards
++ * AMD Alchemy DB1x00 Reference Boards (BUT NOT DB1200)
+ *
+ * Copyright 2001 MontaVista Software Inc.
+ * Author: MontaVista Software, Inc.
+@@ -36,9 +36,18 @@
+ #define AC97_PSC_BASE PSC1_BASE_ADDR
+ #define SMBUS_PSC_BASE PSC2_BASE_ADDR
+ #define I2S_PSC_BASE PSC3_BASE_ADDR
++#define NAND_CS 1
++/* for drivers/pcmcia/au1000_db1x00.c */
++#define BOARD_PC0_INT AU1000_GPIO_3
++#define BOARD_PC1_INT AU1000_GPIO_5
++#define BOARD_CARD_INSERTED(SOCKET) !(bcsr->status & (1<<(4+SOCKET)))
+
+ #else
+ #define BCSR_KSEG1_ADDR 0xAE000000
++/* for drivers/pcmcia/au1000_db1x00.c */
++#define BOARD_PC0_INT AU1000_GPIO_2
++#define BOARD_PC1_INT AU1000_GPIO_5
++#define BOARD_CARD_INSERTED(SOCKET) !(bcsr->status & (1<<(4+SOCKET)))
+ #endif
+
+ /*
+@@ -66,6 +75,7 @@
+
+ } BCSR;
+
++static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR;
+
+ /*
+ * Register/mask bit definitions for the BCSRs
+@@ -130,14 +140,6 @@
+
+ #define BCSR_SWRESET_RESET 0x0080
+
+-/* PCMCIA Db1x00 specific defines */
+-#define PCMCIA_MAX_SOCK 1
+-#define PCMCIA_NUM_SOCKS (PCMCIA_MAX_SOCK+1)
+-
+-/* VPP/VCC */
+-#define SET_VCC_VPP(VCC, VPP, SLOT)\
+- ((((VCC)<<2) | ((VPP)<<0)) << ((SLOT)*8))
+-
+ /* MTD CONFIG OPTIONS */
+ #if defined(CONFIG_MTD_DB1X00_BOOT) && defined(CONFIG_MTD_DB1X00_USER)
+ #define DB1X00_BOTH_BANKS
+@@ -147,48 +149,15 @@
+ #define DB1X00_USER_ONLY
+ #endif
+
+-/* SD controller macros */
+-/*
+- * Detect card.
+- */
+-#define mmc_card_inserted(_n_, _res_) \
+- do { \
+- BCSR * const bcsr = (BCSR *)0xAE000000; \
+- unsigned long mmc_wp, board_specific; \
+- if ((_n_)) { \
+- mmc_wp = BCSR_BOARD_SD1_WP; \
+- } else { \
+- mmc_wp = BCSR_BOARD_SD0_WP; \
+- } \
+- board_specific = au_readl((unsigned long)(&bcsr->specific)); \
+- if (!(board_specific & mmc_wp)) {/* low means card present */ \
+- *(int *)(_res_) = 1; \
+- } else { \
+- *(int *)(_res_) = 0; \
+- } \
+- } while (0)
+-
++#if defined(CONFIG_BLK_DEV_IDE_AU1XXX) && defined(CONFIG_MIPS_DB1550)
+ /*
+- * Apply power to card slot(s).
++ * Daughter card information.
+ */
+-#define mmc_power_on(_n_) \
+- do { \
+- BCSR * const bcsr = (BCSR *)0xAE000000; \
+- unsigned long mmc_pwr, mmc_wp, board_specific; \
+- if ((_n_)) { \
+- mmc_pwr = BCSR_BOARD_SD1_PWR; \
+- mmc_wp = BCSR_BOARD_SD1_WP; \
+- } else { \
+- mmc_pwr = BCSR_BOARD_SD0_PWR; \
+- mmc_wp = BCSR_BOARD_SD0_WP; \
+- } \
+- board_specific = au_readl((unsigned long)(&bcsr->specific)); \
+- if (!(board_specific & mmc_wp)) {/* low means card present */ \
+- board_specific |= mmc_pwr; \
+- au_writel(board_specific, (int)(&bcsr->specific)); \
+- au_sync(); \
+- } \
+- } while (0)
++#define DAUGHTER_CARD_IRQ (AU1000_GPIO_8)
++/* DC_IDE */
++#define AU1XXX_ATA_PHYS_ADDR (0x0C000000)
++#define AU1XXX_ATA_REG_OFFSET (5)
++#endif /* CONFIG_MIPS_DB1550 */
+
+ #endif /* __ASM_DB1X00_H */
+
+diff -Nur linux-2.4.32/include/asm-mips/elf.h linux-2.4.32.patched/include/asm-mips/elf.h
+--- linux-2.4.32/include/asm-mips/elf.h 2004-02-18 14:36:32.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/elf.h 2006-03-13 18:55:54.000000000 +0100
+@@ -66,9 +66,10 @@
+ #define USE_ELF_CORE_DUMP
+ #define ELF_EXEC_PAGESIZE PAGE_SIZE
+
+-#define ELF_CORE_COPY_REGS(_dest,_regs) \
+- memcpy((char *) &_dest, (char *) _regs, \
+- sizeof(struct pt_regs));
++extern void dump_regs(elf_greg_t *, struct pt_regs *regs);
++
++#define ELF_CORE_COPY_REGS(elf_regs, regs) \
++ dump_regs((elf_greg_t *)&(elf_regs), regs);
+
+ /* This yields a mask that user programs can use to figure out what
+ instruction set this cpu supports. This could be done in userspace,
+diff -Nur linux-2.4.32/include/asm-mips/ficmmp.h linux-2.4.32.patched/include/asm-mips/ficmmp.h
+--- linux-2.4.32/include/asm-mips/ficmmp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/ficmmp.h 2006-03-13 18:55:54.000000000 +0100
+@@ -0,0 +1,156 @@
++/*
++ * FIC MMP
++ *
++ * ########################################################################
++ *
++ * This program is free software; you can distribute it and/or modify it
++ * under the terms of the GNU General Public License (Version 2) as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * for more details.
++ *
++ * You should have received a copy of the GNU General Public License along
++ * with this program; if not, write to the Free Software Foundation, Inc.,
++ * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++ *
++ * ########################################################################
++ *
++ *
++ */
++#ifndef __ASM_FICMMP_H
++#define __ASM_FICMMP_H
++
++#include <linux/types.h>
++#include <asm/au1000.h>
++#include <asm/au1xxx_gpio.h>
++
++// This is defined in au1000.h with bogus value
++#undef AU1X00_EXTERNAL_INT
++
++#define DBDMA_AC97_TX_CHAN DSCR_CMD0_PSC1_TX
++#define DBDMA_AC97_RX_CHAN DSCR_CMD0_PSC1_RX
++#define DBDMA_I2S_TX_CHAN DSCR_CMD0_PSC1_TX
++#define DBDMA_I2S_RX_CHAN DSCR_CMD0_PSC1_RX
++/* SPI and SMB are muxed on the Pb1200 board.
++ Refer to board documentation.
++ */
++#define SPI_PSC_BASE PSC0_BASE_ADDR
++#define SMBUS_PSC_BASE PSC0_BASE_ADDR
++/* AC97 and I2S are muxed on the Pb1200 board.
++ Refer to board documentation.
++ */
++#define AC97_PSC_BASE PSC1_BASE_ADDR
++#define I2S_PSC_BASE PSC1_BASE_ADDR
++
++
++/*
++ * SMSC LAN91C111
++ */
++#define AU1XXX_SMC91111_PHYS_ADDR (0xAC000300)
++#define AU1XXX_SMC91111_IRQ AU1000_GPIO_5
++
++/* DC_IDE and DC_ETHERNET */
++#define FICMMP_IDE_INT AU1000_GPIO_4
++
++#define AU1XXX_ATA_PHYS_ADDR (0x0C800000)
++#define AU1XXX_ATA_REG_OFFSET (5)
++/*
++#define AU1XXX_ATA_BASE (0x0C800000)
++#define AU1XXX_ATA_END (0x0CFFFFFF)
++#define AU1XXX_ATA_MEM_SIZE (AU1XXX_ATA_END - AU1XXX_ATA_BASE +1)
++
++#define AU1XXX_ATA_REG_OFFSET (5)
++*/
++/* VPP/VCC */
++#define SET_VCC_VPP(VCC, VPP, SLOT)\
++ ((((VCC)<<2) | ((VPP)<<0)) << ((SLOT)*8))
++
++
++#define FICMMP_CONFIG_BASE 0xAD000000
++#define FICMMP_CONFIG_ENABLE 13
++
++#define FICMMP_CONFIG_I2SFREQ(N) (N<<0)
++#define FICMMP_CONFIG_I2SXTAL0 (1<<0)
++#define FICMMP_CONFIG_I2SXTAL1 (1<<1)
++#define FICMMP_CONFIG_I2SXTAL2 (1<<2)
++#define FICMMP_CONFIG_I2SXTAL3 (1<<3)
++#define FICMMP_CONFIG_ADV1 (1<<4)
++#define FICMMP_CONFIG_IDERST (1<<5)
++#define FICMMP_CONFIG_LCMEN (1<<6)
++#define FICMMP_CONFIG_CAMPWDN (1<<7)
++#define FICMMP_CONFIG_USBPWREN (1<<8)
++#define FICMMP_CONFIG_LCMPWREN (1<<9)
++#define FICMMP_CONFIG_TVOUTPWREN (1<<10)
++#define FICMMP_CONFIG_RS232PWREN (1<<11)
++#define FICMMP_CONFIG_LCMDATAOUT (1<<12)
++#define FICMMP_CONFIG_TVODATAOUT (1<<13)
++#define FICMMP_CONFIG_ADV3 (1<<14)
++#define FICMMP_CONFIG_ADV4 (1<<15)
++
++#define I2S_FREQ_8_192 (0x0)
++#define I2S_FREQ_11_2896 (0x1)
++#define I2S_FREQ_12_288 (0x2)
++#define I2S_FREQ_24_576 (0x3)
++//#define I2S_FREQ_12_288 (0x4)
++#define I2S_FREQ_16_9344 (0x5)
++#define I2S_FREQ_18_432 (0x6)
++#define I2S_FREQ_36_864 (0x7)
++#define I2S_FREQ_16_384 (0x8)
++#define I2S_FREQ_22_5792 (0x9)
++//#define I2S_FREQ_24_576 (0x10)
++#define I2S_FREQ_49_152 (0x11)
++//#define I2S_FREQ_24_576 (0x12)
++#define I2S_FREQ_33_8688 (0x13)
++//#define I2S_FREQ_36_864 (0x14)
++#define I2S_FREQ_73_728 (0x15)
++
++#define FICMMP_IDE_PWR 9
++#define FICMMP_FOCUS_RST 2
++
++static __inline void ficmmp_config_set(u16 bits)
++{
++ extern u16 ficmmp_config;
++ //printk("set_config: %X, Old: %X, New: %X\n", bits, ficmmp_config, ficmmp_config | bits);
++ ficmmp_config |= bits;
++ *((u16*)FICMMP_CONFIG_BASE) = ficmmp_config;
++}
++
++static __inline void ficmmp_config_clear(u16 bits)
++{
++ extern u16 ficmmp_config;
++// printk("clear_config: %X, Old: %X, New: %X\n", bits, ficmmp_config, ficmmp_config & ~bits);
++ ficmmp_config &= ~bits;
++ *((u16*)FICMMP_CONFIG_BASE) = ficmmp_config;
++}
++
++static __inline void ficmmp_config_init(void)
++{
++ au1xxx_gpio_write(FICMMP_CONFIG_ENABLE, 0); //Enable configuration latch
++ ficmmp_config_set(FICMMP_CONFIG_LCMDATAOUT | FICMMP_CONFIG_TVODATAOUT | FICMMP_CONFIG_IDERST); //Disable display data buffers
++ ficmmp_config_set(FICMMP_CONFIG_I2SFREQ(I2S_FREQ_36_864));
++}
++
++static __inline u32 ficmmp_set_i2s_sample_rate(u32 rate)
++{
++ u32 freq;
++
++ switch(rate)
++ {
++ case 88200:
++ case 44100:
++ case 8018: freq = I2S_FREQ_11_2896; break;
++ case 48000:
++ case 32000: //freq = I2S_FREQ_18_432; break;
++ case 8000: freq = I2S_FREQ_12_288; break;
++ default: freq = I2S_FREQ_12_288; rate = 8000;
++ }
++ ficmmp_config_clear(FICMMP_CONFIG_I2SFREQ(0xF));
++ ficmmp_config_set(FICMMP_CONFIG_I2SFREQ(freq));
++ return rate;
++}
++
++#endif /* __ASM_FICMMP_H */
++
+diff -Nur linux-2.4.32/include/asm-mips/hazards.h linux-2.4.32.patched/include/asm-mips/hazards.h
+--- linux-2.4.32/include/asm-mips/hazards.h 2004-02-18 14:36:32.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/hazards.h 2006-03-13 18:57:11.000000000 +0100
+@@ -3,7 +3,7 @@
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+- * Copyright (C) 2003 Ralf Baechle
++ * Copyright (C) 2003, 2004 Ralf Baechle
+ */
+ #ifndef _ASM_HAZARDS_H
+ #define _ASM_HAZARDS_H
+@@ -12,38 +12,200 @@
+
+ #ifdef __ASSEMBLY__
+
++ .macro _ssnop
++ sll $0, $0, 1
++ .endm
++
+ /*
+ * RM9000 hazards. When the JTLB is updated by tlbwi or tlbwr, a subsequent
+ * use of the JTLB for instructions should not occur for 4 cpu cycles and use
+ * for data translations should not occur for 3 cpu cycles.
+ */
+ #ifdef CONFIG_CPU_RM9000
+-#define rm9000_tlb_hazard \
++
++#define mtc0_tlbw_hazard \
+ .set push; \
+ .set mips32; \
+- ssnop; ssnop; ssnop; ssnop; \
++ _ssnop; _ssnop; _ssnop; _ssnop; \
+ .set pop
++
++#define tlbw_eret_hazard \
++ .set push; \
++ .set mips32; \
++ _ssnop; _ssnop; _ssnop; _ssnop; \
++ .set pop
++
+ #else
+-#define rm9000_tlb_hazard
++
++/*
++ * The taken branch will result in a two cycle penalty for the two killed
++ * instructions on R4000 / R4400. Other processors only have a single cycle
++ * hazard so this is nice trick to have an optimal code for a range of
++ * processors.
++ */
++#define mtc0_tlbw_hazard \
++ b . + 8
++#define tlbw_eret_hazard \
++ nop
+ #endif
+
++/*
++ * mtc0->mfc0 hazard
++ * The 24K has a 2 cycle mtc0/mfc0 execution hazard.
++ * It is a MIPS32R2 processor so ehb will clear the hazard.
++ */
++
++#ifdef CONFIG_CPU_MIPSR2
++/*
++ * Use a macro for ehb unless explicit support for MIPSR2 is enabled
++ */
++ .macro ehb
++ sll $0, $0, 3
++ .endm
++
++#define irq_enable_hazard \
++ ehb # irq_enable_hazard
++
++#define irq_disable_hazard \
++ ehb # irq_disable_hazard
++
++#elif defined(CONFIG_CPU_R10000) || defined(CONFIG_CPU_RM9000)
++
++/*
++ * R10000 rocks - all hazards handled in hardware, so this becomes a nobrainer.
++ */
++
++#define irq_enable_hazard
++
++#define irq_disable_hazard
++
+ #else
+
+ /*
++ * Classic MIPS needs 1 - 3 nops or ssnops
++ */
++#define irq_enable_hazard
++#define irq_disable_hazard \
++ _ssnop; _ssnop; _ssnop
++
++#endif
++
++#else /* __ASSEMBLY__ */
++
++/*
+ * RM9000 hazards. When the JTLB is updated by tlbwi or tlbwr, a subsequent
+ * use of the JTLB for instructions should not occur for 4 cpu cycles and use
+ * for data translations should not occur for 3 cpu cycles.
+ */
+ #ifdef CONFIG_CPU_RM9000
+-#define rm9000_tlb_hazard() \
++
++#define mtc0_tlbw_hazard() \
+ __asm__ __volatile__( \
+ ".set\tmips32\n\t" \
+- "ssnop; ssnop; ssnop; ssnop\n\t" \
++ "_ssnop; _ssnop; _ssnop; _ssnop\n\t" \
++ ".set\tmips0")
++
++#define tlbw_use_hazard() \
++ __asm__ __volatile__( \
++ ".set\tmips32\n\t" \
++ "_ssnop; _ssnop; _ssnop; _ssnop\n\t" \
+ ".set\tmips0")
+ #else
+-#define rm9000_tlb_hazard() do { } while (0)
++
++/*
++ * Overkill warning ...
++ */
++#define mtc0_tlbw_hazard() \
++ __asm__ __volatile__( \
++ ".set noreorder\n\t" \
++ "nop; nop; nop; nop; nop; nop;\n\t" \
++ ".set reorder\n\t")
++
++#define tlbw_use_hazard() \
++ __asm__ __volatile__( \
++ ".set noreorder\n\t" \
++ "nop; nop; nop; nop; nop; nop;\n\t" \
++ ".set reorder\n\t")
++
+ #endif
+
++/*
++ * mtc0->mfc0 hazard
++ * The 24K has a 2 cycle mtc0/mfc0 execution hazard.
++ * It is a MIPS32R2 processor so ehb will clear the hazard.
++ */
++
++#ifdef CONFIG_CPU_MIPSR2
++/*
++ * Use a macro for ehb unless explicit support for MIPSR2 is enabled
++ */
++__asm__(
++ " .macro ehb \n\t"
++ " sll $0, $0, 3 \n\t"
++ " .endm \n\t"
++ " \n\t"
++ " .macro\tirq_enable_hazard \n\t"
++ " ehb \n\t"
++ " .endm \n\t"
++ " \n\t"
++ " .macro\tirq_disable_hazard \n\t"
++ " ehb \n\t"
++ " .endm");
++
++#define irq_enable_hazard() \
++ __asm__ __volatile__( \
++ "ehb\t\t\t\t# irq_enable_hazard")
++
++#define irq_disable_hazard() \
++ __asm__ __volatile__( \
++ "ehb\t\t\t\t# irq_disable_hazard")
++
++#elif defined(CONFIG_CPU_R10000)
++
++/*
++ * R10000 rocks - all hazards handled in hardware, so this becomes a nobrainer.
++ */
++
++__asm__(
++ " .macro\tirq_enable_hazard \n\t"
++ " .endm \n\t"
++ " \n\t"
++ " .macro\tirq_disable_hazard \n\t"
++ " .endm");
++
++#define irq_enable_hazard() do { } while (0)
++#define irq_disable_hazard() do { } while (0)
++
++#else
++
++/*
++ * Default for classic MIPS processors. Assume worst case hazards but don't
++ * care about the irq_enable_hazard - sooner or later the hardware will
++ * enable it and we don't care when exactly.
++ */
++
++__asm__(
++ " .macro _ssnop \n\t"
++ " sll $0, $2, 1 \n\t"
++ " .endm \n\t"
++ " \n\t"
++ " # \n\t"
++ " # There is a hazard but we do not care \n\t"
++ " # \n\t"
++ " .macro\tirq_enable_hazard \n\t"
++ " .endm \n\t"
++ " \n\t"
++ " .macro\tirq_disable_hazard \n\t"
++ " _ssnop; _ssnop; _ssnop \n\t"
++ " .endm");
++
++#define irq_enable_hazard() do { } while (0)
++#define irq_disable_hazard() \
++ __asm__ __volatile__( \
++ "_ssnop; _ssnop; _ssnop;\t\t# irq_disable_hazard")
++
+ #endif
+
++#endif /* __ASSEMBLY__ */
++
+ #endif /* _ASM_HAZARDS_H */
+diff -Nur linux-2.4.32/include/asm-mips/ide.h linux-2.4.32.patched/include/asm-mips/ide.h
+--- linux-2.4.32/include/asm-mips/ide.h 2003-08-25 13:44:43.000000000 +0200
++++ linux-2.4.32.patched/include/asm-mips/ide.h 2006-03-13 18:57:19.000000000 +0100
+@@ -32,12 +32,12 @@
+
+ extern struct ide_ops *ide_ops;
+
+-static __inline__ int ide_default_irq(ide_ioreg_t base)
++static inline int ide_default_irq(ide_ioreg_t base)
+ {
+ return ide_ops->ide_default_irq(base);
+ }
+
+-static __inline__ ide_ioreg_t ide_default_io_base(int index)
++static inline ide_ioreg_t ide_default_io_base(int index)
+ {
+ return ide_ops->ide_default_io_base(index);
+ }
+@@ -48,7 +48,7 @@
+ ide_ops->ide_init_hwif_ports(hw, data_port, ctrl_port, irq);
+ }
+
+-static __inline__ void ide_init_default_hwifs(void)
++static inline void ide_init_default_hwifs(void)
+ {
+ #ifndef CONFIG_BLK_DEV_IDEPCI
+ hw_regs_t hw;
+@@ -68,7 +68,89 @@
+ #define ide_ack_intr(hwif) ((hwif)->hw.ack_intr ? (hwif)->hw.ack_intr(hwif) : 1)
+ #endif
+
+-#include <asm-generic/ide_iops.h>
++/* MIPS port and memory-mapped I/O string operations. */
++
++static inline void __ide_flush_dcache_range(unsigned long addr, unsigned long size)
++{
++ if (cpu_has_dc_aliases) {
++ unsigned long end = addr + size;
++ for (; addr < end; addr += PAGE_SIZE)
++ flush_dcache_page(virt_to_page(addr));
++ }
++}
++
++static inline void __ide_insw(unsigned long port, void *addr,
++ unsigned int count)
++{
++ insw(port, addr, count);
++ __ide_flush_dcache_range((unsigned long)addr, count * 2);
++}
++
++static inline void __ide_insl(unsigned long port, void *addr, unsigned int count)
++{
++ insl(port, addr, count);
++ __ide_flush_dcache_range((unsigned long)addr, count * 4);
++}
++
++static inline void __ide_outsw(unsigned long port, const void *addr,
++ unsigned long count)
++{
++ outsw(port, addr, count);
++ __ide_flush_dcache_range((unsigned long)addr, count * 2);
++}
++
++static inline void __ide_outsl(unsigned long port, const void *addr,
++ unsigned long count)
++{
++ outsl(port, addr, count);
++ __ide_flush_dcache_range((unsigned long)addr, count * 4);
++}
++
++static inline void __ide_mm_insw(unsigned long port, void *addr, u32 count)
++{
++ unsigned long start = (unsigned long) addr;
++
++ while (count--) {
++ *(u16 *)addr = readw(port);
++ addr += 2;
++ }
++ __ide_flush_dcache_range(start, count * 2);
++}
++
++static inline void __ide_mm_insl(unsigned long port, void *addr, u32 count)
++{
++ unsigned long start = (unsigned long) addr;
++
++ while (count--) {
++ *(u32 *)addr = readl(port);
++ addr += 4;
++ }
++ __ide_flush_dcache_range(start, count * 4);
++}
++
++static inline void __ide_mm_outsw(unsigned long port, const void *addr,
++ u32 count)
++{
++ unsigned long start = (unsigned long) addr;
++
++ while (count--) {
++ writew(*(u16 *)addr, port);
++ addr += 2;
++ }
++ __ide_flush_dcache_range(start, count * 2);
++}
++
++static inline void __ide_mm_outsl(unsigned long port, const void *addr,
++ u32 count)
++{
++ unsigned long start = (unsigned long) addr;
++
++ while (count--) {
++ writel(*(u32 *)addr, port);
++ addr += 4;
++ }
++ __ide_flush_dcache_range(start, count * 4);
++}
+
+ #endif /* __KERNEL__ */
+
+diff -Nur linux-2.4.32/include/asm-mips/io.h linux-2.4.32.patched/include/asm-mips/io.h
+--- linux-2.4.32/include/asm-mips/io.h 2003-08-25 13:44:43.000000000 +0200
++++ linux-2.4.32.patched/include/asm-mips/io.h 2006-03-13 18:57:11.000000000 +0100
+@@ -392,7 +392,8 @@
+ return __ioswab32(__val);
+ }
+
+-static inline void __outsb(unsigned long port, void *addr, unsigned int count)
++static inline void __outsb(unsigned long port, const void *addr,
++ unsigned int count)
+ {
+ while (count--) {
+ outb(*(u8 *)addr, port);
+@@ -408,7 +409,8 @@
+ }
+ }
+
+-static inline void __outsw(unsigned long port, void *addr, unsigned int count)
++static inline void __outsw(unsigned long port, const void *addr,
++ unsigned int count)
+ {
+ while (count--) {
+ outw(*(u16 *)addr, port);
+@@ -424,7 +426,8 @@
+ }
+ }
+
+-static inline void __outsl(unsigned long port, void *addr, unsigned int count)
++static inline void __outsl(unsigned long port, const void *addr,
++ unsigned int count)
+ {
+ while (count--) {
+ outl(*(u32 *)addr, port);
+diff -Nur linux-2.4.32/include/asm-mips/mipsregs.h linux-2.4.32.patched/include/asm-mips/mipsregs.h
+--- linux-2.4.32/include/asm-mips/mipsregs.h 2005-01-19 15:10:12.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/mipsregs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -757,10 +757,18 @@
+ #define read_c0_config1() __read_32bit_c0_register($16, 1)
+ #define read_c0_config2() __read_32bit_c0_register($16, 2)
+ #define read_c0_config3() __read_32bit_c0_register($16, 3)
++#define read_c0_config4() __read_32bit_c0_register($16, 4)
++#define read_c0_config5() __read_32bit_c0_register($16, 5)
++#define read_c0_config6() __read_32bit_c0_register($16, 6)
++#define read_c0_config7() __read_32bit_c0_register($16, 7)
+ #define write_c0_config(val) __write_32bit_c0_register($16, 0, val)
+ #define write_c0_config1(val) __write_32bit_c0_register($16, 1, val)
+ #define write_c0_config2(val) __write_32bit_c0_register($16, 2, val)
+ #define write_c0_config3(val) __write_32bit_c0_register($16, 3, val)
++#define write_c0_config4(val) __write_32bit_c0_register($16, 4, val)
++#define write_c0_config5(val) __write_32bit_c0_register($16, 5, val)
++#define write_c0_config6(val) __write_32bit_c0_register($16, 6, val)
++#define write_c0_config7(val) __write_32bit_c0_register($16, 7, val)
+
+ /*
+ * The WatchLo register. There may be upto 8 of them.
+@@ -874,42 +882,34 @@
+ */
+ static inline void tlb_probe(void)
+ {
+- rm9000_tlb_hazard();
+ __asm__ __volatile__(
+ ".set noreorder\n\t"
+ "tlbp\n\t"
+ ".set reorder");
+- rm9000_tlb_hazard();
+ }
+
+ static inline void tlb_read(void)
+ {
+- rm9000_tlb_hazard();
+ __asm__ __volatile__(
+ ".set noreorder\n\t"
+ "tlbr\n\t"
+ ".set reorder");
+- rm9000_tlb_hazard();
+ }
+
+ static inline void tlb_write_indexed(void)
+ {
+- rm9000_tlb_hazard();
+ __asm__ __volatile__(
+ ".set noreorder\n\t"
+ "tlbwi\n\t"
+ ".set reorder");
+- rm9000_tlb_hazard();
+ }
+
+ static inline void tlb_write_random(void)
+ {
+- rm9000_tlb_hazard();
+ __asm__ __volatile__(
+ ".set noreorder\n\t"
+ "tlbwr\n\t"
+ ".set reorder");
+- rm9000_tlb_hazard();
+ }
+
+ /*
+diff -Nur linux-2.4.32/include/asm-mips/mmu_context.h linux-2.4.32.patched/include/asm-mips/mmu_context.h
+--- linux-2.4.32/include/asm-mips/mmu_context.h 2005-01-19 15:10:12.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/mmu_context.h 2006-03-13 18:55:54.000000000 +0100
+@@ -27,7 +27,7 @@
+ #define TLBMISS_HANDLER_SETUP_PGD(pgd) \
+ pgd_current[smp_processor_id()] = (unsigned long)(pgd)
+ #define TLBMISS_HANDLER_SETUP() \
+- write_c0_context((unsigned long) smp_processor_id() << (23 + 3)); \
++ write_c0_context((unsigned long) smp_processor_id() << 23); \
+ TLBMISS_HANDLER_SETUP_PGD(swapper_pg_dir)
+ extern unsigned long pgd_current[];
+
+diff -Nur linux-2.4.32/include/asm-mips/param.h linux-2.4.32.patched/include/asm-mips/param.h
+--- linux-2.4.32/include/asm-mips/param.h 2005-01-19 15:10:12.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/param.h 2006-03-13 18:57:11.000000000 +0100
+@@ -55,7 +55,7 @@
+ #endif /* defined(__KERNEL__) */
+ #endif /* defined(HZ) */
+
+-#define EXEC_PAGESIZE 65536
++#define EXEC_PAGESIZE 4096
+
+ #ifndef NGROUPS
+ #define NGROUPS 32
+diff -Nur linux-2.4.32/include/asm-mips/pb1100.h linux-2.4.32.patched/include/asm-mips/pb1100.h
+--- linux-2.4.32/include/asm-mips/pb1100.h 2003-08-25 13:44:44.000000000 +0200
++++ linux-2.4.32.patched/include/asm-mips/pb1100.h 2006-03-13 18:55:54.000000000 +0100
+@@ -1,5 +1,5 @@
+ /*
+- * Alchemy Semi PB1100 Referrence Board
++ * AMD Alchemy PB1100 Reference Boards
+ *
+ * Copyright 2001 MontaVista Software Inc.
+ * Author: MontaVista Software, Inc.
+@@ -27,55 +27,108 @@
+ #ifndef __ASM_PB1100_H
+ #define __ASM_PB1100_H
+
+-#define PB1100_IDENT 0xAE000000
+-#define BOARD_STATUS_REG 0xAE000004
+- #define PB1100_ROM_SEL (1<<15)
+- #define PB1100_ROM_SIZ (1<<14)
+- #define PB1100_SWAP_BOOT (1<<13)
+- #define PB1100_FLASH_WP (1<<12)
+- #define PB1100_ROM_H_STS (1<<11)
+- #define PB1100_ROM_L_STS (1<<10)
+- #define PB1100_FLASH_H_STS (1<<9)
+- #define PB1100_FLASH_L_STS (1<<8)
+- #define PB1100_SRAM_SIZ (1<<7)
+- #define PB1100_TSC_BUSY (1<<6)
+- #define PB1100_PCMCIA_VS_MASK (3<<4)
+- #define PB1100_RS232_CD (1<<3)
+- #define PB1100_RS232_CTS (1<<2)
+- #define PB1100_RS232_DSR (1<<1)
+- #define PB1100_RS232_RI (1<<0)
+-
+-#define PB1100_IRDA_RS232 0xAE00000C
+- #define PB1100_IRDA_FULL (0<<14) /* full power */
+- #define PB1100_IRDA_SHUTDOWN (1<<14)
+- #define PB1100_IRDA_TT (2<<14) /* 2/3 power */
+- #define PB1100_IRDA_OT (3<<14) /* 1/3 power */
+- #define PB1100_IRDA_FIR (1<<13)
+-
+-#define PCMCIA_BOARD_REG 0xAE000010
+- #define PB1100_SD_WP1_RO (1<<15) /* read only */
+- #define PB1100_SD_WP0_RO (1<<14) /* read only */
+- #define PB1100_SD_PWR1 (1<<11) /* applies power to SD1 */
+- #define PB1100_SD_PWR0 (1<<10) /* applies power to SD0 */
+- #define PB1100_SEL_SD_CONN1 (1<<9)
+- #define PB1100_SEL_SD_CONN0 (1<<8)
+- #define PC_DEASSERT_RST (1<<7)
+- #define PC_DRV_EN (1<<4)
+-
+-#define PB1100_G_CONTROL 0xAE000014 /* graphics control */
+-
+-#define PB1100_RST_VDDI 0xAE00001C
+- #define PB1100_SOFT_RESET (1<<15) /* clear to reset the board */
+- #define PB1100_VDDI_MASK (0x1F)
++#define BCSR_KSEG1_ADDR 0xAE000000
++
++/*
++ * Overlay data structure of the Pb1100 board registers.
++ * Registers located at physical 0E0000xx, KSEG1 0xAE0000xx
++ */
++typedef volatile struct
++{
++ /*00*/ unsigned short whoami;
++ unsigned short reserved0;
++ /*04*/ unsigned short status;
++ unsigned short reserved1;
++ /*08*/ unsigned short switches;
++ unsigned short reserved2;
++ /*0C*/ unsigned short resets;
++ unsigned short reserved3;
++ /*10*/ unsigned short pcmcia;
++ unsigned short reserved4;
++ /*14*/ unsigned short graphics;
++ unsigned short reserved5;
++ /*18*/ unsigned short leds;
++ unsigned short reserved6;
++ /*1C*/ unsigned short swreset;
++ unsigned short reserved7;
++
++} BCSR;
+
+-#define PB1100_LEDS 0xAE000018
+
+-/* 11:8 is 4 discreet LEDs. Clearing a bit illuminates the LED.
+- * 7:0 is the LED Display's decimal points.
++/*
++ * Register/mask bit definitions for the BCSRs
+ */
+-#define PB1100_HEX_LED 0xAE000018
++#define BCSR_WHOAMI_DCID 0x000F
++#define BCSR_WHOAMI_CPLD 0x00F0
++#define BCSR_WHOAMI_BOARD 0x0F00
++
++#define BCSR_STATUS_RS232_RI 0x0001
++#define BCSR_STATUS_RS232_DSR 0x0002
++#define BCSR_STATUS_RS232_CTS 0x0004
++#define BCSR_STATUS_RS232_CD 0x0008
++#define BCSR_STATUS_PCMCIA_VS_MASK 0x0030
++#define BCSR_STATUS_TSC_BUSY 0x0040
++#define BCSR_STATUS_SRAM_SIZ 0x0080
++#define BCSR_STATUS_FLASH_L_STS 0x0100
++#define BCSR_STATUS_FLASH_H_STS 0x0200
++#define BCSR_STATUS_ROM_H_STS 0x0400
++#define BCSR_STATUS_ROM_L_STS 0x0800
++#define BCSR_STATUS_FLASH_WP 0x1000
++#define BCSR_STATUS_SWAP_BOOT 0x2000
++#define BCSR_STATUS_ROM_SIZ 0x4000
++#define BCSR_STATUS_ROM_SEL 0x8000
++
++#define BCSR_SWITCHES_DIP 0x00FF
++#define BCSR_SWITCHES_DIP_1 0x0080
++#define BCSR_SWITCHES_DIP_2 0x0040
++#define BCSR_SWITCHES_DIP_3 0x0020
++#define BCSR_SWITCHES_DIP_4 0x0010
++#define BCSR_SWITCHES_DIP_5 0x0008
++#define BCSR_SWITCHES_DIP_6 0x0004
++#define BCSR_SWITCHES_DIP_7 0x0002
++#define BCSR_SWITCHES_DIP_8 0x0001
++#define BCSR_SWITCHES_ROTARY 0x0F00
++#define BCSR_SWITCHES_SDO_CL 0x8000
++
++#define BCSR_RESETS_PHY0 0x0001
++#define BCSR_RESETS_PHY1 0x0002
++#define BCSR_RESETS_DC 0x0004
++#define BCSR_RESETS_RS232_RTS 0x0100
++#define BCSR_RESETS_RS232_DTR 0x0200
++#define BCSR_RESETS_FIR_SEL 0x2000
++#define BCSR_RESETS_IRDA_MODE_MASK 0xC000
++#define BCSR_RESETS_IRDA_MODE_FULL 0x0000
++#define BCSR_RESETS_IRDA_MODE_OFF 0x4000
++#define BCSR_RESETS_IRDA_MODE_2_3 0x8000
++#define BCSR_RESETS_IRDA_MODE_1_3 0xC000
++
++#define BCSR_PCMCIA_PC0VPP 0x0003
++#define BCSR_PCMCIA_PC0VCC 0x000C
++#define BCSR_PCMCIA_PC0_DR_VEN 0x0010
++#define BCSR_PCMCIA_PC0RST 0x0080
++#define BCSR_PCMCIA_SEL_SD_CON0 0x0100
++#define BCSR_PCMCIA_SEL_SD_CON1 0x0200
++#define BCSR_PCMCIA_SD0_PWR 0x0400
++#define BCSR_PCMCIA_SD1_PWR 0x0800
++#define BCSR_PCMCIA_SD0_WP 0x4000
++#define BCSR_PCMCIA_SD1_WP 0x8000
++
++#define PB1100_G_CONTROL 0xAE000014
++#define BCSR_GRAPHICS_GPX_SMPASS 0x0010
++#define BCSR_GRAPHICS_GPX_BIG_ENDIAN 0x0020
++#define BCSR_GRAPHICS_GPX_RST 0x0040
++
++#define BCSR_LEDS_DECIMALS 0x00FF
++#define BCSR_LEDS_LED0 0x0100
++#define BCSR_LEDS_LED1 0x0200
++#define BCSR_LEDS_LED2 0x0400
++#define BCSR_LEDS_LED3 0x0800
++
++#define BCSR_SWRESET_RESET 0x0080
++#define BCSR_VDDI_VDI 0x001F
+
+-/* PCMCIA PB1100 specific defines */
++
++ /* PCMCIA Pb1x00 specific defines */
+ #define PCMCIA_MAX_SOCK 0
+ #define PCMCIA_NUM_SOCKS (PCMCIA_MAX_SOCK+1)
+
+@@ -83,3 +136,4 @@
+ #define SET_VCC_VPP(VCC, VPP) (((VCC)<<2) | ((VPP)<<0))
+
+ #endif /* __ASM_PB1100_H */
++
+diff -Nur linux-2.4.32/include/asm-mips/pb1200.h linux-2.4.32.patched/include/asm-mips/pb1200.h
+--- linux-2.4.32/include/asm-mips/pb1200.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/pb1200.h 2006-03-13 18:55:54.000000000 +0100
+@@ -0,0 +1,244 @@
++/*
++ * AMD Alchemy PB1200 Referrence Board
++ * Board Registers defines.
++ *
++ * ########################################################################
++ *
++ * This program is free software; you can distribute it and/or modify it
++ * under the terms of the GNU General Public License (Version 2) as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * for more details.
++ *
++ * You should have received a copy of the GNU General Public License along
++ * with this program; if not, write to the Free Software Foundation, Inc.,
++ * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++ *
++ * ########################################################################
++ *
++ *
++ */
++#ifndef __ASM_PB1200_H
++#define __ASM_PB1200_H
++
++#include <linux/types.h>
++
++// This is defined in au1000.h with bogus value
++#undef AU1X00_EXTERNAL_INT
++
++#define DBDMA_AC97_TX_CHAN DSCR_CMD0_PSC1_TX
++#define DBDMA_AC97_RX_CHAN DSCR_CMD0_PSC1_RX
++#define DBDMA_I2S_TX_CHAN DSCR_CMD0_PSC1_TX
++#define DBDMA_I2S_RX_CHAN DSCR_CMD0_PSC1_RX
++
++/* SPI and SMB are muxed on the Pb1200 board.
++ Refer to board documentation.
++ */
++#define SPI_PSC_BASE PSC0_BASE_ADDR
++#define SMBUS_PSC_BASE PSC0_BASE_ADDR
++/* AC97 and I2S are muxed on the Pb1200 board.
++ Refer to board documentation.
++ */
++#define AC97_PSC_BASE PSC1_BASE_ADDR
++#define I2S_PSC_BASE PSC1_BASE_ADDR
++
++#define BCSR_KSEG1_ADDR 0xAD800000
++
++typedef volatile struct
++{
++ /*00*/ u16 whoami;
++ u16 reserved0;
++ /*04*/ u16 status;
++ u16 reserved1;
++ /*08*/ u16 switches;
++ u16 reserved2;
++ /*0C*/ u16 resets;
++ u16 reserved3;
++
++ /*10*/ u16 pcmcia;
++ u16 reserved4;
++ /*14*/ u16 board;
++ u16 reserved5;
++ /*18*/ u16 disk_leds;
++ u16 reserved6;
++ /*1C*/ u16 system;
++ u16 reserved7;
++
++ /*20*/ u16 intclr;
++ u16 reserved8;
++ /*24*/ u16 intset;
++ u16 reserved9;
++ /*28*/ u16 intclr_mask;
++ u16 reserved10;
++ /*2C*/ u16 intset_mask;
++ u16 reserved11;
++
++ /*30*/ u16 sig_status;
++ u16 reserved12;
++ /*34*/ u16 int_status;
++ u16 reserved13;
++ /*38*/ u16 reserved14;
++ u16 reserved15;
++ /*3C*/ u16 reserved16;
++ u16 reserved17;
++
++} BCSR;
++
++static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR;
++
++/*
++ * Register bit definitions for the BCSRs
++ */
++#define BCSR_WHOAMI_DCID 0x000F
++#define BCSR_WHOAMI_CPLD 0x00F0
++#define BCSR_WHOAMI_BOARD 0x0F00
++
++#define BCSR_STATUS_PCMCIA0VS 0x0003
++#define BCSR_STATUS_PCMCIA1VS 0x000C
++#define BCSR_STATUS_SWAPBOOT 0x0040
++#define BCSR_STATUS_FLASHBUSY 0x0100
++#define BCSR_STATUS_IDECBLID 0x0200
++#define BCSR_STATUS_SD0WP 0x0400
++#define BCSR_STATUS_SD1WP 0x0800
++#define BCSR_STATUS_U0RXD 0x1000
++#define BCSR_STATUS_U1RXD 0x2000
++
++#define BCSR_SWITCHES_OCTAL 0x00FF
++#define BCSR_SWITCHES_DIP_1 0x0080
++#define BCSR_SWITCHES_DIP_2 0x0040
++#define BCSR_SWITCHES_DIP_3 0x0020
++#define BCSR_SWITCHES_DIP_4 0x0010
++#define BCSR_SWITCHES_DIP_5 0x0008
++#define BCSR_SWITCHES_DIP_6 0x0004
++#define BCSR_SWITCHES_DIP_7 0x0002
++#define BCSR_SWITCHES_DIP_8 0x0001
++#define BCSR_SWITCHES_ROTARY 0x0F00
++
++#define BCSR_RESETS_ETH 0x0001
++#define BCSR_RESETS_CAMERA 0x0002
++#define BCSR_RESETS_DC 0x0004
++#define BCSR_RESETS_IDE 0x0008
++/* not resets but in the same register */
++#define BCSR_RESETS_WSCFSM 0x0800
++#define BCSR_RESETS_PCS0MUX 0x1000
++#define BCSR_RESETS_PCS1MUX 0x2000
++#define BCSR_RESETS_SPISEL 0x4000
++#define BCSR_RESETS_SD1MUX 0x8000
++
++#define BCSR_PCMCIA_PC0VPP 0x0003
++#define BCSR_PCMCIA_PC0VCC 0x000C
++#define BCSR_PCMCIA_PC0DRVEN 0x0010
++#define BCSR_PCMCIA_PC0RST 0x0080
++#define BCSR_PCMCIA_PC1VPP 0x0300
++#define BCSR_PCMCIA_PC1VCC 0x0C00
++#define BCSR_PCMCIA_PC1DRVEN 0x1000
++#define BCSR_PCMCIA_PC1RST 0x8000
++
++#define BCSR_BOARD_LCDVEE 0x0001
++#define BCSR_BOARD_LCDVDD 0x0002
++#define BCSR_BOARD_LCDBL 0x0004
++#define BCSR_BOARD_CAMSNAP 0x0010
++#define BCSR_BOARD_CAMPWR 0x0020
++#define BCSR_BOARD_SD0PWR 0x0040
++#define BCSR_BOARD_SD1PWR 0x0080
++
++#define BCSR_LEDS_DECIMALS 0x00FF
++#define BCSR_LEDS_LED0 0x0100
++#define BCSR_LEDS_LED1 0x0200
++#define BCSR_LEDS_LED2 0x0400
++#define BCSR_LEDS_LED3 0x0800
++
++#define BCSR_SYSTEM_VDDI 0x001F
++#define BCSR_SYSTEM_POWEROFF 0x4000
++#define BCSR_SYSTEM_RESET 0x8000
++
++/* Bit positions for the different interrupt sources */
++#define BCSR_INT_IDE 0x0001
++#define BCSR_INT_ETH 0x0002
++#define BCSR_INT_PC0 0x0004
++#define BCSR_INT_PC0STSCHG 0x0008
++#define BCSR_INT_PC1 0x0010
++#define BCSR_INT_PC1STSCHG 0x0020
++#define BCSR_INT_DC 0x0040
++#define BCSR_INT_FLASHBUSY 0x0080
++#define BCSR_INT_PC0INSERT 0x0100
++#define BCSR_INT_PC0EJECT 0x0200
++#define BCSR_INT_PC1INSERT 0x0400
++#define BCSR_INT_PC1EJECT 0x0800
++#define BCSR_INT_SD0INSERT 0x1000
++#define BCSR_INT_SD0EJECT 0x2000
++#define BCSR_INT_SD1INSERT 0x4000
++#define BCSR_INT_SD1EJECT 0x8000
++
++#define AU1XXX_SMC91111_PHYS_ADDR (0x0D000300)
++#define AU1XXX_SMC91111_IRQ PB1200_ETH_INT
++
++#define AU1XXX_ATA_PHYS_ADDR (0x0C800000)
++#define AU1XXX_ATA_PHYS_LEN (0x100)
++#define AU1XXX_ATA_REG_OFFSET (5)
++#define AU1XXX_ATA_INT PB1200_IDE_INT
++#define AU1XXX_ATA_DDMA_REQ DSCR_CMD0_DMA_REQ1;
++#define AU1XXX_ATA_RQSIZE 128
++
++#define NAND_PHYS_ADDR 0x1C000000
++
++/* Timing values as described in databook, * ns value stripped of
++ * lower 2 bits.
++ * These defines are here rather than an SOC1200 generic file because
++ * the parts chosen on another board may be different and may require
++ * different timings.
++ */
++#define NAND_T_H (18 >> 2)
++#define NAND_T_PUL (30 >> 2)
++#define NAND_T_SU (30 >> 2)
++#define NAND_T_WH (30 >> 2)
++
++/* Bitfield shift amounts */
++#define NAND_T_H_SHIFT 0
++#define NAND_T_PUL_SHIFT 4
++#define NAND_T_SU_SHIFT 8
++#define NAND_T_WH_SHIFT 12
++
++#define NAND_TIMING ((NAND_T_H & 0xF) << NAND_T_H_SHIFT) | \
++ ((NAND_T_PUL & 0xF) << NAND_T_PUL_SHIFT) | \
++ ((NAND_T_SU & 0xF) << NAND_T_SU_SHIFT) | \
++ ((NAND_T_WH & 0xF) << NAND_T_WH_SHIFT)
++
++
++/*
++ * External Interrupts for Pb1200 as of 8/6/2004.
++ * Bit positions in the CPLD registers can be calculated by taking
++ * the interrupt define and subtracting the PB1200_INT_BEGIN value.
++ * *example: IDE bis pos is = 64 - 64
++ ETH bit pos is = 65 - 64
++ */
++#define PB1200_INT_BEGIN (AU1000_LAST_INTC1_INT + 1)
++#define PB1200_IDE_INT (PB1200_INT_BEGIN + 0)
++#define PB1200_ETH_INT (PB1200_INT_BEGIN + 1)
++#define PB1200_PC0_INT (PB1200_INT_BEGIN + 2)
++#define PB1200_PC0_STSCHG_INT (PB1200_INT_BEGIN + 3)
++#define PB1200_PC1_INT (PB1200_INT_BEGIN + 4)
++#define PB1200_PC1_STSCHG_INT (PB1200_INT_BEGIN + 5)
++#define PB1200_DC_INT (PB1200_INT_BEGIN + 6)
++#define PB1200_FLASHBUSY_INT (PB1200_INT_BEGIN + 7)
++#define PB1200_PC0_INSERT_INT (PB1200_INT_BEGIN + 8)
++#define PB1200_PC0_EJECT_INT (PB1200_INT_BEGIN + 9)
++#define PB1200_PC1_INSERT_INT (PB1200_INT_BEGIN + 10)
++#define PB1200_PC1_EJECT_INT (PB1200_INT_BEGIN + 11)
++#define PB1200_SD0_INSERT_INT (PB1200_INT_BEGIN + 12)
++#define PB1200_SD0_EJECT_INT (PB1200_INT_BEGIN + 13)
++#define PB1200_SD1_INSERT_INT (PB1200_INT_BEGIN + 14)
++#define PB1200_SD1_EJECT_INT (PB1200_INT_BEGIN + 15)
++
++#define PB1200_INT_END (PB1200_INT_BEGIN + 15)
++
++/* For drivers/pcmcia/au1000_db1x00.c */
++#define BOARD_PC0_INT PB1200_PC0_INT
++#define BOARD_PC1_INT PB1200_PC1_INT
++#define BOARD_CARD_INSERTED(SOCKET) bcsr->sig_status & (1<<(8+(2*SOCKET)))
++
++#endif /* __ASM_PB1200_H */
++
+diff -Nur linux-2.4.32/include/asm-mips/pb1550.h linux-2.4.32.patched/include/asm-mips/pb1550.h
+--- linux-2.4.32/include/asm-mips/pb1550.h 2005-01-19 15:10:12.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/pb1550.h 2006-03-13 18:55:54.000000000 +0100
+@@ -30,13 +30,11 @@
+
+ #define DBDMA_AC97_TX_CHAN DSCR_CMD0_PSC1_TX
+ #define DBDMA_AC97_RX_CHAN DSCR_CMD0_PSC1_RX
+-#define DBDMA_I2S_TX_CHAN DSCR_CMD0_PSC3_TX
+-#define DBDMA_I2S_RX_CHAN DSCR_CMD0_PSC3_RX
+-
+ #define SPI_PSC_BASE PSC0_BASE_ADDR
+ #define AC97_PSC_BASE PSC1_BASE_ADDR
+ #define SMBUS_PSC_BASE PSC2_BASE_ADDR
+ #define I2S_PSC_BASE PSC3_BASE_ADDR
++#define NAND_CS 1
+
+ #define BCSR_PHYS_ADDR 0xAF000000
+
+@@ -160,9 +158,23 @@
+ #define NAND_T_SU_SHIFT 8
+ #define NAND_T_WH_SHIFT 12
+
+-#define NAND_TIMING ((NAND_T_H & 0xF) << NAND_T_H_SHIFT) | \
+- ((NAND_T_PUL & 0xF) << NAND_T_PUL_SHIFT) | \
+- ((NAND_T_SU & 0xF) << NAND_T_SU_SHIFT) | \
+- ((NAND_T_WH & 0xF) << NAND_T_WH_SHIFT)
++#define NAND_TIMING ((NAND_T_H & 0xF) << NAND_T_H_SHIFT) | \
++ ((NAND_T_PUL & 0xF) << NAND_T_PUL_SHIFT) | \
++ ((NAND_T_SU & 0xF) << NAND_T_SU_SHIFT) | \
++ ((NAND_T_WH & 0xF) << NAND_T_WH_SHIFT)
++
++/*
++ * Daughter card information.
++ */
++#define DAUGHTER_CARD_BASE (0xAC000000)
++#define DAUGHTER_CARD_MEM_SIZE (0xADFFFFFF - DAUGHTER_CARD_BASE + 1)
++#define DAUGHTER_CARD_IRQ (AU1000_GPIO_3)
++
++/* DC_IDE and DC_ETHERNET */
++#define AU1XXX_ATA_PHYS_ADDR (0x0C000000)
++#define AU1XXX_ATA_REG_OFFSET (5)
++
++#define AU1XXX_SMC91111_PHYS_ADDR (0x0C000300)
++#define AU1XXX_SMC91111_IRQ AU1000_GPIO_3
+
+ #endif /* __ASM_PB1550_H */
+diff -Nur linux-2.4.32/include/asm-mips/ptrace.h linux-2.4.32.patched/include/asm-mips/ptrace.h
+--- linux-2.4.32/include/asm-mips/ptrace.h 2004-02-18 14:36:32.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/ptrace.h 2006-03-13 18:57:11.000000000 +0100
+@@ -4,6 +4,7 @@
+ * for more details.
+ *
+ * Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000 by Ralf Baechle
++ * Copyright (C) 2004 Maciej W. Rozycki
+ *
+ * Machine dependent structs and defines to help the user use
+ * the ptrace system call.
+@@ -64,12 +65,10 @@
+ "sw\t$22,"__str(PT_R22)"($29)\n\t" \
+ "sw\t$23,"__str(PT_R23)"($29)\n\t" \
+ "sw\t$30,"__str(PT_R30)"($29)\n\t" \
++ "j\t_" #symbol "\n\t" \
+ ".end\t" #symbol "\n\t" \
+ ".size\t" #symbol",. - " #symbol)
+
+-/* Used in declaration of save_static functions. */
+-#define static_unused static __attribute__((unused))
+-
+ #endif /* !__ASSEMBLY__ */
+
+ /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
+diff -Nur linux-2.4.32/include/asm-mips/r4kcache.h linux-2.4.32.patched/include/asm-mips/r4kcache.h
+--- linux-2.4.32/include/asm-mips/r4kcache.h 2004-02-18 14:36:32.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/r4kcache.h 2006-03-13 18:55:59.000000000 +0100
+@@ -15,6 +15,18 @@
+ #include <asm/asm.h>
+ #include <asm/cacheops.h>
+
++#ifdef CONFIG_BCM4710
++#define BCM4710_DUMMY_RREG() (((sbconfig_t *)(KSEG1ADDR(SB_ENUM_BASE + SBCONFIGOFF)))->sbimstate)
++
++#define BCM4710_FILL_TLB(addr) (*(volatile unsigned long *)(addr))
++#define BCM4710_PROTECTED_FILL_TLB(addr) ({ unsigned long x; get_dbe(x, (volatile unsigned long *)(addr)); })
++#else
++#define BCM4710_DUMMY_RREG()
++
++#define BCM4710_FILL_TLB(addr)
++#define BCM4710_PROTECTED_FILL_TLB(addr)
++#endif
++
+ #define cache_op(op,addr) \
+ __asm__ __volatile__( \
+ " .set noreorder \n" \
+@@ -27,12 +39,25 @@
+
+ static inline void flush_icache_line_indexed(unsigned long addr)
+ {
+- cache_op(Index_Invalidate_I, addr);
++ unsigned int way;
++ unsigned long ws_inc = 1UL << current_cpu_data.dcache.waybit;
++
++ for (way = 0; way < current_cpu_data.dcache.ways; way++) {
++ cache_op(Index_Invalidate_I, addr);
++ addr += ws_inc;
++ }
+ }
+
+ static inline void flush_dcache_line_indexed(unsigned long addr)
+ {
+- cache_op(Index_Writeback_Inv_D, addr);
++ unsigned int way;
++ unsigned long ws_inc = 1UL << current_cpu_data.dcache.waybit;
++
++ for (way = 0; way < current_cpu_data.dcache.ways; way++) {
++ BCM4710_DUMMY_RREG();
++ cache_op(Index_Writeback_Inv_D, addr);
++ addr += ws_inc;
++ }
+ }
+
+ static inline void flush_scache_line_indexed(unsigned long addr)
+@@ -47,6 +72,7 @@
+
+ static inline void flush_dcache_line(unsigned long addr)
+ {
++ BCM4710_DUMMY_RREG();
+ cache_op(Hit_Writeback_Inv_D, addr);
+ }
+
+@@ -91,6 +117,7 @@
+ */
+ static inline void protected_writeback_dcache_line(unsigned long addr)
+ {
++ BCM4710_DUMMY_RREG();
+ __asm__ __volatile__(
+ ".set noreorder\n\t"
+ ".set mips3\n"
+@@ -138,6 +165,62 @@
+ : "r" (base), \
+ "i" (op));
+
++#define cache_unroll(base,op) \
++ __asm__ __volatile__(" \
++ .set noreorder; \
++ .set mips3; \
++ cache %1, (%0); \
++ .set mips0; \
++ .set reorder" \
++ : \
++ : "r" (base), \
++ "i" (op));
++
++
++static inline void blast_dcache(void)
++{
++ unsigned long start = KSEG0;
++ unsigned long dcache_size = current_cpu_data.dcache.waysize * current_cpu_data.dcache.ways;
++ unsigned long end = (start + dcache_size);
++
++ while(start < end) {
++ BCM4710_DUMMY_RREG();
++ cache_unroll(start,Index_Writeback_Inv_D);
++ start += current_cpu_data.dcache.linesz;
++ }
++}
++
++static inline void blast_dcache_page(unsigned long page)
++{
++ unsigned long start = page;
++ unsigned long end = start + PAGE_SIZE;
++
++ BCM4710_FILL_TLB(start);
++ do {
++ BCM4710_DUMMY_RREG();
++ cache_unroll(start,Hit_Writeback_Inv_D);
++ start += current_cpu_data.dcache.linesz;
++ } while (start < end);
++}
++
++static inline void blast_dcache_page_indexed(unsigned long page)
++{
++ unsigned long start = page;
++ unsigned long end = start + PAGE_SIZE;
++ unsigned long ws_inc = 1UL << current_cpu_data.dcache.waybit;
++ unsigned long ws_end = current_cpu_data.dcache.ways <<
++ current_cpu_data.dcache.waybit;
++ unsigned long ws, addr;
++
++ for (ws = 0; ws < ws_end; ws += ws_inc) {
++ start = page + ws;
++ for (addr = start; addr < end; addr += current_cpu_data.dcache.linesz) {
++ BCM4710_DUMMY_RREG();
++ cache_unroll(addr,Index_Writeback_Inv_D);
++ }
++ }
++}
++
+ static inline void blast_dcache16(void)
+ {
+ unsigned long start = KSEG0;
+@@ -148,8 +231,9 @@
+ unsigned long ws, addr;
+
+ for (ws = 0; ws < ws_end; ws += ws_inc)
+- for (addr = start; addr < end; addr += 0x200)
++ for (addr = start; addr < end; addr += 0x200) {
+ cache16_unroll32(addr|ws,Index_Writeback_Inv_D);
++ }
+ }
+
+ static inline void blast_dcache16_page(unsigned long page)
+@@ -173,8 +257,9 @@
+ unsigned long ws, addr;
+
+ for (ws = 0; ws < ws_end; ws += ws_inc)
+- for (addr = start; addr < end; addr += 0x200)
++ for (addr = start; addr < end; addr += 0x200) {
+ cache16_unroll32(addr|ws,Index_Writeback_Inv_D);
++ }
+ }
+
+ static inline void blast_icache16(void)
+@@ -196,6 +281,7 @@
+ unsigned long start = page;
+ unsigned long end = start + PAGE_SIZE;
+
++ BCM4710_FILL_TLB(start);
+ do {
+ cache16_unroll32(start,Hit_Invalidate_I);
+ start += 0x200;
+@@ -281,6 +367,7 @@
+ : "r" (base), \
+ "i" (op));
+
++
+ static inline void blast_dcache32(void)
+ {
+ unsigned long start = KSEG0;
+@@ -291,8 +378,9 @@
+ unsigned long ws, addr;
+
+ for (ws = 0; ws < ws_end; ws += ws_inc)
+- for (addr = start; addr < end; addr += 0x400)
++ for (addr = start; addr < end; addr += 0x400) {
+ cache32_unroll32(addr|ws,Index_Writeback_Inv_D);
++ }
+ }
+
+ static inline void blast_dcache32_page(unsigned long page)
+@@ -316,8 +404,9 @@
+ unsigned long ws, addr;
+
+ for (ws = 0; ws < ws_end; ws += ws_inc)
+- for (addr = start; addr < end; addr += 0x400)
++ for (addr = start; addr < end; addr += 0x400) {
+ cache32_unroll32(addr|ws,Index_Writeback_Inv_D);
++ }
+ }
+
+ static inline void blast_icache32(void)
+@@ -339,6 +428,7 @@
+ unsigned long start = page;
+ unsigned long end = start + PAGE_SIZE;
+
++ BCM4710_FILL_TLB(start);
+ do {
+ cache32_unroll32(start,Hit_Invalidate_I);
+ start += 0x400;
+@@ -443,6 +533,7 @@
+ unsigned long start = page;
+ unsigned long end = start + PAGE_SIZE;
+
++ BCM4710_FILL_TLB(start);
+ do {
+ cache64_unroll32(start,Hit_Invalidate_I);
+ start += 0x800;
+@@ -567,4 +658,17 @@
+ cache128_unroll32(addr|ws,Index_Writeback_Inv_SD);
+ }
+
++extern inline void fill_icache_line(unsigned long addr)
++{
++ __asm__ __volatile__(
++ ".set noreorder\n\t"
++ ".set mips3\n\t"
++ "cache %1, (%0)\n\t"
++ ".set mips0\n\t"
++ ".set reorder"
++ :
++ : "r" (addr),
++ "i" (Fill));
++}
++
+ #endif /* __ASM_R4KCACHE_H */
+diff -Nur linux-2.4.32/include/asm-mips/reg.h linux-2.4.32.patched/include/asm-mips/reg.h
+--- linux-2.4.32/include/asm-mips/reg.h 2002-08-03 02:39:45.000000000 +0200
++++ linux-2.4.32.patched/include/asm-mips/reg.h 2006-03-13 18:55:54.000000000 +0100
+@@ -45,6 +45,9 @@
+ /*
+ * k0/k1 unsaved
+ */
++#define EF_REG26 32
++#define EF_REG27 33
++
+ #define EF_REG28 34
+ #define EF_REG29 35
+ #define EF_REG30 36
+@@ -60,6 +63,7 @@
+ #define EF_CP0_BADVADDR 41
+ #define EF_CP0_STATUS 42
+ #define EF_CP0_CAUSE 43
++#define EF_UNUSED0 44
+
+ #define EF_SIZE 180 /* size in bytes */
+
+diff -Nur linux-2.4.32/include/asm-mips/serial.h linux-2.4.32.patched/include/asm-mips/serial.h
+--- linux-2.4.32/include/asm-mips/serial.h 2005-01-19 15:10:12.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/serial.h 2006-03-13 18:55:59.000000000 +0100
+@@ -223,6 +223,13 @@
+ #define TXX927_SERIAL_PORT_DEFNS
+ #endif
+
++#ifdef CONFIG_BCM947XX
++/* reserve 4 ports to be configured at runtime */
++#define BCM947XX_SERIAL_PORT_DEFNS { 0, }, { 0, }, { 0, }, { 0, },
++#else
++#define BCM947XX_SERIAL_PORT_DEFNS
++#endif
++
+ #ifdef CONFIG_HAVE_STD_PC_SERIAL_PORT
+ #define STD_SERIAL_PORT_DEFNS \
+ /* UART CLK PORT IRQ FLAGS */ \
+@@ -470,6 +477,7 @@
+ #define SERIAL_PORT_DFNS \
+ ATLAS_SERIAL_PORT_DEFNS \
+ AU1000_SERIAL_PORT_DEFNS \
++ BCM947XX_SERIAL_PORT_DEFNS \
+ COBALT_SERIAL_PORT_DEFNS \
+ DDB5477_SERIAL_PORT_DEFNS \
+ EV96100_SERIAL_PORT_DEFNS \
+diff -Nur linux-2.4.32/include/asm-mips/sgi/hpc3.h linux-2.4.32.patched/include/asm-mips/sgi/hpc3.h
+--- linux-2.4.32/include/asm-mips/sgi/hpc3.h 2003-08-25 13:44:44.000000000 +0200
++++ linux-2.4.32.patched/include/asm-mips/sgi/hpc3.h 2006-03-13 18:55:54.000000000 +0100
+@@ -128,26 +128,26 @@
+ volatile u32 rx_gfptr; /* current GIO fifo ptr */
+ volatile u32 rx_dfptr; /* current device fifo ptr */
+ u32 _unused1; /* padding */
+- volatile u32 rx_reset; /* reset register */
+-#define HPC3_ERXRST_CRESET 0x1 /* Reset dma channel and external controller */
+-#define HPC3_ERXRST_CLRIRQ 0x2 /* Clear channel interrupt */
+-#define HPC3_ERXRST_LBACK 0x4 /* Enable diagnostic loopback mode of Seeq8003 */
+-
+- volatile u32 rx_dconfig; /* DMA configuration register */
+-#define HPC3_ERXDCFG_D1 0x0000f /* Cycles to spend in D1 state for PIO */
+-#define HPC3_ERXDCFG_D2 0x000f0 /* Cycles to spend in D2 state for PIO */
+-#define HPC3_ERXDCFG_D3 0x00f00 /* Cycles to spend in D3 state for PIO */
+-#define HPC3_ERXDCFG_WCTRL 0x01000 /* Enable writes of desc into ex ctrl port */
+-#define HPC3_ERXDCFG_FRXDC 0x02000 /* Clear eop stat bits upon rxdc, hw seeq fix */
+-#define HPC3_ERXDCFG_FEOP 0x04000 /* Bad packet marker timeout enable */
+-#define HPC3_ERXDCFG_FIRQ 0x08000 /* Another bad packet timeout enable */
+-#define HPC3_ERXDCFG_PTO 0x30000 /* Programmed timeout value for above two */
+-
+- volatile u32 rx_pconfig; /* PIO configuration register */
+-#define HPC3_ERXPCFG_P1 0x000f /* Cycles to spend in P1 state for PIO */
+-#define HPC3_ERXPCFG_P2 0x00f0 /* Cycles to spend in P2 state for PIO */
+-#define HPC3_ERXPCFG_P3 0x0f00 /* Cycles to spend in P3 state for PIO */
+-#define HPC3_ERXPCFG_TST 0x1000 /* Diagnistic ram test feature bit */
++ volatile u32 reset; /* reset register */
++#define HPC3_ERST_CRESET 0x1 /* Reset dma channel and external controller */
++#define HPC3_ERST_CLRIRQ 0x2 /* Clear channel interrupt */
++#define HPC3_ERST_LBACK 0x4 /* Enable diagnostic loopback mode of Seeq8003 */
++
++ volatile u32 dconfig; /* DMA configuration register */
++#define HPC3_EDCFG_D1 0x0000f /* Cycles to spend in D1 state for PIO */
++#define HPC3_EDCFG_D2 0x000f0 /* Cycles to spend in D2 state for PIO */
++#define HPC3_EDCFG_D3 0x00f00 /* Cycles to spend in D3 state for PIO */
++#define HPC3_EDCFG_WCTRL 0x01000 /* Enable writes of desc into ex ctrl port */
++#define HPC3_EDCFG_FRXDC 0x02000 /* Clear eop stat bits upon rxdc, hw seeq fix */
++#define HPC3_EDCFG_FEOP 0x04000 /* Bad packet marker timeout enable */
++#define HPC3_EDCFG_FIRQ 0x08000 /* Another bad packet timeout enable */
++#define HPC3_EDCFG_PTO 0x30000 /* Programmed timeout value for above two */
++
++ volatile u32 pconfig; /* PIO configuration register */
++#define HPC3_EPCFG_P1 0x000f /* Cycles to spend in P1 state for PIO */
++#define HPC3_EPCFG_P2 0x00f0 /* Cycles to spend in P2 state for PIO */
++#define HPC3_EPCFG_P3 0x0f00 /* Cycles to spend in P3 state for PIO */
++#define HPC3_EPCFG_TST 0x1000 /* Diagnistic ram test feature bit */
+
+ u32 _unused2[0x1000/4 - 8]; /* padding */
+
+@@ -221,7 +221,7 @@
+ #define HPC3_BESTAT_PIDMASK 0x3f700 /* DMA channel parity identifier */
+
+ u32 _unused1[0x14000/4 - 5]; /* padding */
+-
++
+ /* Now direct PIO per-HPC3 peripheral access to external regs. */
+ volatile u32 scsi0_ext[256]; /* SCSI channel 0 external regs */
+ u32 _unused2[0x7c00/4];
+@@ -304,7 +304,7 @@
+ volatile u32 bbram[8192-50-14]; /* Battery backed ram */
+ };
+
+-/*
++/*
+ * It is possible to have two HPC3's within the address space on
+ * one machine, though only having one is more likely on an Indy.
+ */
+diff -Nur linux-2.4.32/include/asm-mips/signal.h linux-2.4.32.patched/include/asm-mips/signal.h
+--- linux-2.4.32/include/asm-mips/signal.h 2003-08-25 13:44:44.000000000 +0200
++++ linux-2.4.32.patched/include/asm-mips/signal.h 2006-03-13 18:57:11.000000000 +0100
+@@ -111,6 +111,12 @@
+ #define SA_SAMPLE_RANDOM SA_RESTART
+ #define SA_SHIRQ 0x02000000
+
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
++#endif
++
+ #endif /* __KERNEL__ */
+
+ #define SIG_BLOCK 1 /* for blocking signals */
+diff -Nur linux-2.4.32/include/asm-mips/stackframe.h linux-2.4.32.patched/include/asm-mips/stackframe.h
+--- linux-2.4.32/include/asm-mips/stackframe.h 2002-11-29 00:53:15.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/stackframe.h 2006-03-13 18:55:59.000000000 +0100
+@@ -209,6 +209,20 @@
+
+ #endif
+
++#if defined(CONFIG_BCM4710) || defined(CONFIG_BCM4704)
++
++#undef RESTORE_SP_AND_RET
++#define RESTORE_SP_AND_RET \
++ lw sp, PT_R29(sp); \
++ .set mips3; \
++ nop; \
++ nop; \
++ eret; \
++ .set mips0
++
++#endif
++
++
+ #define RESTORE_SP \
+ lw sp, PT_R29(sp); \
+
+diff -Nur linux-2.4.32/include/asm-mips/timex.h linux-2.4.32.patched/include/asm-mips/timex.h
+--- linux-2.4.32/include/asm-mips/timex.h 2003-08-25 13:44:44.000000000 +0200
++++ linux-2.4.32.patched/include/asm-mips/timex.h 2006-03-13 18:57:11.000000000 +0100
+@@ -31,6 +31,19 @@
+ return read_c0_count();
+ }
+
++extern __u32 get_htscl(void);
++extern __u64 get_tscll(void);
++
++#define rdtsc(low, high) \
++ high = get_htscl(); \
++ low = read_c0_count();
++
++#define rdtscl(low) \
++ low = read_c0_count();
++
++#define rdtscll(val) \
++ val = get_tscll();
++
+ #define vxtime_lock() do {} while (0)
+ #define vxtime_unlock() do {} while (0)
+
+diff -Nur linux-2.4.32/include/asm-mips/tx4927/tx4927.h linux-2.4.32.patched/include/asm-mips/tx4927/tx4927.h
+--- linux-2.4.32/include/asm-mips/tx4927/tx4927.h 2003-08-25 13:44:44.000000000 +0200
++++ linux-2.4.32.patched/include/asm-mips/tx4927/tx4927.h 2006-03-13 18:55:54.000000000 +0100
+@@ -88,8 +88,8 @@
+
+
+ /* TX4927 Configuration registers (64-bit registers) */
+-#define TX4927_CONFIG_BASE 0xe300
+-#define TX4927_CONFIG_CCFG 0xe300
++#define TX4927_CONFIG_BASE 0xe000
++#define TX4927_CONFIG_CCFG 0xe000
+ #define TX4927_CONFIG_CCFG_RESERVED_42_63 BM_63_42
+ #define TX4927_CONFIG_CCFG_WDRST BM_41_41
+ #define TX4927_CONFIG_CCFG_WDREXEN BM_40_40
+@@ -124,14 +124,14 @@
+ #define TX4927_CONFIG_CCFG_ENDIAN BM_02_02
+ #define TX4927_CONFIG_CCFG_ARMODE BM_01_01
+ #define TX4927_CONFIG_CCFG_ACEHOLD BM_00_00
+-#define TX4927_CONFIG_REVID 0xe308
++#define TX4927_CONFIG_REVID 0xe008
+ #define TX4927_CONFIG_REVID_RESERVED_32_63 BM_32_63
+ #define TX4927_CONFIG_REVID_PCODE BM_16_31
+ #define TX4927_CONFIG_REVID_MJERREV BM_12_15
+ #define TX4927_CONFIG_REVID_MINEREV BM_08_11
+ #define TX4927_CONFIG_REVID_MJREV BM_04_07
+ #define TX4927_CONFIG_REVID_MINREV BM_00_03
+-#define TX4927_CONFIG_PCFG 0xe310
++#define TX4927_CONFIG_PCFG 0xe010
+ #define TX4927_CONFIG_PCFG_RESERVED_57_63 BM_57_63
+ #define TX4927_CONFIG_PCFG_DRVDATA BM_56_56
+ #define TX4927_CONFIG_PCFG_DRVCB BM_55_55
+@@ -197,10 +197,10 @@
+ #define TX4927_CONFIG_PCFG_DMASEL0_SIO1 BM_00_00
+ #define TX4927_CONFIG_PCFG_DMASEL0_ACLC0 BM_01_01
+ #define TX4927_CONFIG_PCFG_DMASEL0_ACLC2 BM_00_01
+-#define TX4927_CONFIG_TOEA 0xe318
++#define TX4927_CONFIG_TOEA 0xe018
+ #define TX4927_CONFIG_TOEA_RESERVED_36_63 BM_36_63
+ #define TX4927_CONFIG_TOEA_TOEA BM_00_35
+-#define TX4927_CONFIG_CLKCTR 0xe320
++#define TX4927_CONFIG_CLKCTR 0xe020
+ #define TX4927_CONFIG_CLKCTR_RESERVED_26_63 BM_26_63
+ #define TX4927_CONFIG_CLKCTR_ACLCKD BM_25_25
+ #define TX4927_CONFIG_CLKCTR_PIOCKD BM_24_24
+@@ -223,7 +223,7 @@
+ #define TX4927_CONFIG_CLKCTR_TM2RST BM_02_02
+ #define TX4927_CONFIG_CLKCTR_SIO0RST BM_01_01
+ #define TX4927_CONFIG_CLKCTR_SIO1RST BM_00_00
+-#define TX4927_CONFIG_GARBC 0xe330
++#define TX4927_CONFIG_GARBC 0xe030
+ #define TX4927_CONFIG_GARBC_RESERVED_10_63 BM_10_63
+ #define TX4927_CONFIG_GARBC_SET_09 BM_09_09
+ #define TX4927_CONFIG_GARBC_ARBMD BM_08_08
+@@ -243,7 +243,7 @@
+ #define TX4927_CONFIG_GARBC_PRIORITY_H3_PDMAC BM_00_00
+ #define TX4927_CONFIG_GARBC_PRIORITY_H3_DMAC BM_01_01
+ #define TX4927_CONFIG_GARBC_PRIORITY_H3_BAD_VALUE BM_00_01
+-#define TX4927_CONFIG_RAMP 0xe348
++#define TX4927_CONFIG_RAMP 0xe048
+ #define TX4927_CONFIG_RAMP_RESERVED_20_63 BM_20_63
+ #define TX4927_CONFIG_RAMP_RAMP BM_00_19
+ #define TX4927_CONFIG_LIMIT 0xefff
+@@ -456,7 +456,7 @@
+ #define TX4927_ACLC_ACINTSTS 0xf710
+ #define TX4927_ACLC_ACINTMSTS 0xf714
+ #define TX4927_ACLC_ACINTEN 0xf718
+-#define TX4927_ACLC_ACINTDIS 0xfR71c
++#define TX4927_ACLC_ACINTDIS 0xf71c
+ #define TX4927_ACLC_ACSEMAPH 0xf720
+ #define TX4927_ACLC_ACGPIDAT 0xf740
+ #define TX4927_ACLC_ACGPODAT 0xf744
+diff -Nur linux-2.4.32/include/asm-mips/uaccess.h linux-2.4.32.patched/include/asm-mips/uaccess.h
+--- linux-2.4.32/include/asm-mips/uaccess.h 2005-01-19 15:10:12.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/uaccess.h 2006-03-13 18:57:11.000000000 +0100
+@@ -149,7 +149,7 @@
+ * Returns zero on success, or -EFAULT on error.
+ */
+ #define put_user(x,ptr) \
+- __put_user_check((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
++ __put_user_check((x),(ptr),sizeof(*(ptr)))
+
+ /*
+ * get_user: - Get a simple variable from user space.
+@@ -169,7 +169,7 @@
+ * On error, the variable @x is set to zero.
+ */
+ #define get_user(x,ptr) \
+- __get_user_check((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
++ __get_user_check((x),(ptr),sizeof(*(ptr)))
+
+ /*
+ * __put_user: - Write a simple value into user space, with less checking.
+@@ -191,7 +191,7 @@
+ * Returns zero on success, or -EFAULT on error.
+ */
+ #define __put_user(x,ptr) \
+- __put_user_nocheck((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
++ __put_user_nocheck((x),(ptr),sizeof(*(ptr)))
+
+ /*
+ * __get_user: - Get a simple variable from user space, with less checking.
+@@ -214,7 +214,7 @@
+ * On error, the variable @x is set to zero.
+ */
+ #define __get_user(x,ptr) \
+- __get_user_nocheck((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
++ __get_user_nocheck((x),(ptr),sizeof(*(ptr)))
+
+ struct __large_struct { unsigned long buf[100]; };
+ #define __m(x) (*(struct __large_struct *)(x))
+@@ -232,7 +232,7 @@
+ #define __get_user_nocheck(x,ptr,size) \
+ ({ \
+ long __gu_err = 0; \
+- __typeof(*(ptr)) __gu_val = 0; \
++ __typeof(*(ptr)) __gu_val = (__typeof(*(ptr))) 0; \
+ long __gu_addr; \
+ __gu_addr = (long) (ptr); \
+ switch (size) { \
+diff -Nur linux-2.4.32/include/asm-mips/unistd.h linux-2.4.32.patched/include/asm-mips/unistd.h
+--- linux-2.4.32/include/asm-mips/unistd.h 2005-01-19 15:10:12.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips/unistd.h 2006-03-13 18:55:54.000000000 +0100
+@@ -760,7 +760,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ /*
+@@ -788,7 +788,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #define _syscall2(type,name,atype,a,btype,b) \
+@@ -813,7 +813,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #define _syscall3(type,name,atype,a,btype,b,ctype,c) \
+@@ -839,7 +839,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
+@@ -865,7 +865,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #if (_MIPS_SIM == _MIPS_SIM_ABI32)
+@@ -902,7 +902,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \
+@@ -935,7 +935,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #endif /* (_MIPS_SIM == _MIPS_SIM_ABI32) */
+@@ -966,7 +966,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \
+@@ -995,7 +995,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #endif /* (_MIPS_SIM == _MIPS_SIM_NABI32) || (_MIPS_SIM == _MIPS_SIM_ABI64) */
+diff -Nur linux-2.4.32/include/asm-mips64/checksum.h linux-2.4.32.patched/include/asm-mips64/checksum.h
+--- linux-2.4.32/include/asm-mips64/checksum.h 2005-01-19 15:10:12.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips64/checksum.h 2006-03-13 18:55:54.000000000 +0100
+@@ -144,7 +144,7 @@
+ "daddu\t%0, %4\n\t"
+ "dsll32\t$1, %0, 0\n\t"
+ "daddu\t%0, $1\n\t"
+- "dsrl32\t%0, %0, 0\n\t"
++ "dsra32\t%0, %0, 0\n\t"
+ ".set\tat"
+ : "=&r" (sum)
+ : "0" (daddr), "r"(saddr),
+diff -Nur linux-2.4.32/include/asm-mips64/elf.h linux-2.4.32.patched/include/asm-mips64/elf.h
+--- linux-2.4.32/include/asm-mips64/elf.h 2004-02-18 14:36:32.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips64/elf.h 2006-03-13 18:55:54.000000000 +0100
+@@ -64,9 +64,10 @@
+ #define USE_ELF_CORE_DUMP
+ #define ELF_EXEC_PAGESIZE PAGE_SIZE
+
+-#define ELF_CORE_COPY_REGS(_dest,_regs) \
+- memcpy((char *) &_dest, (char *) _regs, \
+- sizeof(struct pt_regs));
++extern void dump_regs(elf_greg_t *, struct pt_regs *regs);
++
++#define ELF_CORE_COPY_REGS(elf_regs, regs) \
++ dump_regs((elf_greg_t *)&(elf_regs), regs);
+
+ /* This yields a mask that user programs can use to figure out what
+ instruction set this cpu supports. This could be done in userspace,
+diff -Nur linux-2.4.32/include/asm-mips64/hazards.h linux-2.4.32.patched/include/asm-mips64/hazards.h
+--- linux-2.4.32/include/asm-mips64/hazards.h 2004-02-18 14:36:32.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips64/hazards.h 2006-03-13 18:55:54.000000000 +0100
+@@ -3,7 +3,7 @@
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+- * Copyright (C) 2003 Ralf Baechle
++ * Copyright (C) 2003, 2004 Ralf Baechle
+ */
+ #ifndef _ASM_HAZARDS_H
+ #define _ASM_HAZARDS_H
+@@ -12,37 +12,200 @@
+
+ #ifdef __ASSEMBLY__
+
++ .macro _ssnop
++ sll $0, $0, 1
++ .endm
++
+ /*
+ * RM9000 hazards. When the JTLB is updated by tlbwi or tlbwr, a subsequent
+ * use of the JTLB for instructions should not occur for 4 cpu cycles and use
+ * for data translations should not occur for 3 cpu cycles.
+ */
+ #ifdef CONFIG_CPU_RM9000
+-#define rm9000_tlb_hazard \
++
++#define mtc0_tlbw_hazard \
++ .set push; \
+ .set mips32; \
+- ssnop; ssnop; ssnop; ssnop; \
+- .set mips0
++ _ssnop; _ssnop; _ssnop; _ssnop; \
++ .set pop
++
++#define tlbw_eret_hazard \
++ .set push; \
++ .set mips32; \
++ _ssnop; _ssnop; _ssnop; _ssnop; \
++ .set pop
++
+ #else
+-#define rm9000_tlb_hazard
++
++/*
++ * The taken branch will result in a two cycle penalty for the two killed
++ * instructions on R4000 / R4400. Other processors only have a single cycle
++ * hazard so this is nice trick to have an optimal code for a range of
++ * processors.
++ */
++#define mtc0_tlbw_hazard \
++ b . + 8
++#define tlbw_eret_hazard \
++ nop
+ #endif
+
++/*
++ * mtc0->mfc0 hazard
++ * The 24K has a 2 cycle mtc0/mfc0 execution hazard.
++ * It is a MIPS32R2 processor so ehb will clear the hazard.
++ */
++
++#ifdef CONFIG_CPU_MIPSR2
++/*
++ * Use a macro for ehb unless explicit support for MIPSR2 is enabled
++ */
++ .macro ehb
++ sll $0, $0, 3
++ .endm
++
++#define irq_enable_hazard \
++ ehb # irq_enable_hazard
++
++#define irq_disable_hazard \
++ ehb # irq_disable_hazard
++
++#elif defined(CONFIG_CPU_R10000) || defined(CONFIG_CPU_RM9000)
++
++/*
++ * R10000 rocks - all hazards handled in hardware, so this becomes a nobrainer.
++ */
++
++#define irq_enable_hazard
++
++#define irq_disable_hazard
++
+ #else
+
+ /*
++ * Classic MIPS needs 1 - 3 nops or ssnops
++ */
++#define irq_enable_hazard
++#define irq_disable_hazard \
++ _ssnop; _ssnop; _ssnop
++
++#endif
++
++#else /* __ASSEMBLY__ */
++
++/*
+ * RM9000 hazards. When the JTLB is updated by tlbwi or tlbwr, a subsequent
+ * use of the JTLB for instructions should not occur for 4 cpu cycles and use
+ * for data translations should not occur for 3 cpu cycles.
+ */
+ #ifdef CONFIG_CPU_RM9000
+-#define rm9000_tlb_hazard() \
++
++#define mtc0_tlbw_hazard() \
++ __asm__ __volatile__( \
++ ".set\tmips32\n\t" \
++ "_ssnop; _ssnop; _ssnop; _ssnop\n\t" \
++ ".set\tmips0")
++
++#define tlbw_use_hazard() \
+ __asm__ __volatile__( \
+ ".set\tmips32\n\t" \
+- "ssnop; ssnop; ssnop; ssnop\n\t" \
++ "_ssnop; _ssnop; _ssnop; _ssnop\n\t" \
+ ".set\tmips0")
+ #else
+-#define rm9000_tlb_hazard() do { } while (0)
++
++/*
++ * Overkill warning ...
++ */
++#define mtc0_tlbw_hazard() \
++ __asm__ __volatile__( \
++ ".set noreorder\n\t" \
++ "nop; nop; nop; nop; nop; nop;\n\t" \
++ ".set reorder\n\t")
++
++#define tlbw_use_hazard() \
++ __asm__ __volatile__( \
++ ".set noreorder\n\t" \
++ "nop; nop; nop; nop; nop; nop;\n\t" \
++ ".set reorder\n\t")
++
+ #endif
+
++/*
++ * mtc0->mfc0 hazard
++ * The 24K has a 2 cycle mtc0/mfc0 execution hazard.
++ * It is a MIPS32R2 processor so ehb will clear the hazard.
++ */
++
++#ifdef CONFIG_CPU_MIPSR2
++/*
++ * Use a macro for ehb unless explicit support for MIPSR2 is enabled
++ */
++__asm__(
++ " .macro ehb \n\t"
++ " sll $0, $0, 3 \n\t"
++ " .endm \n\t"
++ " \n\t"
++ " .macro\tirq_enable_hazard \n\t"
++ " ehb \n\t"
++ " .endm \n\t"
++ " \n\t"
++ " .macro\tirq_disable_hazard \n\t"
++ " ehb \n\t"
++ " .endm");
++
++#define irq_enable_hazard() \
++ __asm__ __volatile__( \
++ "ehb\t\t\t\t# irq_enable_hazard")
++
++#define irq_disable_hazard() \
++ __asm__ __volatile__( \
++ "ehb\t\t\t\t# irq_disable_hazard")
++
++#elif defined(CONFIG_CPU_R10000)
++
++/*
++ * R10000 rocks - all hazards handled in hardware, so this becomes a nobrainer.
++ */
++
++__asm__(
++ " .macro\tirq_enable_hazard \n\t"
++ " .endm \n\t"
++ " \n\t"
++ " .macro\tirq_disable_hazard \n\t"
++ " .endm");
++
++#define irq_enable_hazard() do { } while (0)
++#define irq_disable_hazard() do { } while (0)
++
++#else
++
++/*
++ * Default for classic MIPS processors. Assume worst case hazards but don't
++ * care about the irq_enable_hazard - sooner or later the hardware will
++ * enable it and we don't care when exactly.
++ */
++
++__asm__(
++ " .macro _ssnop \n\t"
++ " sll $0, $2, 1 \n\t"
++ " .endm \n\t"
++ " \n\t"
++ " # \n\t"
++ " # There is a hazard but we do not care \n\t"
++ " # \n\t"
++ " .macro\tirq_enable_hazard \n\t"
++ " .endm \n\t"
++ " \n\t"
++ " .macro\tirq_disable_hazard \n\t"
++ " _ssnop; _ssnop; _ssnop \n\t"
++ " .endm");
++
++#define irq_enable_hazard() do { } while (0)
++#define irq_disable_hazard() \
++ __asm__ __volatile__( \
++ "_ssnop; _ssnop; _ssnop;\t\t# irq_disable_hazard")
++
+ #endif
+
++#endif /* __ASSEMBLY__ */
++
+ #endif /* _ASM_HAZARDS_H */
+diff -Nur linux-2.4.32/include/asm-mips64/ide.h linux-2.4.32.patched/include/asm-mips64/ide.h
+--- linux-2.4.32/include/asm-mips64/ide.h 2003-08-25 13:44:44.000000000 +0200
++++ linux-2.4.32.patched/include/asm-mips64/ide.h 2006-03-13 18:55:54.000000000 +0100
+@@ -32,12 +32,12 @@
+
+ extern struct ide_ops *ide_ops;
+
+-static __inline__ int ide_default_irq(ide_ioreg_t base)
++static inline int ide_default_irq(ide_ioreg_t base)
+ {
+ return ide_ops->ide_default_irq(base);
+ }
+
+-static __inline__ ide_ioreg_t ide_default_io_base(int index)
++static inline ide_ioreg_t ide_default_io_base(int index)
+ {
+ return ide_ops->ide_default_io_base(index);
+ }
+@@ -48,7 +48,7 @@
+ ide_ops->ide_init_hwif_ports(hw, data_port, ctrl_port, irq);
+ }
+
+-static __inline__ void ide_init_default_hwifs(void)
++static inline void ide_init_default_hwifs(void)
+ {
+ #ifndef CONFIG_BLK_DEV_IDEPCI
+ hw_regs_t hw;
+@@ -68,7 +68,89 @@
+ #define ide_ack_intr(hwif) ((hwif)->hw.ack_intr ? (hwif)->hw.ack_intr(hwif) : 1)
+ #endif
+
+-#include <asm-generic/ide_iops.h>
++/* MIPS port and memory-mapped I/O string operations. */
++
++static inline void __ide_flush_dcache_range(unsigned long addr, unsigned long size)
++{
++ if (cpu_has_dc_aliases) {
++ unsigned long end = addr + size;
++ for (; addr < end; addr += PAGE_SIZE)
++ flush_dcache_page(virt_to_page(addr));
++ }
++}
++
++static inline void __ide_insw(unsigned long port, void *addr,
++ unsigned int count)
++{
++ insw(port, addr, count);
++ __ide_flush_dcache_range((unsigned long)addr, count * 2);
++}
++
++static inline void __ide_insl(unsigned long port, void *addr, unsigned int count)
++{
++ insl(port, addr, count);
++ __ide_flush_dcache_range((unsigned long)addr, count * 4);
++}
++
++static inline void __ide_outsw(unsigned long port, const void *addr,
++ unsigned long count)
++{
++ outsw(port, addr, count);
++ __ide_flush_dcache_range((unsigned long)addr, count * 2);
++}
++
++static inline void __ide_outsl(unsigned long port, const void *addr,
++ unsigned long count)
++{
++ outsl(port, addr, count);
++ __ide_flush_dcache_range((unsigned long)addr, count * 4);
++}
++
++static inline void __ide_mm_insw(unsigned long port, void *addr, u32 count)
++{
++ unsigned long start = (unsigned long) addr;
++
++ while (count--) {
++ *(u16 *)addr = readw(port);
++ addr += 2;
++ }
++ __ide_flush_dcache_range(start, count * 2);
++}
++
++static inline void __ide_mm_insl(unsigned long port, void *addr, u32 count)
++{
++ unsigned long start = (unsigned long) addr;
++
++ while (count--) {
++ *(u32 *)addr = readl(port);
++ addr += 4;
++ }
++ __ide_flush_dcache_range(start, count * 4);
++}
++
++static inline void __ide_mm_outsw(unsigned long port, const void *addr,
++ u32 count)
++{
++ unsigned long start = (unsigned long) addr;
++
++ while (count--) {
++ writew(*(u16 *)addr, port);
++ addr += 2;
++ }
++ __ide_flush_dcache_range(start, count * 2);
++}
++
++static inline void __ide_mm_outsl(unsigned long port, const void *addr,
++ u32 count)
++{
++ unsigned long start = (unsigned long) addr;
++
++ while (count--) {
++ writel(*(u32 *)addr, port);
++ addr += 4;
++ }
++ __ide_flush_dcache_range(start, count * 4);
++}
+
+ #endif /* __KERNEL__ */
+
+diff -Nur linux-2.4.32/include/asm-mips64/io.h linux-2.4.32.patched/include/asm-mips64/io.h
+--- linux-2.4.32/include/asm-mips64/io.h 2004-02-18 14:36:32.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips64/io.h 2006-03-13 18:55:54.000000000 +0100
+@@ -414,7 +414,8 @@
+ return __ioswab32(__val);
+ }
+
+-static inline void __outsb(unsigned long port, void *addr, unsigned int count)
++static inline void __outsb(unsigned long port, const void *addr,
++ unsigned int count)
+ {
+ while (count--) {
+ outb(*(u8 *)addr, port);
+@@ -430,7 +431,8 @@
+ }
+ }
+
+-static inline void __outsw(unsigned long port, void *addr, unsigned int count)
++static inline void __outsw(unsigned long port, const void *addr,
++ unsigned int count)
+ {
+ while (count--) {
+ outw(*(u16 *)addr, port);
+@@ -446,7 +448,8 @@
+ }
+ }
+
+-static inline void __outsl(unsigned long port, void *addr, unsigned int count)
++static inline void __outsl(unsigned long port, const void *addr,
++ unsigned int count)
+ {
+ while (count--) {
+ outl(*(u32 *)addr, port);
+diff -Nur linux-2.4.32/include/asm-mips64/mipsregs.h linux-2.4.32.patched/include/asm-mips64/mipsregs.h
+--- linux-2.4.32/include/asm-mips64/mipsregs.h 2005-01-19 15:10:12.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips64/mipsregs.h 2006-03-13 18:55:54.000000000 +0100
+@@ -757,10 +757,18 @@
+ #define read_c0_config1() __read_32bit_c0_register($16, 1)
+ #define read_c0_config2() __read_32bit_c0_register($16, 2)
+ #define read_c0_config3() __read_32bit_c0_register($16, 3)
++#define read_c0_config4() __read_32bit_c0_register($16, 4)
++#define read_c0_config5() __read_32bit_c0_register($16, 5)
++#define read_c0_config6() __read_32bit_c0_register($16, 6)
++#define read_c0_config7() __read_32bit_c0_register($16, 7)
+ #define write_c0_config(val) __write_32bit_c0_register($16, 0, val)
+ #define write_c0_config1(val) __write_32bit_c0_register($16, 1, val)
+ #define write_c0_config2(val) __write_32bit_c0_register($16, 2, val)
+ #define write_c0_config3(val) __write_32bit_c0_register($16, 3, val)
++#define write_c0_config4(val) __write_32bit_c0_register($16, 4, val)
++#define write_c0_config5(val) __write_32bit_c0_register($16, 5, val)
++#define write_c0_config6(val) __write_32bit_c0_register($16, 6, val)
++#define write_c0_config7(val) __write_32bit_c0_register($16, 7, val)
+
+ /*
+ * The WatchLo register. There may be upto 8 of them.
+@@ -856,42 +864,34 @@
+ */
+ static inline void tlb_probe(void)
+ {
+- rm9000_tlb_hazard();
+ __asm__ __volatile__(
+ ".set noreorder\n\t"
+ "tlbp\n\t"
+ ".set reorder");
+- rm9000_tlb_hazard();
+ }
+
+ static inline void tlb_read(void)
+ {
+- rm9000_tlb_hazard();
+ __asm__ __volatile__(
+ ".set noreorder\n\t"
+ "tlbr\n\t"
+ ".set reorder");
+- rm9000_tlb_hazard();
+ }
+
+ static inline void tlb_write_indexed(void)
+ {
+- rm9000_tlb_hazard();
+ __asm__ __volatile__(
+ ".set noreorder\n\t"
+ "tlbwi\n\t"
+ ".set reorder");
+- rm9000_tlb_hazard();
+ }
+
+ static inline void tlb_write_random(void)
+ {
+- rm9000_tlb_hazard();
+ __asm__ __volatile__(
+ ".set noreorder\n\t"
+ "tlbwr\n\t"
+ ".set reorder");
+- rm9000_tlb_hazard();
+ }
+
+ /*
+diff -Nur linux-2.4.32/include/asm-mips64/ptrace.h linux-2.4.32.patched/include/asm-mips64/ptrace.h
+--- linux-2.4.32/include/asm-mips64/ptrace.h 2004-02-18 14:36:32.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips64/ptrace.h 2006-03-13 18:55:56.000000000 +0100
+@@ -5,6 +5,7 @@
+ *
+ * Copyright (C) 1994, 95, 96, 97, 98, 99, 2000 by Ralf Baechle
+ * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
++ * Copyright (C) 2004 Maciej W. Rozycki
+ */
+ #ifndef _ASM_PTRACE_H
+ #define _ASM_PTRACE_H
+@@ -61,12 +62,10 @@
+ "sd\t$22,"__str(PT_R22)"($29)\n\t" \
+ "sd\t$23,"__str(PT_R23)"($29)\n\t" \
+ "sd\t$30,"__str(PT_R30)"($29)\n\t" \
++ "j\t_" #symbol "\n\t" \
+ ".end\t" #symbol "\n\t" \
+ ".size\t" #symbol",. - " #symbol)
+
+-/* Used in declaration of save_static functions. */
+-#define static_unused static __attribute__((unused))
+-
+ #define abi64_no_regargs \
+ unsigned long __dummy0, \
+ unsigned long __dummy1, \
+diff -Nur linux-2.4.32/include/asm-mips64/reg.h linux-2.4.32.patched/include/asm-mips64/reg.h
+--- linux-2.4.32/include/asm-mips64/reg.h 2003-08-25 13:44:44.000000000 +0200
++++ linux-2.4.32.patched/include/asm-mips64/reg.h 2006-03-13 18:55:54.000000000 +0100
+@@ -46,6 +46,9 @@
+ /*
+ * k0/k1 unsaved
+ */
++#define EF_REG26 26
++#define EF_REG27 27
++
+ #define EF_REG28 28
+ #define EF_REG29 29
+ #define EF_REG30 30
+diff -Nur linux-2.4.32/include/asm-mips64/sgi/hpc3.h linux-2.4.32.patched/include/asm-mips64/sgi/hpc3.h
+--- linux-2.4.32/include/asm-mips64/sgi/hpc3.h 2003-08-25 13:44:44.000000000 +0200
++++ linux-2.4.32.patched/include/asm-mips64/sgi/hpc3.h 2006-03-13 18:55:54.000000000 +0100
+@@ -128,26 +128,26 @@
+ volatile u32 rx_gfptr; /* current GIO fifo ptr */
+ volatile u32 rx_dfptr; /* current device fifo ptr */
+ u32 _unused1; /* padding */
+- volatile u32 rx_reset; /* reset register */
+-#define HPC3_ERXRST_CRESET 0x1 /* Reset dma channel and external controller */
+-#define HPC3_ERXRST_CLRIRQ 0x2 /* Clear channel interrupt */
+-#define HPC3_ERXRST_LBACK 0x4 /* Enable diagnostic loopback mode of Seeq8003 */
+-
+- volatile u32 rx_dconfig; /* DMA configuration register */
+-#define HPC3_ERXDCFG_D1 0x0000f /* Cycles to spend in D1 state for PIO */
+-#define HPC3_ERXDCFG_D2 0x000f0 /* Cycles to spend in D2 state for PIO */
+-#define HPC3_ERXDCFG_D3 0x00f00 /* Cycles to spend in D3 state for PIO */
+-#define HPC3_ERXDCFG_WCTRL 0x01000 /* Enable writes of desc into ex ctrl port */
+-#define HPC3_ERXDCFG_FRXDC 0x02000 /* Clear eop stat bits upon rxdc, hw seeq fix */
+-#define HPC3_ERXDCFG_FEOP 0x04000 /* Bad packet marker timeout enable */
+-#define HPC3_ERXDCFG_FIRQ 0x08000 /* Another bad packet timeout enable */
+-#define HPC3_ERXDCFG_PTO 0x30000 /* Programmed timeout value for above two */
+-
+- volatile u32 rx_pconfig; /* PIO configuration register */
+-#define HPC3_ERXPCFG_P1 0x000f /* Cycles to spend in P1 state for PIO */
+-#define HPC3_ERXPCFG_P2 0x00f0 /* Cycles to spend in P2 state for PIO */
+-#define HPC3_ERXPCFG_P3 0x0f00 /* Cycles to spend in P3 state for PIO */
+-#define HPC3_ERXPCFG_TST 0x1000 /* Diagnistic ram test feature bit */
++ volatile u32 reset; /* reset register */
++#define HPC3_ERST_CRESET 0x1 /* Reset dma channel and external controller */
++#define HPC3_ERST_CLRIRQ 0x2 /* Clear channel interrupt */
++#define HPC3_ERST_LBACK 0x4 /* Enable diagnostic loopback mode of Seeq8003 */
++
++ volatile u32 dconfig; /* DMA configuration register */
++#define HPC3_EDCFG_D1 0x0000f /* Cycles to spend in D1 state for PIO */
++#define HPC3_EDCFG_D2 0x000f0 /* Cycles to spend in D2 state for PIO */
++#define HPC3_EDCFG_D3 0x00f00 /* Cycles to spend in D3 state for PIO */
++#define HPC3_EDCFG_WCTRL 0x01000 /* Enable writes of desc into ex ctrl port */
++#define HPC3_EDCFG_FRXDC 0x02000 /* Clear eop stat bits upon rxdc, hw seeq fix */
++#define HPC3_EDCFG_FEOP 0x04000 /* Bad packet marker timeout enable */
++#define HPC3_EDCFG_FIRQ 0x08000 /* Another bad packet timeout enable */
++#define HPC3_EDCFG_PTO 0x30000 /* Programmed timeout value for above two */
++
++ volatile u32 pconfig; /* PIO configuration register */
++#define HPC3_EPCFG_P1 0x000f /* Cycles to spend in P1 state for PIO */
++#define HPC3_EPCFG_P2 0x00f0 /* Cycles to spend in P2 state for PIO */
++#define HPC3_EPCFG_P3 0x0f00 /* Cycles to spend in P3 state for PIO */
++#define HPC3_EPCFG_TST 0x1000 /* Diagnistic ram test feature bit */
+
+ u32 _unused2[0x1000/4 - 8]; /* padding */
+
+@@ -221,7 +221,7 @@
+ #define HPC3_BESTAT_PIDMASK 0x3f700 /* DMA channel parity identifier */
+
+ u32 _unused1[0x14000/4 - 5]; /* padding */
+-
++
+ /* Now direct PIO per-HPC3 peripheral access to external regs. */
+ volatile u32 scsi0_ext[256]; /* SCSI channel 0 external regs */
+ u32 _unused2[0x7c00/4];
+@@ -304,7 +304,7 @@
+ volatile u32 bbram[8192-50-14]; /* Battery backed ram */
+ };
+
+-/*
++/*
+ * It is possible to have two HPC3's within the address space on
+ * one machine, though only having one is more likely on an Indy.
+ */
+diff -Nur linux-2.4.32/include/asm-mips64/signal.h linux-2.4.32.patched/include/asm-mips64/signal.h
+--- linux-2.4.32/include/asm-mips64/signal.h 2003-08-25 13:44:44.000000000 +0200
++++ linux-2.4.32.patched/include/asm-mips64/signal.h 2006-03-13 18:55:56.000000000 +0100
+@@ -119,6 +119,12 @@
+ #define SA_SAMPLE_RANDOM SA_RESTART
+ #define SA_SHIRQ 0x02000000
+
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
++#endif
++
+ #endif /* __KERNEL__ */
+
+ #define SIG_BLOCK 1 /* for blocking signals */
+diff -Nur linux-2.4.32/include/asm-mips64/sn/nmi.h linux-2.4.32.patched/include/asm-mips64/sn/nmi.h
+--- linux-2.4.32/include/asm-mips64/sn/nmi.h 2002-11-29 00:53:15.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips64/sn/nmi.h 2006-03-13 18:55:54.000000000 +0100
+@@ -8,7 +8,7 @@
+ #ifndef __ASM_SN_NMI_H
+ #define __ASM_SN_NMI_H
+
+-#ident "$Revision: 1.2.4.2 $"
++#ident "$Revision: 1.2.4.1 $"
+
+ #include <asm/sn/addrs.h>
+
+diff -Nur linux-2.4.32/include/asm-mips64/unistd.h linux-2.4.32.patched/include/asm-mips64/unistd.h
+--- linux-2.4.32/include/asm-mips64/unistd.h 2005-01-19 15:10:12.000000000 +0100
++++ linux-2.4.32.patched/include/asm-mips64/unistd.h 2006-03-13 18:55:54.000000000 +0100
+@@ -760,7 +760,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ /*
+@@ -788,7 +788,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #define _syscall2(type,name,atype,a,btype,b) \
+@@ -813,7 +813,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #define _syscall3(type,name,atype,a,btype,b,ctype,c) \
+@@ -839,7 +839,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
+@@ -865,7 +865,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #if (_MIPS_SIM == _MIPS_SIM_ABI32)
+@@ -902,7 +902,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \
+@@ -935,7 +935,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #endif /* (_MIPS_SIM == _MIPS_SIM_ABI32) */
+@@ -966,7 +966,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \
+@@ -995,7 +995,7 @@
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+- return -1; \
++ return (type)-1; \
+ }
+
+ #endif /* (_MIPS_SIM == _MIPS_SIM_NABI32) || (_MIPS_SIM == _MIPS_SIM_ABI64) */
+diff -Nur linux-2.4.32/include/asm-parisc/signal.h linux-2.4.32.patched/include/asm-parisc/signal.h
+--- linux-2.4.32/include/asm-parisc/signal.h 2000-12-05 21:29:39.000000000 +0100
++++ linux-2.4.32.patched/include/asm-parisc/signal.h 2006-03-13 18:55:56.000000000 +0100
+@@ -100,6 +100,12 @@
+ #define SA_SAMPLE_RANDOM SA_RESTART
+ #define SA_SHIRQ 0x04000000
+
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
++#endif
++
+ #endif /* __KERNEL__ */
+
+ #define SIG_BLOCK 0 /* for blocking signals */
+diff -Nur linux-2.4.32/include/asm-ppc/byteorder.h linux-2.4.32.patched/include/asm-ppc/byteorder.h
+--- linux-2.4.32/include/asm-ppc/byteorder.h 2003-06-13 16:51:38.000000000 +0200
++++ linux-2.4.32.patched/include/asm-ppc/byteorder.h 2006-03-13 18:55:55.000000000 +0100
+@@ -2,6 +2,7 @@
+ #define _PPC_BYTEORDER_H
+
+ #include <asm/types.h>
++#include <linux/compiler.h>
+
+ #ifdef __GNUC__
+ #ifdef __KERNEL__
+@@ -50,7 +51,7 @@
+ __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*addr) : "r" (val), "r" (taddr+4));
+ }
+
+-static __inline__ __const__ __u16 ___arch__swab16(__u16 value)
++static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 value)
+ {
+ __u16 result;
+
+@@ -58,7 +59,7 @@
+ return result;
+ }
+
+-static __inline__ __const__ __u32 ___arch__swab32(__u32 value)
++static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 value)
+ {
+ __u32 result;
+
+diff -Nur linux-2.4.32/include/asm-ppc/param.h linux-2.4.32.patched/include/asm-ppc/param.h
+--- linux-2.4.32/include/asm-ppc/param.h 2003-06-13 16:51:38.000000000 +0200
++++ linux-2.4.32.patched/include/asm-ppc/param.h 2006-03-13 18:55:54.000000000 +0100
+@@ -3,6 +3,9 @@
+
+ #ifndef HZ
+ #define HZ 100
++#ifdef __KERNEL__
++#define hz_to_std(a) (a)
++#endif
+ #endif
+
+ #define EXEC_PAGESIZE 4096
+diff -Nur linux-2.4.32/include/asm-ppc/signal.h linux-2.4.32.patched/include/asm-ppc/signal.h
+--- linux-2.4.32/include/asm-ppc/signal.h 2003-08-25 13:44:44.000000000 +0200
++++ linux-2.4.32.patched/include/asm-ppc/signal.h 2006-03-13 18:55:56.000000000 +0100
+@@ -111,6 +111,13 @@
+ #define SA_PROBE SA_ONESHOT
+ #define SA_SAMPLE_RANDOM SA_RESTART
+ #define SA_SHIRQ 0x04000000
++
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
++#endif
++
+ #endif /* __KERNEL__ */
+
+ #define SIG_BLOCK 0 /* for blocking signals */
+diff -Nur linux-2.4.32/include/asm-ppc/spinlock.h linux-2.4.32.patched/include/asm-ppc/spinlock.h
+--- linux-2.4.32/include/asm-ppc/spinlock.h 2003-06-13 16:51:38.000000000 +0200
++++ linux-2.4.32.patched/include/asm-ppc/spinlock.h 2006-03-13 18:55:55.000000000 +0100
+@@ -40,7 +40,6 @@
+ extern void _spin_lock(spinlock_t *lock);
+ extern void _spin_unlock(spinlock_t *lock);
+ extern int spin_trylock(spinlock_t *lock);
+-extern unsigned long __spin_trylock(volatile unsigned long *lock);
+
+ #define spin_lock(lp) _spin_lock(lp)
+ #define spin_unlock(lp) _spin_unlock(lp)
+diff -Nur linux-2.4.32/include/asm-ppc/time.h linux-2.4.32.patched/include/asm-ppc/time.h
+--- linux-2.4.32/include/asm-ppc/time.h 2003-08-25 13:44:44.000000000 +0200
++++ linux-2.4.32.patched/include/asm-ppc/time.h 2006-03-13 18:55:55.000000000 +0100
+@@ -12,6 +12,7 @@
+ #include <linux/config.h>
+ #include <linux/mc146818rtc.h>
+ #include <linux/threads.h>
++#include <linux/compiler.h>
+
+ #include <asm/processor.h>
+
+@@ -57,7 +58,7 @@
+ /* Accessor functions for the timebase (RTC on 601) registers. */
+ /* If one day CONFIG_POWER is added just define __USE_RTC as 1 */
+ #ifdef CONFIG_6xx
+-extern __inline__ int const __USE_RTC(void) {
++extern __inline__ int __attribute_const__ __USE_RTC(void) {
+ return (mfspr(SPRN_PVR)>>16) == 1;
+ }
+ #else
+diff -Nur linux-2.4.32/include/asm-s390/param.h linux-2.4.32.patched/include/asm-s390/param.h
+--- linux-2.4.32/include/asm-s390/param.h 2001-02-13 23:13:44.000000000 +0100
++++ linux-2.4.32.patched/include/asm-s390/param.h 2006-03-13 18:55:54.000000000 +0100
+@@ -11,6 +11,9 @@
+
+ #ifndef HZ
+ #define HZ 100
++#ifdef __KERNEL__
++#define hz_to_std(a) (a)
++#endif
+ #endif
+
+ #define EXEC_PAGESIZE 4096
+diff -Nur linux-2.4.32/include/asm-s390/signal.h linux-2.4.32.patched/include/asm-s390/signal.h
+--- linux-2.4.32/include/asm-s390/signal.h 2004-02-18 14:36:32.000000000 +0100
++++ linux-2.4.32.patched/include/asm-s390/signal.h 2006-03-13 18:55:56.000000000 +0100
+@@ -129,8 +129,15 @@
+ #define SA_SHIRQ 0x04000000
+ #define SA_DOPATHGROUP 0x00100000
+ #define SA_FORCE 0x00200000
++
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
+ #endif
+
++#endif /* __KERNEL__ */
++
+ #define SIG_BLOCK 0 /* for blocking signals */
+ #define SIG_UNBLOCK 1 /* for unblocking signals */
+ #define SIG_SETMASK 2 /* for setting the signal mask */
+diff -Nur linux-2.4.32/include/asm-s390x/signal.h linux-2.4.32.patched/include/asm-s390x/signal.h
+--- linux-2.4.32/include/asm-s390x/signal.h 2004-02-18 14:36:32.000000000 +0100
++++ linux-2.4.32.patched/include/asm-s390x/signal.h 2006-03-13 18:55:56.000000000 +0100
+@@ -129,8 +129,15 @@
+ #define SA_SHIRQ 0x04000000
+ #define SA_DOPATHGROUP 0x00100000
+ #define SA_FORCE 0x00200000
++
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
+ #endif
+
++#endif /* __KERNEL__ */
++
+ #define SIG_BLOCK 0 /* for blocking signals */
+ #define SIG_UNBLOCK 1 /* for unblocking signals */
+ #define SIG_SETMASK 2 /* for setting the signal mask */
+diff -Nur linux-2.4.32/include/asm-sh/param.h linux-2.4.32.patched/include/asm-sh/param.h
+--- linux-2.4.32/include/asm-sh/param.h 2001-01-04 22:19:13.000000000 +0100
++++ linux-2.4.32.patched/include/asm-sh/param.h 2006-03-13 18:55:54.000000000 +0100
+@@ -3,6 +3,9 @@
+
+ #ifndef HZ
+ #define HZ 100
++#ifdef __KERNEL__
++#define hz_to_std(a) (a)
++#endif
+ #endif
+
+ #define EXEC_PAGESIZE 4096
+diff -Nur linux-2.4.32/include/asm-sh/signal.h linux-2.4.32.patched/include/asm-sh/signal.h
+--- linux-2.4.32/include/asm-sh/signal.h 1999-11-19 04:37:03.000000000 +0100
++++ linux-2.4.32.patched/include/asm-sh/signal.h 2006-03-13 18:55:56.000000000 +0100
+@@ -107,8 +107,15 @@
+ #define SA_PROBE SA_ONESHOT
+ #define SA_SAMPLE_RANDOM SA_RESTART
+ #define SA_SHIRQ 0x04000000
++
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
+ #endif
+
++#endif /* __KERNEL__ */
++
+ #define SIG_BLOCK 0 /* for blocking signals */
+ #define SIG_UNBLOCK 1 /* for unblocking signals */
+ #define SIG_SETMASK 2 /* for setting the signal mask */
+diff -Nur linux-2.4.32/include/asm-sparc/param.h linux-2.4.32.patched/include/asm-sparc/param.h
+--- linux-2.4.32/include/asm-sparc/param.h 2000-10-30 23:34:12.000000000 +0100
++++ linux-2.4.32.patched/include/asm-sparc/param.h 2006-03-13 18:55:54.000000000 +0100
+@@ -4,6 +4,9 @@
+
+ #ifndef HZ
+ #define HZ 100
++#ifdef __KERNEL__
++#define hz_to_std(a) (a)
++#endif
+ #endif
+
+ #define EXEC_PAGESIZE 8192 /* Thanks for sun4's we carry baggage... */
+diff -Nur linux-2.4.32/include/asm-sparc/signal.h linux-2.4.32.patched/include/asm-sparc/signal.h
+--- linux-2.4.32/include/asm-sparc/signal.h 1999-09-08 20:14:32.000000000 +0200
++++ linux-2.4.32.patched/include/asm-sparc/signal.h 2006-03-13 18:55:56.000000000 +0100
+@@ -176,8 +176,15 @@
+ #define SA_PROBE SA_ONESHOT
+ #define SA_SAMPLE_RANDOM SA_RESTART
+ #define SA_STATIC_ALLOC 0x80
++
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
+ #endif
+
++#endif /* __KERNEL__ */
++
+ /* Type of a signal handler. */
+ #ifdef __KERNEL__
+ typedef void (*__sighandler_t)(int, int, struct sigcontext *, char *);
+diff -Nur linux-2.4.32/include/asm-sparc64/param.h linux-2.4.32.patched/include/asm-sparc64/param.h
+--- linux-2.4.32/include/asm-sparc64/param.h 2000-10-30 23:34:12.000000000 +0100
++++ linux-2.4.32.patched/include/asm-sparc64/param.h 2006-03-13 18:55:54.000000000 +0100
+@@ -4,6 +4,9 @@
+
+ #ifndef HZ
+ #define HZ 100
++#ifdef __KERNEL__
++#define hz_to_std(a) (a)
++#endif
+ #endif
+
+ #define EXEC_PAGESIZE 8192 /* Thanks for sun4's we carry baggage... */
+diff -Nur linux-2.4.32/include/asm-sparc64/signal.h linux-2.4.32.patched/include/asm-sparc64/signal.h
+--- linux-2.4.32/include/asm-sparc64/signal.h 1999-09-08 20:14:32.000000000 +0200
++++ linux-2.4.32.patched/include/asm-sparc64/signal.h 2006-03-13 18:55:56.000000000 +0100
+@@ -192,8 +192,15 @@
+ #define SA_PROBE SA_ONESHOT
+ #define SA_SAMPLE_RANDOM SA_RESTART
+ #define SA_STATIC_ALLOC 0x80
++
++#ifdef CONFIG_NET_RANDOM
++#define SA_NET_RANDOM SA_SAMPLE_RANDOM
++#else
++#define SA_NET_RANDOM 0
+ #endif
+
++#endif /* __KERNEL__ */
++
+ /* Type of a signal handler. */
+ #ifdef __KERNEL__
+ typedef void (*__sighandler_t)(int, struct sigcontext *);
+diff -Nur linux-2.4.32/include/asm-x86_64/byteorder.h linux-2.4.32.patched/include/asm-x86_64/byteorder.h
+--- linux-2.4.32/include/asm-x86_64/byteorder.h 2002-11-29 00:53:15.000000000 +0100
++++ linux-2.4.32.patched/include/asm-x86_64/byteorder.h 2006-03-13 18:55:55.000000000 +0100
+@@ -2,16 +2,17 @@
+ #define _X86_64_BYTEORDER_H
+
+ #include <asm/types.h>
++#include <linux/compiler.h>
+
+ #ifdef __GNUC__
+
+-static __inline__ __const__ __u64 ___arch__swab64(__u64 x)
++static __inline__ __attribute_const__ __u64 ___arch__swab64(__u64 x)
+ {
+ __asm__("bswapq %0" : "=r" (x) : "0" (x));
+ return x;
+ }
+
+-static __inline__ __const__ __u32 ___arch__swab32(__u32 x)
++static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x)
+ {
+ __asm__("bswapl %0" : "=r" (x) : "0" (x));
+ return x;
+diff -Nur linux-2.4.32/include/asm-x86_64/processor.h linux-2.4.32.patched/include/asm-x86_64/processor.h
+--- linux-2.4.32/include/asm-x86_64/processor.h 2005-11-16 20:12:54.000000000 +0100
++++ linux-2.4.32.patched/include/asm-x86_64/processor.h 2006-03-13 18:55:55.000000000 +0100
+@@ -68,7 +68,6 @@
+ #define X86_VENDOR_UNKNOWN 0xff
+
+ extern struct cpuinfo_x86 boot_cpu_data;
+-extern struct tss_struct init_tss[NR_CPUS];
+
+ #ifdef CONFIG_SMP
+ extern struct cpuinfo_x86 cpu_data[];
+@@ -300,6 +299,8 @@
+ u32 io_bitmap[IO_BITMAP_SIZE];
+ } __attribute__((packed)) ____cacheline_aligned;
+
++extern struct tss_struct init_tss[NR_CPUS];
++
+ struct thread_struct {
+ unsigned long rsp0;
+ unsigned long rip;
+diff -Nur linux-2.4.32/include/config/60xx/wdt.h linux-2.4.32.patched/include/config/60xx/wdt.h
+--- linux-2.4.32/include/config/60xx/wdt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/60xx/wdt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_60XX_WDT
+diff -Nur linux-2.4.32/include/config/64bit/phys/addr.h linux-2.4.32.patched/include/config/64bit/phys/addr.h
+--- linux-2.4.32/include/config/64bit/phys/addr.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/64bit/phys/addr.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_64BIT_PHYS_ADDR
+diff -Nur linux-2.4.32/include/config/6pack.h linux-2.4.32.patched/include/config/6pack.h
+--- linux-2.4.32/include/config/6pack.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/6pack.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_6PACK
+diff -Nur linux-2.4.32/include/config/8139/old/rx/reset.h linux-2.4.32.patched/include/config/8139/old/rx/reset.h
+--- linux-2.4.32/include/config/8139/old/rx/reset.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/8139/old/rx/reset.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_8139_OLD_RX_RESET
+diff -Nur linux-2.4.32/include/config/8139cp.h linux-2.4.32.patched/include/config/8139cp.h
+--- linux-2.4.32/include/config/8139cp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/8139cp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_8139CP
+diff -Nur linux-2.4.32/include/config/8139too/8129.h linux-2.4.32.patched/include/config/8139too/8129.h
+--- linux-2.4.32/include/config/8139too/8129.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/8139too/8129.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_8139TOO_8129
+diff -Nur linux-2.4.32/include/config/8139too/pio.h linux-2.4.32.patched/include/config/8139too/pio.h
+--- linux-2.4.32/include/config/8139too/pio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/8139too/pio.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_8139TOO_PIO
+diff -Nur linux-2.4.32/include/config/8139too/tune/twister.h linux-2.4.32.patched/include/config/8139too/tune/twister.h
+--- linux-2.4.32/include/config/8139too/tune/twister.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/8139too/tune/twister.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_8139TOO_TUNE_TWISTER
+diff -Nur linux-2.4.32/include/config/8139too.h linux-2.4.32.patched/include/config/8139too.h
+--- linux-2.4.32/include/config/8139too.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/8139too.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_8139TOO
+diff -Nur linux-2.4.32/include/config/acenic.h linux-2.4.32.patched/include/config/acenic.h
+--- linux-2.4.32/include/config/acenic.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/acenic.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ACENIC
+diff -Nur linux-2.4.32/include/config/acer/pica/61.h linux-2.4.32.patched/include/config/acer/pica/61.h
+--- linux-2.4.32/include/config/acer/pica/61.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/acer/pica/61.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ACER_PICA_61
+diff -Nur linux-2.4.32/include/config/acorn/partition.h linux-2.4.32.patched/include/config/acorn/partition.h
+--- linux-2.4.32/include/config/acorn/partition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/acorn/partition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ACORN_PARTITION
+diff -Nur linux-2.4.32/include/config/acquire/wdt.h linux-2.4.32.patched/include/config/acquire/wdt.h
+--- linux-2.4.32/include/config/acquire/wdt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/acquire/wdt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ACQUIRE_WDT
+diff -Nur linux-2.4.32/include/config/adaptec/starfire.h linux-2.4.32.patched/include/config/adaptec/starfire.h
+--- linux-2.4.32/include/config/adaptec/starfire.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/adaptec/starfire.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ADAPTEC_STARFIRE
+diff -Nur linux-2.4.32/include/config/adfs/fs/rw.h linux-2.4.32.patched/include/config/adfs/fs/rw.h
+--- linux-2.4.32/include/config/adfs/fs/rw.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/adfs/fs/rw.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ADFS_FS_RW
+diff -Nur linux-2.4.32/include/config/adfs/fs.h linux-2.4.32.patched/include/config/adfs/fs.h
+--- linux-2.4.32/include/config/adfs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/adfs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ADFS_FS
+diff -Nur linux-2.4.32/include/config/advantech/wdt.h linux-2.4.32.patched/include/config/advantech/wdt.h
+--- linux-2.4.32/include/config/advantech/wdt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/advantech/wdt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ADVANTECH_WDT
+diff -Nur linux-2.4.32/include/config/affs/fs.h linux-2.4.32.patched/include/config/affs/fs.h
+--- linux-2.4.32/include/config/affs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/affs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AFFS_FS
+diff -Nur linux-2.4.32/include/config/agp.h linux-2.4.32.patched/include/config/agp.h
+--- linux-2.4.32/include/config/agp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/agp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AGP
+diff -Nur linux-2.4.32/include/config/airo/cs.h linux-2.4.32.patched/include/config/airo/cs.h
+--- linux-2.4.32/include/config/airo/cs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/airo/cs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AIRO_CS
+diff -Nur linux-2.4.32/include/config/airo.h linux-2.4.32.patched/include/config/airo.h
+--- linux-2.4.32/include/config/airo.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/airo.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AIRO
+diff -Nur linux-2.4.32/include/config/aironet4500/noncs.h linux-2.4.32.patched/include/config/aironet4500/noncs.h
+--- linux-2.4.32/include/config/aironet4500/noncs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/aironet4500/noncs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AIRONET4500_NONCS
+diff -Nur linux-2.4.32/include/config/aironet4500/proc.h linux-2.4.32.patched/include/config/aironet4500/proc.h
+--- linux-2.4.32/include/config/aironet4500/proc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/aironet4500/proc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AIRONET4500_PROC
+diff -Nur linux-2.4.32/include/config/aironet4500.h linux-2.4.32.patched/include/config/aironet4500.h
+--- linux-2.4.32/include/config/aironet4500.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/aironet4500.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AIRONET4500
+diff -Nur linux-2.4.32/include/config/alim1535/wdt.h linux-2.4.32.patched/include/config/alim1535/wdt.h
+--- linux-2.4.32/include/config/alim1535/wdt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/alim1535/wdt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ALIM1535_WDT
+diff -Nur linux-2.4.32/include/config/alim7101/wdt.h linux-2.4.32.patched/include/config/alim7101/wdt.h
+--- linux-2.4.32/include/config/alim7101/wdt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/alim7101/wdt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ALIM7101_WDT
+diff -Nur linux-2.4.32/include/config/amd/pm768.h linux-2.4.32.patched/include/config/amd/pm768.h
+--- linux-2.4.32/include/config/amd/pm768.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/amd/pm768.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AMD_PM768
+diff -Nur linux-2.4.32/include/config/amd74xx/override.h linux-2.4.32.patched/include/config/amd74xx/override.h
+--- linux-2.4.32/include/config/amd74xx/override.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/amd74xx/override.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AMD74XX_OVERRIDE
+diff -Nur linux-2.4.32/include/config/amd8111/eth.h linux-2.4.32.patched/include/config/amd8111/eth.h
+--- linux-2.4.32/include/config/amd8111/eth.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/amd8111/eth.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AMD8111_ETH
+diff -Nur linux-2.4.32/include/config/amiga/partition.h linux-2.4.32.patched/include/config/amiga/partition.h
+--- linux-2.4.32/include/config/amiga/partition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/amiga/partition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AMIGA_PARTITION
+diff -Nur linux-2.4.32/include/config/applicom.h linux-2.4.32.patched/include/config/applicom.h
+--- linux-2.4.32/include/config/applicom.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/applicom.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_APPLICOM
+diff -Nur linux-2.4.32/include/config/apricot.h linux-2.4.32.patched/include/config/apricot.h
+--- linux-2.4.32/include/config/apricot.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/apricot.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_APRICOT
+diff -Nur linux-2.4.32/include/config/arcnet.h linux-2.4.32.patched/include/config/arcnet.h
+--- linux-2.4.32/include/config/arcnet.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/arcnet.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ARCNET
+diff -Nur linux-2.4.32/include/config/arlan.h linux-2.4.32.patched/include/config/arlan.h
+--- linux-2.4.32/include/config/arlan.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/arlan.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ARLAN
+diff -Nur linux-2.4.32/include/config/arpd.h linux-2.4.32.patched/include/config/arpd.h
+--- linux-2.4.32/include/config/arpd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/arpd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ARPD
+diff -Nur linux-2.4.32/include/config/atalk.h linux-2.4.32.patched/include/config/atalk.h
+--- linux-2.4.32/include/config/atalk.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/atalk.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ATALK
+diff -Nur linux-2.4.32/include/config/atari/partition.h linux-2.4.32.patched/include/config/atari/partition.h
+--- linux-2.4.32/include/config/atari/partition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/atari/partition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ATARI_PARTITION
+diff -Nur linux-2.4.32/include/config/atm.h linux-2.4.32.patched/include/config/atm.h
+--- linux-2.4.32/include/config/atm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/atm.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ATM
+diff -Nur linux-2.4.32/include/config/autofs/fs.h linux-2.4.32.patched/include/config/autofs/fs.h
+--- linux-2.4.32/include/config/autofs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/autofs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AUTOFS_FS
+diff -Nur linux-2.4.32/include/config/autofs4/fs.h linux-2.4.32.patched/include/config/autofs4/fs.h
+--- linux-2.4.32/include/config/autofs4/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/autofs4/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AUTOFS4_FS
+diff -Nur linux-2.4.32/include/config/ax25/dama/slave.h linux-2.4.32.patched/include/config/ax25/dama/slave.h
+--- linux-2.4.32/include/config/ax25/dama/slave.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ax25/dama/slave.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AX25_DAMA_SLAVE
+diff -Nur linux-2.4.32/include/config/ax25/module.h linux-2.4.32.patched/include/config/ax25/module.h
+--- linux-2.4.32/include/config/ax25/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ax25/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_AX25_MODULE 1
+diff -Nur linux-2.4.32/include/config/ax25.h linux-2.4.32.patched/include/config/ax25.h
+--- linux-2.4.32/include/config/ax25.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ax25.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_AX25
+diff -Nur linux-2.4.32/include/config/b44.h linux-2.4.32.patched/include/config/b44.h
+--- linux-2.4.32/include/config/b44.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/b44.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_B44 1
+diff -Nur linux-2.4.32/include/config/baget/mips.h linux-2.4.32.patched/include/config/baget/mips.h
+--- linux-2.4.32/include/config/baget/mips.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/baget/mips.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BAGET_MIPS
+diff -Nur linux-2.4.32/include/config/baycom/epp.h linux-2.4.32.patched/include/config/baycom/epp.h
+--- linux-2.4.32/include/config/baycom/epp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/baycom/epp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BAYCOM_EPP
+diff -Nur linux-2.4.32/include/config/baycom/par.h linux-2.4.32.patched/include/config/baycom/par.h
+--- linux-2.4.32/include/config/baycom/par.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/baycom/par.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BAYCOM_PAR
+diff -Nur linux-2.4.32/include/config/baycom/ser/fdx.h linux-2.4.32.patched/include/config/baycom/ser/fdx.h
+--- linux-2.4.32/include/config/baycom/ser/fdx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/baycom/ser/fdx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BAYCOM_SER_FDX
+diff -Nur linux-2.4.32/include/config/baycom/ser/hdx.h linux-2.4.32.patched/include/config/baycom/ser/hdx.h
+--- linux-2.4.32/include/config/baycom/ser/hdx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/baycom/ser/hdx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BAYCOM_SER_HDX
+diff -Nur linux-2.4.32/include/config/bcm4310.h linux-2.4.32.patched/include/config/bcm4310.h
+--- linux-2.4.32/include/config/bcm4310.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bcm4310.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BCM4310 1
+diff -Nur linux-2.4.32/include/config/bcm4704.h linux-2.4.32.patched/include/config/bcm4704.h
+--- linux-2.4.32/include/config/bcm4704.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bcm4704.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BCM4704 1
+diff -Nur linux-2.4.32/include/config/bcm4710.h linux-2.4.32.patched/include/config/bcm4710.h
+--- linux-2.4.32/include/config/bcm4710.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bcm4710.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BCM4710 1
+diff -Nur linux-2.4.32/include/config/bcm5365.h linux-2.4.32.patched/include/config/bcm5365.h
+--- linux-2.4.32/include/config/bcm5365.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bcm5365.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BCM5365 1
+diff -Nur linux-2.4.32/include/config/bcm947xx.h linux-2.4.32.patched/include/config/bcm947xx.h
+--- linux-2.4.32/include/config/bcm947xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bcm947xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BCM947XX 1
+diff -Nur linux-2.4.32/include/config/befs/debug.h linux-2.4.32.patched/include/config/befs/debug.h
+--- linux-2.4.32/include/config/befs/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/befs/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BEFS_DEBUG
+diff -Nur linux-2.4.32/include/config/befs/fs.h linux-2.4.32.patched/include/config/befs/fs.h
+--- linux-2.4.32/include/config/befs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/befs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BEFS_FS
+diff -Nur linux-2.4.32/include/config/bfs/fs.h linux-2.4.32.patched/include/config/bfs/fs.h
+--- linux-2.4.32/include/config/bfs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bfs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BFS_FS
+diff -Nur linux-2.4.32/include/config/binfmt/aout.h linux-2.4.32.patched/include/config/binfmt/aout.h
+--- linux-2.4.32/include/config/binfmt/aout.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/binfmt/aout.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BINFMT_AOUT
+diff -Nur linux-2.4.32/include/config/binfmt/elf/aout.h linux-2.4.32.patched/include/config/binfmt/elf/aout.h
+--- linux-2.4.32/include/config/binfmt/elf/aout.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/binfmt/elf/aout.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BINFMT_ELF_AOUT
+diff -Nur linux-2.4.32/include/config/binfmt/elf32.h linux-2.4.32.patched/include/config/binfmt/elf32.h
+--- linux-2.4.32/include/config/binfmt/elf32.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/binfmt/elf32.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BINFMT_ELF32
+diff -Nur linux-2.4.32/include/config/binfmt/elf.h linux-2.4.32.patched/include/config/binfmt/elf.h
+--- linux-2.4.32/include/config/binfmt/elf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/binfmt/elf.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BINFMT_ELF 1
+diff -Nur linux-2.4.32/include/config/binfmt/misc.h linux-2.4.32.patched/include/config/binfmt/misc.h
+--- linux-2.4.32/include/config/binfmt/misc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/binfmt/misc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BINFMT_MISC
+diff -Nur linux-2.4.32/include/config/blk/cpq/ciss/da.h linux-2.4.32.patched/include/config/blk/cpq/ciss/da.h
+--- linux-2.4.32/include/config/blk/cpq/ciss/da.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/cpq/ciss/da.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_CPQ_CISS_DA
+diff -Nur linux-2.4.32/include/config/blk/cpq/da.h linux-2.4.32.patched/include/config/blk/cpq/da.h
+--- linux-2.4.32/include/config/blk/cpq/da.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/cpq/da.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_CPQ_DA
+diff -Nur linux-2.4.32/include/config/blk/dev/3w/xxxx/raid.h linux-2.4.32.patched/include/config/blk/dev/3w/xxxx/raid.h
+--- linux-2.4.32/include/config/blk/dev/3w/xxxx/raid.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/3w/xxxx/raid.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_3W_XXXX_RAID
+diff -Nur linux-2.4.32/include/config/blk/dev/adma100.h linux-2.4.32.patched/include/config/blk/dev/adma100.h
+--- linux-2.4.32/include/config/blk/dev/adma100.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/adma100.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_ADMA100
+diff -Nur linux-2.4.32/include/config/blk/dev/aec62xx.h linux-2.4.32.patched/include/config/blk/dev/aec62xx.h
+--- linux-2.4.32/include/config/blk/dev/aec62xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/aec62xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_AEC62XX
+diff -Nur linux-2.4.32/include/config/blk/dev/ali15x3.h linux-2.4.32.patched/include/config/blk/dev/ali15x3.h
+--- linux-2.4.32/include/config/blk/dev/ali15x3.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/ali15x3.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_ALI15X3
+diff -Nur linux-2.4.32/include/config/blk/dev/amd74xx.h linux-2.4.32.patched/include/config/blk/dev/amd74xx.h
+--- linux-2.4.32/include/config/blk/dev/amd74xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/amd74xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_AMD74XX
+diff -Nur linux-2.4.32/include/config/blk/dev/ataraid/hpt.h linux-2.4.32.patched/include/config/blk/dev/ataraid/hpt.h
+--- linux-2.4.32/include/config/blk/dev/ataraid/hpt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/ataraid/hpt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_ATARAID_HPT
+diff -Nur linux-2.4.32/include/config/blk/dev/ataraid/medley.h linux-2.4.32.patched/include/config/blk/dev/ataraid/medley.h
+--- linux-2.4.32/include/config/blk/dev/ataraid/medley.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/ataraid/medley.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_ATARAID_MEDLEY
+diff -Nur linux-2.4.32/include/config/blk/dev/ataraid/pdc.h linux-2.4.32.patched/include/config/blk/dev/ataraid/pdc.h
+--- linux-2.4.32/include/config/blk/dev/ataraid/pdc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/ataraid/pdc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_ATARAID_PDC
+diff -Nur linux-2.4.32/include/config/blk/dev/ataraid/sii.h linux-2.4.32.patched/include/config/blk/dev/ataraid/sii.h
+--- linux-2.4.32/include/config/blk/dev/ataraid/sii.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/ataraid/sii.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_ATARAID_SII
+diff -Nur linux-2.4.32/include/config/blk/dev/ataraid.h linux-2.4.32.patched/include/config/blk/dev/ataraid.h
+--- linux-2.4.32/include/config/blk/dev/ataraid.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/ataraid.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_ATARAID
+diff -Nur linux-2.4.32/include/config/blk/dev/atiixp.h linux-2.4.32.patched/include/config/blk/dev/atiixp.h
+--- linux-2.4.32/include/config/blk/dev/atiixp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/atiixp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_ATIIXP
+diff -Nur linux-2.4.32/include/config/blk/dev/cmd640/enhanced.h linux-2.4.32.patched/include/config/blk/dev/cmd640/enhanced.h
+--- linux-2.4.32/include/config/blk/dev/cmd640/enhanced.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/cmd640/enhanced.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_CMD640_ENHANCED
+diff -Nur linux-2.4.32/include/config/blk/dev/cmd640.h linux-2.4.32.patched/include/config/blk/dev/cmd640.h
+--- linux-2.4.32/include/config/blk/dev/cmd640.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/cmd640.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_CMD640
+diff -Nur linux-2.4.32/include/config/blk/dev/cmd64x.h linux-2.4.32.patched/include/config/blk/dev/cmd64x.h
+--- linux-2.4.32/include/config/blk/dev/cmd64x.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/cmd64x.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_CMD64X
+diff -Nur linux-2.4.32/include/config/blk/dev/cs5530.h linux-2.4.32.patched/include/config/blk/dev/cs5530.h
+--- linux-2.4.32/include/config/blk/dev/cs5530.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/cs5530.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_CS5530
+diff -Nur linux-2.4.32/include/config/blk/dev/cy82c693.h linux-2.4.32.patched/include/config/blk/dev/cy82c693.h
+--- linux-2.4.32/include/config/blk/dev/cy82c693.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/cy82c693.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_CY82C693
+diff -Nur linux-2.4.32/include/config/blk/dev/dac960.h linux-2.4.32.patched/include/config/blk/dev/dac960.h
+--- linux-2.4.32/include/config/blk/dev/dac960.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/dac960.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_DAC960
+diff -Nur linux-2.4.32/include/config/blk/dev/delkin.h linux-2.4.32.patched/include/config/blk/dev/delkin.h
+--- linux-2.4.32/include/config/blk/dev/delkin.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/delkin.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_DELKIN
+diff -Nur linux-2.4.32/include/config/blk/dev/fd.h linux-2.4.32.patched/include/config/blk/dev/fd.h
+--- linux-2.4.32/include/config/blk/dev/fd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/fd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_FD
+diff -Nur linux-2.4.32/include/config/blk/dev/generic.h linux-2.4.32.patched/include/config/blk/dev/generic.h
+--- linux-2.4.32/include/config/blk/dev/generic.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/generic.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_GENERIC
+diff -Nur linux-2.4.32/include/config/blk/dev/hd/ide.h linux-2.4.32.patched/include/config/blk/dev/hd/ide.h
+--- linux-2.4.32/include/config/blk/dev/hd/ide.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/hd/ide.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_HD_IDE
+diff -Nur linux-2.4.32/include/config/blk/dev/hd.h linux-2.4.32.patched/include/config/blk/dev/hd.h
+--- linux-2.4.32/include/config/blk/dev/hd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/hd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_HD
+diff -Nur linux-2.4.32/include/config/blk/dev/hpt34x.h linux-2.4.32.patched/include/config/blk/dev/hpt34x.h
+--- linux-2.4.32/include/config/blk/dev/hpt34x.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/hpt34x.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_HPT34X
+diff -Nur linux-2.4.32/include/config/blk/dev/hpt366.h linux-2.4.32.patched/include/config/blk/dev/hpt366.h
+--- linux-2.4.32/include/config/blk/dev/hpt366.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/hpt366.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_HPT366
+diff -Nur linux-2.4.32/include/config/blk/dev/ide/module.h linux-2.4.32.patched/include/config/blk/dev/ide/module.h
+--- linux-2.4.32/include/config/blk/dev/ide/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/ide/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLK_DEV_IDE_MODULE 1
+diff -Nur linux-2.4.32/include/config/blk/dev/ide/sata.h linux-2.4.32.patched/include/config/blk/dev/ide/sata.h
+--- linux-2.4.32/include/config/blk/dev/ide/sata.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/ide/sata.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_IDE_SATA
+diff -Nur linux-2.4.32/include/config/blk/dev/idecd.h linux-2.4.32.patched/include/config/blk/dev/idecd.h
+--- linux-2.4.32/include/config/blk/dev/idecd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/idecd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_IDECD
+diff -Nur linux-2.4.32/include/config/blk/dev/idecs.h linux-2.4.32.patched/include/config/blk/dev/idecs.h
+--- linux-2.4.32/include/config/blk/dev/idecs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/idecs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_IDECS
+diff -Nur linux-2.4.32/include/config/blk/dev/idedisk/module.h linux-2.4.32.patched/include/config/blk/dev/idedisk/module.h
+--- linux-2.4.32/include/config/blk/dev/idedisk/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/idedisk/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLK_DEV_IDEDISK_MODULE 1
+diff -Nur linux-2.4.32/include/config/blk/dev/idedisk.h linux-2.4.32.patched/include/config/blk/dev/idedisk.h
+--- linux-2.4.32/include/config/blk/dev/idedisk.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/idedisk.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_IDEDISK
+diff -Nur linux-2.4.32/include/config/blk/dev/idedma/forced.h linux-2.4.32.patched/include/config/blk/dev/idedma/forced.h
+--- linux-2.4.32/include/config/blk/dev/idedma/forced.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/idedma/forced.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_IDEDMA_FORCED
+diff -Nur linux-2.4.32/include/config/blk/dev/idedma/pci.h linux-2.4.32.patched/include/config/blk/dev/idedma/pci.h
+--- linux-2.4.32/include/config/blk/dev/idedma/pci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/idedma/pci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLK_DEV_IDEDMA_PCI 1
+diff -Nur linux-2.4.32/include/config/blk/dev/idedma.h linux-2.4.32.patched/include/config/blk/dev/idedma.h
+--- linux-2.4.32/include/config/blk/dev/idedma.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/idedma.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLK_DEV_IDEDMA 1
+diff -Nur linux-2.4.32/include/config/blk/dev/idefloppy.h linux-2.4.32.patched/include/config/blk/dev/idefloppy.h
+--- linux-2.4.32/include/config/blk/dev/idefloppy.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/idefloppy.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_IDEFLOPPY
+diff -Nur linux-2.4.32/include/config/blk/dev/ide.h linux-2.4.32.patched/include/config/blk/dev/ide.h
+--- linux-2.4.32/include/config/blk/dev/ide.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/ide.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_IDE
+diff -Nur linux-2.4.32/include/config/blk/dev/idepci.h linux-2.4.32.patched/include/config/blk/dev/idepci.h
+--- linux-2.4.32/include/config/blk/dev/idepci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/idepci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLK_DEV_IDEPCI 1
+diff -Nur linux-2.4.32/include/config/blk/dev/idescsi.h linux-2.4.32.patched/include/config/blk/dev/idescsi.h
+--- linux-2.4.32/include/config/blk/dev/idescsi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/idescsi.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_IDESCSI
+diff -Nur linux-2.4.32/include/config/blk/dev/idetape.h linux-2.4.32.patched/include/config/blk/dev/idetape.h
+--- linux-2.4.32/include/config/blk/dev/idetape.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/idetape.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_IDETAPE
+diff -Nur linux-2.4.32/include/config/blk/dev/initrd.h linux-2.4.32.patched/include/config/blk/dev/initrd.h
+--- linux-2.4.32/include/config/blk/dev/initrd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/initrd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_INITRD
+diff -Nur linux-2.4.32/include/config/blk/dev/isapnp.h linux-2.4.32.patched/include/config/blk/dev/isapnp.h
+--- linux-2.4.32/include/config/blk/dev/isapnp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/isapnp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_ISAPNP
+diff -Nur linux-2.4.32/include/config/blk/dev/loop/module.h linux-2.4.32.patched/include/config/blk/dev/loop/module.h
+--- linux-2.4.32/include/config/blk/dev/loop/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/loop/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLK_DEV_LOOP_MODULE 1
+diff -Nur linux-2.4.32/include/config/blk/dev/loop.h linux-2.4.32.patched/include/config/blk/dev/loop.h
+--- linux-2.4.32/include/config/blk/dev/loop.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/loop.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_LOOP
+diff -Nur linux-2.4.32/include/config/blk/dev/lvm.h linux-2.4.32.patched/include/config/blk/dev/lvm.h
+--- linux-2.4.32/include/config/blk/dev/lvm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/lvm.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_LVM
+diff -Nur linux-2.4.32/include/config/blk/dev/md.h linux-2.4.32.patched/include/config/blk/dev/md.h
+--- linux-2.4.32/include/config/blk/dev/md.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/md.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_MD
+diff -Nur linux-2.4.32/include/config/blk/dev/nbd/module.h linux-2.4.32.patched/include/config/blk/dev/nbd/module.h
+--- linux-2.4.32/include/config/blk/dev/nbd/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/nbd/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLK_DEV_NBD_MODULE 1
+diff -Nur linux-2.4.32/include/config/blk/dev/nbd.h linux-2.4.32.patched/include/config/blk/dev/nbd.h
+--- linux-2.4.32/include/config/blk/dev/nbd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/nbd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_NBD
+diff -Nur linux-2.4.32/include/config/blk/dev/ns87415.h linux-2.4.32.patched/include/config/blk/dev/ns87415.h
+--- linux-2.4.32/include/config/blk/dev/ns87415.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/ns87415.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_NS87415
+diff -Nur linux-2.4.32/include/config/blk/dev/offboard.h linux-2.4.32.patched/include/config/blk/dev/offboard.h
+--- linux-2.4.32/include/config/blk/dev/offboard.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/offboard.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLK_DEV_OFFBOARD 1
+diff -Nur linux-2.4.32/include/config/blk/dev/opti621.h linux-2.4.32.patched/include/config/blk/dev/opti621.h
+--- linux-2.4.32/include/config/blk/dev/opti621.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/opti621.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_OPTI621
+diff -Nur linux-2.4.32/include/config/blk/dev/pdc202xx/new.h linux-2.4.32.patched/include/config/blk/dev/pdc202xx/new.h
+--- linux-2.4.32/include/config/blk/dev/pdc202xx/new.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/pdc202xx/new.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_PDC202XX_NEW
+diff -Nur linux-2.4.32/include/config/blk/dev/pdc202xx/old/module.h linux-2.4.32.patched/include/config/blk/dev/pdc202xx/old/module.h
+--- linux-2.4.32/include/config/blk/dev/pdc202xx/old/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/pdc202xx/old/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLK_DEV_PDC202XX_OLD_MODULE 1
+diff -Nur linux-2.4.32/include/config/blk/dev/pdc202xx/old.h linux-2.4.32.patched/include/config/blk/dev/pdc202xx/old.h
+--- linux-2.4.32/include/config/blk/dev/pdc202xx/old.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/pdc202xx/old.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_PDC202XX_OLD
+diff -Nur linux-2.4.32/include/config/blk/dev/pdc202xx.h linux-2.4.32.patched/include/config/blk/dev/pdc202xx.h
+--- linux-2.4.32/include/config/blk/dev/pdc202xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/pdc202xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLK_DEV_PDC202XX 1
+diff -Nur linux-2.4.32/include/config/blk/dev/piix.h linux-2.4.32.patched/include/config/blk/dev/piix.h
+--- linux-2.4.32/include/config/blk/dev/piix.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/piix.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_PIIX
+diff -Nur linux-2.4.32/include/config/blk/dev/ram.h linux-2.4.32.patched/include/config/blk/dev/ram.h
+--- linux-2.4.32/include/config/blk/dev/ram.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/ram.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_RAM
+diff -Nur linux-2.4.32/include/config/blk/dev/rz1000.h linux-2.4.32.patched/include/config/blk/dev/rz1000.h
+--- linux-2.4.32/include/config/blk/dev/rz1000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/rz1000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_RZ1000
+diff -Nur linux-2.4.32/include/config/blk/dev/sc1200.h linux-2.4.32.patched/include/config/blk/dev/sc1200.h
+--- linux-2.4.32/include/config/blk/dev/sc1200.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/sc1200.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_SC1200
+diff -Nur linux-2.4.32/include/config/blk/dev/sd/module.h linux-2.4.32.patched/include/config/blk/dev/sd/module.h
+--- linux-2.4.32/include/config/blk/dev/sd/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/sd/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLK_DEV_SD_MODULE 1
+diff -Nur linux-2.4.32/include/config/blk/dev/sd.h linux-2.4.32.patched/include/config/blk/dev/sd.h
+--- linux-2.4.32/include/config/blk/dev/sd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/sd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_SD
+diff -Nur linux-2.4.32/include/config/blk/dev/siimage.h linux-2.4.32.patched/include/config/blk/dev/siimage.h
+--- linux-2.4.32/include/config/blk/dev/siimage.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/siimage.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_SIIMAGE
+diff -Nur linux-2.4.32/include/config/blk/dev/sis5513.h linux-2.4.32.patched/include/config/blk/dev/sis5513.h
+--- linux-2.4.32/include/config/blk/dev/sis5513.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/sis5513.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_SIS5513
+diff -Nur linux-2.4.32/include/config/blk/dev/slc90e66.h linux-2.4.32.patched/include/config/blk/dev/slc90e66.h
+--- linux-2.4.32/include/config/blk/dev/slc90e66.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/slc90e66.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_SLC90E66
+diff -Nur linux-2.4.32/include/config/blk/dev/sr.h linux-2.4.32.patched/include/config/blk/dev/sr.h
+--- linux-2.4.32/include/config/blk/dev/sr.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/sr.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_SR
+diff -Nur linux-2.4.32/include/config/blk/dev/svwks.h linux-2.4.32.patched/include/config/blk/dev/svwks.h
+--- linux-2.4.32/include/config/blk/dev/svwks.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/svwks.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_SVWKS
+diff -Nur linux-2.4.32/include/config/blk/dev/sx8.h linux-2.4.32.patched/include/config/blk/dev/sx8.h
+--- linux-2.4.32/include/config/blk/dev/sx8.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/sx8.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_SX8
+diff -Nur linux-2.4.32/include/config/blk/dev/triflex.h linux-2.4.32.patched/include/config/blk/dev/triflex.h
+--- linux-2.4.32/include/config/blk/dev/triflex.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/triflex.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_TRIFLEX
+diff -Nur linux-2.4.32/include/config/blk/dev/trm290.h linux-2.4.32.patched/include/config/blk/dev/trm290.h
+--- linux-2.4.32/include/config/blk/dev/trm290.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/trm290.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_TRM290
+diff -Nur linux-2.4.32/include/config/blk/dev/umem.h linux-2.4.32.patched/include/config/blk/dev/umem.h
+--- linux-2.4.32/include/config/blk/dev/umem.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/umem.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_UMEM
+diff -Nur linux-2.4.32/include/config/blk/dev/via82cxxx.h linux-2.4.32.patched/include/config/blk/dev/via82cxxx.h
+--- linux-2.4.32/include/config/blk/dev/via82cxxx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/via82cxxx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_VIA82CXXX
+diff -Nur linux-2.4.32/include/config/blk/dev/xd.h linux-2.4.32.patched/include/config/blk/dev/xd.h
+--- linux-2.4.32/include/config/blk/dev/xd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/dev/xd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_DEV_XD
+diff -Nur linux-2.4.32/include/config/blk/stats.h linux-2.4.32.patched/include/config/blk/stats.h
+--- linux-2.4.32/include/config/blk/stats.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/blk/stats.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLK_STATS
+diff -Nur linux-2.4.32/include/config/bluez/bnep/mc/filter.h linux-2.4.32.patched/include/config/bluez/bnep/mc/filter.h
+--- linux-2.4.32/include/config/bluez/bnep/mc/filter.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/bnep/mc/filter.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLUEZ_BNEP_MC_FILTER 1
+diff -Nur linux-2.4.32/include/config/bluez/bnep/module.h linux-2.4.32.patched/include/config/bluez/bnep/module.h
+--- linux-2.4.32/include/config/bluez/bnep/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/bnep/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLUEZ_BNEP_MODULE 1
+diff -Nur linux-2.4.32/include/config/bluez/bnep/proto/filter.h linux-2.4.32.patched/include/config/bluez/bnep/proto/filter.h
+--- linux-2.4.32/include/config/bluez/bnep/proto/filter.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/bnep/proto/filter.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLUEZ_BNEP_PROTO_FILTER 1
+diff -Nur linux-2.4.32/include/config/bluez/bnep.h linux-2.4.32.patched/include/config/bluez/bnep.h
+--- linux-2.4.32/include/config/bluez/bnep.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/bnep.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLUEZ_BNEP
+diff -Nur linux-2.4.32/include/config/bluez/hcibfusb.h linux-2.4.32.patched/include/config/bluez/hcibfusb.h
+--- linux-2.4.32/include/config/bluez/hcibfusb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/hcibfusb.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLUEZ_HCIBFUSB
+diff -Nur linux-2.4.32/include/config/bluez/hcibluecard.h linux-2.4.32.patched/include/config/bluez/hcibluecard.h
+--- linux-2.4.32/include/config/bluez/hcibluecard.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/hcibluecard.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLUEZ_HCIBLUECARD
+diff -Nur linux-2.4.32/include/config/bluez/hcibt3c.h linux-2.4.32.patched/include/config/bluez/hcibt3c.h
+--- linux-2.4.32/include/config/bluez/hcibt3c.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/hcibt3c.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLUEZ_HCIBT3C
+diff -Nur linux-2.4.32/include/config/bluez/hcibtuart.h linux-2.4.32.patched/include/config/bluez/hcibtuart.h
+--- linux-2.4.32/include/config/bluez/hcibtuart.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/hcibtuart.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLUEZ_HCIBTUART
+diff -Nur linux-2.4.32/include/config/bluez/hcidtl1.h linux-2.4.32.patched/include/config/bluez/hcidtl1.h
+--- linux-2.4.32/include/config/bluez/hcidtl1.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/hcidtl1.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLUEZ_HCIDTL1
+diff -Nur linux-2.4.32/include/config/bluez/hciuart/bcsp/txcrc.h linux-2.4.32.patched/include/config/bluez/hciuart/bcsp/txcrc.h
+--- linux-2.4.32/include/config/bluez/hciuart/bcsp/txcrc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/hciuart/bcsp/txcrc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLUEZ_HCIUART_BCSP_TXCRC 1
+diff -Nur linux-2.4.32/include/config/bluez/hciuart/bcsp.h linux-2.4.32.patched/include/config/bluez/hciuart/bcsp.h
+--- linux-2.4.32/include/config/bluez/hciuart/bcsp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/hciuart/bcsp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLUEZ_HCIUART_BCSP 1
+diff -Nur linux-2.4.32/include/config/bluez/hciuart/h4.h linux-2.4.32.patched/include/config/bluez/hciuart/h4.h
+--- linux-2.4.32/include/config/bluez/hciuart/h4.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/hciuart/h4.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLUEZ_HCIUART_H4 1
+diff -Nur linux-2.4.32/include/config/bluez/hciuart/module.h linux-2.4.32.patched/include/config/bluez/hciuart/module.h
+--- linux-2.4.32/include/config/bluez/hciuart/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/hciuart/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLUEZ_HCIUART_MODULE 1
+diff -Nur linux-2.4.32/include/config/bluez/hciuart.h linux-2.4.32.patched/include/config/bluez/hciuart.h
+--- linux-2.4.32/include/config/bluez/hciuart.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/hciuart.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLUEZ_HCIUART
+diff -Nur linux-2.4.32/include/config/bluez/hciusb/module.h linux-2.4.32.patched/include/config/bluez/hciusb/module.h
+--- linux-2.4.32/include/config/bluez/hciusb/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/hciusb/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLUEZ_HCIUSB_MODULE 1
+diff -Nur linux-2.4.32/include/config/bluez/hciusb/sco.h linux-2.4.32.patched/include/config/bluez/hciusb/sco.h
+--- linux-2.4.32/include/config/bluez/hciusb/sco.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/hciusb/sco.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLUEZ_HCIUSB_SCO 1
+diff -Nur linux-2.4.32/include/config/bluez/hciusb.h linux-2.4.32.patched/include/config/bluez/hciusb.h
+--- linux-2.4.32/include/config/bluez/hciusb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/hciusb.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLUEZ_HCIUSB
+diff -Nur linux-2.4.32/include/config/bluez/hcivhci.h linux-2.4.32.patched/include/config/bluez/hcivhci.h
+--- linux-2.4.32/include/config/bluez/hcivhci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/hcivhci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLUEZ_HCIVHCI
+diff -Nur linux-2.4.32/include/config/bluez/l2cap/module.h linux-2.4.32.patched/include/config/bluez/l2cap/module.h
+--- linux-2.4.32/include/config/bluez/l2cap/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/l2cap/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLUEZ_L2CAP_MODULE 1
+diff -Nur linux-2.4.32/include/config/bluez/l2cap.h linux-2.4.32.patched/include/config/bluez/l2cap.h
+--- linux-2.4.32/include/config/bluez/l2cap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/l2cap.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLUEZ_L2CAP
+diff -Nur linux-2.4.32/include/config/bluez/module.h linux-2.4.32.patched/include/config/bluez/module.h
+--- linux-2.4.32/include/config/bluez/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLUEZ_MODULE 1
+diff -Nur linux-2.4.32/include/config/bluez/rfcomm/module.h linux-2.4.32.patched/include/config/bluez/rfcomm/module.h
+--- linux-2.4.32/include/config/bluez/rfcomm/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/rfcomm/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLUEZ_RFCOMM_MODULE 1
+diff -Nur linux-2.4.32/include/config/bluez/rfcomm/tty.h linux-2.4.32.patched/include/config/bluez/rfcomm/tty.h
+--- linux-2.4.32/include/config/bluez/rfcomm/tty.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/rfcomm/tty.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLUEZ_RFCOMM_TTY 1
+diff -Nur linux-2.4.32/include/config/bluez/rfcomm.h linux-2.4.32.patched/include/config/bluez/rfcomm.h
+--- linux-2.4.32/include/config/bluez/rfcomm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/rfcomm.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLUEZ_RFCOMM
+diff -Nur linux-2.4.32/include/config/bluez/sco/module.h linux-2.4.32.patched/include/config/bluez/sco/module.h
+--- linux-2.4.32/include/config/bluez/sco/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/sco/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BLUEZ_SCO_MODULE 1
+diff -Nur linux-2.4.32/include/config/bluez/sco.h linux-2.4.32.patched/include/config/bluez/sco.h
+--- linux-2.4.32/include/config/bluez/sco.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez/sco.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLUEZ_SCO
+diff -Nur linux-2.4.32/include/config/bluez.h linux-2.4.32.patched/include/config/bluez.h
+--- linux-2.4.32/include/config/bluez.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bluez.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BLUEZ
+diff -Nur linux-2.4.32/include/config/bonding.h linux-2.4.32.patched/include/config/bonding.h
+--- linux-2.4.32/include/config/bonding.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bonding.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BONDING
+diff -Nur linux-2.4.32/include/config/bpqether.h linux-2.4.32.patched/include/config/bpqether.h
+--- linux-2.4.32/include/config/bpqether.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bpqether.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BPQETHER
+diff -Nur linux-2.4.32/include/config/bridge.h linux-2.4.32.patched/include/config/bridge.h
+--- linux-2.4.32/include/config/bridge.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bridge.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_BRIDGE 1
+diff -Nur linux-2.4.32/include/config/bsd/disklabel.h linux-2.4.32.patched/include/config/bsd/disklabel.h
+--- linux-2.4.32/include/config/bsd/disklabel.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bsd/disklabel.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BSD_DISKLABEL
+diff -Nur linux-2.4.32/include/config/bsd/process/acct.h linux-2.4.32.patched/include/config/bsd/process/acct.h
+--- linux-2.4.32/include/config/bsd/process/acct.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/bsd/process/acct.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BSD_PROCESS_ACCT
+diff -Nur linux-2.4.32/include/config/build/elf64.h linux-2.4.32.patched/include/config/build/elf64.h
+--- linux-2.4.32/include/config/build/elf64.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/build/elf64.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BUILD_ELF64
+diff -Nur linux-2.4.32/include/config/busmouse.h linux-2.4.32.patched/include/config/busmouse.h
+--- linux-2.4.32/include/config/busmouse.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/busmouse.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_BUSMOUSE
+diff -Nur linux-2.4.32/include/config/cardbus.h linux-2.4.32.patched/include/config/cardbus.h
+--- linux-2.4.32/include/config/cardbus.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cardbus.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CARDBUS 1
+diff -Nur linux-2.4.32/include/config/casio/e55.h linux-2.4.32.patched/include/config/casio/e55.h
+--- linux-2.4.32/include/config/casio/e55.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/casio/e55.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CASIO_E55
+diff -Nur linux-2.4.32/include/config/chr/dev/osst.h linux-2.4.32.patched/include/config/chr/dev/osst.h
+--- linux-2.4.32/include/config/chr/dev/osst.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/chr/dev/osst.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CHR_DEV_OSST
+diff -Nur linux-2.4.32/include/config/chr/dev/sg/module.h linux-2.4.32.patched/include/config/chr/dev/sg/module.h
+--- linux-2.4.32/include/config/chr/dev/sg/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/chr/dev/sg/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CHR_DEV_SG_MODULE 1
+diff -Nur linux-2.4.32/include/config/chr/dev/sg.h linux-2.4.32.patched/include/config/chr/dev/sg.h
+--- linux-2.4.32/include/config/chr/dev/sg.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/chr/dev/sg.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CHR_DEV_SG
+diff -Nur linux-2.4.32/include/config/chr/dev/st.h linux-2.4.32.patched/include/config/chr/dev/st.h
+--- linux-2.4.32/include/config/chr/dev/st.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/chr/dev/st.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CHR_DEV_ST
+diff -Nur linux-2.4.32/include/config/cifs/module.h linux-2.4.32.patched/include/config/cifs/module.h
+--- linux-2.4.32/include/config/cifs/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cifs/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CIFS_MODULE 1
+diff -Nur linux-2.4.32/include/config/cifs/posix.h linux-2.4.32.patched/include/config/cifs/posix.h
+--- linux-2.4.32/include/config/cifs/posix.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cifs/posix.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CIFS_POSIX 1
+diff -Nur linux-2.4.32/include/config/cifs/stats.h linux-2.4.32.patched/include/config/cifs/stats.h
+--- linux-2.4.32/include/config/cifs/stats.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cifs/stats.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CIFS_STATS
+diff -Nur linux-2.4.32/include/config/cifs.h linux-2.4.32.patched/include/config/cifs.h
+--- linux-2.4.32/include/config/cifs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cifs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CIFS
+diff -Nur linux-2.4.32/include/config/ciss/monitor/thread.h linux-2.4.32.patched/include/config/ciss/monitor/thread.h
+--- linux-2.4.32/include/config/ciss/monitor/thread.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ciss/monitor/thread.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CISS_MONITOR_THREAD
+diff -Nur linux-2.4.32/include/config/ciss/scsi/tape.h linux-2.4.32.patched/include/config/ciss/scsi/tape.h
+--- linux-2.4.32/include/config/ciss/scsi/tape.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ciss/scsi/tape.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CISS_SCSI_TAPE
+diff -Nur linux-2.4.32/include/config/cmdline/bool.h linux-2.4.32.patched/include/config/cmdline/bool.h
+--- linux-2.4.32/include/config/cmdline/bool.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cmdline/bool.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CMDLINE_BOOL
+diff -Nur linux-2.4.32/include/config/cmdline.h linux-2.4.32.patched/include/config/cmdline.h
+--- linux-2.4.32/include/config/cmdline.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cmdline.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CMDLINE "root=/dev/mtdblock2 rootfstype=squashfs,jffs2 init=/etc/preinit noinitrd console=ttyS0,115200"
+diff -Nur linux-2.4.32/include/config/coda/fs.h linux-2.4.32.patched/include/config/coda/fs.h
+--- linux-2.4.32/include/config/coda/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/coda/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CODA_FS
+diff -Nur linux-2.4.32/include/config/cogent/csb250.h linux-2.4.32.patched/include/config/cogent/csb250.h
+--- linux-2.4.32/include/config/cogent/csb250.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cogent/csb250.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_COGENT_CSB250
+diff -Nur linux-2.4.32/include/config/cpu/advanced.h linux-2.4.32.patched/include/config/cpu/advanced.h
+--- linux-2.4.32/include/config/cpu/advanced.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/advanced.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_ADVANCED
+diff -Nur linux-2.4.32/include/config/cpu/has/lldscd.h linux-2.4.32.patched/include/config/cpu/has/lldscd.h
+--- linux-2.4.32/include/config/cpu/has/lldscd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/has/lldscd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_HAS_LLDSCD
+diff -Nur linux-2.4.32/include/config/cpu/has/llsc.h linux-2.4.32.patched/include/config/cpu/has/llsc.h
+--- linux-2.4.32/include/config/cpu/has/llsc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/has/llsc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CPU_HAS_LLSC 1
+diff -Nur linux-2.4.32/include/config/cpu/has/prefetch.h linux-2.4.32.patched/include/config/cpu/has/prefetch.h
+--- linux-2.4.32/include/config/cpu/has/prefetch.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/has/prefetch.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CPU_HAS_PREFETCH 1
+diff -Nur linux-2.4.32/include/config/cpu/has/sync.h linux-2.4.32.patched/include/config/cpu/has/sync.h
+--- linux-2.4.32/include/config/cpu/has/sync.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/has/sync.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CPU_HAS_SYNC 1
+diff -Nur linux-2.4.32/include/config/cpu/has/wb.h linux-2.4.32.patched/include/config/cpu/has/wb.h
+--- linux-2.4.32/include/config/cpu/has/wb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/has/wb.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_HAS_WB
+diff -Nur linux-2.4.32/include/config/cpu/little/endian.h linux-2.4.32.patched/include/config/cpu/little/endian.h
+--- linux-2.4.32/include/config/cpu/little/endian.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/little/endian.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CPU_LITTLE_ENDIAN 1
+diff -Nur linux-2.4.32/include/config/cpu/mips32.h linux-2.4.32.patched/include/config/cpu/mips32.h
+--- linux-2.4.32/include/config/cpu/mips32.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/mips32.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CPU_MIPS32 1
+diff -Nur linux-2.4.32/include/config/cpu/mips64.h linux-2.4.32.patched/include/config/cpu/mips64.h
+--- linux-2.4.32/include/config/cpu/mips64.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/mips64.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_MIPS64
+diff -Nur linux-2.4.32/include/config/cpu/nevada.h linux-2.4.32.patched/include/config/cpu/nevada.h
+--- linux-2.4.32/include/config/cpu/nevada.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/nevada.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_NEVADA
+diff -Nur linux-2.4.32/include/config/cpu/r10000.h linux-2.4.32.patched/include/config/cpu/r10000.h
+--- linux-2.4.32/include/config/cpu/r10000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/r10000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_R10000
+diff -Nur linux-2.4.32/include/config/cpu/r3000.h linux-2.4.32.patched/include/config/cpu/r3000.h
+--- linux-2.4.32/include/config/cpu/r3000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/r3000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_R3000
+diff -Nur linux-2.4.32/include/config/cpu/r4300.h linux-2.4.32.patched/include/config/cpu/r4300.h
+--- linux-2.4.32/include/config/cpu/r4300.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/r4300.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_R4300
+diff -Nur linux-2.4.32/include/config/cpu/r4x00.h linux-2.4.32.patched/include/config/cpu/r4x00.h
+--- linux-2.4.32/include/config/cpu/r4x00.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/r4x00.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_R4X00
+diff -Nur linux-2.4.32/include/config/cpu/r5000.h linux-2.4.32.patched/include/config/cpu/r5000.h
+--- linux-2.4.32/include/config/cpu/r5000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/r5000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_R5000
+diff -Nur linux-2.4.32/include/config/cpu/r5432.h linux-2.4.32.patched/include/config/cpu/r5432.h
+--- linux-2.4.32/include/config/cpu/r5432.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/r5432.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_R5432
+diff -Nur linux-2.4.32/include/config/cpu/r6000.h linux-2.4.32.patched/include/config/cpu/r6000.h
+--- linux-2.4.32/include/config/cpu/r6000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/r6000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_R6000
+diff -Nur linux-2.4.32/include/config/cpu/r8000.h linux-2.4.32.patched/include/config/cpu/r8000.h
+--- linux-2.4.32/include/config/cpu/r8000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/r8000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_R8000
+diff -Nur linux-2.4.32/include/config/cpu/rm7000.h linux-2.4.32.patched/include/config/cpu/rm7000.h
+--- linux-2.4.32/include/config/cpu/rm7000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/rm7000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_RM7000
+diff -Nur linux-2.4.32/include/config/cpu/rm9000.h linux-2.4.32.patched/include/config/cpu/rm9000.h
+--- linux-2.4.32/include/config/cpu/rm9000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/rm9000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_RM9000
+diff -Nur linux-2.4.32/include/config/cpu/sb1.h linux-2.4.32.patched/include/config/cpu/sb1.h
+--- linux-2.4.32/include/config/cpu/sb1.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/sb1.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_SB1
+diff -Nur linux-2.4.32/include/config/cpu/tx39xx.h linux-2.4.32.patched/include/config/cpu/tx39xx.h
+--- linux-2.4.32/include/config/cpu/tx39xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/tx39xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_TX39XX
+diff -Nur linux-2.4.32/include/config/cpu/tx49xx.h linux-2.4.32.patched/include/config/cpu/tx49xx.h
+--- linux-2.4.32/include/config/cpu/tx49xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/tx49xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_TX49XX
+diff -Nur linux-2.4.32/include/config/cpu/vr41xx.h linux-2.4.32.patched/include/config/cpu/vr41xx.h
+--- linux-2.4.32/include/config/cpu/vr41xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cpu/vr41xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CPU_VR41XX
+diff -Nur linux-2.4.32/include/config/cramfs.h linux-2.4.32.patched/include/config/cramfs.h
+--- linux-2.4.32/include/config/cramfs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cramfs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRAMFS
+diff -Nur linux-2.4.32/include/config/crc32.h linux-2.4.32.patched/include/config/crc32.h
+--- linux-2.4.32/include/config/crc32.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crc32.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRC32
+diff -Nur linux-2.4.32/include/config/crosscompile.h linux-2.4.32.patched/include/config/crosscompile.h
+--- linux-2.4.32/include/config/crosscompile.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crosscompile.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CROSSCOMPILE 1
+diff -Nur linux-2.4.32/include/config/crypto/aes/module.h linux-2.4.32.patched/include/config/crypto/aes/module.h
+--- linux-2.4.32/include/config/crypto/aes/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/aes/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CRYPTO_AES_MODULE 1
+diff -Nur linux-2.4.32/include/config/crypto/aes.h linux-2.4.32.patched/include/config/crypto/aes.h
+--- linux-2.4.32/include/config/crypto/aes.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/aes.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_AES
+diff -Nur linux-2.4.32/include/config/crypto/anubis.h linux-2.4.32.patched/include/config/crypto/anubis.h
+--- linux-2.4.32/include/config/crypto/anubis.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/anubis.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_ANUBIS
+diff -Nur linux-2.4.32/include/config/crypto/arc4/module.h linux-2.4.32.patched/include/config/crypto/arc4/module.h
+--- linux-2.4.32/include/config/crypto/arc4/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/arc4/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CRYPTO_ARC4_MODULE 1
+diff -Nur linux-2.4.32/include/config/crypto/arc4.h linux-2.4.32.patched/include/config/crypto/arc4.h
+--- linux-2.4.32/include/config/crypto/arc4.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/arc4.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_ARC4
+diff -Nur linux-2.4.32/include/config/crypto/blowfish.h linux-2.4.32.patched/include/config/crypto/blowfish.h
+--- linux-2.4.32/include/config/crypto/blowfish.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/blowfish.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_BLOWFISH
+diff -Nur linux-2.4.32/include/config/crypto/cast5.h linux-2.4.32.patched/include/config/crypto/cast5.h
+--- linux-2.4.32/include/config/crypto/cast5.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/cast5.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_CAST5
+diff -Nur linux-2.4.32/include/config/crypto/cast6.h linux-2.4.32.patched/include/config/crypto/cast6.h
+--- linux-2.4.32/include/config/crypto/cast6.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/cast6.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_CAST6
+diff -Nur linux-2.4.32/include/config/crypto/deflate/module.h linux-2.4.32.patched/include/config/crypto/deflate/module.h
+--- linux-2.4.32/include/config/crypto/deflate/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/deflate/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CRYPTO_DEFLATE_MODULE 1
+diff -Nur linux-2.4.32/include/config/crypto/deflate.h linux-2.4.32.patched/include/config/crypto/deflate.h
+--- linux-2.4.32/include/config/crypto/deflate.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/deflate.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_DEFLATE
+diff -Nur linux-2.4.32/include/config/crypto/des/module.h linux-2.4.32.patched/include/config/crypto/des/module.h
+--- linux-2.4.32/include/config/crypto/des/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/des/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CRYPTO_DES_MODULE 1
+diff -Nur linux-2.4.32/include/config/crypto/des.h linux-2.4.32.patched/include/config/crypto/des.h
+--- linux-2.4.32/include/config/crypto/des.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/des.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_DES
+diff -Nur linux-2.4.32/include/config/crypto/hmac.h linux-2.4.32.patched/include/config/crypto/hmac.h
+--- linux-2.4.32/include/config/crypto/hmac.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/hmac.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CRYPTO_HMAC 1
+diff -Nur linux-2.4.32/include/config/crypto/khazad.h linux-2.4.32.patched/include/config/crypto/khazad.h
+--- linux-2.4.32/include/config/crypto/khazad.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/khazad.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_KHAZAD
+diff -Nur linux-2.4.32/include/config/crypto/md4.h linux-2.4.32.patched/include/config/crypto/md4.h
+--- linux-2.4.32/include/config/crypto/md4.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/md4.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_MD4
+diff -Nur linux-2.4.32/include/config/crypto/md5/module.h linux-2.4.32.patched/include/config/crypto/md5/module.h
+--- linux-2.4.32/include/config/crypto/md5/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/md5/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CRYPTO_MD5_MODULE 1
+diff -Nur linux-2.4.32/include/config/crypto/md5.h linux-2.4.32.patched/include/config/crypto/md5.h
+--- linux-2.4.32/include/config/crypto/md5.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/md5.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_MD5
+diff -Nur linux-2.4.32/include/config/crypto/michael/mic/module.h linux-2.4.32.patched/include/config/crypto/michael/mic/module.h
+--- linux-2.4.32/include/config/crypto/michael/mic/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/michael/mic/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CRYPTO_MICHAEL_MIC_MODULE 1
+diff -Nur linux-2.4.32/include/config/crypto/michael/mic.h linux-2.4.32.patched/include/config/crypto/michael/mic.h
+--- linux-2.4.32/include/config/crypto/michael/mic.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/michael/mic.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_MICHAEL_MIC
+diff -Nur linux-2.4.32/include/config/crypto/null.h linux-2.4.32.patched/include/config/crypto/null.h
+--- linux-2.4.32/include/config/crypto/null.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/null.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_NULL
+diff -Nur linux-2.4.32/include/config/crypto/serpent.h linux-2.4.32.patched/include/config/crypto/serpent.h
+--- linux-2.4.32/include/config/crypto/serpent.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/serpent.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_SERPENT
+diff -Nur linux-2.4.32/include/config/crypto/sha1/module.h linux-2.4.32.patched/include/config/crypto/sha1/module.h
+--- linux-2.4.32/include/config/crypto/sha1/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/sha1/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CRYPTO_SHA1_MODULE 1
+diff -Nur linux-2.4.32/include/config/crypto/sha1.h linux-2.4.32.patched/include/config/crypto/sha1.h
+--- linux-2.4.32/include/config/crypto/sha1.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/sha1.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_SHA1
+diff -Nur linux-2.4.32/include/config/crypto/sha256.h linux-2.4.32.patched/include/config/crypto/sha256.h
+--- linux-2.4.32/include/config/crypto/sha256.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/sha256.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_SHA256
+diff -Nur linux-2.4.32/include/config/crypto/sha512.h linux-2.4.32.patched/include/config/crypto/sha512.h
+--- linux-2.4.32/include/config/crypto/sha512.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/sha512.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_SHA512
+diff -Nur linux-2.4.32/include/config/crypto/tea.h linux-2.4.32.patched/include/config/crypto/tea.h
+--- linux-2.4.32/include/config/crypto/tea.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/tea.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_TEA
+diff -Nur linux-2.4.32/include/config/crypto/test.h linux-2.4.32.patched/include/config/crypto/test.h
+--- linux-2.4.32/include/config/crypto/test.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/test.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_TEST
+diff -Nur linux-2.4.32/include/config/crypto/twofish.h linux-2.4.32.patched/include/config/crypto/twofish.h
+--- linux-2.4.32/include/config/crypto/twofish.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/twofish.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_TWOFISH
+diff -Nur linux-2.4.32/include/config/crypto/wp512.h linux-2.4.32.patched/include/config/crypto/wp512.h
+--- linux-2.4.32/include/config/crypto/wp512.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto/wp512.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CRYPTO_WP512
+diff -Nur linux-2.4.32/include/config/crypto.h linux-2.4.32.patched/include/config/crypto.h
+--- linux-2.4.32/include/config/crypto.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/crypto.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_CRYPTO 1
+diff -Nur linux-2.4.32/include/config/cs89x0.h linux-2.4.32.patched/include/config/cs89x0.h
+--- linux-2.4.32/include/config/cs89x0.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/cs89x0.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_CS89x0
+diff -Nur linux-2.4.32/include/config/ddb5074.h linux-2.4.32.patched/include/config/ddb5074.h
+--- linux-2.4.32/include/config/ddb5074.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ddb5074.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DDB5074
+diff -Nur linux-2.4.32/include/config/ddb5476.h linux-2.4.32.patched/include/config/ddb5476.h
+--- linux-2.4.32/include/config/ddb5476.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ddb5476.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DDB5476
+diff -Nur linux-2.4.32/include/config/ddb5477.h linux-2.4.32.patched/include/config/ddb5477.h
+--- linux-2.4.32/include/config/ddb5477.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ddb5477.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DDB5477
+diff -Nur linux-2.4.32/include/config/de4x5.h linux-2.4.32.patched/include/config/de4x5.h
+--- linux-2.4.32/include/config/de4x5.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/de4x5.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DE4X5
+diff -Nur linux-2.4.32/include/config/debug/info.h linux-2.4.32.patched/include/config/debug/info.h
+--- linux-2.4.32/include/config/debug/info.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/debug/info.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DEBUG_INFO
+diff -Nur linux-2.4.32/include/config/decnet.h linux-2.4.32.patched/include/config/decnet.h
+--- linux-2.4.32/include/config/decnet.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/decnet.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DECNET
+diff -Nur linux-2.4.32/include/config/decstation.h linux-2.4.32.patched/include/config/decstation.h
+--- linux-2.4.32/include/config/decstation.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/decstation.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DECSTATION
+diff -Nur linux-2.4.32/include/config/devfs/debug.h linux-2.4.32.patched/include/config/devfs/debug.h
+--- linux-2.4.32/include/config/devfs/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/devfs/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DEVFS_DEBUG
+diff -Nur linux-2.4.32/include/config/devfs/fs.h linux-2.4.32.patched/include/config/devfs/fs.h
+--- linux-2.4.32/include/config/devfs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/devfs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_DEVFS_FS 1
+diff -Nur linux-2.4.32/include/config/devfs/mount.h linux-2.4.32.patched/include/config/devfs/mount.h
+--- linux-2.4.32/include/config/devfs/mount.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/devfs/mount.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_DEVFS_MOUNT 1
+diff -Nur linux-2.4.32/include/config/devpts/fs.h linux-2.4.32.patched/include/config/devpts/fs.h
+--- linux-2.4.32/include/config/devpts/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/devpts/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_DEVPTS_FS 1
+diff -Nur linux-2.4.32/include/config/dgrs.h linux-2.4.32.patched/include/config/dgrs.h
+--- linux-2.4.32/include/config/dgrs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/dgrs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DGRS
+diff -Nur linux-2.4.32/include/config/dl2k.h linux-2.4.32.patched/include/config/dl2k.h
+--- linux-2.4.32/include/config/dl2k.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/dl2k.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DL2K
+diff -Nur linux-2.4.32/include/config/dm9102.h linux-2.4.32.patched/include/config/dm9102.h
+--- linux-2.4.32/include/config/dm9102.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/dm9102.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DM9102
+diff -Nur linux-2.4.32/include/config/dma/nonpci.h linux-2.4.32.patched/include/config/dma/nonpci.h
+--- linux-2.4.32/include/config/dma/nonpci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/dma/nonpci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DMA_NONPCI
+diff -Nur linux-2.4.32/include/config/drm.h linux-2.4.32.patched/include/config/drm.h
+--- linux-2.4.32/include/config/drm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/drm.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DRM
+diff -Nur linux-2.4.32/include/config/dtlk.h linux-2.4.32.patched/include/config/dtlk.h
+--- linux-2.4.32/include/config/dtlk.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/dtlk.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DTLK
+diff -Nur linux-2.4.32/include/config/dummy.h linux-2.4.32.patched/include/config/dummy.h
+--- linux-2.4.32/include/config/dummy.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/dummy.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_DUMMY
+diff -Nur linux-2.4.32/include/config/e1000.h linux-2.4.32.patched/include/config/e1000.h
+--- linux-2.4.32/include/config/e1000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/e1000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_E1000
+diff -Nur linux-2.4.32/include/config/e100.h linux-2.4.32.patched/include/config/e100.h
+--- linux-2.4.32/include/config/e100.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/e100.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_E100
+diff -Nur linux-2.4.32/include/config/econet.h linux-2.4.32.patched/include/config/econet.h
+--- linux-2.4.32/include/config/econet.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/econet.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ECONET
+diff -Nur linux-2.4.32/include/config/eepro100/pio.h linux-2.4.32.patched/include/config/eepro100/pio.h
+--- linux-2.4.32/include/config/eepro100/pio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/eepro100/pio.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_EEPRO100_PIO
+diff -Nur linux-2.4.32/include/config/eepro100.h linux-2.4.32.patched/include/config/eepro100.h
+--- linux-2.4.32/include/config/eepro100.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/eepro100.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_EEPRO100
+diff -Nur linux-2.4.32/include/config/efi/partition.h linux-2.4.32.patched/include/config/efi/partition.h
+--- linux-2.4.32/include/config/efi/partition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/efi/partition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_EFI_PARTITION
+diff -Nur linux-2.4.32/include/config/efs/fs.h linux-2.4.32.patched/include/config/efs/fs.h
+--- linux-2.4.32/include/config/efs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/efs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_EFS_FS
+diff -Nur linux-2.4.32/include/config/epic100.h linux-2.4.32.patched/include/config/epic100.h
+--- linux-2.4.32/include/config/epic100.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/epic100.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_EPIC100
+diff -Nur linux-2.4.32/include/config/equalizer.h linux-2.4.32.patched/include/config/equalizer.h
+--- linux-2.4.32/include/config/equalizer.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/equalizer.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_EQUALIZER
+diff -Nur linux-2.4.32/include/config/es3210.h linux-2.4.32.patched/include/config/es3210.h
+--- linux-2.4.32/include/config/es3210.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/es3210.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ES3210
+diff -Nur linux-2.4.32/include/config/ethertap.h linux-2.4.32.patched/include/config/ethertap.h
+--- linux-2.4.32/include/config/ethertap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ethertap.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ETHERTAP
+diff -Nur linux-2.4.32/include/config/eurotech/wdt.h linux-2.4.32.patched/include/config/eurotech/wdt.h
+--- linux-2.4.32/include/config/eurotech/wdt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/eurotech/wdt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_EUROTECH_WDT
+diff -Nur linux-2.4.32/include/config/experimental.h linux-2.4.32.patched/include/config/experimental.h
+--- linux-2.4.32/include/config/experimental.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/experimental.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_EXPERIMENTAL 1
+diff -Nur linux-2.4.32/include/config/ext2/fs/module.h linux-2.4.32.patched/include/config/ext2/fs/module.h
+--- linux-2.4.32/include/config/ext2/fs/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ext2/fs/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_EXT2_FS_MODULE 1
+diff -Nur linux-2.4.32/include/config/ext2/fs.h linux-2.4.32.patched/include/config/ext2/fs.h
+--- linux-2.4.32/include/config/ext2/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ext2/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_EXT2_FS
+diff -Nur linux-2.4.32/include/config/ext3/fs/module.h linux-2.4.32.patched/include/config/ext3/fs/module.h
+--- linux-2.4.32/include/config/ext3/fs/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ext3/fs/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_EXT3_FS_MODULE 1
+diff -Nur linux-2.4.32/include/config/ext3/fs.h linux-2.4.32.patched/include/config/ext3/fs.h
+--- linux-2.4.32/include/config/ext3/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ext3/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_EXT3_FS
+diff -Nur linux-2.4.32/include/config/fat/fs/module.h linux-2.4.32.patched/include/config/fat/fs/module.h
+--- linux-2.4.32/include/config/fat/fs/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/fat/fs/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_FAT_FS_MODULE 1
+diff -Nur linux-2.4.32/include/config/fat/fs.h linux-2.4.32.patched/include/config/fat/fs.h
+--- linux-2.4.32/include/config/fat/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/fat/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_FAT_FS
+diff -Nur linux-2.4.32/include/config/fddi.h linux-2.4.32.patched/include/config/fddi.h
+--- linux-2.4.32/include/config/fddi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/fddi.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_FDDI
+diff -Nur linux-2.4.32/include/config/fealnx.h linux-2.4.32.patched/include/config/fealnx.h
+--- linux-2.4.32/include/config/fealnx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/fealnx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_FEALNX
+diff -Nur linux-2.4.32/include/config/filter.h linux-2.4.32.patched/include/config/filter.h
+--- linux-2.4.32/include/config/filter.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/filter.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_FILTER 1
+diff -Nur linux-2.4.32/include/config/forcedeth.h linux-2.4.32.patched/include/config/forcedeth.h
+--- linux-2.4.32/include/config/forcedeth.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/forcedeth.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_FORCEDETH
+diff -Nur linux-2.4.32/include/config/ftape.h linux-2.4.32.patched/include/config/ftape.h
+--- linux-2.4.32/include/config/ftape.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ftape.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_FTAPE
+diff -Nur linux-2.4.32/include/config/ftl.h linux-2.4.32.patched/include/config/ftl.h
+--- linux-2.4.32/include/config/ftl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ftl.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_FTL
+diff -Nur linux-2.4.32/include/config/fusion/boot.h linux-2.4.32.patched/include/config/fusion/boot.h
+--- linux-2.4.32/include/config/fusion/boot.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/fusion/boot.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_FUSION_BOOT
+diff -Nur linux-2.4.32/include/config/fusion/ctl.h linux-2.4.32.patched/include/config/fusion/ctl.h
+--- linux-2.4.32/include/config/fusion/ctl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/fusion/ctl.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_FUSION_CTL
+diff -Nur linux-2.4.32/include/config/fusion/isense.h linux-2.4.32.patched/include/config/fusion/isense.h
+--- linux-2.4.32/include/config/fusion/isense.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/fusion/isense.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_FUSION_ISENSE
+diff -Nur linux-2.4.32/include/config/fusion/lan.h linux-2.4.32.patched/include/config/fusion/lan.h
+--- linux-2.4.32/include/config/fusion/lan.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/fusion/lan.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_FUSION_LAN
+diff -Nur linux-2.4.32/include/config/fusion.h linux-2.4.32.patched/include/config/fusion.h
+--- linux-2.4.32/include/config/fusion.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/fusion.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_FUSION
+diff -Nur linux-2.4.32/include/config/fw/loader.h linux-2.4.32.patched/include/config/fw/loader.h
+--- linux-2.4.32/include/config/fw/loader.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/fw/loader.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_FW_LOADER
+diff -Nur linux-2.4.32/include/config/gdb/console.h linux-2.4.32.patched/include/config/gdb/console.h
+--- linux-2.4.32/include/config/gdb/console.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/gdb/console.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_GDB_CONSOLE
+diff -Nur linux-2.4.32/include/config/hamachi.h linux-2.4.32.patched/include/config/hamachi.h
+--- linux-2.4.32/include/config/hamachi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hamachi.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HAMACHI
+diff -Nur linux-2.4.32/include/config/hamradio.h linux-2.4.32.patched/include/config/hamradio.h
+--- linux-2.4.32/include/config/hamradio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hamradio.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_HAMRADIO 1
+diff -Nur linux-2.4.32/include/config/happymeal.h linux-2.4.32.patched/include/config/happymeal.h
+--- linux-2.4.32/include/config/happymeal.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/happymeal.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HAPPYMEAL
+diff -Nur linux-2.4.32/include/config/hermes.h linux-2.4.32.patched/include/config/hermes.h
+--- linux-2.4.32/include/config/hermes.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hermes.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HERMES
+diff -Nur linux-2.4.32/include/config/hfs/fs.h linux-2.4.32.patched/include/config/hfs/fs.h
+--- linux-2.4.32/include/config/hfs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hfs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HFS_FS
+diff -Nur linux-2.4.32/include/config/hfsplus/fs/module.h linux-2.4.32.patched/include/config/hfsplus/fs/module.h
+--- linux-2.4.32/include/config/hfsplus/fs/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hfsplus/fs/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_HFSPLUS_FS_MODULE 1
+diff -Nur linux-2.4.32/include/config/hfsplus/fs.h linux-2.4.32.patched/include/config/hfsplus/fs.h
+--- linux-2.4.32/include/config/hfsplus/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hfsplus/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HFSPLUS_FS
+diff -Nur linux-2.4.32/include/config/highmem.h linux-2.4.32.patched/include/config/highmem.h
+--- linux-2.4.32/include/config/highmem.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/highmem.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HIGHMEM
+diff -Nur linux-2.4.32/include/config/hippi.h linux-2.4.32.patched/include/config/hippi.h
+--- linux-2.4.32/include/config/hippi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hippi.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HIPPI
+diff -Nur linux-2.4.32/include/config/hnd.h linux-2.4.32.patched/include/config/hnd.h
+--- linux-2.4.32/include/config/hnd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hnd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_HND 1
+diff -Nur linux-2.4.32/include/config/hotplug/pci/compaq/nvram.h linux-2.4.32.patched/include/config/hotplug/pci/compaq/nvram.h
+--- linux-2.4.32/include/config/hotplug/pci/compaq/nvram.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hotplug/pci/compaq/nvram.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM
+diff -Nur linux-2.4.32/include/config/hotplug/pci/compaq.h linux-2.4.32.patched/include/config/hotplug/pci/compaq.h
+--- linux-2.4.32/include/config/hotplug/pci/compaq.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hotplug/pci/compaq.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HOTPLUG_PCI_COMPAQ
+diff -Nur linux-2.4.32/include/config/hotplug/pci/pcie/poll/event/mode.h linux-2.4.32.patched/include/config/hotplug/pci/pcie/poll/event/mode.h
+--- linux-2.4.32/include/config/hotplug/pci/pcie/poll/event/mode.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hotplug/pci/pcie/poll/event/mode.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE
+diff -Nur linux-2.4.32/include/config/hotplug/pci/pcie.h linux-2.4.32.patched/include/config/hotplug/pci/pcie.h
+--- linux-2.4.32/include/config/hotplug/pci/pcie.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hotplug/pci/pcie.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HOTPLUG_PCI_PCIE
+diff -Nur linux-2.4.32/include/config/hotplug/pci/shpc/poll/event/mode.h linux-2.4.32.patched/include/config/hotplug/pci/shpc/poll/event/mode.h
+--- linux-2.4.32/include/config/hotplug/pci/shpc/poll/event/mode.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hotplug/pci/shpc/poll/event/mode.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HOTPLUG_PCI_SHPC_POLL_EVENT_MODE
+diff -Nur linux-2.4.32/include/config/hotplug/pci/shpc.h linux-2.4.32.patched/include/config/hotplug/pci/shpc.h
+--- linux-2.4.32/include/config/hotplug/pci/shpc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hotplug/pci/shpc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HOTPLUG_PCI_SHPC
+diff -Nur linux-2.4.32/include/config/hotplug/pci.h linux-2.4.32.patched/include/config/hotplug/pci.h
+--- linux-2.4.32/include/config/hotplug/pci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hotplug/pci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HOTPLUG_PCI
+diff -Nur linux-2.4.32/include/config/hotplug.h linux-2.4.32.patched/include/config/hotplug.h
+--- linux-2.4.32/include/config/hotplug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hotplug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_HOTPLUG 1
+diff -Nur linux-2.4.32/include/config/hp/laserjet.h linux-2.4.32.patched/include/config/hp/laserjet.h
+--- linux-2.4.32/include/config/hp/laserjet.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hp/laserjet.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HP_LASERJET
+diff -Nur linux-2.4.32/include/config/hp100.h linux-2.4.32.patched/include/config/hp100.h
+--- linux-2.4.32/include/config/hp100.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hp100.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HP100
+diff -Nur linux-2.4.32/include/config/hpfs/fs.h linux-2.4.32.patched/include/config/hpfs/fs.h
+--- linux-2.4.32/include/config/hpfs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hpfs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HPFS_FS
+diff -Nur linux-2.4.32/include/config/hpt34x/autodma.h linux-2.4.32.patched/include/config/hpt34x/autodma.h
+--- linux-2.4.32/include/config/hpt34x/autodma.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/hpt34x/autodma.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_HPT34X_AUTODMA
+diff -Nur linux-2.4.32/include/config/i2c/parport.h linux-2.4.32.patched/include/config/i2c/parport.h
+--- linux-2.4.32/include/config/i2c/parport.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/i2c/parport.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_I2C_PARPORT
+diff -Nur linux-2.4.32/include/config/i2c.h linux-2.4.32.patched/include/config/i2c.h
+--- linux-2.4.32/include/config/i2c.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/i2c.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_I2C
+diff -Nur linux-2.4.32/include/config/i2o/block.h linux-2.4.32.patched/include/config/i2o/block.h
+--- linux-2.4.32/include/config/i2o/block.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/i2o/block.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_I2O_BLOCK
+diff -Nur linux-2.4.32/include/config/i2o/lan.h linux-2.4.32.patched/include/config/i2o/lan.h
+--- linux-2.4.32/include/config/i2o/lan.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/i2o/lan.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_I2O_LAN
+diff -Nur linux-2.4.32/include/config/i2o/pci.h linux-2.4.32.patched/include/config/i2o/pci.h
+--- linux-2.4.32/include/config/i2o/pci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/i2o/pci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_I2O_PCI
+diff -Nur linux-2.4.32/include/config/i2o/proc.h linux-2.4.32.patched/include/config/i2o/proc.h
+--- linux-2.4.32/include/config/i2o/proc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/i2o/proc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_I2O_PROC
+diff -Nur linux-2.4.32/include/config/i2o/scsi.h linux-2.4.32.patched/include/config/i2o/scsi.h
+--- linux-2.4.32/include/config/i2o/scsi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/i2o/scsi.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_I2O_SCSI
+diff -Nur linux-2.4.32/include/config/i2o.h linux-2.4.32.patched/include/config/i2o.h
+--- linux-2.4.32/include/config/i2o.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/i2o.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_I2O
+diff -Nur linux-2.4.32/include/config/i810/tco.h linux-2.4.32.patched/include/config/i810/tco.h
+--- linux-2.4.32/include/config/i810/tco.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/i810/tco.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_I810_TCO
+diff -Nur linux-2.4.32/include/config/i82092.h linux-2.4.32.patched/include/config/i82092.h
+--- linux-2.4.32/include/config/i82092.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/i82092.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_I82092
+diff -Nur linux-2.4.32/include/config/i82365.h linux-2.4.32.patched/include/config/i82365.h
+--- linux-2.4.32/include/config/i82365.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/i82365.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_I82365
+diff -Nur linux-2.4.32/include/config/ib700/wdt.h linux-2.4.32.patched/include/config/ib700/wdt.h
+--- linux-2.4.32/include/config/ib700/wdt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ib700/wdt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IB700_WDT
+diff -Nur linux-2.4.32/include/config/ibm/workpad.h linux-2.4.32.patched/include/config/ibm/workpad.h
+--- linux-2.4.32/include/config/ibm/workpad.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ibm/workpad.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IBM_WORKPAD
+diff -Nur linux-2.4.32/include/config/ide/chipsets.h linux-2.4.32.patched/include/config/ide/chipsets.h
+--- linux-2.4.32/include/config/ide/chipsets.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ide/chipsets.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IDE_CHIPSETS
+diff -Nur linux-2.4.32/include/config/ide/module.h linux-2.4.32.patched/include/config/ide/module.h
+--- linux-2.4.32/include/config/ide/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ide/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IDE_MODULE 1
+diff -Nur linux-2.4.32/include/config/ide/task/ioctl.h linux-2.4.32.patched/include/config/ide/task/ioctl.h
+--- linux-2.4.32/include/config/ide/task/ioctl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ide/task/ioctl.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IDE_TASK_IOCTL
+diff -Nur linux-2.4.32/include/config/idedisk/multi/mode.h linux-2.4.32.patched/include/config/idedisk/multi/mode.h
+--- linux-2.4.32/include/config/idedisk/multi/mode.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/idedisk/multi/mode.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IDEDISK_MULTI_MODE
+diff -Nur linux-2.4.32/include/config/idedisk/stroke.h linux-2.4.32.patched/include/config/idedisk/stroke.h
+--- linux-2.4.32/include/config/idedisk/stroke.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/idedisk/stroke.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IDEDISK_STROKE 1
+diff -Nur linux-2.4.32/include/config/idedma/auto.h linux-2.4.32.patched/include/config/idedma/auto.h
+--- linux-2.4.32/include/config/idedma/auto.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/idedma/auto.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IDEDMA_AUTO 1
+diff -Nur linux-2.4.32/include/config/idedma/ivb.h linux-2.4.32.patched/include/config/idedma/ivb.h
+--- linux-2.4.32/include/config/idedma/ivb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/idedma/ivb.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IDEDMA_IVB 1
+diff -Nur linux-2.4.32/include/config/idedma/onlydisk.h linux-2.4.32.patched/include/config/idedma/onlydisk.h
+--- linux-2.4.32/include/config/idedma/onlydisk.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/idedma/onlydisk.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IDEDMA_ONLYDISK
+diff -Nur linux-2.4.32/include/config/idedma/pci/auto.h linux-2.4.32.patched/include/config/idedma/pci/auto.h
+--- linux-2.4.32/include/config/idedma/pci/auto.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/idedma/pci/auto.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IDEDMA_PCI_AUTO 1
+diff -Nur linux-2.4.32/include/config/idedma/pci/wip.h linux-2.4.32.patched/include/config/idedma/pci/wip.h
+--- linux-2.4.32/include/config/idedma/pci/wip.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/idedma/pci/wip.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IDEDMA_PCI_WIP
+diff -Nur linux-2.4.32/include/config/ide.h linux-2.4.32.patched/include/config/ide.h
+--- linux-2.4.32/include/config/ide.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ide.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IDE
+diff -Nur linux-2.4.32/include/config/idepci/share/irq.h linux-2.4.32.patched/include/config/idepci/share/irq.h
+--- linux-2.4.32/include/config/idepci/share/irq.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/idepci/share/irq.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IDEPCI_SHARE_IRQ
+diff -Nur linux-2.4.32/include/config/ieee1394.h linux-2.4.32.patched/include/config/ieee1394.h
+--- linux-2.4.32/include/config/ieee1394.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ieee1394.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IEEE1394
+diff -Nur linux-2.4.32/include/config/imq/module.h linux-2.4.32.patched/include/config/imq/module.h
+--- linux-2.4.32/include/config/imq/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/imq/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IMQ_MODULE 1
+diff -Nur linux-2.4.32/include/config/imq.h linux-2.4.32.patched/include/config/imq.h
+--- linux-2.4.32/include/config/imq.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/imq.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IMQ
+diff -Nur linux-2.4.32/include/config/inet/ecn.h linux-2.4.32.patched/include/config/inet/ecn.h
+--- linux-2.4.32/include/config/inet/ecn.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/inet/ecn.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_INET_ECN
+diff -Nur linux-2.4.32/include/config/inet.h linux-2.4.32.patched/include/config/inet.h
+--- linux-2.4.32/include/config/inet.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/inet.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_INET 1
+diff -Nur linux-2.4.32/include/config/input/evdev.h linux-2.4.32.patched/include/config/input/evdev.h
+--- linux-2.4.32/include/config/input/evdev.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/input/evdev.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_INPUT_EVDEV
+diff -Nur linux-2.4.32/include/config/input/gameport.h linux-2.4.32.patched/include/config/input/gameport.h
+--- linux-2.4.32/include/config/input/gameport.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/input/gameport.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_INPUT_GAMEPORT
+diff -Nur linux-2.4.32/include/config/input/joydev.h linux-2.4.32.patched/include/config/input/joydev.h
+--- linux-2.4.32/include/config/input/joydev.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/input/joydev.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_INPUT_JOYDEV
+diff -Nur linux-2.4.32/include/config/input/keybdev.h linux-2.4.32.patched/include/config/input/keybdev.h
+--- linux-2.4.32/include/config/input/keybdev.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/input/keybdev.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_INPUT_KEYBDEV
+diff -Nur linux-2.4.32/include/config/input/mousedev.h linux-2.4.32.patched/include/config/input/mousedev.h
+--- linux-2.4.32/include/config/input/mousedev.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/input/mousedev.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_INPUT_MOUSEDEV
+diff -Nur linux-2.4.32/include/config/input/uinput.h linux-2.4.32.patched/include/config/input/uinput.h
+--- linux-2.4.32/include/config/input/uinput.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/input/uinput.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_INPUT_UINPUT
+diff -Nur linux-2.4.32/include/config/input.h linux-2.4.32.patched/include/config/input.h
+--- linux-2.4.32/include/config/input.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/input.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_INPUT
+diff -Nur linux-2.4.32/include/config/intermezzo/fs.h linux-2.4.32.patched/include/config/intermezzo/fs.h
+--- linux-2.4.32/include/config/intermezzo/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/intermezzo/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_INTERMEZZO_FS
+diff -Nur linux-2.4.32/include/config/ip/advanced/router.h linux-2.4.32.patched/include/config/ip/advanced/router.h
+--- linux-2.4.32/include/config/ip/advanced/router.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/advanced/router.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_ADVANCED_ROUTER 1
+diff -Nur linux-2.4.32/include/config/ip/mroute.h linux-2.4.32.patched/include/config/ip/mroute.h
+--- linux-2.4.32/include/config/ip/mroute.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/mroute.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_MROUTE
+diff -Nur linux-2.4.32/include/config/ip/multicast.h linux-2.4.32.patched/include/config/ip/multicast.h
+--- linux-2.4.32/include/config/ip/multicast.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/multicast.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_MULTICAST 1
+diff -Nur linux-2.4.32/include/config/ip/multiple/tables.h linux-2.4.32.patched/include/config/ip/multiple/tables.h
+--- linux-2.4.32/include/config/ip/multiple/tables.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/multiple/tables.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_MULTIPLE_TABLES 1
+diff -Nur linux-2.4.32/include/config/ip/nf/amanda/module.h linux-2.4.32.patched/include/config/ip/nf/amanda/module.h
+--- linux-2.4.32/include/config/ip/nf/amanda/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/amanda/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_AMANDA_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/amanda.h linux-2.4.32.patched/include/config/ip/nf/amanda.h
+--- linux-2.4.32/include/config/ip/nf/amanda.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/amanda.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_AMANDA
+diff -Nur linux-2.4.32/include/config/ip/nf/arp/mangle/module.h linux-2.4.32.patched/include/config/ip/nf/arp/mangle/module.h
+--- linux-2.4.32/include/config/ip/nf/arp/mangle/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/arp/mangle/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_ARP_MANGLE_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/arp/mangle.h linux-2.4.32.patched/include/config/ip/nf/arp/mangle.h
+--- linux-2.4.32/include/config/ip/nf/arp/mangle.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/arp/mangle.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_ARP_MANGLE
+diff -Nur linux-2.4.32/include/config/ip/nf/arpfilter/module.h linux-2.4.32.patched/include/config/ip/nf/arpfilter/module.h
+--- linux-2.4.32/include/config/ip/nf/arpfilter/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/arpfilter/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_ARPFILTER_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/arpfilter.h linux-2.4.32.patched/include/config/ip/nf/arpfilter.h
+--- linux-2.4.32/include/config/ip/nf/arpfilter.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/arpfilter.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_ARPFILTER
+diff -Nur linux-2.4.32/include/config/ip/nf/arptables/module.h linux-2.4.32.patched/include/config/ip/nf/arptables/module.h
+--- linux-2.4.32/include/config/ip/nf/arptables/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/arptables/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_ARPTABLES_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/arptables.h linux-2.4.32.patched/include/config/ip/nf/arptables.h
+--- linux-2.4.32/include/config/ip/nf/arptables.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/arptables.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_ARPTABLES
+diff -Nur linux-2.4.32/include/config/ip/nf/conntrack/mark.h linux-2.4.32.patched/include/config/ip/nf/conntrack/mark.h
+--- linux-2.4.32/include/config/ip/nf/conntrack/mark.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/conntrack/mark.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_CONNTRACK_MARK 1
+diff -Nur linux-2.4.32/include/config/ip/nf/conntrack.h linux-2.4.32.patched/include/config/ip/nf/conntrack.h
+--- linux-2.4.32/include/config/ip/nf/conntrack.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/conntrack.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_CONNTRACK 1
+diff -Nur linux-2.4.32/include/config/ip/nf/ct/acct/module.h linux-2.4.32.patched/include/config/ip/nf/ct/acct/module.h
+--- linux-2.4.32/include/config/ip/nf/ct/acct/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/ct/acct/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_CT_ACCT_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/ct/acct.h linux-2.4.32.patched/include/config/ip/nf/ct/acct.h
+--- linux-2.4.32/include/config/ip/nf/ct/acct.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/ct/acct.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_CT_ACCT
+diff -Nur linux-2.4.32/include/config/ip/nf/ct/proto/gre/module.h linux-2.4.32.patched/include/config/ip/nf/ct/proto/gre/module.h
+--- linux-2.4.32/include/config/ip/nf/ct/proto/gre/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/ct/proto/gre/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_CT_PROTO_GRE_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/ct/proto/gre.h linux-2.4.32.patched/include/config/ip/nf/ct/proto/gre.h
+--- linux-2.4.32/include/config/ip/nf/ct/proto/gre.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/ct/proto/gre.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_CT_PROTO_GRE
+diff -Nur linux-2.4.32/include/config/ip/nf/filter.h linux-2.4.32.patched/include/config/ip/nf/filter.h
+--- linux-2.4.32/include/config/ip/nf/filter.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/filter.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_FILTER 1
+diff -Nur linux-2.4.32/include/config/ip/nf/ftp.h linux-2.4.32.patched/include/config/ip/nf/ftp.h
+--- linux-2.4.32/include/config/ip/nf/ftp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/ftp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_FTP 1
+diff -Nur linux-2.4.32/include/config/ip/nf/h323/module.h linux-2.4.32.patched/include/config/ip/nf/h323/module.h
+--- linux-2.4.32/include/config/ip/nf/h323/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/h323/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_H323_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/h323.h linux-2.4.32.patched/include/config/ip/nf/h323.h
+--- linux-2.4.32/include/config/ip/nf/h323.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/h323.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_H323
+diff -Nur linux-2.4.32/include/config/ip/nf/iptables.h linux-2.4.32.patched/include/config/ip/nf/iptables.h
+--- linux-2.4.32/include/config/ip/nf/iptables.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/iptables.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_IPTABLES 1
+diff -Nur linux-2.4.32/include/config/ip/nf/irc.h linux-2.4.32.patched/include/config/ip/nf/irc.h
+--- linux-2.4.32/include/config/ip/nf/irc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/irc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_IRC 1
+diff -Nur linux-2.4.32/include/config/ip/nf/mangle.h linux-2.4.32.patched/include/config/ip/nf/mangle.h
+--- linux-2.4.32/include/config/ip/nf/mangle.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/mangle.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MANGLE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/ah/esp/module.h linux-2.4.32.patched/include/config/ip/nf/match/ah/esp/module.h
+--- linux-2.4.32/include/config/ip/nf/match/ah/esp/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/ah/esp/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_AH_ESP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/ah/esp.h linux-2.4.32.patched/include/config/ip/nf/match/ah/esp.h
+--- linux-2.4.32/include/config/ip/nf/match/ah/esp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/ah/esp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_AH_ESP
+diff -Nur linux-2.4.32/include/config/ip/nf/match/condition/module.h linux-2.4.32.patched/include/config/ip/nf/match/condition/module.h
+--- linux-2.4.32/include/config/ip/nf/match/condition/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/condition/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_CONDITION_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/condition.h linux-2.4.32.patched/include/config/ip/nf/match/condition.h
+--- linux-2.4.32/include/config/ip/nf/match/condition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/condition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_CONDITION
+diff -Nur linux-2.4.32/include/config/ip/nf/match/connbytes/module.h linux-2.4.32.patched/include/config/ip/nf/match/connbytes/module.h
+--- linux-2.4.32/include/config/ip/nf/match/connbytes/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/connbytes/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_CONNBYTES_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/connbytes.h linux-2.4.32.patched/include/config/ip/nf/match/connbytes.h
+--- linux-2.4.32/include/config/ip/nf/match/connbytes.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/connbytes.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_CONNBYTES
+diff -Nur linux-2.4.32/include/config/ip/nf/match/connmark/module.h linux-2.4.32.patched/include/config/ip/nf/match/connmark/module.h
+--- linux-2.4.32/include/config/ip/nf/match/connmark/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/connmark/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_CONNMARK_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/connmark.h linux-2.4.32.patched/include/config/ip/nf/match/connmark.h
+--- linux-2.4.32/include/config/ip/nf/match/connmark.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/connmark.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_CONNMARK
+diff -Nur linux-2.4.32/include/config/ip/nf/match/conntrack/module.h linux-2.4.32.patched/include/config/ip/nf/match/conntrack/module.h
+--- linux-2.4.32/include/config/ip/nf/match/conntrack/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/conntrack/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_CONNTRACK_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/conntrack.h linux-2.4.32.patched/include/config/ip/nf/match/conntrack.h
+--- linux-2.4.32/include/config/ip/nf/match/conntrack.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/conntrack.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_CONNTRACK
+diff -Nur linux-2.4.32/include/config/ip/nf/match/dscp/module.h linux-2.4.32.patched/include/config/ip/nf/match/dscp/module.h
+--- linux-2.4.32/include/config/ip/nf/match/dscp/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/dscp/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_DSCP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/dscp.h linux-2.4.32.patched/include/config/ip/nf/match/dscp.h
+--- linux-2.4.32/include/config/ip/nf/match/dscp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/dscp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_DSCP
+diff -Nur linux-2.4.32/include/config/ip/nf/match/ecn/module.h linux-2.4.32.patched/include/config/ip/nf/match/ecn/module.h
+--- linux-2.4.32/include/config/ip/nf/match/ecn/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/ecn/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_ECN_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/ecn.h linux-2.4.32.patched/include/config/ip/nf/match/ecn.h
+--- linux-2.4.32/include/config/ip/nf/match/ecn.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/ecn.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_ECN
+diff -Nur linux-2.4.32/include/config/ip/nf/match/helper/module.h linux-2.4.32.patched/include/config/ip/nf/match/helper/module.h
+--- linux-2.4.32/include/config/ip/nf/match/helper/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/helper/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_HELPER_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/helper.h linux-2.4.32.patched/include/config/ip/nf/match/helper.h
+--- linux-2.4.32/include/config/ip/nf/match/helper.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/helper.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_HELPER
+diff -Nur linux-2.4.32/include/config/ip/nf/match/ipp2p/module.h linux-2.4.32.patched/include/config/ip/nf/match/ipp2p/module.h
+--- linux-2.4.32/include/config/ip/nf/match/ipp2p/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/ipp2p/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_IPP2P_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/ipp2p.h linux-2.4.32.patched/include/config/ip/nf/match/ipp2p.h
+--- linux-2.4.32/include/config/ip/nf/match/ipp2p.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/ipp2p.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_IPP2P
+diff -Nur linux-2.4.32/include/config/ip/nf/match/layer7/debug.h linux-2.4.32.patched/include/config/ip/nf/match/layer7/debug.h
+--- linux-2.4.32/include/config/ip/nf/match/layer7/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/layer7/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_LAYER7_DEBUG
+diff -Nur linux-2.4.32/include/config/ip/nf/match/layer7/module.h linux-2.4.32.patched/include/config/ip/nf/match/layer7/module.h
+--- linux-2.4.32/include/config/ip/nf/match/layer7/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/layer7/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_LAYER7_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/layer7.h linux-2.4.32.patched/include/config/ip/nf/match/layer7.h
+--- linux-2.4.32/include/config/ip/nf/match/layer7.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/layer7.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_LAYER7
+diff -Nur linux-2.4.32/include/config/ip/nf/match/length/module.h linux-2.4.32.patched/include/config/ip/nf/match/length/module.h
+--- linux-2.4.32/include/config/ip/nf/match/length/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/length/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_LENGTH_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/length.h linux-2.4.32.patched/include/config/ip/nf/match/length.h
+--- linux-2.4.32/include/config/ip/nf/match/length.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/length.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_LENGTH
+diff -Nur linux-2.4.32/include/config/ip/nf/match/limit/module.h linux-2.4.32.patched/include/config/ip/nf/match/limit/module.h
+--- linux-2.4.32/include/config/ip/nf/match/limit/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/limit/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_LIMIT_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/limit.h linux-2.4.32.patched/include/config/ip/nf/match/limit.h
+--- linux-2.4.32/include/config/ip/nf/match/limit.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/limit.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_LIMIT
+diff -Nur linux-2.4.32/include/config/ip/nf/match/mac/module.h linux-2.4.32.patched/include/config/ip/nf/match/mac/module.h
+--- linux-2.4.32/include/config/ip/nf/match/mac/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/mac/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_MAC_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/mac.h linux-2.4.32.patched/include/config/ip/nf/match/mac.h
+--- linux-2.4.32/include/config/ip/nf/match/mac.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/mac.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_MAC
+diff -Nur linux-2.4.32/include/config/ip/nf/match/mark.h linux-2.4.32.patched/include/config/ip/nf/match/mark.h
+--- linux-2.4.32/include/config/ip/nf/match/mark.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/mark.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_MARK 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/multiport.h linux-2.4.32.patched/include/config/ip/nf/match/multiport.h
+--- linux-2.4.32/include/config/ip/nf/match/multiport.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/multiport.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_MULTIPORT 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/owner/module.h linux-2.4.32.patched/include/config/ip/nf/match/owner/module.h
+--- linux-2.4.32/include/config/ip/nf/match/owner/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/owner/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_OWNER_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/owner.h linux-2.4.32.patched/include/config/ip/nf/match/owner.h
+--- linux-2.4.32/include/config/ip/nf/match/owner.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/owner.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_OWNER
+diff -Nur linux-2.4.32/include/config/ip/nf/match/pkttype/module.h linux-2.4.32.patched/include/config/ip/nf/match/pkttype/module.h
+--- linux-2.4.32/include/config/ip/nf/match/pkttype/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/pkttype/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_PKTTYPE_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/pkttype.h linux-2.4.32.patched/include/config/ip/nf/match/pkttype.h
+--- linux-2.4.32/include/config/ip/nf/match/pkttype.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/pkttype.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_PKTTYPE
+diff -Nur linux-2.4.32/include/config/ip/nf/match/quota/module.h linux-2.4.32.patched/include/config/ip/nf/match/quota/module.h
+--- linux-2.4.32/include/config/ip/nf/match/quota/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/quota/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_QUOTA_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/quota.h linux-2.4.32.patched/include/config/ip/nf/match/quota.h
+--- linux-2.4.32/include/config/ip/nf/match/quota.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/quota.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_QUOTA
+diff -Nur linux-2.4.32/include/config/ip/nf/match/recent/module.h linux-2.4.32.patched/include/config/ip/nf/match/recent/module.h
+--- linux-2.4.32/include/config/ip/nf/match/recent/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/recent/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_RECENT_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/recent.h linux-2.4.32.patched/include/config/ip/nf/match/recent.h
+--- linux-2.4.32/include/config/ip/nf/match/recent.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/recent.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_RECENT
+diff -Nur linux-2.4.32/include/config/ip/nf/match/set/module.h linux-2.4.32.patched/include/config/ip/nf/match/set/module.h
+--- linux-2.4.32/include/config/ip/nf/match/set/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/set/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_SET_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/set.h linux-2.4.32.patched/include/config/ip/nf/match/set.h
+--- linux-2.4.32/include/config/ip/nf/match/set.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/set.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_SET
+diff -Nur linux-2.4.32/include/config/ip/nf/match/state.h linux-2.4.32.patched/include/config/ip/nf/match/state.h
+--- linux-2.4.32/include/config/ip/nf/match/state.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/state.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_STATE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/string/module.h linux-2.4.32.patched/include/config/ip/nf/match/string/module.h
+--- linux-2.4.32/include/config/ip/nf/match/string/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/string/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_STRING_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/string.h linux-2.4.32.patched/include/config/ip/nf/match/string.h
+--- linux-2.4.32/include/config/ip/nf/match/string.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/string.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_STRING
+diff -Nur linux-2.4.32/include/config/ip/nf/match/tcpmss/module.h linux-2.4.32.patched/include/config/ip/nf/match/tcpmss/module.h
+--- linux-2.4.32/include/config/ip/nf/match/tcpmss/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/tcpmss/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_TCPMSS_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/tcpmss.h linux-2.4.32.patched/include/config/ip/nf/match/tcpmss.h
+--- linux-2.4.32/include/config/ip/nf/match/tcpmss.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/tcpmss.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_TCPMSS
+diff -Nur linux-2.4.32/include/config/ip/nf/match/time/module.h linux-2.4.32.patched/include/config/ip/nf/match/time/module.h
+--- linux-2.4.32/include/config/ip/nf/match/time/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/time/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_TIME_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/time.h linux-2.4.32.patched/include/config/ip/nf/match/time.h
+--- linux-2.4.32/include/config/ip/nf/match/time.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/time.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_TIME
+diff -Nur linux-2.4.32/include/config/ip/nf/match/tos/module.h linux-2.4.32.patched/include/config/ip/nf/match/tos/module.h
+--- linux-2.4.32/include/config/ip/nf/match/tos/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/tos/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_TOS_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/tos.h linux-2.4.32.patched/include/config/ip/nf/match/tos.h
+--- linux-2.4.32/include/config/ip/nf/match/tos.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/tos.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_TOS
+diff -Nur linux-2.4.32/include/config/ip/nf/match/ttl/module.h linux-2.4.32.patched/include/config/ip/nf/match/ttl/module.h
+--- linux-2.4.32/include/config/ip/nf/match/ttl/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/ttl/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_TTL_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/ttl.h linux-2.4.32.patched/include/config/ip/nf/match/ttl.h
+--- linux-2.4.32/include/config/ip/nf/match/ttl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/ttl.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_TTL
+diff -Nur linux-2.4.32/include/config/ip/nf/match/unclean/module.h linux-2.4.32.patched/include/config/ip/nf/match/unclean/module.h
+--- linux-2.4.32/include/config/ip/nf/match/unclean/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/unclean/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MATCH_UNCLEAN_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/match/unclean.h linux-2.4.32.patched/include/config/ip/nf/match/unclean.h
+--- linux-2.4.32/include/config/ip/nf/match/unclean.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/match/unclean.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MATCH_UNCLEAN
+diff -Nur linux-2.4.32/include/config/ip/nf/mms/module.h linux-2.4.32.patched/include/config/ip/nf/mms/module.h
+--- linux-2.4.32/include/config/ip/nf/mms/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/mms/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_MMS_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/mms.h linux-2.4.32.patched/include/config/ip/nf/mms.h
+--- linux-2.4.32/include/config/ip/nf/mms.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/mms.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_MMS
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/amanda/module.h linux-2.4.32.patched/include/config/ip/nf/nat/amanda/module.h
+--- linux-2.4.32/include/config/ip/nf/nat/amanda/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/amanda/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_NAT_AMANDA_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/amanda.h linux-2.4.32.patched/include/config/ip/nf/nat/amanda.h
+--- linux-2.4.32/include/config/ip/nf/nat/amanda.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/amanda.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_NAT_AMANDA
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/ftp.h linux-2.4.32.patched/include/config/ip/nf/nat/ftp.h
+--- linux-2.4.32/include/config/ip/nf/nat/ftp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/ftp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_NAT_FTP 1
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/h323/module.h linux-2.4.32.patched/include/config/ip/nf/nat/h323/module.h
+--- linux-2.4.32/include/config/ip/nf/nat/h323/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/h323/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_NAT_H323_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/h323.h linux-2.4.32.patched/include/config/ip/nf/nat/h323.h
+--- linux-2.4.32/include/config/ip/nf/nat/h323.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/h323.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_NAT_H323
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/irc.h linux-2.4.32.patched/include/config/ip/nf/nat/irc.h
+--- linux-2.4.32/include/config/ip/nf/nat/irc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/irc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_NAT_IRC 1
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/mms/module.h linux-2.4.32.patched/include/config/ip/nf/nat/mms/module.h
+--- linux-2.4.32/include/config/ip/nf/nat/mms/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/mms/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_NAT_MMS_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/mms.h linux-2.4.32.patched/include/config/ip/nf/nat/mms.h
+--- linux-2.4.32/include/config/ip/nf/nat/mms.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/mms.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_NAT_MMS
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/needed.h linux-2.4.32.patched/include/config/ip/nf/nat/needed.h
+--- linux-2.4.32/include/config/ip/nf/nat/needed.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/needed.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_NAT_NEEDED 1
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/pptp/module.h linux-2.4.32.patched/include/config/ip/nf/nat/pptp/module.h
+--- linux-2.4.32/include/config/ip/nf/nat/pptp/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/pptp/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_NAT_PPTP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/pptp.h linux-2.4.32.patched/include/config/ip/nf/nat/pptp.h
+--- linux-2.4.32/include/config/ip/nf/nat/pptp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/pptp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_NAT_PPTP
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/proto/gre/module.h linux-2.4.32.patched/include/config/ip/nf/nat/proto/gre/module.h
+--- linux-2.4.32/include/config/ip/nf/nat/proto/gre/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/proto/gre/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_NAT_PROTO_GRE_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/proto/gre.h linux-2.4.32.patched/include/config/ip/nf/nat/proto/gre.h
+--- linux-2.4.32/include/config/ip/nf/nat/proto/gre.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/proto/gre.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_NAT_PROTO_GRE
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/rtsp/module.h linux-2.4.32.patched/include/config/ip/nf/nat/rtsp/module.h
+--- linux-2.4.32/include/config/ip/nf/nat/rtsp/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/rtsp/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_NAT_RTSP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/rtsp.h linux-2.4.32.patched/include/config/ip/nf/nat/rtsp.h
+--- linux-2.4.32/include/config/ip/nf/nat/rtsp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/rtsp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_NAT_RTSP
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/snmp/basic/module.h linux-2.4.32.patched/include/config/ip/nf/nat/snmp/basic/module.h
+--- linux-2.4.32/include/config/ip/nf/nat/snmp/basic/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/snmp/basic/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_NAT_SNMP_BASIC_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/snmp/basic.h linux-2.4.32.patched/include/config/ip/nf/nat/snmp/basic.h
+--- linux-2.4.32/include/config/ip/nf/nat/snmp/basic.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/snmp/basic.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_NAT_SNMP_BASIC
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/tftp/module.h linux-2.4.32.patched/include/config/ip/nf/nat/tftp/module.h
+--- linux-2.4.32/include/config/ip/nf/nat/tftp/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/tftp/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_NAT_TFTP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/nat/tftp.h linux-2.4.32.patched/include/config/ip/nf/nat/tftp.h
+--- linux-2.4.32/include/config/ip/nf/nat/tftp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat/tftp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_NAT_TFTP
+diff -Nur linux-2.4.32/include/config/ip/nf/nat.h linux-2.4.32.patched/include/config/ip/nf/nat.h
+--- linux-2.4.32/include/config/ip/nf/nat.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/nat.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_NAT 1
+diff -Nur linux-2.4.32/include/config/ip/nf/pptp/module.h linux-2.4.32.patched/include/config/ip/nf/pptp/module.h
+--- linux-2.4.32/include/config/ip/nf/pptp/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/pptp/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_PPTP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/pptp.h linux-2.4.32.patched/include/config/ip/nf/pptp.h
+--- linux-2.4.32/include/config/ip/nf/pptp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/pptp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_PPTP
+diff -Nur linux-2.4.32/include/config/ip/nf/queue/module.h linux-2.4.32.patched/include/config/ip/nf/queue/module.h
+--- linux-2.4.32/include/config/ip/nf/queue/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/queue/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_QUEUE_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/queue.h linux-2.4.32.patched/include/config/ip/nf/queue.h
+--- linux-2.4.32/include/config/ip/nf/queue.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/queue.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_QUEUE
+diff -Nur linux-2.4.32/include/config/ip/nf/rtsp/module.h linux-2.4.32.patched/include/config/ip/nf/rtsp/module.h
+--- linux-2.4.32/include/config/ip/nf/rtsp/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/rtsp/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_RTSP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/rtsp.h linux-2.4.32.patched/include/config/ip/nf/rtsp.h
+--- linux-2.4.32/include/config/ip/nf/rtsp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/rtsp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_RTSP
+diff -Nur linux-2.4.32/include/config/ip/nf/set/hashsize.h linux-2.4.32.patched/include/config/ip/nf/set/hashsize.h
+--- linux-2.4.32/include/config/ip/nf/set/hashsize.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/hashsize.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_SET_HASHSIZE (1024)
+diff -Nur linux-2.4.32/include/config/ip/nf/set/iphash/module.h linux-2.4.32.patched/include/config/ip/nf/set/iphash/module.h
+--- linux-2.4.32/include/config/ip/nf/set/iphash/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/iphash/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_SET_IPHASH_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/set/iphash.h linux-2.4.32.patched/include/config/ip/nf/set/iphash.h
+--- linux-2.4.32/include/config/ip/nf/set/iphash.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/iphash.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_SET_IPHASH
+diff -Nur linux-2.4.32/include/config/ip/nf/set/ipmap/module.h linux-2.4.32.patched/include/config/ip/nf/set/ipmap/module.h
+--- linux-2.4.32/include/config/ip/nf/set/ipmap/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/ipmap/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_SET_IPMAP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/set/ipmap.h linux-2.4.32.patched/include/config/ip/nf/set/ipmap.h
+--- linux-2.4.32/include/config/ip/nf/set/ipmap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/ipmap.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_SET_IPMAP
+diff -Nur linux-2.4.32/include/config/ip/nf/set/iptree/module.h linux-2.4.32.patched/include/config/ip/nf/set/iptree/module.h
+--- linux-2.4.32/include/config/ip/nf/set/iptree/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/iptree/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_SET_IPTREE_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/set/iptree.h linux-2.4.32.patched/include/config/ip/nf/set/iptree.h
+--- linux-2.4.32/include/config/ip/nf/set/iptree.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/iptree.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_SET_IPTREE
+diff -Nur linux-2.4.32/include/config/ip/nf/set/macipmap/module.h linux-2.4.32.patched/include/config/ip/nf/set/macipmap/module.h
+--- linux-2.4.32/include/config/ip/nf/set/macipmap/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/macipmap/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_SET_MACIPMAP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/set/macipmap.h linux-2.4.32.patched/include/config/ip/nf/set/macipmap.h
+--- linux-2.4.32/include/config/ip/nf/set/macipmap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/macipmap.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_SET_MACIPMAP
+diff -Nur linux-2.4.32/include/config/ip/nf/set/max.h linux-2.4.32.patched/include/config/ip/nf/set/max.h
+--- linux-2.4.32/include/config/ip/nf/set/max.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/max.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_SET_MAX (256)
+diff -Nur linux-2.4.32/include/config/ip/nf/set/module.h linux-2.4.32.patched/include/config/ip/nf/set/module.h
+--- linux-2.4.32/include/config/ip/nf/set/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_SET_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/set/nethash/module.h linux-2.4.32.patched/include/config/ip/nf/set/nethash/module.h
+--- linux-2.4.32/include/config/ip/nf/set/nethash/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/nethash/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_SET_NETHASH_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/set/nethash.h linux-2.4.32.patched/include/config/ip/nf/set/nethash.h
+--- linux-2.4.32/include/config/ip/nf/set/nethash.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/nethash.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_SET_NETHASH
+diff -Nur linux-2.4.32/include/config/ip/nf/set/portmap/module.h linux-2.4.32.patched/include/config/ip/nf/set/portmap/module.h
+--- linux-2.4.32/include/config/ip/nf/set/portmap/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/portmap/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_SET_PORTMAP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/set/portmap.h linux-2.4.32.patched/include/config/ip/nf/set/portmap.h
+--- linux-2.4.32/include/config/ip/nf/set/portmap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set/portmap.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_SET_PORTMAP
+diff -Nur linux-2.4.32/include/config/ip/nf/set.h linux-2.4.32.patched/include/config/ip/nf/set.h
+--- linux-2.4.32/include/config/ip/nf/set.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/set.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_SET
+diff -Nur linux-2.4.32/include/config/ip/nf/target/connmark/module.h linux-2.4.32.patched/include/config/ip/nf/target/connmark/module.h
+--- linux-2.4.32/include/config/ip/nf/target/connmark/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/connmark/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_CONNMARK_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/connmark.h linux-2.4.32.patched/include/config/ip/nf/target/connmark.h
+--- linux-2.4.32/include/config/ip/nf/target/connmark.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/connmark.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_TARGET_CONNMARK
+diff -Nur linux-2.4.32/include/config/ip/nf/target/dscp/module.h linux-2.4.32.patched/include/config/ip/nf/target/dscp/module.h
+--- linux-2.4.32/include/config/ip/nf/target/dscp/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/dscp/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_DSCP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/dscp.h linux-2.4.32.patched/include/config/ip/nf/target/dscp.h
+--- linux-2.4.32/include/config/ip/nf/target/dscp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/dscp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_TARGET_DSCP
+diff -Nur linux-2.4.32/include/config/ip/nf/target/ecn/module.h linux-2.4.32.patched/include/config/ip/nf/target/ecn/module.h
+--- linux-2.4.32/include/config/ip/nf/target/ecn/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/ecn/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_ECN_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/ecn.h linux-2.4.32.patched/include/config/ip/nf/target/ecn.h
+--- linux-2.4.32/include/config/ip/nf/target/ecn.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/ecn.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_TARGET_ECN
+diff -Nur linux-2.4.32/include/config/ip/nf/target/imq/module.h linux-2.4.32.patched/include/config/ip/nf/target/imq/module.h
+--- linux-2.4.32/include/config/ip/nf/target/imq/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/imq/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_IMQ_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/imq.h linux-2.4.32.patched/include/config/ip/nf/target/imq.h
+--- linux-2.4.32/include/config/ip/nf/target/imq.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/imq.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_TARGET_IMQ
+diff -Nur linux-2.4.32/include/config/ip/nf/target/log/module.h linux-2.4.32.patched/include/config/ip/nf/target/log/module.h
+--- linux-2.4.32/include/config/ip/nf/target/log/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/log/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_LOG_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/log.h linux-2.4.32.patched/include/config/ip/nf/target/log.h
+--- linux-2.4.32/include/config/ip/nf/target/log.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/log.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_TARGET_LOG
+diff -Nur linux-2.4.32/include/config/ip/nf/target/mark.h linux-2.4.32.patched/include/config/ip/nf/target/mark.h
+--- linux-2.4.32/include/config/ip/nf/target/mark.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/mark.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_MARK 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/masquerade.h linux-2.4.32.patched/include/config/ip/nf/target/masquerade.h
+--- linux-2.4.32/include/config/ip/nf/target/masquerade.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/masquerade.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_MASQUERADE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/mirror/module.h linux-2.4.32.patched/include/config/ip/nf/target/mirror/module.h
+--- linux-2.4.32/include/config/ip/nf/target/mirror/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/mirror/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_MIRROR_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/mirror.h linux-2.4.32.patched/include/config/ip/nf/target/mirror.h
+--- linux-2.4.32/include/config/ip/nf/target/mirror.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/mirror.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_TARGET_MIRROR
+diff -Nur linux-2.4.32/include/config/ip/nf/target/netmap/module.h linux-2.4.32.patched/include/config/ip/nf/target/netmap/module.h
+--- linux-2.4.32/include/config/ip/nf/target/netmap/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/netmap/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_NETMAP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/netmap.h linux-2.4.32.patched/include/config/ip/nf/target/netmap.h
+--- linux-2.4.32/include/config/ip/nf/target/netmap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/netmap.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_TARGET_NETMAP
+diff -Nur linux-2.4.32/include/config/ip/nf/target/redirect/module.h linux-2.4.32.patched/include/config/ip/nf/target/redirect/module.h
+--- linux-2.4.32/include/config/ip/nf/target/redirect/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/redirect/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_REDIRECT_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/redirect.h linux-2.4.32.patched/include/config/ip/nf/target/redirect.h
+--- linux-2.4.32/include/config/ip/nf/target/redirect.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/redirect.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_TARGET_REDIRECT
+diff -Nur linux-2.4.32/include/config/ip/nf/target/reject.h linux-2.4.32.patched/include/config/ip/nf/target/reject.h
+--- linux-2.4.32/include/config/ip/nf/target/reject.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/reject.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_REJECT 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/set/module.h linux-2.4.32.patched/include/config/ip/nf/target/set/module.h
+--- linux-2.4.32/include/config/ip/nf/target/set/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/set/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_SET_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/set.h linux-2.4.32.patched/include/config/ip/nf/target/set.h
+--- linux-2.4.32/include/config/ip/nf/target/set.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/set.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_TARGET_SET
+diff -Nur linux-2.4.32/include/config/ip/nf/target/tcpmss.h linux-2.4.32.patched/include/config/ip/nf/target/tcpmss.h
+--- linux-2.4.32/include/config/ip/nf/target/tcpmss.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/tcpmss.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_TCPMSS 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/tos/module.h linux-2.4.32.patched/include/config/ip/nf/target/tos/module.h
+--- linux-2.4.32/include/config/ip/nf/target/tos/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/tos/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_TOS_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/tos.h linux-2.4.32.patched/include/config/ip/nf/target/tos.h
+--- linux-2.4.32/include/config/ip/nf/target/tos.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/tos.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_TARGET_TOS
+diff -Nur linux-2.4.32/include/config/ip/nf/target/ttl/module.h linux-2.4.32.patched/include/config/ip/nf/target/ttl/module.h
+--- linux-2.4.32/include/config/ip/nf/target/ttl/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/ttl/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_TTL_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/ttl.h linux-2.4.32.patched/include/config/ip/nf/target/ttl.h
+--- linux-2.4.32/include/config/ip/nf/target/ttl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/ttl.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_TARGET_TTL
+diff -Nur linux-2.4.32/include/config/ip/nf/target/ulog/module.h linux-2.4.32.patched/include/config/ip/nf/target/ulog/module.h
+--- linux-2.4.32/include/config/ip/nf/target/ulog/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/ulog/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TARGET_ULOG_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/target/ulog.h linux-2.4.32.patched/include/config/ip/nf/target/ulog.h
+--- linux-2.4.32/include/config/ip/nf/target/ulog.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/target/ulog.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_TARGET_ULOG
+diff -Nur linux-2.4.32/include/config/ip/nf/tftp/module.h linux-2.4.32.patched/include/config/ip/nf/tftp/module.h
+--- linux-2.4.32/include/config/ip/nf/tftp/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/tftp/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_NF_TFTP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/nf/tftp.h linux-2.4.32.patched/include/config/ip/nf/tftp.h
+--- linux-2.4.32/include/config/ip/nf/tftp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/nf/tftp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_NF_TFTP
+diff -Nur linux-2.4.32/include/config/ip/pnp.h linux-2.4.32.patched/include/config/ip/pnp.h
+--- linux-2.4.32/include/config/ip/pnp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/pnp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_PNP
+diff -Nur linux-2.4.32/include/config/ip/route/fwmark.h linux-2.4.32.patched/include/config/ip/route/fwmark.h
+--- linux-2.4.32/include/config/ip/route/fwmark.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/route/fwmark.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_ROUTE_FWMARK 1
+diff -Nur linux-2.4.32/include/config/ip/route/multipath.h linux-2.4.32.patched/include/config/ip/route/multipath.h
+--- linux-2.4.32/include/config/ip/route/multipath.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/route/multipath.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_ROUTE_MULTIPATH 1
+diff -Nur linux-2.4.32/include/config/ip/route/nat.h linux-2.4.32.patched/include/config/ip/route/nat.h
+--- linux-2.4.32/include/config/ip/route/nat.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/route/nat.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_ROUTE_NAT 1
+diff -Nur linux-2.4.32/include/config/ip/route/tos.h linux-2.4.32.patched/include/config/ip/route/tos.h
+--- linux-2.4.32/include/config/ip/route/tos.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/route/tos.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_ROUTE_TOS 1
+diff -Nur linux-2.4.32/include/config/ip/route/verbose.h linux-2.4.32.patched/include/config/ip/route/verbose.h
+--- linux-2.4.32/include/config/ip/route/verbose.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/route/verbose.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_ROUTE_VERBOSE
+diff -Nur linux-2.4.32/include/config/ip/sctp.h linux-2.4.32.patched/include/config/ip/sctp.h
+--- linux-2.4.32/include/config/ip/sctp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/sctp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_SCTP
+diff -Nur linux-2.4.32/include/config/ip/vs/debug.h linux-2.4.32.patched/include/config/ip/vs/debug.h
+--- linux-2.4.32/include/config/ip/vs/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_VS_DEBUG
+diff -Nur linux-2.4.32/include/config/ip/vs/dh/module.h linux-2.4.32.patched/include/config/ip/vs/dh/module.h
+--- linux-2.4.32/include/config/ip/vs/dh/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/dh/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_VS_DH_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/vs/dh.h linux-2.4.32.patched/include/config/ip/vs/dh.h
+--- linux-2.4.32/include/config/ip/vs/dh.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/dh.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_VS_DH
+diff -Nur linux-2.4.32/include/config/ip/vs/ftp/module.h linux-2.4.32.patched/include/config/ip/vs/ftp/module.h
+--- linux-2.4.32/include/config/ip/vs/ftp/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/ftp/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_VS_FTP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/vs/ftp.h linux-2.4.32.patched/include/config/ip/vs/ftp.h
+--- linux-2.4.32/include/config/ip/vs/ftp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/ftp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_VS_FTP
+diff -Nur linux-2.4.32/include/config/ip/vs/lblc/module.h linux-2.4.32.patched/include/config/ip/vs/lblc/module.h
+--- linux-2.4.32/include/config/ip/vs/lblc/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/lblc/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_VS_LBLC_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/vs/lblc.h linux-2.4.32.patched/include/config/ip/vs/lblc.h
+--- linux-2.4.32/include/config/ip/vs/lblc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/lblc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_VS_LBLC
+diff -Nur linux-2.4.32/include/config/ip/vs/lblcr/module.h linux-2.4.32.patched/include/config/ip/vs/lblcr/module.h
+--- linux-2.4.32/include/config/ip/vs/lblcr/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/lblcr/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_VS_LBLCR_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/vs/lblcr.h linux-2.4.32.patched/include/config/ip/vs/lblcr.h
+--- linux-2.4.32/include/config/ip/vs/lblcr.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/lblcr.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_VS_LBLCR
+diff -Nur linux-2.4.32/include/config/ip/vs/lc/module.h linux-2.4.32.patched/include/config/ip/vs/lc/module.h
+--- linux-2.4.32/include/config/ip/vs/lc/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/lc/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_VS_LC_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/vs/lc.h linux-2.4.32.patched/include/config/ip/vs/lc.h
+--- linux-2.4.32/include/config/ip/vs/lc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/lc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_VS_LC
+diff -Nur linux-2.4.32/include/config/ip/vs/module.h linux-2.4.32.patched/include/config/ip/vs/module.h
+--- linux-2.4.32/include/config/ip/vs/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_VS_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/vs/nq/module.h linux-2.4.32.patched/include/config/ip/vs/nq/module.h
+--- linux-2.4.32/include/config/ip/vs/nq/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/nq/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_VS_NQ_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/vs/nq.h linux-2.4.32.patched/include/config/ip/vs/nq.h
+--- linux-2.4.32/include/config/ip/vs/nq.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/nq.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_VS_NQ
+diff -Nur linux-2.4.32/include/config/ip/vs/rr/module.h linux-2.4.32.patched/include/config/ip/vs/rr/module.h
+--- linux-2.4.32/include/config/ip/vs/rr/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/rr/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_VS_RR_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/vs/rr.h linux-2.4.32.patched/include/config/ip/vs/rr.h
+--- linux-2.4.32/include/config/ip/vs/rr.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/rr.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_VS_RR
+diff -Nur linux-2.4.32/include/config/ip/vs/sed/module.h linux-2.4.32.patched/include/config/ip/vs/sed/module.h
+--- linux-2.4.32/include/config/ip/vs/sed/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/sed/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_VS_SED_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/vs/sed.h linux-2.4.32.patched/include/config/ip/vs/sed.h
+--- linux-2.4.32/include/config/ip/vs/sed.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/sed.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_VS_SED
+diff -Nur linux-2.4.32/include/config/ip/vs/sh/module.h linux-2.4.32.patched/include/config/ip/vs/sh/module.h
+--- linux-2.4.32/include/config/ip/vs/sh/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/sh/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_VS_SH_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/vs/sh.h linux-2.4.32.patched/include/config/ip/vs/sh.h
+--- linux-2.4.32/include/config/ip/vs/sh.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/sh.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_VS_SH
+diff -Nur linux-2.4.32/include/config/ip/vs/tab/bits.h linux-2.4.32.patched/include/config/ip/vs/tab/bits.h
+--- linux-2.4.32/include/config/ip/vs/tab/bits.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/tab/bits.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_VS_TAB_BITS (12)
+diff -Nur linux-2.4.32/include/config/ip/vs/wlc/module.h linux-2.4.32.patched/include/config/ip/vs/wlc/module.h
+--- linux-2.4.32/include/config/ip/vs/wlc/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/wlc/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_VS_WLC_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/vs/wlc.h linux-2.4.32.patched/include/config/ip/vs/wlc.h
+--- linux-2.4.32/include/config/ip/vs/wlc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/wlc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_VS_WLC
+diff -Nur linux-2.4.32/include/config/ip/vs/wrr/module.h linux-2.4.32.patched/include/config/ip/vs/wrr/module.h
+--- linux-2.4.32/include/config/ip/vs/wrr/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/wrr/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP_VS_WRR_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip/vs/wrr.h linux-2.4.32.patched/include/config/ip/vs/wrr.h
+--- linux-2.4.32/include/config/ip/vs/wrr.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs/wrr.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_VS_WRR
+diff -Nur linux-2.4.32/include/config/ip/vs.h linux-2.4.32.patched/include/config/ip/vs.h
+--- linux-2.4.32/include/config/ip/vs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip/vs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP_VS
+diff -Nur linux-2.4.32/include/config/ip6/nf/filter/module.h linux-2.4.32.patched/include/config/ip6/nf/filter/module.h
+--- linux-2.4.32/include/config/ip6/nf/filter/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/filter/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_FILTER_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/filter.h linux-2.4.32.patched/include/config/ip6/nf/filter.h
+--- linux-2.4.32/include/config/ip6/nf/filter.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/filter.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_FILTER
+diff -Nur linux-2.4.32/include/config/ip6/nf/iptables/module.h linux-2.4.32.patched/include/config/ip6/nf/iptables/module.h
+--- linux-2.4.32/include/config/ip6/nf/iptables/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/iptables/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_IPTABLES_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/iptables.h linux-2.4.32.patched/include/config/ip6/nf/iptables.h
+--- linux-2.4.32/include/config/ip6/nf/iptables.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/iptables.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_IPTABLES
+diff -Nur linux-2.4.32/include/config/ip6/nf/mangle/module.h linux-2.4.32.patched/include/config/ip6/nf/mangle/module.h
+--- linux-2.4.32/include/config/ip6/nf/mangle/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/mangle/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_MANGLE_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/mangle.h linux-2.4.32.patched/include/config/ip6/nf/mangle.h
+--- linux-2.4.32/include/config/ip6/nf/mangle.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/mangle.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MANGLE
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/ahesp.h linux-2.4.32.patched/include/config/ip6/nf/match/ahesp.h
+--- linux-2.4.32/include/config/ip6/nf/match/ahesp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/ahesp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MATCH_AHESP
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/condition/module.h linux-2.4.32.patched/include/config/ip6/nf/match/condition/module.h
+--- linux-2.4.32/include/config/ip6/nf/match/condition/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/condition/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_MATCH_CONDITION_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/condition.h linux-2.4.32.patched/include/config/ip6/nf/match/condition.h
+--- linux-2.4.32/include/config/ip6/nf/match/condition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/condition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MATCH_CONDITION
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/eui64/module.h linux-2.4.32.patched/include/config/ip6/nf/match/eui64/module.h
+--- linux-2.4.32/include/config/ip6/nf/match/eui64/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/eui64/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_MATCH_EUI64_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/eui64.h linux-2.4.32.patched/include/config/ip6/nf/match/eui64.h
+--- linux-2.4.32/include/config/ip6/nf/match/eui64.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/eui64.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MATCH_EUI64
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/frag.h linux-2.4.32.patched/include/config/ip6/nf/match/frag.h
+--- linux-2.4.32/include/config/ip6/nf/match/frag.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/frag.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MATCH_FRAG
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/hl.h linux-2.4.32.patched/include/config/ip6/nf/match/hl.h
+--- linux-2.4.32/include/config/ip6/nf/match/hl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/hl.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MATCH_HL
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/ipv6header.h linux-2.4.32.patched/include/config/ip6/nf/match/ipv6header.h
+--- linux-2.4.32/include/config/ip6/nf/match/ipv6header.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/ipv6header.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MATCH_IPV6HEADER
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/length/module.h linux-2.4.32.patched/include/config/ip6/nf/match/length/module.h
+--- linux-2.4.32/include/config/ip6/nf/match/length/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/length/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_MATCH_LENGTH_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/length.h linux-2.4.32.patched/include/config/ip6/nf/match/length.h
+--- linux-2.4.32/include/config/ip6/nf/match/length.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/length.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MATCH_LENGTH
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/limit/module.h linux-2.4.32.patched/include/config/ip6/nf/match/limit/module.h
+--- linux-2.4.32/include/config/ip6/nf/match/limit/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/limit/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_MATCH_LIMIT_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/limit.h linux-2.4.32.patched/include/config/ip6/nf/match/limit.h
+--- linux-2.4.32/include/config/ip6/nf/match/limit.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/limit.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MATCH_LIMIT
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/mac/module.h linux-2.4.32.patched/include/config/ip6/nf/match/mac/module.h
+--- linux-2.4.32/include/config/ip6/nf/match/mac/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/mac/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_MATCH_MAC_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/mac.h linux-2.4.32.patched/include/config/ip6/nf/match/mac.h
+--- linux-2.4.32/include/config/ip6/nf/match/mac.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/mac.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MATCH_MAC
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/mark/module.h linux-2.4.32.patched/include/config/ip6/nf/match/mark/module.h
+--- linux-2.4.32/include/config/ip6/nf/match/mark/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/mark/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_MATCH_MARK_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/mark.h linux-2.4.32.patched/include/config/ip6/nf/match/mark.h
+--- linux-2.4.32/include/config/ip6/nf/match/mark.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/mark.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MATCH_MARK
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/multiport/module.h linux-2.4.32.patched/include/config/ip6/nf/match/multiport/module.h
+--- linux-2.4.32/include/config/ip6/nf/match/multiport/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/multiport/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_MATCH_MULTIPORT_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/multiport.h linux-2.4.32.patched/include/config/ip6/nf/match/multiport.h
+--- linux-2.4.32/include/config/ip6/nf/match/multiport.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/multiport.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MATCH_MULTIPORT
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/opts.h linux-2.4.32.patched/include/config/ip6/nf/match/opts.h
+--- linux-2.4.32/include/config/ip6/nf/match/opts.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/opts.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MATCH_OPTS
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/owner/module.h linux-2.4.32.patched/include/config/ip6/nf/match/owner/module.h
+--- linux-2.4.32/include/config/ip6/nf/match/owner/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/owner/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_MATCH_OWNER_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/owner.h linux-2.4.32.patched/include/config/ip6/nf/match/owner.h
+--- linux-2.4.32/include/config/ip6/nf/match/owner.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/owner.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MATCH_OWNER
+diff -Nur linux-2.4.32/include/config/ip6/nf/match/rt.h linux-2.4.32.patched/include/config/ip6/nf/match/rt.h
+--- linux-2.4.32/include/config/ip6/nf/match/rt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/match/rt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_MATCH_RT
+diff -Nur linux-2.4.32/include/config/ip6/nf/queue/module.h linux-2.4.32.patched/include/config/ip6/nf/queue/module.h
+--- linux-2.4.32/include/config/ip6/nf/queue/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/queue/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_QUEUE_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/queue.h linux-2.4.32.patched/include/config/ip6/nf/queue.h
+--- linux-2.4.32/include/config/ip6/nf/queue.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/queue.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_QUEUE
+diff -Nur linux-2.4.32/include/config/ip6/nf/target/imq/module.h linux-2.4.32.patched/include/config/ip6/nf/target/imq/module.h
+--- linux-2.4.32/include/config/ip6/nf/target/imq/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/target/imq/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_TARGET_IMQ_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/target/imq.h linux-2.4.32.patched/include/config/ip6/nf/target/imq.h
+--- linux-2.4.32/include/config/ip6/nf/target/imq.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/target/imq.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_TARGET_IMQ
+diff -Nur linux-2.4.32/include/config/ip6/nf/target/log/module.h linux-2.4.32.patched/include/config/ip6/nf/target/log/module.h
+--- linux-2.4.32/include/config/ip6/nf/target/log/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/target/log/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_TARGET_LOG_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/target/log.h linux-2.4.32.patched/include/config/ip6/nf/target/log.h
+--- linux-2.4.32/include/config/ip6/nf/target/log.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/target/log.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_TARGET_LOG
+diff -Nur linux-2.4.32/include/config/ip6/nf/target/mark/module.h linux-2.4.32.patched/include/config/ip6/nf/target/mark/module.h
+--- linux-2.4.32/include/config/ip6/nf/target/mark/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/target/mark/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IP6_NF_TARGET_MARK_MODULE 1
+diff -Nur linux-2.4.32/include/config/ip6/nf/target/mark.h linux-2.4.32.patched/include/config/ip6/nf/target/mark.h
+--- linux-2.4.32/include/config/ip6/nf/target/mark.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ip6/nf/target/mark.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IP6_NF_TARGET_MARK
+diff -Nur linux-2.4.32/include/config/ipmi/device/interface.h linux-2.4.32.patched/include/config/ipmi/device/interface.h
+--- linux-2.4.32/include/config/ipmi/device/interface.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ipmi/device/interface.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IPMI_DEVICE_INTERFACE
+diff -Nur linux-2.4.32/include/config/ipmi/handler.h linux-2.4.32.patched/include/config/ipmi/handler.h
+--- linux-2.4.32/include/config/ipmi/handler.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ipmi/handler.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IPMI_HANDLER
+diff -Nur linux-2.4.32/include/config/ipmi/kcs.h linux-2.4.32.patched/include/config/ipmi/kcs.h
+--- linux-2.4.32/include/config/ipmi/kcs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ipmi/kcs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IPMI_KCS
+diff -Nur linux-2.4.32/include/config/ipmi/panic/event.h linux-2.4.32.patched/include/config/ipmi/panic/event.h
+--- linux-2.4.32/include/config/ipmi/panic/event.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ipmi/panic/event.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IPMI_PANIC_EVENT
+diff -Nur linux-2.4.32/include/config/ipmi/watchdog.h linux-2.4.32.patched/include/config/ipmi/watchdog.h
+--- linux-2.4.32/include/config/ipmi/watchdog.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ipmi/watchdog.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IPMI_WATCHDOG
+diff -Nur linux-2.4.32/include/config/ipsec/nat/traversal.h linux-2.4.32.patched/include/config/ipsec/nat/traversal.h
+--- linux-2.4.32/include/config/ipsec/nat/traversal.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ipsec/nat/traversal.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IPSEC_NAT_TRAVERSAL 1
+diff -Nur linux-2.4.32/include/config/ipv6/module.h linux-2.4.32.patched/include/config/ipv6/module.h
+--- linux-2.4.32/include/config/ipv6/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ipv6/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_IPV6_MODULE 1
+diff -Nur linux-2.4.32/include/config/ipv6.h linux-2.4.32.patched/include/config/ipv6.h
+--- linux-2.4.32/include/config/ipv6.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ipv6.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IPV6
+diff -Nur linux-2.4.32/include/config/ipx.h linux-2.4.32.patched/include/config/ipx.h
+--- linux-2.4.32/include/config/ipx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ipx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IPX
+diff -Nur linux-2.4.32/include/config/irda.h linux-2.4.32.patched/include/config/irda.h
+--- linux-2.4.32/include/config/irda.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/irda.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_IRDA
+diff -Nur linux-2.4.32/include/config/isa.h linux-2.4.32.patched/include/config/isa.h
+--- linux-2.4.32/include/config/isa.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/isa.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ISA
+diff -Nur linux-2.4.32/include/config/isapnp.h linux-2.4.32.patched/include/config/isapnp.h
+--- linux-2.4.32/include/config/isapnp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/isapnp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ISAPNP
+diff -Nur linux-2.4.32/include/config/isdn.h linux-2.4.32.patched/include/config/isdn.h
+--- linux-2.4.32/include/config/isdn.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/isdn.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ISDN
+diff -Nur linux-2.4.32/include/config/iso9660/fs/module.h linux-2.4.32.patched/include/config/iso9660/fs/module.h
+--- linux-2.4.32/include/config/iso9660/fs/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/iso9660/fs/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_ISO9660_FS_MODULE 1
+diff -Nur linux-2.4.32/include/config/iso9660/fs.h linux-2.4.32.patched/include/config/iso9660/fs.h
+--- linux-2.4.32/include/config/iso9660/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/iso9660/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ISO9660_FS
+diff -Nur linux-2.4.32/include/config/jbd/debug.h linux-2.4.32.patched/include/config/jbd/debug.h
+--- linux-2.4.32/include/config/jbd/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/jbd/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_JBD_DEBUG
+diff -Nur linux-2.4.32/include/config/jbd/module.h linux-2.4.32.patched/include/config/jbd/module.h
+--- linux-2.4.32/include/config/jbd/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/jbd/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_JBD_MODULE 1
+diff -Nur linux-2.4.32/include/config/jbd.h linux-2.4.32.patched/include/config/jbd.h
+--- linux-2.4.32/include/config/jbd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/jbd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_JBD
+diff -Nur linux-2.4.32/include/config/jffs/fs.h linux-2.4.32.patched/include/config/jffs/fs.h
+--- linux-2.4.32/include/config/jffs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/jffs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_JFFS_FS
+diff -Nur linux-2.4.32/include/config/jffs2/bbc/armlib.h linux-2.4.32.patched/include/config/jffs2/bbc/armlib.h
+--- linux-2.4.32/include/config/jffs2/bbc/armlib.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/jffs2/bbc/armlib.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_JFFS2_BBC_ARMLIB
+diff -Nur linux-2.4.32/include/config/jffs2/bbc/lzari.h linux-2.4.32.patched/include/config/jffs2/bbc/lzari.h
+--- linux-2.4.32/include/config/jffs2/bbc/lzari.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/jffs2/bbc/lzari.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_JFFS2_BBC_LZARI 1
+diff -Nur linux-2.4.32/include/config/jffs2/bbc/lzhd.h linux-2.4.32.patched/include/config/jffs2/bbc/lzhd.h
+--- linux-2.4.32/include/config/jffs2/bbc/lzhd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/jffs2/bbc/lzhd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_JFFS2_BBC_LZHD
+diff -Nur linux-2.4.32/include/config/jffs2/bbc/lzo.h linux-2.4.32.patched/include/config/jffs2/bbc/lzo.h
+--- linux-2.4.32/include/config/jffs2/bbc/lzo.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/jffs2/bbc/lzo.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_JFFS2_BBC_LZO
+diff -Nur linux-2.4.32/include/config/jffs2/bbc/lzss.h linux-2.4.32.patched/include/config/jffs2/bbc/lzss.h
+--- linux-2.4.32/include/config/jffs2/bbc/lzss.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/jffs2/bbc/lzss.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_JFFS2_BBC_LZSS
+diff -Nur linux-2.4.32/include/config/jffs2/fs/debug.h linux-2.4.32.patched/include/config/jffs2/fs/debug.h
+--- linux-2.4.32/include/config/jffs2/fs/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/jffs2/fs/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_JFFS2_FS_DEBUG (0)
+diff -Nur linux-2.4.32/include/config/jffs2/fs.h linux-2.4.32.patched/include/config/jffs2/fs.h
+--- linux-2.4.32/include/config/jffs2/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/jffs2/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_JFFS2_FS 1
+diff -Nur linux-2.4.32/include/config/jfs/debug.h linux-2.4.32.patched/include/config/jfs/debug.h
+--- linux-2.4.32/include/config/jfs/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/jfs/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_JFS_DEBUG
+diff -Nur linux-2.4.32/include/config/jfs/fs.h linux-2.4.32.patched/include/config/jfs/fs.h
+--- linux-2.4.32/include/config/jfs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/jfs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_JFS_FS
+diff -Nur linux-2.4.32/include/config/jfs/statistics.h linux-2.4.32.patched/include/config/jfs/statistics.h
+--- linux-2.4.32/include/config/jfs/statistics.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/jfs/statistics.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_JFS_STATISTICS
+diff -Nur linux-2.4.32/include/config/joliet.h linux-2.4.32.patched/include/config/joliet.h
+--- linux-2.4.32/include/config/joliet.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/joliet.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_JOLIET 1
+diff -Nur linux-2.4.32/include/config/kcore/aout.h linux-2.4.32.patched/include/config/kcore/aout.h
+--- linux-2.4.32/include/config/kcore/aout.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/kcore/aout.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_KCORE_AOUT
+diff -Nur linux-2.4.32/include/config/kcore/elf.h linux-2.4.32.patched/include/config/kcore/elf.h
+--- linux-2.4.32/include/config/kcore/elf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/kcore/elf.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_KCORE_ELF 1
+diff -Nur linux-2.4.32/include/config/khttpd.h linux-2.4.32.patched/include/config/khttpd.h
+--- linux-2.4.32/include/config/khttpd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/khttpd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_KHTTPD
+diff -Nur linux-2.4.32/include/config/kmod.h linux-2.4.32.patched/include/config/kmod.h
+--- linux-2.4.32/include/config/kmod.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/kmod.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_KMOD
+diff -Nur linux-2.4.32/include/config/lan/saa9730.h linux-2.4.32.patched/include/config/lan/saa9730.h
+--- linux-2.4.32/include/config/lan/saa9730.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/lan/saa9730.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_LAN_SAA9730
+diff -Nur linux-2.4.32/include/config/lance.h linux-2.4.32.patched/include/config/lance.h
+--- linux-2.4.32/include/config/lance.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/lance.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_LANCE
+diff -Nur linux-2.4.32/include/config/lapb.h linux-2.4.32.patched/include/config/lapb.h
+--- linux-2.4.32/include/config/lapb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/lapb.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_LAPB
+diff -Nur linux-2.4.32/include/config/lasat.h linux-2.4.32.patched/include/config/lasat.h
+--- linux-2.4.32/include/config/lasat.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/lasat.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_LASAT
+diff -Nur linux-2.4.32/include/config/ldm/partition.h linux-2.4.32.patched/include/config/ldm/partition.h
+--- linux-2.4.32/include/config/ldm/partition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ldm/partition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_LDM_PARTITION
+diff -Nur linux-2.4.32/include/config/llc.h linux-2.4.32.patched/include/config/llc.h
+--- linux-2.4.32/include/config/llc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/llc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_LLC
+diff -Nur linux-2.4.32/include/config/lne390.h linux-2.4.32.patched/include/config/lne390.h
+--- linux-2.4.32/include/config/lne390.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/lne390.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_LNE390
+diff -Nur linux-2.4.32/include/config/lockd/module.h linux-2.4.32.patched/include/config/lockd/module.h
+--- linux-2.4.32/include/config/lockd/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/lockd/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_LOCKD_MODULE 1
+diff -Nur linux-2.4.32/include/config/lockd/v4.h linux-2.4.32.patched/include/config/lockd/v4.h
+--- linux-2.4.32/include/config/lockd/v4.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/lockd/v4.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_LOCKD_V4 1
+diff -Nur linux-2.4.32/include/config/lockd.h linux-2.4.32.patched/include/config/lockd.h
+--- linux-2.4.32/include/config/lockd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/lockd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_LOCKD
+diff -Nur linux-2.4.32/include/config/log/buf/shift.h linux-2.4.32.patched/include/config/log/buf/shift.h
+--- linux-2.4.32/include/config/log/buf/shift.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/log/buf/shift.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_LOG_BUF_SHIFT (0)
+diff -Nur linux-2.4.32/include/config/lp/console.h linux-2.4.32.patched/include/config/lp/console.h
+--- linux-2.4.32/include/config/lp/console.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/lp/console.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_LP_CONSOLE
+diff -Nur linux-2.4.32/include/config/mac/partition.h linux-2.4.32.patched/include/config/mac/partition.h
+--- linux-2.4.32/include/config/mac/partition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mac/partition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MAC_PARTITION 1
+diff -Nur linux-2.4.32/include/config/machz/wdt.h linux-2.4.32.patched/include/config/machz/wdt.h
+--- linux-2.4.32/include/config/machz/wdt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/machz/wdt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MACHZ_WDT
+diff -Nur linux-2.4.32/include/config/magic/sysrq.h linux-2.4.32.patched/include/config/magic/sysrq.h
+--- linux-2.4.32/include/config/magic/sysrq.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/magic/sysrq.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MAGIC_SYSRQ 1
+diff -Nur linux-2.4.32/include/config/mca.h linux-2.4.32.patched/include/config/mca.h
+--- linux-2.4.32/include/config/mca.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mca.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MCA
+diff -Nur linux-2.4.32/include/config/md/linear.h linux-2.4.32.patched/include/config/md/linear.h
+--- linux-2.4.32/include/config/md/linear.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/md/linear.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MD_LINEAR
+diff -Nur linux-2.4.32/include/config/md/multipath.h linux-2.4.32.patched/include/config/md/multipath.h
+--- linux-2.4.32/include/config/md/multipath.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/md/multipath.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MD_MULTIPATH
+diff -Nur linux-2.4.32/include/config/md/raid0.h linux-2.4.32.patched/include/config/md/raid0.h
+--- linux-2.4.32/include/config/md/raid0.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/md/raid0.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MD_RAID0
+diff -Nur linux-2.4.32/include/config/md/raid1.h linux-2.4.32.patched/include/config/md/raid1.h
+--- linux-2.4.32/include/config/md/raid1.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/md/raid1.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MD_RAID1
+diff -Nur linux-2.4.32/include/config/md/raid5.h linux-2.4.32.patched/include/config/md/raid5.h
+--- linux-2.4.32/include/config/md/raid5.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/md/raid5.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MD_RAID5
+diff -Nur linux-2.4.32/include/config/md.h linux-2.4.32.patched/include/config/md.h
+--- linux-2.4.32/include/config/md.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/md.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MD
+diff -Nur linux-2.4.32/include/config/midi/emu10k1.h linux-2.4.32.patched/include/config/midi/emu10k1.h
+--- linux-2.4.32/include/config/midi/emu10k1.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/midi/emu10k1.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIDI_EMU10K1
+diff -Nur linux-2.4.32/include/config/midi/via82cxxx.h linux-2.4.32.patched/include/config/midi/via82cxxx.h
+--- linux-2.4.32/include/config/midi/via82cxxx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/midi/via82cxxx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIDI_VIA82CXXX
+diff -Nur linux-2.4.32/include/config/minix/fs/module.h linux-2.4.32.patched/include/config/minix/fs/module.h
+--- linux-2.4.32/include/config/minix/fs/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/minix/fs/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MINIX_FS_MODULE 1
+diff -Nur linux-2.4.32/include/config/minix/fs.h linux-2.4.32.patched/include/config/minix/fs.h
+--- linux-2.4.32/include/config/minix/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/minix/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MINIX_FS
+diff -Nur linux-2.4.32/include/config/minix/subpartition.h linux-2.4.32.patched/include/config/minix/subpartition.h
+--- linux-2.4.32/include/config/minix/subpartition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/minix/subpartition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MINIX_SUBPARTITION
+diff -Nur linux-2.4.32/include/config/mips/atlas.h linux-2.4.32.patched/include/config/mips/atlas.h
+--- linux-2.4.32/include/config/mips/atlas.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/atlas.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_ATLAS
+diff -Nur linux-2.4.32/include/config/mips/au1000.h linux-2.4.32.patched/include/config/mips/au1000.h
+--- linux-2.4.32/include/config/mips/au1000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/au1000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_AU1000
+diff -Nur linux-2.4.32/include/config/mips/bosporus.h linux-2.4.32.patched/include/config/mips/bosporus.h
+--- linux-2.4.32/include/config/mips/bosporus.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/bosporus.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_BOSPORUS
+diff -Nur linux-2.4.32/include/config/mips/brcm.h linux-2.4.32.patched/include/config/mips/brcm.h
+--- linux-2.4.32/include/config/mips/brcm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/brcm.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MIPS_BRCM 1
+diff -Nur linux-2.4.32/include/config/mips/cobalt.h linux-2.4.32.patched/include/config/mips/cobalt.h
+--- linux-2.4.32/include/config/mips/cobalt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/cobalt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_COBALT
+diff -Nur linux-2.4.32/include/config/mips/db1000.h linux-2.4.32.patched/include/config/mips/db1000.h
+--- linux-2.4.32/include/config/mips/db1000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/db1000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_DB1000
+diff -Nur linux-2.4.32/include/config/mips/db1100.h linux-2.4.32.patched/include/config/mips/db1100.h
+--- linux-2.4.32/include/config/mips/db1100.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/db1100.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_DB1100
+diff -Nur linux-2.4.32/include/config/mips/db1200.h linux-2.4.32.patched/include/config/mips/db1200.h
+--- linux-2.4.32/include/config/mips/db1200.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/db1200.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_DB1200
+diff -Nur linux-2.4.32/include/config/mips/db1500.h linux-2.4.32.patched/include/config/mips/db1500.h
+--- linux-2.4.32/include/config/mips/db1500.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/db1500.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_DB1500
+diff -Nur linux-2.4.32/include/config/mips/db1550.h linux-2.4.32.patched/include/config/mips/db1550.h
+--- linux-2.4.32/include/config/mips/db1550.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/db1550.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_DB1550
+diff -Nur linux-2.4.32/include/config/mips/ev64120.h linux-2.4.32.patched/include/config/mips/ev64120.h
+--- linux-2.4.32/include/config/mips/ev64120.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/ev64120.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_EV64120
+diff -Nur linux-2.4.32/include/config/mips/ev96100.h linux-2.4.32.patched/include/config/mips/ev96100.h
+--- linux-2.4.32/include/config/mips/ev96100.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/ev96100.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_EV96100
+diff -Nur linux-2.4.32/include/config/mips/ficmmp.h linux-2.4.32.patched/include/config/mips/ficmmp.h
+--- linux-2.4.32/include/config/mips/ficmmp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/ficmmp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_FICMMP
+diff -Nur linux-2.4.32/include/config/mips/hydrogen3.h linux-2.4.32.patched/include/config/mips/hydrogen3.h
+--- linux-2.4.32/include/config/mips/hydrogen3.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/hydrogen3.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_HYDROGEN3
+diff -Nur linux-2.4.32/include/config/mips/ite8172.h linux-2.4.32.patched/include/config/mips/ite8172.h
+--- linux-2.4.32/include/config/mips/ite8172.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/ite8172.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_ITE8172
+diff -Nur linux-2.4.32/include/config/mips/ivr.h linux-2.4.32.patched/include/config/mips/ivr.h
+--- linux-2.4.32/include/config/mips/ivr.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/ivr.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_IVR
+diff -Nur linux-2.4.32/include/config/mips/magnum/4000.h linux-2.4.32.patched/include/config/mips/magnum/4000.h
+--- linux-2.4.32/include/config/mips/magnum/4000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/magnum/4000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_MAGNUM_4000
+diff -Nur linux-2.4.32/include/config/mips/malta.h linux-2.4.32.patched/include/config/mips/malta.h
+--- linux-2.4.32/include/config/mips/malta.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/malta.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_MALTA
+diff -Nur linux-2.4.32/include/config/mips/mirage.h linux-2.4.32.patched/include/config/mips/mirage.h
+--- linux-2.4.32/include/config/mips/mirage.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/mirage.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_MIRAGE
+diff -Nur linux-2.4.32/include/config/mips/mtx1.h linux-2.4.32.patched/include/config/mips/mtx1.h
+--- linux-2.4.32/include/config/mips/mtx1.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/mtx1.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_MTX1
+diff -Nur linux-2.4.32/include/config/mips/pb1000.h linux-2.4.32.patched/include/config/mips/pb1000.h
+--- linux-2.4.32/include/config/mips/pb1000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/pb1000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_PB1000
+diff -Nur linux-2.4.32/include/config/mips/pb1100.h linux-2.4.32.patched/include/config/mips/pb1100.h
+--- linux-2.4.32/include/config/mips/pb1100.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/pb1100.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_PB1100
+diff -Nur linux-2.4.32/include/config/mips/pb1200.h linux-2.4.32.patched/include/config/mips/pb1200.h
+--- linux-2.4.32/include/config/mips/pb1200.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/pb1200.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_PB1200
+diff -Nur linux-2.4.32/include/config/mips/pb1500.h linux-2.4.32.patched/include/config/mips/pb1500.h
+--- linux-2.4.32/include/config/mips/pb1500.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/pb1500.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_PB1500
+diff -Nur linux-2.4.32/include/config/mips/pb1550.h linux-2.4.32.patched/include/config/mips/pb1550.h
+--- linux-2.4.32/include/config/mips/pb1550.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/pb1550.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_PB1550
+diff -Nur linux-2.4.32/include/config/mips/sead.h linux-2.4.32.patched/include/config/mips/sead.h
+--- linux-2.4.32/include/config/mips/sead.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/sead.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_SEAD
+diff -Nur linux-2.4.32/include/config/mips/uncached.h linux-2.4.32.patched/include/config/mips/uncached.h
+--- linux-2.4.32/include/config/mips/uncached.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/uncached.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_UNCACHED
+diff -Nur linux-2.4.32/include/config/mips/xxs1500.h linux-2.4.32.patched/include/config/mips/xxs1500.h
+--- linux-2.4.32/include/config/mips/xxs1500.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips/xxs1500.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS_XXS1500
+diff -Nur linux-2.4.32/include/config/mips32/compat.h linux-2.4.32.patched/include/config/mips32/compat.h
+--- linux-2.4.32/include/config/mips32/compat.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips32/compat.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS32_COMPAT
+diff -Nur linux-2.4.32/include/config/mips32/n32.h linux-2.4.32.patched/include/config/mips32/n32.h
+--- linux-2.4.32/include/config/mips32/n32.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips32/n32.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS32_N32
+diff -Nur linux-2.4.32/include/config/mips32/o32.h linux-2.4.32.patched/include/config/mips32/o32.h
+--- linux-2.4.32/include/config/mips32/o32.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips32/o32.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS32_O32
+diff -Nur linux-2.4.32/include/config/mips32.h linux-2.4.32.patched/include/config/mips32.h
+--- linux-2.4.32/include/config/mips32.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips32.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MIPS32 1
+diff -Nur linux-2.4.32/include/config/mips64.h linux-2.4.32.patched/include/config/mips64.h
+--- linux-2.4.32/include/config/mips64.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips64.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIPS64
+diff -Nur linux-2.4.32/include/config/mips.h linux-2.4.32.patched/include/config/mips.h
+--- linux-2.4.32/include/config/mips.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mips.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MIPS 1
+diff -Nur linux-2.4.32/include/config/mixcomwd.h linux-2.4.32.patched/include/config/mixcomwd.h
+--- linux-2.4.32/include/config/mixcomwd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mixcomwd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MIXCOMWD
+diff -Nur linux-2.4.32/include/config/mkiss/module.h linux-2.4.32.patched/include/config/mkiss/module.h
+--- linux-2.4.32/include/config/mkiss/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mkiss/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MKISS_MODULE 1
+diff -Nur linux-2.4.32/include/config/mkiss.h linux-2.4.32.patched/include/config/mkiss.h
+--- linux-2.4.32/include/config/mkiss.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mkiss.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MKISS
+diff -Nur linux-2.4.32/include/config/modules.h linux-2.4.32.patched/include/config/modules.h
+--- linux-2.4.32/include/config/modules.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/modules.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MODULES 1
+diff -Nur linux-2.4.32/include/config/modversions.h linux-2.4.32.patched/include/config/modversions.h
+--- linux-2.4.32/include/config/modversions.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/modversions.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MODVERSIONS
+diff -Nur linux-2.4.32/include/config/momenco/jaguar/atx.h linux-2.4.32.patched/include/config/momenco/jaguar/atx.h
+--- linux-2.4.32/include/config/momenco/jaguar/atx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/momenco/jaguar/atx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MOMENCO_JAGUAR_ATX
+diff -Nur linux-2.4.32/include/config/momenco/ocelot/c.h linux-2.4.32.patched/include/config/momenco/ocelot/c.h
+--- linux-2.4.32/include/config/momenco/ocelot/c.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/momenco/ocelot/c.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MOMENCO_OCELOT_C
+diff -Nur linux-2.4.32/include/config/momenco/ocelot/g.h linux-2.4.32.patched/include/config/momenco/ocelot/g.h
+--- linux-2.4.32/include/config/momenco/ocelot/g.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/momenco/ocelot/g.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MOMENCO_OCELOT_G
+diff -Nur linux-2.4.32/include/config/momenco/ocelot.h linux-2.4.32.patched/include/config/momenco/ocelot.h
+--- linux-2.4.32/include/config/momenco/ocelot.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/momenco/ocelot.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MOMENCO_OCELOT
+diff -Nur linux-2.4.32/include/config/mouse.h linux-2.4.32.patched/include/config/mouse.h
+--- linux-2.4.32/include/config/mouse.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mouse.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MOUSE
+diff -Nur linux-2.4.32/include/config/msdos/fs.h linux-2.4.32.patched/include/config/msdos/fs.h
+--- linux-2.4.32/include/config/msdos/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/msdos/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MSDOS_FS
+diff -Nur linux-2.4.32/include/config/msdos/partition.h linux-2.4.32.patched/include/config/msdos/partition.h
+--- linux-2.4.32/include/config/msdos/partition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/msdos/partition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MSDOS_PARTITION 1
+diff -Nur linux-2.4.32/include/config/mtd/absent.h linux-2.4.32.patched/include/config/mtd/absent.h
+--- linux-2.4.32/include/config/mtd/absent.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/absent.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_ABSENT
+diff -Nur linux-2.4.32/include/config/mtd/amdstd.h linux-2.4.32.patched/include/config/mtd/amdstd.h
+--- linux-2.4.32/include/config/mtd/amdstd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/amdstd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_AMDSTD
+diff -Nur linux-2.4.32/include/config/mtd/bcm947xx.h linux-2.4.32.patched/include/config/mtd/bcm947xx.h
+--- linux-2.4.32/include/config/mtd/bcm947xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/bcm947xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD_BCM947XX 1
+diff -Nur linux-2.4.32/include/config/mtd/blkmtd.h linux-2.4.32.patched/include/config/mtd/blkmtd.h
+--- linux-2.4.32/include/config/mtd/blkmtd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/blkmtd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_BLKMTD
+diff -Nur linux-2.4.32/include/config/mtd/block.h linux-2.4.32.patched/include/config/mtd/block.h
+--- linux-2.4.32/include/config/mtd/block.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/block.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD_BLOCK 1
+diff -Nur linux-2.4.32/include/config/mtd/bosporus.h linux-2.4.32.patched/include/config/mtd/bosporus.h
+--- linux-2.4.32/include/config/mtd/bosporus.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/bosporus.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_BOSPORUS
+diff -Nur linux-2.4.32/include/config/mtd/cfi/adv/options.h linux-2.4.32.patched/include/config/mtd/cfi/adv/options.h
+--- linux-2.4.32/include/config/mtd/cfi/adv/options.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/adv/options.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD_CFI_ADV_OPTIONS 1
+diff -Nur linux-2.4.32/include/config/mtd/cfi/amdstd.h linux-2.4.32.patched/include/config/mtd/cfi/amdstd.h
+--- linux-2.4.32/include/config/mtd/cfi/amdstd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/amdstd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD_CFI_AMDSTD 1
+diff -Nur linux-2.4.32/include/config/mtd/cfi/b1.h linux-2.4.32.patched/include/config/mtd/cfi/b1.h
+--- linux-2.4.32/include/config/mtd/cfi/b1.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/b1.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_CFI_B1
+diff -Nur linux-2.4.32/include/config/mtd/cfi/b2.h linux-2.4.32.patched/include/config/mtd/cfi/b2.h
+--- linux-2.4.32/include/config/mtd/cfi/b2.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/b2.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD_CFI_B2 1
+diff -Nur linux-2.4.32/include/config/mtd/cfi/b4.h linux-2.4.32.patched/include/config/mtd/cfi/b4.h
+--- linux-2.4.32/include/config/mtd/cfi/b4.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/b4.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_CFI_B4
+diff -Nur linux-2.4.32/include/config/mtd/cfi/b8.h linux-2.4.32.patched/include/config/mtd/cfi/b8.h
+--- linux-2.4.32/include/config/mtd/cfi/b8.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/b8.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_CFI_B8
+diff -Nur linux-2.4.32/include/config/mtd/cfi/be/byte/swap.h linux-2.4.32.patched/include/config/mtd/cfi/be/byte/swap.h
+--- linux-2.4.32/include/config/mtd/cfi/be/byte/swap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/be/byte/swap.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_CFI_BE_BYTE_SWAP
+diff -Nur linux-2.4.32/include/config/mtd/cfi/geometry.h linux-2.4.32.patched/include/config/mtd/cfi/geometry.h
+--- linux-2.4.32/include/config/mtd/cfi/geometry.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/geometry.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD_CFI_GEOMETRY 1
+diff -Nur linux-2.4.32/include/config/mtd/cfi/i1.h linux-2.4.32.patched/include/config/mtd/cfi/i1.h
+--- linux-2.4.32/include/config/mtd/cfi/i1.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/i1.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD_CFI_I1 1
+diff -Nur linux-2.4.32/include/config/mtd/cfi/i2.h linux-2.4.32.patched/include/config/mtd/cfi/i2.h
+--- linux-2.4.32/include/config/mtd/cfi/i2.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/i2.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_CFI_I2
+diff -Nur linux-2.4.32/include/config/mtd/cfi/i4.h linux-2.4.32.patched/include/config/mtd/cfi/i4.h
+--- linux-2.4.32/include/config/mtd/cfi/i4.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/i4.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_CFI_I4
+diff -Nur linux-2.4.32/include/config/mtd/cfi/i8.h linux-2.4.32.patched/include/config/mtd/cfi/i8.h
+--- linux-2.4.32/include/config/mtd/cfi/i8.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/i8.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_CFI_I8
+diff -Nur linux-2.4.32/include/config/mtd/cfi/intelext.h linux-2.4.32.patched/include/config/mtd/cfi/intelext.h
+--- linux-2.4.32/include/config/mtd/cfi/intelext.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/intelext.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD_CFI_INTELEXT 1
+diff -Nur linux-2.4.32/include/config/mtd/cfi/le/byte/swap.h linux-2.4.32.patched/include/config/mtd/cfi/le/byte/swap.h
+--- linux-2.4.32/include/config/mtd/cfi/le/byte/swap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/le/byte/swap.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_CFI_LE_BYTE_SWAP
+diff -Nur linux-2.4.32/include/config/mtd/cfi/noswap.h linux-2.4.32.patched/include/config/mtd/cfi/noswap.h
+--- linux-2.4.32/include/config/mtd/cfi/noswap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/noswap.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD_CFI_NOSWAP 1
+diff -Nur linux-2.4.32/include/config/mtd/cfi/sststd.h linux-2.4.32.patched/include/config/mtd/cfi/sststd.h
+--- linux-2.4.32/include/config/mtd/cfi/sststd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/sststd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD_CFI_SSTSTD 1
+diff -Nur linux-2.4.32/include/config/mtd/cfi/staa.h linux-2.4.32.patched/include/config/mtd/cfi/staa.h
+--- linux-2.4.32/include/config/mtd/cfi/staa.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi/staa.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_CFI_STAA
+diff -Nur linux-2.4.32/include/config/mtd/cfi.h linux-2.4.32.patched/include/config/mtd/cfi.h
+--- linux-2.4.32/include/config/mtd/cfi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cfi.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD_CFI 1
+diff -Nur linux-2.4.32/include/config/mtd/char.h linux-2.4.32.patched/include/config/mtd/char.h
+--- linux-2.4.32/include/config/mtd/char.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/char.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD_CHAR 1
+diff -Nur linux-2.4.32/include/config/mtd/cmdline/parts.h linux-2.4.32.patched/include/config/mtd/cmdline/parts.h
+--- linux-2.4.32/include/config/mtd/cmdline/parts.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cmdline/parts.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_CMDLINE_PARTS
+diff -Nur linux-2.4.32/include/config/mtd/concat.h linux-2.4.32.patched/include/config/mtd/concat.h
+--- linux-2.4.32/include/config/mtd/concat.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/concat.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_CONCAT
+diff -Nur linux-2.4.32/include/config/mtd/cstm/mips/ixx.h linux-2.4.32.patched/include/config/mtd/cstm/mips/ixx.h
+--- linux-2.4.32/include/config/mtd/cstm/mips/ixx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/cstm/mips/ixx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_CSTM_MIPS_IXX
+diff -Nur linux-2.4.32/include/config/mtd/db1x00.h linux-2.4.32.patched/include/config/mtd/db1x00.h
+--- linux-2.4.32/include/config/mtd/db1x00.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/db1x00.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_DB1X00
+diff -Nur linux-2.4.32/include/config/mtd/debug.h linux-2.4.32.patched/include/config/mtd/debug.h
+--- linux-2.4.32/include/config/mtd/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_DEBUG
+diff -Nur linux-2.4.32/include/config/mtd/doc1000.h linux-2.4.32.patched/include/config/mtd/doc1000.h
+--- linux-2.4.32/include/config/mtd/doc1000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/doc1000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_DOC1000
+diff -Nur linux-2.4.32/include/config/mtd/doc2000.h linux-2.4.32.patched/include/config/mtd/doc2000.h
+--- linux-2.4.32/include/config/mtd/doc2000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/doc2000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_DOC2000
+diff -Nur linux-2.4.32/include/config/mtd/doc2001.h linux-2.4.32.patched/include/config/mtd/doc2001.h
+--- linux-2.4.32/include/config/mtd/doc2001.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/doc2001.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_DOC2001
+diff -Nur linux-2.4.32/include/config/mtd/docprobe.h linux-2.4.32.patched/include/config/mtd/docprobe.h
+--- linux-2.4.32/include/config/mtd/docprobe.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/docprobe.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_DOCPROBE
+diff -Nur linux-2.4.32/include/config/mtd/gen/probe.h linux-2.4.32.patched/include/config/mtd/gen/probe.h
+--- linux-2.4.32/include/config/mtd/gen/probe.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/gen/probe.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD_GEN_PROBE 1
+diff -Nur linux-2.4.32/include/config/mtd/hydrogen3.h linux-2.4.32.patched/include/config/mtd/hydrogen3.h
+--- linux-2.4.32/include/config/mtd/hydrogen3.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/hydrogen3.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_HYDROGEN3
+diff -Nur linux-2.4.32/include/config/mtd/jedec.h linux-2.4.32.patched/include/config/mtd/jedec.h
+--- linux-2.4.32/include/config/mtd/jedec.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/jedec.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_JEDEC
+diff -Nur linux-2.4.32/include/config/mtd/jedecprobe.h linux-2.4.32.patched/include/config/mtd/jedecprobe.h
+--- linux-2.4.32/include/config/mtd/jedecprobe.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/jedecprobe.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_JEDECPROBE
+diff -Nur linux-2.4.32/include/config/mtd/lasat.h linux-2.4.32.patched/include/config/mtd/lasat.h
+--- linux-2.4.32/include/config/mtd/lasat.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/lasat.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_LASAT
+diff -Nur linux-2.4.32/include/config/mtd/mirage.h linux-2.4.32.patched/include/config/mtd/mirage.h
+--- linux-2.4.32/include/config/mtd/mirage.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/mirage.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_MIRAGE
+diff -Nur linux-2.4.32/include/config/mtd/mtdram.h linux-2.4.32.patched/include/config/mtd/mtdram.h
+--- linux-2.4.32/include/config/mtd/mtdram.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/mtdram.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_MTDRAM
+diff -Nur linux-2.4.32/include/config/mtd/mtx1.h linux-2.4.32.patched/include/config/mtd/mtx1.h
+--- linux-2.4.32/include/config/mtd/mtx1.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/mtx1.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_MTX1
+diff -Nur linux-2.4.32/include/config/mtd/nand.h linux-2.4.32.patched/include/config/mtd/nand.h
+--- linux-2.4.32/include/config/mtd/nand.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/nand.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_NAND
+diff -Nur linux-2.4.32/include/config/mtd/obsolete/chips.h linux-2.4.32.patched/include/config/mtd/obsolete/chips.h
+--- linux-2.4.32/include/config/mtd/obsolete/chips.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/obsolete/chips.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_OBSOLETE_CHIPS
+diff -Nur linux-2.4.32/include/config/mtd/ocelot.h linux-2.4.32.patched/include/config/mtd/ocelot.h
+--- linux-2.4.32/include/config/mtd/ocelot.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/ocelot.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_OCELOT
+diff -Nur linux-2.4.32/include/config/mtd/partitions.h linux-2.4.32.patched/include/config/mtd/partitions.h
+--- linux-2.4.32/include/config/mtd/partitions.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/partitions.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD_PARTITIONS 1
+diff -Nur linux-2.4.32/include/config/mtd/pb1000.h linux-2.4.32.patched/include/config/mtd/pb1000.h
+--- linux-2.4.32/include/config/mtd/pb1000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/pb1000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_PB1000
+diff -Nur linux-2.4.32/include/config/mtd/pb1100.h linux-2.4.32.patched/include/config/mtd/pb1100.h
+--- linux-2.4.32/include/config/mtd/pb1100.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/pb1100.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_PB1100
+diff -Nur linux-2.4.32/include/config/mtd/pb1500.h linux-2.4.32.patched/include/config/mtd/pb1500.h
+--- linux-2.4.32/include/config/mtd/pb1500.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/pb1500.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_PB1500
+diff -Nur linux-2.4.32/include/config/mtd/pb1550.h linux-2.4.32.patched/include/config/mtd/pb1550.h
+--- linux-2.4.32/include/config/mtd/pb1550.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/pb1550.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_PB1550
+diff -Nur linux-2.4.32/include/config/mtd/pci.h linux-2.4.32.patched/include/config/mtd/pci.h
+--- linux-2.4.32/include/config/mtd/pci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/pci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_PCI
+diff -Nur linux-2.4.32/include/config/mtd/pcmcia.h linux-2.4.32.patched/include/config/mtd/pcmcia.h
+--- linux-2.4.32/include/config/mtd/pcmcia.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/pcmcia.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_PCMCIA
+diff -Nur linux-2.4.32/include/config/mtd/physmap.h linux-2.4.32.patched/include/config/mtd/physmap.h
+--- linux-2.4.32/include/config/mtd/physmap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/physmap.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_PHYSMAP
+diff -Nur linux-2.4.32/include/config/mtd/pmc551.h linux-2.4.32.patched/include/config/mtd/pmc551.h
+--- linux-2.4.32/include/config/mtd/pmc551.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/pmc551.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_PMC551
+diff -Nur linux-2.4.32/include/config/mtd/ram.h linux-2.4.32.patched/include/config/mtd/ram.h
+--- linux-2.4.32/include/config/mtd/ram.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/ram.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_RAM
+diff -Nur linux-2.4.32/include/config/mtd/redboot/parts.h linux-2.4.32.patched/include/config/mtd/redboot/parts.h
+--- linux-2.4.32/include/config/mtd/redboot/parts.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/redboot/parts.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_REDBOOT_PARTS
+diff -Nur linux-2.4.32/include/config/mtd/rom.h linux-2.4.32.patched/include/config/mtd/rom.h
+--- linux-2.4.32/include/config/mtd/rom.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/rom.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_ROM
+diff -Nur linux-2.4.32/include/config/mtd/sharp.h linux-2.4.32.patched/include/config/mtd/sharp.h
+--- linux-2.4.32/include/config/mtd/sharp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/sharp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_SHARP
+diff -Nur linux-2.4.32/include/config/mtd/slram.h linux-2.4.32.patched/include/config/mtd/slram.h
+--- linux-2.4.32/include/config/mtd/slram.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/slram.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_SLRAM
+diff -Nur linux-2.4.32/include/config/mtd/xxs1500.h linux-2.4.32.patched/include/config/mtd/xxs1500.h
+--- linux-2.4.32/include/config/mtd/xxs1500.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd/xxs1500.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MTD_XXS1500
+diff -Nur linux-2.4.32/include/config/mtd.h linux-2.4.32.patched/include/config/mtd.h
+--- linux-2.4.32/include/config/mtd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/mtd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_MTD 1
+diff -Nur linux-2.4.32/include/config/myri/sbus.h linux-2.4.32.patched/include/config/myri/sbus.h
+--- linux-2.4.32/include/config/myri/sbus.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/myri/sbus.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_MYRI_SBUS
+diff -Nur linux-2.4.32/include/config/natsemi.h linux-2.4.32.patched/include/config/natsemi.h
+--- linux-2.4.32/include/config/natsemi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/natsemi.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NATSEMI
+diff -Nur linux-2.4.32/include/config/ncp/fs.h linux-2.4.32.patched/include/config/ncp/fs.h
+--- linux-2.4.32/include/config/ncp/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ncp/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NCP_FS
+diff -Nur linux-2.4.32/include/config/ncpfs/extras.h linux-2.4.32.patched/include/config/ncpfs/extras.h
+--- linux-2.4.32/include/config/ncpfs/extras.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ncpfs/extras.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NCPFS_EXTRAS
+diff -Nur linux-2.4.32/include/config/ncpfs/ioctl/locking.h linux-2.4.32.patched/include/config/ncpfs/ioctl/locking.h
+--- linux-2.4.32/include/config/ncpfs/ioctl/locking.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ncpfs/ioctl/locking.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NCPFS_IOCTL_LOCKING
+diff -Nur linux-2.4.32/include/config/ncpfs/nfs/ns.h linux-2.4.32.patched/include/config/ncpfs/nfs/ns.h
+--- linux-2.4.32/include/config/ncpfs/nfs/ns.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ncpfs/nfs/ns.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NCPFS_NFS_NS
+diff -Nur linux-2.4.32/include/config/ncpfs/nls.h linux-2.4.32.patched/include/config/ncpfs/nls.h
+--- linux-2.4.32/include/config/ncpfs/nls.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ncpfs/nls.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NCPFS_NLS
+diff -Nur linux-2.4.32/include/config/ncpfs/os2/ns.h linux-2.4.32.patched/include/config/ncpfs/os2/ns.h
+--- linux-2.4.32/include/config/ncpfs/os2/ns.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ncpfs/os2/ns.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NCPFS_OS2_NS
+diff -Nur linux-2.4.32/include/config/ncpfs/packet/signing.h linux-2.4.32.patched/include/config/ncpfs/packet/signing.h
+--- linux-2.4.32/include/config/ncpfs/packet/signing.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ncpfs/packet/signing.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NCPFS_PACKET_SIGNING
+diff -Nur linux-2.4.32/include/config/ncpfs/smalldos.h linux-2.4.32.patched/include/config/ncpfs/smalldos.h
+--- linux-2.4.32/include/config/ncpfs/smalldos.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ncpfs/smalldos.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NCPFS_SMALLDOS
+diff -Nur linux-2.4.32/include/config/ncpfs/strong.h linux-2.4.32.patched/include/config/ncpfs/strong.h
+--- linux-2.4.32/include/config/ncpfs/strong.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ncpfs/strong.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NCPFS_STRONG
+diff -Nur linux-2.4.32/include/config/ne2k/pci.h linux-2.4.32.patched/include/config/ne2k/pci.h
+--- linux-2.4.32/include/config/ne2k/pci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ne2k/pci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NE2K_PCI
+diff -Nur linux-2.4.32/include/config/ne3210.h linux-2.4.32.patched/include/config/ne3210.h
+--- linux-2.4.32/include/config/ne3210.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ne3210.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NE3210
+diff -Nur linux-2.4.32/include/config/nec/eagle.h linux-2.4.32.patched/include/config/nec/eagle.h
+--- linux-2.4.32/include/config/nec/eagle.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nec/eagle.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NEC_EAGLE
+diff -Nur linux-2.4.32/include/config/nec/osprey.h linux-2.4.32.patched/include/config/nec/osprey.h
+--- linux-2.4.32/include/config/nec/osprey.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nec/osprey.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NEC_OSPREY
+diff -Nur linux-2.4.32/include/config/net/cls/fw/module.h linux-2.4.32.patched/include/config/net/cls/fw/module.h
+--- linux-2.4.32/include/config/net/cls/fw/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls/fw/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_CLS_FW_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/cls/fw.h linux-2.4.32.patched/include/config/net/cls/fw.h
+--- linux-2.4.32/include/config/net/cls/fw.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls/fw.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_CLS_FW
+diff -Nur linux-2.4.32/include/config/net/cls/police.h linux-2.4.32.patched/include/config/net/cls/police.h
+--- linux-2.4.32/include/config/net/cls/police.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls/police.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_CLS_POLICE 1
+diff -Nur linux-2.4.32/include/config/net/cls/route4/module.h linux-2.4.32.patched/include/config/net/cls/route4/module.h
+--- linux-2.4.32/include/config/net/cls/route4/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls/route4/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_CLS_ROUTE4_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/cls/route4.h linux-2.4.32.patched/include/config/net/cls/route4.h
+--- linux-2.4.32/include/config/net/cls/route4.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls/route4.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_CLS_ROUTE4
+diff -Nur linux-2.4.32/include/config/net/cls/route.h linux-2.4.32.patched/include/config/net/cls/route.h
+--- linux-2.4.32/include/config/net/cls/route.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls/route.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_CLS_ROUTE 1
+diff -Nur linux-2.4.32/include/config/net/cls/rsvp/module.h linux-2.4.32.patched/include/config/net/cls/rsvp/module.h
+--- linux-2.4.32/include/config/net/cls/rsvp/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls/rsvp/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_CLS_RSVP_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/cls/rsvp6/module.h linux-2.4.32.patched/include/config/net/cls/rsvp6/module.h
+--- linux-2.4.32/include/config/net/cls/rsvp6/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls/rsvp6/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_CLS_RSVP6_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/cls/rsvp6.h linux-2.4.32.patched/include/config/net/cls/rsvp6.h
+--- linux-2.4.32/include/config/net/cls/rsvp6.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls/rsvp6.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_CLS_RSVP6
+diff -Nur linux-2.4.32/include/config/net/cls/rsvp.h linux-2.4.32.patched/include/config/net/cls/rsvp.h
+--- linux-2.4.32/include/config/net/cls/rsvp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls/rsvp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_CLS_RSVP
+diff -Nur linux-2.4.32/include/config/net/cls/tcindex/module.h linux-2.4.32.patched/include/config/net/cls/tcindex/module.h
+--- linux-2.4.32/include/config/net/cls/tcindex/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls/tcindex/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_CLS_TCINDEX_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/cls/tcindex.h linux-2.4.32.patched/include/config/net/cls/tcindex.h
+--- linux-2.4.32/include/config/net/cls/tcindex.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls/tcindex.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_CLS_TCINDEX
+diff -Nur linux-2.4.32/include/config/net/cls/u32/module.h linux-2.4.32.patched/include/config/net/cls/u32/module.h
+--- linux-2.4.32/include/config/net/cls/u32/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls/u32/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_CLS_U32_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/cls/u32.h linux-2.4.32.patched/include/config/net/cls/u32.h
+--- linux-2.4.32/include/config/net/cls/u32.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls/u32.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_CLS_U32
+diff -Nur linux-2.4.32/include/config/net/cls.h linux-2.4.32.patched/include/config/net/cls.h
+--- linux-2.4.32/include/config/net/cls.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/cls.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_CLS 1
+diff -Nur linux-2.4.32/include/config/net/divert.h linux-2.4.32.patched/include/config/net/divert.h
+--- linux-2.4.32/include/config/net/divert.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/divert.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_DIVERT
+diff -Nur linux-2.4.32/include/config/net/estimator.h linux-2.4.32.patched/include/config/net/estimator.h
+--- linux-2.4.32/include/config/net/estimator.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/estimator.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_ESTIMATOR 1
+diff -Nur linux-2.4.32/include/config/net/ethernet.h linux-2.4.32.patched/include/config/net/ethernet.h
+--- linux-2.4.32/include/config/net/ethernet.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/ethernet.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_ETHERNET 1
+diff -Nur linux-2.4.32/include/config/net/fastroute.h linux-2.4.32.patched/include/config/net/fastroute.h
+--- linux-2.4.32/include/config/net/fastroute.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/fastroute.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_FASTROUTE
+diff -Nur linux-2.4.32/include/config/net/fc.h linux-2.4.32.patched/include/config/net/fc.h
+--- linux-2.4.32/include/config/net/fc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/fc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_FC
+diff -Nur linux-2.4.32/include/config/net/hw/flowcontrol.h linux-2.4.32.patched/include/config/net/hw/flowcontrol.h
+--- linux-2.4.32/include/config/net/hw/flowcontrol.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/hw/flowcontrol.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_HW_FLOWCONTROL
+diff -Nur linux-2.4.32/include/config/net/ipgre/broadcast.h linux-2.4.32.patched/include/config/net/ipgre/broadcast.h
+--- linux-2.4.32/include/config/net/ipgre/broadcast.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/ipgre/broadcast.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_IPGRE_BROADCAST
+diff -Nur linux-2.4.32/include/config/net/ipgre/module.h linux-2.4.32.patched/include/config/net/ipgre/module.h
+--- linux-2.4.32/include/config/net/ipgre/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/ipgre/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_IPGRE_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/ipgre.h linux-2.4.32.patched/include/config/net/ipgre.h
+--- linux-2.4.32/include/config/net/ipgre.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/ipgre.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_IPGRE
+diff -Nur linux-2.4.32/include/config/net/ipip/module.h linux-2.4.32.patched/include/config/net/ipip/module.h
+--- linux-2.4.32/include/config/net/ipip/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/ipip/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_IPIP_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/ipip.h linux-2.4.32.patched/include/config/net/ipip.h
+--- linux-2.4.32/include/config/net/ipip.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/ipip.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_IPIP
+diff -Nur linux-2.4.32/include/config/net/isa.h linux-2.4.32.patched/include/config/net/isa.h
+--- linux-2.4.32/include/config/net/isa.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/isa.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_ISA
+diff -Nur linux-2.4.32/include/config/net/pci.h linux-2.4.32.patched/include/config/net/pci.h
+--- linux-2.4.32/include/config/net/pci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/pci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_PCI 1
+diff -Nur linux-2.4.32/include/config/net/pcmcia.h linux-2.4.32.patched/include/config/net/pcmcia.h
+--- linux-2.4.32/include/config/net/pcmcia.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/pcmcia.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_PCMCIA
+diff -Nur linux-2.4.32/include/config/net/pktgen.h linux-2.4.32.patched/include/config/net/pktgen.h
+--- linux-2.4.32/include/config/net/pktgen.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/pktgen.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_PKTGEN
+diff -Nur linux-2.4.32/include/config/net/pocket.h linux-2.4.32.patched/include/config/net/pocket.h
+--- linux-2.4.32/include/config/net/pocket.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/pocket.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_POCKET
+diff -Nur linux-2.4.32/include/config/net/qos.h linux-2.4.32.patched/include/config/net/qos.h
+--- linux-2.4.32/include/config/net/qos.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/qos.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_QOS 1
+diff -Nur linux-2.4.32/include/config/net/radio.h linux-2.4.32.patched/include/config/net/radio.h
+--- linux-2.4.32/include/config/net/radio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/radio.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_RADIO 1
+diff -Nur linux-2.4.32/include/config/net/random.h linux-2.4.32.patched/include/config/net/random.h
+--- linux-2.4.32/include/config/net/random.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/random.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_RANDOM 1
+diff -Nur linux-2.4.32/include/config/net/sch/cbq/module.h linux-2.4.32.patched/include/config/net/sch/cbq/module.h
+--- linux-2.4.32/include/config/net/sch/cbq/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/cbq/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_SCH_CBQ_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/sch/cbq.h linux-2.4.32.patched/include/config/net/sch/cbq.h
+--- linux-2.4.32/include/config/net/sch/cbq.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/cbq.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_SCH_CBQ
+diff -Nur linux-2.4.32/include/config/net/sch/csz/module.h linux-2.4.32.patched/include/config/net/sch/csz/module.h
+--- linux-2.4.32/include/config/net/sch/csz/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/csz/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_SCH_CSZ_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/sch/csz.h linux-2.4.32.patched/include/config/net/sch/csz.h
+--- linux-2.4.32/include/config/net/sch/csz.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/csz.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_SCH_CSZ
+diff -Nur linux-2.4.32/include/config/net/sch/dsmark/module.h linux-2.4.32.patched/include/config/net/sch/dsmark/module.h
+--- linux-2.4.32/include/config/net/sch/dsmark/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/dsmark/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_SCH_DSMARK_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/sch/dsmark.h linux-2.4.32.patched/include/config/net/sch/dsmark.h
+--- linux-2.4.32/include/config/net/sch/dsmark.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/dsmark.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_SCH_DSMARK
+diff -Nur linux-2.4.32/include/config/net/sch/gred/module.h linux-2.4.32.patched/include/config/net/sch/gred/module.h
+--- linux-2.4.32/include/config/net/sch/gred/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/gred/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_SCH_GRED_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/sch/gred.h linux-2.4.32.patched/include/config/net/sch/gred.h
+--- linux-2.4.32/include/config/net/sch/gred.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/gred.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_SCH_GRED
+diff -Nur linux-2.4.32/include/config/net/sch/hfsc/module.h linux-2.4.32.patched/include/config/net/sch/hfsc/module.h
+--- linux-2.4.32/include/config/net/sch/hfsc/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/hfsc/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_SCH_HFSC_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/sch/hfsc.h linux-2.4.32.patched/include/config/net/sch/hfsc.h
+--- linux-2.4.32/include/config/net/sch/hfsc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/hfsc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_SCH_HFSC
+diff -Nur linux-2.4.32/include/config/net/sch/htb/module.h linux-2.4.32.patched/include/config/net/sch/htb/module.h
+--- linux-2.4.32/include/config/net/sch/htb/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/htb/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_SCH_HTB_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/sch/htb.h linux-2.4.32.patched/include/config/net/sch/htb.h
+--- linux-2.4.32/include/config/net/sch/htb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/htb.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_SCH_HTB
+diff -Nur linux-2.4.32/include/config/net/sch/ingress/module.h linux-2.4.32.patched/include/config/net/sch/ingress/module.h
+--- linux-2.4.32/include/config/net/sch/ingress/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/ingress/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_SCH_INGRESS_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/sch/ingress.h linux-2.4.32.patched/include/config/net/sch/ingress.h
+--- linux-2.4.32/include/config/net/sch/ingress.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/ingress.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_SCH_INGRESS
+diff -Nur linux-2.4.32/include/config/net/sch/netem.h linux-2.4.32.patched/include/config/net/sch/netem.h
+--- linux-2.4.32/include/config/net/sch/netem.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/netem.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_SCH_NETEM
+diff -Nur linux-2.4.32/include/config/net/sch/prio/module.h linux-2.4.32.patched/include/config/net/sch/prio/module.h
+--- linux-2.4.32/include/config/net/sch/prio/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/prio/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_SCH_PRIO_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/sch/prio.h linux-2.4.32.patched/include/config/net/sch/prio.h
+--- linux-2.4.32/include/config/net/sch/prio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/prio.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_SCH_PRIO
+diff -Nur linux-2.4.32/include/config/net/sch/red/module.h linux-2.4.32.patched/include/config/net/sch/red/module.h
+--- linux-2.4.32/include/config/net/sch/red/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/red/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_SCH_RED_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/sch/red.h linux-2.4.32.patched/include/config/net/sch/red.h
+--- linux-2.4.32/include/config/net/sch/red.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/red.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_SCH_RED
+diff -Nur linux-2.4.32/include/config/net/sch/sfq/module.h linux-2.4.32.patched/include/config/net/sch/sfq/module.h
+--- linux-2.4.32/include/config/net/sch/sfq/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/sfq/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_SCH_SFQ_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/sch/sfq.h linux-2.4.32.patched/include/config/net/sch/sfq.h
+--- linux-2.4.32/include/config/net/sch/sfq.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/sfq.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_SCH_SFQ
+diff -Nur linux-2.4.32/include/config/net/sch/tbf/module.h linux-2.4.32.patched/include/config/net/sch/tbf/module.h
+--- linux-2.4.32/include/config/net/sch/tbf/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/tbf/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_SCH_TBF_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/sch/tbf.h linux-2.4.32.patched/include/config/net/sch/tbf.h
+--- linux-2.4.32/include/config/net/sch/tbf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/tbf.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_SCH_TBF
+diff -Nur linux-2.4.32/include/config/net/sch/teql/module.h linux-2.4.32.patched/include/config/net/sch/teql/module.h
+--- linux-2.4.32/include/config/net/sch/teql/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/teql/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_SCH_TEQL_MODULE 1
+diff -Nur linux-2.4.32/include/config/net/sch/teql.h linux-2.4.32.patched/include/config/net/sch/teql.h
+--- linux-2.4.32/include/config/net/sch/teql.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sch/teql.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_SCH_TEQL
+diff -Nur linux-2.4.32/include/config/net/sched.h linux-2.4.32.patched/include/config/net/sched.h
+--- linux-2.4.32/include/config/net/sched.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/sched.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_SCHED 1
+diff -Nur linux-2.4.32/include/config/net/vendor/3com.h linux-2.4.32.patched/include/config/net/vendor/3com.h
+--- linux-2.4.32/include/config/net/vendor/3com.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/vendor/3com.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_VENDOR_3COM
+diff -Nur linux-2.4.32/include/config/net/vendor/racal.h linux-2.4.32.patched/include/config/net/vendor/racal.h
+--- linux-2.4.32/include/config/net/vendor/racal.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/vendor/racal.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_VENDOR_RACAL
+diff -Nur linux-2.4.32/include/config/net/vendor/smc.h linux-2.4.32.patched/include/config/net/vendor/smc.h
+--- linux-2.4.32/include/config/net/vendor/smc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/vendor/smc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NET_VENDOR_SMC
+diff -Nur linux-2.4.32/include/config/net/wireless.h linux-2.4.32.patched/include/config/net/wireless.h
+--- linux-2.4.32/include/config/net/wireless.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net/wireless.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET_WIRELESS 1
+diff -Nur linux-2.4.32/include/config/netdevices.h linux-2.4.32.patched/include/config/netdevices.h
+--- linux-2.4.32/include/config/netdevices.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/netdevices.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NETDEVICES 1
+diff -Nur linux-2.4.32/include/config/netfilter/debug.h linux-2.4.32.patched/include/config/netfilter/debug.h
+--- linux-2.4.32/include/config/netfilter/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/netfilter/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NETFILTER_DEBUG
+diff -Nur linux-2.4.32/include/config/netfilter.h linux-2.4.32.patched/include/config/netfilter.h
+--- linux-2.4.32/include/config/netfilter.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/netfilter.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NETFILTER 1
+diff -Nur linux-2.4.32/include/config/net.h linux-2.4.32.patched/include/config/net.h
+--- linux-2.4.32/include/config/net.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/net.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NET 1
+diff -Nur linux-2.4.32/include/config/netlink/dev/module.h linux-2.4.32.patched/include/config/netlink/dev/module.h
+--- linux-2.4.32/include/config/netlink/dev/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/netlink/dev/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NETLINK_DEV_MODULE 1
+diff -Nur linux-2.4.32/include/config/netlink/dev.h linux-2.4.32.patched/include/config/netlink/dev.h
+--- linux-2.4.32/include/config/netlink/dev.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/netlink/dev.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NETLINK_DEV
+diff -Nur linux-2.4.32/include/config/netrom.h linux-2.4.32.patched/include/config/netrom.h
+--- linux-2.4.32/include/config/netrom.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/netrom.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NETROM
+diff -Nur linux-2.4.32/include/config/new/irq.h linux-2.4.32.patched/include/config/new/irq.h
+--- linux-2.4.32/include/config/new/irq.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/new/irq.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NEW_IRQ 1
+diff -Nur linux-2.4.32/include/config/new/time/c.h linux-2.4.32.patched/include/config/new/time/c.h
+--- linux-2.4.32/include/config/new/time/c.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/new/time/c.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NEW_TIME_C 1
+diff -Nur linux-2.4.32/include/config/nfs/directio.h linux-2.4.32.patched/include/config/nfs/directio.h
+--- linux-2.4.32/include/config/nfs/directio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nfs/directio.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NFS_DIRECTIO
+diff -Nur linux-2.4.32/include/config/nfs/fs/module.h linux-2.4.32.patched/include/config/nfs/fs/module.h
+--- linux-2.4.32/include/config/nfs/fs/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nfs/fs/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NFS_FS_MODULE 1
+diff -Nur linux-2.4.32/include/config/nfs/fs.h linux-2.4.32.patched/include/config/nfs/fs.h
+--- linux-2.4.32/include/config/nfs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nfs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NFS_FS
+diff -Nur linux-2.4.32/include/config/nfs/v3.h linux-2.4.32.patched/include/config/nfs/v3.h
+--- linux-2.4.32/include/config/nfs/v3.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nfs/v3.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NFS_V3 1
+diff -Nur linux-2.4.32/include/config/nfsd/tcp.h linux-2.4.32.patched/include/config/nfsd/tcp.h
+--- linux-2.4.32/include/config/nfsd/tcp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nfsd/tcp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NFSD_TCP
+diff -Nur linux-2.4.32/include/config/nfsd/v3.h linux-2.4.32.patched/include/config/nfsd/v3.h
+--- linux-2.4.32/include/config/nfsd/v3.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nfsd/v3.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NFSD_V3
+diff -Nur linux-2.4.32/include/config/nfsd.h linux-2.4.32.patched/include/config/nfsd.h
+--- linux-2.4.32/include/config/nfsd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nfsd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NFSD
+diff -Nur linux-2.4.32/include/config/nftl.h linux-2.4.32.patched/include/config/nftl.h
+--- linux-2.4.32/include/config/nftl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nftl.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NFTL
+diff -Nur linux-2.4.32/include/config/nino.h linux-2.4.32.patched/include/config/nino.h
+--- linux-2.4.32/include/config/nino.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nino.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NINO
+diff -Nur linux-2.4.32/include/config/nls/codepage/1250.h linux-2.4.32.patched/include/config/nls/codepage/1250.h
+--- linux-2.4.32/include/config/nls/codepage/1250.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/1250.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_1250
+diff -Nur linux-2.4.32/include/config/nls/codepage/1251.h linux-2.4.32.patched/include/config/nls/codepage/1251.h
+--- linux-2.4.32/include/config/nls/codepage/1251.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/1251.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_1251
+diff -Nur linux-2.4.32/include/config/nls/codepage/437.h linux-2.4.32.patched/include/config/nls/codepage/437.h
+--- linux-2.4.32/include/config/nls/codepage/437.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/437.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_437
+diff -Nur linux-2.4.32/include/config/nls/codepage/737.h linux-2.4.32.patched/include/config/nls/codepage/737.h
+--- linux-2.4.32/include/config/nls/codepage/737.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/737.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_737
+diff -Nur linux-2.4.32/include/config/nls/codepage/775.h linux-2.4.32.patched/include/config/nls/codepage/775.h
+--- linux-2.4.32/include/config/nls/codepage/775.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/775.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_775
+diff -Nur linux-2.4.32/include/config/nls/codepage/850.h linux-2.4.32.patched/include/config/nls/codepage/850.h
+--- linux-2.4.32/include/config/nls/codepage/850.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/850.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_850
+diff -Nur linux-2.4.32/include/config/nls/codepage/852.h linux-2.4.32.patched/include/config/nls/codepage/852.h
+--- linux-2.4.32/include/config/nls/codepage/852.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/852.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_852
+diff -Nur linux-2.4.32/include/config/nls/codepage/855.h linux-2.4.32.patched/include/config/nls/codepage/855.h
+--- linux-2.4.32/include/config/nls/codepage/855.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/855.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_855
+diff -Nur linux-2.4.32/include/config/nls/codepage/857.h linux-2.4.32.patched/include/config/nls/codepage/857.h
+--- linux-2.4.32/include/config/nls/codepage/857.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/857.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_857
+diff -Nur linux-2.4.32/include/config/nls/codepage/860.h linux-2.4.32.patched/include/config/nls/codepage/860.h
+--- linux-2.4.32/include/config/nls/codepage/860.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/860.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_860
+diff -Nur linux-2.4.32/include/config/nls/codepage/861.h linux-2.4.32.patched/include/config/nls/codepage/861.h
+--- linux-2.4.32/include/config/nls/codepage/861.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/861.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_861
+diff -Nur linux-2.4.32/include/config/nls/codepage/862.h linux-2.4.32.patched/include/config/nls/codepage/862.h
+--- linux-2.4.32/include/config/nls/codepage/862.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/862.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_862
+diff -Nur linux-2.4.32/include/config/nls/codepage/863.h linux-2.4.32.patched/include/config/nls/codepage/863.h
+--- linux-2.4.32/include/config/nls/codepage/863.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/863.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_863
+diff -Nur linux-2.4.32/include/config/nls/codepage/864.h linux-2.4.32.patched/include/config/nls/codepage/864.h
+--- linux-2.4.32/include/config/nls/codepage/864.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/864.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_864
+diff -Nur linux-2.4.32/include/config/nls/codepage/865.h linux-2.4.32.patched/include/config/nls/codepage/865.h
+--- linux-2.4.32/include/config/nls/codepage/865.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/865.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_865
+diff -Nur linux-2.4.32/include/config/nls/codepage/866.h linux-2.4.32.patched/include/config/nls/codepage/866.h
+--- linux-2.4.32/include/config/nls/codepage/866.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/866.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_866
+diff -Nur linux-2.4.32/include/config/nls/codepage/869.h linux-2.4.32.patched/include/config/nls/codepage/869.h
+--- linux-2.4.32/include/config/nls/codepage/869.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/869.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_869
+diff -Nur linux-2.4.32/include/config/nls/codepage/874.h linux-2.4.32.patched/include/config/nls/codepage/874.h
+--- linux-2.4.32/include/config/nls/codepage/874.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/874.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_874
+diff -Nur linux-2.4.32/include/config/nls/codepage/932.h linux-2.4.32.patched/include/config/nls/codepage/932.h
+--- linux-2.4.32/include/config/nls/codepage/932.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/932.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_932
+diff -Nur linux-2.4.32/include/config/nls/codepage/936.h linux-2.4.32.patched/include/config/nls/codepage/936.h
+--- linux-2.4.32/include/config/nls/codepage/936.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/936.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_936
+diff -Nur linux-2.4.32/include/config/nls/codepage/949.h linux-2.4.32.patched/include/config/nls/codepage/949.h
+--- linux-2.4.32/include/config/nls/codepage/949.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/949.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_949
+diff -Nur linux-2.4.32/include/config/nls/codepage/950.h linux-2.4.32.patched/include/config/nls/codepage/950.h
+--- linux-2.4.32/include/config/nls/codepage/950.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/codepage/950.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_CODEPAGE_950
+diff -Nur linux-2.4.32/include/config/nls/default.h linux-2.4.32.patched/include/config/nls/default.h
+--- linux-2.4.32/include/config/nls/default.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/default.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NLS_DEFAULT "iso8859-1"
+diff -Nur linux-2.4.32/include/config/nls/iso8859/13.h linux-2.4.32.patched/include/config/nls/iso8859/13.h
+--- linux-2.4.32/include/config/nls/iso8859/13.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/iso8859/13.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_ISO8859_13
+diff -Nur linux-2.4.32/include/config/nls/iso8859/14.h linux-2.4.32.patched/include/config/nls/iso8859/14.h
+--- linux-2.4.32/include/config/nls/iso8859/14.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/iso8859/14.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_ISO8859_14
+diff -Nur linux-2.4.32/include/config/nls/iso8859/15.h linux-2.4.32.patched/include/config/nls/iso8859/15.h
+--- linux-2.4.32/include/config/nls/iso8859/15.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/iso8859/15.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_ISO8859_15
+diff -Nur linux-2.4.32/include/config/nls/iso8859/1.h linux-2.4.32.patched/include/config/nls/iso8859/1.h
+--- linux-2.4.32/include/config/nls/iso8859/1.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/iso8859/1.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_ISO8859_1
+diff -Nur linux-2.4.32/include/config/nls/iso8859/2.h linux-2.4.32.patched/include/config/nls/iso8859/2.h
+--- linux-2.4.32/include/config/nls/iso8859/2.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/iso8859/2.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_ISO8859_2
+diff -Nur linux-2.4.32/include/config/nls/iso8859/3.h linux-2.4.32.patched/include/config/nls/iso8859/3.h
+--- linux-2.4.32/include/config/nls/iso8859/3.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/iso8859/3.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_ISO8859_3
+diff -Nur linux-2.4.32/include/config/nls/iso8859/4.h linux-2.4.32.patched/include/config/nls/iso8859/4.h
+--- linux-2.4.32/include/config/nls/iso8859/4.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/iso8859/4.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_ISO8859_4
+diff -Nur linux-2.4.32/include/config/nls/iso8859/5.h linux-2.4.32.patched/include/config/nls/iso8859/5.h
+--- linux-2.4.32/include/config/nls/iso8859/5.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/iso8859/5.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_ISO8859_5
+diff -Nur linux-2.4.32/include/config/nls/iso8859/6.h linux-2.4.32.patched/include/config/nls/iso8859/6.h
+--- linux-2.4.32/include/config/nls/iso8859/6.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/iso8859/6.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_ISO8859_6
+diff -Nur linux-2.4.32/include/config/nls/iso8859/7.h linux-2.4.32.patched/include/config/nls/iso8859/7.h
+--- linux-2.4.32/include/config/nls/iso8859/7.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/iso8859/7.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_ISO8859_7
+diff -Nur linux-2.4.32/include/config/nls/iso8859/8.h linux-2.4.32.patched/include/config/nls/iso8859/8.h
+--- linux-2.4.32/include/config/nls/iso8859/8.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/iso8859/8.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_ISO8859_8
+diff -Nur linux-2.4.32/include/config/nls/iso8859/9.h linux-2.4.32.patched/include/config/nls/iso8859/9.h
+--- linux-2.4.32/include/config/nls/iso8859/9.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/iso8859/9.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_ISO8859_9
+diff -Nur linux-2.4.32/include/config/nls/koi8/r.h linux-2.4.32.patched/include/config/nls/koi8/r.h
+--- linux-2.4.32/include/config/nls/koi8/r.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/koi8/r.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_KOI8_R
+diff -Nur linux-2.4.32/include/config/nls/koi8/u.h linux-2.4.32.patched/include/config/nls/koi8/u.h
+--- linux-2.4.32/include/config/nls/koi8/u.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/koi8/u.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_KOI8_U
+diff -Nur linux-2.4.32/include/config/nls/utf8.h linux-2.4.32.patched/include/config/nls/utf8.h
+--- linux-2.4.32/include/config/nls/utf8.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls/utf8.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NLS_UTF8
+diff -Nur linux-2.4.32/include/config/nls.h linux-2.4.32.patched/include/config/nls.h
+--- linux-2.4.32/include/config/nls.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nls.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NLS 1
+diff -Nur linux-2.4.32/include/config/noncoherent/io.h linux-2.4.32.patched/include/config/noncoherent/io.h
+--- linux-2.4.32/include/config/noncoherent/io.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/noncoherent/io.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_NONCOHERENT_IO 1
+diff -Nur linux-2.4.32/include/config/ns83820.h linux-2.4.32.patched/include/config/ns83820.h
+--- linux-2.4.32/include/config/ns83820.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ns83820.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NS83820
+diff -Nur linux-2.4.32/include/config/ntfs/fs.h linux-2.4.32.patched/include/config/ntfs/fs.h
+--- linux-2.4.32/include/config/ntfs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ntfs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NTFS_FS
+diff -Nur linux-2.4.32/include/config/ntfs/rw.h linux-2.4.32.patched/include/config/ntfs/rw.h
+--- linux-2.4.32/include/config/ntfs/rw.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ntfs/rw.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NTFS_RW
+diff -Nur linux-2.4.32/include/config/nvram.h linux-2.4.32.patched/include/config/nvram.h
+--- linux-2.4.32/include/config/nvram.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/nvram.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_NVRAM
+diff -Nur linux-2.4.32/include/config/olivetti/m700.h linux-2.4.32.patched/include/config/olivetti/m700.h
+--- linux-2.4.32/include/config/olivetti/m700.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/olivetti/m700.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_OLIVETTI_M700
+diff -Nur linux-2.4.32/include/config/oom/killer.h linux-2.4.32.patched/include/config/oom/killer.h
+--- linux-2.4.32/include/config/oom/killer.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/oom/killer.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_OOM_KILLER
+diff -Nur linux-2.4.32/include/config/osf/partition.h linux-2.4.32.patched/include/config/osf/partition.h
+--- linux-2.4.32/include/config/osf/partition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/osf/partition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_OSF_PARTITION
+diff -Nur linux-2.4.32/include/config/packet/mmap.h linux-2.4.32.patched/include/config/packet/mmap.h
+--- linux-2.4.32/include/config/packet/mmap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/packet/mmap.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PACKET_MMAP 1
+diff -Nur linux-2.4.32/include/config/packet.h linux-2.4.32.patched/include/config/packet.h
+--- linux-2.4.32/include/config/packet.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/packet.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PACKET 1
+diff -Nur linux-2.4.32/include/config/page/size/16kb.h linux-2.4.32.patched/include/config/page/size/16kb.h
+--- linux-2.4.32/include/config/page/size/16kb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/page/size/16kb.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PAGE_SIZE_16KB
+diff -Nur linux-2.4.32/include/config/page/size/4kb.h linux-2.4.32.patched/include/config/page/size/4kb.h
+--- linux-2.4.32/include/config/page/size/4kb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/page/size/4kb.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PAGE_SIZE_4KB 1
+diff -Nur linux-2.4.32/include/config/page/size/64kb.h linux-2.4.32.patched/include/config/page/size/64kb.h
+--- linux-2.4.32/include/config/page/size/64kb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/page/size/64kb.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PAGE_SIZE_64KB
+diff -Nur linux-2.4.32/include/config/paride.h linux-2.4.32.patched/include/config/paride.h
+--- linux-2.4.32/include/config/paride.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/paride.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PARIDE
+diff -Nur linux-2.4.32/include/config/parport/1284.h linux-2.4.32.patched/include/config/parport/1284.h
+--- linux-2.4.32/include/config/parport/1284.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/parport/1284.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PARPORT_1284
+diff -Nur linux-2.4.32/include/config/parport/amiga.h linux-2.4.32.patched/include/config/parport/amiga.h
+--- linux-2.4.32/include/config/parport/amiga.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/parport/amiga.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PARPORT_AMIGA
+diff -Nur linux-2.4.32/include/config/parport/atari.h linux-2.4.32.patched/include/config/parport/atari.h
+--- linux-2.4.32/include/config/parport/atari.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/parport/atari.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PARPORT_ATARI
+diff -Nur linux-2.4.32/include/config/parport/gsc.h linux-2.4.32.patched/include/config/parport/gsc.h
+--- linux-2.4.32/include/config/parport/gsc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/parport/gsc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PARPORT_GSC
+diff -Nur linux-2.4.32/include/config/parport/ip22.h linux-2.4.32.patched/include/config/parport/ip22.h
+--- linux-2.4.32/include/config/parport/ip22.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/parport/ip22.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PARPORT_IP22
+diff -Nur linux-2.4.32/include/config/parport/mfc3.h linux-2.4.32.patched/include/config/parport/mfc3.h
+--- linux-2.4.32/include/config/parport/mfc3.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/parport/mfc3.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PARPORT_MFC3
+diff -Nur linux-2.4.32/include/config/parport/module.h linux-2.4.32.patched/include/config/parport/module.h
+--- linux-2.4.32/include/config/parport/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/parport/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PARPORT_MODULE 1
+diff -Nur linux-2.4.32/include/config/parport/other.h linux-2.4.32.patched/include/config/parport/other.h
+--- linux-2.4.32/include/config/parport/other.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/parport/other.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PARPORT_OTHER
+diff -Nur linux-2.4.32/include/config/parport/pc.h linux-2.4.32.patched/include/config/parport/pc.h
+--- linux-2.4.32/include/config/parport/pc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/parport/pc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PARPORT_PC
+diff -Nur linux-2.4.32/include/config/parport/splink/module.h linux-2.4.32.patched/include/config/parport/splink/module.h
+--- linux-2.4.32/include/config/parport/splink/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/parport/splink/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PARPORT_SPLINK_MODULE 1
+diff -Nur linux-2.4.32/include/config/parport/splink.h linux-2.4.32.patched/include/config/parport/splink.h
+--- linux-2.4.32/include/config/parport/splink.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/parport/splink.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PARPORT_SPLINK
+diff -Nur linux-2.4.32/include/config/parport/sunbpp.h linux-2.4.32.patched/include/config/parport/sunbpp.h
+--- linux-2.4.32/include/config/parport/sunbpp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/parport/sunbpp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PARPORT_SUNBPP
+diff -Nur linux-2.4.32/include/config/parport.h linux-2.4.32.patched/include/config/parport.h
+--- linux-2.4.32/include/config/parport.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/parport.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PARPORT
+diff -Nur linux-2.4.32/include/config/partition/advanced.h linux-2.4.32.patched/include/config/partition/advanced.h
+--- linux-2.4.32/include/config/partition/advanced.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/partition/advanced.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PARTITION_ADVANCED 1
+diff -Nur linux-2.4.32/include/config/pci/auto.h linux-2.4.32.patched/include/config/pci/auto.h
+--- linux-2.4.32/include/config/pci/auto.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pci/auto.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PCI_AUTO 1
+diff -Nur linux-2.4.32/include/config/pci/hermes.h linux-2.4.32.patched/include/config/pci/hermes.h
+--- linux-2.4.32/include/config/pci/hermes.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pci/hermes.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PCI_HERMES
+diff -Nur linux-2.4.32/include/config/pci/names.h linux-2.4.32.patched/include/config/pci/names.h
+--- linux-2.4.32/include/config/pci/names.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pci/names.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PCI_NAMES
+diff -Nur linux-2.4.32/include/config/pci/new.h linux-2.4.32.patched/include/config/pci/new.h
+--- linux-2.4.32/include/config/pci/new.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pci/new.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PCI_NEW
+diff -Nur linux-2.4.32/include/config/pci.h linux-2.4.32.patched/include/config/pci.h
+--- linux-2.4.32/include/config/pci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PCI 1
+diff -Nur linux-2.4.32/include/config/pcmcia/atmel.h linux-2.4.32.patched/include/config/pcmcia/atmel.h
+--- linux-2.4.32/include/config/pcmcia/atmel.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pcmcia/atmel.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PCMCIA_ATMEL
+diff -Nur linux-2.4.32/include/config/pcmcia/hermes.h linux-2.4.32.patched/include/config/pcmcia/hermes.h
+--- linux-2.4.32/include/config/pcmcia/hermes.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pcmcia/hermes.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PCMCIA_HERMES
+diff -Nur linux-2.4.32/include/config/pcmcia/module.h linux-2.4.32.patched/include/config/pcmcia/module.h
+--- linux-2.4.32/include/config/pcmcia/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pcmcia/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PCMCIA_MODULE 1
+diff -Nur linux-2.4.32/include/config/pcmcia/serial/cs/module.h linux-2.4.32.patched/include/config/pcmcia/serial/cs/module.h
+--- linux-2.4.32/include/config/pcmcia/serial/cs/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pcmcia/serial/cs/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PCMCIA_SERIAL_CS_MODULE 1
+diff -Nur linux-2.4.32/include/config/pcmcia/serial/cs.h linux-2.4.32.patched/include/config/pcmcia/serial/cs.h
+--- linux-2.4.32/include/config/pcmcia/serial/cs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pcmcia/serial/cs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PCMCIA_SERIAL_CS
+diff -Nur linux-2.4.32/include/config/pcmcia.h linux-2.4.32.patched/include/config/pcmcia.h
+--- linux-2.4.32/include/config/pcmcia.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pcmcia.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PCMCIA
+diff -Nur linux-2.4.32/include/config/pcnet32.h linux-2.4.32.patched/include/config/pcnet32.h
+--- linux-2.4.32/include/config/pcnet32.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pcnet32.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PCNET32
+diff -Nur linux-2.4.32/include/config/pcwatchdog.h linux-2.4.32.patched/include/config/pcwatchdog.h
+--- linux-2.4.32/include/config/pcwatchdog.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pcwatchdog.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PCWATCHDOG
+diff -Nur linux-2.4.32/include/config/pdc202xx/burst.h linux-2.4.32.patched/include/config/pdc202xx/burst.h
+--- linux-2.4.32/include/config/pdc202xx/burst.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pdc202xx/burst.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PDC202XX_BURST 1
+diff -Nur linux-2.4.32/include/config/pdc202xx/force.h linux-2.4.32.patched/include/config/pdc202xx/force.h
+--- linux-2.4.32/include/config/pdc202xx/force.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pdc202xx/force.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PDC202XX_FORCE
+diff -Nur linux-2.4.32/include/config/phone/ixj/pcmcia.h linux-2.4.32.patched/include/config/phone/ixj/pcmcia.h
+--- linux-2.4.32/include/config/phone/ixj/pcmcia.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/phone/ixj/pcmcia.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PHONE_IXJ_PCMCIA
+diff -Nur linux-2.4.32/include/config/phone/ixj.h linux-2.4.32.patched/include/config/phone/ixj.h
+--- linux-2.4.32/include/config/phone/ixj.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/phone/ixj.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PHONE_IXJ
+diff -Nur linux-2.4.32/include/config/phone.h linux-2.4.32.patched/include/config/phone.h
+--- linux-2.4.32/include/config/phone.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/phone.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PHONE
+diff -Nur linux-2.4.32/include/config/plip.h linux-2.4.32.patched/include/config/plip.h
+--- linux-2.4.32/include/config/plip.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/plip.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PLIP
+diff -Nur linux-2.4.32/include/config/plx/hermes.h linux-2.4.32.patched/include/config/plx/hermes.h
+--- linux-2.4.32/include/config/plx/hermes.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/plx/hermes.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PLX_HERMES
+diff -Nur linux-2.4.32/include/config/pmc/big/sur.h linux-2.4.32.patched/include/config/pmc/big/sur.h
+--- linux-2.4.32/include/config/pmc/big/sur.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pmc/big/sur.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PMC_BIG_SUR
+diff -Nur linux-2.4.32/include/config/pmc/stretch.h linux-2.4.32.patched/include/config/pmc/stretch.h
+--- linux-2.4.32/include/config/pmc/stretch.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pmc/stretch.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PMC_STRETCH
+diff -Nur linux-2.4.32/include/config/pmc/yosemite.h linux-2.4.32.patched/include/config/pmc/yosemite.h
+--- linux-2.4.32/include/config/pmc/yosemite.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pmc/yosemite.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PMC_YOSEMITE
+diff -Nur linux-2.4.32/include/config/pnp.h linux-2.4.32.patched/include/config/pnp.h
+--- linux-2.4.32/include/config/pnp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pnp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PNP
+diff -Nur linux-2.4.32/include/config/ppdev/module.h linux-2.4.32.patched/include/config/ppdev/module.h
+--- linux-2.4.32/include/config/ppdev/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppdev/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PPDEV_MODULE 1
+diff -Nur linux-2.4.32/include/config/ppdev.h linux-2.4.32.patched/include/config/ppdev.h
+--- linux-2.4.32/include/config/ppdev.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppdev.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PPDEV
+diff -Nur linux-2.4.32/include/config/ppp/async/module.h linux-2.4.32.patched/include/config/ppp/async/module.h
+--- linux-2.4.32/include/config/ppp/async/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppp/async/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PPP_ASYNC_MODULE 1
+diff -Nur linux-2.4.32/include/config/ppp/async.h linux-2.4.32.patched/include/config/ppp/async.h
+--- linux-2.4.32/include/config/ppp/async.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppp/async.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PPP_ASYNC
+diff -Nur linux-2.4.32/include/config/ppp/bsdcomp/module.h linux-2.4.32.patched/include/config/ppp/bsdcomp/module.h
+--- linux-2.4.32/include/config/ppp/bsdcomp/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppp/bsdcomp/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PPP_BSDCOMP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ppp/bsdcomp.h linux-2.4.32.patched/include/config/ppp/bsdcomp.h
+--- linux-2.4.32/include/config/ppp/bsdcomp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppp/bsdcomp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PPP_BSDCOMP
+diff -Nur linux-2.4.32/include/config/ppp/deflate/module.h linux-2.4.32.patched/include/config/ppp/deflate/module.h
+--- linux-2.4.32/include/config/ppp/deflate/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppp/deflate/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PPP_DEFLATE_MODULE 1
+diff -Nur linux-2.4.32/include/config/ppp/deflate.h linux-2.4.32.patched/include/config/ppp/deflate.h
+--- linux-2.4.32/include/config/ppp/deflate.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppp/deflate.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PPP_DEFLATE
+diff -Nur linux-2.4.32/include/config/ppp/filter.h linux-2.4.32.patched/include/config/ppp/filter.h
+--- linux-2.4.32/include/config/ppp/filter.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppp/filter.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PPP_FILTER 1
+diff -Nur linux-2.4.32/include/config/ppp/module.h linux-2.4.32.patched/include/config/ppp/module.h
+--- linux-2.4.32/include/config/ppp/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppp/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PPP_MODULE 1
+diff -Nur linux-2.4.32/include/config/ppp/mppe/mppc/module.h linux-2.4.32.patched/include/config/ppp/mppe/mppc/module.h
+--- linux-2.4.32/include/config/ppp/mppe/mppc/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppp/mppe/mppc/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PPP_MPPE_MPPC_MODULE 1
+diff -Nur linux-2.4.32/include/config/ppp/mppe/mppc.h linux-2.4.32.patched/include/config/ppp/mppe/mppc.h
+--- linux-2.4.32/include/config/ppp/mppe/mppc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppp/mppe/mppc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PPP_MPPE_MPPC
+diff -Nur linux-2.4.32/include/config/ppp/multilink.h linux-2.4.32.patched/include/config/ppp/multilink.h
+--- linux-2.4.32/include/config/ppp/multilink.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppp/multilink.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PPP_MULTILINK
+diff -Nur linux-2.4.32/include/config/ppp/sync/tty.h linux-2.4.32.patched/include/config/ppp/sync/tty.h
+--- linux-2.4.32/include/config/ppp/sync/tty.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppp/sync/tty.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PPP_SYNC_TTY
+diff -Nur linux-2.4.32/include/config/ppp.h linux-2.4.32.patched/include/config/ppp.h
+--- linux-2.4.32/include/config/ppp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ppp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PPP
+diff -Nur linux-2.4.32/include/config/pppoe/module.h linux-2.4.32.patched/include/config/pppoe/module.h
+--- linux-2.4.32/include/config/pppoe/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pppoe/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PPPOE_MODULE 1
+diff -Nur linux-2.4.32/include/config/pppoe.h linux-2.4.32.patched/include/config/pppoe.h
+--- linux-2.4.32/include/config/pppoe.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/pppoe.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PPPOE
+diff -Nur linux-2.4.32/include/config/printer/module.h linux-2.4.32.patched/include/config/printer/module.h
+--- linux-2.4.32/include/config/printer/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/printer/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PRINTER_MODULE 1
+diff -Nur linux-2.4.32/include/config/printer.h linux-2.4.32.patched/include/config/printer.h
+--- linux-2.4.32/include/config/printer.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/printer.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PRINTER
+diff -Nur linux-2.4.32/include/config/prism54.h linux-2.4.32.patched/include/config/prism54.h
+--- linux-2.4.32/include/config/prism54.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/prism54.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_PRISM54
+diff -Nur linux-2.4.32/include/config/proc/fs.h linux-2.4.32.patched/include/config/proc/fs.h
+--- linux-2.4.32/include/config/proc/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/proc/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_PROC_FS 1
+diff -Nur linux-2.4.32/include/config/qfmt/v2.h linux-2.4.32.patched/include/config/qfmt/v2.h
+--- linux-2.4.32/include/config/qfmt/v2.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/qfmt/v2.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_QFMT_V2
+diff -Nur linux-2.4.32/include/config/qic02/tape.h linux-2.4.32.patched/include/config/qic02/tape.h
+--- linux-2.4.32/include/config/qic02/tape.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/qic02/tape.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_QIC02_TAPE
+diff -Nur linux-2.4.32/include/config/qnx4fs/fs.h linux-2.4.32.patched/include/config/qnx4fs/fs.h
+--- linux-2.4.32/include/config/qnx4fs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/qnx4fs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_QNX4FS_FS
+diff -Nur linux-2.4.32/include/config/qnx4fs/rw.h linux-2.4.32.patched/include/config/qnx4fs/rw.h
+--- linux-2.4.32/include/config/qnx4fs/rw.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/qnx4fs/rw.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_QNX4FS_RW
+diff -Nur linux-2.4.32/include/config/quota.h linux-2.4.32.patched/include/config/quota.h
+--- linux-2.4.32/include/config/quota.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/quota.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_QUOTA
+diff -Nur linux-2.4.32/include/config/r3964.h linux-2.4.32.patched/include/config/r3964.h
+--- linux-2.4.32/include/config/r3964.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/r3964.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_R3964
+diff -Nur linux-2.4.32/include/config/r8169.h linux-2.4.32.patched/include/config/r8169.h
+--- linux-2.4.32/include/config/r8169.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/r8169.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_R8169
+diff -Nur linux-2.4.32/include/config/radio/gemtek/pci.h linux-2.4.32.patched/include/config/radio/gemtek/pci.h
+--- linux-2.4.32/include/config/radio/gemtek/pci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/radio/gemtek/pci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_RADIO_GEMTEK_PCI
+diff -Nur linux-2.4.32/include/config/radio/maestro.h linux-2.4.32.patched/include/config/radio/maestro.h
+--- linux-2.4.32/include/config/radio/maestro.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/radio/maestro.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_RADIO_MAESTRO
+diff -Nur linux-2.4.32/include/config/radio/maxiradio.h linux-2.4.32.patched/include/config/radio/maxiradio.h
+--- linux-2.4.32/include/config/radio/maxiradio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/radio/maxiradio.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_RADIO_MAXIRADIO
+diff -Nur linux-2.4.32/include/config/radio/miropcm20.h linux-2.4.32.patched/include/config/radio/miropcm20.h
+--- linux-2.4.32/include/config/radio/miropcm20.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/radio/miropcm20.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_RADIO_MIROPCM20
+diff -Nur linux-2.4.32/include/config/ramfs.h linux-2.4.32.patched/include/config/ramfs.h
+--- linux-2.4.32/include/config/ramfs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ramfs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_RAMFS 1
+diff -Nur linux-2.4.32/include/config/rcpci.h linux-2.4.32.patched/include/config/rcpci.h
+--- linux-2.4.32/include/config/rcpci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/rcpci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_RCPCI
+diff -Nur linux-2.4.32/include/config/reiserfs/check.h linux-2.4.32.patched/include/config/reiserfs/check.h
+--- linux-2.4.32/include/config/reiserfs/check.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/reiserfs/check.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_REISERFS_CHECK
+diff -Nur linux-2.4.32/include/config/reiserfs/fs.h linux-2.4.32.patched/include/config/reiserfs/fs.h
+--- linux-2.4.32/include/config/reiserfs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/reiserfs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_REISERFS_FS
+diff -Nur linux-2.4.32/include/config/reiserfs/proc/info.h linux-2.4.32.patched/include/config/reiserfs/proc/info.h
+--- linux-2.4.32/include/config/reiserfs/proc/info.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/reiserfs/proc/info.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_REISERFS_PROC_INFO
+diff -Nur linux-2.4.32/include/config/remote/debug.h linux-2.4.32.patched/include/config/remote/debug.h
+--- linux-2.4.32/include/config/remote/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/remote/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_REMOTE_DEBUG
+diff -Nur linux-2.4.32/include/config/romfs/fs.h linux-2.4.32.patched/include/config/romfs/fs.h
+--- linux-2.4.32/include/config/romfs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/romfs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ROMFS_FS
+diff -Nur linux-2.4.32/include/config/root/nfs.h linux-2.4.32.patched/include/config/root/nfs.h
+--- linux-2.4.32/include/config/root/nfs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/root/nfs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ROOT_NFS
+diff -Nur linux-2.4.32/include/config/rose.h linux-2.4.32.patched/include/config/rose.h
+--- linux-2.4.32/include/config/rose.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/rose.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ROSE
+diff -Nur linux-2.4.32/include/config/rtc.h linux-2.4.32.patched/include/config/rtc.h
+--- linux-2.4.32/include/config/rtc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/rtc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_RTC
+diff -Nur linux-2.4.32/include/config/runtime/debug.h linux-2.4.32.patched/include/config/runtime/debug.h
+--- linux-2.4.32/include/config/runtime/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/runtime/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_RUNTIME_DEBUG
+diff -Nur linux-2.4.32/include/config/rwsem/generic/spinlock.h linux-2.4.32.patched/include/config/rwsem/generic/spinlock.h
+--- linux-2.4.32/include/config/rwsem/generic/spinlock.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/rwsem/generic/spinlock.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_RWSEM_GENERIC_SPINLOCK 1
+diff -Nur linux-2.4.32/include/config/rwsem/xchgadd/algorithm.h linux-2.4.32.patched/include/config/rwsem/xchgadd/algorithm.h
+--- linux-2.4.32/include/config/rwsem/xchgadd/algorithm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/rwsem/xchgadd/algorithm.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_RWSEM_XCHGADD_ALGORITHM
+diff -Nur linux-2.4.32/include/config/sbus.h linux-2.4.32.patched/include/config/sbus.h
+--- linux-2.4.32/include/config/sbus.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sbus.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SBUS
+diff -Nur linux-2.4.32/include/config/sc1200/wdt.h linux-2.4.32.patched/include/config/sc1200/wdt.h
+--- linux-2.4.32/include/config/sc1200/wdt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sc1200/wdt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SC1200_WDT
+diff -Nur linux-2.4.32/include/config/sc520/wdt.h linux-2.4.32.patched/include/config/sc520/wdt.h
+--- linux-2.4.32/include/config/sc520/wdt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sc520/wdt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SC520_WDT
+diff -Nur linux-2.4.32/include/config/scc/delay.h linux-2.4.32.patched/include/config/scc/delay.h
+--- linux-2.4.32/include/config/scc/delay.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scc/delay.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCC_DELAY
+diff -Nur linux-2.4.32/include/config/scc/trxecho.h linux-2.4.32.patched/include/config/scc/trxecho.h
+--- linux-2.4.32/include/config/scc/trxecho.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scc/trxecho.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCC_TRXECHO
+diff -Nur linux-2.4.32/include/config/scsi/7000fasst.h linux-2.4.32.patched/include/config/scsi/7000fasst.h
+--- linux-2.4.32/include/config/scsi/7000fasst.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/7000fasst.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_7000FASST
+diff -Nur linux-2.4.32/include/config/scsi/aacraid.h linux-2.4.32.patched/include/config/scsi/aacraid.h
+--- linux-2.4.32/include/config/scsi/aacraid.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/aacraid.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_AACRAID
+diff -Nur linux-2.4.32/include/config/scsi/acard.h linux-2.4.32.patched/include/config/scsi/acard.h
+--- linux-2.4.32/include/config/scsi/acard.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/acard.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_ACARD
+diff -Nur linux-2.4.32/include/config/scsi/advansys.h linux-2.4.32.patched/include/config/scsi/advansys.h
+--- linux-2.4.32/include/config/scsi/advansys.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/advansys.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_ADVANSYS
+diff -Nur linux-2.4.32/include/config/scsi/aha152x.h linux-2.4.32.patched/include/config/scsi/aha152x.h
+--- linux-2.4.32/include/config/scsi/aha152x.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/aha152x.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_AHA152X
+diff -Nur linux-2.4.32/include/config/scsi/aha1542.h linux-2.4.32.patched/include/config/scsi/aha1542.h
+--- linux-2.4.32/include/config/scsi/aha1542.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/aha1542.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_AHA1542
+diff -Nur linux-2.4.32/include/config/scsi/aha1740.h linux-2.4.32.patched/include/config/scsi/aha1740.h
+--- linux-2.4.32/include/config/scsi/aha1740.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/aha1740.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_AHA1740
+diff -Nur linux-2.4.32/include/config/scsi/aic79xx.h linux-2.4.32.patched/include/config/scsi/aic79xx.h
+--- linux-2.4.32/include/config/scsi/aic79xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/aic79xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_AIC79XX
+diff -Nur linux-2.4.32/include/config/scsi/aic7xxx/old.h linux-2.4.32.patched/include/config/scsi/aic7xxx/old.h
+--- linux-2.4.32/include/config/scsi/aic7xxx/old.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/aic7xxx/old.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_AIC7XXX_OLD
+diff -Nur linux-2.4.32/include/config/scsi/aic7xxx.h linux-2.4.32.patched/include/config/scsi/aic7xxx.h
+--- linux-2.4.32/include/config/scsi/aic7xxx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/aic7xxx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_AIC7XXX
+diff -Nur linux-2.4.32/include/config/scsi/am53c974.h linux-2.4.32.patched/include/config/scsi/am53c974.h
+--- linux-2.4.32/include/config/scsi/am53c974.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/am53c974.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_AM53C974
+diff -Nur linux-2.4.32/include/config/scsi/ata/piix.h linux-2.4.32.patched/include/config/scsi/ata/piix.h
+--- linux-2.4.32/include/config/scsi/ata/piix.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/ata/piix.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_ATA_PIIX
+diff -Nur linux-2.4.32/include/config/scsi/buslogic.h linux-2.4.32.patched/include/config/scsi/buslogic.h
+--- linux-2.4.32/include/config/scsi/buslogic.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/buslogic.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_BUSLOGIC
+diff -Nur linux-2.4.32/include/config/scsi/constants.h linux-2.4.32.patched/include/config/scsi/constants.h
+--- linux-2.4.32/include/config/scsi/constants.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/constants.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_CONSTANTS
+diff -Nur linux-2.4.32/include/config/scsi/cpqfcts.h linux-2.4.32.patched/include/config/scsi/cpqfcts.h
+--- linux-2.4.32/include/config/scsi/cpqfcts.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/cpqfcts.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_CPQFCTS
+diff -Nur linux-2.4.32/include/config/scsi/dc390t.h linux-2.4.32.patched/include/config/scsi/dc390t.h
+--- linux-2.4.32/include/config/scsi/dc390t.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/dc390t.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_DC390T
+diff -Nur linux-2.4.32/include/config/scsi/debug/queues.h linux-2.4.32.patched/include/config/scsi/debug/queues.h
+--- linux-2.4.32/include/config/scsi/debug/queues.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/debug/queues.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_DEBUG_QUEUES
+diff -Nur linux-2.4.32/include/config/scsi/debug.h linux-2.4.32.patched/include/config/scsi/debug.h
+--- linux-2.4.32/include/config/scsi/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_DEBUG
+diff -Nur linux-2.4.32/include/config/scsi/dmx3191d.h linux-2.4.32.patched/include/config/scsi/dmx3191d.h
+--- linux-2.4.32/include/config/scsi/dmx3191d.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/dmx3191d.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_DMX3191D
+diff -Nur linux-2.4.32/include/config/scsi/dpt/i2o.h linux-2.4.32.patched/include/config/scsi/dpt/i2o.h
+--- linux-2.4.32/include/config/scsi/dpt/i2o.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/dpt/i2o.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_DPT_I2O
+diff -Nur linux-2.4.32/include/config/scsi/dtc3280.h linux-2.4.32.patched/include/config/scsi/dtc3280.h
+--- linux-2.4.32/include/config/scsi/dtc3280.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/dtc3280.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_DTC3280
+diff -Nur linux-2.4.32/include/config/scsi/eata/dma.h linux-2.4.32.patched/include/config/scsi/eata/dma.h
+--- linux-2.4.32/include/config/scsi/eata/dma.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/eata/dma.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_EATA_DMA
+diff -Nur linux-2.4.32/include/config/scsi/eata/pio.h linux-2.4.32.patched/include/config/scsi/eata/pio.h
+--- linux-2.4.32/include/config/scsi/eata/pio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/eata/pio.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_EATA_PIO
+diff -Nur linux-2.4.32/include/config/scsi/eata.h linux-2.4.32.patched/include/config/scsi/eata.h
+--- linux-2.4.32/include/config/scsi/eata.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/eata.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_EATA
+diff -Nur linux-2.4.32/include/config/scsi/future/domain.h linux-2.4.32.patched/include/config/scsi/future/domain.h
+--- linux-2.4.32/include/config/scsi/future/domain.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/future/domain.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_FUTURE_DOMAIN
+diff -Nur linux-2.4.32/include/config/scsi/gdth.h linux-2.4.32.patched/include/config/scsi/gdth.h
+--- linux-2.4.32/include/config/scsi/gdth.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/gdth.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_GDTH
+diff -Nur linux-2.4.32/include/config/scsi/generic/ncr5380.h linux-2.4.32.patched/include/config/scsi/generic/ncr5380.h
+--- linux-2.4.32/include/config/scsi/generic/ncr5380.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/generic/ncr5380.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_GENERIC_NCR5380
+diff -Nur linux-2.4.32/include/config/scsi/imm.h linux-2.4.32.patched/include/config/scsi/imm.h
+--- linux-2.4.32/include/config/scsi/imm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/imm.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_IMM
+diff -Nur linux-2.4.32/include/config/scsi/in2000.h linux-2.4.32.patched/include/config/scsi/in2000.h
+--- linux-2.4.32/include/config/scsi/in2000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/in2000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_IN2000
+diff -Nur linux-2.4.32/include/config/scsi/inia100.h linux-2.4.32.patched/include/config/scsi/inia100.h
+--- linux-2.4.32/include/config/scsi/inia100.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/inia100.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_INIA100
+diff -Nur linux-2.4.32/include/config/scsi/initio.h linux-2.4.32.patched/include/config/scsi/initio.h
+--- linux-2.4.32/include/config/scsi/initio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/initio.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_INITIO
+diff -Nur linux-2.4.32/include/config/scsi/logging.h linux-2.4.32.patched/include/config/scsi/logging.h
+--- linux-2.4.32/include/config/scsi/logging.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/logging.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_LOGGING
+diff -Nur linux-2.4.32/include/config/scsi/megaraid2.h linux-2.4.32.patched/include/config/scsi/megaraid2.h
+--- linux-2.4.32/include/config/scsi/megaraid2.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/megaraid2.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_MEGARAID2
+diff -Nur linux-2.4.32/include/config/scsi/megaraid.h linux-2.4.32.patched/include/config/scsi/megaraid.h
+--- linux-2.4.32/include/config/scsi/megaraid.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/megaraid.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_MEGARAID
+diff -Nur linux-2.4.32/include/config/scsi/module.h linux-2.4.32.patched/include/config/scsi/module.h
+--- linux-2.4.32/include/config/scsi/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_SCSI_MODULE 1
+diff -Nur linux-2.4.32/include/config/scsi/multi/lun.h linux-2.4.32.patched/include/config/scsi/multi/lun.h
+--- linux-2.4.32/include/config/scsi/multi/lun.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/multi/lun.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_SCSI_MULTI_LUN 1
+diff -Nur linux-2.4.32/include/config/scsi/ncr53c406a.h linux-2.4.32.patched/include/config/scsi/ncr53c406a.h
+--- linux-2.4.32/include/config/scsi/ncr53c406a.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/ncr53c406a.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_NCR53C406A
+diff -Nur linux-2.4.32/include/config/scsi/ncr53c7xx.h linux-2.4.32.patched/include/config/scsi/ncr53c7xx.h
+--- linux-2.4.32/include/config/scsi/ncr53c7xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/ncr53c7xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_NCR53C7xx
+diff -Nur linux-2.4.32/include/config/scsi/ncr53c8xx.h linux-2.4.32.patched/include/config/scsi/ncr53c8xx.h
+--- linux-2.4.32/include/config/scsi/ncr53c8xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/ncr53c8xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_NCR53C8XX
+diff -Nur linux-2.4.32/include/config/scsi/nsp32.h linux-2.4.32.patched/include/config/scsi/nsp32.h
+--- linux-2.4.32/include/config/scsi/nsp32.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/nsp32.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_NSP32
+diff -Nur linux-2.4.32/include/config/scsi/pas16.h linux-2.4.32.patched/include/config/scsi/pas16.h
+--- linux-2.4.32/include/config/scsi/pas16.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/pas16.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_PAS16
+diff -Nur linux-2.4.32/include/config/scsi/pci2000.h linux-2.4.32.patched/include/config/scsi/pci2000.h
+--- linux-2.4.32/include/config/scsi/pci2000.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/pci2000.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_PCI2000
+diff -Nur linux-2.4.32/include/config/scsi/pci2220i.h linux-2.4.32.patched/include/config/scsi/pci2220i.h
+--- linux-2.4.32/include/config/scsi/pci2220i.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/pci2220i.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_PCI2220I
+diff -Nur linux-2.4.32/include/config/scsi/pcmcia.h linux-2.4.32.patched/include/config/scsi/pcmcia.h
+--- linux-2.4.32/include/config/scsi/pcmcia.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/pcmcia.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_PCMCIA
+diff -Nur linux-2.4.32/include/config/scsi/ppa.h linux-2.4.32.patched/include/config/scsi/ppa.h
+--- linux-2.4.32/include/config/scsi/ppa.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/ppa.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_PPA
+diff -Nur linux-2.4.32/include/config/scsi/psi240i.h linux-2.4.32.patched/include/config/scsi/psi240i.h
+--- linux-2.4.32/include/config/scsi/psi240i.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/psi240i.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_PSI240I
+diff -Nur linux-2.4.32/include/config/scsi/qlogic/1280.h linux-2.4.32.patched/include/config/scsi/qlogic/1280.h
+--- linux-2.4.32/include/config/scsi/qlogic/1280.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/qlogic/1280.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_QLOGIC_1280
+diff -Nur linux-2.4.32/include/config/scsi/qlogic/fas.h linux-2.4.32.patched/include/config/scsi/qlogic/fas.h
+--- linux-2.4.32/include/config/scsi/qlogic/fas.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/qlogic/fas.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_QLOGIC_FAS
+diff -Nur linux-2.4.32/include/config/scsi/qlogic/fc.h linux-2.4.32.patched/include/config/scsi/qlogic/fc.h
+--- linux-2.4.32/include/config/scsi/qlogic/fc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/qlogic/fc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_QLOGIC_FC
+diff -Nur linux-2.4.32/include/config/scsi/qlogic/isp.h linux-2.4.32.patched/include/config/scsi/qlogic/isp.h
+--- linux-2.4.32/include/config/scsi/qlogic/isp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/qlogic/isp.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_QLOGIC_ISP
+diff -Nur linux-2.4.32/include/config/scsi/sata/ahci.h linux-2.4.32.patched/include/config/scsi/sata/ahci.h
+--- linux-2.4.32/include/config/scsi/sata/ahci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sata/ahci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SATA_AHCI
+diff -Nur linux-2.4.32/include/config/scsi/sata/nv.h linux-2.4.32.patched/include/config/scsi/sata/nv.h
+--- linux-2.4.32/include/config/scsi/sata/nv.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sata/nv.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SATA_NV
+diff -Nur linux-2.4.32/include/config/scsi/sata/promise.h linux-2.4.32.patched/include/config/scsi/sata/promise.h
+--- linux-2.4.32/include/config/scsi/sata/promise.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sata/promise.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SATA_PROMISE
+diff -Nur linux-2.4.32/include/config/scsi/sata/qstor.h linux-2.4.32.patched/include/config/scsi/sata/qstor.h
+--- linux-2.4.32/include/config/scsi/sata/qstor.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sata/qstor.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SATA_QSTOR
+diff -Nur linux-2.4.32/include/config/scsi/sata/sil.h linux-2.4.32.patched/include/config/scsi/sata/sil.h
+--- linux-2.4.32/include/config/scsi/sata/sil.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sata/sil.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SATA_SIL
+diff -Nur linux-2.4.32/include/config/scsi/sata/sis.h linux-2.4.32.patched/include/config/scsi/sata/sis.h
+--- linux-2.4.32/include/config/scsi/sata/sis.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sata/sis.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SATA_SIS
+diff -Nur linux-2.4.32/include/config/scsi/sata/svw.h linux-2.4.32.patched/include/config/scsi/sata/svw.h
+--- linux-2.4.32/include/config/scsi/sata/svw.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sata/svw.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SATA_SVW
+diff -Nur linux-2.4.32/include/config/scsi/sata/sx4.h linux-2.4.32.patched/include/config/scsi/sata/sx4.h
+--- linux-2.4.32/include/config/scsi/sata/sx4.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sata/sx4.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SATA_SX4
+diff -Nur linux-2.4.32/include/config/scsi/sata/uli.h linux-2.4.32.patched/include/config/scsi/sata/uli.h
+--- linux-2.4.32/include/config/scsi/sata/uli.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sata/uli.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SATA_ULI
+diff -Nur linux-2.4.32/include/config/scsi/sata/via.h linux-2.4.32.patched/include/config/scsi/sata/via.h
+--- linux-2.4.32/include/config/scsi/sata/via.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sata/via.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SATA_VIA
+diff -Nur linux-2.4.32/include/config/scsi/sata/vitesse.h linux-2.4.32.patched/include/config/scsi/sata/vitesse.h
+--- linux-2.4.32/include/config/scsi/sata/vitesse.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sata/vitesse.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SATA_VITESSE
+diff -Nur linux-2.4.32/include/config/scsi/sata.h linux-2.4.32.patched/include/config/scsi/sata.h
+--- linux-2.4.32/include/config/scsi/sata.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sata.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SATA
+diff -Nur linux-2.4.32/include/config/scsi/sim710.h linux-2.4.32.patched/include/config/scsi/sim710.h
+--- linux-2.4.32/include/config/scsi/sim710.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sim710.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SIM710
+diff -Nur linux-2.4.32/include/config/scsi/sym53c416.h linux-2.4.32.patched/include/config/scsi/sym53c416.h
+--- linux-2.4.32/include/config/scsi/sym53c416.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sym53c416.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SYM53C416
+diff -Nur linux-2.4.32/include/config/scsi/sym53c8xx/2.h linux-2.4.32.patched/include/config/scsi/sym53c8xx/2.h
+--- linux-2.4.32/include/config/scsi/sym53c8xx/2.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sym53c8xx/2.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SYM53C8XX_2
+diff -Nur linux-2.4.32/include/config/scsi/sym53c8xx.h linux-2.4.32.patched/include/config/scsi/sym53c8xx.h
+--- linux-2.4.32/include/config/scsi/sym53c8xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/sym53c8xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_SYM53C8XX
+diff -Nur linux-2.4.32/include/config/scsi/t128.h linux-2.4.32.patched/include/config/scsi/t128.h
+--- linux-2.4.32/include/config/scsi/t128.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/t128.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_T128
+diff -Nur linux-2.4.32/include/config/scsi/u14/34f.h linux-2.4.32.patched/include/config/scsi/u14/34f.h
+--- linux-2.4.32/include/config/scsi/u14/34f.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi/u14/34f.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI_U14_34F
+diff -Nur linux-2.4.32/include/config/scsi.h linux-2.4.32.patched/include/config/scsi.h
+--- linux-2.4.32/include/config/scsi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scsi.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCSI
+diff -Nur linux-2.4.32/include/config/scx200/gpio.h linux-2.4.32.patched/include/config/scx200/gpio.h
+--- linux-2.4.32/include/config/scx200/gpio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scx200/gpio.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCx200_GPIO
+diff -Nur linux-2.4.32/include/config/scx200/wdt.h linux-2.4.32.patched/include/config/scx200/wdt.h
+--- linux-2.4.32/include/config/scx200/wdt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scx200/wdt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCx200_WDT
+diff -Nur linux-2.4.32/include/config/scx200.h linux-2.4.32.patched/include/config/scx200.h
+--- linux-2.4.32/include/config/scx200.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/scx200.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SCx200
+diff -Nur linux-2.4.32/include/config/sd/extra/devs.h linux-2.4.32.patched/include/config/sd/extra/devs.h
+--- linux-2.4.32/include/config/sd/extra/devs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sd/extra/devs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_SD_EXTRA_DEVS (5)
+diff -Nur linux-2.4.32/include/config/serial/console.h linux-2.4.32.patched/include/config/serial/console.h
+--- linux-2.4.32/include/config/serial/console.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/serial/console.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_SERIAL_CONSOLE 1
+diff -Nur linux-2.4.32/include/config/serial/extended.h linux-2.4.32.patched/include/config/serial/extended.h
+--- linux-2.4.32/include/config/serial/extended.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/serial/extended.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SERIAL_EXTENDED
+diff -Nur linux-2.4.32/include/config/serial/nonstandard.h linux-2.4.32.patched/include/config/serial/nonstandard.h
+--- linux-2.4.32/include/config/serial/nonstandard.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/serial/nonstandard.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SERIAL_NONSTANDARD
+diff -Nur linux-2.4.32/include/config/serial.h linux-2.4.32.patched/include/config/serial.h
+--- linux-2.4.32/include/config/serial.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/serial.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_SERIAL 1
+diff -Nur linux-2.4.32/include/config/sgi/ip22.h linux-2.4.32.patched/include/config/sgi/ip22.h
+--- linux-2.4.32/include/config/sgi/ip22.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sgi/ip22.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SGI_IP22
+diff -Nur linux-2.4.32/include/config/sgi/ip27.h linux-2.4.32.patched/include/config/sgi/ip27.h
+--- linux-2.4.32/include/config/sgi/ip27.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sgi/ip27.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SGI_IP27
+diff -Nur linux-2.4.32/include/config/sgi/partition.h linux-2.4.32.patched/include/config/sgi/partition.h
+--- linux-2.4.32/include/config/sgi/partition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sgi/partition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SGI_PARTITION
+diff -Nur linux-2.4.32/include/config/shaper/module.h linux-2.4.32.patched/include/config/shaper/module.h
+--- linux-2.4.32/include/config/shaper/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/shaper/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_SHAPER_MODULE 1
+diff -Nur linux-2.4.32/include/config/shaper.h linux-2.4.32.patched/include/config/shaper.h
+--- linux-2.4.32/include/config/shaper.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/shaper.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SHAPER
+diff -Nur linux-2.4.32/include/config/sibyte/sb1xxx/soc.h linux-2.4.32.patched/include/config/sibyte/sb1xxx/soc.h
+--- linux-2.4.32/include/config/sibyte/sb1xxx/soc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sibyte/sb1xxx/soc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SIBYTE_SB1xxx_SOC
+diff -Nur linux-2.4.32/include/config/sis900.h linux-2.4.32.patched/include/config/sis900.h
+--- linux-2.4.32/include/config/sis900.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sis900.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SIS900
+diff -Nur linux-2.4.32/include/config/sk98lin.h linux-2.4.32.patched/include/config/sk98lin.h
+--- linux-2.4.32/include/config/sk98lin.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sk98lin.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SK98LIN
+diff -Nur linux-2.4.32/include/config/slip.h linux-2.4.32.patched/include/config/slip.h
+--- linux-2.4.32/include/config/slip.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/slip.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SLIP
+diff -Nur linux-2.4.32/include/config/smb/fs.h linux-2.4.32.patched/include/config/smb/fs.h
+--- linux-2.4.32/include/config/smb/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/smb/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SMB_FS
+diff -Nur linux-2.4.32/include/config/smb/nls.h linux-2.4.32.patched/include/config/smb/nls.h
+--- linux-2.4.32/include/config/smb/nls.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/smb/nls.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SMB_NLS
+diff -Nur linux-2.4.32/include/config/sni/rm200/pci.h linux-2.4.32.patched/include/config/sni/rm200/pci.h
+--- linux-2.4.32/include/config/sni/rm200/pci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sni/rm200/pci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SNI_RM200_PCI
+diff -Nur linux-2.4.32/include/config/soft/watchdog/module.h linux-2.4.32.patched/include/config/soft/watchdog/module.h
+--- linux-2.4.32/include/config/soft/watchdog/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/soft/watchdog/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_SOFT_WATCHDOG_MODULE 1
+diff -Nur linux-2.4.32/include/config/soft/watchdog.h linux-2.4.32.patched/include/config/soft/watchdog.h
+--- linux-2.4.32/include/config/soft/watchdog.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/soft/watchdog.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOFT_WATCHDOG
+diff -Nur linux-2.4.32/include/config/solaris/x86/partition.h linux-2.4.32.patched/include/config/solaris/x86/partition.h
+--- linux-2.4.32/include/config/solaris/x86/partition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/solaris/x86/partition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOLARIS_X86_PARTITION
+diff -Nur linux-2.4.32/include/config/sound/ad1980.h linux-2.4.32.patched/include/config/sound/ad1980.h
+--- linux-2.4.32/include/config/sound/ad1980.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/ad1980.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_AD1980
+diff -Nur linux-2.4.32/include/config/sound/ali5455.h linux-2.4.32.patched/include/config/sound/ali5455.h
+--- linux-2.4.32/include/config/sound/ali5455.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/ali5455.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_ALI5455
+diff -Nur linux-2.4.32/include/config/sound/bt878.h linux-2.4.32.patched/include/config/sound/bt878.h
+--- linux-2.4.32/include/config/sound/bt878.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/bt878.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_BT878
+diff -Nur linux-2.4.32/include/config/sound/cmpci.h linux-2.4.32.patched/include/config/sound/cmpci.h
+--- linux-2.4.32/include/config/sound/cmpci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/cmpci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_CMPCI
+diff -Nur linux-2.4.32/include/config/sound/cs4281.h linux-2.4.32.patched/include/config/sound/cs4281.h
+--- linux-2.4.32/include/config/sound/cs4281.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/cs4281.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_CS4281
+diff -Nur linux-2.4.32/include/config/sound/emu10k1.h linux-2.4.32.patched/include/config/sound/emu10k1.h
+--- linux-2.4.32/include/config/sound/emu10k1.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/emu10k1.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_EMU10K1
+diff -Nur linux-2.4.32/include/config/sound/es1370.h linux-2.4.32.patched/include/config/sound/es1370.h
+--- linux-2.4.32/include/config/sound/es1370.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/es1370.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_ES1370
+diff -Nur linux-2.4.32/include/config/sound/es1371.h linux-2.4.32.patched/include/config/sound/es1371.h
+--- linux-2.4.32/include/config/sound/es1371.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/es1371.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_ES1371
+diff -Nur linux-2.4.32/include/config/sound/esssolo1.h linux-2.4.32.patched/include/config/sound/esssolo1.h
+--- linux-2.4.32/include/config/sound/esssolo1.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/esssolo1.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_ESSSOLO1
+diff -Nur linux-2.4.32/include/config/sound/forte.h linux-2.4.32.patched/include/config/sound/forte.h
+--- linux-2.4.32/include/config/sound/forte.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/forte.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_FORTE
+diff -Nur linux-2.4.32/include/config/sound/fusion.h linux-2.4.32.patched/include/config/sound/fusion.h
+--- linux-2.4.32/include/config/sound/fusion.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/fusion.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_FUSION
+diff -Nur linux-2.4.32/include/config/sound/ich.h linux-2.4.32.patched/include/config/sound/ich.h
+--- linux-2.4.32/include/config/sound/ich.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/ich.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_ICH
+diff -Nur linux-2.4.32/include/config/sound/maestro3.h linux-2.4.32.patched/include/config/sound/maestro3.h
+--- linux-2.4.32/include/config/sound/maestro3.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/maestro3.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_MAESTRO3
+diff -Nur linux-2.4.32/include/config/sound/maestro.h linux-2.4.32.patched/include/config/sound/maestro.h
+--- linux-2.4.32/include/config/sound/maestro.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/maestro.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_MAESTRO
+diff -Nur linux-2.4.32/include/config/sound/module.h linux-2.4.32.patched/include/config/sound/module.h
+--- linux-2.4.32/include/config/sound/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_SOUND_MODULE 1
+diff -Nur linux-2.4.32/include/config/sound/msndclas.h linux-2.4.32.patched/include/config/sound/msndclas.h
+--- linux-2.4.32/include/config/sound/msndclas.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/msndclas.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_MSNDCLAS
+diff -Nur linux-2.4.32/include/config/sound/msndpin.h linux-2.4.32.patched/include/config/sound/msndpin.h
+--- linux-2.4.32/include/config/sound/msndpin.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/msndpin.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_MSNDPIN
+diff -Nur linux-2.4.32/include/config/sound/oss.h linux-2.4.32.patched/include/config/sound/oss.h
+--- linux-2.4.32/include/config/sound/oss.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/oss.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_OSS
+diff -Nur linux-2.4.32/include/config/sound/rme96xx.h linux-2.4.32.patched/include/config/sound/rme96xx.h
+--- linux-2.4.32/include/config/sound/rme96xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/rme96xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_RME96XX
+diff -Nur linux-2.4.32/include/config/sound/sonicvibes.h linux-2.4.32.patched/include/config/sound/sonicvibes.h
+--- linux-2.4.32/include/config/sound/sonicvibes.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/sonicvibes.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_SONICVIBES
+diff -Nur linux-2.4.32/include/config/sound/trident.h linux-2.4.32.patched/include/config/sound/trident.h
+--- linux-2.4.32/include/config/sound/trident.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/trident.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_TRIDENT
+diff -Nur linux-2.4.32/include/config/sound/tvmixer.h linux-2.4.32.patched/include/config/sound/tvmixer.h
+--- linux-2.4.32/include/config/sound/tvmixer.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/tvmixer.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_TVMIXER
+diff -Nur linux-2.4.32/include/config/sound/via82cxxx.h linux-2.4.32.patched/include/config/sound/via82cxxx.h
+--- linux-2.4.32/include/config/sound/via82cxxx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/via82cxxx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_VIA82CXXX
+diff -Nur linux-2.4.32/include/config/sound/wm97xx.h linux-2.4.32.patched/include/config/sound/wm97xx.h
+--- linux-2.4.32/include/config/sound/wm97xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound/wm97xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND_WM97XX
+diff -Nur linux-2.4.32/include/config/sound.h linux-2.4.32.patched/include/config/sound.h
+--- linux-2.4.32/include/config/sound.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sound.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUND
+diff -Nur linux-2.4.32/include/config/soundmodem.h linux-2.4.32.patched/include/config/soundmodem.h
+--- linux-2.4.32/include/config/soundmodem.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/soundmodem.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SOUNDMODEM
+diff -Nur linux-2.4.32/include/config/squashfs/embedded.h linux-2.4.32.patched/include/config/squashfs/embedded.h
+--- linux-2.4.32/include/config/squashfs/embedded.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/squashfs/embedded.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SQUASHFS_EMBEDDED
+diff -Nur linux-2.4.32/include/config/squashfs.h linux-2.4.32.patched/include/config/squashfs.h
+--- linux-2.4.32/include/config/squashfs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/squashfs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_SQUASHFS 1
+diff -Nur linux-2.4.32/include/config/strip.h linux-2.4.32.patched/include/config/strip.h
+--- linux-2.4.32/include/config/strip.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/strip.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_STRIP
+diff -Nur linux-2.4.32/include/config/sun/partition.h linux-2.4.32.patched/include/config/sun/partition.h
+--- linux-2.4.32/include/config/sun/partition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sun/partition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SUN_PARTITION
+diff -Nur linux-2.4.32/include/config/sunbmac.h linux-2.4.32.patched/include/config/sunbmac.h
+--- linux-2.4.32/include/config/sunbmac.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sunbmac.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SUNBMAC
+diff -Nur linux-2.4.32/include/config/sundance/mmio.h linux-2.4.32.patched/include/config/sundance/mmio.h
+--- linux-2.4.32/include/config/sundance/mmio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sundance/mmio.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SUNDANCE_MMIO
+diff -Nur linux-2.4.32/include/config/sundance.h linux-2.4.32.patched/include/config/sundance.h
+--- linux-2.4.32/include/config/sundance.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sundance.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SUNDANCE
+diff -Nur linux-2.4.32/include/config/sungem.h linux-2.4.32.patched/include/config/sungem.h
+--- linux-2.4.32/include/config/sungem.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sungem.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SUNGEM
+diff -Nur linux-2.4.32/include/config/sunlance.h linux-2.4.32.patched/include/config/sunlance.h
+--- linux-2.4.32/include/config/sunlance.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sunlance.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SUNLANCE
+diff -Nur linux-2.4.32/include/config/sunqe.h linux-2.4.32.patched/include/config/sunqe.h
+--- linux-2.4.32/include/config/sunqe.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sunqe.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SUNQE
+diff -Nur linux-2.4.32/include/config/sunrpc/module.h linux-2.4.32.patched/include/config/sunrpc/module.h
+--- linux-2.4.32/include/config/sunrpc/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sunrpc/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_SUNRPC_MODULE 1
+diff -Nur linux-2.4.32/include/config/sunrpc.h linux-2.4.32.patched/include/config/sunrpc.h
+--- linux-2.4.32/include/config/sunrpc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sunrpc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SUNRPC
+diff -Nur linux-2.4.32/include/config/syn/cookies.h linux-2.4.32.patched/include/config/syn/cookies.h
+--- linux-2.4.32/include/config/syn/cookies.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/syn/cookies.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SYN_COOKIES
+diff -Nur linux-2.4.32/include/config/synclink/cs.h linux-2.4.32.patched/include/config/synclink/cs.h
+--- linux-2.4.32/include/config/synclink/cs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/synclink/cs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SYNCLINK_CS
+diff -Nur linux-2.4.32/include/config/sysctl.h linux-2.4.32.patched/include/config/sysctl.h
+--- linux-2.4.32/include/config/sysctl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sysctl.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_SYSCTL 1
+diff -Nur linux-2.4.32/include/config/sysv/fs.h linux-2.4.32.patched/include/config/sysv/fs.h
+--- linux-2.4.32/include/config/sysv/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sysv/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_SYSV_FS
+diff -Nur linux-2.4.32/include/config/sysvipc.h linux-2.4.32.patched/include/config/sysvipc.h
+--- linux-2.4.32/include/config/sysvipc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/sysvipc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_SYSVIPC 1
+diff -Nur linux-2.4.32/include/config/tanbac/tb0226.h linux-2.4.32.patched/include/config/tanbac/tb0226.h
+--- linux-2.4.32/include/config/tanbac/tb0226.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/tanbac/tb0226.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_TANBAC_TB0226
+diff -Nur linux-2.4.32/include/config/tanbac/tb0229.h linux-2.4.32.patched/include/config/tanbac/tb0229.h
+--- linux-2.4.32/include/config/tanbac/tb0229.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/tanbac/tb0229.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_TANBAC_TB0229
+diff -Nur linux-2.4.32/include/config/tc.h linux-2.4.32.patched/include/config/tc.h
+--- linux-2.4.32/include/config/tc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/tc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_TC
+diff -Nur linux-2.4.32/include/config/tcic.h linux-2.4.32.patched/include/config/tcic.h
+--- linux-2.4.32/include/config/tcic.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/tcic.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_TCIC
+diff -Nur linux-2.4.32/include/config/tigon3.h linux-2.4.32.patched/include/config/tigon3.h
+--- linux-2.4.32/include/config/tigon3.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/tigon3.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_TIGON3
+diff -Nur linux-2.4.32/include/config/tipar.h linux-2.4.32.patched/include/config/tipar.h
+--- linux-2.4.32/include/config/tipar.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/tipar.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_TIPAR
+diff -Nur linux-2.4.32/include/config/tlan.h linux-2.4.32.patched/include/config/tlan.h
+--- linux-2.4.32/include/config/tlan.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/tlan.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_TLAN
+diff -Nur linux-2.4.32/include/config/tmd/hermes.h linux-2.4.32.patched/include/config/tmd/hermes.h
+--- linux-2.4.32/include/config/tmd/hermes.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/tmd/hermes.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_TMD_HERMES
+diff -Nur linux-2.4.32/include/config/tmpfs.h linux-2.4.32.patched/include/config/tmpfs.h
+--- linux-2.4.32/include/config/tmpfs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/tmpfs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_TMPFS 1
+diff -Nur linux-2.4.32/include/config/toshiba/jmr3927.h linux-2.4.32.patched/include/config/toshiba/jmr3927.h
+--- linux-2.4.32/include/config/toshiba/jmr3927.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/toshiba/jmr3927.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_TOSHIBA_JMR3927
+diff -Nur linux-2.4.32/include/config/toshiba/rbtx4927.h linux-2.4.32.patched/include/config/toshiba/rbtx4927.h
+--- linux-2.4.32/include/config/toshiba/rbtx4927.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/toshiba/rbtx4927.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_TOSHIBA_RBTX4927
+diff -Nur linux-2.4.32/include/config/tr.h linux-2.4.32.patched/include/config/tr.h
+--- linux-2.4.32/include/config/tr.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/tr.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_TR
+diff -Nur linux-2.4.32/include/config/tulip.h linux-2.4.32.patched/include/config/tulip.h
+--- linux-2.4.32/include/config/tulip.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/tulip.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_TULIP
+diff -Nur linux-2.4.32/include/config/tun/module.h linux-2.4.32.patched/include/config/tun/module.h
+--- linux-2.4.32/include/config/tun/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/tun/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_TUN_MODULE 1
+diff -Nur linux-2.4.32/include/config/tuner/3036.h linux-2.4.32.patched/include/config/tuner/3036.h
+--- linux-2.4.32/include/config/tuner/3036.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/tuner/3036.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_TUNER_3036
+diff -Nur linux-2.4.32/include/config/tun.h linux-2.4.32.patched/include/config/tun.h
+--- linux-2.4.32/include/config/tun.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/tun.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_TUN
+diff -Nur linux-2.4.32/include/config/udf/fs.h linux-2.4.32.patched/include/config/udf/fs.h
+--- linux-2.4.32/include/config/udf/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/udf/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_UDF_FS
+diff -Nur linux-2.4.32/include/config/udf/rw.h linux-2.4.32.patched/include/config/udf/rw.h
+--- linux-2.4.32/include/config/udf/rw.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/udf/rw.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_UDF_RW
+diff -Nur linux-2.4.32/include/config/ufs/fs/write.h linux-2.4.32.patched/include/config/ufs/fs/write.h
+--- linux-2.4.32/include/config/ufs/fs/write.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ufs/fs/write.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_UFS_FS_WRITE
+diff -Nur linux-2.4.32/include/config/ufs/fs.h linux-2.4.32.patched/include/config/ufs/fs.h
+--- linux-2.4.32/include/config/ufs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ufs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_UFS_FS
+diff -Nur linux-2.4.32/include/config/ultrix/partition.h linux-2.4.32.patched/include/config/ultrix/partition.h
+--- linux-2.4.32/include/config/ultrix/partition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/ultrix/partition.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ULTRIX_PARTITION
+diff -Nur linux-2.4.32/include/config/umsdos/fs.h linux-2.4.32.patched/include/config/umsdos/fs.h
+--- linux-2.4.32/include/config/umsdos/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/umsdos/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_UMSDOS_FS
+diff -Nur linux-2.4.32/include/config/unix98/pty/count.h linux-2.4.32.patched/include/config/unix98/pty/count.h
+--- linux-2.4.32/include/config/unix98/pty/count.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/unix98/pty/count.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_UNIX98_PTY_COUNT (128)
+diff -Nur linux-2.4.32/include/config/unix98/ptys.h linux-2.4.32.patched/include/config/unix98/ptys.h
+--- linux-2.4.32/include/config/unix98/ptys.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/unix98/ptys.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_UNIX98_PTYS 1
+diff -Nur linux-2.4.32/include/config/unix.h linux-2.4.32.patched/include/config/unix.h
+--- linux-2.4.32/include/config/unix.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/unix.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_UNIX 1
+diff -Nur linux-2.4.32/include/config/unixware/disklabel.h linux-2.4.32.patched/include/config/unixware/disklabel.h
+--- linux-2.4.32/include/config/unixware/disklabel.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/unixware/disklabel.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_UNIXWARE_DISKLABEL
+diff -Nur linux-2.4.32/include/config/usb/acm/module.h linux-2.4.32.patched/include/config/usb/acm/module.h
+--- linux-2.4.32/include/config/usb/acm/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/acm/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_ACM_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/acm.h linux-2.4.32.patched/include/config/usb/acm.h
+--- linux-2.4.32/include/config/usb/acm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/acm.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_ACM
+diff -Nur linux-2.4.32/include/config/usb/aiptek.h linux-2.4.32.patched/include/config/usb/aiptek.h
+--- linux-2.4.32/include/config/usb/aiptek.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/aiptek.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_AIPTEK
+diff -Nur linux-2.4.32/include/config/usb/audio/module.h linux-2.4.32.patched/include/config/usb/audio/module.h
+--- linux-2.4.32/include/config/usb/audio/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/audio/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_AUDIO_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/audio.h linux-2.4.32.patched/include/config/usb/audio.h
+--- linux-2.4.32/include/config/usb/audio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/audio.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_AUDIO
+diff -Nur linux-2.4.32/include/config/usb/auerswald.h linux-2.4.32.patched/include/config/usb/auerswald.h
+--- linux-2.4.32/include/config/usb/auerswald.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/auerswald.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_AUERSWALD
+diff -Nur linux-2.4.32/include/config/usb/bandwidth.h linux-2.4.32.patched/include/config/usb/bandwidth.h
+--- linux-2.4.32/include/config/usb/bandwidth.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/bandwidth.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_BANDWIDTH
+diff -Nur linux-2.4.32/include/config/usb/brlvger.h linux-2.4.32.patched/include/config/usb/brlvger.h
+--- linux-2.4.32/include/config/usb/brlvger.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/brlvger.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_BRLVGER
+diff -Nur linux-2.4.32/include/config/usb/catc.h linux-2.4.32.patched/include/config/usb/catc.h
+--- linux-2.4.32/include/config/usb/catc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/catc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_CATC
+diff -Nur linux-2.4.32/include/config/usb/cdcether.h linux-2.4.32.patched/include/config/usb/cdcether.h
+--- linux-2.4.32/include/config/usb/cdcether.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/cdcether.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_CDCETHER
+diff -Nur linux-2.4.32/include/config/usb/dabusb.h linux-2.4.32.patched/include/config/usb/dabusb.h
+--- linux-2.4.32/include/config/usb/dabusb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/dabusb.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_DABUSB
+diff -Nur linux-2.4.32/include/config/usb/dc2xx.h linux-2.4.32.patched/include/config/usb/dc2xx.h
+--- linux-2.4.32/include/config/usb/dc2xx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/dc2xx.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_DC2XX
+diff -Nur linux-2.4.32/include/config/usb/debug.h linux-2.4.32.patched/include/config/usb/debug.h
+--- linux-2.4.32/include/config/usb/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_DEBUG
+diff -Nur linux-2.4.32/include/config/usb/devicefs.h linux-2.4.32.patched/include/config/usb/devicefs.h
+--- linux-2.4.32/include/config/usb/devicefs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/devicefs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_DEVICEFS 1
+diff -Nur linux-2.4.32/include/config/usb/dsbr.h linux-2.4.32.patched/include/config/usb/dsbr.h
+--- linux-2.4.32/include/config/usb/dsbr.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/dsbr.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_DSBR
+diff -Nur linux-2.4.32/include/config/usb/ehci/hcd/module.h linux-2.4.32.patched/include/config/usb/ehci/hcd/module.h
+--- linux-2.4.32/include/config/usb/ehci/hcd/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/ehci/hcd/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_EHCI_HCD_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/ehci/hcd.h linux-2.4.32.patched/include/config/usb/ehci/hcd.h
+--- linux-2.4.32/include/config/usb/ehci/hcd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/ehci/hcd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_EHCI_HCD
+diff -Nur linux-2.4.32/include/config/usb/emi26.h linux-2.4.32.patched/include/config/usb/emi26.h
+--- linux-2.4.32/include/config/usb/emi26.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/emi26.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_EMI26
+diff -Nur linux-2.4.32/include/config/usb/gadget.h linux-2.4.32.patched/include/config/usb/gadget.h
+--- linux-2.4.32/include/config/usb/gadget.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/gadget.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_GADGET
+diff -Nur linux-2.4.32/include/config/usb/hiddev.h linux-2.4.32.patched/include/config/usb/hiddev.h
+--- linux-2.4.32/include/config/usb/hiddev.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/hiddev.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_HIDDEV
+diff -Nur linux-2.4.32/include/config/usb/hid.h linux-2.4.32.patched/include/config/usb/hid.h
+--- linux-2.4.32/include/config/usb/hid.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/hid.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_HID
+diff -Nur linux-2.4.32/include/config/usb/hidinput.h linux-2.4.32.patched/include/config/usb/hidinput.h
+--- linux-2.4.32/include/config/usb/hidinput.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/hidinput.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_HIDINPUT
+diff -Nur linux-2.4.32/include/config/usb/hpusbscsi.h linux-2.4.32.patched/include/config/usb/hpusbscsi.h
+--- linux-2.4.32/include/config/usb/hpusbscsi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/hpusbscsi.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_HPUSBSCSI
+diff -Nur linux-2.4.32/include/config/usb/ibmcam.h linux-2.4.32.patched/include/config/usb/ibmcam.h
+--- linux-2.4.32/include/config/usb/ibmcam.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/ibmcam.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_IBMCAM
+diff -Nur linux-2.4.32/include/config/usb/kaweth.h linux-2.4.32.patched/include/config/usb/kaweth.h
+--- linux-2.4.32/include/config/usb/kaweth.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/kaweth.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_KAWETH
+diff -Nur linux-2.4.32/include/config/usb/kbd.h linux-2.4.32.patched/include/config/usb/kbd.h
+--- linux-2.4.32/include/config/usb/kbd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/kbd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_KBD
+diff -Nur linux-2.4.32/include/config/usb/kbtab.h linux-2.4.32.patched/include/config/usb/kbtab.h
+--- linux-2.4.32/include/config/usb/kbtab.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/kbtab.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_KBTAB
+diff -Nur linux-2.4.32/include/config/usb/konicawc.h linux-2.4.32.patched/include/config/usb/konicawc.h
+--- linux-2.4.32/include/config/usb/konicawc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/konicawc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_KONICAWC
+diff -Nur linux-2.4.32/include/config/usb/lcd.h linux-2.4.32.patched/include/config/usb/lcd.h
+--- linux-2.4.32/include/config/usb/lcd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/lcd.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_LCD
+diff -Nur linux-2.4.32/include/config/usb/mdc800.h linux-2.4.32.patched/include/config/usb/mdc800.h
+--- linux-2.4.32/include/config/usb/mdc800.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/mdc800.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_MDC800
+diff -Nur linux-2.4.32/include/config/usb/microtek.h linux-2.4.32.patched/include/config/usb/microtek.h
+--- linux-2.4.32/include/config/usb/microtek.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/microtek.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_MICROTEK
+diff -Nur linux-2.4.32/include/config/usb/midi.h linux-2.4.32.patched/include/config/usb/midi.h
+--- linux-2.4.32/include/config/usb/midi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/midi.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_MIDI
+diff -Nur linux-2.4.32/include/config/usb/module.h linux-2.4.32.patched/include/config/usb/module.h
+--- linux-2.4.32/include/config/usb/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/mouse.h linux-2.4.32.patched/include/config/usb/mouse.h
+--- linux-2.4.32/include/config/usb/mouse.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/mouse.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_MOUSE
+diff -Nur linux-2.4.32/include/config/usb/ohci/module.h linux-2.4.32.patched/include/config/usb/ohci/module.h
+--- linux-2.4.32/include/config/usb/ohci/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/ohci/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_OHCI_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/ohci.h linux-2.4.32.patched/include/config/usb/ohci.h
+--- linux-2.4.32/include/config/usb/ohci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/ohci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_OHCI
+diff -Nur linux-2.4.32/include/config/usb/ov511.h linux-2.4.32.patched/include/config/usb/ov511.h
+--- linux-2.4.32/include/config/usb/ov511.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/ov511.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_OV511
+diff -Nur linux-2.4.32/include/config/usb/pegasus.h linux-2.4.32.patched/include/config/usb/pegasus.h
+--- linux-2.4.32/include/config/usb/pegasus.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/pegasus.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_PEGASUS
+diff -Nur linux-2.4.32/include/config/usb/powermate.h linux-2.4.32.patched/include/config/usb/powermate.h
+--- linux-2.4.32/include/config/usb/powermate.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/powermate.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_POWERMATE
+diff -Nur linux-2.4.32/include/config/usb/printer/module.h linux-2.4.32.patched/include/config/usb/printer/module.h
+--- linux-2.4.32/include/config/usb/printer/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/printer/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_PRINTER_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/printer.h linux-2.4.32.patched/include/config/usb/printer.h
+--- linux-2.4.32/include/config/usb/printer.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/printer.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_PRINTER
+diff -Nur linux-2.4.32/include/config/usb/pwc/module.h linux-2.4.32.patched/include/config/usb/pwc/module.h
+--- linux-2.4.32/include/config/usb/pwc/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/pwc/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_PWC_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/pwc.h linux-2.4.32.patched/include/config/usb/pwc.h
+--- linux-2.4.32/include/config/usb/pwc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/pwc.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_PWC
+diff -Nur linux-2.4.32/include/config/usb/rio500.h linux-2.4.32.patched/include/config/usb/rio500.h
+--- linux-2.4.32/include/config/usb/rio500.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/rio500.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_RIO500
+diff -Nur linux-2.4.32/include/config/usb/rtl8150.h linux-2.4.32.patched/include/config/usb/rtl8150.h
+--- linux-2.4.32/include/config/usb/rtl8150.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/rtl8150.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_RTL8150
+diff -Nur linux-2.4.32/include/config/usb/scanner.h linux-2.4.32.patched/include/config/usb/scanner.h
+--- linux-2.4.32/include/config/usb/scanner.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/scanner.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SCANNER
+diff -Nur linux-2.4.32/include/config/usb/se401.h linux-2.4.32.patched/include/config/usb/se401.h
+--- linux-2.4.32/include/config/usb/se401.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/se401.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SE401
+diff -Nur linux-2.4.32/include/config/usb/serial/belkin/module.h linux-2.4.32.patched/include/config/usb/serial/belkin/module.h
+--- linux-2.4.32/include/config/usb/serial/belkin/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/belkin/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_SERIAL_BELKIN_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/serial/belkin.h linux-2.4.32.patched/include/config/usb/serial/belkin.h
+--- linux-2.4.32/include/config/usb/serial/belkin.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/belkin.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_BELKIN
+diff -Nur linux-2.4.32/include/config/usb/serial/cyberjack.h linux-2.4.32.patched/include/config/usb/serial/cyberjack.h
+--- linux-2.4.32/include/config/usb/serial/cyberjack.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/cyberjack.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_CYBERJACK
+diff -Nur linux-2.4.32/include/config/usb/serial/debug.h linux-2.4.32.patched/include/config/usb/serial/debug.h
+--- linux-2.4.32/include/config/usb/serial/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_DEBUG
+diff -Nur linux-2.4.32/include/config/usb/serial/digi/acceleport.h linux-2.4.32.patched/include/config/usb/serial/digi/acceleport.h
+--- linux-2.4.32/include/config/usb/serial/digi/acceleport.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/digi/acceleport.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_DIGI_ACCELEPORT
+diff -Nur linux-2.4.32/include/config/usb/serial/edgeport/ti.h linux-2.4.32.patched/include/config/usb/serial/edgeport/ti.h
+--- linux-2.4.32/include/config/usb/serial/edgeport/ti.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/edgeport/ti.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_EDGEPORT_TI
+diff -Nur linux-2.4.32/include/config/usb/serial/edgeport.h linux-2.4.32.patched/include/config/usb/serial/edgeport.h
+--- linux-2.4.32/include/config/usb/serial/edgeport.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/edgeport.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_EDGEPORT
+diff -Nur linux-2.4.32/include/config/usb/serial/empeg.h linux-2.4.32.patched/include/config/usb/serial/empeg.h
+--- linux-2.4.32/include/config/usb/serial/empeg.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/empeg.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_EMPEG
+diff -Nur linux-2.4.32/include/config/usb/serial/ftdi/sio/module.h linux-2.4.32.patched/include/config/usb/serial/ftdi/sio/module.h
+--- linux-2.4.32/include/config/usb/serial/ftdi/sio/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/ftdi/sio/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_SERIAL_FTDI_SIO_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/serial/ftdi/sio.h linux-2.4.32.patched/include/config/usb/serial/ftdi/sio.h
+--- linux-2.4.32/include/config/usb/serial/ftdi/sio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/ftdi/sio.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_FTDI_SIO
+diff -Nur linux-2.4.32/include/config/usb/serial/generic.h linux-2.4.32.patched/include/config/usb/serial/generic.h
+--- linux-2.4.32/include/config/usb/serial/generic.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/generic.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_SERIAL_GENERIC 1
+diff -Nur linux-2.4.32/include/config/usb/serial/ipaq.h linux-2.4.32.patched/include/config/usb/serial/ipaq.h
+--- linux-2.4.32/include/config/usb/serial/ipaq.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/ipaq.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_IPAQ
+diff -Nur linux-2.4.32/include/config/usb/serial/ir.h linux-2.4.32.patched/include/config/usb/serial/ir.h
+--- linux-2.4.32/include/config/usb/serial/ir.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/ir.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_IR
+diff -Nur linux-2.4.32/include/config/usb/serial/keyspan/pda.h linux-2.4.32.patched/include/config/usb/serial/keyspan/pda.h
+--- linux-2.4.32/include/config/usb/serial/keyspan/pda.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/keyspan/pda.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_KEYSPAN_PDA
+diff -Nur linux-2.4.32/include/config/usb/serial/keyspan.h linux-2.4.32.patched/include/config/usb/serial/keyspan.h
+--- linux-2.4.32/include/config/usb/serial/keyspan.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/keyspan.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_KEYSPAN
+diff -Nur linux-2.4.32/include/config/usb/serial/klsi.h linux-2.4.32.patched/include/config/usb/serial/klsi.h
+--- linux-2.4.32/include/config/usb/serial/klsi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/klsi.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_KLSI
+diff -Nur linux-2.4.32/include/config/usb/serial/kobil/sct.h linux-2.4.32.patched/include/config/usb/serial/kobil/sct.h
+--- linux-2.4.32/include/config/usb/serial/kobil/sct.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/kobil/sct.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_KOBIL_SCT
+diff -Nur linux-2.4.32/include/config/usb/serial/mct/u232/module.h linux-2.4.32.patched/include/config/usb/serial/mct/u232/module.h
+--- linux-2.4.32/include/config/usb/serial/mct/u232/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/mct/u232/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_SERIAL_MCT_U232_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/serial/mct/u232.h linux-2.4.32.patched/include/config/usb/serial/mct/u232.h
+--- linux-2.4.32/include/config/usb/serial/mct/u232.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/mct/u232.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_MCT_U232
+diff -Nur linux-2.4.32/include/config/usb/serial/module.h linux-2.4.32.patched/include/config/usb/serial/module.h
+--- linux-2.4.32/include/config/usb/serial/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_SERIAL_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/serial/omninet.h linux-2.4.32.patched/include/config/usb/serial/omninet.h
+--- linux-2.4.32/include/config/usb/serial/omninet.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/omninet.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_OMNINET
+diff -Nur linux-2.4.32/include/config/usb/serial/pl2303/module.h linux-2.4.32.patched/include/config/usb/serial/pl2303/module.h
+--- linux-2.4.32/include/config/usb/serial/pl2303/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/pl2303/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_SERIAL_PL2303_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/serial/pl2303.h linux-2.4.32.patched/include/config/usb/serial/pl2303.h
+--- linux-2.4.32/include/config/usb/serial/pl2303.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/pl2303.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_PL2303
+diff -Nur linux-2.4.32/include/config/usb/serial/visor/module.h linux-2.4.32.patched/include/config/usb/serial/visor/module.h
+--- linux-2.4.32/include/config/usb/serial/visor/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/visor/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_SERIAL_VISOR_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/serial/visor.h linux-2.4.32.patched/include/config/usb/serial/visor.h
+--- linux-2.4.32/include/config/usb/serial/visor.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/visor.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_VISOR
+diff -Nur linux-2.4.32/include/config/usb/serial/whiteheat.h linux-2.4.32.patched/include/config/usb/serial/whiteheat.h
+--- linux-2.4.32/include/config/usb/serial/whiteheat.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/whiteheat.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_WHITEHEAT
+diff -Nur linux-2.4.32/include/config/usb/serial/xircom.h linux-2.4.32.patched/include/config/usb/serial/xircom.h
+--- linux-2.4.32/include/config/usb/serial/xircom.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial/xircom.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL_XIRCOM
+diff -Nur linux-2.4.32/include/config/usb/serial.h linux-2.4.32.patched/include/config/usb/serial.h
+--- linux-2.4.32/include/config/usb/serial.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/serial.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_SERIAL
+diff -Nur linux-2.4.32/include/config/usb/storage/datafab.h linux-2.4.32.patched/include/config/usb/storage/datafab.h
+--- linux-2.4.32/include/config/usb/storage/datafab.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/storage/datafab.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_STORAGE_DATAFAB 1
+diff -Nur linux-2.4.32/include/config/usb/storage/debug.h linux-2.4.32.patched/include/config/usb/storage/debug.h
+--- linux-2.4.32/include/config/usb/storage/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/storage/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_STORAGE_DEBUG
+diff -Nur linux-2.4.32/include/config/usb/storage/dpcm.h linux-2.4.32.patched/include/config/usb/storage/dpcm.h
+--- linux-2.4.32/include/config/usb/storage/dpcm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/storage/dpcm.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_STORAGE_DPCM 1
+diff -Nur linux-2.4.32/include/config/usb/storage/freecom.h linux-2.4.32.patched/include/config/usb/storage/freecom.h
+--- linux-2.4.32/include/config/usb/storage/freecom.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/storage/freecom.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_STORAGE_FREECOM 1
+diff -Nur linux-2.4.32/include/config/usb/storage/hp8200e.h linux-2.4.32.patched/include/config/usb/storage/hp8200e.h
+--- linux-2.4.32/include/config/usb/storage/hp8200e.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/storage/hp8200e.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_STORAGE_HP8200e 1
+diff -Nur linux-2.4.32/include/config/usb/storage/isd200.h linux-2.4.32.patched/include/config/usb/storage/isd200.h
+--- linux-2.4.32/include/config/usb/storage/isd200.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/storage/isd200.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_STORAGE_ISD200
+diff -Nur linux-2.4.32/include/config/usb/storage/jumpshot.h linux-2.4.32.patched/include/config/usb/storage/jumpshot.h
+--- linux-2.4.32/include/config/usb/storage/jumpshot.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/storage/jumpshot.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_STORAGE_JUMPSHOT 1
+diff -Nur linux-2.4.32/include/config/usb/storage/module.h linux-2.4.32.patched/include/config/usb/storage/module.h
+--- linux-2.4.32/include/config/usb/storage/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/storage/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_STORAGE_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/storage/sddr09.h linux-2.4.32.patched/include/config/usb/storage/sddr09.h
+--- linux-2.4.32/include/config/usb/storage/sddr09.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/storage/sddr09.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_STORAGE_SDDR09 1
+diff -Nur linux-2.4.32/include/config/usb/storage/sddr55.h linux-2.4.32.patched/include/config/usb/storage/sddr55.h
+--- linux-2.4.32/include/config/usb/storage/sddr55.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/storage/sddr55.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_STORAGE_SDDR55 1
+diff -Nur linux-2.4.32/include/config/usb/storage.h linux-2.4.32.patched/include/config/usb/storage.h
+--- linux-2.4.32/include/config/usb/storage.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/storage.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_STORAGE
+diff -Nur linux-2.4.32/include/config/usb/stv680.h linux-2.4.32.patched/include/config/usb/stv680.h
+--- linux-2.4.32/include/config/usb/stv680.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/stv680.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_STV680
+diff -Nur linux-2.4.32/include/config/usb/tigl.h linux-2.4.32.patched/include/config/usb/tigl.h
+--- linux-2.4.32/include/config/usb/tigl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/tigl.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_TIGL
+diff -Nur linux-2.4.32/include/config/usb/uhci/alt/module.h linux-2.4.32.patched/include/config/usb/uhci/alt/module.h
+--- linux-2.4.32/include/config/usb/uhci/alt/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/uhci/alt/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_USB_UHCI_ALT_MODULE 1
+diff -Nur linux-2.4.32/include/config/usb/uhci/alt.h linux-2.4.32.patched/include/config/usb/uhci/alt.h
+--- linux-2.4.32/include/config/usb/uhci/alt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/uhci/alt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_UHCI_ALT
+diff -Nur linux-2.4.32/include/config/usb/uhci.h linux-2.4.32.patched/include/config/usb/uhci.h
+--- linux-2.4.32/include/config/usb/uhci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/uhci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_UHCI
+diff -Nur linux-2.4.32/include/config/usb/usbnet.h linux-2.4.32.patched/include/config/usb/usbnet.h
+--- linux-2.4.32/include/config/usb/usbnet.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/usbnet.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_USBNET
+diff -Nur linux-2.4.32/include/config/usb/uss720.h linux-2.4.32.patched/include/config/usb/uss720.h
+--- linux-2.4.32/include/config/usb/uss720.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/uss720.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_USS720
+diff -Nur linux-2.4.32/include/config/usb/vicam.h linux-2.4.32.patched/include/config/usb/vicam.h
+--- linux-2.4.32/include/config/usb/vicam.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/vicam.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_VICAM
+diff -Nur linux-2.4.32/include/config/usb/w9968cf.h linux-2.4.32.patched/include/config/usb/w9968cf.h
+--- linux-2.4.32/include/config/usb/w9968cf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/w9968cf.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_W9968CF
+diff -Nur linux-2.4.32/include/config/usb/wacom.h linux-2.4.32.patched/include/config/usb/wacom.h
+--- linux-2.4.32/include/config/usb/wacom.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb/wacom.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB_WACOM
+diff -Nur linux-2.4.32/include/config/usb.h linux-2.4.32.patched/include/config/usb.h
+--- linux-2.4.32/include/config/usb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/usb.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_USB
+diff -Nur linux-2.4.32/include/config/vfat/fs/module.h linux-2.4.32.patched/include/config/vfat/fs/module.h
+--- linux-2.4.32/include/config/vfat/fs/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/vfat/fs/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_VFAT_FS_MODULE 1
+diff -Nur linux-2.4.32/include/config/vfat/fs.h linux-2.4.32.patched/include/config/vfat/fs.h
+--- linux-2.4.32/include/config/vfat/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/vfat/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VFAT_FS
+diff -Nur linux-2.4.32/include/config/via/rhine/mmio.h linux-2.4.32.patched/include/config/via/rhine/mmio.h
+--- linux-2.4.32/include/config/via/rhine/mmio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/via/rhine/mmio.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIA_RHINE_MMIO
+diff -Nur linux-2.4.32/include/config/via/rhine.h linux-2.4.32.patched/include/config/via/rhine.h
+--- linux-2.4.32/include/config/via/rhine.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/via/rhine.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIA_RHINE
+diff -Nur linux-2.4.32/include/config/victor/mpc30x.h linux-2.4.32.patched/include/config/victor/mpc30x.h
+--- linux-2.4.32/include/config/victor/mpc30x.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/victor/mpc30x.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VICTOR_MPC30X
+diff -Nur linux-2.4.32/include/config/video/bt848.h linux-2.4.32.patched/include/config/video/bt848.h
+--- linux-2.4.32/include/config/video/bt848.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/bt848.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIDEO_BT848
+diff -Nur linux-2.4.32/include/config/video/bwqcam.h linux-2.4.32.patched/include/config/video/bwqcam.h
+--- linux-2.4.32/include/config/video/bwqcam.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/bwqcam.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIDEO_BWQCAM
+diff -Nur linux-2.4.32/include/config/video/cpia.h linux-2.4.32.patched/include/config/video/cpia.h
+--- linux-2.4.32/include/config/video/cpia.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/cpia.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIDEO_CPIA
+diff -Nur linux-2.4.32/include/config/video/cqcam.h linux-2.4.32.patched/include/config/video/cqcam.h
+--- linux-2.4.32/include/config/video/cqcam.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/cqcam.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIDEO_CQCAM
+diff -Nur linux-2.4.32/include/config/video/dev/module.h linux-2.4.32.patched/include/config/video/dev/module.h
+--- linux-2.4.32/include/config/video/dev/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/dev/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_VIDEO_DEV_MODULE 1
+diff -Nur linux-2.4.32/include/config/video/dev.h linux-2.4.32.patched/include/config/video/dev.h
+--- linux-2.4.32/include/config/video/dev.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/dev.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIDEO_DEV
+diff -Nur linux-2.4.32/include/config/video/meye.h linux-2.4.32.patched/include/config/video/meye.h
+--- linux-2.4.32/include/config/video/meye.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/meye.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIDEO_MEYE
+diff -Nur linux-2.4.32/include/config/video/pms.h linux-2.4.32.patched/include/config/video/pms.h
+--- linux-2.4.32/include/config/video/pms.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/pms.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIDEO_PMS
+diff -Nur linux-2.4.32/include/config/video/proc/fs.h linux-2.4.32.patched/include/config/video/proc/fs.h
+--- linux-2.4.32/include/config/video/proc/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/proc/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_VIDEO_PROC_FS 1
+diff -Nur linux-2.4.32/include/config/video/saa5249.h linux-2.4.32.patched/include/config/video/saa5249.h
+--- linux-2.4.32/include/config/video/saa5249.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/saa5249.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIDEO_SAA5249
+diff -Nur linux-2.4.32/include/config/video/stradis.h linux-2.4.32.patched/include/config/video/stradis.h
+--- linux-2.4.32/include/config/video/stradis.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/stradis.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIDEO_STRADIS
+diff -Nur linux-2.4.32/include/config/video/zoran/buz.h linux-2.4.32.patched/include/config/video/zoran/buz.h
+--- linux-2.4.32/include/config/video/zoran/buz.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/zoran/buz.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIDEO_ZORAN_BUZ
+diff -Nur linux-2.4.32/include/config/video/zoran/dc10.h linux-2.4.32.patched/include/config/video/zoran/dc10.h
+--- linux-2.4.32/include/config/video/zoran/dc10.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/zoran/dc10.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIDEO_ZORAN_DC10
+diff -Nur linux-2.4.32/include/config/video/zoran/lml33.h linux-2.4.32.patched/include/config/video/zoran/lml33.h
+--- linux-2.4.32/include/config/video/zoran/lml33.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/zoran/lml33.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIDEO_ZORAN_LML33
+diff -Nur linux-2.4.32/include/config/video/zoran.h linux-2.4.32.patched/include/config/video/zoran.h
+--- linux-2.4.32/include/config/video/zoran.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/zoran.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIDEO_ZORAN
+diff -Nur linux-2.4.32/include/config/video/zr36120.h linux-2.4.32.patched/include/config/video/zr36120.h
+--- linux-2.4.32/include/config/video/zr36120.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/video/zr36120.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VIDEO_ZR36120
+diff -Nur linux-2.4.32/include/config/vlan/8021q.h linux-2.4.32.patched/include/config/vlan/8021q.h
+--- linux-2.4.32/include/config/vlan/8021q.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/vlan/8021q.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_VLAN_8021Q 1
+diff -Nur linux-2.4.32/include/config/vtag/icache.h linux-2.4.32.patched/include/config/vtag/icache.h
+--- linux-2.4.32/include/config/vtag/icache.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/vtag/icache.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VTAG_ICACHE
+diff -Nur linux-2.4.32/include/config/vt.h linux-2.4.32.patched/include/config/vt.h
+--- linux-2.4.32/include/config/vt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/vt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VT
+diff -Nur linux-2.4.32/include/config/vxfs/fs.h linux-2.4.32.patched/include/config/vxfs/fs.h
+--- linux-2.4.32/include/config/vxfs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/vxfs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_VXFS_FS
+diff -Nur linux-2.4.32/include/config/w83877f/wdt.h linux-2.4.32.patched/include/config/w83877f/wdt.h
+--- linux-2.4.32/include/config/w83877f/wdt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/w83877f/wdt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_W83877F_WDT
+diff -Nur linux-2.4.32/include/config/wafer/wdt.h linux-2.4.32.patched/include/config/wafer/wdt.h
+--- linux-2.4.32/include/config/wafer/wdt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/wafer/wdt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_WAFER_WDT
+diff -Nur linux-2.4.32/include/config/wan/router/module.h linux-2.4.32.patched/include/config/wan/router/module.h
+--- linux-2.4.32/include/config/wan/router/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/wan/router/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_WAN_ROUTER_MODULE 1
+diff -Nur linux-2.4.32/include/config/wan/router.h linux-2.4.32.patched/include/config/wan/router.h
+--- linux-2.4.32/include/config/wan/router.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/wan/router.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_WAN_ROUTER
+diff -Nur linux-2.4.32/include/config/wan.h linux-2.4.32.patched/include/config/wan.h
+--- linux-2.4.32/include/config/wan.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/wan.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_WAN
+diff -Nur linux-2.4.32/include/config/watchdog/nowayout.h linux-2.4.32.patched/include/config/watchdog/nowayout.h
+--- linux-2.4.32/include/config/watchdog/nowayout.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/watchdog/nowayout.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_WATCHDOG_NOWAYOUT 1
+diff -Nur linux-2.4.32/include/config/watchdog.h linux-2.4.32.patched/include/config/watchdog.h
+--- linux-2.4.32/include/config/watchdog.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/watchdog.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_WATCHDOG 1
+diff -Nur linux-2.4.32/include/config/wavelan.h linux-2.4.32.patched/include/config/wavelan.h
+--- linux-2.4.32/include/config/wavelan.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/wavelan.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_WAVELAN
+diff -Nur linux-2.4.32/include/config/wdc/ali15x3.h linux-2.4.32.patched/include/config/wdc/ali15x3.h
+--- linux-2.4.32/include/config/wdc/ali15x3.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/wdc/ali15x3.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_WDC_ALI15X3
+diff -Nur linux-2.4.32/include/config/wdt.h linux-2.4.32.patched/include/config/wdt.h
+--- linux-2.4.32/include/config/wdt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/wdt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_WDT
+diff -Nur linux-2.4.32/include/config/wdtpci.h linux-2.4.32.patched/include/config/wdtpci.h
+--- linux-2.4.32/include/config/wdtpci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/wdtpci.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_WDTPCI
+diff -Nur linux-2.4.32/include/config/winbond/840.h linux-2.4.32.patched/include/config/winbond/840.h
+--- linux-2.4.32/include/config/winbond/840.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/winbond/840.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_WINBOND_840
+diff -Nur linux-2.4.32/include/config/wl/module.h linux-2.4.32.patched/include/config/wl/module.h
+--- linux-2.4.32/include/config/wl/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/wl/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_WL_MODULE 1
+diff -Nur linux-2.4.32/include/config/wl.h linux-2.4.32.patched/include/config/wl.h
+--- linux-2.4.32/include/config/wl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/wl.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_WL
+diff -Nur linux-2.4.32/include/config/x25.h linux-2.4.32.patched/include/config/x25.h
+--- linux-2.4.32/include/config/x25.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/x25.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_X25
+diff -Nur linux-2.4.32/include/config/xfs/debug.h linux-2.4.32.patched/include/config/xfs/debug.h
+--- linux-2.4.32/include/config/xfs/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/xfs/debug.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_XFS_DEBUG
+diff -Nur linux-2.4.32/include/config/xfs/fs/module.h linux-2.4.32.patched/include/config/xfs/fs/module.h
+--- linux-2.4.32/include/config/xfs/fs/module.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/xfs/fs/module.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_XFS_FS_MODULE 1
+diff -Nur linux-2.4.32/include/config/xfs/fs.h linux-2.4.32.patched/include/config/xfs/fs.h
+--- linux-2.4.32/include/config/xfs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/xfs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_XFS_FS
+diff -Nur linux-2.4.32/include/config/xfs/quota.h linux-2.4.32.patched/include/config/xfs/quota.h
+--- linux-2.4.32/include/config/xfs/quota.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/xfs/quota.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_XFS_QUOTA
+diff -Nur linux-2.4.32/include/config/xfs/rt.h linux-2.4.32.patched/include/config/xfs/rt.h
+--- linux-2.4.32/include/config/xfs/rt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/xfs/rt.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_XFS_RT
+diff -Nur linux-2.4.32/include/config/xfs/trace.h linux-2.4.32.patched/include/config/xfs/trace.h
+--- linux-2.4.32/include/config/xfs/trace.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/xfs/trace.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_XFS_TRACE
+diff -Nur linux-2.4.32/include/config/yam.h linux-2.4.32.patched/include/config/yam.h
+--- linux-2.4.32/include/config/yam.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/yam.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_YAM
+diff -Nur linux-2.4.32/include/config/yellowfin.h linux-2.4.32.patched/include/config/yellowfin.h
+--- linux-2.4.32/include/config/yellowfin.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/yellowfin.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_YELLOWFIN
+diff -Nur linux-2.4.32/include/config/zao/capcella.h linux-2.4.32.patched/include/config/zao/capcella.h
+--- linux-2.4.32/include/config/zao/capcella.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/zao/capcella.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ZAO_CAPCELLA
+diff -Nur linux-2.4.32/include/config/zisofs/fs.h linux-2.4.32.patched/include/config/zisofs/fs.h
+--- linux-2.4.32/include/config/zisofs/fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/zisofs/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ZISOFS_FS
+diff -Nur linux-2.4.32/include/config/zisofs.h linux-2.4.32.patched/include/config/zisofs.h
+--- linux-2.4.32/include/config/zisofs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/zisofs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#undef CONFIG_ZISOFS
+diff -Nur linux-2.4.32/include/config/zlib/deflate.h linux-2.4.32.patched/include/config/zlib/deflate.h
+--- linux-2.4.32/include/config/zlib/deflate.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/zlib/deflate.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_ZLIB_DEFLATE 1
+diff -Nur linux-2.4.32/include/config/zlib/inflate.h linux-2.4.32.patched/include/config/zlib/inflate.h
+--- linux-2.4.32/include/config/zlib/inflate.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/config/zlib/inflate.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#define CONFIG_ZLIB_INFLATE 1
+diff -Nur linux-2.4.32/include/linux/atmbr2684.h linux-2.4.32.patched/include/linux/atmbr2684.h
+--- linux-2.4.32/include/linux/atmbr2684.h 2002-08-03 02:39:45.000000000 +0200
++++ linux-2.4.32.patched/include/linux/atmbr2684.h 2006-03-13 18:55:56.000000000 +0100
+@@ -3,6 +3,7 @@
+
+ #include <linux/atm.h>
+ #include <linux/if.h> /* For IFNAMSIZ */
++#include <linux/if_ether.h> /* ETH_P_* */
+
+ /*
+ * Type of media we're bridging (ethernet, token ring, etc) Currently only
+@@ -36,15 +37,24 @@
+ #define BR2684_ENCAPS_AUTODETECT (2) /* Unsuported */
+
+ /*
++ * Is this VC bridged or routed?
++ */
++
++#define BR2684_PAYLOAD_ROUTED (0)
++#define BR2684_PAYLOAD_BRIDGED (1)
++
++
++/*
+ * This is for the ATM_NEWBACKENDIF call - these are like socket families:
+ * the first element of the structure is the backend number and the rest
+ * is per-backend specific
+ */
+ struct atm_newif_br2684 {
+- atm_backend_t backend_num; /* ATM_BACKEND_BR2684 */
+- int media; /* BR2684_MEDIA_* */
+- char ifname[IFNAMSIZ];
+- int mtu;
++ atm_backend_t backend_num; /* ATM_BACKEND_BR2684 */
++ int media; /* BR2684_MEDIA_* */
++ char ifname[IFNAMSIZ];
++ int mtu;
++ int payload; /* bridged or routed */
+ };
+
+ /*
+@@ -68,16 +78,17 @@
+ * is per-backend specific
+ */
+ struct atm_backend_br2684 {
+- atm_backend_t backend_num; /* ATM_BACKEND_BR2684 */
++ atm_backend_t backend_num; /* ATM_BACKEND_BR2684 */
+ struct br2684_if_spec ifspec;
+- int fcs_in; /* BR2684_FCSIN_* */
+- int fcs_out; /* BR2684_FCSOUT_* */
+- int fcs_auto; /* 1: fcs_{in,out} disabled if no FCS rx'ed */
+- int encaps; /* BR2684_ENCAPS_* */
+- int has_vpiid; /* 1: use vpn_id - Unsupported */
+- __u8 vpn_id[7];
+- int send_padding; /* unsupported */
+- int min_size; /* we will pad smaller packets than this */
++ int fcs_in; /* BR2684_FCSIN_* */
++ int fcs_out; /* BR2684_FCSOUT_* */
++ int fcs_auto; /* 1: fcs_{in,out} disabled if no FCS rx'ed */
++ int encaps; /* BR2684_ENCAPS_* */
++ int payload; /* BR2684_PAYLOAD_* */
++ int has_vpiid; /* 1: use vpn_id - Unsupported */
++ __u8 vpn_id[7];
++ int send_padding; /* unsupported */
++ int min_size; /* we will pad smaller packets than this */
+ };
+
+ /*
+@@ -95,7 +106,12 @@
+ struct br2684_filter filter;
+ };
+
++enum br2684_payload {
++ p_routed = BR2684_PAYLOAD_ROUTED,
++ p_bridged = BR2684_PAYLOAD_BRIDGED,
++};
++
+ #define BR2684_SETFILT _IOW( 'a', ATMIOC_BACKEND + 0, \
+ struct br2684_filter_set)
+
+-#endif /* _LINUX_ATMBR2684_H */
++#endif /* _LINUX_ATMBR2684_H */
+diff -Nur linux-2.4.32/include/linux/atmdev.h linux-2.4.32.patched/include/linux/atmdev.h
+--- linux-2.4.32/include/linux/atmdev.h 2004-08-08 01:26:06.000000000 +0200
++++ linux-2.4.32.patched/include/linux/atmdev.h 2006-03-13 18:55:56.000000000 +0100
+@@ -400,6 +400,7 @@
+ struct atm_dev *atm_dev_register(const char *type,const struct atmdev_ops *ops,
+ int number,atm_dev_flags_t *flags); /* number == -1: pick first available */
+ struct atm_dev *atm_dev_lookup(int number);
++void atm_dev_set_link_status(struct atm_dev *dev, int status);
+ void atm_dev_deregister(struct atm_dev *dev);
+ void shutdown_atm_dev(struct atm_dev *dev);
+ void vcc_insert_socket(struct sock *sk);
+diff -Nur linux-2.4.32/include/linux/autoconf.h linux-2.4.32.patched/include/linux/autoconf.h
+--- linux-2.4.32/include/linux/autoconf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/autoconf.h 2006-03-13 18:56:04.000000000 +0100
+@@ -0,0 +1,1680 @@
++/*
++ * Automatically generated C config: don't edit
++ */
++#define AUTOCONF_INCLUDED
++#define CONFIG_MIPS 1
++#define CONFIG_MIPS32 1
++#undef CONFIG_MIPS64
++
++/*
++ * Code maturity level options
++ */
++#define CONFIG_EXPERIMENTAL 1
++
++/*
++ * Loadable module support
++ */
++#define CONFIG_MODULES 1
++#undef CONFIG_MODVERSIONS
++#undef CONFIG_KMOD
++
++/*
++ * Machine selection
++ */
++#undef CONFIG_ACER_PICA_61
++#undef CONFIG_MIPS_BOSPORUS
++#undef CONFIG_MIPS_FICMMP
++#undef CONFIG_MIPS_MIRAGE
++#undef CONFIG_MIPS_DB1000
++#undef CONFIG_MIPS_DB1100
++#undef CONFIG_MIPS_DB1500
++#undef CONFIG_MIPS_DB1550
++#undef CONFIG_MIPS_DB1200
++#undef CONFIG_MIPS_PB1000
++#undef CONFIG_MIPS_PB1100
++#undef CONFIG_MIPS_PB1500
++#undef CONFIG_MIPS_PB1550
++#undef CONFIG_MIPS_PB1200
++#undef CONFIG_MIPS_HYDROGEN3
++#undef CONFIG_MIPS_XXS1500
++#undef CONFIG_MIPS_MTX1
++#undef CONFIG_COGENT_CSB250
++#undef CONFIG_BAGET_MIPS
++#undef CONFIG_CASIO_E55
++#undef CONFIG_MIPS_COBALT
++#undef CONFIG_DECSTATION
++#undef CONFIG_MIPS_EV64120
++#undef CONFIG_MIPS_EV96100
++#undef CONFIG_MIPS_IVR
++#undef CONFIG_HP_LASERJET
++#undef CONFIG_IBM_WORKPAD
++#undef CONFIG_LASAT
++#undef CONFIG_MIPS_ITE8172
++#undef CONFIG_MIPS_ATLAS
++#undef CONFIG_MIPS_MAGNUM_4000
++#undef CONFIG_MIPS_MALTA
++#undef CONFIG_MIPS_SEAD
++#undef CONFIG_MOMENCO_OCELOT
++#undef CONFIG_MOMENCO_OCELOT_G
++#undef CONFIG_MOMENCO_OCELOT_C
++#undef CONFIG_MOMENCO_JAGUAR_ATX
++#undef CONFIG_PMC_BIG_SUR
++#undef CONFIG_PMC_STRETCH
++#undef CONFIG_PMC_YOSEMITE
++#undef CONFIG_DDB5074
++#undef CONFIG_DDB5476
++#undef CONFIG_DDB5477
++#undef CONFIG_NEC_OSPREY
++#undef CONFIG_NEC_EAGLE
++#undef CONFIG_OLIVETTI_M700
++#undef CONFIG_NINO
++#undef CONFIG_SGI_IP22
++#undef CONFIG_SGI_IP27
++#undef CONFIG_SIBYTE_SB1xxx_SOC
++#define CONFIG_MIPS_BRCM 1
++#define CONFIG_BCM947XX 1
++#define CONFIG_BCM4710 1
++#define CONFIG_BCM4310 1
++#define CONFIG_BCM4704 1
++#define CONFIG_BCM5365 1
++#undef CONFIG_SNI_RM200_PCI
++#undef CONFIG_TANBAC_TB0226
++#undef CONFIG_TANBAC_TB0229
++#undef CONFIG_TOSHIBA_JMR3927
++#undef CONFIG_TOSHIBA_RBTX4927
++#undef CONFIG_VICTOR_MPC30X
++#undef CONFIG_ZAO_CAPCELLA
++#undef CONFIG_HIGHMEM
++#define CONFIG_RWSEM_GENERIC_SPINLOCK 1
++#undef CONFIG_RWSEM_XCHGADD_ALGORITHM
++#define CONFIG_CMDLINE "root=/dev/mtdblock2 rootfstype=squashfs,jffs2 init=/etc/preinit noinitrd console=ttyS0,115200"
++#define CONFIG_PCI 1
++#define CONFIG_NONCOHERENT_IO 1
++#define CONFIG_NEW_TIME_C 1
++#define CONFIG_NEW_IRQ 1
++#define CONFIG_HND 1
++#undef CONFIG_MIPS_AU1000
++
++/*
++ * CPU selection
++ */
++#define CONFIG_CPU_MIPS32 1
++#undef CONFIG_CPU_MIPS64
++#undef CONFIG_CPU_R3000
++#undef CONFIG_CPU_TX39XX
++#undef CONFIG_CPU_VR41XX
++#undef CONFIG_CPU_R4300
++#undef CONFIG_CPU_R4X00
++#undef CONFIG_CPU_TX49XX
++#undef CONFIG_CPU_R5000
++#undef CONFIG_CPU_R5432
++#undef CONFIG_CPU_R6000
++#undef CONFIG_CPU_NEVADA
++#undef CONFIG_CPU_R8000
++#undef CONFIG_CPU_R10000
++#undef CONFIG_CPU_RM7000
++#undef CONFIG_CPU_RM9000
++#undef CONFIG_CPU_SB1
++#define CONFIG_PAGE_SIZE_4KB 1
++#undef CONFIG_PAGE_SIZE_16KB
++#undef CONFIG_PAGE_SIZE_64KB
++#define CONFIG_CPU_HAS_PREFETCH 1
++#undef CONFIG_VTAG_ICACHE
++#undef CONFIG_64BIT_PHYS_ADDR
++#undef CONFIG_CPU_ADVANCED
++#define CONFIG_CPU_HAS_LLSC 1
++#undef CONFIG_CPU_HAS_LLDSCD
++#undef CONFIG_CPU_HAS_WB
++#define CONFIG_CPU_HAS_SYNC 1
++
++/*
++ * General setup
++ */
++#define CONFIG_CPU_LITTLE_ENDIAN 1
++#undef CONFIG_BUILD_ELF64
++#define CONFIG_NET 1
++#define CONFIG_PCI 1
++#undef CONFIG_PCI_NEW
++#define CONFIG_PCI_AUTO 1
++#undef CONFIG_PCI_NAMES
++#undef CONFIG_ISA
++#undef CONFIG_TC
++#undef CONFIG_MCA
++#undef CONFIG_SBUS
++#define CONFIG_HOTPLUG 1
++
++/*
++ * PCMCIA/CardBus support
++ */
++#undef CONFIG_PCMCIA
++#define CONFIG_PCMCIA_MODULE 1
++#define CONFIG_CARDBUS 1
++#undef CONFIG_TCIC
++#undef CONFIG_I82092
++#undef CONFIG_I82365
++
++/*
++ * PCI Hotplug Support
++ */
++#undef CONFIG_HOTPLUG_PCI
++#undef CONFIG_HOTPLUG_PCI_COMPAQ
++#undef CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM
++#undef CONFIG_HOTPLUG_PCI_SHPC
++#undef CONFIG_HOTPLUG_PCI_SHPC_POLL_EVENT_MODE
++#undef CONFIG_HOTPLUG_PCI_PCIE
++#undef CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE
++#define CONFIG_SYSVIPC 1
++#undef CONFIG_BSD_PROCESS_ACCT
++#define CONFIG_SYSCTL 1
++#define CONFIG_KCORE_ELF 1
++#undef CONFIG_KCORE_AOUT
++#undef CONFIG_BINFMT_AOUT
++#define CONFIG_BINFMT_ELF 1
++#undef CONFIG_BINFMT_ELF_AOUT
++#undef CONFIG_MIPS32_COMPAT
++#undef CONFIG_MIPS32_O32
++#undef CONFIG_MIPS32_N32
++#undef CONFIG_BINFMT_ELF32
++#undef CONFIG_BINFMT_MISC
++#undef CONFIG_OOM_KILLER
++#undef CONFIG_CMDLINE_BOOL
++
++/*
++ * Memory Technology Devices (MTD)
++ */
++#define CONFIG_MTD 1
++#undef CONFIG_MTD_DEBUG
++#define CONFIG_MTD_PARTITIONS 1
++#undef CONFIG_MTD_CONCAT
++#undef CONFIG_MTD_REDBOOT_PARTS
++#undef CONFIG_MTD_CMDLINE_PARTS
++
++/*
++ * User Modules And Translation Layers
++ */
++#define CONFIG_MTD_CHAR 1
++#define CONFIG_MTD_BLOCK 1
++#undef CONFIG_FTL
++#undef CONFIG_NFTL
++
++/*
++ * RAM/ROM/Flash chip drivers
++ */
++#define CONFIG_MTD_CFI 1
++#undef CONFIG_MTD_JEDECPROBE
++#define CONFIG_MTD_GEN_PROBE 1
++#define CONFIG_MTD_CFI_ADV_OPTIONS 1
++#define CONFIG_MTD_CFI_NOSWAP 1
++#undef CONFIG_MTD_CFI_BE_BYTE_SWAP
++#undef CONFIG_MTD_CFI_LE_BYTE_SWAP
++#define CONFIG_MTD_CFI_GEOMETRY 1
++#undef CONFIG_MTD_CFI_B1
++#define CONFIG_MTD_CFI_B2 1
++#undef CONFIG_MTD_CFI_B4
++#undef CONFIG_MTD_CFI_B8
++#define CONFIG_MTD_CFI_I1 1
++#undef CONFIG_MTD_CFI_I2
++#undef CONFIG_MTD_CFI_I4
++#undef CONFIG_MTD_CFI_I8
++#define CONFIG_MTD_CFI_INTELEXT 1
++#define CONFIG_MTD_CFI_AMDSTD 1
++#undef CONFIG_MTD_CFI_STAA
++#define CONFIG_MTD_CFI_SSTSTD 1
++#undef CONFIG_MTD_RAM
++#undef CONFIG_MTD_ROM
++#undef CONFIG_MTD_ABSENT
++#undef CONFIG_MTD_OBSOLETE_CHIPS
++#undef CONFIG_MTD_AMDSTD
++#undef CONFIG_MTD_SHARP
++#undef CONFIG_MTD_JEDEC
++
++/*
++ * Mapping drivers for chip access
++ */
++#undef CONFIG_MTD_PHYSMAP
++#define CONFIG_MTD_BCM947XX 1
++#undef CONFIG_MTD_PB1000
++#undef CONFIG_MTD_PB1500
++#undef CONFIG_MTD_PB1100
++#undef CONFIG_MTD_BOSPORUS
++#undef CONFIG_MTD_XXS1500
++#undef CONFIG_MTD_MTX1
++#undef CONFIG_MTD_DB1X00
++#undef CONFIG_MTD_PB1550
++#undef CONFIG_MTD_HYDROGEN3
++#undef CONFIG_MTD_MIRAGE
++#undef CONFIG_MTD_CSTM_MIPS_IXX
++#undef CONFIG_MTD_OCELOT
++#undef CONFIG_MTD_LASAT
++#undef CONFIG_MTD_PCI
++#undef CONFIG_MTD_PCMCIA
++
++/*
++ * Self-contained MTD device drivers
++ */
++#undef CONFIG_MTD_PMC551
++#undef CONFIG_MTD_SLRAM
++#undef CONFIG_MTD_MTDRAM
++#undef CONFIG_MTD_BLKMTD
++
++/*
++ * Disk-On-Chip Device Drivers
++ */
++#undef CONFIG_MTD_DOC1000
++#undef CONFIG_MTD_DOC2000
++#undef CONFIG_MTD_DOC2001
++#undef CONFIG_MTD_DOCPROBE
++
++/*
++ * NAND Flash Device Drivers
++ */
++#undef CONFIG_MTD_NAND
++
++/*
++ * Parallel port support
++ */
++#undef CONFIG_PARPORT
++#define CONFIG_PARPORT_MODULE 1
++#undef CONFIG_PARPORT_PC
++#undef CONFIG_PARPORT_SPLINK
++#define CONFIG_PARPORT_SPLINK_MODULE 1
++#undef CONFIG_PARPORT_AMIGA
++#undef CONFIG_PARPORT_MFC3
++#undef CONFIG_PARPORT_ATARI
++#undef CONFIG_PARPORT_GSC
++#undef CONFIG_PARPORT_SUNBPP
++#undef CONFIG_PARPORT_IP22
++#undef CONFIG_PARPORT_OTHER
++#undef CONFIG_PARPORT_1284
++
++/*
++ * Plug and Play configuration
++ */
++#undef CONFIG_PNP
++#undef CONFIG_ISAPNP
++
++/*
++ * Block devices
++ */
++#undef CONFIG_BLK_DEV_FD
++#undef CONFIG_BLK_DEV_XD
++#undef CONFIG_PARIDE
++#undef CONFIG_BLK_CPQ_DA
++#undef CONFIG_BLK_CPQ_CISS_DA
++#undef CONFIG_CISS_SCSI_TAPE
++#undef CONFIG_CISS_MONITOR_THREAD
++#undef CONFIG_BLK_DEV_DAC960
++#undef CONFIG_BLK_DEV_UMEM
++#undef CONFIG_BLK_DEV_SX8
++#undef CONFIG_BLK_DEV_LOOP
++#define CONFIG_BLK_DEV_LOOP_MODULE 1
++#undef CONFIG_BLK_DEV_NBD
++#define CONFIG_BLK_DEV_NBD_MODULE 1
++#undef CONFIG_BLK_DEV_RAM
++#undef CONFIG_BLK_DEV_INITRD
++#undef CONFIG_BLK_STATS
++
++/*
++ * Multi-device support (RAID and LVM)
++ */
++#undef CONFIG_MD
++#undef CONFIG_BLK_DEV_MD
++#undef CONFIG_MD_LINEAR
++#undef CONFIG_MD_RAID0
++#undef CONFIG_MD_RAID1
++#undef CONFIG_MD_RAID5
++#undef CONFIG_MD_MULTIPATH
++#undef CONFIG_BLK_DEV_LVM
++
++/*
++ * Networking options
++ */
++#define CONFIG_PACKET 1
++#define CONFIG_PACKET_MMAP 1
++#undef CONFIG_NETLINK_DEV
++#define CONFIG_NETLINK_DEV_MODULE 1
++#define CONFIG_NETFILTER 1
++#undef CONFIG_NETFILTER_DEBUG
++#define CONFIG_FILTER 1
++#define CONFIG_UNIX 1
++#define CONFIG_INET 1
++#define CONFIG_IP_MULTICAST 1
++#define CONFIG_IP_ADVANCED_ROUTER 1
++#define CONFIG_IP_MULTIPLE_TABLES 1
++#define CONFIG_IP_ROUTE_FWMARK 1
++#define CONFIG_IP_ROUTE_NAT 1
++#define CONFIG_IP_ROUTE_MULTIPATH 1
++#define CONFIG_IP_ROUTE_TOS 1
++#undef CONFIG_IP_ROUTE_VERBOSE
++#undef CONFIG_IP_PNP
++#undef CONFIG_NET_IPIP
++#define CONFIG_NET_IPIP_MODULE 1
++#undef CONFIG_NET_IPGRE
++#define CONFIG_NET_IPGRE_MODULE 1
++#undef CONFIG_NET_IPGRE_BROADCAST
++#undef CONFIG_IP_MROUTE
++#undef CONFIG_ARPD
++#undef CONFIG_INET_ECN
++#undef CONFIG_SYN_COOKIES
++
++/*
++ * IP: Netfilter Configuration
++ */
++#define CONFIG_IP_NF_CONNTRACK 1
++#define CONFIG_IP_NF_CONNTRACK_MARK 1
++#define CONFIG_IP_NF_FTP 1
++#undef CONFIG_IP_NF_AMANDA
++#define CONFIG_IP_NF_AMANDA_MODULE 1
++#undef CONFIG_IP_NF_TFTP
++#define CONFIG_IP_NF_TFTP_MODULE 1
++#define CONFIG_IP_NF_IRC 1
++#undef CONFIG_IP_NF_CT_ACCT
++#define CONFIG_IP_NF_CT_ACCT_MODULE 1
++#undef CONFIG_IP_NF_MATCH_CONNBYTES
++#define CONFIG_IP_NF_MATCH_CONNBYTES_MODULE 1
++#undef CONFIG_IP_NF_CT_PROTO_GRE
++#define CONFIG_IP_NF_CT_PROTO_GRE_MODULE 1
++#undef CONFIG_IP_NF_PPTP
++#define CONFIG_IP_NF_PPTP_MODULE 1
++#undef CONFIG_IP_NF_H323
++#define CONFIG_IP_NF_H323_MODULE 1
++#undef CONFIG_IP_NF_RTSP
++#define CONFIG_IP_NF_RTSP_MODULE 1
++#undef CONFIG_IP_NF_MMS
++#define CONFIG_IP_NF_MMS_MODULE 1
++#undef CONFIG_IP_NF_QUEUE
++#define CONFIG_IP_NF_QUEUE_MODULE 1
++#define CONFIG_IP_NF_IPTABLES 1
++#undef CONFIG_IP_NF_MATCH_LIMIT
++#define CONFIG_IP_NF_MATCH_LIMIT_MODULE 1
++#undef CONFIG_IP_NF_MATCH_QUOTA
++#define CONFIG_IP_NF_MATCH_QUOTA_MODULE 1
++#undef CONFIG_IP_NF_SET
++#define CONFIG_IP_NF_SET_MODULE 1
++#define CONFIG_IP_NF_SET_MAX (256)
++#define CONFIG_IP_NF_SET_HASHSIZE (1024)
++#undef CONFIG_IP_NF_MATCH_SET
++#define CONFIG_IP_NF_MATCH_SET_MODULE 1
++#undef CONFIG_IP_NF_TARGET_SET
++#define CONFIG_IP_NF_TARGET_SET_MODULE 1
++#undef CONFIG_IP_NF_SET_IPMAP
++#define CONFIG_IP_NF_SET_IPMAP_MODULE 1
++#undef CONFIG_IP_NF_SET_PORTMAP
++#define CONFIG_IP_NF_SET_PORTMAP_MODULE 1
++#undef CONFIG_IP_NF_SET_MACIPMAP
++#define CONFIG_IP_NF_SET_MACIPMAP_MODULE 1
++#undef CONFIG_IP_NF_SET_IPHASH
++#define CONFIG_IP_NF_SET_IPHASH_MODULE 1
++#undef CONFIG_IP_NF_SET_NETHASH
++#define CONFIG_IP_NF_SET_NETHASH_MODULE 1
++#undef CONFIG_IP_NF_SET_IPTREE
++#define CONFIG_IP_NF_SET_IPTREE_MODULE 1
++#undef CONFIG_IP_NF_MATCH_MAC
++#define CONFIG_IP_NF_MATCH_MAC_MODULE 1
++#undef CONFIG_IP_NF_MATCH_PKTTYPE
++#define CONFIG_IP_NF_MATCH_PKTTYPE_MODULE 1
++#define CONFIG_IP_NF_MATCH_MARK 1
++#define CONFIG_IP_NF_MATCH_MULTIPORT 1
++#undef CONFIG_IP_NF_MATCH_TOS
++#define CONFIG_IP_NF_MATCH_TOS_MODULE 1
++#undef CONFIG_IP_NF_MATCH_TIME
++#define CONFIG_IP_NF_MATCH_TIME_MODULE 1
++#undef CONFIG_IP_NF_MATCH_CONDITION
++#define CONFIG_IP_NF_MATCH_CONDITION_MODULE 1
++#undef CONFIG_IP_NF_MATCH_RECENT
++#define CONFIG_IP_NF_MATCH_RECENT_MODULE 1
++#undef CONFIG_IP_NF_MATCH_ECN
++#define CONFIG_IP_NF_MATCH_ECN_MODULE 1
++#undef CONFIG_IP_NF_MATCH_IPP2P
++#define CONFIG_IP_NF_MATCH_IPP2P_MODULE 1
++#undef CONFIG_IP_NF_MATCH_DSCP
++#define CONFIG_IP_NF_MATCH_DSCP_MODULE 1
++#undef CONFIG_IP_NF_MATCH_AH_ESP
++#define CONFIG_IP_NF_MATCH_AH_ESP_MODULE 1
++#undef CONFIG_IP_NF_MATCH_LENGTH
++#define CONFIG_IP_NF_MATCH_LENGTH_MODULE 1
++#undef CONFIG_IP_NF_MATCH_TTL
++#define CONFIG_IP_NF_MATCH_TTL_MODULE 1
++#undef CONFIG_IP_NF_MATCH_TCPMSS
++#define CONFIG_IP_NF_MATCH_TCPMSS_MODULE 1
++#undef CONFIG_IP_NF_MATCH_HELPER
++#define CONFIG_IP_NF_MATCH_HELPER_MODULE 1
++#define CONFIG_IP_NF_MATCH_STATE 1
++#undef CONFIG_IP_NF_MATCH_CONNTRACK
++#define CONFIG_IP_NF_MATCH_CONNTRACK_MODULE 1
++#undef CONFIG_IP_NF_MATCH_CONNMARK
++#define CONFIG_IP_NF_MATCH_CONNMARK_MODULE 1
++#undef CONFIG_IP_NF_MATCH_UNCLEAN
++#define CONFIG_IP_NF_MATCH_UNCLEAN_MODULE 1
++#undef CONFIG_IP_NF_MATCH_STRING
++#define CONFIG_IP_NF_MATCH_STRING_MODULE 1
++#undef CONFIG_IP_NF_MATCH_OWNER
++#define CONFIG_IP_NF_MATCH_OWNER_MODULE 1
++#undef CONFIG_IP_NF_MATCH_LAYER7
++#define CONFIG_IP_NF_MATCH_LAYER7_MODULE 1
++#undef CONFIG_IP_NF_MATCH_LAYER7_DEBUG
++#define CONFIG_IP_NF_FILTER 1
++#define CONFIG_IP_NF_TARGET_REJECT 1
++#undef CONFIG_IP_NF_TARGET_MIRROR
++#define CONFIG_IP_NF_TARGET_MIRROR_MODULE 1
++#define CONFIG_IP_NF_NAT 1
++#define CONFIG_IP_NF_NAT_NEEDED 1
++#define CONFIG_IP_NF_TARGET_MASQUERADE 1
++#undef CONFIG_IP_NF_TARGET_REDIRECT
++#define CONFIG_IP_NF_TARGET_REDIRECT_MODULE 1
++#undef CONFIG_IP_NF_TARGET_NETMAP
++#define CONFIG_IP_NF_TARGET_NETMAP_MODULE 1
++#undef CONFIG_IP_NF_NAT_PPTP
++#define CONFIG_IP_NF_NAT_PPTP_MODULE 1
++#undef CONFIG_IP_NF_NAT_PROTO_GRE
++#define CONFIG_IP_NF_NAT_PROTO_GRE_MODULE 1
++#undef CONFIG_IP_NF_NAT_AMANDA
++#define CONFIG_IP_NF_NAT_AMANDA_MODULE 1
++#undef CONFIG_IP_NF_NAT_H323
++#define CONFIG_IP_NF_NAT_H323_MODULE 1
++#undef CONFIG_IP_NF_NAT_RTSP
++#define CONFIG_IP_NF_NAT_RTSP_MODULE 1
++#undef CONFIG_IP_NF_NAT_MMS
++#define CONFIG_IP_NF_NAT_MMS_MODULE 1
++#undef CONFIG_IP_NF_NAT_SNMP_BASIC
++#define CONFIG_IP_NF_NAT_SNMP_BASIC_MODULE 1
++#define CONFIG_IP_NF_NAT_IRC 1
++#define CONFIG_IP_NF_NAT_FTP 1
++#undef CONFIG_IP_NF_NAT_TFTP
++#define CONFIG_IP_NF_NAT_TFTP_MODULE 1
++#define CONFIG_IP_NF_MANGLE 1
++#undef CONFIG_IP_NF_TARGET_TOS
++#define CONFIG_IP_NF_TARGET_TOS_MODULE 1
++#undef CONFIG_IP_NF_TARGET_ECN
++#define CONFIG_IP_NF_TARGET_ECN_MODULE 1
++#undef CONFIG_IP_NF_TARGET_DSCP
++#define CONFIG_IP_NF_TARGET_DSCP_MODULE 1
++#define CONFIG_IP_NF_TARGET_MARK 1
++#undef CONFIG_IP_NF_TARGET_IMQ
++#define CONFIG_IP_NF_TARGET_IMQ_MODULE 1
++#undef CONFIG_IP_NF_TARGET_CONNMARK
++#define CONFIG_IP_NF_TARGET_CONNMARK_MODULE 1
++#undef CONFIG_IP_NF_TARGET_LOG
++#define CONFIG_IP_NF_TARGET_LOG_MODULE 1
++#undef CONFIG_IP_NF_TARGET_TTL
++#define CONFIG_IP_NF_TARGET_TTL_MODULE 1
++#undef CONFIG_IP_NF_TARGET_ULOG
++#define CONFIG_IP_NF_TARGET_ULOG_MODULE 1
++#define CONFIG_IP_NF_TARGET_TCPMSS 1
++#undef CONFIG_IP_NF_ARPTABLES
++#define CONFIG_IP_NF_ARPTABLES_MODULE 1
++#undef CONFIG_IP_NF_ARPFILTER
++#define CONFIG_IP_NF_ARPFILTER_MODULE 1
++#undef CONFIG_IP_NF_ARP_MANGLE
++#define CONFIG_IP_NF_ARP_MANGLE_MODULE 1
++
++/*
++ * IP: Virtual Server Configuration
++ */
++#undef CONFIG_IP_VS
++#define CONFIG_IP_VS_MODULE 1
++#undef CONFIG_IP_VS_DEBUG
++#define CONFIG_IP_VS_TAB_BITS (12)
++
++/*
++ * IPVS scheduler
++ */
++#undef CONFIG_IP_VS_RR
++#define CONFIG_IP_VS_RR_MODULE 1
++#undef CONFIG_IP_VS_WRR
++#define CONFIG_IP_VS_WRR_MODULE 1
++#undef CONFIG_IP_VS_LC
++#define CONFIG_IP_VS_LC_MODULE 1
++#undef CONFIG_IP_VS_WLC
++#define CONFIG_IP_VS_WLC_MODULE 1
++#undef CONFIG_IP_VS_LBLC
++#define CONFIG_IP_VS_LBLC_MODULE 1
++#undef CONFIG_IP_VS_LBLCR
++#define CONFIG_IP_VS_LBLCR_MODULE 1
++#undef CONFIG_IP_VS_DH
++#define CONFIG_IP_VS_DH_MODULE 1
++#undef CONFIG_IP_VS_SH
++#define CONFIG_IP_VS_SH_MODULE 1
++#undef CONFIG_IP_VS_SED
++#define CONFIG_IP_VS_SED_MODULE 1
++#undef CONFIG_IP_VS_NQ
++#define CONFIG_IP_VS_NQ_MODULE 1
++
++/*
++ * IPVS application helper
++ */
++#undef CONFIG_IP_VS_FTP
++#define CONFIG_IP_VS_FTP_MODULE 1
++#undef CONFIG_IPV6
++#define CONFIG_IPV6_MODULE 1
++
++/*
++ * IPv6: Netfilter Configuration
++ */
++#undef CONFIG_IP6_NF_QUEUE
++#define CONFIG_IP6_NF_QUEUE_MODULE 1
++#undef CONFIG_IP6_NF_IPTABLES
++#define CONFIG_IP6_NF_IPTABLES_MODULE 1
++#undef CONFIG_IP6_NF_MATCH_LIMIT
++#define CONFIG_IP6_NF_MATCH_LIMIT_MODULE 1
++#undef CONFIG_IP6_NF_MATCH_CONDITION
++#define CONFIG_IP6_NF_MATCH_CONDITION_MODULE 1
++#undef CONFIG_IP6_NF_MATCH_MAC
++#define CONFIG_IP6_NF_MATCH_MAC_MODULE 1
++#undef CONFIG_IP6_NF_MATCH_RT
++#undef CONFIG_IP6_NF_MATCH_OPTS
++#undef CONFIG_IP6_NF_MATCH_FRAG
++#undef CONFIG_IP6_NF_MATCH_HL
++#undef CONFIG_IP6_NF_MATCH_MULTIPORT
++#define CONFIG_IP6_NF_MATCH_MULTIPORT_MODULE 1
++#undef CONFIG_IP6_NF_MATCH_OWNER
++#define CONFIG_IP6_NF_MATCH_OWNER_MODULE 1
++#undef CONFIG_IP6_NF_MATCH_MARK
++#define CONFIG_IP6_NF_MATCH_MARK_MODULE 1
++#undef CONFIG_IP6_NF_MATCH_IPV6HEADER
++#undef CONFIG_IP6_NF_MATCH_AHESP
++#undef CONFIG_IP6_NF_MATCH_LENGTH
++#define CONFIG_IP6_NF_MATCH_LENGTH_MODULE 1
++#undef CONFIG_IP6_NF_MATCH_EUI64
++#define CONFIG_IP6_NF_MATCH_EUI64_MODULE 1
++#undef CONFIG_IP6_NF_FILTER
++#define CONFIG_IP6_NF_FILTER_MODULE 1
++#undef CONFIG_IP6_NF_TARGET_LOG
++#define CONFIG_IP6_NF_TARGET_LOG_MODULE 1
++#undef CONFIG_IP6_NF_MANGLE
++#define CONFIG_IP6_NF_MANGLE_MODULE 1
++#undef CONFIG_IP6_NF_TARGET_MARK
++#define CONFIG_IP6_NF_TARGET_MARK_MODULE 1
++#undef CONFIG_IP6_NF_TARGET_IMQ
++#define CONFIG_IP6_NF_TARGET_IMQ_MODULE 1
++#undef CONFIG_KHTTPD
++
++/*
++ * SCTP Configuration (EXPERIMENTAL)
++ */
++#undef CONFIG_IP_SCTP
++#undef CONFIG_ATM
++#define CONFIG_VLAN_8021Q 1
++
++/*
++ *
++ */
++#undef CONFIG_IPX
++#undef CONFIG_ATALK
++#undef CONFIG_DECNET
++#define CONFIG_BRIDGE 1
++#undef CONFIG_X25
++#undef CONFIG_LAPB
++#undef CONFIG_LLC
++#undef CONFIG_NET_DIVERT
++#undef CONFIG_ECONET
++#undef CONFIG_WAN_ROUTER
++#define CONFIG_WAN_ROUTER_MODULE 1
++#undef CONFIG_NET_FASTROUTE
++#undef CONFIG_NET_HW_FLOWCONTROL
++
++/*
++ * QoS and/or fair queueing
++ */
++#define CONFIG_NET_SCHED 1
++#undef CONFIG_NET_SCH_CBQ
++#define CONFIG_NET_SCH_CBQ_MODULE 1
++#undef CONFIG_NET_SCH_HTB
++#define CONFIG_NET_SCH_HTB_MODULE 1
++#undef CONFIG_NET_SCH_CSZ
++#define CONFIG_NET_SCH_CSZ_MODULE 1
++#undef CONFIG_NET_SCH_HFSC
++#define CONFIG_NET_SCH_HFSC_MODULE 1
++#undef CONFIG_NET_SCH_PRIO
++#define CONFIG_NET_SCH_PRIO_MODULE 1
++#undef CONFIG_NET_SCH_RED
++#define CONFIG_NET_SCH_RED_MODULE 1
++#undef CONFIG_NET_SCH_SFQ
++#define CONFIG_NET_SCH_SFQ_MODULE 1
++#undef CONFIG_NET_SCH_TEQL
++#define CONFIG_NET_SCH_TEQL_MODULE 1
++#undef CONFIG_NET_SCH_TBF
++#define CONFIG_NET_SCH_TBF_MODULE 1
++#undef CONFIG_NET_SCH_GRED
++#define CONFIG_NET_SCH_GRED_MODULE 1
++#undef CONFIG_NET_SCH_NETEM
++#undef CONFIG_NET_SCH_DSMARK
++#define CONFIG_NET_SCH_DSMARK_MODULE 1
++#undef CONFIG_NET_SCH_INGRESS
++#define CONFIG_NET_SCH_INGRESS_MODULE 1
++#define CONFIG_NET_QOS 1
++#define CONFIG_NET_ESTIMATOR 1
++#define CONFIG_NET_CLS 1
++#undef CONFIG_NET_CLS_TCINDEX
++#define CONFIG_NET_CLS_TCINDEX_MODULE 1
++#undef CONFIG_NET_CLS_ROUTE4
++#define CONFIG_NET_CLS_ROUTE4_MODULE 1
++#define CONFIG_NET_CLS_ROUTE 1
++#undef CONFIG_NET_CLS_FW
++#define CONFIG_NET_CLS_FW_MODULE 1
++#undef CONFIG_NET_CLS_U32
++#define CONFIG_NET_CLS_U32_MODULE 1
++#undef CONFIG_NET_CLS_RSVP
++#define CONFIG_NET_CLS_RSVP_MODULE 1
++#undef CONFIG_NET_CLS_RSVP6
++#define CONFIG_NET_CLS_RSVP6_MODULE 1
++#define CONFIG_NET_CLS_POLICE 1
++
++/*
++ * Network testing
++ */
++#undef CONFIG_NET_PKTGEN
++#define CONFIG_IPSEC_NAT_TRAVERSAL 1
++
++/*
++ * Telephony Support
++ */
++#undef CONFIG_PHONE
++#undef CONFIG_PHONE_IXJ
++#undef CONFIG_PHONE_IXJ_PCMCIA
++
++/*
++ * ATA/IDE/MFM/RLL support
++ */
++#undef CONFIG_IDE
++#define CONFIG_IDE_MODULE 1
++
++/*
++ * IDE, ATA and ATAPI Block devices
++ */
++#undef CONFIG_BLK_DEV_IDE
++#define CONFIG_BLK_DEV_IDE_MODULE 1
++
++/*
++ * Please see Documentation/ide.txt for help/info on IDE drives
++ */
++#undef CONFIG_BLK_DEV_HD_IDE
++#undef CONFIG_BLK_DEV_HD
++#undef CONFIG_BLK_DEV_IDE_SATA
++#undef CONFIG_BLK_DEV_IDEDISK
++#define CONFIG_BLK_DEV_IDEDISK_MODULE 1
++#undef CONFIG_IDEDISK_MULTI_MODE
++#define CONFIG_IDEDISK_STROKE 1
++#undef CONFIG_BLK_DEV_IDECS
++#undef CONFIG_BLK_DEV_DELKIN
++#undef CONFIG_BLK_DEV_IDECD
++#undef CONFIG_BLK_DEV_IDETAPE
++#undef CONFIG_BLK_DEV_IDEFLOPPY
++#undef CONFIG_BLK_DEV_IDESCSI
++#undef CONFIG_IDE_TASK_IOCTL
++
++/*
++ * IDE chipset support/bugfixes
++ */
++#undef CONFIG_BLK_DEV_CMD640
++#undef CONFIG_BLK_DEV_CMD640_ENHANCED
++#undef CONFIG_BLK_DEV_ISAPNP
++#define CONFIG_BLK_DEV_IDEPCI 1
++#undef CONFIG_BLK_DEV_GENERIC
++#undef CONFIG_IDEPCI_SHARE_IRQ
++#define CONFIG_BLK_DEV_IDEDMA_PCI 1
++#define CONFIG_BLK_DEV_OFFBOARD 1
++#undef CONFIG_BLK_DEV_IDEDMA_FORCED
++#define CONFIG_IDEDMA_PCI_AUTO 1
++#undef CONFIG_IDEDMA_ONLYDISK
++#define CONFIG_BLK_DEV_IDEDMA 1
++#undef CONFIG_IDEDMA_PCI_WIP
++#undef CONFIG_BLK_DEV_ADMA100
++#undef CONFIG_BLK_DEV_AEC62XX
++#undef CONFIG_BLK_DEV_ALI15X3
++#undef CONFIG_WDC_ALI15X3
++#undef CONFIG_BLK_DEV_AMD74XX
++#undef CONFIG_AMD74XX_OVERRIDE
++#undef CONFIG_BLK_DEV_ATIIXP
++#undef CONFIG_BLK_DEV_CMD64X
++#undef CONFIG_BLK_DEV_TRIFLEX
++#undef CONFIG_BLK_DEV_CY82C693
++#undef CONFIG_BLK_DEV_CS5530
++#undef CONFIG_BLK_DEV_HPT34X
++#undef CONFIG_HPT34X_AUTODMA
++#undef CONFIG_BLK_DEV_HPT366
++#undef CONFIG_BLK_DEV_PIIX
++#undef CONFIG_BLK_DEV_NS87415
++#undef CONFIG_BLK_DEV_OPTI621
++#undef CONFIG_BLK_DEV_PDC202XX_OLD
++#define CONFIG_BLK_DEV_PDC202XX_OLD_MODULE 1
++#define CONFIG_PDC202XX_BURST 1
++#undef CONFIG_BLK_DEV_PDC202XX_NEW
++#undef CONFIG_PDC202XX_FORCE
++#undef CONFIG_BLK_DEV_RZ1000
++#undef CONFIG_BLK_DEV_SC1200
++#undef CONFIG_BLK_DEV_SVWKS
++#undef CONFIG_BLK_DEV_SIIMAGE
++#undef CONFIG_BLK_DEV_SIS5513
++#undef CONFIG_BLK_DEV_SLC90E66
++#undef CONFIG_BLK_DEV_TRM290
++#undef CONFIG_BLK_DEV_VIA82CXXX
++#undef CONFIG_IDE_CHIPSETS
++#define CONFIG_IDEDMA_AUTO 1
++#define CONFIG_IDEDMA_IVB 1
++#undef CONFIG_DMA_NONPCI
++#define CONFIG_BLK_DEV_PDC202XX 1
++#undef CONFIG_BLK_DEV_ATARAID
++#undef CONFIG_BLK_DEV_ATARAID_PDC
++#undef CONFIG_BLK_DEV_ATARAID_HPT
++#undef CONFIG_BLK_DEV_ATARAID_MEDLEY
++#undef CONFIG_BLK_DEV_ATARAID_SII
++
++/*
++ * SCSI support
++ */
++#undef CONFIG_SCSI
++#define CONFIG_SCSI_MODULE 1
++
++/*
++ * SCSI support type (disk, tape, CD-ROM)
++ */
++#undef CONFIG_BLK_DEV_SD
++#define CONFIG_BLK_DEV_SD_MODULE 1
++#define CONFIG_SD_EXTRA_DEVS (5)
++#undef CONFIG_CHR_DEV_ST
++#undef CONFIG_CHR_DEV_OSST
++#undef CONFIG_BLK_DEV_SR
++#undef CONFIG_CHR_DEV_SG
++#define CONFIG_CHR_DEV_SG_MODULE 1
++
++/*
++ * Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++ */
++#undef CONFIG_SCSI_DEBUG_QUEUES
++#define CONFIG_SCSI_MULTI_LUN 1
++#undef CONFIG_SCSI_CONSTANTS
++#undef CONFIG_SCSI_LOGGING
++
++/*
++ * SCSI low-level drivers
++ */
++#undef CONFIG_BLK_DEV_3W_XXXX_RAID
++#undef CONFIG_SCSI_7000FASST
++#undef CONFIG_SCSI_ACARD
++#undef CONFIG_SCSI_AHA152X
++#undef CONFIG_SCSI_AHA1542
++#undef CONFIG_SCSI_AHA1740
++#undef CONFIG_SCSI_AACRAID
++#undef CONFIG_SCSI_AIC7XXX
++#undef CONFIG_SCSI_AIC79XX
++#undef CONFIG_SCSI_AIC7XXX_OLD
++#undef CONFIG_SCSI_DPT_I2O
++#undef CONFIG_SCSI_ADVANSYS
++#undef CONFIG_SCSI_IN2000
++#undef CONFIG_SCSI_AM53C974
++#undef CONFIG_SCSI_MEGARAID
++#undef CONFIG_SCSI_MEGARAID2
++#undef CONFIG_SCSI_SATA
++#undef CONFIG_SCSI_SATA_AHCI
++#undef CONFIG_SCSI_SATA_SVW
++#undef CONFIG_SCSI_ATA_PIIX
++#undef CONFIG_SCSI_SATA_NV
++#undef CONFIG_SCSI_SATA_QSTOR
++#undef CONFIG_SCSI_SATA_PROMISE
++#undef CONFIG_SCSI_SATA_SX4
++#undef CONFIG_SCSI_SATA_SIL
++#undef CONFIG_SCSI_SATA_SIS
++#undef CONFIG_SCSI_SATA_ULI
++#undef CONFIG_SCSI_SATA_VIA
++#undef CONFIG_SCSI_SATA_VITESSE
++#undef CONFIG_SCSI_BUSLOGIC
++#undef CONFIG_SCSI_CPQFCTS
++#undef CONFIG_SCSI_DMX3191D
++#undef CONFIG_SCSI_DTC3280
++#undef CONFIG_SCSI_EATA
++#undef CONFIG_SCSI_EATA_DMA
++#undef CONFIG_SCSI_EATA_PIO
++#undef CONFIG_SCSI_FUTURE_DOMAIN
++#undef CONFIG_SCSI_GDTH
++#undef CONFIG_SCSI_GENERIC_NCR5380
++#undef CONFIG_SCSI_INITIO
++#undef CONFIG_SCSI_INIA100
++#undef CONFIG_SCSI_PPA
++#undef CONFIG_SCSI_IMM
++#undef CONFIG_SCSI_NCR53C406A
++#undef CONFIG_SCSI_NCR53C7xx
++#undef CONFIG_SCSI_SYM53C8XX_2
++#undef CONFIG_SCSI_NCR53C8XX
++#undef CONFIG_SCSI_SYM53C8XX
++#undef CONFIG_SCSI_PAS16
++#undef CONFIG_SCSI_PCI2000
++#undef CONFIG_SCSI_PCI2220I
++#undef CONFIG_SCSI_PSI240I
++#undef CONFIG_SCSI_QLOGIC_FAS
++#undef CONFIG_SCSI_QLOGIC_ISP
++#undef CONFIG_SCSI_QLOGIC_FC
++#undef CONFIG_SCSI_QLOGIC_1280
++#undef CONFIG_SCSI_SIM710
++#undef CONFIG_SCSI_SYM53C416
++#undef CONFIG_SCSI_DC390T
++#undef CONFIG_SCSI_T128
++#undef CONFIG_SCSI_U14_34F
++#undef CONFIG_SCSI_NSP32
++#undef CONFIG_SCSI_DEBUG
++
++/*
++ * PCMCIA SCSI adapter support
++ */
++#undef CONFIG_SCSI_PCMCIA
++
++/*
++ * Fusion MPT device support
++ */
++#undef CONFIG_FUSION
++#undef CONFIG_FUSION_BOOT
++#undef CONFIG_FUSION_ISENSE
++#undef CONFIG_FUSION_CTL
++#undef CONFIG_FUSION_LAN
++
++/*
++ * IEEE 1394 (FireWire) support (EXPERIMENTAL)
++ */
++#undef CONFIG_IEEE1394
++
++/*
++ * I2O device support
++ */
++#undef CONFIG_I2O
++#undef CONFIG_I2O_PCI
++#undef CONFIG_I2O_BLOCK
++#undef CONFIG_I2O_LAN
++#undef CONFIG_I2O_SCSI
++#undef CONFIG_I2O_PROC
++
++/*
++ * Network device support
++ */
++#define CONFIG_NETDEVICES 1
++#define CONFIG_HND 1
++
++/*
++ * ARCnet devices
++ */
++#undef CONFIG_ARCNET
++#undef CONFIG_DUMMY
++#undef CONFIG_BONDING
++#undef CONFIG_EQUALIZER
++#undef CONFIG_IMQ
++#define CONFIG_IMQ_MODULE 1
++#undef CONFIG_TUN
++#define CONFIG_TUN_MODULE 1
++#define CONFIG_NET_RANDOM 1
++#undef CONFIG_ETHERTAP
++
++/*
++ * Ethernet (10 or 100Mbit)
++ */
++#define CONFIG_NET_ETHERNET 1
++#undef CONFIG_SUNLANCE
++#undef CONFIG_HAPPYMEAL
++#undef CONFIG_SUNBMAC
++#undef CONFIG_SUNQE
++#undef CONFIG_SUNGEM
++#undef CONFIG_NET_VENDOR_3COM
++#undef CONFIG_LANCE
++#undef CONFIG_NET_VENDOR_SMC
++#undef CONFIG_NET_VENDOR_RACAL
++#undef CONFIG_HP100
++#undef CONFIG_NET_ISA
++#define CONFIG_NET_PCI 1
++#undef CONFIG_PCNET32
++#undef CONFIG_AMD8111_ETH
++#undef CONFIG_ADAPTEC_STARFIRE
++#undef CONFIG_APRICOT
++#define CONFIG_B44 1
++#undef CONFIG_CS89x0
++#undef CONFIG_TULIP
++#undef CONFIG_DE4X5
++#undef CONFIG_DGRS
++#undef CONFIG_DM9102
++#undef CONFIG_EEPRO100
++#undef CONFIG_EEPRO100_PIO
++#undef CONFIG_E100
++#undef CONFIG_LNE390
++#undef CONFIG_FEALNX
++#undef CONFIG_NATSEMI
++#undef CONFIG_NE2K_PCI
++#undef CONFIG_FORCEDETH
++#undef CONFIG_NE3210
++#undef CONFIG_ES3210
++#undef CONFIG_8139CP
++#undef CONFIG_8139TOO
++#undef CONFIG_8139TOO_PIO
++#undef CONFIG_8139TOO_TUNE_TWISTER
++#undef CONFIG_8139TOO_8129
++#undef CONFIG_8139_OLD_RX_RESET
++#undef CONFIG_SIS900
++#undef CONFIG_EPIC100
++#undef CONFIG_SUNDANCE
++#undef CONFIG_SUNDANCE_MMIO
++#undef CONFIG_TLAN
++#undef CONFIG_VIA_RHINE
++#undef CONFIG_VIA_RHINE_MMIO
++#undef CONFIG_WINBOND_840
++#undef CONFIG_LAN_SAA9730
++#undef CONFIG_NET_POCKET
++
++/*
++ * Ethernet (1000 Mbit)
++ */
++#undef CONFIG_ACENIC
++#undef CONFIG_DL2K
++#undef CONFIG_E1000
++#undef CONFIG_MYRI_SBUS
++#undef CONFIG_NS83820
++#undef CONFIG_HAMACHI
++#undef CONFIG_YELLOWFIN
++#undef CONFIG_R8169
++#undef CONFIG_SK98LIN
++#undef CONFIG_TIGON3
++#undef CONFIG_FDDI
++#undef CONFIG_HIPPI
++#undef CONFIG_PLIP
++#undef CONFIG_PPP
++#define CONFIG_PPP_MODULE 1
++#undef CONFIG_PPP_MULTILINK
++#define CONFIG_PPP_FILTER 1
++#undef CONFIG_PPP_ASYNC
++#define CONFIG_PPP_ASYNC_MODULE 1
++#undef CONFIG_PPP_SYNC_TTY
++#undef CONFIG_PPP_DEFLATE
++#define CONFIG_PPP_DEFLATE_MODULE 1
++#undef CONFIG_PPP_BSDCOMP
++#define CONFIG_PPP_BSDCOMP_MODULE 1
++#undef CONFIG_PPP_MPPE_MPPC
++#define CONFIG_PPP_MPPE_MPPC_MODULE 1
++#undef CONFIG_PPPOE
++#define CONFIG_PPPOE_MODULE 1
++#undef CONFIG_SLIP
++
++/*
++ * Wireless LAN (non-hamradio)
++ */
++#define CONFIG_NET_RADIO 1
++#undef CONFIG_STRIP
++#undef CONFIG_WAVELAN
++#undef CONFIG_ARLAN
++#undef CONFIG_AIRONET4500
++#undef CONFIG_AIRONET4500_NONCS
++#undef CONFIG_AIRONET4500_PROC
++#undef CONFIG_AIRO
++#undef CONFIG_HERMES
++#undef CONFIG_WL
++#define CONFIG_WL_MODULE 1
++#undef CONFIG_PLX_HERMES
++#undef CONFIG_TMD_HERMES
++#undef CONFIG_PCI_HERMES
++
++/*
++ * Wireless Pcmcia cards support
++ */
++#undef CONFIG_PCMCIA_HERMES
++#undef CONFIG_AIRO_CS
++#undef CONFIG_PCMCIA_ATMEL
++
++/*
++ * Prism54 PCI/PCMCIA GT/Duette Driver - 802.11(a/b/g)
++ */
++#undef CONFIG_PRISM54
++#define CONFIG_NET_WIRELESS 1
++
++/*
++ * Token Ring devices
++ */
++#undef CONFIG_TR
++#undef CONFIG_NET_FC
++#undef CONFIG_RCPCI
++#undef CONFIG_SHAPER
++#define CONFIG_SHAPER_MODULE 1
++
++/*
++ * Wan interfaces
++ */
++#undef CONFIG_WAN
++
++/*
++ * PCMCIA network device support
++ */
++#undef CONFIG_NET_PCMCIA
++
++/*
++ * Amateur Radio support
++ */
++#define CONFIG_HAMRADIO 1
++
++/*
++ * Packet Radio protocols
++ */
++#undef CONFIG_AX25
++#define CONFIG_AX25_MODULE 1
++#undef CONFIG_AX25_DAMA_SLAVE
++#undef CONFIG_NETROM
++#undef CONFIG_ROSE
++
++/*
++ * AX.25 network device drivers
++ */
++
++/*
++ * AX.25 network device drivers
++ */
++#undef CONFIG_MKISS
++#define CONFIG_MKISS_MODULE 1
++#undef CONFIG_6PACK
++#undef CONFIG_BPQETHER
++#undef CONFIG_SCC_DELAY
++#undef CONFIG_SCC_TRXECHO
++#undef CONFIG_BAYCOM_SER_FDX
++#undef CONFIG_BAYCOM_SER_HDX
++#undef CONFIG_BAYCOM_PAR
++#undef CONFIG_BAYCOM_EPP
++#undef CONFIG_SOUNDMODEM
++#undef CONFIG_YAM
++
++/*
++ * IrDA (infrared) support
++ */
++#undef CONFIG_IRDA
++
++/*
++ * ISDN subsystem
++ */
++#undef CONFIG_ISDN
++
++/*
++ * Input core support
++ */
++#undef CONFIG_INPUT
++#undef CONFIG_INPUT_KEYBDEV
++#undef CONFIG_INPUT_MOUSEDEV
++#undef CONFIG_INPUT_JOYDEV
++#undef CONFIG_INPUT_EVDEV
++#undef CONFIG_INPUT_UINPUT
++
++/*
++ * Character devices
++ */
++#undef CONFIG_VT
++#define CONFIG_SERIAL 1
++#define CONFIG_SERIAL_CONSOLE 1
++#undef CONFIG_SERIAL_EXTENDED
++#undef CONFIG_SERIAL_NONSTANDARD
++#define CONFIG_UNIX98_PTYS 1
++#define CONFIG_UNIX98_PTY_COUNT (128)
++#undef CONFIG_PRINTER
++#define CONFIG_PRINTER_MODULE 1
++#undef CONFIG_LP_CONSOLE
++#undef CONFIG_PPDEV
++#define CONFIG_PPDEV_MODULE 1
++#undef CONFIG_TIPAR
++
++/*
++ * I2C support
++ */
++#undef CONFIG_I2C
++
++/*
++ * Mice
++ */
++#undef CONFIG_BUSMOUSE
++#undef CONFIG_MOUSE
++
++/*
++ * Joysticks
++ */
++#undef CONFIG_INPUT_GAMEPORT
++
++/*
++ * Input core support is needed for gameports
++ */
++
++/*
++ * Input core support is needed for joysticks
++ */
++#undef CONFIG_QIC02_TAPE
++#undef CONFIG_IPMI_HANDLER
++#undef CONFIG_IPMI_PANIC_EVENT
++#undef CONFIG_IPMI_DEVICE_INTERFACE
++#undef CONFIG_IPMI_KCS
++#undef CONFIG_IPMI_WATCHDOG
++
++/*
++ * Watchdog Cards
++ */
++#define CONFIG_WATCHDOG 1
++#define CONFIG_WATCHDOG_NOWAYOUT 1
++#undef CONFIG_ACQUIRE_WDT
++#undef CONFIG_ADVANTECH_WDT
++#undef CONFIG_ALIM1535_WDT
++#undef CONFIG_ALIM7101_WDT
++#undef CONFIG_SC520_WDT
++#undef CONFIG_PCWATCHDOG
++#undef CONFIG_EUROTECH_WDT
++#undef CONFIG_IB700_WDT
++#undef CONFIG_WAFER_WDT
++#undef CONFIG_I810_TCO
++#undef CONFIG_MIXCOMWD
++#undef CONFIG_60XX_WDT
++#undef CONFIG_SC1200_WDT
++#undef CONFIG_SCx200_WDT
++#undef CONFIG_SOFT_WATCHDOG
++#define CONFIG_SOFT_WATCHDOG_MODULE 1
++#undef CONFIG_W83877F_WDT
++#undef CONFIG_WDT
++#undef CONFIG_WDTPCI
++#undef CONFIG_MACHZ_WDT
++#undef CONFIG_SCx200
++#undef CONFIG_SCx200_GPIO
++#undef CONFIG_AMD_PM768
++#undef CONFIG_NVRAM
++#undef CONFIG_RTC
++#undef CONFIG_DTLK
++#undef CONFIG_R3964
++#undef CONFIG_APPLICOM
++
++/*
++ * Ftape, the floppy tape device driver
++ */
++#undef CONFIG_FTAPE
++#undef CONFIG_AGP
++
++/*
++ * Direct Rendering Manager (XFree86 DRI support)
++ */
++#undef CONFIG_DRM
++
++/*
++ * PCMCIA character devices
++ */
++#undef CONFIG_PCMCIA_SERIAL_CS
++#define CONFIG_PCMCIA_SERIAL_CS_MODULE 1
++#undef CONFIG_SYNCLINK_CS
++
++/*
++ * File systems
++ */
++#undef CONFIG_QUOTA
++#undef CONFIG_QFMT_V2
++#undef CONFIG_AUTOFS_FS
++#undef CONFIG_AUTOFS4_FS
++#undef CONFIG_REISERFS_FS
++#undef CONFIG_REISERFS_CHECK
++#undef CONFIG_REISERFS_PROC_INFO
++#undef CONFIG_ADFS_FS
++#undef CONFIG_ADFS_FS_RW
++#undef CONFIG_AFFS_FS
++#undef CONFIG_HFS_FS
++#undef CONFIG_HFSPLUS_FS
++#define CONFIG_HFSPLUS_FS_MODULE 1
++#undef CONFIG_BEFS_FS
++#undef CONFIG_BEFS_DEBUG
++#undef CONFIG_BFS_FS
++#undef CONFIG_EXT3_FS
++#define CONFIG_EXT3_FS_MODULE 1
++#undef CONFIG_JBD
++#define CONFIG_JBD_MODULE 1
++#undef CONFIG_JBD_DEBUG
++#undef CONFIG_FAT_FS
++#define CONFIG_FAT_FS_MODULE 1
++#undef CONFIG_MSDOS_FS
++#undef CONFIG_UMSDOS_FS
++#undef CONFIG_VFAT_FS
++#define CONFIG_VFAT_FS_MODULE 1
++#undef CONFIG_EFS_FS
++#undef CONFIG_JFFS_FS
++#define CONFIG_JFFS2_FS 1
++#define CONFIG_JFFS2_FS_DEBUG (0)
++#undef CONFIG_JFFS2_BBC_ARMLIB
++#undef CONFIG_JFFS2_BBC_LZO
++#define CONFIG_JFFS2_BBC_LZARI 1
++#undef CONFIG_JFFS2_BBC_LZHD
++#undef CONFIG_JFFS2_BBC_LZSS
++#undef CONFIG_CRAMFS
++#define CONFIG_SQUASHFS 1
++#undef CONFIG_SQUASHFS_EMBEDDED
++#define CONFIG_TMPFS 1
++#define CONFIG_RAMFS 1
++#undef CONFIG_ISO9660_FS
++#define CONFIG_ISO9660_FS_MODULE 1
++#define CONFIG_JOLIET 1
++#undef CONFIG_ZISOFS
++#undef CONFIG_JFS_FS
++#undef CONFIG_JFS_DEBUG
++#undef CONFIG_JFS_STATISTICS
++#undef CONFIG_MINIX_FS
++#define CONFIG_MINIX_FS_MODULE 1
++#undef CONFIG_VXFS_FS
++#undef CONFIG_NTFS_FS
++#undef CONFIG_NTFS_RW
++#undef CONFIG_HPFS_FS
++#define CONFIG_PROC_FS 1
++#define CONFIG_DEVFS_FS 1
++#define CONFIG_DEVFS_MOUNT 1
++#undef CONFIG_DEVFS_DEBUG
++#define CONFIG_DEVPTS_FS 1
++#undef CONFIG_QNX4FS_FS
++#undef CONFIG_QNX4FS_RW
++#undef CONFIG_ROMFS_FS
++#undef CONFIG_EXT2_FS
++#define CONFIG_EXT2_FS_MODULE 1
++#undef CONFIG_SYSV_FS
++#undef CONFIG_UDF_FS
++#undef CONFIG_UDF_RW
++#undef CONFIG_UFS_FS
++#undef CONFIG_UFS_FS_WRITE
++#undef CONFIG_XFS_FS
++#define CONFIG_XFS_FS_MODULE 1
++#undef CONFIG_XFS_QUOTA
++#undef CONFIG_XFS_RT
++#undef CONFIG_XFS_TRACE
++#undef CONFIG_XFS_DEBUG
++
++/*
++ * Network File Systems
++ */
++#undef CONFIG_CODA_FS
++#undef CONFIG_INTERMEZZO_FS
++#undef CONFIG_NFS_FS
++#define CONFIG_NFS_FS_MODULE 1
++#define CONFIG_NFS_V3 1
++#undef CONFIG_NFS_DIRECTIO
++#undef CONFIG_ROOT_NFS
++#undef CONFIG_NFSD
++#undef CONFIG_NFSD_V3
++#undef CONFIG_NFSD_TCP
++#undef CONFIG_SUNRPC
++#define CONFIG_SUNRPC_MODULE 1
++#undef CONFIG_LOCKD
++#define CONFIG_LOCKD_MODULE 1
++#define CONFIG_LOCKD_V4 1
++#undef CONFIG_CIFS
++#define CONFIG_CIFS_MODULE 1
++#undef CONFIG_CIFS_STATS
++#define CONFIG_CIFS_POSIX 1
++#undef CONFIG_SMB_FS
++#undef CONFIG_NCP_FS
++#undef CONFIG_NCPFS_PACKET_SIGNING
++#undef CONFIG_NCPFS_IOCTL_LOCKING
++#undef CONFIG_NCPFS_STRONG
++#undef CONFIG_NCPFS_NFS_NS
++#undef CONFIG_NCPFS_OS2_NS
++#undef CONFIG_NCPFS_SMALLDOS
++#undef CONFIG_NCPFS_NLS
++#undef CONFIG_NCPFS_EXTRAS
++#undef CONFIG_ZISOFS_FS
++
++/*
++ * Partition Types
++ */
++#define CONFIG_PARTITION_ADVANCED 1
++#undef CONFIG_ACORN_PARTITION
++#undef CONFIG_OSF_PARTITION
++#undef CONFIG_AMIGA_PARTITION
++#undef CONFIG_ATARI_PARTITION
++#define CONFIG_MAC_PARTITION 1
++#define CONFIG_MSDOS_PARTITION 1
++#undef CONFIG_BSD_DISKLABEL
++#undef CONFIG_MINIX_SUBPARTITION
++#undef CONFIG_SOLARIS_X86_PARTITION
++#undef CONFIG_UNIXWARE_DISKLABEL
++#undef CONFIG_LDM_PARTITION
++#undef CONFIG_SGI_PARTITION
++#undef CONFIG_ULTRIX_PARTITION
++#undef CONFIG_SUN_PARTITION
++#undef CONFIG_EFI_PARTITION
++#undef CONFIG_SMB_NLS
++#define CONFIG_NLS 1
++
++/*
++ * Native Language Support
++ */
++#define CONFIG_NLS_DEFAULT "iso8859-1"
++#undef CONFIG_NLS_CODEPAGE_437
++#undef CONFIG_NLS_CODEPAGE_737
++#undef CONFIG_NLS_CODEPAGE_775
++#undef CONFIG_NLS_CODEPAGE_850
++#undef CONFIG_NLS_CODEPAGE_852
++#undef CONFIG_NLS_CODEPAGE_855
++#undef CONFIG_NLS_CODEPAGE_857
++#undef CONFIG_NLS_CODEPAGE_860
++#undef CONFIG_NLS_CODEPAGE_861
++#undef CONFIG_NLS_CODEPAGE_862
++#undef CONFIG_NLS_CODEPAGE_863
++#undef CONFIG_NLS_CODEPAGE_864
++#undef CONFIG_NLS_CODEPAGE_865
++#undef CONFIG_NLS_CODEPAGE_866
++#undef CONFIG_NLS_CODEPAGE_869
++#undef CONFIG_NLS_CODEPAGE_936
++#undef CONFIG_NLS_CODEPAGE_950
++#undef CONFIG_NLS_CODEPAGE_932
++#undef CONFIG_NLS_CODEPAGE_949
++#undef CONFIG_NLS_CODEPAGE_874
++#undef CONFIG_NLS_ISO8859_8
++#undef CONFIG_NLS_CODEPAGE_1250
++#undef CONFIG_NLS_CODEPAGE_1251
++#undef CONFIG_NLS_ISO8859_1
++#undef CONFIG_NLS_ISO8859_2
++#undef CONFIG_NLS_ISO8859_3
++#undef CONFIG_NLS_ISO8859_4
++#undef CONFIG_NLS_ISO8859_5
++#undef CONFIG_NLS_ISO8859_6
++#undef CONFIG_NLS_ISO8859_7
++#undef CONFIG_NLS_ISO8859_9
++#undef CONFIG_NLS_ISO8859_13
++#undef CONFIG_NLS_ISO8859_14
++#undef CONFIG_NLS_ISO8859_15
++#undef CONFIG_NLS_KOI8_R
++#undef CONFIG_NLS_KOI8_U
++#undef CONFIG_NLS_UTF8
++
++/*
++ * Multimedia devices
++ */
++#undef CONFIG_VIDEO_DEV
++#define CONFIG_VIDEO_DEV_MODULE 1
++
++/*
++ * Video For Linux
++ */
++#define CONFIG_VIDEO_PROC_FS 1
++#undef CONFIG_I2C_PARPORT
++
++/*
++ * Video Adapters
++ */
++#undef CONFIG_VIDEO_BT848
++#undef CONFIG_VIDEO_PMS
++#undef CONFIG_VIDEO_BWQCAM
++#undef CONFIG_VIDEO_CQCAM
++#undef CONFIG_VIDEO_CPIA
++#undef CONFIG_VIDEO_SAA5249
++#undef CONFIG_TUNER_3036
++#undef CONFIG_VIDEO_STRADIS
++#undef CONFIG_VIDEO_ZORAN
++#undef CONFIG_VIDEO_ZORAN_BUZ
++#undef CONFIG_VIDEO_ZORAN_DC10
++#undef CONFIG_VIDEO_ZORAN_LML33
++#undef CONFIG_VIDEO_ZR36120
++#undef CONFIG_VIDEO_MEYE
++
++/*
++ * Radio Adapters
++ */
++#undef CONFIG_RADIO_GEMTEK_PCI
++#undef CONFIG_RADIO_MAXIRADIO
++#undef CONFIG_RADIO_MAESTRO
++#undef CONFIG_RADIO_MIROPCM20
++
++/*
++ * Sound
++ */
++#undef CONFIG_SOUND
++#define CONFIG_SOUND_MODULE 1
++#undef CONFIG_SOUND_ALI5455
++#undef CONFIG_SOUND_BT878
++#undef CONFIG_SOUND_CMPCI
++#undef CONFIG_SOUND_EMU10K1
++#undef CONFIG_MIDI_EMU10K1
++#undef CONFIG_SOUND_FUSION
++#undef CONFIG_SOUND_CS4281
++#undef CONFIG_SOUND_ES1370
++#undef CONFIG_SOUND_ES1371
++#undef CONFIG_SOUND_ESSSOLO1
++#undef CONFIG_SOUND_MAESTRO
++#undef CONFIG_SOUND_MAESTRO3
++#undef CONFIG_SOUND_FORTE
++#undef CONFIG_SOUND_ICH
++#undef CONFIG_SOUND_RME96XX
++#undef CONFIG_SOUND_SONICVIBES
++#undef CONFIG_SOUND_TRIDENT
++#undef CONFIG_SOUND_MSNDCLAS
++#undef CONFIG_SOUND_MSNDPIN
++#undef CONFIG_SOUND_VIA82CXXX
++#undef CONFIG_MIDI_VIA82CXXX
++#undef CONFIG_SOUND_OSS
++#undef CONFIG_SOUND_TVMIXER
++#undef CONFIG_SOUND_AD1980
++#undef CONFIG_SOUND_WM97XX
++
++/*
++ * USB support
++ */
++#undef CONFIG_USB
++#define CONFIG_USB_MODULE 1
++#undef CONFIG_USB_DEBUG
++
++/*
++ * Miscellaneous USB options
++ */
++#define CONFIG_USB_DEVICEFS 1
++#undef CONFIG_USB_BANDWIDTH
++
++/*
++ * USB Host Controller Drivers
++ */
++#undef CONFIG_USB_EHCI_HCD
++#define CONFIG_USB_EHCI_HCD_MODULE 1
++#undef CONFIG_USB_UHCI
++#undef CONFIG_USB_UHCI_ALT
++#define CONFIG_USB_UHCI_ALT_MODULE 1
++#undef CONFIG_USB_OHCI
++#define CONFIG_USB_OHCI_MODULE 1
++
++/*
++ * USB Device Class drivers
++ */
++#undef CONFIG_USB_AUDIO
++#define CONFIG_USB_AUDIO_MODULE 1
++#undef CONFIG_USB_EMI26
++
++/*
++ * USB Bluetooth can only be used with disabled Bluetooth subsystem
++ */
++#undef CONFIG_USB_MIDI
++#undef CONFIG_USB_STORAGE
++#define CONFIG_USB_STORAGE_MODULE 1
++#undef CONFIG_USB_STORAGE_DEBUG
++#define CONFIG_USB_STORAGE_DATAFAB 1
++#define CONFIG_USB_STORAGE_FREECOM 1
++#undef CONFIG_USB_STORAGE_ISD200
++#define CONFIG_USB_STORAGE_DPCM 1
++#define CONFIG_USB_STORAGE_HP8200e 1
++#define CONFIG_USB_STORAGE_SDDR09 1
++#define CONFIG_USB_STORAGE_SDDR55 1
++#define CONFIG_USB_STORAGE_JUMPSHOT 1
++#undef CONFIG_USB_ACM
++#define CONFIG_USB_ACM_MODULE 1
++#undef CONFIG_USB_PRINTER
++#define CONFIG_USB_PRINTER_MODULE 1
++
++/*
++ * USB Human Interface Devices (HID)
++ */
++#undef CONFIG_USB_HID
++
++/*
++ * Input core support is needed for USB HID input layer or HIDBP support
++ */
++#undef CONFIG_USB_HIDINPUT
++#undef CONFIG_USB_HIDDEV
++#undef CONFIG_USB_KBD
++#undef CONFIG_USB_MOUSE
++#undef CONFIG_USB_AIPTEK
++#undef CONFIG_USB_WACOM
++#undef CONFIG_USB_KBTAB
++#undef CONFIG_USB_POWERMATE
++
++/*
++ * USB Imaging devices
++ */
++#undef CONFIG_USB_DC2XX
++#undef CONFIG_USB_MDC800
++#undef CONFIG_USB_SCANNER
++#undef CONFIG_USB_MICROTEK
++#undef CONFIG_USB_HPUSBSCSI
++
++/*
++ * USB Multimedia devices
++ */
++#undef CONFIG_USB_IBMCAM
++#undef CONFIG_USB_KONICAWC
++#undef CONFIG_USB_OV511
++#undef CONFIG_USB_PWC
++#define CONFIG_USB_PWC_MODULE 1
++#undef CONFIG_USB_SE401
++#undef CONFIG_USB_STV680
++#undef CONFIG_USB_W9968CF
++#undef CONFIG_USB_VICAM
++#undef CONFIG_USB_DSBR
++#undef CONFIG_USB_DABUSB
++
++/*
++ * USB Network adaptors
++ */
++#undef CONFIG_USB_PEGASUS
++#undef CONFIG_USB_RTL8150
++#undef CONFIG_USB_KAWETH
++#undef CONFIG_USB_CATC
++#undef CONFIG_USB_CDCETHER
++#undef CONFIG_USB_USBNET
++
++/*
++ * USB port drivers
++ */
++#undef CONFIG_USB_USS720
++
++/*
++ * USB Serial Converter support
++ */
++#undef CONFIG_USB_SERIAL
++#define CONFIG_USB_SERIAL_MODULE 1
++#undef CONFIG_USB_SERIAL_DEBUG
++#define CONFIG_USB_SERIAL_GENERIC 1
++#undef CONFIG_USB_SERIAL_BELKIN
++#define CONFIG_USB_SERIAL_BELKIN_MODULE 1
++#undef CONFIG_USB_SERIAL_WHITEHEAT
++#undef CONFIG_USB_SERIAL_DIGI_ACCELEPORT
++#undef CONFIG_USB_SERIAL_EMPEG
++#undef CONFIG_USB_SERIAL_FTDI_SIO
++#define CONFIG_USB_SERIAL_FTDI_SIO_MODULE 1
++#undef CONFIG_USB_SERIAL_VISOR
++#define CONFIG_USB_SERIAL_VISOR_MODULE 1
++#undef CONFIG_USB_SERIAL_IPAQ
++#undef CONFIG_USB_SERIAL_IR
++#undef CONFIG_USB_SERIAL_EDGEPORT
++#undef CONFIG_USB_SERIAL_EDGEPORT_TI
++#undef CONFIG_USB_SERIAL_KEYSPAN_PDA
++#undef CONFIG_USB_SERIAL_KEYSPAN
++#undef CONFIG_USB_SERIAL_MCT_U232
++#define CONFIG_USB_SERIAL_MCT_U232_MODULE 1
++#undef CONFIG_USB_SERIAL_KLSI
++#undef CONFIG_USB_SERIAL_KOBIL_SCT
++#undef CONFIG_USB_SERIAL_PL2303
++#define CONFIG_USB_SERIAL_PL2303_MODULE 1
++#undef CONFIG_USB_SERIAL_CYBERJACK
++#undef CONFIG_USB_SERIAL_XIRCOM
++#undef CONFIG_USB_SERIAL_OMNINET
++
++/*
++ * USB Miscellaneous drivers
++ */
++#undef CONFIG_USB_RIO500
++#undef CONFIG_USB_AUERSWALD
++#undef CONFIG_USB_TIGL
++#undef CONFIG_USB_BRLVGER
++#undef CONFIG_USB_LCD
++
++/*
++ * Support for USB gadgets
++ */
++#undef CONFIG_USB_GADGET
++
++/*
++ * Bluetooth support
++ */
++#undef CONFIG_BLUEZ
++#define CONFIG_BLUEZ_MODULE 1
++#undef CONFIG_BLUEZ_L2CAP
++#define CONFIG_BLUEZ_L2CAP_MODULE 1
++#undef CONFIG_BLUEZ_SCO
++#define CONFIG_BLUEZ_SCO_MODULE 1
++#undef CONFIG_BLUEZ_RFCOMM
++#define CONFIG_BLUEZ_RFCOMM_MODULE 1
++#define CONFIG_BLUEZ_RFCOMM_TTY 1
++#undef CONFIG_BLUEZ_BNEP
++#define CONFIG_BLUEZ_BNEP_MODULE 1
++#define CONFIG_BLUEZ_BNEP_MC_FILTER 1
++#define CONFIG_BLUEZ_BNEP_PROTO_FILTER 1
++
++/*
++ * Bluetooth device drivers
++ */
++#undef CONFIG_BLUEZ_HCIUSB
++#define CONFIG_BLUEZ_HCIUSB_MODULE 1
++#define CONFIG_BLUEZ_HCIUSB_SCO 1
++#undef CONFIG_BLUEZ_HCIUART
++#define CONFIG_BLUEZ_HCIUART_MODULE 1
++#define CONFIG_BLUEZ_HCIUART_H4 1
++#define CONFIG_BLUEZ_HCIUART_BCSP 1
++#define CONFIG_BLUEZ_HCIUART_BCSP_TXCRC 1
++#undef CONFIG_BLUEZ_HCIBFUSB
++#undef CONFIG_BLUEZ_HCIDTL1
++#undef CONFIG_BLUEZ_HCIBT3C
++#undef CONFIG_BLUEZ_HCIBLUECARD
++#undef CONFIG_BLUEZ_HCIBTUART
++#undef CONFIG_BLUEZ_HCIVHCI
++
++/*
++ * Kernel hacking
++ */
++#define CONFIG_CROSSCOMPILE 1
++#undef CONFIG_RUNTIME_DEBUG
++#undef CONFIG_REMOTE_DEBUG
++#undef CONFIG_GDB_CONSOLE
++#undef CONFIG_DEBUG_INFO
++#define CONFIG_MAGIC_SYSRQ 1
++#undef CONFIG_MIPS_UNCACHED
++#define CONFIG_LOG_BUF_SHIFT (0)
++
++/*
++ * Cryptographic options
++ */
++#define CONFIG_CRYPTO 1
++#define CONFIG_CRYPTO_HMAC 1
++#undef CONFIG_CRYPTO_NULL
++#undef CONFIG_CRYPTO_MD4
++#undef CONFIG_CRYPTO_MD5
++#define CONFIG_CRYPTO_MD5_MODULE 1
++#undef CONFIG_CRYPTO_SHA1
++#define CONFIG_CRYPTO_SHA1_MODULE 1
++#undef CONFIG_CRYPTO_SHA256
++#undef CONFIG_CRYPTO_SHA512
++#undef CONFIG_CRYPTO_WP512
++#undef CONFIG_CRYPTO_DES
++#define CONFIG_CRYPTO_DES_MODULE 1
++#undef CONFIG_CRYPTO_BLOWFISH
++#undef CONFIG_CRYPTO_TWOFISH
++#undef CONFIG_CRYPTO_SERPENT
++#undef CONFIG_CRYPTO_AES
++#define CONFIG_CRYPTO_AES_MODULE 1
++#undef CONFIG_CRYPTO_CAST5
++#undef CONFIG_CRYPTO_CAST6
++#undef CONFIG_CRYPTO_TEA
++#undef CONFIG_CRYPTO_KHAZAD
++#undef CONFIG_CRYPTO_ANUBIS
++#undef CONFIG_CRYPTO_ARC4
++#define CONFIG_CRYPTO_ARC4_MODULE 1
++#undef CONFIG_CRYPTO_DEFLATE
++#define CONFIG_CRYPTO_DEFLATE_MODULE 1
++#undef CONFIG_CRYPTO_MICHAEL_MIC
++#define CONFIG_CRYPTO_MICHAEL_MIC_MODULE 1
++#undef CONFIG_CRYPTO_TEST
++
++/*
++ * Library routines
++ */
++#undef CONFIG_CRC32
++#define CONFIG_ZLIB_INFLATE 1
++#define CONFIG_ZLIB_DEFLATE 1
++#undef CONFIG_FW_LOADER
+diff -Nur linux-2.4.32/include/linux/b1lli.h linux-2.4.32.patched/include/linux/b1lli.h
+--- linux-2.4.32/include/linux/b1lli.h 2001-10-11 18:47:33.000000000 +0200
++++ linux-2.4.32.patched/include/linux/b1lli.h 2006-03-13 18:55:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* $Id: b1lli.h,v 1.8.8.3 2001/09/23 22:25:05 kai Exp $
++/* $Id$
+ *
+ * ISDN lowlevel-module for AVM B1-card.
+ *
+diff -Nur linux-2.4.32/include/linux/b1pcmcia.h linux-2.4.32.patched/include/linux/b1pcmcia.h
+--- linux-2.4.32/include/linux/b1pcmcia.h 2001-10-11 18:47:33.000000000 +0200
++++ linux-2.4.32.patched/include/linux/b1pcmcia.h 2006-03-13 18:55:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* $Id: b1pcmcia.h,v 1.1.8.2 2001/09/23 22:25:05 kai Exp $
++/* $Id$
+ *
+ * Exported functions of module b1pcmcia to be called by
+ * avm_cs card services module.
+diff -Nur linux-2.4.32/include/linux/byteorder/swab.h linux-2.4.32.patched/include/linux/byteorder/swab.h
+--- linux-2.4.32/include/linux/byteorder/swab.h 2002-11-29 00:53:15.000000000 +0100
++++ linux-2.4.32.patched/include/linux/byteorder/swab.h 2006-03-13 18:55:55.000000000 +0100
+@@ -15,6 +15,8 @@
+ *
+ */
+
++#include <linux/compiler.h>
++
+ /* casts are necessary for constants, because we never know how for sure
+ * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way.
+ */
+@@ -156,7 +158,7 @@
+ #endif /* OPTIMIZE */
+
+
+-static __inline__ __const__ __u16 __fswab16(__u16 x)
++static __inline__ __attribute_const__ __u16 __fswab16(__u16 x)
+ {
+ return __arch__swab16(x);
+ }
+@@ -169,7 +171,7 @@
+ __arch__swab16s(addr);
+ }
+
+-static __inline__ __const__ __u32 __fswab24(__u32 x)
++static __inline__ __attribute_const__ __u32 __fswab24(__u32 x)
+ {
+ return __arch__swab24(x);
+ }
+@@ -182,7 +184,7 @@
+ __arch__swab24s(addr);
+ }
+
+-static __inline__ __const__ __u32 __fswab32(__u32 x)
++static __inline__ __attribute_const__ __u32 __fswab32(__u32 x)
+ {
+ return __arch__swab32(x);
+ }
+@@ -196,7 +198,7 @@
+ }
+
+ #ifdef __BYTEORDER_HAS_U64__
+-static __inline__ __const__ __u64 __fswab64(__u64 x)
++static __inline__ __attribute_const__ __u64 __fswab64(__u64 x)
+ {
+ # ifdef __SWAB_64_THRU_32__
+ __u32 h = x >> 32;
+diff -Nur linux-2.4.32/include/linux/capi.h linux-2.4.32.patched/include/linux/capi.h
+--- linux-2.4.32/include/linux/capi.h 2002-02-25 20:38:13.000000000 +0100
++++ linux-2.4.32.patched/include/linux/capi.h 2006-03-13 18:55:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* $Id: capi.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
++/* $Id$
+ *
+ * CAPI 2.0 Interface for Linux
+ *
+diff -Nur linux-2.4.32/include/linux/compiler.h linux-2.4.32.patched/include/linux/compiler.h
+--- linux-2.4.32/include/linux/compiler.h 2004-11-17 12:54:22.000000000 +0100
++++ linux-2.4.32.patched/include/linux/compiler.h 2006-03-13 18:55:55.000000000 +0100
+@@ -27,6 +27,12 @@
+ #define __attribute_used__ /* not implemented */
+ #endif /* __GNUC__ */
+
++#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
++#define __attribute_const__ __attribute__((__const__))
++#else
++#define __attribute_const__ /* unimplemented */
++#endif
++
+ #if __GNUC__ == 3
+ #if __GNUC_MINOR__ >= 1
+ # define inline __inline__ __attribute__((always_inline))
+diff -Nur linux-2.4.32/include/linux/concap.h linux-2.4.32.patched/include/linux/concap.h
+--- linux-2.4.32/include/linux/concap.h 2001-09-30 21:26:42.000000000 +0200
++++ linux-2.4.32.patched/include/linux/concap.h 2006-03-13 18:55:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* $Id: concap.h,v 1.2.8.1 2001/09/23 22:25:05 kai Exp $
++/* $Id: concap.h,v 1.3 2001/09/24 13:23:13 kai Exp $
+ *
+ * Copyright 1997 by Henner Eisen <eis@baty.hanse.de>
+ *
+@@ -11,6 +11,7 @@
+ #ifdef __KERNEL__
+ #include <linux/skbuff.h>
+ #include <linux/netdevice.h>
++#include <linux/isdn_compat.h>
+
+ /* Stuff to support encapsulation protocols genericly. The encapsulation
+ protocol is processed at the uppermost layer of the network interface.
+diff -Nur linux-2.4.32/include/linux/fsfilter.h linux-2.4.32.patched/include/linux/fsfilter.h
+--- linux-2.4.32/include/linux/fsfilter.h 2004-11-17 12:54:22.000000000 +0100
++++ linux-2.4.32.patched/include/linux/fsfilter.h 2006-03-13 18:55:55.000000000 +0100
+@@ -70,7 +70,6 @@
+ #define FILTER_FS_XFS 3
+ #define FILTER_FS_OBDFS 4
+ #define FILTER_FS_TMPFS 5
+-extern struct filter_fs filter_oppar[FILTER_FS_TYPES];
+
+ struct filter_fs *filter_get_filter_fs(const char *cache_type);
+ void filter_setup_journal_ops(struct filter_fs *ops, char *cache_type);
+diff -Nur linux-2.4.32/include/linux/fs.h linux-2.4.32.patched/include/linux/fs.h
+--- linux-2.4.32/include/linux/fs.h 2005-04-04 03:42:20.000000000 +0200
++++ linux-2.4.32.patched/include/linux/fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -324,6 +324,7 @@
+ #include <linux/usbdev_fs_i.h>
+ #include <linux/jffs2_fs_i.h>
+ #include <linux/cramfs_fs_sb.h>
++#include <linux/squashfs_fs_i.h>
+
+ /*
+ * Attribute flags. These should be or-ed together to figure out what
+@@ -519,6 +520,7 @@
+ struct socket socket_i;
+ struct usbdev_inode_info usbdev_i;
+ struct jffs2_inode_info jffs2_i;
++ struct squashfs_inode_info squashfs_i;
+ void *generic_ip;
+ } u;
+ };
+@@ -734,6 +736,7 @@
+ #include <linux/usbdev_fs_sb.h>
+ #include <linux/cramfs_fs_sb.h>
+ #include <linux/jffs2_fs_sb.h>
++#include <linux/squashfs_fs_sb.h>
+
+ extern struct list_head super_blocks;
+ extern spinlock_t sb_lock;
+@@ -793,6 +796,7 @@
+ struct usbdev_sb_info usbdevfs_sb;
+ struct jffs2_sb_info jffs2_sb;
+ struct cramfs_sb_info cramfs_sb;
++ struct squashfs_sb_info squashfs_sb;
+ void *generic_sbp;
+ } u;
+ /*
+@@ -1559,7 +1563,6 @@
+ unsigned long generate_cluster(kdev_t, int b[], int);
+ unsigned long generate_cluster_swab32(kdev_t, int b[], int);
+ extern kdev_t ROOT_DEV;
+-extern char root_device_name[];
+
+
+ extern void show_buffers(void);
+diff -Nur linux-2.4.32/include/linux/generic_serial.h linux-2.4.32.patched/include/linux/generic_serial.h
+--- linux-2.4.32/include/linux/generic_serial.h 2002-02-25 20:38:13.000000000 +0100
++++ linux-2.4.32.patched/include/linux/generic_serial.h 2006-03-13 18:55:55.000000000 +0100
+@@ -98,6 +98,4 @@
+ int gs_getserial(struct gs_port *port, struct serial_struct *sp);
+ void gs_got_break(struct gs_port *port);
+
+-extern int gs_debug;
+-
+ #endif
+diff -Nur linux-2.4.32/include/linux/hysdn_if.h linux-2.4.32.patched/include/linux/hysdn_if.h
+--- linux-2.4.32/include/linux/hysdn_if.h 2001-09-30 21:26:42.000000000 +0200
++++ linux-2.4.32.patched/include/linux/hysdn_if.h 2006-03-13 18:55:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* $Id: hysdn_if.h,v 1.1.8.3 2001/09/23 22:25:05 kai Exp $
++/* $Id$
+ *
+ * Linux driver for HYSDN cards
+ * ioctl definitions shared by hynetmgr and driver.
+diff -Nur linux-2.4.32/include/linux/i2c-algo-au1550.h linux-2.4.32.patched/include/linux/i2c-algo-au1550.h
+--- linux-2.4.32/include/linux/i2c-algo-au1550.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/i2c-algo-au1550.h 2006-03-13 18:55:54.000000000 +0100
+@@ -0,0 +1,31 @@
++/*
++ * Copyright (C) 2004 Embedded Edge, LLC <dan@embeddededge.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#ifndef I2C_ALGO_AU1550_H
++#define I2C_ALGO_AU1550_H 1
++
++struct i2c_algo_au1550_data {
++ u32 psc_base;
++ int xfer_timeout;
++ int ack_timeout;
++};
++
++int i2c_au1550_add_bus(struct i2c_adapter *);
++int i2c_au1550_del_bus(struct i2c_adapter *);
++
++#endif /* I2C_ALGO_AU1550_H */
+diff -Nur linux-2.4.32/include/linux/i2c.h linux-2.4.32.patched/include/linux/i2c.h
+--- linux-2.4.32/include/linux/i2c.h 2005-06-01 02:56:56.000000000 +0200
++++ linux-2.4.32.patched/include/linux/i2c.h 2006-03-13 18:55:55.000000000 +0100
+@@ -70,7 +70,7 @@
+
+ /* Transfer num messages.
+ */
+-extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],int num);
++extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msg,int num);
+
+ /*
+ * Some adapter types (i.e. PCF 8584 based ones) may support slave behaviuor.
+@@ -197,7 +197,7 @@
+ to NULL. If an adapter algorithm can do SMBus access, set
+ smbus_xfer. If set to NULL, the SMBus protocol is simulated
+ using common I2C messages */
+- int (*master_xfer)(struct i2c_adapter *adap,struct i2c_msg msgs[],
++ int (*master_xfer)(struct i2c_adapter *adap,struct i2c_msg *msgs,
+ int num);
+ int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,
+ unsigned short flags, char read_write,
+diff -Nur linux-2.4.32/include/linux/i2c-id.h linux-2.4.32.patched/include/linux/i2c-id.h
+--- linux-2.4.32/include/linux/i2c-id.h 2004-02-18 14:36:32.000000000 +0100
++++ linux-2.4.32.patched/include/linux/i2c-id.h 2006-03-13 18:55:54.000000000 +0100
+@@ -156,6 +156,8 @@
+
+ #define I2C_ALGO_SGI 0x130000 /* SGI algorithm */
+
++#define I2C_ALGO_AU1550 0x140000 /* Alchemy Au1550 PSC */
++
+ #define I2C_ALGO_EXP 0x800000 /* experimental */
+
+ #define I2C_ALGO_MASK 0xff0000 /* Mask for algorithms */
+@@ -204,6 +206,9 @@
+ #define I2C_HW_SGI_VINO 0x00
+ #define I2C_HW_SGI_MACE 0x01
+
++/* --- Au1550 PSC adapters */
++#define I2C_HW_AU1550_PSC 0x00
++
+ /* --- SMBus only adapters */
+ #define I2C_HW_SMBUS_PIIX4 0x00
+ #define I2C_HW_SMBUS_ALI15X3 0x01
+diff -Nur linux-2.4.32/include/linux/imq.h linux-2.4.32.patched/include/linux/imq.h
+--- linux-2.4.32/include/linux/imq.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/imq.h 2006-03-13 18:55:58.000000000 +0100
+@@ -0,0 +1,9 @@
++#ifndef _IMQ_H
++#define _IMQ_H
++
++#define IMQ_MAX_DEVS 16
++
++#define IMQ_F_IFMASK 0x7f
++#define IMQ_F_ENQUEUE 0x80
++
++#endif /* _IMQ_H */
+diff -Nur linux-2.4.32/include/linux/intermezzo_fs.h linux-2.4.32.patched/include/linux/intermezzo_fs.h
+--- linux-2.4.32/include/linux/intermezzo_fs.h 2005-01-19 15:10:12.000000000 +0100
++++ linux-2.4.32.patched/include/linux/intermezzo_fs.h 2006-03-13 18:55:55.000000000 +0100
+@@ -321,7 +321,6 @@
+ int presto_ispresto(struct inode *);
+
+ /* super.c */
+-extern struct file_system_type presto_fs_type;
+ extern int init_intermezzo_fs(void);
+
+ /* fileset.c */
+diff -Nur linux-2.4.32/include/linux/isdn/tpam.h linux-2.4.32.patched/include/linux/isdn/tpam.h
+--- linux-2.4.32/include/linux/isdn/tpam.h 2001-12-21 18:42:03.000000000 +0100
++++ linux-2.4.32.patched/include/linux/isdn/tpam.h 2006-03-13 18:55:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* $Id: tpam.h,v 1.1.2.1 2001/11/20 14:19:38 kai Exp $
++/* $Id$
+ *
+ * Turbo PAM ISDN driver for Linux. (Kernel Driver)
+ *
+diff -Nur linux-2.4.32/include/linux/isdn_compat.h linux-2.4.32.patched/include/linux/isdn_compat.h
+--- linux-2.4.32/include/linux/isdn_compat.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/isdn_compat.h 2006-03-13 18:55:56.000000000 +0100
+@@ -0,0 +1,261 @@
++/* $Id: isdn_compat.h,v 1.53 2001/09/24 13:23:13 kai Exp $
++ *
++ * Linux ISDN subsystem
++ * Compatibility for various Linux kernel versions
++ *
++ * This software may be used and distributed according to the terms
++ * of the GNU General Public License, incorporated herein by reference.
++ *
++ */
++
++#ifndef _LINUX_ISDN_COMPAT_H
++#define _LINUX_ISDN_COMPAT_H
++
++#ifdef __KERNEL__
++
++#ifndef ISDN_COMPAT_NOT_GENERIC
++/* when using std2kern -u, this part is left out and instead provided
++ by the .ctrl files */
++
++#include <linux/version.h>
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,2,18)
++
++#define set_current_state(sta) (current->state = sta)
++#define module_init(x) int init_module(void) { return x(); }
++#define module_exit(x) void cleanup_module(void) { x(); }
++#define BUG() do { printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); *(int *)0 = 0; } while (0)
++#define init_MUTEX(x) *(x)=MUTEX
++#define init_MUTEX_LOCKED(x) *(x)=MUTEX_LOCKED
++#define __devinit
++#define __devinitdata
++
++#else /* 2.2.18 and later */
++
++#define COMPAT_HAS_NEW_SETUP
++#define COMPAT_HAS_NEW_WAITQ
++
++#endif
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
++
++#define dev_kfree_skb_irq(a) dev_kfree_skb(a)
++#define dev_kfree_skb_any(a) dev_kfree_skb(a)
++#define COMPAT_HAS_2_2_PCI
++#define get_pcibase(ps, nr) ps->base_address[nr]
++#define pci_resource_start_io(pdev, nr) ((pdev)->base_address[nr] & PCI_BASE_ADDRESS_IO_MASK)
++#define pci_resource_start_mem(pdev, nr) ((pdev)->base_address[nr] & PCI_BASE_ADDRESS_MEM_MASK)
++#define pci_get_sub_vendor(pdev, id) pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, &id)
++#define pci_get_sub_system(pdev, id) pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &id)
++
++#define __exit
++#define __devinit
++#define __devinitdata
++
++#define net_device device
++#define COMPAT_NO_SOFTNET
++#define netif_running(d) test_bit(LINK_STATE_START, &d->state)
++#define COMPAT_NEED_MPPP_DEFS
++#define spin_lock_bh(lock)
++#define spin_unlock_bh(lock)
++#define COMPAT_NEED_SPIN_LOCK_BH
++#define i_count_read(ic) ic
++#define i_count_inc(ic) ic++
++#define COMPAT_USE_MODCOUNT_LOCK
++#define devfs_register_chrdev(m,n,f) register_chrdev(m,n,f)
++#define devfs_unregister_chrdev(m,n) unregister_chrdev(m,n)
++#define COMPAT_NEED_PCI_IDS
++#define in_irq() (local_irq_count[smp_processor_id()] != 0)
++
++#else /* 2.4.0 and later */
++
++#define pci_resource_start_io(pdev, nr) pci_resource_start(pdev, nr)
++#define pci_resource_start_mem(pdev, nr) pci_resource_start(pdev, nr)
++#define get_pcibase(ps, nr) ps->resource[nr].start
++#define pci_get_sub_system(pdev, id) id = pdev->subsystem_device
++#define pci_get_sub_vendor(pdev, id) id = pdev->subsystem_vendor
++
++#define BIG_PHONE_NUMBERS
++#define COMPAT_HAS_ISA_IOREMAP
++#define i_count_read(ic) atomic_read(&ic)
++#define i_count_inc(ic) atomic_inc(&ic)
++#define COMPAT_HAS_FILEOP_OWNER
++#define COMPAT_HAVE_NEW_FILLDIR
++#define COMPAT_has_fileops_in_inode
++#define COMPAT_HAS_init_special_inode
++#define COMPAT_d_alloc_root_one_parameter
++#define HAVE_DEVFS_FS
++#define COMPAT_HAS_SCHEDULE_TASK
++#define COMPAT_HAS_USB_IDTAB
++
++#endif
++
++#endif /* ISDN_COMPAT_GENERIC */
++
++#ifdef COMPAT_HAS_2_2_PCI
++#include <linux/pci.h>
++#ifdef __powerpc__
++static inline int pci_enable_device(struct pci_dev *dev)
++{
++ u16 cmd;
++ pci_read_config_word(dev, PCI_COMMAND, &cmd);
++ cmd |= PCI_COMMAND_MEMORY | PCI_COMMAND_IO | PCI_COMMAND_SERR;
++ cmd &= ~PCI_COMMAND_FAST_BACK;
++ pci_write_config_word(dev, PCI_COMMAND, cmd);
++ return(0);
++}
++#else
++static inline int pci_enable_device(struct pci_dev *dev)
++{
++ return 0;
++}
++#endif /* __powerpc__ */
++
++#define PCI_ANY_ID (~0)
++
++/* as this is included multiple times, we make it inline */
++
++static inline struct pci_dev * pci_find_subsys(unsigned int vendor, unsigned int device,
++ unsigned int ss_vendor, unsigned int ss_device,
++ struct pci_dev *from)
++{
++ unsigned short subsystem_vendor, subsystem_device;
++
++ while ((from = pci_find_device(vendor, device, from))) {
++ pci_read_config_word(from, PCI_SUBSYSTEM_VENDOR_ID, &subsystem_vendor);
++ pci_read_config_word(from, PCI_SUBSYSTEM_ID, &subsystem_device);
++ if ((ss_vendor == PCI_ANY_ID || subsystem_vendor == ss_vendor) &&
++ (ss_device == PCI_ANY_ID || subsystem_device == ss_device))
++ return from;
++ }
++ return NULL;
++}
++#endif
++
++#ifdef COMPAT_NO_SOFTNET
++#include <linux/netdevice.h>
++
++/*
++ * Tell upper layers that the network device is ready to xmit more frames.
++ */
++static void __inline__ netif_wake_queue(struct net_device * dev)
++{
++ dev->tbusy = 0;
++ mark_bh(NET_BH);
++}
++
++/*
++ * called during net_device open()
++ */
++static void __inline__ netif_start_queue(struct net_device * dev)
++{
++ dev->tbusy = 0;
++ /* actually, we never use the interrupt flag at all */
++ dev->interrupt = 0;
++ dev->start = 1;
++}
++
++/*
++ * Ask upper layers to temporarily cease passing us more xmit frames.
++ */
++static void __inline__ netif_stop_queue(struct net_device * dev)
++{
++ dev->tbusy = 1;
++}
++
++#endif /* COMPAT_NO_SOFTNET */
++
++#ifndef COMPAT_HAS_NEW_WAITQ
++typedef struct wait_queue wait_queue_t;
++typedef struct wait_queue *wait_queue_head_t;
++
++#define DECLARE_WAITQUEUE(wait, current) struct wait_queue wait = { current, NULL }
++#define DECLARE_WAIT_QUEUE_HEAD(wait) wait_queue_head_t wait
++#define init_waitqueue_head(x) *(x)=NULL
++#define init_waitqueue_entry(q,p) ((q)->task)=(p)
++#endif /* COMPAT_HAS_NEW_WAITQ */
++
++#ifdef COMPAT_NEED_PCI_IDS
++
++#define PCI_ANY_ID (~0)
++
++#define PCI_VENDOR_ID_DYNALINK 0x0675
++#define PCI_DEVICE_ID_DYNALINK_IS64PH 0x1702
++
++#define PCI_DEVICE_ID_WINBOND2_6692 0x6692
++
++#define PCI_DEVICE_ID_PLX_R685 0x1030
++#define PCI_DEVICE_ID_PLX_DJINN_ITOO 0x1151
++#define PCI_DEVICE_ID_PLX_R753 0x1152
++
++#define PCI_VENDOR_ID_ELSA 0x1048
++#define PCI_DEVICE_ID_ELSA_MICROLINK 0x1000
++#define PCI_DEVICE_ID_ELSA_QS3000 0x3000
++
++#define PCI_VENDOR_ID_EICON 0x1133
++#define PCI_DEVICE_ID_EICON_DIVA20PRO 0xe001
++#define PCI_DEVICE_ID_EICON_DIVA20 0xe002
++#define PCI_DEVICE_ID_EICON_DIVA20PRO_U 0xe003
++#define PCI_DEVICE_ID_EICON_DIVA20_U 0xe004
++#define PCI_DEVICE_ID_EICON_DIVA201 0xe005
++#define PCI_DEVICE_ID_EICON_MAESTRA 0xe010
++#define PCI_DEVICE_ID_EICON_MAESTRAQ 0xe012
++#define PCI_DEVICE_ID_EICON_MAESTRAQ_U 0xe013
++#define PCI_DEVICE_ID_EICON_MAESTRAP 0xe014
++
++#define PCI_VENDOR_ID_CCD 0x1397
++#define PCI_DEVICE_ID_CCD_2BD0 0x2BD0
++#define PCI_DEVICE_ID_CCD_B000 0xB000
++#define PCI_DEVICE_ID_CCD_B006 0xB006
++#define PCI_DEVICE_ID_CCD_B007 0xB007
++#define PCI_DEVICE_ID_CCD_B008 0xB008
++#define PCI_DEVICE_ID_CCD_B009 0xB009
++#define PCI_DEVICE_ID_CCD_B00A 0xB00A
++#define PCI_DEVICE_ID_CCD_B00B 0xB00B
++#define PCI_DEVICE_ID_CCD_B00C 0xB00C
++#define PCI_DEVICE_ID_CCD_B100 0xB100
++
++#define PCI_VENDOR_ID_ASUSTEK 0x1043
++#define PCI_DEVICE_ID_ASUSTEK_0675 0x0675
++
++#define PCI_VENDOR_ID_BERKOM 0x0871
++#define PCI_DEVICE_ID_BERKOM_A1T 0xFFA1
++#define PCI_DEVICE_ID_BERKOM_T_CONCEPT 0xFFA2
++#define PCI_DEVICE_ID_BERKOM_A4T 0xFFA4
++#define PCI_DEVICE_ID_BERKOM_SCITEL_QUADRO 0xFFA8
++
++#define PCI_DEVICE_ID_SATSAGEM_NICCY 0x1016
++
++#define PCI_DEVICE_ID_TIGERJET_100 0x0002
++
++#define PCI_VENDOR_ID_ANIGMA 0x1051
++#define PCI_DEVICE_ID_ANIGMA_MC145575 0x0100
++
++#define PCI_VENDOR_ID_ZOLTRIX 0x15b0
++#define PCI_DEVICE_ID_ZOLTRIX_2BD0 0x2BD0
++
++#define PCI_DEVICE_ID_DIGI_DF_M_IOM2_E 0x0070
++#define PCI_DEVICE_ID_DIGI_DF_M_E 0x0071
++#define PCI_DEVICE_ID_DIGI_DF_M_IOM2_A 0x0072
++#define PCI_DEVICE_ID_DIGI_DF_M_A 0x0073
++
++#define PCI_DEVICE_ID_AVM_B1 0x0700
++#define PCI_DEVICE_ID_AVM_C4 0x0800
++#define PCI_DEVICE_ID_AVM_C2 0x1100
++#define PCI_DEVICE_ID_AVM_T1 0x1200
++
++#define PCI_VENDOR_ID_HYPERCOPE 0x1365
++#define PCI_DEVICE_ID_HYPERCOPE_PLX 0x9050
++#define PCI_SUBDEVICE_ID_HYPERCOPE_OLD_ERGO 0x0104
++#define PCI_SUBDEVICE_ID_HYPERCOPE_ERGO 0x0106
++#define PCI_SUBDEVICE_ID_HYPERCOPE_METRO 0x0107
++#define PCI_SUBDEVICE_ID_HYPERCOPE_CHAMP2 0x0108
++#define PCI_SUBDEVICE_ID_HYPERCOPE_PLEXUS 0x0109
++
++#define PCI_VENDOR_ID_ABOCOM 0x13D1
++#define PCI_DEVICE_ID_ABOCOM_2BD1 0x2BD1
++
++#endif /* COMPAT_NEED_PCI_IDS */
++
++#endif /* __KERNEL__ */
++#endif /* _LINUX_ISDN_COMPAT_H */
+diff -Nur linux-2.4.32/include/linux/isdn_divertif.h linux-2.4.32.patched/include/linux/isdn_divertif.h
+--- linux-2.4.32/include/linux/isdn_divertif.h 2001-12-21 18:42:03.000000000 +0100
++++ linux-2.4.32.patched/include/linux/isdn_divertif.h 2006-03-13 18:55:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* $Id: isdn_divertif.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
++/* $Id$
+ *
+ * Header for the diversion supplementary interface for i4l.
+ *
+@@ -14,7 +14,7 @@
+ /***********************************************************/
+ /* magic value is also used to control version information */
+ /***********************************************************/
+-#define DIVERT_IF_MAGIC 0x25873401
++#define DIVERT_IF_MAGIC 0x25873402
+ #define DIVERT_CMD_REG 0x00 /* register command */
+ #define DIVERT_CMD_REL 0x01 /* release command */
+ #define DIVERT_NO_ERR 0x00 /* return value no error */
+@@ -34,6 +34,7 @@
+ int (*ll_cmd)(isdn_ctrl *); /* supplied by hl on return */
+ char * (*drv_to_name)(int); /* map a driver id to name, supplied by hl */
+ int (*name_to_drv)(char *); /* map a driver id to name, supplied by hl */
++ int (*dial_net_name)(char *); /* force dial of a ll net interface */
+ } isdn_divert_if;
+
+ /*********************/
+diff -Nur linux-2.4.32/include/linux/isdn_dwabc.h linux-2.4.32.patched/include/linux/isdn_dwabc.h
+--- linux-2.4.32/include/linux/isdn_dwabc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/isdn_dwabc.h 2006-03-13 18:55:56.000000000 +0100
+@@ -0,0 +1,84 @@
++/* $Id: isdn_dwabc.h,v 1.9 2001/09/26 20:32:08 detabc Exp $
++ *
++ * Header for the Linux ISDN abc-extension.
++ *
++ * Copyright by abc GmbH
++ * written by Detlef Wengorz <detlefw@isdn4linux.de>
++ *
++ * This software may be used and distributed according to the terms
++ * of the GNU General Public License, incorporated herein by reference.
++ *
++ */
++
++#ifndef ISDN_DWABC_H
++#define ISDN_DWABC_H
++
++#ifdef __KERNEL__
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/smp.h>
++#include <linux/spinlock.h>
++#include <linux/errno.h>
++
++
++typedef struct ISDN_DWSPINLOCK {
++
++ spinlock_t spin;
++ short owner;
++ short my_flags;
++ ulong irq_flags;
++
++} ISDN_DWSPINLOCK;
++
++#define ISDN_DWSPIN_UNLOCKED \
++ (ISDN_DWSPINLOCK) { \
++ spin: SPIN_LOCK_UNLOCKED, \
++ owner: -1, \
++ my_flags: 0, \
++ irq_flags: 0, \
++ }
++
++#define ISDN_DWSPIN_INIT(x) \
++ do { *(x) = ISDN_DWSPIN_UNLOCKED; } while(0);
++
++static __inline__ int isdn_dwspin_trylock(ISDN_DWSPINLOCK *spin)
++{
++ if(!spin_trylock(&spin->spin)) {
++
++ if(spin->owner == smp_processor_id())
++ return(-EAGAIN);
++
++ spin_lock(&spin->spin);
++ }
++
++ spin->owner = smp_processor_id();
++ return(0);
++}
++
++static __inline__ void isdn_dwspin_unlock(ISDN_DWSPINLOCK *spin)
++{
++ spin->owner = -1;
++ spin_unlock(&spin->spin);
++}
++
++
++#else
++#include <sys/types.h>
++#endif
++
++#define DWABC_LCR_FLG_NEWNUMBER 0x00000001L
++#define DWABC_LCR_FLG_DISABLE 0x00000002L
++#define DWABC_LCR_FLG_NEWHUPTIME 0x00000004L
++
++
++struct ISDN_DWABC_LCR_IOCTL {
++
++ int lcr_ioctl_sizeof; /* mustbe sizeof(ISDN_DWABC_LCR_IOCTL) */
++ u_short lcr_ioctl_onhtime; /* new hanguptime */
++ u_long lcr_ioctl_callid; /* callid from lcr-subsystem */
++ u_long lcr_ioctl_flags; /* see above */
++ char lcr_ioctl_nr[32]; /* new destination phonenumber */
++};
++
++#endif
+diff -Nur linux-2.4.32/include/linux/isdn.h linux-2.4.32.patched/include/linux/isdn.h
+--- linux-2.4.32/include/linux/isdn.h 2001-12-21 18:42:03.000000000 +0100
++++ linux-2.4.32.patched/include/linux/isdn.h 2006-03-13 18:55:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* $Id: isdn.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
++/* $Id: isdn.h,v 1.125 2001/12/01 23:18:21 detabc Exp $
+ *
+ * Main header for the Linux ISDN subsystem (linklevel).
+ *
+@@ -14,6 +14,7 @@
+ #ifndef __ISDN_H__
+ #define __ISDN_H__
+
++#include <linux/isdn_compat.h>
+ #include <linux/ioctl.h>
+
+ #ifdef CONFIG_COBALT_MICRO_SERVER
+@@ -93,9 +94,15 @@
+ #define ISDN_LMSNLEN 255 /* Length of tty's Listen-MSN string */
+ #define ISDN_CMSGLEN 50 /* Length of CONNECT-Message to add for Modem */
+
++#ifdef BIG_PHONE_NUMBERS
+ #define ISDN_MSNLEN 32
+ #define NET_DV 0x06 /* Data version for isdn_net_ioctl_cfg */
+ #define TTY_DV 0x06 /* Data version for iprofd etc. */
++#else
++#define ISDN_MSNLEN 20
++#define NET_DV 0x05 /* Data version for isdn_net_ioctl_cfg */
++#define TTY_DV 0x05 /* Data version for iprofd etc. */
++#endif
+
+ #define INF_DV 0x01 /* Data version for /dev/isdninfo */
+
+@@ -187,6 +194,61 @@
+ #define ISDN_MINOR_PPPMAX (128 + (ISDN_MAX_CHANNELS-1))
+ #define ISDN_MINOR_STATUS 255
+
++#ifndef CONFIG_ISDN_WITH_ABC
++#undef CONFIG_ISDN_WITH_ABC_CALLB
++#undef CONFIG_ISDN_WITH_ABC_UDP_CHECK
++#undef CONFIG_ISDN_WITH_ABC_UDP_CHECK_HANGUP
++#undef CONFIG_ISDN_WITH_ABC_UDP_CHECK_DIAL
++#undef CONFIG_ISDN_WITH_ABC_OUTGOING_EAZ
++#undef CONFIG_ISDN_WITH_ABC_LCR_SUPPORT
++#undef CONFIG_ISDN_WITH_ABC_RCV_NO_HUPTIMER
++#undef CONFIG_ISDN_WITH_ABC_CH_EXTINUSE
++#undef CONFIG_ISDN_WITH_ABC_CONN_ERROR
++#undef CONFIG_ISDN_WITH_ABC_RAWIPCOMPRESS
++#else /* CONFIG_ISDN_WITH_ABC */
++#include <linux/isdn_dwabc.h>
++
++
++typedef struct DWABCJIFFIES {
++
++ u_long msec_1000;
++ u_long msec_500;
++ u_long msec_400;
++ u_long msec_200;
++ u_long msec_100;
++
++} DWABCJIFFIES;
++
++
++#ifdef CONFIG_ISDN_WITH_ABC_NEED_DWSJIFFIES
++DWABCJIFFIES isdn_dwabc_jiffies;
++#else
++extern DWABCJIFFIES isdn_dwabc_jiffies;
++#endif
++#define dwsjiffies (isdn_dwabc_jiffies.msec_1000)
++
++#define ISDN_DW_ABC_FLAG_UNUSED00001 0x00000001L
++#define ISDN_DW_ABC_FLAG_NO_UDP_CHECK 0x00000002L
++#define ISDN_DW_ABC_FLAG_NO_UDP_HANGUP 0x00000004L
++#define ISDN_DW_ABC_FLAG_NO_UDP_DIAL 0x00000008L
++#define ISDN_DW_ABC_FLAG_UNUSED00010 0x00000010L
++#define ISDN_DW_ABC_FLAG_RCV_NO_HUPTIMER 0x00000020L
++#define ISDN_DW_ABC_FLAG_NO_CH_EXTINUSE 0x00000040L
++#define ISDN_DW_ABC_FLAG_NO_CONN_ERROR 0x00000080L
++#define ISDN_DW_ABC_FLAG_BSD_COMPRESS 0x00000100L
++#define ISDN_DW_ABC_FLAG_NO_LCR 0x00000200L
++#define ISDN_DW_ABC_FLAG_LEASED_LINE 0x00001000L
++
++#define ISDN_DW_ABC_IFFLAG_NODCHAN 0x00000001L
++#define ISDN_DW_ABC_IFFLAG_BSDAKTIV 0x00000002L
++
++#define ISDN_DW_ABC_BITLOCK_SEND 0
++#define ISDN_DW_ABC_BITLOCK_RECEIVE 1
++
++#endif /* CONFIG_ISDN_WITH_ABC */
++
++
++
+ #ifdef CONFIG_ISDN_PPP
+
+ #ifdef CONFIG_ISDN_PPP_VJ
+@@ -204,9 +266,11 @@
+ # include <linux/concap.h>
+ #endif
+
++#ifdef HAVE_DEVFS_FS
+ #ifdef CONFIG_DEVFS_FS
+ # include <linux/devfs_fs_kernel.h>
+ #endif
++#endif /* HAVE_DEVFS_FS */
+
+ #include <linux/isdnif.h>
+
+@@ -272,6 +336,12 @@
+ #define ISDN_NET_CALLBACK 0x04 /* activate callback */
+ #define ISDN_NET_CBHUP 0x08 /* hangup before callback */
+ #define ISDN_NET_CBOUT 0x10 /* remote machine does callback */
++#if 0
++/* Unused??? */
++#define ISDN_NET_CLONE 0x08 /* clone a tmp interface when called */
++#define ISDN_NET_TMP 0x10 /* tmp interface until getting an IP */
++#define ISDN_NET_DYNAMIC 0x20 /* this link is dynamically allocated */
++#endif
+
+ #define ISDN_NET_MAGIC 0x49344C02 /* for paranoia-checking */
+
+@@ -386,6 +456,38 @@
+ char cisco_debserint; /* debugging flag of cisco hdlc with slarp */
+ struct timer_list cisco_timer;
+ struct tq_struct tqueue;
++#ifdef CONFIG_ISDN_WITH_ABC
++ ulong dw_abc_flags;
++ ulong dw_abc_if_flags;
++ int dw_abc_inuse_secure;
++ ulong dw_abc_dialstart;
++ int dw_abc_old_onhtime;
++ int dw_abc_remote_version;
++ int dw_abc_bitlocks;
++#ifdef CONFIG_ISDN_WITH_ABC_OUTGOING_EAZ
++ char dw_out_msn[ISDN_MSNLEN]; /* eaz for outgoing call if *out_msn != 0 */
++#endif
++#ifdef CONFIG_ISDN_WITH_ABC_LCR_SUPPORT
++ ulong dw_abc_lcr_callid;
++ ulong dw_abc_lcr_start_request;
++ ulong dw_abc_lcr_end_request;
++ isdn_ctrl *dw_abc_lcr_cmd;
++ struct ISDN_DWABC_LCR_IOCTL *dw_abc_lcr_io;
++#endif
++ ulong dw_abc_bchan_last_connect;
++#ifdef CONFIG_ISDN_WITH_ABC_CONN_ERROR
++ short dw_abc_bchan_errcnt;
++#endif
++#ifdef CONFIG_ISDN_WITH_ABC_RAWIPCOMPRESS
++ void *dw_abc_bsd_compressor;
++ void *dw_abc_bsd_stat_rx;
++ void *dw_abc_bsd_stat_tx;
++#endif
++ ulong dw_abc_bsd_snd;
++ ulong dw_abc_bsd_bsd_snd;
++ ulong dw_abc_bsd_rcv;
++ ulong dw_abc_bsd_bsd_rcv;
++#endif
+ } isdn_net_local;
+
+ /* the interface itself */
+@@ -608,12 +710,13 @@
+ int tflags; /* Timer-Flags: */
+ /* see ISDN_TIMER_..defines */
+ int global_flags;
+- infostruct *infochain; /* List of open info-devs. */
+- wait_queue_head_t info_waitq; /* Wait-Queue for isdninfo */
+ struct timer_list timer; /* Misc.-function Timer */
+ int chanmap[ISDN_MAX_CHANNELS];/* Map minor->device-channel */
+ int drvmap[ISDN_MAX_CHANNELS]; /* Map minor->driver-index */
+ int usage[ISDN_MAX_CHANNELS]; /* Used by tty/ip/voice */
++#ifdef CONFIG_ISDN_WITH_ABC_CH_EXTINUSE
++ ulong dwabc_chan_external_inuse[ISDN_MAX_CHANNELS];
++#endif
+ char num[ISDN_MAX_CHANNELS][ISDN_MSNLEN];
+ /* Remote number of active ch.*/
+ int m_idx[ISDN_MAX_CHANNELS]; /* Index for mdm.... */
+@@ -631,6 +734,7 @@
+ isdn_v110_stream *v110[ISDN_MAX_CHANNELS]; /* V.110 private data */
+ struct semaphore sem; /* serialize list access*/
+ unsigned long global_features;
++#ifdef HAVE_DEVFS_FS
+ #ifdef CONFIG_DEVFS_FS
+ devfs_handle_t devfs_handle_isdninfo;
+ devfs_handle_t devfs_handle_isdnctrl;
+@@ -640,10 +744,41 @@
+ devfs_handle_t devfs_handle_ipppX[ISDN_MAX_CHANNELS];
+ #endif
+ #endif /* CONFIG_DEVFS_FS */
++#endif /* HAVE_DEVFS_FS */
+ } isdn_dev;
+
+ extern isdn_dev *dev;
+
++#ifdef CONFIG_ISDN_WITH_ABC
++extern int isdn_auto_dial_helper(isdn_net_local *,struct sk_buff *,int);
++extern void dwisdn_nfw_send(isdn_net_local *lp,int drop_only);
++extern void isdn_net_unreachable(struct net_device *,struct sk_buff *,char *);
++extern void isdn_net_log_skb_dwabc(struct sk_buff *,isdn_net_local *,char *);
++extern void isdn_net_hangup(struct net_device *d);
++extern void isdn_dw_clear_if(ulong pm,isdn_net_local *);
++extern void isdn_dwabc_test_phone(isdn_net_local *);
++extern void isdn_dw_abc_init_func(void);
++extern void isdn_dw_abc_release_func(void);
++extern int isdn_dw_abc_reset_interface(isdn_net_local *,int);
++extern int dwabc_bsd_init(isdn_net_local *lp);
++extern void dwabc_bsd_free(isdn_net_local *lp);
++extern struct sk_buff *dwabc_bsd_compress(isdn_net_local *,struct sk_buff *,struct net_device *);
++extern void dwabc_bsd_first_gen(isdn_net_local *);
++extern struct sk_buff *dwabc_bsd_rx_pkt(isdn_net_local *,struct sk_buff *,struct net_device *);
++#ifdef CONFIG_ISDN_WITH_ABC_LCR_SUPPORT
++extern size_t isdn_dw_abc_lcr_readstat(char *,size_t);
++extern ulong isdn_dw_abc_lcr_call_number(isdn_net_local *,isdn_ctrl *);
++extern void isdn_dw_abc_lcr_open(void);
++extern void isdn_dw_abc_lcr_close(void);
++extern int isdn_dw_abc_lcr_ioctl(ulong);
++extern void isdn_dw_abc_lcr_clear(isdn_net_local *);
++extern int isdn_dw_abc_lcr_lock(void);
++extern void isdn_dw_abc_lcr_ulock(void);
++#endif
++#ifdef CONFIG_ISDN_WITH_ABC_UDP_CHECK
++extern int dw_abc_udp_test(struct sk_buff *skb,struct net_device *ndev);
++#endif
++#endif
+
+ #endif /* __KERNEL__ */
+
+diff -Nur linux-2.4.32/include/linux/isdnif.h linux-2.4.32.patched/include/linux/isdnif.h
+--- linux-2.4.32/include/linux/isdnif.h 2001-12-21 18:42:03.000000000 +0100
++++ linux-2.4.32.patched/include/linux/isdnif.h 2006-03-13 18:55:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* $Id: isdnif.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
++/* $Id: isdnif.h,v 1.43 2002/02/09 21:19:11 keil Exp $
+ *
+ * Linux ISDN subsystem
+ * Definition of the interface between the subsystem and its low-level drivers.
+@@ -14,6 +14,7 @@
+ #ifndef __ISDNIF_H__
+ #define __ISDNIF_H__
+
++#include <linux/isdn_compat.h>
+
+ /*
+ * Values for general protocol-selection
+@@ -213,6 +214,8 @@
+ #define ISDN_STAT_FAXIND 276 /* FAX indications from HL-driver */
+ #define ISDN_STAT_AUDIO 277 /* DTMF, DSP indications */
+ #define ISDN_STAT_DISCH 278 /* Disable/Enable channel usage */
++#define ISDN_STAT_ALERT 279 /* Signal alerting */
++#define ISDN_STAT_PROCEED 280 /* Signal proceeding */
+
+ /*
+ * Audio commands
+diff -Nur linux-2.4.32/include/linux/isdn_lzscomp.h linux-2.4.32.patched/include/linux/isdn_lzscomp.h
+--- linux-2.4.32/include/linux/isdn_lzscomp.h 2001-12-21 18:42:03.000000000 +0100
++++ linux-2.4.32.patched/include/linux/isdn_lzscomp.h 2006-03-13 18:55:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-/* $Id: isdn_lzscomp.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
++/* $Id$
+ *
+ * Header for isdn_lzscomp.c
+ * Concentrated here to not mess up half a dozen kernel headers with code
+diff -Nur linux-2.4.32/include/linux/isdn_ppp.h linux-2.4.32.patched/include/linux/isdn_ppp.h
+--- linux-2.4.32/include/linux/isdn_ppp.h 2003-08-25 13:44:44.000000000 +0200
++++ linux-2.4.32.patched/include/linux/isdn_ppp.h 2006-03-13 18:55:56.000000000 +0100
+@@ -8,6 +8,7 @@
+ #ifndef _LINUX_ISDN_PPP_H
+ #define _LINUX_ISDN_PPP_H
+
++#include <linux/isdn_compat.h>
+
+ #define CALLTYPE_INCOMING 0x1
+ #define CALLTYPE_OUTGOING 0x2
+@@ -33,6 +34,11 @@
+ #define PPPIOCSCOMPRESSOR _IOW('t',135,int)
+ #define PPPIOCGIFNAME _IOR('t',136, char [IFNAMSIZ] )
+
++#ifdef COMPAT_NEED_MPPP_DEFS
++#define PPP_MP 0x003d
++#define PPP_COMPFRAG 0x00fb
++#define PPP_CCPFRAG 0x80fb
++#endif
+
+ #define SC_MP_PROT 0x00000200
+ #define SC_REJ_MP_PROT 0x00000400
+@@ -65,9 +71,6 @@
+
+ #include <linux/config.h>
+
+-#ifdef CONFIG_IPPP_FILTER
+-#include <linux/filter.h>
+-#endif
+
+ #define DECOMP_ERR_NOMEM (-10)
+
+@@ -226,10 +229,6 @@
+ unsigned char *cbuf;
+ struct slcompress *slcomp;
+ #endif
+-#ifdef CONFIG_IPPP_FILTER
+- struct sock_fprog pass_filter; /* filter for packets to pass */
+- struct sock_fprog active_filter; /* filter for pkts to reset idle */
+-#endif
+ unsigned long debug;
+ struct isdn_ppp_compressor *compressor,*decompressor;
+ struct isdn_ppp_compressor *link_compressor,*link_decompressor;
+diff -Nur linux-2.4.32/include/linux/kernelcapi.h linux-2.4.32.patched/include/linux/kernelcapi.h
+--- linux-2.4.32/include/linux/kernelcapi.h 2002-02-25 20:38:13.000000000 +0100
++++ linux-2.4.32.patched/include/linux/kernelcapi.h 2006-03-13 18:55:56.000000000 +0100
+@@ -1,12 +1,10 @@
+-/* $Id: kernelcapi.h,v 1.1.4.2 2002/01/28 18:25:10 kai Exp $
++/*
++ * $Id: kernelcapi.h,v 1.9 2000/11/28 09:34:02 kai Exp $
+ *
+ * Kernel CAPI 2.0 Interface for Linux
+ *
+ * (c) Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de)
+ *
+- * This software may be used and distributed according to the terms
+- * of the GNU General Public License, incorporated herein by reference.
+- *
+ */
+
+ #ifndef __KERNELCAPI_H__
+diff -Nur linux-2.4.32/include/linux/modversions.h linux-2.4.32.patched/include/linux/modversions.h
+--- linux-2.4.32/include/linux/modversions.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/modversions.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1 @@
++#include <linux/modsetver.h>
+diff -Nur linux-2.4.32/include/linux/nbd.h linux-2.4.32.patched/include/linux/nbd.h
+--- linux-2.4.32/include/linux/nbd.h 2002-08-03 02:39:45.000000000 +0200
++++ linux-2.4.32.patched/include/linux/nbd.h 2006-03-13 18:57:13.000000000 +0100
+@@ -29,34 +29,6 @@
+
+ #include <linux/blk.h>
+
+-#ifdef PARANOIA
+-extern int requests_in;
+-extern int requests_out;
+-#endif
+-
+-static void
+-nbd_end_request(struct request *req)
+-{
+- struct buffer_head *bh;
+- unsigned nsect;
+- unsigned long flags;
+- int uptodate = (req->errors == 0) ? 1 : 0;
+-
+-#ifdef PARANOIA
+- requests_out++;
+-#endif
+- spin_lock_irqsave(&io_request_lock, flags);
+- while((bh = req->bh) != NULL) {
+- nsect = bh->b_size >> 9;
+- blk_finished_io(nsect);
+- req->bh = bh->b_reqnext;
+- bh->b_reqnext = NULL;
+- bh->b_end_io(bh, uptodate);
+- }
+- blkdev_release_request(req);
+- spin_unlock_irqrestore(&io_request_lock, flags);
+-}
+-
+ #define MAX_NBD 128
+
+ struct nbd_device {
+diff -Nur linux-2.4.32/include/linux/netdevice.h linux-2.4.32.patched/include/linux/netdevice.h
+--- linux-2.4.32/include/linux/netdevice.h 2004-11-17 12:54:22.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netdevice.h 2006-03-13 18:57:13.000000000 +0100
+@@ -295,9 +295,11 @@
+
+ /* List of functions to handle Wireless Extensions (instead of ioctl).
+ * See <net/iw_handler.h> for details. Jean II */
+- struct iw_handler_def * wireless_handlers;
++ const struct iw_handler_def * wireless_handlers;
++ /* Instance data managed by the core of Wireless Extensions. */
++ struct iw_public_data * wireless_data;
++
+
+- struct ethtool_ops *ethtool_ops;
+
+ /*
+ * This marks the end of the "visible" part of the structure. All
+@@ -352,8 +354,8 @@
+
+ struct Qdisc *qdisc;
+ struct Qdisc *qdisc_sleeping;
++ struct Qdisc *qdisc_list;
+ struct Qdisc *qdisc_ingress;
+- struct list_head qdisc_list;
+ unsigned long tx_queue_len; /* Max frames per queue allowed */
+
+ /* hard_start_xmit synchronizer */
+@@ -453,6 +455,7 @@
+ /* this will get initialized at each interface type init routine */
+ struct divert_blk *divert;
+ #endif /* CONFIG_NET_DIVERT */
++ struct ethtool_ops *ethtool_ops;
+ };
+
+ /* 2.6 compatibility */
+diff -Nur linux-2.4.32/include/linux/netfilter_helpers.h linux-2.4.32.patched/include/linux/netfilter_helpers.h
+--- linux-2.4.32/include/linux/netfilter_helpers.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_helpers.h 2006-03-13 18:55:58.000000000 +0100
+@@ -0,0 +1,133 @@
++/*
++ * Helpers for netfiler modules. This file provides implementations for basic
++ * functions such as strncasecmp(), etc.
++ *
++ * gcc will warn for defined but unused functions, so we only include the
++ * functions requested. The following macros are used:
++ * NF_NEED_STRNCASECMP nf_strncasecmp()
++ * NF_NEED_STRTOU16 nf_strtou16()
++ * NF_NEED_STRTOU32 nf_strtou32()
++ */
++#ifndef _NETFILTER_HELPERS_H
++#define _NETFILTER_HELPERS_H
++
++/* Only include these functions for kernel code. */
++#ifdef __KERNEL__
++
++#include <linux/ctype.h>
++#define iseol(c) ( (c) == '\r' || (c) == '\n' )
++
++/*
++ * The standard strncasecmp()
++ */
++#ifdef NF_NEED_STRNCASECMP
++static int
++nf_strncasecmp(const char* s1, const char* s2, u_int32_t len)
++{
++ if (s1 == NULL || s2 == NULL)
++ {
++ if (s1 == NULL && s2 == NULL)
++ {
++ return 0;
++ }
++ return (s1 == NULL) ? -1 : 1;
++ }
++ while (len > 0 && tolower(*s1) == tolower(*s2))
++ {
++ len--;
++ s1++;
++ s2++;
++ }
++ return ( (len == 0) ? 0 : (tolower(*s1) - tolower(*s2)) );
++}
++#endif /* NF_NEED_STRNCASECMP */
++
++/*
++ * Parse a string containing a 16-bit unsigned integer.
++ * Returns the number of chars used, or zero if no number is found.
++ */
++#ifdef NF_NEED_STRTOU16
++static int
++nf_strtou16(const char* pbuf, u_int16_t* pval)
++{
++ int n = 0;
++
++ *pval = 0;
++ while (isdigit(pbuf[n]))
++ {
++ *pval = (*pval * 10) + (pbuf[n] - '0');
++ n++;
++ }
++
++ return n;
++}
++#endif /* NF_NEED_STRTOU16 */
++
++/*
++ * Parse a string containing a 32-bit unsigned integer.
++ * Returns the number of chars used, or zero if no number is found.
++ */
++#ifdef NF_NEED_STRTOU32
++static int
++nf_strtou32(const char* pbuf, u_int32_t* pval)
++{
++ int n = 0;
++
++ *pval = 0;
++ while (pbuf[n] >= '0' && pbuf[n] <= '9')
++ {
++ *pval = (*pval * 10) + (pbuf[n] - '0');
++ n++;
++ }
++
++ return n;
++}
++#endif /* NF_NEED_STRTOU32 */
++
++/*
++ * Given a buffer and length, advance to the next line and mark the current
++ * line.
++ */
++#ifdef NF_NEED_NEXTLINE
++static int
++nf_nextline(char* p, uint len, uint* poff, uint* plineoff, uint* plinelen)
++{
++ uint off = *poff;
++ uint physlen = 0;
++
++ if (off >= len)
++ {
++ return 0;
++ }
++
++ while (p[off] != '\n')
++ {
++ if (len-off <= 1)
++ {
++ return 0;
++ }
++
++ physlen++;
++ off++;
++ }
++
++ /* if we saw a crlf, physlen needs adjusted */
++ if (physlen > 0 && p[off] == '\n' && p[off-1] == '\r')
++ {
++ physlen--;
++ }
++
++ /* advance past the newline */
++ off++;
++
++ *plineoff = *poff;
++ *plinelen = physlen;
++ *poff = off;
++
++ return 1;
++}
++#endif /* NF_NEED_NEXTLINE */
++
++#endif /* __KERNEL__ */
++
++#endif /* _NETFILTER_HELPERS_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_conntrack.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack.h 2005-11-16 20:12:54.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_conntrack.h 2006-03-13 19:01:41.000000000 +0100
+@@ -50,16 +50,19 @@
+
+ #include <linux/netfilter_ipv4/ip_conntrack_tcp.h>
+ #include <linux/netfilter_ipv4/ip_conntrack_icmp.h>
++#include <linux/netfilter_ipv4/ip_conntrack_proto_gre.h>
+
+ /* per conntrack: protocol private data */
+ union ip_conntrack_proto {
+ /* insert conntrack proto private data here */
+ struct ip_ct_tcp tcp;
+ struct ip_ct_icmp icmp;
++ struct ip_ct_gre gre;
+ };
+
+ union ip_conntrack_expect_proto {
+ /* insert expect proto private data here */
++ struct ip_ct_gre_expect gre;
+ };
+
+ /* Add protocol helper include file here */
+@@ -67,6 +70,10 @@
+
+ #include <linux/netfilter_ipv4/ip_conntrack_ftp.h>
+ #include <linux/netfilter_ipv4/ip_conntrack_irc.h>
++#include <linux/netfilter_ipv4/ip_conntrack_pptp.h>
++#include <linux/netfilter_ipv4/ip_conntrack_h323.h>
++#include <linux/netfilter_ipv4/ip_conntrack_rtsp.h>
++#include <linux/netfilter_ipv4/ip_conntrack_mms.h>
+
+ /* per expectation: application helper private data */
+ union ip_conntrack_expect_help {
+@@ -74,6 +81,10 @@
+ struct ip_ct_amanda_expect exp_amanda_info;
+ struct ip_ct_ftp_expect exp_ftp_info;
+ struct ip_ct_irc_expect exp_irc_info;
++ struct ip_ct_pptp_expect exp_pptp_info;
++ struct ip_ct_h225_expect exp_h225_info;
++ struct ip_ct_rtsp_expect exp_rtsp_info;
++ struct ip_ct_mms_expect exp_mms_info;
+
+ #ifdef CONFIG_IP_NF_NAT_NEEDED
+ union {
+@@ -87,14 +98,20 @@
+ /* insert conntrack helper private data (master) here */
+ struct ip_ct_ftp_master ct_ftp_info;
+ struct ip_ct_irc_master ct_irc_info;
++ struct ip_ct_pptp_master ct_pptp_info;
++ struct ip_ct_h225_master ct_h225_info;
++ struct ip_ct_rtsp_master ct_rtsp_info;
++ struct ip_ct_mms_master ct_mms_info;
+ };
+
+ #ifdef CONFIG_IP_NF_NAT_NEEDED
+ #include <linux/netfilter_ipv4/ip_nat.h>
++#include <linux/netfilter_ipv4/ip_nat_pptp.h>
+
+ /* per conntrack: nat application helper private data */
+ union ip_conntrack_nat_help {
+ /* insert nat helper private data here */
++ struct ip_nat_pptp nat_pptp_info;
+ };
+ #endif
+
+@@ -156,6 +173,12 @@
+ union ip_conntrack_expect_help help;
+ };
+
++struct ip_conntrack_counter
++{
++ u_int64_t packets;
++ u_int64_t bytes;
++};
++
+ struct ip_conntrack_helper;
+
+ struct ip_conntrack
+@@ -173,6 +196,12 @@
+ /* Timer function; drops refcnt when it goes off. */
+ struct timer_list timeout;
+
++#if defined(CONFIG_IP_NF_CT_ACCT) || \
++ defined(CONFIG_IP_NF_CT_ACCT_MODULE)
++ /* Accounting Information (same cache line as other written members) */
++ struct ip_conntrack_counter counters[IP_CT_DIR_MAX];
++#endif
++
+ /* If we're expecting another related connection, this will be
+ in expected linked list */
+ struct list_head sibling_list;
+@@ -207,6 +236,20 @@
+ } nat;
+ #endif /* CONFIG_IP_NF_NAT_NEEDED */
+
++#if defined(CONFIG_IP_NF_MATCH_LAYER7) || defined(CONFIG_IP_NF_MATCH_LAYER7_MODULE)
++ struct {
++ unsigned int numpackets; /* surely this is kept track of somewhere else, right? I can't find it... */
++ char * app_proto; /* "http", "ftp", etc. NULL if unclassifed */
++
++ /* the application layer data so far. NULL if ->numpackets > numpackets */
++ char * app_data;
++
++ unsigned int app_data_len;
++ } layer7;
++#endif
++#if defined(CONFIG_IP_NF_CONNTRACK_MARK)
++ unsigned long mark;
++#endif
+ };
+
+ /* get master conntrack via master expectation */
+@@ -242,8 +285,10 @@
+ const struct ip_conntrack_tuple *orig);
+
+ /* Refresh conntrack for this many jiffies */
+-extern void ip_ct_refresh(struct ip_conntrack *ct,
+- unsigned long extra_jiffies);
++extern void ip_ct_refresh_acct(struct ip_conntrack *ct,
++ enum ip_conntrack_info ctinfo,
++ const struct iphdr *iph,
++ unsigned long extra_jiffies);
+
+ /* These are for NAT. Icky. */
+ /* Call me when a conntrack is destroyed. */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_h323.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_conntrack_h323.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_h323.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_conntrack_h323.h 2006-03-13 19:01:41.000000000 +0100
+@@ -0,0 +1,30 @@
++#ifndef _IP_CONNTRACK_H323_H
++#define _IP_CONNTRACK_H323_H
++/* H.323 connection tracking. */
++
++#ifdef __KERNEL__
++/* Protects H.323 related data */
++DECLARE_LOCK_EXTERN(ip_h323_lock);
++#endif
++
++/* Default H.225 port */
++#define H225_PORT 1720
++
++/* This structure is per expected connection */
++struct ip_ct_h225_expect {
++ u_int16_t port; /* Port of the H.225 helper/RTCP/RTP channel */
++ enum ip_conntrack_dir dir; /* Direction of the original connection */
++ unsigned int offset; /* offset of the address in the payload */
++};
++
++/* This structure exists only once per master */
++struct ip_ct_h225_master {
++ int is_h225; /* H.225 or H.245 connection */
++#ifdef CONFIG_IP_NF_NAT_NEEDED
++ enum ip_conntrack_dir dir; /* Direction of the original connection */
++ u_int32_t seq[IP_CT_DIR_MAX]; /* Exceptional packet mangling for signal addressess... */
++ unsigned int offset[IP_CT_DIR_MAX]; /* ...and the offset of the addresses in the payload */
++#endif
++};
++
++#endif /* _IP_CONNTRACK_H323_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_mms.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_conntrack_mms.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_mms.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_conntrack_mms.h 2006-03-13 19:01:41.000000000 +0100
+@@ -0,0 +1,31 @@
++#ifndef _IP_CONNTRACK_MMS_H
++#define _IP_CONNTRACK_MMS_H
++/* MMS tracking. */
++
++#ifdef __KERNEL__
++#include <linux/netfilter_ipv4/lockhelp.h>
++
++DECLARE_LOCK_EXTERN(ip_mms_lock);
++
++#define MMS_PORT 1755
++#define MMS_SRV_MSG_ID 196610
++
++#define MMS_SRV_MSG_OFFSET 36
++#define MMS_SRV_UNICODE_STRING_OFFSET 60
++#define MMS_SRV_CHUNKLENLV_OFFSET 16
++#define MMS_SRV_CHUNKLENLM_OFFSET 32
++#define MMS_SRV_MESSAGELENGTH_OFFSET 8
++#endif
++
++/* This structure is per expected connection */
++struct ip_ct_mms_expect {
++ u_int32_t len;
++ u_int32_t padding;
++ u_int16_t port;
++};
++
++/* This structure exists only once per master */
++struct ip_ct_mms_master {
++};
++
++#endif /* _IP_CONNTRACK_MMS_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_pptp.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_conntrack_pptp.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_pptp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_conntrack_pptp.h 2006-03-13 19:01:41.000000000 +0100
+@@ -0,0 +1,313 @@
++/* PPTP constants and structs */
++#ifndef _CONNTRACK_PPTP_H
++#define _CONNTRACK_PPTP_H
++
++/* state of the control session */
++enum pptp_ctrlsess_state {
++ PPTP_SESSION_NONE, /* no session present */
++ PPTP_SESSION_ERROR, /* some session error */
++ PPTP_SESSION_STOPREQ, /* stop_sess request seen */
++ PPTP_SESSION_REQUESTED, /* start_sess request seen */
++ PPTP_SESSION_CONFIRMED, /* session established */
++};
++
++/* state of the call inside the control session */
++enum pptp_ctrlcall_state {
++ PPTP_CALL_NONE,
++ PPTP_CALL_ERROR,
++ PPTP_CALL_OUT_REQ,
++ PPTP_CALL_OUT_CONF,
++ PPTP_CALL_IN_REQ,
++ PPTP_CALL_IN_REP,
++ PPTP_CALL_IN_CONF,
++ PPTP_CALL_CLEAR_REQ,
++};
++
++
++/* conntrack private data */
++struct ip_ct_pptp_master {
++ enum pptp_ctrlsess_state sstate; /* session state */
++
++ /* everything below is going to be per-expectation in newnat,
++ * since there could be more than one call within one session */
++ enum pptp_ctrlcall_state cstate; /* call state */
++ u_int16_t pac_call_id; /* call id of PAC, host byte order */
++ u_int16_t pns_call_id; /* call id of PNS, host byte order */
++};
++
++/* conntrack_expect private member */
++struct ip_ct_pptp_expect {
++ enum pptp_ctrlcall_state cstate; /* call state */
++ u_int16_t pac_call_id; /* call id of PAC */
++ u_int16_t pns_call_id; /* call id of PNS */
++};
++
++
++#ifdef __KERNEL__
++
++#include <linux/netfilter_ipv4/lockhelp.h>
++DECLARE_LOCK_EXTERN(ip_pptp_lock);
++
++#define IP_CONNTR_PPTP PPTP_CONTROL_PORT
++
++union pptp_ctrl_union {
++ void *rawreq;
++ struct PptpStartSessionRequest *sreq;
++ struct PptpStartSessionReply *srep;
++ struct PptpStopSessionRequest *streq;
++ struct PptpStopSessionReply *strep;
++ struct PptpOutCallRequest *ocreq;
++ struct PptpOutCallReply *ocack;
++ struct PptpInCallRequest *icreq;
++ struct PptpInCallReply *icack;
++ struct PptpInCallConnected *iccon;
++ struct PptpClearCallRequest *clrreq;
++ struct PptpCallDisconnectNotify *disc;
++ struct PptpWanErrorNotify *wanerr;
++ struct PptpSetLinkInfo *setlink;
++};
++
++
++
++#define PPTP_CONTROL_PORT 1723
++
++#define PPTP_PACKET_CONTROL 1
++#define PPTP_PACKET_MGMT 2
++
++#define PPTP_MAGIC_COOKIE 0x1a2b3c4d
++
++struct pptp_pkt_hdr {
++ __u16 packetLength;
++ __u16 packetType;
++ __u32 magicCookie;
++};
++
++/* PptpControlMessageType values */
++#define PPTP_START_SESSION_REQUEST 1
++#define PPTP_START_SESSION_REPLY 2
++#define PPTP_STOP_SESSION_REQUEST 3
++#define PPTP_STOP_SESSION_REPLY 4
++#define PPTP_ECHO_REQUEST 5
++#define PPTP_ECHO_REPLY 6
++#define PPTP_OUT_CALL_REQUEST 7
++#define PPTP_OUT_CALL_REPLY 8
++#define PPTP_IN_CALL_REQUEST 9
++#define PPTP_IN_CALL_REPLY 10
++#define PPTP_IN_CALL_CONNECT 11
++#define PPTP_CALL_CLEAR_REQUEST 12
++#define PPTP_CALL_DISCONNECT_NOTIFY 13
++#define PPTP_WAN_ERROR_NOTIFY 14
++#define PPTP_SET_LINK_INFO 15
++
++#define PPTP_MSG_MAX 15
++
++/* PptpGeneralError values */
++#define PPTP_ERROR_CODE_NONE 0
++#define PPTP_NOT_CONNECTED 1
++#define PPTP_BAD_FORMAT 2
++#define PPTP_BAD_VALUE 3
++#define PPTP_NO_RESOURCE 4
++#define PPTP_BAD_CALLID 5
++#define PPTP_REMOVE_DEVICE_ERROR 6
++
++struct PptpControlHeader {
++ __u16 messageType;
++ __u16 reserved;
++};
++
++/* FramingCapability Bitmap Values */
++#define PPTP_FRAME_CAP_ASYNC 0x1
++#define PPTP_FRAME_CAP_SYNC 0x2
++
++/* BearerCapability Bitmap Values */
++#define PPTP_BEARER_CAP_ANALOG 0x1
++#define PPTP_BEARER_CAP_DIGITAL 0x2
++
++struct PptpStartSessionRequest {
++ __u16 protocolVersion;
++ __u8 reserved1;
++ __u8 reserved2;
++ __u32 framingCapability;
++ __u32 bearerCapability;
++ __u16 maxChannels;
++ __u16 firmwareRevision;
++ __u8 hostName[64];
++ __u8 vendorString[64];
++};
++
++/* PptpStartSessionResultCode Values */
++#define PPTP_START_OK 1
++#define PPTP_START_GENERAL_ERROR 2
++#define PPTP_START_ALREADY_CONNECTED 3
++#define PPTP_START_NOT_AUTHORIZED 4
++#define PPTP_START_UNKNOWN_PROTOCOL 5
++
++struct PptpStartSessionReply {
++ __u16 protocolVersion;
++ __u8 resultCode;
++ __u8 generalErrorCode;
++ __u32 framingCapability;
++ __u32 bearerCapability;
++ __u16 maxChannels;
++ __u16 firmwareRevision;
++ __u8 hostName[64];
++ __u8 vendorString[64];
++};
++
++/* PptpStopReasons */
++#define PPTP_STOP_NONE 1
++#define PPTP_STOP_PROTOCOL 2
++#define PPTP_STOP_LOCAL_SHUTDOWN 3
++
++struct PptpStopSessionRequest {
++ __u8 reason;
++};
++
++/* PptpStopSessionResultCode */
++#define PPTP_STOP_OK 1
++#define PPTP_STOP_GENERAL_ERROR 2
++
++struct PptpStopSessionReply {
++ __u8 resultCode;
++ __u8 generalErrorCode;
++};
++
++struct PptpEchoRequest {
++ __u32 identNumber;
++};
++
++/* PptpEchoReplyResultCode */
++#define PPTP_ECHO_OK 1
++#define PPTP_ECHO_GENERAL_ERROR 2
++
++struct PptpEchoReply {
++ __u32 identNumber;
++ __u8 resultCode;
++ __u8 generalErrorCode;
++ __u16 reserved;
++};
++
++/* PptpFramingType */
++#define PPTP_ASYNC_FRAMING 1
++#define PPTP_SYNC_FRAMING 2
++#define PPTP_DONT_CARE_FRAMING 3
++
++/* PptpCallBearerType */
++#define PPTP_ANALOG_TYPE 1
++#define PPTP_DIGITAL_TYPE 2
++#define PPTP_DONT_CARE_BEARER_TYPE 3
++
++struct PptpOutCallRequest {
++ __u16 callID;
++ __u16 callSerialNumber;
++ __u32 minBPS;
++ __u32 maxBPS;
++ __u32 bearerType;
++ __u32 framingType;
++ __u16 packetWindow;
++ __u16 packetProcDelay;
++ __u16 reserved1;
++ __u16 phoneNumberLength;
++ __u16 reserved2;
++ __u8 phoneNumber[64];
++ __u8 subAddress[64];
++};
++
++/* PptpCallResultCode */
++#define PPTP_OUTCALL_CONNECT 1
++#define PPTP_OUTCALL_GENERAL_ERROR 2
++#define PPTP_OUTCALL_NO_CARRIER 3
++#define PPTP_OUTCALL_BUSY 4
++#define PPTP_OUTCALL_NO_DIAL_TONE 5
++#define PPTP_OUTCALL_TIMEOUT 6
++#define PPTP_OUTCALL_DONT_ACCEPT 7
++
++struct PptpOutCallReply {
++ __u16 callID;
++ __u16 peersCallID;
++ __u8 resultCode;
++ __u8 generalErrorCode;
++ __u16 causeCode;
++ __u32 connectSpeed;
++ __u16 packetWindow;
++ __u16 packetProcDelay;
++ __u32 physChannelID;
++};
++
++struct PptpInCallRequest {
++ __u16 callID;
++ __u16 callSerialNumber;
++ __u32 callBearerType;
++ __u32 physChannelID;
++ __u16 dialedNumberLength;
++ __u16 dialingNumberLength;
++ __u8 dialedNumber[64];
++ __u8 dialingNumber[64];
++ __u8 subAddress[64];
++};
++
++/* PptpInCallResultCode */
++#define PPTP_INCALL_ACCEPT 1
++#define PPTP_INCALL_GENERAL_ERROR 2
++#define PPTP_INCALL_DONT_ACCEPT 3
++
++struct PptpInCallReply {
++ __u16 callID;
++ __u16 peersCallID;
++ __u8 resultCode;
++ __u8 generalErrorCode;
++ __u16 packetWindow;
++ __u16 packetProcDelay;
++ __u16 reserved;
++};
++
++struct PptpInCallConnected {
++ __u16 peersCallID;
++ __u16 reserved;
++ __u32 connectSpeed;
++ __u16 packetWindow;
++ __u16 packetProcDelay;
++ __u32 callFramingType;
++};
++
++struct PptpClearCallRequest {
++ __u16 callID;
++ __u16 reserved;
++};
++
++struct PptpCallDisconnectNotify {
++ __u16 callID;
++ __u8 resultCode;
++ __u8 generalErrorCode;
++ __u16 causeCode;
++ __u16 reserved;
++ __u8 callStatistics[128];
++};
++
++struct PptpWanErrorNotify {
++ __u16 peersCallID;
++ __u16 reserved;
++ __u32 crcErrors;
++ __u32 framingErrors;
++ __u32 hardwareOverRuns;
++ __u32 bufferOverRuns;
++ __u32 timeoutErrors;
++ __u32 alignmentErrors;
++};
++
++struct PptpSetLinkInfo {
++ __u16 peersCallID;
++ __u16 reserved;
++ __u32 sendAccm;
++ __u32 recvAccm;
++};
++
++
++struct pptp_priv_data {
++ __u16 call_id;
++ __u16 mcall_id;
++ __u16 pcall_id;
++};
++
++#endif /* __KERNEL__ */
++#endif /* _CONNTRACK_PPTP_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h 2006-03-13 19:01:41.000000000 +0100
+@@ -0,0 +1,123 @@
++#ifndef _CONNTRACK_PROTO_GRE_H
++#define _CONNTRACK_PROTO_GRE_H
++#include <asm/byteorder.h>
++
++/* GRE PROTOCOL HEADER */
++
++/* GRE Version field */
++#define GRE_VERSION_1701 0x0
++#define GRE_VERSION_PPTP 0x1
++
++/* GRE Protocol field */
++#define GRE_PROTOCOL_PPTP 0x880B
++
++/* GRE Flags */
++#define GRE_FLAG_C 0x80
++#define GRE_FLAG_R 0x40
++#define GRE_FLAG_K 0x20
++#define GRE_FLAG_S 0x10
++#define GRE_FLAG_A 0x80
++
++#define GRE_IS_C(f) ((f)&GRE_FLAG_C)
++#define GRE_IS_R(f) ((f)&GRE_FLAG_R)
++#define GRE_IS_K(f) ((f)&GRE_FLAG_K)
++#define GRE_IS_S(f) ((f)&GRE_FLAG_S)
++#define GRE_IS_A(f) ((f)&GRE_FLAG_A)
++
++/* GRE is a mess: Four different standards */
++struct gre_hdr {
++#if defined(__LITTLE_ENDIAN_BITFIELD)
++ __u16 rec:3,
++ srr:1,
++ seq:1,
++ key:1,
++ routing:1,
++ csum:1,
++ version:3,
++ reserved:4,
++ ack:1;
++#elif defined(__BIG_ENDIAN_BITFIELD)
++ __u16 csum:1,
++ routing:1,
++ key:1,
++ seq:1,
++ srr:1,
++ rec:3,
++ ack:1,
++ reserved:4,
++ version:3;
++#else
++#error "Adjust your <asm/byteorder.h> defines"
++#endif
++ __u16 protocol;
++};
++
++/* modified GRE header for PPTP */
++struct gre_hdr_pptp {
++ __u8 flags; /* bitfield */
++ __u8 version; /* should be GRE_VERSION_PPTP */
++ __u16 protocol; /* should be GRE_PROTOCOL_PPTP */
++ __u16 payload_len; /* size of ppp payload, not inc. gre header */
++ __u16 call_id; /* peer's call_id for this session */
++ __u32 seq; /* sequence number. Present if S==1 */
++ __u32 ack; /* seq number of highest packet recieved by */
++ /* sender in this session */
++};
++
++
++/* this is part of ip_conntrack */
++struct ip_ct_gre {
++ unsigned int stream_timeout;
++ unsigned int timeout;
++};
++
++/* this is part of ip_conntrack_expect */
++struct ip_ct_gre_expect {
++ struct ip_ct_gre_keymap *keymap_orig, *keymap_reply;
++};
++
++#ifdef __KERNEL__
++struct ip_conntrack_expect;
++
++/* structure for original <-> reply keymap */
++struct ip_ct_gre_keymap {
++ struct list_head list;
++
++ struct ip_conntrack_tuple tuple;
++};
++
++
++/* add new tuple->key_reply pair to keymap */
++int ip_ct_gre_keymap_add(struct ip_conntrack_expect *exp,
++ struct ip_conntrack_tuple *t,
++ int reply);
++
++/* change an existing keymap entry */
++void ip_ct_gre_keymap_change(struct ip_ct_gre_keymap *km,
++ struct ip_conntrack_tuple *t);
++
++/* delete keymap entries */
++void ip_ct_gre_keymap_destroy(struct ip_conntrack_expect *exp);
++
++
++/* get pointer to gre key, if present */
++static inline u_int32_t *gre_key(struct gre_hdr *greh)
++{
++ if (!greh->key)
++ return NULL;
++ if (greh->csum || greh->routing)
++ return (u_int32_t *) (greh+sizeof(*greh)+4);
++ return (u_int32_t *) (greh+sizeof(*greh));
++}
++
++/* get pointer ot gre csum, if present */
++static inline u_int16_t *gre_csum(struct gre_hdr *greh)
++{
++ if (!greh->csum)
++ return NULL;
++ return (u_int16_t *) (greh+sizeof(*greh));
++}
++
++#endif /* __KERNEL__ */
++
++#endif /* _CONNTRACK_PROTO_GRE_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h 2006-03-13 19:01:41.000000000 +0100
+@@ -0,0 +1,68 @@
++/*
++ * RTSP extension for IP connection tracking.
++ * (C) 2003 by Tom Marshall <tmarshall@real.com>
++ * based on ip_conntrack_irc.h
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++#ifndef _IP_CONNTRACK_RTSP_H
++#define _IP_CONNTRACK_RTSP_H
++
++/* #define IP_NF_RTSP_DEBUG */
++#define IP_NF_RTSP_VERSION "0.01"
++
++/* port block types */
++typedef enum {
++ pb_single, /* client_port=x */
++ pb_range, /* client_port=x-y */
++ pb_discon /* client_port=x/y (rtspbis) */
++} portblock_t;
++
++/* We record seq number and length of rtsp headers here, all in host order. */
++
++/*
++ * This structure is per expected connection. It is a member of struct
++ * ip_conntrack_expect. The TCP SEQ for the conntrack expect is stored
++ * there and we are expected to only store the length of the data which
++ * needs replaced. If a packet contains multiple RTSP messages, we create
++ * one expected connection per message.
++ *
++ * We use these variables to mark the entire header block. This may seem
++ * like overkill, but the nature of RTSP requires it. A header may appear
++ * multiple times in a message. We must treat two Transport headers the
++ * same as one Transport header with two entries.
++ */
++struct ip_ct_rtsp_expect
++{
++ u_int32_t len; /* length of header block */
++ portblock_t pbtype; /* Type of port block that was requested */
++ u_int16_t loport; /* Port that was requested, low or first */
++ u_int16_t hiport; /* Port that was requested, high or second */
++#if 0
++ uint method; /* RTSP method */
++ uint cseq; /* CSeq from request */
++#endif
++};
++
++/* This structure exists only once per master */
++struct ip_ct_rtsp_master
++{
++ /* Empty (?) */
++};
++
++
++#ifdef __KERNEL__
++
++#include <linux/netfilter_ipv4/lockhelp.h>
++
++#define RTSP_PORT 554
++
++/* Protects rtsp part of conntracks */
++DECLARE_LOCK_EXTERN(ip_rtsp_lock);
++
++#endif /* __KERNEL__ */
++
++#endif /* _IP_CONNTRACK_RTSP_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_tuple.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_conntrack_tuple.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_tuple.h 2003-11-28 19:26:21.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_conntrack_tuple.h 2006-03-13 18:55:57.000000000 +0100
+@@ -14,7 +14,7 @@
+ union ip_conntrack_manip_proto
+ {
+ /* Add other protocols here. */
+- u_int16_t all;
++ u_int32_t all;
+
+ struct {
+ u_int16_t port;
+@@ -25,6 +25,9 @@
+ struct {
+ u_int16_t id;
+ } icmp;
++ struct {
++ u_int32_t key;
++ } gre;
+ };
+
+ /* The manipulable part of the tuple. */
+@@ -44,7 +47,7 @@
+ u_int32_t ip;
+ union {
+ /* Add other protocols here. */
+- u_int16_t all;
++ u_int32_t all;
+
+ struct {
+ u_int16_t port;
+@@ -55,6 +58,9 @@
+ struct {
+ u_int8_t type, code;
+ } icmp;
++ struct {
++ u_int32_t key;
++ } gre;
+ } u;
+
+ /* The protocol. */
+@@ -80,10 +86,16 @@
+ #ifdef __KERNEL__
+
+ #define DUMP_TUPLE(tp) \
+-DEBUGP("tuple %p: %u %u.%u.%u.%u:%hu -> %u.%u.%u.%u:%hu\n", \
++DEBUGP("tuple %p: %u %u.%u.%u.%u:%u -> %u.%u.%u.%u:%u\n", \
+ (tp), (tp)->dst.protonum, \
+- NIPQUAD((tp)->src.ip), ntohs((tp)->src.u.all), \
+- NIPQUAD((tp)->dst.ip), ntohs((tp)->dst.u.all))
++ NIPQUAD((tp)->src.ip), ntohl((tp)->src.u.all), \
++ NIPQUAD((tp)->dst.ip), ntohl((tp)->dst.u.all))
++
++#define DUMP_TUPLE_RAW(x) \
++ DEBUGP("tuple %p: %u %u.%u.%u.%u:0x%08x -> %u.%u.%u.%u:0x%08x\n",\
++ (x), (x)->dst.protonum, \
++ NIPQUAD((x)->src.ip), ntohl((x)->src.u.all), \
++ NIPQUAD((x)->dst.ip), ntohl((x)->dst.u.all))
+
+ #define CTINFO2DIR(ctinfo) ((ctinfo) >= IP_CT_IS_REPLY ? IP_CT_DIR_REPLY : IP_CT_DIR_ORIGINAL)
+
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_nat_pptp.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_nat_pptp.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_nat_pptp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_nat_pptp.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,11 @@
++/* PPTP constants and structs */
++#ifndef _NAT_PPTP_H
++#define _NAT_PPTP_H
++
++/* conntrack private data */
++struct ip_nat_pptp {
++ u_int16_t pns_call_id; /* NAT'ed PNS call id */
++ u_int16_t pac_call_id; /* NAT'ed PAC call id */
++};
++
++#endif /* _NAT_PPTP_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_set.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_set.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,489 @@
++#ifndef _IP_SET_H
++#define _IP_SET_H
++
++/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
++ * Patrick Schaaf <bof@bof.de>
++ * Martin Josefsson <gandalf@wlug.westbo.se>
++ * Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/*
++ * A sockopt of such quality has hardly ever been seen before on the open
++ * market! This little beauty, hardly ever used: above 64, so it's
++ * traditionally used for firewalling, not touched (even once!) by the
++ * 2.0, 2.2 and 2.4 kernels!
++ *
++ * Comes with its own certificate of authenticity, valid anywhere in the
++ * Free world!
++ *
++ * Rusty, 19.4.2000
++ */
++#define SO_IP_SET 83
++
++/*
++ * Heavily modify by Joakim Axelsson 08.03.2002
++ * - Made it more modulebased
++ *
++ * Additional heavy modifications by Jozsef Kadlecsik 22.02.2004
++ * - bindings added
++ * - in order to "deal with" backward compatibility, renamed to ipset
++ */
++
++/*
++ * Used so that the kernel module and ipset-binary can match their versions
++ */
++#define IP_SET_PROTOCOL_VERSION 2
++
++#define IP_SET_MAXNAMELEN 32 /* set names and set typenames */
++
++/* Lets work with our own typedef for representing an IP address.
++ * We hope to make the code more portable, possibly to IPv6...
++ *
++ * The representation works in HOST byte order, because most set types
++ * will perform arithmetic operations and compare operations.
++ *
++ * For now the type is an uint32_t.
++ *
++ * Make sure to ONLY use the functions when translating and parsing
++ * in order to keep the host byte order and make it more portable:
++ * parse_ip()
++ * parse_mask()
++ * parse_ipandmask()
++ * ip_tostring()
++ * (Joakim: where are they???)
++ */
++
++typedef uint32_t ip_set_ip_t;
++
++/* Sets are identified by an id in kernel space. Tweak with ip_set_id_t
++ * and IP_SET_INVALID_ID if you want to increase the max number of sets.
++ */
++typedef uint16_t ip_set_id_t;
++
++#define IP_SET_INVALID_ID 65535
++
++/* How deep we follow bindings */
++#define IP_SET_MAX_BINDINGS 6
++
++/*
++ * Option flags for kernel operations (ipt_set_info)
++ */
++#define IPSET_SRC 0x01 /* Source match/add */
++#define IPSET_DST 0x02 /* Destination match/add */
++#define IPSET_MATCH_INV 0x04 /* Inverse matching */
++
++/*
++ * Set types (flavours)
++ */
++#define IPSET_TYPE_IP 0 /* IP address type of set */
++#define IPSET_TYPE_PORT 1 /* Port type of set */
++
++/* Reserved keywords */
++#define IPSET_TOKEN_DEFAULT ":default:"
++#define IPSET_TOKEN_ALL ":all:"
++
++/* SO_IP_SET operation constants, and their request struct types.
++ *
++ * Operation ids:
++ * 0-99: commands with version checking
++ * 100-199: add/del/test/bind/unbind
++ * 200-299: list, save, restore
++ */
++
++/* Single shot operations:
++ * version, create, destroy, flush, rename and swap
++ *
++ * Sets are identified by name.
++ */
++
++#define IP_SET_REQ_STD \
++ unsigned op; \
++ unsigned version; \
++ char name[IP_SET_MAXNAMELEN]
++
++#define IP_SET_OP_CREATE 0x00000001 /* Create a new (empty) set */
++struct ip_set_req_create {
++ IP_SET_REQ_STD;
++ char typename[IP_SET_MAXNAMELEN];
++};
++
++#define IP_SET_OP_DESTROY 0x00000002 /* Remove a (empty) set */
++struct ip_set_req_std {
++ IP_SET_REQ_STD;
++};
++
++#define IP_SET_OP_FLUSH 0x00000003 /* Remove all IPs in a set */
++/* Uses ip_set_req_std */
++
++#define IP_SET_OP_RENAME 0x00000004 /* Rename a set */
++/* Uses ip_set_req_create */
++
++#define IP_SET_OP_SWAP 0x00000005 /* Swap two sets */
++/* Uses ip_set_req_create */
++
++union ip_set_name_index {
++ char name[IP_SET_MAXNAMELEN];
++ ip_set_id_t index;
++};
++
++#define IP_SET_OP_GET_BYNAME 0x00000006 /* Get set index by name */
++struct ip_set_req_get_set {
++ unsigned op;
++ unsigned version;
++ union ip_set_name_index set;
++};
++
++#define IP_SET_OP_GET_BYINDEX 0x00000007 /* Get set name by index */
++/* Uses ip_set_req_get_set */
++
++#define IP_SET_OP_VERSION 0x00000100 /* Ask kernel version */
++struct ip_set_req_version {
++ unsigned op;
++ unsigned version;
++};
++
++/* Double shots operations:
++ * add, del, test, bind and unbind.
++ *
++ * First we query the kernel to get the index and type of the target set,
++ * then issue the command. Validity of IP is checked in kernel in order
++ * to minimalize sockopt operations.
++ */
++
++/* Get minimal set data for add/del/test/bind/unbind IP */
++#define IP_SET_OP_ADT_GET 0x00000010 /* Get set and type */
++struct ip_set_req_adt_get {
++ unsigned op;
++ unsigned version;
++ union ip_set_name_index set;
++ char typename[IP_SET_MAXNAMELEN];
++};
++
++#define IP_SET_REQ_BYINDEX \
++ unsigned op; \
++ ip_set_id_t index;
++
++struct ip_set_req_adt {
++ IP_SET_REQ_BYINDEX;
++};
++
++#define IP_SET_OP_ADD_IP 0x00000101 /* Add an IP to a set */
++/* Uses ip_set_req_adt, with type specific addage */
++
++#define IP_SET_OP_DEL_IP 0x00000102 /* Remove an IP from a set */
++/* Uses ip_set_req_adt, with type specific addage */
++
++#define IP_SET_OP_TEST_IP 0x00000103 /* Test an IP in a set */
++/* Uses ip_set_req_adt, with type specific addage */
++
++#define IP_SET_OP_BIND_SET 0x00000104 /* Bind an IP to a set */
++/* Uses ip_set_req_bind, with type specific addage */
++struct ip_set_req_bind {
++ IP_SET_REQ_BYINDEX;
++ char binding[IP_SET_MAXNAMELEN];
++};
++
++#define IP_SET_OP_UNBIND_SET 0x00000105 /* Unbind an IP from a set */
++/* Uses ip_set_req_bind, with type speficic addage
++ * index = 0 means unbinding for all sets */
++
++#define IP_SET_OP_TEST_BIND_SET 0x00000106 /* Test binding an IP to a set */
++/* Uses ip_set_req_bind, with type specific addage */
++
++/* Multiple shots operations: list, save, restore.
++ *
++ * - check kernel version and query the max number of sets
++ * - get the basic information on all sets
++ * and size required for the next step
++ * - get actual set data: header, data, bindings
++ */
++
++/* Get max_sets and the index of a queried set
++ */
++#define IP_SET_OP_MAX_SETS 0x00000020
++struct ip_set_req_max_sets {
++ unsigned op;
++ unsigned version;
++ ip_set_id_t max_sets; /* max_sets */
++ ip_set_id_t sets; /* real number of sets */
++ union ip_set_name_index set; /* index of set if name used */
++};
++
++/* Get the id and name of the sets plus size for next step */
++#define IP_SET_OP_LIST_SIZE 0x00000201
++#define IP_SET_OP_SAVE_SIZE 0x00000202
++struct ip_set_req_setnames {
++ unsigned op;
++ ip_set_id_t index; /* set to list/save */
++ size_t size; /* size to get setdata/bindings */
++ /* followed by sets number of struct ip_set_name_list */
++};
++
++struct ip_set_name_list {
++ char name[IP_SET_MAXNAMELEN];
++ char typename[IP_SET_MAXNAMELEN];
++ ip_set_id_t index;
++ ip_set_id_t id;
++};
++
++/* The actual list operation */
++#define IP_SET_OP_LIST 0x00000203
++struct ip_set_req_list {
++ IP_SET_REQ_BYINDEX;
++ /* sets number of struct ip_set_list in reply */
++};
++
++struct ip_set_list {
++ ip_set_id_t index;
++ ip_set_id_t binding;
++ u_int32_t ref;
++ size_t header_size; /* Set header data of header_size */
++ size_t members_size; /* Set members data of members_size */
++ size_t bindings_size; /* Set bindings data of bindings_size */
++};
++
++struct ip_set_hash_list {
++ ip_set_ip_t ip;
++ ip_set_id_t binding;
++};
++
++/* The save operation */
++#define IP_SET_OP_SAVE 0x00000204
++/* Uses ip_set_req_list, in the reply replaced by
++ * sets number of struct ip_set_save plus a marker
++ * ip_set_save followed by ip_set_hash_save structures.
++ */
++struct ip_set_save {
++ ip_set_id_t index;
++ ip_set_id_t binding;
++ size_t header_size; /* Set header data of header_size */
++ size_t members_size; /* Set members data of members_size */
++};
++
++/* At restoring, ip == 0 means default binding for the given set: */
++struct ip_set_hash_save {
++ ip_set_ip_t ip;
++ ip_set_id_t id;
++ ip_set_id_t binding;
++};
++
++/* The restore operation */
++#define IP_SET_OP_RESTORE 0x00000205
++/* Uses ip_set_req_setnames followed by ip_set_restore structures
++ * plus a marker ip_set_restore, followed by ip_set_hash_save
++ * structures.
++ */
++struct ip_set_restore {
++ char name[IP_SET_MAXNAMELEN];
++ char typename[IP_SET_MAXNAMELEN];
++ ip_set_id_t index;
++ size_t header_size; /* Create data of header_size */
++ size_t members_size; /* Set members data of members_size */
++};
++
++static inline int bitmap_bytes(ip_set_ip_t a, ip_set_ip_t b)
++{
++ return 4 * ((((b - a + 8) / 8) + 3) / 4);
++}
++
++#ifdef __KERNEL__
++
++#define ip_set_printk(format, args...) \
++ do { \
++ printk("%s: %s: ", __FILE__, __FUNCTION__); \
++ printk(format "\n" , ## args); \
++ } while (0)
++
++#if defined(IP_SET_DEBUG)
++#define DP(format, args...) \
++ do { \
++ printk("%s: %s (DBG): ", __FILE__, __FUNCTION__);\
++ printk(format "\n" , ## args); \
++ } while (0)
++#define IP_SET_ASSERT(x) \
++ do { \
++ if (!(x)) \
++ printk("IP_SET_ASSERT: %s:%i(%s)\n", \
++ __FILE__, __LINE__, __FUNCTION__); \
++ } while (0)
++#else
++#define DP(format, args...)
++#define IP_SET_ASSERT(x)
++#endif
++
++struct ip_set;
++
++/*
++ * The ip_set_type definition - one per set type, e.g. "ipmap".
++ *
++ * Each individual set has a pointer, set->type, going to one
++ * of these structures. Function pointers inside the structure implement
++ * the real behaviour of the sets.
++ *
++ * If not mentioned differently, the implementation behind the function
++ * pointers of a set_type, is expected to return 0 if ok, and a negative
++ * errno (e.g. -EINVAL) on error.
++ */
++struct ip_set_type {
++ struct list_head list; /* next in list of set types */
++
++ /* test for IP in set (kernel: iptables -m set src|dst)
++ * return 0 if not in set, 1 if in set.
++ */
++ int (*testip_kernel) (struct ip_set *set,
++ const struct sk_buff * skb,
++ u_int32_t flags,
++ ip_set_ip_t *ip);
++
++ /* test for IP in set (userspace: ipset -T set IP)
++ * return 0 if not in set, 1 if in set.
++ */
++ int (*testip) (struct ip_set *set,
++ const void *data, size_t size,
++ ip_set_ip_t *ip);
++
++ /*
++ * Size of the data structure passed by when
++ * adding/deletin/testing an entry.
++ */
++ size_t reqsize;
++
++ /* Add IP into set (userspace: ipset -A set IP)
++ * Return -EEXIST if the address is already in the set,
++ * and -ERANGE if the address lies outside the set bounds.
++ * If the address was not already in the set, 0 is returned.
++ */
++ int (*addip) (struct ip_set *set,
++ const void *data, size_t size,
++ ip_set_ip_t *ip);
++
++ /* Add IP into set (kernel: iptables ... -j SET set src|dst)
++ * Return -EEXIST if the address is already in the set,
++ * and -ERANGE if the address lies outside the set bounds.
++ * If the address was not already in the set, 0 is returned.
++ */
++ int (*addip_kernel) (struct ip_set *set,
++ const struct sk_buff * skb,
++ u_int32_t flags,
++ ip_set_ip_t *ip);
++
++ /* remove IP from set (userspace: ipset -D set --entry x)
++ * Return -EEXIST if the address is NOT in the set,
++ * and -ERANGE if the address lies outside the set bounds.
++ * If the address really was in the set, 0 is returned.
++ */
++ int (*delip) (struct ip_set *set,
++ const void *data, size_t size,
++ ip_set_ip_t *ip);
++
++ /* remove IP from set (kernel: iptables ... -j SET --entry x)
++ * Return -EEXIST if the address is NOT in the set,
++ * and -ERANGE if the address lies outside the set bounds.
++ * If the address really was in the set, 0 is returned.
++ */
++ int (*delip_kernel) (struct ip_set *set,
++ const struct sk_buff * skb,
++ u_int32_t flags,
++ ip_set_ip_t *ip);
++
++ /* new set creation - allocated type specific items
++ */
++ int (*create) (struct ip_set *set,
++ const void *data, size_t size);
++
++ /* retry the operation after successfully tweaking the set
++ */
++ int (*retry) (struct ip_set *set);
++
++ /* set destruction - free type specific items
++ * There is no return value.
++ * Can be called only when child sets are destroyed.
++ */
++ void (*destroy) (struct ip_set *set);
++
++ /* set flushing - reset all bits in the set, or something similar.
++ * There is no return value.
++ */
++ void (*flush) (struct ip_set *set);
++
++ /* Listing: size needed for header
++ */
++ size_t header_size;
++
++ /* Listing: Get the header
++ *
++ * Fill in the information in "data".
++ * This function is always run after list_header_size() under a
++ * writelock on the set. Therefor is the length of "data" always
++ * correct.
++ */
++ void (*list_header) (const struct ip_set *set,
++ void *data);
++
++ /* Listing: Get the size for the set members
++ */
++ int (*list_members_size) (const struct ip_set *set);
++
++ /* Listing: Get the set members
++ *
++ * Fill in the information in "data".
++ * This function is always run after list_member_size() under a
++ * writelock on the set. Therefor is the length of "data" always
++ * correct.
++ */
++ void (*list_members) (const struct ip_set *set,
++ void *data);
++
++ char typename[IP_SET_MAXNAMELEN];
++ char typecode;
++ int protocol_version;
++
++ /* Set this to THIS_MODULE if you are a module, otherwise NULL */
++ struct module *me;
++};
++
++extern int ip_set_register_set_type(struct ip_set_type *set_type);
++extern void ip_set_unregister_set_type(struct ip_set_type *set_type);
++
++/* A generic ipset */
++struct ip_set {
++ char name[IP_SET_MAXNAMELEN]; /* the name of the set */
++ rwlock_t lock; /* lock for concurrency control */
++ ip_set_id_t id; /* set id for swapping */
++ ip_set_id_t binding; /* default binding for the set */
++ atomic_t ref; /* in kernel and in hash references */
++ struct ip_set_type *type; /* the set types */
++ void *data; /* pooltype specific data */
++};
++
++/* Structure to bind set elements to sets */
++struct ip_set_hash {
++ struct list_head list; /* list of clashing entries in hash */
++ ip_set_ip_t ip; /* ip from set */
++ ip_set_id_t id; /* set id */
++ ip_set_id_t binding; /* set we bind the element to */
++};
++
++/* register and unregister set references */
++extern ip_set_id_t ip_set_get_byname(const char name[IP_SET_MAXNAMELEN]);
++extern ip_set_id_t ip_set_get_byindex(ip_set_id_t id);
++extern void ip_set_put(ip_set_id_t id);
++
++/* API for iptables set match, and SET target */
++extern void ip_set_addip_kernel(ip_set_id_t id,
++ const struct sk_buff *skb,
++ const u_int32_t *flags);
++extern void ip_set_delip_kernel(ip_set_id_t id,
++ const struct sk_buff *skb,
++ const u_int32_t *flags);
++extern int ip_set_testip_kernel(ip_set_id_t id,
++ const struct sk_buff *skb,
++ const u_int32_t *flags);
++
++#endif /* __KERNEL__ */
++
++#endif /*_IP_SET_H*/
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_set_iphash.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_iphash.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_set_iphash.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_iphash.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,30 @@
++#ifndef __IP_SET_IPHASH_H
++#define __IP_SET_IPHASH_H
++
++#include <linux/netfilter_ipv4/ip_set.h>
++
++#define SETTYPE_NAME "iphash"
++#define MAX_RANGE 0x0000FFFF
++
++struct ip_set_iphash {
++ ip_set_ip_t *members; /* the iphash proper */
++ uint32_t initval; /* initval for jhash_1word */
++ uint32_t prime; /* prime for double hashing */
++ uint32_t hashsize; /* hash size */
++ uint16_t probes; /* max number of probes */
++ uint16_t resize; /* resize factor in percent */
++ ip_set_ip_t netmask; /* netmask */
++};
++
++struct ip_set_req_iphash_create {
++ uint32_t hashsize;
++ uint16_t probes;
++ uint16_t resize;
++ ip_set_ip_t netmask;
++};
++
++struct ip_set_req_iphash {
++ ip_set_ip_t ip;
++};
++
++#endif /* __IP_SET_IPHASH_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_set_ipmap.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_ipmap.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_set_ipmap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_ipmap.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,56 @@
++#ifndef __IP_SET_IPMAP_H
++#define __IP_SET_IPMAP_H
++
++#include <linux/netfilter_ipv4/ip_set.h>
++
++#define SETTYPE_NAME "ipmap"
++#define MAX_RANGE 0x0000FFFF
++
++struct ip_set_ipmap {
++ void *members; /* the ipmap proper */
++ ip_set_ip_t first_ip; /* host byte order, included in range */
++ ip_set_ip_t last_ip; /* host byte order, included in range */
++ ip_set_ip_t netmask; /* subnet netmask */
++ ip_set_ip_t sizeid; /* size of set in IPs */
++ u_int16_t hosts; /* number of hosts in a subnet */
++};
++
++struct ip_set_req_ipmap_create {
++ ip_set_ip_t from;
++ ip_set_ip_t to;
++ ip_set_ip_t netmask;
++};
++
++struct ip_set_req_ipmap {
++ ip_set_ip_t ip;
++};
++
++unsigned int
++mask_to_bits(ip_set_ip_t mask)
++{
++ unsigned int bits = 32;
++ ip_set_ip_t maskaddr;
++
++ if (mask == 0xFFFFFFFF)
++ return bits;
++
++ maskaddr = 0xFFFFFFFE;
++ while (--bits >= 0 && maskaddr != mask)
++ maskaddr <<= 1;
++
++ return bits;
++}
++
++ip_set_ip_t
++range_to_mask(ip_set_ip_t from, ip_set_ip_t to, unsigned int *bits)
++{
++ ip_set_ip_t mask = 0xFFFFFFFE;
++
++ *bits = 32;
++ while (--(*bits) >= 0 && mask && (to & mask) != from)
++ mask <<= 1;
++
++ return mask;
++}
++
++#endif /* __IP_SET_IPMAP_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_set_iptree.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_iptree.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_set_iptree.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_iptree.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,39 @@
++#ifndef __IP_SET_IPTREE_H
++#define __IP_SET_IPTREE_H
++
++#include <linux/netfilter_ipv4/ip_set.h>
++
++#define SETTYPE_NAME "iptree"
++#define MAX_RANGE 0x0000FFFF
++
++struct ip_set_iptreed {
++ unsigned long expires[255]; /* x.x.x.ADDR */
++};
++
++struct ip_set_iptreec {
++ struct ip_set_iptreed *tree[255]; /* x.x.ADDR.* */
++};
++
++struct ip_set_iptreeb {
++ struct ip_set_iptreec *tree[255]; /* x.ADDR.*.* */
++};
++
++struct ip_set_iptree {
++ unsigned int timeout;
++ unsigned int gc_interval;
++#ifdef __KERNEL__
++ struct timer_list gc;
++ struct ip_set_iptreeb *tree[255]; /* ADDR.*.*.* */
++#endif
++};
++
++struct ip_set_req_iptree_create {
++ unsigned int timeout;
++};
++
++struct ip_set_req_iptree {
++ ip_set_ip_t ip;
++ unsigned int timeout;
++};
++
++#endif /* __IP_SET_IPTREE_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_set_jhash.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_jhash.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_set_jhash.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_jhash.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,148 @@
++#ifndef _LINUX_IPSET_JHASH_H
++#define _LINUX_IPSET_JHASH_H
++
++/* This is a copy of linux/jhash.h but the types u32/u8 are changed
++ * to __u32/__u8 so that the header file can be included into
++ * userspace code as well. Jozsef Kadlecsik (kadlec@blackhole.kfki.hu)
++ */
++
++/* jhash.h: Jenkins hash support.
++ *
++ * Copyright (C) 1996 Bob Jenkins (bob_jenkins@burtleburtle.net)
++ *
++ * http://burtleburtle.net/bob/hash/
++ *
++ * These are the credits from Bob's sources:
++ *
++ * lookup2.c, by Bob Jenkins, December 1996, Public Domain.
++ * hash(), hash2(), hash3, and mix() are externally useful functions.
++ * Routines to test the hash are included if SELF_TEST is defined.
++ * You can use this free for any purpose. It has no warranty.
++ *
++ * Copyright (C) 2003 David S. Miller (davem@redhat.com)
++ *
++ * I've modified Bob's hash to be useful in the Linux kernel, and
++ * any bugs present are surely my fault. -DaveM
++ */
++
++/* NOTE: Arguments are modified. */
++#define __jhash_mix(a, b, c) \
++{ \
++ a -= b; a -= c; a ^= (c>>13); \
++ b -= c; b -= a; b ^= (a<<8); \
++ c -= a; c -= b; c ^= (b>>13); \
++ a -= b; a -= c; a ^= (c>>12); \
++ b -= c; b -= a; b ^= (a<<16); \
++ c -= a; c -= b; c ^= (b>>5); \
++ a -= b; a -= c; a ^= (c>>3); \
++ b -= c; b -= a; b ^= (a<<10); \
++ c -= a; c -= b; c ^= (b>>15); \
++}
++
++/* The golden ration: an arbitrary value */
++#define JHASH_GOLDEN_RATIO 0x9e3779b9
++
++/* The most generic version, hashes an arbitrary sequence
++ * of bytes. No alignment or length assumptions are made about
++ * the input key.
++ */
++static inline __u32 jhash(void *key, __u32 length, __u32 initval)
++{
++ __u32 a, b, c, len;
++ __u8 *k = key;
++
++ len = length;
++ a = b = JHASH_GOLDEN_RATIO;
++ c = initval;
++
++ while (len >= 12) {
++ a += (k[0] +((__u32)k[1]<<8) +((__u32)k[2]<<16) +((__u32)k[3]<<24));
++ b += (k[4] +((__u32)k[5]<<8) +((__u32)k[6]<<16) +((__u32)k[7]<<24));
++ c += (k[8] +((__u32)k[9]<<8) +((__u32)k[10]<<16)+((__u32)k[11]<<24));
++
++ __jhash_mix(a,b,c);
++
++ k += 12;
++ len -= 12;
++ }
++
++ c += length;
++ switch (len) {
++ case 11: c += ((__u32)k[10]<<24);
++ case 10: c += ((__u32)k[9]<<16);
++ case 9 : c += ((__u32)k[8]<<8);
++ case 8 : b += ((__u32)k[7]<<24);
++ case 7 : b += ((__u32)k[6]<<16);
++ case 6 : b += ((__u32)k[5]<<8);
++ case 5 : b += k[4];
++ case 4 : a += ((__u32)k[3]<<24);
++ case 3 : a += ((__u32)k[2]<<16);
++ case 2 : a += ((__u32)k[1]<<8);
++ case 1 : a += k[0];
++ };
++
++ __jhash_mix(a,b,c);
++
++ return c;
++}
++
++/* A special optimized version that handles 1 or more of __u32s.
++ * The length parameter here is the number of __u32s in the key.
++ */
++static inline __u32 jhash2(__u32 *k, __u32 length, __u32 initval)
++{
++ __u32 a, b, c, len;
++
++ a = b = JHASH_GOLDEN_RATIO;
++ c = initval;
++ len = length;
++
++ while (len >= 3) {
++ a += k[0];
++ b += k[1];
++ c += k[2];
++ __jhash_mix(a, b, c);
++ k += 3; len -= 3;
++ }
++
++ c += length * 4;
++
++ switch (len) {
++ case 2 : b += k[1];
++ case 1 : a += k[0];
++ };
++
++ __jhash_mix(a,b,c);
++
++ return c;
++}
++
++
++/* A special ultra-optimized versions that knows they are hashing exactly
++ * 3, 2 or 1 word(s).
++ *
++ * NOTE: In partilar the "c += length; __jhash_mix(a,b,c);" normally
++ * done at the end is not done here.
++ */
++static inline __u32 jhash_3words(__u32 a, __u32 b, __u32 c, __u32 initval)
++{
++ a += JHASH_GOLDEN_RATIO;
++ b += JHASH_GOLDEN_RATIO;
++ c += initval;
++
++ __jhash_mix(a, b, c);
++
++ return c;
++}
++
++static inline __u32 jhash_2words(__u32 a, __u32 b, __u32 initval)
++{
++ return jhash_3words(a, b, 0, initval);
++}
++
++static inline __u32 jhash_1word(__u32 a, __u32 initval)
++{
++ return jhash_3words(a, 0, 0, initval);
++}
++
++#endif /* _LINUX_IPSET_JHASH_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_set_macipmap.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_macipmap.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_set_macipmap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_macipmap.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,38 @@
++#ifndef __IP_SET_MACIPMAP_H
++#define __IP_SET_MACIPMAP_H
++
++#include <linux/netfilter_ipv4/ip_set.h>
++
++#define SETTYPE_NAME "macipmap"
++#define MAX_RANGE 0x0000FFFF
++
++/* general flags */
++#define IPSET_MACIP_MATCHUNSET 1
++
++/* per ip flags */
++#define IPSET_MACIP_ISSET 1
++
++struct ip_set_macipmap {
++ void *members; /* the macipmap proper */
++ ip_set_ip_t first_ip; /* host byte order, included in range */
++ ip_set_ip_t last_ip; /* host byte order, included in range */
++ u_int32_t flags;
++};
++
++struct ip_set_req_macipmap_create {
++ ip_set_ip_t from;
++ ip_set_ip_t to;
++ u_int32_t flags;
++};
++
++struct ip_set_req_macipmap {
++ ip_set_ip_t ip;
++ unsigned char ethernet[ETH_ALEN];
++};
++
++struct ip_set_macip {
++ unsigned short flags;
++ unsigned char ethernet[ETH_ALEN];
++};
++
++#endif /* __IP_SET_MACIPMAP_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_set_malloc.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_malloc.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_set_malloc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_malloc.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,27 @@
++#ifndef _IP_SET_MALLOC_H
++#define _IP_SET_MALLOC_H
++
++#ifdef __KERNEL__
++
++/* Memory allocation and deallocation */
++static size_t max_malloc_size = 131072; /* Guaranteed: slab.c */
++
++static inline void * ip_set_malloc(size_t bytes)
++{
++ if (bytes > max_malloc_size)
++ return vmalloc(bytes);
++ else
++ return kmalloc(bytes, GFP_KERNEL);
++}
++
++static inline void ip_set_free(void * data, size_t bytes)
++{
++ if (bytes > max_malloc_size)
++ vfree(data);
++ else
++ kfree(data);
++}
++
++#endif /* __KERNEL__ */
++
++#endif /*_IP_SET_MALLOC_H*/
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_set_nethash.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_nethash.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_set_nethash.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_nethash.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,55 @@
++#ifndef __IP_SET_NETHASH_H
++#define __IP_SET_NETHASH_H
++
++#include <linux/netfilter_ipv4/ip_set.h>
++
++#define SETTYPE_NAME "nethash"
++#define MAX_RANGE 0x0000FFFF
++
++struct ip_set_nethash {
++ ip_set_ip_t *members; /* the nethash proper */
++ uint32_t initval; /* initval for jhash_1word */
++ uint32_t prime; /* prime for double hashing */
++ uint32_t hashsize; /* hash size */
++ uint16_t probes; /* max number of probes */
++ uint16_t resize; /* resize factor in percent */
++ unsigned char cidr[30]; /* CIDR sizes */
++};
++
++struct ip_set_req_nethash_create {
++ uint32_t hashsize;
++ uint16_t probes;
++ uint16_t resize;
++};
++
++struct ip_set_req_nethash {
++ ip_set_ip_t ip;
++ unsigned char cidr;
++};
++
++static unsigned char shifts[] = {255, 253, 249, 241, 225, 193, 129, 1};
++
++static inline ip_set_ip_t
++pack(ip_set_ip_t ip, unsigned char cidr)
++{
++ ip_set_ip_t addr, *paddr = &addr;
++ unsigned char n, t, *a;
++
++ addr = htonl(ip & (0xFFFFFFFF << (32 - (cidr))));
++#ifdef __KERNEL__
++ DP("ip:%u.%u.%u.%u/%u", NIPQUAD(addr), cidr);
++#endif
++ n = cidr / 8;
++ t = cidr % 8;
++ a = &((unsigned char *)paddr)[n];
++ *a = *a /(1 << (8 - t)) + shifts[t];
++#ifdef __KERNEL__
++ DP("n: %u, t: %u, a: %u", n, t, *a);
++ DP("ip:%u.%u.%u.%u/%u, %u.%u.%u.%u",
++ HIPQUAD(ip), cidr, NIPQUAD(addr));
++#endif
++
++ return ntohl(addr);
++}
++
++#endif /* __IP_SET_NETHASH_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_set_portmap.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_portmap.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_set_portmap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_portmap.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,25 @@
++#ifndef __IP_SET_PORTMAP_H
++#define __IP_SET_PORTMAP_H
++
++#include <linux/netfilter_ipv4/ip_set.h>
++
++#define SETTYPE_NAME "portmap"
++#define MAX_RANGE 0x0000FFFF
++#define INVALID_PORT (MAX_RANGE + 1)
++
++struct ip_set_portmap {
++ void *members; /* the portmap proper */
++ ip_set_ip_t first_port; /* host byte order, included in range */
++ ip_set_ip_t last_port; /* host byte order, included in range */
++};
++
++struct ip_set_req_portmap_create {
++ ip_set_ip_t from;
++ ip_set_ip_t to;
++};
++
++struct ip_set_req_portmap {
++ ip_set_ip_t port;
++};
++
++#endif /* __IP_SET_PORTMAP_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ip_set_prime.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_prime.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ip_set_prime.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ip_set_prime.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,34 @@
++#ifndef __IP_SET_PRIME_H
++#define __IP_SET_PRIME_H
++
++static inline unsigned make_prime_bound(unsigned nr)
++{
++ unsigned long long nr64 = nr;
++ unsigned long long x = 1;
++ nr = 1;
++ while (x <= nr64) { x <<= 2; nr <<= 1; }
++ return nr;
++}
++
++static inline int make_prime_check(unsigned nr)
++{
++ unsigned x = 3;
++ unsigned b = make_prime_bound(nr);
++ while (x <= b) {
++ if (0 == (nr % x)) return 0;
++ x += 2;
++ }
++ return 1;
++}
++
++static unsigned make_prime(unsigned nr)
++{
++ if (0 == (nr & 1)) nr--;
++ while (nr > 1) {
++ if (make_prime_check(nr)) return nr;
++ nr -= 2;
++ }
++ return 2;
++}
++
++#endif /* __IP_SET_PRIME_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ipt_condition.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_condition.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ipt_condition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_condition.h 2006-03-13 18:55:58.000000000 +0100
+@@ -0,0 +1,11 @@
++#ifndef __IPT_CONDITION_MATCH__
++#define __IPT_CONDITION_MATCH__
++
++#define CONDITION_NAME_LEN 32
++
++struct condition_info {
++ char name[CONDITION_NAME_LEN];
++ int invert;
++};
++
++#endif
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ipt_connbytes.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_connbytes.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ipt_connbytes.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_connbytes.h 2006-03-13 18:55:58.000000000 +0100
+@@ -0,0 +1,25 @@
++#ifndef _IPT_CONNBYTES_H
++#define _IPT_CONNBYTES_H
++enum ipt_connbytes_what {
++ IPT_CONNBYTES_PKTS,
++ IPT_CONNBYTES_BYTES,
++ IPT_CONNBYTES_AVGPKT,
++};
++
++enum ipt_connbytes_direction {
++ IPT_CONNBYTES_DIR_ORIGINAL,
++ IPT_CONNBYTES_DIR_REPLY,
++ IPT_CONNBYTES_DIR_BOTH,
++};
++
++struct ipt_connbytes_info
++{
++ struct {
++ u_int64_t from; /* count to be matched */
++ u_int64_t to; /* count to be matched */
++ } count;
++ u_int8_t what; /* ipt_connbytes_what */
++ u_int8_t direction; /* ipt_connbytes_direction */
++};
++
++#endif
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ipt_connmark.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_connmark.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ipt_connmark.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_connmark.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,18 @@
++#ifndef _IPT_CONNMARK_H
++#define _IPT_CONNMARK_H
++
++/* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com>
++ * by Henrik Nordstrom <hno@marasystems.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ */
++
++struct ipt_connmark_info {
++ unsigned long mark, mask;
++ u_int8_t invert;
++};
++
++#endif /*_IPT_CONNMARK_H*/
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ipt_CONNMARK.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_CONNMARK.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ipt_CONNMARK.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_CONNMARK.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,25 @@
++#ifndef _IPT_CONNMARK_H_target
++#define _IPT_CONNMARK_H_target
++
++/* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com>
++ * by Henrik Nordstrom <hno@marasystems.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ */
++
++enum {
++ IPT_CONNMARK_SET = 0,
++ IPT_CONNMARK_SAVE,
++ IPT_CONNMARK_RESTORE
++};
++
++struct ipt_connmark_target_info {
++ unsigned long mark;
++ unsigned long mask;
++ u_int8_t mode;
++};
++
++#endif /*_IPT_CONNMARK_H_target*/
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ipt_IMQ.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_IMQ.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ipt_IMQ.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_IMQ.h 2006-03-13 18:55:58.000000000 +0100
+@@ -0,0 +1,8 @@
++#ifndef _IPT_IMQ_H
++#define _IPT_IMQ_H
++
++struct ipt_imq_info {
++ unsigned int todev; /* target imq device */
++};
++
++#endif /* _IPT_IMQ_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ipt_ipp2p.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_ipp2p.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ipt_ipp2p.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_ipp2p.h 2006-03-13 18:55:56.000000000 +0100
+@@ -0,0 +1,29 @@
++#ifndef __IPT_IPP2P_H
++#define __IPT_IPP2P_H
++#define IPP2P_VERSION "0.7.4"
++
++struct ipt_p2p_info {
++ int cmd;
++ int debug;
++};
++
++#endif //__IPT_IPP2P_H
++
++#define SHORT_HAND_IPP2P 1 /* --ipp2p switch*/
++#define SHORT_HAND_DATA 4 /* --ipp2p-data switch*/
++#define SHORT_HAND_NONE 5 /* no short hand*/
++
++#define IPP2P_EDK 2
++#define IPP2P_DATA_KAZAA 8
++#define IPP2P_DATA_EDK 16
++#define IPP2P_DATA_DC 32
++#define IPP2P_DC 64
++#define IPP2P_DATA_GNU 128
++#define IPP2P_GNU 256
++#define IPP2P_KAZAA 512
++#define IPP2P_BIT 1024
++#define IPP2P_APPLE 2048
++#define IPP2P_SOUL 4096
++#define IPP2P_WINMX 8192
++#define IPP2P_ARES 16384
++
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ipt_layer7.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_layer7.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ipt_layer7.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_layer7.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,27 @@
++/*
++ By Matthew Strait <quadong@users.sf.net>, Dec 2003.
++ http://l7-filter.sf.net
++
++ This program is free software; you can redistribute it and/or
++ modify it under the terms of the GNU General Public License
++ as published by the Free Software Foundation; either version
++ 2 of the License, or (at your option) any later version.
++ http://www.gnu.org/licenses/gpl.txt
++*/
++
++#ifndef _IPT_LAYER7_H
++#define _IPT_LAYER7_H
++
++#define MAX_PATTERN_LEN 8192
++#define MAX_PROTOCOL_LEN 256
++
++typedef char *(*proc_ipt_search) (char *, char, char *);
++
++struct ipt_layer7_info {
++ char protocol[MAX_PROTOCOL_LEN];
++ char invert:1;
++ char pattern[MAX_PATTERN_LEN];
++ char pkt;
++};
++
++#endif /* _IPT_LAYER7_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ipt_multiport.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_multiport.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ipt_multiport.h 2000-12-11 22:31:30.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_multiport.h 2006-03-13 18:55:58.000000000 +0100
+@@ -11,11 +11,12 @@
+
+ #define IPT_MULTI_PORTS 15
+
+-/* Must fit inside union ipt_matchinfo: 16 bytes */
+-struct ipt_multiport
++struct ipt_multiport_v1
+ {
+ u_int8_t flags; /* Type of comparison */
+ u_int8_t count; /* Number of ports */
+ u_int16_t ports[IPT_MULTI_PORTS]; /* Ports */
++ u_int8_t pflags[IPT_MULTI_PORTS]; /* Port flags */
++ u_int8_t invert; /* Invert flag */
+ };
+ #endif /*_IPT_MULTIPORT_H*/
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ipt_quota.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_quota.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ipt_quota.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_quota.h 2006-03-13 18:55:58.000000000 +0100
+@@ -0,0 +1,12 @@
++#ifndef _IPT_QUOTA_H
++#define _IPT_QUOTA_H
++
++/* print debug info in both kernel/netfilter module & iptable library */
++//#define DEBUG_IPT_QUOTA
++
++struct ipt_quota_info {
++ u_int64_t quota;
++ struct ipt_quota_info *master;
++};
++
++#endif /*_IPT_QUOTA_H*/
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ipt_set.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_set.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ipt_set.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_set.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,21 @@
++#ifndef _IPT_SET_H
++#define _IPT_SET_H
++
++#include <linux/netfilter_ipv4/ip_set.h>
++
++struct ipt_set_info {
++ ip_set_id_t index;
++ u_int32_t flags[IP_SET_MAX_BINDINGS + 1];
++};
++
++/* match info */
++struct ipt_set_info_match {
++ struct ipt_set_info match_set;
++};
++
++struct ipt_set_info_target {
++ struct ipt_set_info add_set;
++ struct ipt_set_info del_set;
++};
++
++#endif /*_IPT_SET_H*/
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ipt_string.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_string.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ipt_string.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_string.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,18 @@
++#ifndef _IPT_STRING_H
++#define _IPT_STRING_H
++
++#define IPT_STRING_MAX_PATTERN_SIZE 128
++#define IPT_STRING_MAX_ALGO_NAME_SIZE 16
++
++struct ipt_string_info
++{
++ u_int16_t from_offset;
++ u_int16_t to_offset;
++ char algo[IPT_STRING_MAX_ALGO_NAME_SIZE];
++ char pattern[IPT_STRING_MAX_PATTERN_SIZE];
++ u_int8_t patlen;
++ u_int8_t invert;
++ struct ts_config __attribute__((aligned(8))) *config;
++};
++
++#endif /*_IPT_STRING_H*/
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ipt_time.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_time.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ipt_time.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_time.h 2006-03-13 18:55:58.000000000 +0100
+@@ -0,0 +1,15 @@
++#ifndef __ipt_time_h_included__
++#define __ipt_time_h_included__
++
++
++struct ipt_time_info {
++ u_int8_t days_match; /* 1 bit per day. -SMTWTFS */
++ u_int16_t time_start; /* 0 < time_start < 23*60+59 = 1439 */
++ u_int16_t time_stop; /* 0:0 < time_stat < 23:59 */
++ u_int8_t kerneltime; /* ignore skb time (and use kerneltime) or not. */
++ time_t date_start;
++ time_t date_stop;
++};
++
++
++#endif /* __ipt_time_h_included__ */
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv4/ipt_TTL.h linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_TTL.h
+--- linux-2.4.32/include/linux/netfilter_ipv4/ipt_TTL.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv4/ipt_TTL.h 2006-03-13 18:55:57.000000000 +0100
+@@ -0,0 +1,21 @@
++/* TTL modification module for IP tables
++ * (C) 2000 by Harald Welte <laforge@gnumonks.org> */
++
++#ifndef _IPT_TTL_H
++#define _IPT_TTL_H
++
++enum {
++ IPT_TTL_SET = 0,
++ IPT_TTL_INC,
++ IPT_TTL_DEC
++};
++
++#define IPT_TTL_MAXMODE IPT_TTL_DEC
++
++struct ipt_TTL_info {
++ u_int8_t mode;
++ u_int8_t ttl;
++};
++
++
++#endif
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv6/ip6t_condition.h linux-2.4.32.patched/include/linux/netfilter_ipv6/ip6t_condition.h
+--- linux-2.4.32/include/linux/netfilter_ipv6/ip6t_condition.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv6/ip6t_condition.h 2006-03-13 18:55:58.000000000 +0100
+@@ -0,0 +1,11 @@
++#ifndef __IP6T_CONDITION_MATCH__
++#define __IP6T_CONDITION_MATCH__
++
++#define CONDITION6_NAME_LEN 32
++
++struct condition6_info {
++ char name[CONDITION6_NAME_LEN];
++ int invert;
++};
++
++#endif
+diff -Nur linux-2.4.32/include/linux/netfilter_ipv6/ip6t_IMQ.h linux-2.4.32.patched/include/linux/netfilter_ipv6/ip6t_IMQ.h
+--- linux-2.4.32/include/linux/netfilter_ipv6/ip6t_IMQ.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_ipv6/ip6t_IMQ.h 2006-03-13 18:55:58.000000000 +0100
+@@ -0,0 +1,8 @@
++#ifndef _IP6T_IMQ_H
++#define _IP6T_IMQ_H
++
++struct ip6t_imq_info {
++ unsigned int todev; /* target imq device */
++};
++
++#endif /* _IP6T_IMQ_H */
+diff -Nur linux-2.4.32/include/linux/netfilter_mime.h linux-2.4.32.patched/include/linux/netfilter_mime.h
+--- linux-2.4.32/include/linux/netfilter_mime.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/netfilter_mime.h 2006-03-13 19:01:42.000000000 +0100
+@@ -0,0 +1,90 @@
++/*
++ * MIME functions for netfilter modules. This file provides implementations
++ * for basic MIME parsing. MIME headers are used in many protocols, such as
++ * HTTP, RTSP, SIP, etc.
++ *
++ * gcc will warn for defined but unused functions, so we only include the
++ * functions requested. The following macros are used:
++ * NF_NEED_MIME_NEXTLINE nf_mime_nextline()
++ */
++#ifndef _NETFILTER_MIME_H
++#define _NETFILTER_MIME_H
++
++/* Only include these functions for kernel code. */
++#ifdef __KERNEL__
++
++#include <linux/kernel.h>
++#include <linux/ctype.h>
++
++/*
++ * Given a buffer and length, advance to the next line and mark the current
++ * line. If the current line is empty, *plinelen will be set to zero. If
++ * not, it will be set to the actual line length (including CRLF).
++ *
++ * 'line' in this context means logical line (includes LWS continuations).
++ * Returns 1 on success, 0 on failure.
++ */
++#ifdef NF_NEED_MIME_NEXTLINE
++static int
++nf_mime_nextline(char* p, uint len, uint* poff, uint* plineoff, uint* plinelen)
++{
++ uint off = *poff;
++ uint physlen = 0;
++ int is_first_line = 1;
++
++ if (off >= len)
++ {
++ return 0;
++ }
++
++ do
++ {
++ while (p[off] != '\n')
++ {
++ if (len-off <= 1)
++ {
++ return 0;
++ }
++
++ physlen++;
++ off++;
++ }
++
++ /* if we saw a crlf, physlen needs adjusted */
++ if (physlen > 0 && p[off] == '\n' && p[off-1] == '\r')
++ {
++ physlen--;
++ }
++
++ /* advance past the newline */
++ off++;
++
++ /* check for an empty line */
++ if (physlen == 0)
++ {
++ break;
++ }
++
++ /* check for colon on the first physical line */
++ if (is_first_line)
++ {
++ is_first_line = 0;
++ if (memchr(p+(*poff), ':', physlen) == NULL)
++ {
++ return 0;
++ }
++ }
++ }
++ while (p[off] == ' ' || p[off] == '\t');
++
++ *plineoff = *poff;
++ *plinelen = (physlen == 0) ? 0 : (off - *poff);
++ *poff = off;
++
++ return 1;
++}
++#endif /* NF_NEED_MIME_NEXTLINE */
++
++#endif /* __KERNEL__ */
++
++#endif /* _NETFILTER_MIME_H */
+diff -Nur linux-2.4.32/include/linux/pci_ids.h linux-2.4.32.patched/include/linux/pci_ids.h
+--- linux-2.4.32/include/linux/pci_ids.h 2005-11-16 20:12:54.000000000 +0100
++++ linux-2.4.32.patched/include/linux/pci_ids.h 2006-03-13 18:55:59.000000000 +0100
+@@ -1741,6 +1741,7 @@
+ #define PCI_DEVICE_ID_TIGON3_5901_2 0x170e
+ #define PCI_DEVICE_ID_BCM4401 0x4401
+ #define PCI_DEVICE_ID_BCM4401B0 0x4402
++#define PCI_DEVICE_ID_BCM4713 0x4713
+
+ #define PCI_VENDOR_ID_ENE 0x1524
+ #define PCI_DEVICE_ID_ENE_1211 0x1211
+diff -Nur linux-2.4.32/include/linux/ppp-comp.h linux-2.4.32.patched/include/linux/ppp-comp.h
+--- linux-2.4.32/include/linux/ppp-comp.h 1999-08-06 19:44:11.000000000 +0200
++++ linux-2.4.32.patched/include/linux/ppp-comp.h 2006-03-13 18:55:55.000000000 +0100
+@@ -28,7 +28,7 @@
+ */
+
+ /*
+- * ==FILEVERSION 980319==
++ * ==FILEVERSION 20040509==
+ *
+ * NOTE TO MAINTAINERS:
+ * If you modify this file at all, please set the above date.
+@@ -78,7 +78,7 @@
+
+ /* Compress a packet */
+ int (*compress) (void *state, unsigned char *rptr,
+- unsigned char *obuf, int isize, int osize);
++ unsigned char *obuf, int isize, int osize);
+
+ /* Return compression statistics */
+ void (*comp_stat) (void *state, struct compstat *stats);
+@@ -99,7 +99,7 @@
+
+ /* Decompress a packet. */
+ int (*decompress) (void *state, unsigned char *ibuf, int isize,
+- unsigned char *obuf, int osize);
++ unsigned char *obuf, int osize);
+
+ /* Update state for an incompressible packet received */
+ void (*incomp) (void *state, unsigned char *ibuf, int icnt);
+@@ -187,6 +187,42 @@
+ #define DEFLATE_CHK_SEQUENCE 0
+
+ /*
++ * Definitions for MPPE/MPPC.
++ */
++
++#define CI_MPPE 18 /* config option for MPPE */
++#define CILEN_MPPE 6 /* length of config option */
++
++#define MPPE_OVHD 4 /* MPPE overhead */
++#define MPPE_MAX_KEY_LEN 16 /* largest key length (128-bit) */
++
++#define MPPE_STATELESS 0x01 /* configuration bit H */
++#define MPPE_40BIT 0x20 /* configuration bit L */
++#define MPPE_56BIT 0x80 /* configuration bit M */
++#define MPPE_128BIT 0x40 /* configuration bit S */
++#define MPPE_MPPC 0x01 /* configuration bit C */
++
++/*
++ * Definitions for Stac LZS.
++ */
++
++#define CI_LZS 17 /* config option for Stac LZS */
++#define CILEN_LZS 5 /* length of config option */
++
++#define LZS_OVHD 4 /* max. LZS overhead */
++#define LZS_HIST_LEN 2048 /* LZS history size */
++#define LZS_MAX_CCOUNT 0x0FFF /* max. coherency counter value */
++
++#define LZS_MODE_NONE 0
++#define LZS_MODE_LCB 1
++#define LZS_MODE_CRC 2
++#define LZS_MODE_SEQ 3
++#define LZS_MODE_EXT 4
++
++#define LZS_EXT_BIT_FLUSHED 0x80 /* bit A */
++#define LZS_EXT_BIT_COMP 0x20 /* bit C */
++
++/*
+ * Definitions for other, as yet unsupported, compression methods.
+ */
+
+diff -Nur linux-2.4.32/include/linux/sched.h linux-2.4.32.patched/include/linux/sched.h
+--- linux-2.4.32/include/linux/sched.h 2005-01-19 15:10:12.000000000 +0100
++++ linux-2.4.32.patched/include/linux/sched.h 2006-03-13 18:57:11.000000000 +0100
+@@ -617,6 +617,10 @@
+ extern int in_group_p(gid_t);
+ extern int in_egroup_p(gid_t);
+
++extern ATTRIB_NORET void cpu_idle(void);
++
++extern void release_task(struct task_struct * p);
++
+ extern void proc_caches_init(void);
+ extern void flush_signals(struct task_struct *);
+ extern void flush_signal_handlers(struct task_struct *);
+diff -Nur linux-2.4.32/include/linux/serial.h linux-2.4.32.patched/include/linux/serial.h
+--- linux-2.4.32/include/linux/serial.h 2002-08-03 02:39:45.000000000 +0200
++++ linux-2.4.32.patched/include/linux/serial.h 2006-03-13 18:57:18.000000000 +0100
+@@ -75,7 +75,8 @@
+ #define PORT_16654 11
+ #define PORT_16850 12
+ #define PORT_RSA 13 /* RSA-DV II/S card */
+-#define PORT_MAX 13
++#define PORT_SB1250 14
++#define PORT_MAX 14
+
+ #define SERIAL_IO_PORT 0
+ #define SERIAL_IO_HUB6 1
+diff -Nur linux-2.4.32/include/linux/skbuff.h linux-2.4.32.patched/include/linux/skbuff.h
+--- linux-2.4.32/include/linux/skbuff.h 2005-04-04 03:42:20.000000000 +0200
++++ linux-2.4.32.patched/include/linux/skbuff.h 2006-03-13 18:57:13.000000000 +0100
+@@ -93,6 +93,9 @@
+ struct nf_conntrack *master;
+ };
+ #endif
++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
++struct nf_info;
++#endif
+
+ struct sk_buff_head {
+ /* These two members must be first. */
+@@ -135,10 +138,6 @@
+ struct sock *sk; /* Socket we are owned by */
+ struct timeval stamp; /* Time we arrived */
+ struct net_device *dev; /* Device we arrived on/are leaving by */
+- struct net_device *real_dev; /* For support of point to point protocols
+- (e.g. 802.3ad) over bonding, we must save the
+- physical device that got the packet before
+- replacing skb->dev with the virtual device. */
+
+ /* Transport layer header */
+ union
+@@ -182,7 +181,7 @@
+ unsigned int len; /* Length of actual data */
+ unsigned int data_len;
+ unsigned int csum; /* Checksum */
+- unsigned char __unused, /* Dead field, may be reused */
++ unsigned char imq_flags, /* intermediate queueing device */
+ cloned, /* head may be cloned (check refcnt to be sure). */
+ pkt_type, /* Packet class */
+ ip_summed; /* Driver fed us an IP checksum */
+@@ -219,6 +218,13 @@
+ #ifdef CONFIG_NET_SCHED
+ __u32 tc_index; /* traffic control index */
+ #endif
++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
++ struct nf_info *nf_info;
++#endif
++ struct net_device *real_dev; /* For support of point to point protocols
++ (e.g. 802.3ad) over bonding, we must save the
++ physical device that got the packet before
++ replacing skb->dev with the virtual device. */
+ };
+
+ #ifdef __KERNEL__
+diff -Nur linux-2.4.32/include/linux/squashfs_fs.h linux-2.4.32.patched/include/linux/squashfs_fs.h
+--- linux-2.4.32/include/linux/squashfs_fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/squashfs_fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1,523 @@
++#ifndef SQUASHFS_FS
++#define SQUASHFS_FS
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005 Phillip Lougher <phillip@lougher.demon.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs.h
++ */
++
++#ifdef CONFIG_SQUASHFS_VMALLOC
++#define SQUASHFS_ALLOC(a) vmalloc(a)
++#define SQUASHFS_FREE(a) vfree(a)
++#else
++#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL)
++#define SQUASHFS_FREE(a) kfree(a)
++#endif
++#ifdef CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
++#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
++#else
++#define SQUASHFS_CACHED_FRAGMENTS 3
++#endif
++#define SQUASHFS_MAJOR 2
++#define SQUASHFS_MINOR 1
++#define SQUASHFS_MAGIC 0x73717368
++#define SQUASHFS_MAGIC_SWAP 0x68737173
++#define SQUASHFS_START 0
++
++/* size of metadata (inode and directory) blocks */
++#define SQUASHFS_METADATA_SIZE 8192
++#define SQUASHFS_METADATA_LOG 13
++
++/* default size of data blocks */
++#define SQUASHFS_FILE_SIZE 65536
++#define SQUASHFS_FILE_LOG 16
++
++#define SQUASHFS_FILE_MAX_SIZE 65536
++
++/* Max number of uids and gids */
++#define SQUASHFS_UIDS 256
++#define SQUASHFS_GUIDS 255
++
++/* Max length of filename (not 255) */
++#define SQUASHFS_NAME_LEN 256
++
++#define SQUASHFS_INVALID ((long long) 0xffffffffffff)
++#define SQUASHFS_INVALID_BLK ((long long) 0xffffffff)
++#define SQUASHFS_USED_BLK ((long long) 0xfffffffe)
++
++/* Filesystem flags */
++#define SQUASHFS_NOI 0
++#define SQUASHFS_NOD 1
++#define SQUASHFS_CHECK 2
++#define SQUASHFS_NOF 3
++#define SQUASHFS_NO_FRAG 4
++#define SQUASHFS_ALWAYS_FRAG 5
++#define SQUASHFS_DUPLICATE 6
++#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1)
++#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, SQUASHFS_NOI)
++#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, SQUASHFS_NOD)
++#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, SQUASHFS_NOF)
++#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, SQUASHFS_NO_FRAG)
++#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, SQUASHFS_ALWAYS_FRAG)
++#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, SQUASHFS_DUPLICATE)
++#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, SQUASHFS_CHECK)
++#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, duplicate_checking) (noi | (nod << 1) | (check_data << 2) | (nof << 3) | (no_frag << 4) | (always_frag << 5) | (duplicate_checking << 6))
++
++/* Max number of types and file types */
++#define SQUASHFS_DIR_TYPE 1
++#define SQUASHFS_FILE_TYPE 2
++#define SQUASHFS_SYMLINK_TYPE 3
++#define SQUASHFS_BLKDEV_TYPE 4
++#define SQUASHFS_CHRDEV_TYPE 5
++#define SQUASHFS_FIFO_TYPE 6
++#define SQUASHFS_SOCKET_TYPE 7
++#define SQUASHFS_LDIR_TYPE 8
++
++/* 1.0 filesystem type definitions */
++#define SQUASHFS_TYPES 5
++#define SQUASHFS_IPC_TYPE 0
++
++/* Flag whether block is compressed or uncompressed, bit is set if block is uncompressed */
++#define SQUASHFS_COMPRESSED_BIT (1 << 15)
++#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \
++ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT)
++
++#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT))
++
++#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24)
++#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? \
++ (B) & ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK)
++
++#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
++
++/*
++ * Inode number ops. Inodes consist of a compressed block number, and an uncompressed
++ * offset within that block
++ */
++#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16))
++#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff))
++#define SQUASHFS_MKINODE(A, B) ((squashfs_inode)(((squashfs_inode) (A) << 16)\
++ + (B)))
++
++/* Compute 32 bit VFS inode number from squashfs inode number */
++#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + ((b) >> 2) + 1))
++
++/* Translate between VFS mode and squashfs mode */
++#define SQUASHFS_MODE(a) ((a) & 0xfff)
++
++/* fragment and fragment table defines */
++typedef unsigned int squashfs_fragment_index;
++#define SQUASHFS_FRAGMENT_BYTES(A) (A * sizeof(squashfs_fragment_entry))
++#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / SQUASHFS_METADATA_SIZE)
++#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % SQUASHFS_METADATA_SIZE)
++#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + SQUASHFS_METADATA_SIZE - 1) / SQUASHFS_METADATA_SIZE)
++#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) * sizeof(squashfs_fragment_index))
++
++/* cached data constants for filesystem */
++#define SQUASHFS_CACHED_BLKS 8
++
++#define SQUASHFS_MAX_FILE_SIZE_LOG 32
++#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << (SQUASHFS_MAX_FILE_SIZE_LOG - 1))
++
++#define SQUASHFS_MARKER_BYTE 0xff
++
++
++/*
++ * definitions for structures on disk
++ */
++
++typedef unsigned int squashfs_block;
++typedef long long squashfs_inode;
++
++typedef unsigned int squashfs_uid;
++
++typedef struct squashfs_super_block {
++ unsigned int s_magic;
++ unsigned int inodes;
++ unsigned int bytes_used;
++ unsigned int uid_start;
++ unsigned int guid_start;
++ unsigned int inode_table_start;
++ unsigned int directory_table_start;
++ unsigned int s_major:16;
++ unsigned int s_minor:16;
++ unsigned int block_size_1:16;
++ unsigned int block_log:16;
++ unsigned int flags:8;
++ unsigned int no_uids:8;
++ unsigned int no_guids:8;
++ unsigned int mkfs_time /* time of filesystem creation */;
++ squashfs_inode root_inode;
++ unsigned int block_size;
++ unsigned int fragments;
++ unsigned int fragment_table_start;
++} __attribute__ ((packed)) squashfs_super_block;
++
++typedef struct {
++ unsigned int index:27;
++ unsigned int start_block:29;
++ unsigned char size;
++ unsigned char name[0];
++} __attribute__ ((packed)) squashfs_dir_index;
++
++typedef struct {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++} __attribute__ ((packed)) squashfs_base_inode_header;
++
++typedef squashfs_base_inode_header squashfs_ipc_inode_header;
++
++typedef struct {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned short rdev;
++} __attribute__ ((packed)) squashfs_dev_inode_header;
++
++typedef struct {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned short symlink_size;
++ char symlink[0];
++} __attribute__ ((packed)) squashfs_symlink_inode_header;
++
++typedef struct {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int mtime;
++ squashfs_block start_block;
++ unsigned int fragment;
++ unsigned int offset;
++ unsigned int file_size:SQUASHFS_MAX_FILE_SIZE_LOG;
++ unsigned short block_list[0];
++} __attribute__ ((packed)) squashfs_reg_inode_header;
++
++typedef struct {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int file_size:19;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++} __attribute__ ((packed)) squashfs_dir_inode_header;
++
++typedef struct {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int file_size:27;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++ unsigned int i_count:16;
++ squashfs_dir_index index[0];
++} __attribute__ ((packed)) squashfs_ldir_inode_header;
++
++typedef union {
++ squashfs_base_inode_header base;
++ squashfs_dev_inode_header dev;
++ squashfs_symlink_inode_header symlink;
++ squashfs_reg_inode_header reg;
++ squashfs_dir_inode_header dir;
++ squashfs_ldir_inode_header ldir;
++ squashfs_ipc_inode_header ipc;
++} squashfs_inode_header;
++
++typedef struct {
++ unsigned int offset:13;
++ unsigned int type:3;
++ unsigned int size:8;
++ char name[0];
++} __attribute__ ((packed)) squashfs_dir_entry;
++
++typedef struct {
++ unsigned int count:8;
++ unsigned int start_block:24;
++} __attribute__ ((packed)) squashfs_dir_header;
++
++typedef struct {
++ unsigned int start_block;
++ unsigned int size;
++} __attribute__ ((packed)) squashfs_fragment_entry;
++
++extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);
++extern int squashfs_uncompress_init(void);
++extern int squashfs_uncompress_exit(void);
++
++/*
++ * macros to convert each packed bitfield structure from little endian to big
++ * endian and vice versa. These are needed when creating or using a filesystem on a
++ * machine with different byte ordering to the target architecture.
++ *
++ */
++
++#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\
++ SQUASHFS_MEMSET(s, d, sizeof(squashfs_super_block));\
++ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\
++ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\
++ SQUASHFS_SWAP((s)->bytes_used, d, 64, 32);\
++ SQUASHFS_SWAP((s)->uid_start, d, 96, 32);\
++ SQUASHFS_SWAP((s)->guid_start, d, 128, 32);\
++ SQUASHFS_SWAP((s)->inode_table_start, d, 160, 32);\
++ SQUASHFS_SWAP((s)->directory_table_start, d, 192, 32);\
++ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\
++ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\
++ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\
++ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\
++ SQUASHFS_SWAP((s)->flags, d, 288, 8);\
++ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\
++ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\
++ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\
++ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\
++ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\
++ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\
++ SQUASHFS_SWAP((s)->fragment_table_start, d, 472, 32);\
++}
++
++#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\
++ SQUASHFS_MEMSET(s, d, n);\
++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
++}
++
++#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, sizeof(squashfs_ipc_inode_header))
++
++#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, sizeof(squashfs_dev_inode_header));\
++ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\
++}
++
++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, sizeof(squashfs_symlink_inode_header));\
++ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\
++}
++
++#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, sizeof(squashfs_reg_inode_header));\
++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\
++ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\
++ SQUASHFS_SWAP((s)->offset, d, 128, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 160, SQUASHFS_MAX_FILE_SIZE_LOG);\
++}
++
++#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, sizeof(squashfs_dir_inode_header));\
++ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\
++ SQUASHFS_SWAP((s)->offset, d, 51, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\
++}
++
++#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, sizeof(squashfs_ldir_inode_header));\
++ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\
++ SQUASHFS_SWAP((s)->offset, d, 59, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\
++ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\
++}
++
++#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\
++ SQUASHFS_MEMSET(s, d, sizeof(squashfs_dir_index));\
++ SQUASHFS_SWAP((s)->index, d, 0, 27);\
++ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\
++ SQUASHFS_SWAP((s)->size, d, 56, 8);\
++}
++
++#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\
++ SQUASHFS_MEMSET(s, d, sizeof(squashfs_dir_header));\
++ SQUASHFS_SWAP((s)->count, d, 0, 8);\
++ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\
++}
++
++#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\
++ SQUASHFS_MEMSET(s, d, sizeof(squashfs_dir_entry));\
++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
++ SQUASHFS_SWAP((s)->type, d, 13, 3);\
++ SQUASHFS_SWAP((s)->size, d, 16, 8);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\
++ SQUASHFS_MEMSET(s, d, sizeof(squashfs_fragment_entry));\
++ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\
++ SQUASHFS_SWAP((s)->size, d, 32, 32);\
++}
++
++#define SQUASHFS_SWAP_SHORTS(s, d, n) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_MEMSET(s, d, n * 2);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += 16)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\
++}
++
++#define SQUASHFS_SWAP_INTS(s, d, n) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_MEMSET(s, d, n * 4);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += 32)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\
++}
++
++#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_MEMSET(s, d, n * bits / 8);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += bits)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_INTS(s, d, n)
++
++#ifdef SQUASHFS_1_0_COMPATIBILITY
++typedef struct {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++} __attribute__ ((packed)) squashfs_base_inode_header_1;
++
++typedef struct {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int type:4;
++ unsigned int offset:4;
++} __attribute__ ((packed)) squashfs_ipc_inode_header_1;
++
++typedef struct {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned short rdev;
++} __attribute__ ((packed)) squashfs_dev_inode_header_1;
++
++typedef struct {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned short symlink_size;
++ char symlink[0];
++} __attribute__ ((packed)) squashfs_symlink_inode_header_1;
++
++typedef struct {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int mtime;
++ squashfs_block start_block;
++ unsigned int file_size:SQUASHFS_MAX_FILE_SIZE_LOG;
++ unsigned short block_list[0];
++} __attribute__ ((packed)) squashfs_reg_inode_header_1;
++
++typedef struct {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int file_size:19;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++} __attribute__ ((packed)) squashfs_dir_inode_header_1;
++
++#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\
++ SQUASHFS_MEMSET(s, d, n);\
++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
++ SQUASHFS_SWAP((s)->uid, d, 16, 4);\
++ SQUASHFS_SWAP((s)->guid, d, 20, 4);\
++}
++
++#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, sizeof(squashfs_ipc_inode_header_1));\
++ SQUASHFS_SWAP((s)->type, d, 24, 4);\
++ SQUASHFS_SWAP((s)->offset, d, 28, 4);\
++}
++
++#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, sizeof(squashfs_dev_inode_header_1));\
++ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\
++}
++
++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, sizeof(squashfs_symlink_inode_header_1));\
++ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\
++}
++
++#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, sizeof(squashfs_reg_inode_header_1));\
++ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 88, SQUASHFS_MAX_FILE_SIZE_LOG);\
++}
++
++#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, sizeof(squashfs_dir_inode_header_1));\
++ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\
++ SQUASHFS_SWAP((s)->offset, d, 43, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\
++}
++#endif
++
++#ifdef __KERNEL__
++/*
++ * macros used to swap each structure entry, taking into account
++ * bitfields and different bitfield placing conventions on differing architectures
++ */
++#include <asm/byteorder.h>
++#ifdef __BIG_ENDIAN
++ /* convert from little endian to big endian */
++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, tbits, b_pos)
++#else
++ /* convert from big endian to little endian */
++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, tbits, 64 - tbits - b_pos)
++#endif
++
++#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
++ int bits;\
++ int b_pos = pos % 8;\
++ unsigned long long val = 0;\
++ unsigned char *s = (unsigned char *)p + (pos / 8);\
++ unsigned char *d = ((unsigned char *) &val) + 7;\
++ for(bits = 0; bits < (tbits + b_pos); bits += 8) \
++ *d-- = *s++;\
++ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
++}
++#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n);
++#endif
++#endif
+diff -Nur linux-2.4.32/include/linux/squashfs_fs_i.h linux-2.4.32.patched/include/linux/squashfs_fs_i.h
+--- linux-2.4.32/include/linux/squashfs_fs_i.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/squashfs_fs_i.h 2006-03-13 18:55:54.000000000 +0100
+@@ -0,0 +1,42 @@
++#ifndef SQUASHFS_FS_I
++#define SQUASHFS_FS_I
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005 Phillip Lougher <phillip@lougher.demon.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs_i.h
++ */
++
++typedef struct squashfs_inode_info {
++ unsigned int start_block;
++ unsigned int block_list_start;
++ unsigned int offset;
++ union {
++ struct {
++ unsigned int fragment_start_block;
++ unsigned int fragment_size;
++ unsigned int fragment_offset;
++ } s1;
++ struct {
++ unsigned int directory_index_start;
++ unsigned int directory_index_offset;
++ unsigned int directory_index_count;
++ } s2;
++ } u;
++ } squashfs_inode_info;
++#endif
+diff -Nur linux-2.4.32/include/linux/squashfs_fs_sb.h linux-2.4.32.patched/include/linux/squashfs_fs_sb.h
+--- linux-2.4.32/include/linux/squashfs_fs_sb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/squashfs_fs_sb.h 2006-03-13 18:57:11.000000000 +0100
+@@ -0,0 +1,65 @@
++#ifndef SQUASHFS_FS_SB
++#define SQUASHFS_FS_SB
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005 Phillip Lougher <phillip@lougher.demon.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs_sb.h
++ */
++
++#include <linux/squashfs_fs.h>
++
++typedef struct {
++ unsigned int block;
++ int length;
++ unsigned int next_index;
++ char *data;
++ } squashfs_cache;
++
++struct squashfs_fragment_cache {
++ unsigned int block;
++ int length;
++ unsigned int locked;
++ char *data;
++ };
++
++typedef struct squashfs_sb_info {
++ squashfs_super_block sBlk;
++ int devblksize;
++ int devblksize_log2;
++ int swap;
++ squashfs_cache *block_cache;
++ struct squashfs_fragment_cache *fragment;
++ int next_cache;
++ int next_fragment;
++ squashfs_uid *uid;
++ squashfs_uid *guid;
++ squashfs_fragment_index *fragment_index;
++ unsigned int read_size;
++ char *read_data;
++ char *read_page;
++ struct semaphore read_page_mutex;
++ struct semaphore block_cache_mutex;
++ struct semaphore fragment_mutex;
++ wait_queue_head_t waitq;
++ wait_queue_head_t fragment_wait_queue;
++ struct inode *(*iget)(struct super_block *s, squashfs_inode inode);
++ unsigned int (*read_blocklist)(struct inode *inode, int index, int readahead_blks,
++ char *block_list, unsigned short **block_p, unsigned int *bsize);
++ } squashfs_sb_info;
++#endif
+diff -Nur linux-2.4.32/include/linux/swap.h linux-2.4.32.patched/include/linux/swap.h
+--- linux-2.4.32/include/linux/swap.h 2005-01-19 15:10:12.000000000 +0100
++++ linux-2.4.32.patched/include/linux/swap.h 2006-03-13 18:57:11.000000000 +0100
+@@ -1,6 +1,12 @@
+ #ifndef _LINUX_SWAP_H
+ #define _LINUX_SWAP_H
+
++#include <linux/config.h>
++
++#define MAX_SWAPFILES 32
++
++#ifdef __KERNEL__
++
+ #include <linux/spinlock.h>
+ #include <asm/page.h>
+
+@@ -8,8 +14,6 @@
+ #define SWAP_FLAG_PRIO_MASK 0x7fff
+ #define SWAP_FLAG_PRIO_SHIFT 0
+
+-#define MAX_SWAPFILES 32
+-
+ /*
+ * Magic header for a swap area. The first part of the union is
+ * what the swap magic looks like for the old (limited to 128MB)
+@@ -39,8 +43,6 @@
+ } info;
+ };
+
+-#ifdef __KERNEL__
+-
+ /*
+ * Max bad pages in the new format..
+ */
+diff -Nur linux-2.4.32/include/linux/textsearch.h linux-2.4.32.patched/include/linux/textsearch.h
+--- linux-2.4.32/include/linux/textsearch.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/textsearch.h 2006-03-13 19:01:58.000000000 +0100
+@@ -0,0 +1,205 @@
++#ifndef __LINUX_TEXTSEARCH_H
++#define __LINUX_TEXTSEARCH_H
++
++#ifdef __KERNEL__
++
++#include <linux/types.h>
++#include <linux/list.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/slab.h>
++
++#ifdef __CHECKER__
++#define __bitwise__ __attribute__((bitwise))
++#else
++#define __bitwise__
++#endif
++#ifdef __CHECK_ENDIAN__
++#define __bitwise __bitwise__
++#else
++#define __bitwise
++#endif
++
++typedef __u16 __bitwise __le16;
++typedef __u16 __bitwise __be16;
++typedef __u32 __bitwise __le32;
++typedef __u32 __bitwise __be32;
++#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
++typedef __u64 __bitwise __le64;
++typedef __u64 __bitwise __be64;
++#endif
++
++#ifdef __KERNEL__
++typedef unsigned __bitwise__ gfp_t;
++#endif
++
++struct ts_config;
++
++/**
++ * TS_AUTOLOAD - Automatically load textsearch modules when needed
++ */
++#define TS_AUTOLOAD 1
++
++/**
++ * struct ts_state - search state
++ * @offset: offset for next match
++ * @cb: control buffer, for persistant variables of get_next_block()
++ */
++struct ts_state
++{
++ unsigned int offset;
++ char cb[40];
++};
++
++/**
++ * struct ts_ops - search module operations
++ * @name: name of search algorithm
++ * @init: initialization function to prepare a search
++ * @find: find the next occurrence of the pattern
++ * @destroy: destroy algorithm specific parts of a search configuration
++ * @get_pattern: return head of pattern
++ * @get_pattern_len: return length of pattern
++ * @owner: module reference to algorithm
++ */
++struct ts_ops
++{
++ const char *name;
++ struct ts_config * (*init)(const void *, unsigned int, gfp_t);
++ unsigned int (*find)(struct ts_config *,
++ struct ts_state *);
++ void (*destroy)(struct ts_config *);
++ void * (*get_pattern)(struct ts_config *);
++ unsigned int (*get_pattern_len)(struct ts_config *);
++ struct module *owner;
++ struct list_head list;
++};
++
++/**
++ * struct ts_config - search configuration
++ * @ops: operations of chosen algorithm
++ * @get_next_block: callback to fetch the next block to search in
++ * @finish: callback to finalize a search
++ */
++struct ts_config
++{
++ struct ts_ops *ops;
++
++ /**
++ * get_next_block - fetch next block of data
++ * @consumed: number of bytes consumed by the caller
++ * @dst: destination buffer
++ * @conf: search configuration
++ * @state: search state
++ *
++ * Called repeatedly until 0 is returned. Must assign the
++ * head of the next block of data to &*dst and return the length
++ * of the block or 0 if at the end. consumed == 0 indicates
++ * a new search. May store/read persistant values in state->cb.
++ */
++ unsigned int (*get_next_block)(unsigned int consumed,
++ const u8 **dst,
++ struct ts_config *conf,
++ struct ts_state *state);
++
++ /**
++ * finish - finalize/clean a series of get_next_block() calls
++ * @conf: search configuration
++ * @state: search state
++ *
++ * Called after the last use of get_next_block(), may be used
++ * to cleanup any leftovers.
++ */
++ void (*finish)(struct ts_config *conf,
++ struct ts_state *state);
++};
++
++/**
++ * textsearch_next - continue searching for a pattern
++ * @conf: search configuration
++ * @state: search state
++ *
++ * Continues a search looking for more occurrences of the pattern.
++ * textsearch_find() must be called to find the first occurrence
++ * in order to reset the state.
++ *
++ * Returns the position of the next occurrence of the pattern or
++ * UINT_MAX if not match was found.
++ */
++static inline unsigned int textsearch_next(struct ts_config *conf,
++ struct ts_state *state)
++{
++ unsigned int ret = conf->ops->find(conf, state);
++
++ if (conf->finish)
++ conf->finish(conf, state);
++
++ return ret;
++}
++
++/**
++ * textsearch_find - start searching for a pattern
++ * @conf: search configuration
++ * @state: search state
++ *
++ * Returns the position of first occurrence of the pattern or
++ * UINT_MAX if no match was found.
++ */
++static inline unsigned int textsearch_find(struct ts_config *conf,
++ struct ts_state *state)
++{
++ state->offset = 0;
++ return textsearch_next(conf, state);
++}
++
++/**
++ * textsearch_get_pattern - return head of the pattern
++ * @conf: search configuration
++ */
++static inline void *textsearch_get_pattern(struct ts_config *conf)
++{
++ return conf->ops->get_pattern(conf);
++}
++
++/**
++ * textsearch_get_pattern_len - return length of the pattern
++ * @conf: search configuration
++ */
++static inline unsigned int textsearch_get_pattern_len(struct ts_config *conf)
++{
++ return conf->ops->get_pattern_len(conf);
++}
++
++extern int textsearch_register(struct ts_ops *);
++extern int textsearch_unregister(struct ts_ops *);
++extern struct ts_config *textsearch_prepare(const char *, const void *,
++ unsigned int, gfp_t, int);
++extern void textsearch_destroy(struct ts_config *conf);
++extern unsigned int textsearch_find_continuous(struct ts_config *,
++ struct ts_state *,
++ const void *, unsigned int);
++
++
++#define TS_PRIV_ALIGNTO 8
++#define TS_PRIV_ALIGN(len) (((len) + TS_PRIV_ALIGNTO-1) & ~(TS_PRIV_ALIGNTO-1))
++
++static inline struct ts_config *alloc_ts_config(size_t payload,
++ gfp_t gfp_mask)
++{
++ struct ts_config *conf;
++
++ conf = kmalloc(TS_PRIV_ALIGN(sizeof(*conf)) + payload, gfp_mask);
++ if (conf == NULL)
++ return -ENOMEM;
++
++ memset(conf, 0, TS_PRIV_ALIGN(sizeof(*conf)) + payload);
++ return conf;
++}
++
++static inline void *ts_config_priv(struct ts_config *conf)
++{
++ return ((u8 *) conf + TS_PRIV_ALIGN(sizeof(struct ts_config)));
++}
++
++#endif /* __KERNEL__ */
++
++#endif
+diff -Nur linux-2.4.32/include/linux/ufs_fs.h linux-2.4.32.patched/include/linux/ufs_fs.h
+--- linux-2.4.32/include/linux/ufs_fs.h 2001-11-22 20:46:18.000000000 +0100
++++ linux-2.4.32.patched/include/linux/ufs_fs.h 2006-03-13 18:57:11.000000000 +0100
+@@ -555,7 +555,6 @@
+ extern struct file_operations ufs_dir_operations;
+
+ /* super.c */
+-extern struct file_system_type ufs_fs_type;
+ extern void ufs_warning (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4)));
+ extern void ufs_error (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4)));
+ extern void ufs_panic (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4)));
+diff -Nur linux-2.4.32/include/linux/usbdevice_fs.h linux-2.4.32.patched/include/linux/usbdevice_fs.h
+--- linux-2.4.32/include/linux/usbdevice_fs.h 2003-11-28 19:26:21.000000000 +0100
++++ linux-2.4.32.patched/include/linux/usbdevice_fs.h 2006-03-13 18:58:17.000000000 +0100
+@@ -185,8 +185,6 @@
+ extern struct file_operations usbdevfs_devices_fops;
+ extern struct file_operations usbdevfs_device_file_operations;
+ extern struct inode_operations usbdevfs_device_inode_operations;
+-extern struct inode_operations usbdevfs_bus_inode_operations;
+-extern struct file_operations usbdevfs_bus_file_operations;
+ extern void usbdevfs_conn_disc_event(void);
+
+ #endif /* __KERNEL__ */
+diff -Nur linux-2.4.32/include/linux/version.h linux-2.4.32.patched/include/linux/version.h
+--- linux-2.4.32/include/linux/version.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.32.patched/include/linux/version.h 2006-03-13 18:56:05.000000000 +0100
+@@ -0,0 +1,3 @@
++#define UTS_RELEASE "2.4.32"
++#define LINUX_VERSION_CODE 132128
++#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+diff -Nur linux-2.4.32/include/linux/wireless.h linux-2.4.32.patched/include/linux/wireless.h
+--- linux-2.4.32/include/linux/wireless.h 2003-11-28 19:26:21.000000000 +0100
++++ linux-2.4.32.patched/include/linux/wireless.h 2006-03-13 18:55:55.000000000 +0100
+@@ -1,10 +1,10 @@
+ /*
+ * This file define a set of standard wireless extensions
+ *
+- * Version : 16 2.4.03
++ * Version : 18 12.3.05
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+- * Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved.
++ * Copyright (c) 1997-2005 Jean Tourrilhes, All Rights Reserved.
+ */
+
+ #ifndef _LINUX_WIRELESS_H
+@@ -47,12 +47,12 @@
+ * # include/net/iw_handler.h
+ *
+ * Note as well that /proc/net/wireless implementation has now moved in :
+- * # include/linux/wireless.c
++ * # net/core/wireless.c
+ *
+ * Wireless Events (2002 -> onward) :
+ * --------------------------------
+ * Events are defined at the end of this file, and implemented in :
+- * # include/linux/wireless.c
++ * # net/core/wireless.c
+ *
+ * Other comments :
+ * --------------
+@@ -82,7 +82,7 @@
+ * (there is some stuff that will be added in the future...)
+ * I just plan to increment with each new version.
+ */
+-#define WIRELESS_EXT 16
++#define WIRELESS_EXT 18
+
+ /*
+ * Changes :
+@@ -175,6 +175,28 @@
+ * - Remove IW_MAX_GET_SPY because conflict with enhanced spy support
+ * - Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy"
+ * - Add IW_ENCODE_TEMP and iw_range->encoding_login_index
++ *
++ * V16 to V17
++ * ----------
++ * - Add flags to frequency -> auto/fixed
++ * - Document (struct iw_quality *)->updated, add new flags (INVALID)
++ * - Wireless Event capability in struct iw_range
++ * - Add support for relative TxPower (yick !)
++ *
++ * V17 to V18 (From Jouni Malinen <jkmaline@cc.hut.fi>)
++ * ----------
++ * - Add support for WPA/WPA2
++ * - Add extended encoding configuration (SIOCSIWENCODEEXT and
++ * SIOCGIWENCODEEXT)
++ * - Add SIOCSIWGENIE/SIOCGIWGENIE
++ * - Add SIOCSIWMLME
++ * - Add SIOCSIWPMKSA
++ * - Add struct iw_range bit field for supported encoding capabilities
++ * - Add optional scan request parameters for SIOCSIWSCAN
++ * - Add SIOCSIWAUTH/SIOCGIWAUTH for setting authentication and WPA
++ * related parameters (extensible up to 4096 parameter values)
++ * - Add wireless events: IWEVGENIE, IWEVMICHAELMICFAILURE,
++ * IWEVASSOCREQIE, IWEVASSOCRESPIE, IWEVPMKIDCAND
+ */
+
+ /**************************** CONSTANTS ****************************/
+@@ -249,9 +271,33 @@
+ #define SIOCSIWPOWER 0x8B2C /* set Power Management settings */
+ #define SIOCGIWPOWER 0x8B2D /* get Power Management settings */
+
++/* WPA : Generic IEEE 802.11 informatiom element (e.g., for WPA/RSN/WMM).
++ * This ioctl uses struct iw_point and data buffer that includes IE id and len
++ * fields. More than one IE may be included in the request. Setting the generic
++ * IE to empty buffer (len=0) removes the generic IE from the driver. Drivers
++ * are allowed to generate their own WPA/RSN IEs, but in these cases, drivers
++ * are required to report the used IE as a wireless event, e.g., when
++ * associating with an AP. */
++#define SIOCSIWGENIE 0x8B30 /* set generic IE */
++#define SIOCGIWGENIE 0x8B31 /* get generic IE */
++
++/* WPA : IEEE 802.11 MLME requests */
++#define SIOCSIWMLME 0x8B16 /* request MLME operation; uses
++ * struct iw_mlme */
++/* WPA : Authentication mode parameters */
++#define SIOCSIWAUTH 0x8B32 /* set authentication mode params */
++#define SIOCGIWAUTH 0x8B33 /* get authentication mode params */
++
++/* WPA : Extended version of encoding configuration */
++#define SIOCSIWENCODEEXT 0x8B34 /* set encoding token & mode */
++#define SIOCGIWENCODEEXT 0x8B35 /* get encoding token & mode */
++
++/* WPA2 : PMKSA cache management */
++#define SIOCSIWPMKSA 0x8B36 /* PMKSA cache operation */
++
+ /* -------------------- DEV PRIVATE IOCTL LIST -------------------- */
+
+-/* These 16 ioctl are wireless device private.
++/* These 32 ioctl are wireless device private, for 16 commands.
+ * Each driver is free to use them for whatever purpose it chooses,
+ * however the driver *must* export the description of those ioctls
+ * with SIOCGIWPRIV and *must* use arguments as defined below.
+@@ -266,8 +312,8 @@
+ * We now have 32 commands, so a bit more space ;-).
+ * Also, all 'odd' commands are only usable by root and don't return the
+ * content of ifr/iwr to user (but you are not obliged to use the set/get
+- * convention, just use every other two command).
+- * And I repeat : you are not obliged to use them with iwspy, but you
++ * convention, just use every other two command). More details in iwpriv.c.
++ * And I repeat : you are not forced to use them with iwpriv, but you
+ * must be compliant with it.
+ */
+
+@@ -290,6 +336,34 @@
+ #define IWEVCUSTOM 0x8C02 /* Driver specific ascii string */
+ #define IWEVREGISTERED 0x8C03 /* Discovered a new node (AP mode) */
+ #define IWEVEXPIRED 0x8C04 /* Expired a node (AP mode) */
++#define IWEVGENIE 0x8C05 /* Generic IE (WPA, RSN, WMM, ..)
++ * (scan results); This includes id and
++ * length fields. One IWEVGENIE may
++ * contain more than one IE. Scan
++ * results may contain one or more
++ * IWEVGENIE events. */
++#define IWEVMICHAELMICFAILURE 0x8C06 /* Michael MIC failure
++ * (struct iw_michaelmicfailure)
++ */
++#define IWEVASSOCREQIE 0x8C07 /* IEs used in (Re)Association Request.
++ * The data includes id and length
++ * fields and may contain more than one
++ * IE. This event is required in
++ * Managed mode if the driver
++ * generates its own WPA/RSN IE. This
++ * should be sent just before
++ * IWEVREGISTERED event for the
++ * association. */
++#define IWEVASSOCRESPIE 0x8C08 /* IEs used in (Re)Association
++ * Response. The data includes id and
++ * length fields and may contain more
++ * than one IE. This may be sent
++ * between IWEVASSOCREQIE and
++ * IWEVREGISTERED events for the
++ * association. */
++#define IWEVPMKIDCAND 0x8C09 /* PMKID candidate for RSN
++ * pre-authentication
++ * (struct iw_pmkid_cand) */
+
+ #define IWEVFIRST 0x8C00
+
+@@ -352,6 +426,18 @@
+ #define IW_MODE_SECOND 5 /* Secondary master/repeater (backup) */
+ #define IW_MODE_MONITOR 6 /* Passive monitor (listen only) */
+
++/* Statistics flags (bitmask in updated) */
++#define IW_QUAL_QUAL_UPDATED 0x1 /* Value was updated since last read */
++#define IW_QUAL_LEVEL_UPDATED 0x2
++#define IW_QUAL_NOISE_UPDATED 0x4
++#define IW_QUAL_QUAL_INVALID 0x10 /* Driver doesn't provide value */
++#define IW_QUAL_LEVEL_INVALID 0x20
++#define IW_QUAL_NOISE_INVALID 0x40
++
++/* Frequency flags */
++#define IW_FREQ_AUTO 0x00 /* Let the driver decides */
++#define IW_FREQ_FIXED 0x01 /* Force a specific value */
++
+ /* Maximum number of size of encoding token available
+ * they are listed in the range structure */
+ #define IW_MAX_ENCODING_SIZES 8
+@@ -390,6 +476,7 @@
+ #define IW_TXPOW_TYPE 0x00FF /* Type of value */
+ #define IW_TXPOW_DBM 0x0000 /* Value is in dBm */
+ #define IW_TXPOW_MWATT 0x0001 /* Value is in mW */
++#define IW_TXPOW_RELATIVE 0x0002 /* Value is in arbitrary units */
+ #define IW_TXPOW_RANGE 0x1000 /* Range of value between min/max */
+
+ /* Retry limits and lifetime flags available */
+@@ -412,12 +499,113 @@
+ #define IW_SCAN_THIS_MODE 0x0020 /* Scan only this Mode */
+ #define IW_SCAN_ALL_RATE 0x0040 /* Scan all Bit-Rates */
+ #define IW_SCAN_THIS_RATE 0x0080 /* Scan only this Bit-Rate */
++/* struct iw_scan_req scan_type */
++#define IW_SCAN_TYPE_ACTIVE 0
++#define IW_SCAN_TYPE_PASSIVE 1
+ /* Maximum size of returned data */
+ #define IW_SCAN_MAX_DATA 4096 /* In bytes */
+
+ /* Max number of char in custom event - use multiple of them if needed */
+ #define IW_CUSTOM_MAX 256 /* In bytes */
+
++/* Generic information element */
++#define IW_GENERIC_IE_MAX 1024
++
++/* MLME requests (SIOCSIWMLME / struct iw_mlme) */
++#define IW_MLME_DEAUTH 0
++#define IW_MLME_DISASSOC 1
++
++/* SIOCSIWAUTH/SIOCGIWAUTH struct iw_param flags */
++#define IW_AUTH_INDEX 0x0FFF
++#define IW_AUTH_FLAGS 0xF000
++/* SIOCSIWAUTH/SIOCGIWAUTH parameters (0 .. 4095)
++ * (IW_AUTH_INDEX mask in struct iw_param flags; this is the index of the
++ * parameter that is being set/get to; value will be read/written to
++ * struct iw_param value field) */
++#define IW_AUTH_WPA_VERSION 0
++#define IW_AUTH_CIPHER_PAIRWISE 1
++#define IW_AUTH_CIPHER_GROUP 2
++#define IW_AUTH_KEY_MGMT 3
++#define IW_AUTH_TKIP_COUNTERMEASURES 4
++#define IW_AUTH_DROP_UNENCRYPTED 5
++#define IW_AUTH_80211_AUTH_ALG 6
++#define IW_AUTH_WPA_ENABLED 7
++#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8
++#define IW_AUTH_ROAMING_CONTROL 9
++#define IW_AUTH_PRIVACY_INVOKED 10
++
++/* IW_AUTH_WPA_VERSION values (bit field) */
++#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001
++#define IW_AUTH_WPA_VERSION_WPA 0x00000002
++#define IW_AUTH_WPA_VERSION_WPA2 0x00000004
++
++/* IW_AUTH_PAIRWISE_CIPHER and IW_AUTH_GROUP_CIPHER values (bit field) */
++#define IW_AUTH_CIPHER_NONE 0x00000001
++#define IW_AUTH_CIPHER_WEP40 0x00000002
++#define IW_AUTH_CIPHER_TKIP 0x00000004
++#define IW_AUTH_CIPHER_CCMP 0x00000008
++#define IW_AUTH_CIPHER_WEP104 0x00000010
++
++/* IW_AUTH_KEY_MGMT values (bit field) */
++#define IW_AUTH_KEY_MGMT_802_1X 1
++#define IW_AUTH_KEY_MGMT_PSK 2
++
++/* IW_AUTH_80211_AUTH_ALG values (bit field) */
++#define IW_AUTH_ALG_OPEN_SYSTEM 0x00000001
++#define IW_AUTH_ALG_SHARED_KEY 0x00000002
++#define IW_AUTH_ALG_LEAP 0x00000004
++
++/* IW_AUTH_ROAMING_CONTROL values */
++#define IW_AUTH_ROAMING_ENABLE 0 /* driver/firmware based roaming */
++#define IW_AUTH_ROAMING_DISABLE 1 /* user space program used for roaming
++ * control */
++
++/* SIOCSIWENCODEEXT definitions */
++#define IW_ENCODE_SEQ_MAX_SIZE 8
++/* struct iw_encode_ext ->alg */
++#define IW_ENCODE_ALG_NONE 0
++#define IW_ENCODE_ALG_WEP 1
++#define IW_ENCODE_ALG_TKIP 2
++#define IW_ENCODE_ALG_CCMP 3
++/* struct iw_encode_ext ->ext_flags */
++#define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001
++#define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002
++#define IW_ENCODE_EXT_GROUP_KEY 0x00000004
++#define IW_ENCODE_EXT_SET_TX_KEY 0x00000008
++
++/* IWEVMICHAELMICFAILURE : struct iw_michaelmicfailure ->flags */
++#define IW_MICFAILURE_KEY_ID 0x00000003 /* Key ID 0..3 */
++#define IW_MICFAILURE_GROUP 0x00000004
++#define IW_MICFAILURE_PAIRWISE 0x00000008
++#define IW_MICFAILURE_STAKEY 0x00000010
++#define IW_MICFAILURE_COUNT 0x00000060 /* 1 or 2 (0 = count not supported)
++ */
++
++/* Bit field values for enc_capa in struct iw_range */
++#define IW_ENC_CAPA_WPA 0x00000001
++#define IW_ENC_CAPA_WPA2 0x00000002
++#define IW_ENC_CAPA_CIPHER_TKIP 0x00000004
++#define IW_ENC_CAPA_CIPHER_CCMP 0x00000008
++
++/* Event capability macros - in (struct iw_range *)->event_capa
++ * Because we have more than 32 possible events, we use an array of
++ * 32 bit bitmasks. Note : 32 bits = 0x20 = 2^5. */
++#define IW_EVENT_CAPA_BASE(cmd) ((cmd >= SIOCIWFIRSTPRIV) ? \
++ (cmd - SIOCIWFIRSTPRIV + 0x60) : \
++ (cmd - SIOCSIWCOMMIT))
++#define IW_EVENT_CAPA_INDEX(cmd) (IW_EVENT_CAPA_BASE(cmd) >> 5)
++#define IW_EVENT_CAPA_MASK(cmd) (1 << (IW_EVENT_CAPA_BASE(cmd) & 0x1F))
++/* Event capability constants - event autogenerated by the kernel
++ * This list is valid for most 802.11 devices, customise as needed... */
++#define IW_EVENT_CAPA_K_0 (IW_EVENT_CAPA_MASK(0x8B04) | \
++ IW_EVENT_CAPA_MASK(0x8B06) | \
++ IW_EVENT_CAPA_MASK(0x8B1A))
++#define IW_EVENT_CAPA_K_1 (IW_EVENT_CAPA_MASK(0x8B2A))
++/* "Easy" macro to set events in iw_range (less efficient) */
++#define IW_EVENT_CAPA_SET(event_capa, cmd) (event_capa[IW_EVENT_CAPA_INDEX(cmd)] |= IW_EVENT_CAPA_MASK(cmd))
++#define IW_EVENT_CAPA_SET_KERNEL(event_capa) {event_capa[0] |= IW_EVENT_CAPA_K_0; event_capa[1] |= IW_EVENT_CAPA_K_1; }
++
++
+ /****************************** TYPES ******************************/
+
+ /* --------------------------- SUBTYPES --------------------------- */
+@@ -456,7 +644,7 @@
+ __s32 m; /* Mantissa */
+ __s16 e; /* Exponent */
+ __u8 i; /* List index (when in range struct) */
+- __u8 pad; /* Unused - just for alignement */
++ __u8 flags; /* Flags (fixed/auto) */
+ };
+
+ /*
+@@ -507,6 +695,132 @@
+ struct iw_quality high; /* High threshold */
+ };
+
++/*
++ * Optional data for scan request
++ *
++ * Note: these optional parameters are controlling parameters for the
++ * scanning behavior, these do not apply to getting scan results
++ * (SIOCGIWSCAN). Drivers are expected to keep a local BSS table and
++ * provide a merged results with all BSSes even if the previous scan
++ * request limited scanning to a subset, e.g., by specifying an SSID.
++ * Especially, scan results are required to include an entry for the
++ * current BSS if the driver is in Managed mode and associated with an AP.
++ */
++struct iw_scan_req
++{
++ __u8 scan_type; /* IW_SCAN_TYPE_{ACTIVE,PASSIVE} */
++ __u8 essid_len;
++ __u8 num_channels; /* num entries in channel_list;
++ * 0 = scan all allowed channels */
++ __u8 flags; /* reserved as padding; use zero, this may
++ * be used in the future for adding flags
++ * to request different scan behavior */
++ struct sockaddr bssid; /* ff:ff:ff:ff:ff:ff for broadcast BSSID or
++ * individual address of a specific BSS */
++
++ /*
++ * Use this ESSID if IW_SCAN_THIS_ESSID flag is used instead of using
++ * the current ESSID. This allows scan requests for specific ESSID
++ * without having to change the current ESSID and potentially breaking
++ * the current association.
++ */
++ __u8 essid[IW_ESSID_MAX_SIZE];
++
++ /*
++ * Optional parameters for changing the default scanning behavior.
++ * These are based on the MLME-SCAN.request from IEEE Std 802.11.
++ * TU is 1.024 ms. If these are set to 0, driver is expected to use
++ * reasonable default values. min_channel_time defines the time that
++ * will be used to wait for the first reply on each channel. If no
++ * replies are received, next channel will be scanned after this. If
++ * replies are received, total time waited on the channel is defined by
++ * max_channel_time.
++ */
++ __u32 min_channel_time; /* in TU */
++ __u32 max_channel_time; /* in TU */
++
++ struct iw_freq channel_list[IW_MAX_FREQUENCIES];
++};
++
++/* ------------------------- WPA SUPPORT ------------------------- */
++
++/*
++ * Extended data structure for get/set encoding (this is used with
++ * SIOCSIWENCODEEXT/SIOCGIWENCODEEXT. struct iw_point and IW_ENCODE_*
++ * flags are used in the same way as with SIOCSIWENCODE/SIOCGIWENCODE and
++ * only the data contents changes (key data -> this structure, including
++ * key data).
++ *
++ * If the new key is the first group key, it will be set as the default
++ * TX key. Otherwise, default TX key index is only changed if
++ * IW_ENCODE_EXT_SET_TX_KEY flag is set.
++ *
++ * Key will be changed with SIOCSIWENCODEEXT in all cases except for
++ * special "change TX key index" operation which is indicated by setting
++ * key_len = 0 and ext_flags |= IW_ENCODE_EXT_SET_TX_KEY.
++ *
++ * tx_seq/rx_seq are only used when respective
++ * IW_ENCODE_EXT_{TX,RX}_SEQ_VALID flag is set in ext_flags. Normal
++ * TKIP/CCMP operation is to set RX seq with SIOCSIWENCODEEXT and start
++ * TX seq from zero whenever key is changed. SIOCGIWENCODEEXT is normally
++ * used only by an Authenticator (AP or an IBSS station) to get the
++ * current TX sequence number. Using TX_SEQ_VALID for SIOCSIWENCODEEXT and
++ * RX_SEQ_VALID for SIOCGIWENCODEEXT are optional, but can be useful for
++ * debugging/testing.
++ */
++struct iw_encode_ext
++{
++ __u32 ext_flags; /* IW_ENCODE_EXT_* */
++ __u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
++ __u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
++ struct sockaddr addr; /* ff:ff:ff:ff:ff:ff for broadcast/multicast
++ * (group) keys or unicast address for
++ * individual keys */
++ __u16 alg; /* IW_ENCODE_ALG_* */
++ __u16 key_len;
++ __u8 key[0];
++};
++
++/* SIOCSIWMLME data */
++struct iw_mlme
++{
++ __u16 cmd; /* IW_MLME_* */
++ __u16 reason_code;
++ struct sockaddr addr;
++};
++
++/* SIOCSIWPMKSA data */
++#define IW_PMKSA_ADD 1
++#define IW_PMKSA_REMOVE 2
++#define IW_PMKSA_FLUSH 3
++
++#define IW_PMKID_LEN 16
++
++struct iw_pmksa
++{
++ __u32 cmd; /* IW_PMKSA_* */
++ struct sockaddr bssid;
++ __u8 pmkid[IW_PMKID_LEN];
++};
++
++/* IWEVMICHAELMICFAILURE data */
++struct iw_michaelmicfailure
++{
++ __u32 flags;
++ struct sockaddr src_addr;
++ __u8 tsc[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
++};
++
++/* IWEVPMKIDCAND data */
++#define IW_PMKID_CAND_PREAUTH 0x00000001 /* RNS pre-authentication enabled */
++struct iw_pmkid_cand
++{
++ __u32 flags; /* IW_PMKID_CAND_* */
++ __u32 index; /* the smaller the index, the higher the
++ * priority */
++ struct sockaddr bssid;
++};
++
+ /* ------------------------ WIRELESS STATS ------------------------ */
+ /*
+ * Wireless statistics (used for /proc/net/wireless)
+@@ -610,11 +924,12 @@
+ /* Old Frequency (backward compat - moved lower ) */
+ __u16 old_num_channels;
+ __u8 old_num_frequency;
+- /* Filler to keep "version" at the same offset */
+- __s32 old_freq[6];
++
++ /* Wireless event capability bitmasks */
++ __u32 event_capa[6];
+
+ /* signal level threshold range */
+- __s32 sensitivity;
++ __s32 sensitivity;
+
+ /* Quality of link & SNR stuff */
+ /* Quality range (link, level, noise)
+@@ -685,6 +1000,8 @@
+ struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */
+ /* Note : this frequency list doesn't need to fit channel numbers,
+ * because each entry contain its channel index */
++
++ __u32 enc_capa; /* IW_ENC_CAPA_* bit field */
+ };
+
+ /*
+diff -Nur linux-2.4.32/include/net/icmp.h linux-2.4.32.patched/include/net/icmp.h
+--- linux-2.4.32/include/net/icmp.h 2001-11-22 20:47:15.000000000 +0100
++++ linux-2.4.32.patched/include/net/icmp.h 2006-03-13 18:57:38.000000000 +0100
+@@ -23,6 +23,7 @@
+
+ #include <net/sock.h>
+ #include <net/protocol.h>
++#include <net/snmp.h>
+
+ struct icmp_err {
+ int errno;
+diff -Nur linux-2.4.32/include/net/ipv6.h linux-2.4.32.patched/include/net/ipv6.h
+--- linux-2.4.32/include/net/ipv6.h 2004-11-17 12:54:22.000000000 +0100
++++ linux-2.4.32.patched/include/net/ipv6.h 2006-03-13 19:01:26.000000000 +0100
+@@ -101,6 +101,7 @@
+ #ifdef __KERNEL__
+
+ #include <net/sock.h>
++#include <net/snmp.h>
+
+ /* sysctls */
+ extern int sysctl_ipv6_bindv6only;
+diff -Nur linux-2.4.32/include/net/irda/irlan_event.h linux-2.4.32.patched/include/net/irda/irlan_event.h
+--- linux-2.4.32/include/net/irda/irlan_event.h 2000-12-11 22:33:09.000000000 +0100
++++ linux-2.4.32.patched/include/net/irda/irlan_event.h 2006-03-13 18:55:55.000000000 +0100
+@@ -67,8 +67,6 @@
+ IRLAN_WATCHDOG_TIMEOUT,
+ } IRLAN_EVENT;
+
+-extern char *irlan_state[];
+-
+ void irlan_do_client_event(struct irlan_cb *self, IRLAN_EVENT event,
+ struct sk_buff *skb);
+
+diff -Nur linux-2.4.32/include/net/irda/irttp.h linux-2.4.32.patched/include/net/irda/irttp.h
+--- linux-2.4.32/include/net/irda/irttp.h 2003-06-13 16:51:39.000000000 +0200
++++ linux-2.4.32.patched/include/net/irda/irttp.h 2006-03-13 18:55:55.000000000 +0100
+@@ -209,6 +209,4 @@
+ return(irlap_is_primary(self->lsap->lap->irlap));
+ }
+
+-extern struct irttp_cb *irttp;
+-
+ #endif /* IRTTP_H */
+diff -Nur linux-2.4.32/include/net/irda/qos.h linux-2.4.32.patched/include/net/irda/qos.h
+--- linux-2.4.32/include/net/irda/qos.h 2001-11-22 20:47:11.000000000 +0100
++++ linux-2.4.32.patched/include/net/irda/qos.h 2006-03-13 18:57:13.000000000 +0100
+@@ -83,7 +83,6 @@
+ extern int sysctl_max_baud_rate;
+ extern int sysctl_max_inactive_time;
+
+-extern __u32 baud_rates[];
+ extern __u32 data_sizes[];
+ extern __u32 min_turn_times[];
+ extern __u32 add_bofs[];
+diff -Nur linux-2.4.32/include/net/iw_handler.h linux-2.4.32.patched/include/net/iw_handler.h
+--- linux-2.4.32/include/net/iw_handler.h 2003-11-28 19:26:21.000000000 +0100
++++ linux-2.4.32.patched/include/net/iw_handler.h 2006-03-13 18:55:55.000000000 +0100
+@@ -1,10 +1,10 @@
+ /*
+ * This file define the new driver API for Wireless Extensions
+ *
+- * Version : 5 4.12.02
++ * Version : 6 21.6.04
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+- * Copyright (c) 2001-2002 Jean Tourrilhes, All Rights Reserved.
++ * Copyright (c) 2001-2004 Jean Tourrilhes, All Rights Reserved.
+ */
+
+ #ifndef _IW_HANDLER_H
+@@ -206,7 +206,7 @@
+ * will be needed...
+ * I just plan to increment with each new version.
+ */
+-#define IW_HANDLER_VERSION 5
++#define IW_HANDLER_VERSION 6
+
+ /*
+ * Changes :
+@@ -224,11 +224,18 @@
+ * V4 to V5
+ * --------
+ * - Add new spy support : struct iw_spy_data & prototypes
++ *
++ * V5 to V6
++ * --------
++ * - Change the way we get to spy_data method for added safety
++ * - Remove spy #ifdef, they are always on -> cleaner code
++ * - Add IW_DESCR_FLAG_NOMAX flag for very large requests
++ * - Start migrating get_wireless_stats to struct iw_handler_def
+ */
+
+ /**************************** CONSTANTS ****************************/
+
+-/* Enable enhanced spy support. Disable to reduce footprint */
++/* Enhanced spy support available */
+ #define IW_WIRELESS_SPY
+ #define IW_WIRELESS_THRSPY
+
+@@ -258,6 +265,7 @@
+ #define IW_DESCR_FLAG_EVENT 0x0002 /* Generate an event on SET */
+ #define IW_DESCR_FLAG_RESTRICT 0x0004 /* GET : request is ROOT only */
+ /* SET : Omit payload from generated iwevent */
++#define IW_DESCR_FLAG_NOMAX 0x0008 /* GET : no limit on request size */
+ /* Driver level flags */
+ #define IW_DESCR_FLAG_WAIT 0x0100 /* Wait for driver event */
+
+@@ -311,23 +319,25 @@
+ /* Array of handlers for standard ioctls
+ * We will call dev->wireless_handlers->standard[ioctl - SIOCSIWNAME]
+ */
+- iw_handler * standard;
++ const iw_handler * standard;
+
+ /* Array of handlers for private ioctls
+ * Will call dev->wireless_handlers->private[ioctl - SIOCIWFIRSTPRIV]
+ */
+- iw_handler * private;
++ const iw_handler * private;
+
+ /* Arguments of private handler. This one is just a list, so you
+ * can put it in any order you want and should not leave holes...
+ * We will automatically export that to user space... */
+- struct iw_priv_args * private_args;
++ const struct iw_priv_args * private_args;
+
+- /* Driver enhanced spy support */
+- long spy_offset; /* Spy data offset */
++ /* This field will be *removed* in the next version of WE */
++ long spy_offset; /* DO NOT USE */
+
+- /* In the long term, get_wireless_stats will move from
+- * 'struct net_device' to here, to minimise bloat. */
++ /* New location of get_wireless_stats, to de-bloat struct net_device.
++ * The old pointer in struct net_device will be gradually phased
++ * out, and drivers are encouraged to use this one... */
++ struct iw_statistics* (*get_wireless_stats)(struct net_device *dev);
+ };
+
+ /* ---------------------- IOCTL DESCRIPTION ---------------------- */
+@@ -374,18 +384,29 @@
+ */
+ struct iw_spy_data
+ {
+-#ifdef IW_WIRELESS_SPY
+ /* --- Standard spy support --- */
+ int spy_number;
+ u_char spy_address[IW_MAX_SPY][ETH_ALEN];
+ struct iw_quality spy_stat[IW_MAX_SPY];
+-#ifdef IW_WIRELESS_THRSPY
+ /* --- Enhanced spy support (event) */
+ struct iw_quality spy_thr_low; /* Low threshold */
+ struct iw_quality spy_thr_high; /* High threshold */
+ u_char spy_thr_under[IW_MAX_SPY];
+-#endif /* IW_WIRELESS_THRSPY */
+-#endif /* IW_WIRELESS_SPY */
++};
++
++/* --------------------- DEVICE WIRELESS DATA --------------------- */
++/*
++ * This is all the wireless data specific to a device instance that
++ * is managed by the core of Wireless Extensions.
++ * We only keep pointer to those structures, so that a driver is free
++ * to share them between instances.
++ * This structure should be initialised before registering the device.
++ * Access to this data follow the same rules as any other struct net_device
++ * data (i.e. valid as long as struct net_device exist, same locking rules).
++ */
++struct iw_public_data {
++ /* Driver enhanced spy support */
++ struct iw_spy_data * spy_data;
+ };
+
+ /**************************** PROTOTYPES ****************************/
+diff -Nur linux-2.4.32/include/net/pkt_sched.h linux-2.4.32.patched/include/net/pkt_sched.h
+--- linux-2.4.32/include/net/pkt_sched.h 2004-11-17 12:54:22.000000000 +0100
++++ linux-2.4.32.patched/include/net/pkt_sched.h 2006-03-13 18:57:46.000000000 +0100
+@@ -5,7 +5,11 @@
+ #define PSCHED_JIFFIES 2
+ #define PSCHED_CPU 3
+
++#ifdef __mips__
++#define PSCHED_CLOCK_SOURCE PSCHED_CPU
++#else
+ #define PSCHED_CLOCK_SOURCE PSCHED_JIFFIES
++#endif
+
+ #include <linux/config.h>
+ #include <linux/types.h>
+@@ -59,8 +63,11 @@
+ int (*enqueue)(struct sk_buff *, struct Qdisc *);
+ struct sk_buff * (*dequeue)(struct Qdisc *);
+ int (*requeue)(struct sk_buff *, struct Qdisc *);
+- unsigned int (*drop)(struct Qdisc *);
+-
++#ifdef CONFIG_BCM4710
++ int (*drop)(struct Qdisc *);
++#else
++ unsigned int (*drop)(struct Qdisc *);
++#endif
+ int (*init)(struct Qdisc *, struct rtattr *arg);
+ void (*reset)(struct Qdisc *);
+ void (*destroy)(struct Qdisc *);
+@@ -80,12 +87,19 @@
+ #define TCQ_F_THROTTLED 2
+ #define TCQ_F_INGRESS 4
+ struct Qdisc_ops *ops;
++#ifdef CONFIG_BCM4710
++ struct Qdisc *next;
++#endif
+ u32 handle;
+- u32 parent;
++#ifndef CONFIG_BCM4710
++ u32 parent;
++#endif
+ atomic_t refcnt;
+ struct sk_buff_head q;
+ struct net_device *dev;
+- struct list_head list;
++#ifndef CONFIG_BCM4710
++ struct list_head list;
++#endif
+
+ struct tc_stats stats;
+ int (*reshape_fail)(struct sk_buff *skb, struct Qdisc *q);
+@@ -261,7 +275,7 @@
+ #define PSCHED_US2JIFFIE(delay) (((delay)+psched_clock_per_hz-1)/psched_clock_per_hz)
+ #define PSCHED_JIFFIE2US(delay) ((delay)*psched_clock_per_hz)
+
+-#ifdef CONFIG_X86_TSC
++#if defined(CONFIG_X86_TSC) || defined(__mips__)
+
+ #define PSCHED_GET_TIME(stamp) \
+ ({ u64 __cur; \
+diff -Nur linux-2.4.32/include/net/sock.h linux-2.4.32.patched/include/net/sock.h
+--- linux-2.4.32/include/net/sock.h 2004-11-17 12:54:22.000000000 +0100
++++ linux-2.4.32.patched/include/net/sock.h 2006-03-13 18:57:13.000000000 +0100
+@@ -488,7 +488,13 @@
+ } bictcp;
+ };
+
+-
++#if 1
++#define UDP_OPT_IN_SOCK 1
++struct udp_opt {
++ __u32 esp_in_udp;
++};
++#endif
++
+ /*
+ * This structure really needs to be cleaned up.
+ * Most of it is for TCP, and not used by any of
+@@ -655,6 +661,9 @@
+ #if defined(CONFIG_SPX) || defined (CONFIG_SPX_MODULE)
+ struct spx_opt af_spx;
+ #endif /* CONFIG_SPX */
++#if 1
++ struct udp_opt af_udp;
++#endif
+
+ } tp_pinfo;
+
+diff -Nur linux-2.4.32/include/net/udp.h linux-2.4.32.patched/include/net/udp.h
+--- linux-2.4.32/include/net/udp.h 2005-01-19 15:10:13.000000000 +0100
++++ linux-2.4.32.patched/include/net/udp.h 2006-03-13 19:01:28.000000000 +0100
+@@ -25,6 +25,7 @@
+ #include <linux/udp.h>
+ #include <linux/poll.h>
+ #include <net/sock.h>
++#include <net/snmp.h>
+
+ #define UDP_HTABLE_SIZE 128
+
+diff -Nur linux-2.4.32/include/video/newport.h linux-2.4.32.patched/include/video/newport.h
+--- linux-2.4.32/include/video/newport.h 2001-04-12 21:20:31.000000000 +0200
++++ linux-2.4.32.patched/include/video/newport.h 2006-03-13 18:55:54.000000000 +0100
+@@ -291,8 +291,6 @@
+ unsigned int _unused2[0x1ef];
+ struct newport_cregs cgo;
+ };
+-extern struct newport_regs *npregs;
+-
+
+ typedef struct {
+ unsigned int drawmode1;
+@@ -450,38 +448,26 @@
+
+ /* Miscellaneous NEWPORT routines. */
+ #define BUSY_TIMEOUT 100000
+-static __inline__ int newport_wait(void)
++static __inline__ int newport_wait(struct newport_regs *regs)
+ {
+- int i = 0;
++ int t = BUSY_TIMEOUT;
+
+- while(i < BUSY_TIMEOUT)
+- if(!(npregs->cset.status & NPORT_STAT_GBUSY))
++ while (t--)
++ if (!(regs->cset.status & NPORT_STAT_GBUSY))
+ break;
+- if(i == BUSY_TIMEOUT)
+- return 1;
+- return 0;
++ return !t;
+ }
+
+-static __inline__ int newport_bfwait(void)
++static __inline__ int newport_bfwait(struct newport_regs *regs)
+ {
+- int i = 0;
++ int t = BUSY_TIMEOUT;
+
+- while(i < BUSY_TIMEOUT)
+- if(!(npregs->cset.status & NPORT_STAT_BBUSY))
++ while (t--)
++ if(!(regs->cset.status & NPORT_STAT_BBUSY))
+ break;
+- if(i == BUSY_TIMEOUT)
+- return 1;
+- return 0;
++ return !t;
+ }
+
+-/* newport.c and cons_newport.c routines */
+-extern struct graphics_ops *newport_probe (int, const char **);
+-
+-void newport_save (void *);
+-void newport_restore (void *);
+-void newport_reset (void);
+-int newport_ioctl (int card, int cmd, unsigned long arg);
+-
+ /*
+ * DCBMODE register defines:
+ */
+@@ -564,7 +550,7 @@
+ {
+ rex->set.dcbmode = DCB_XMAP0 | XM9_CRS_FIFO_AVAIL |
+ DCB_DATAWIDTH_1 | R_DCB_XMAP9_PROTOCOL;
+- newport_bfwait ();
++ newport_bfwait (rex);
+
+ while ((rex->set.dcbdata0.bybytes.b3 & 3) != XM9_FIFO_EMPTY)
+ ;
diff --git a/toolchain/libnotimpl/Makefile b/toolchain/libnotimpl/Makefile
new file mode 100644
index 0000000000..85156723be
--- /dev/null
+++ b/toolchain/libnotimpl/Makefile
@@ -0,0 +1,39 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libnotimpl
+
+PKG_BUILD_DIR:=$(TOOLCHAIN_BUILD_DIR)/libnotimpl
+
+include $(INCLUDE_DIR)/host-build.mk
+
+define cc
+ $(TARGET_CC) $(TARGET_CFLAGS) -c src/$(1).c -o $(PKG_BUILD_DIR)/$(1).o
+endef
+
+define Build/Prepare
+ rm -rf $(PKG_BUILD_DIR)
+ mkdir -p $(PKG_BUILD_DIR)
+endef
+
+define Build/Compile
+ $(call cc,math)
+ $(TARGET_CROSS)ar rc $(PKG_BUILD_DIR)/libnotimpl.a $(PKG_BUILD_DIR)/*.o
+endef
+
+define Build/Install
+ mkdir -p $(STAGING_DIR)/usr/lib
+ $(CP) $(PKG_BUILD_DIR)/libnotimpl.a $(STAGING_DIR)/usr/lib/
+endef
+
+define Build/Clean
+ rm -f $(STAGING_DIR)/usr/lib/libnotimpl.a
+endef
+
+$(eval $(call HostBuild))
+
diff --git a/toolchain/libnotimpl/src/math.c b/toolchain/libnotimpl/src/math.c
new file mode 100644
index 0000000000..5bfcb9532e
--- /dev/null
+++ b/toolchain/libnotimpl/src/math.c
@@ -0,0 +1,68 @@
+/* vi: set sw=4 ts=4: */
+
+#include "math.h"
+
+
+/* cosf for uClibc
+ *
+ * wrapper for cos(x)
+ */
+
+#ifdef __STDC__
+ float cosf(float x)
+#else
+ float cosf(x)
+ float x;
+#endif
+{
+ return (float) cos( (double)x );
+}
+
+
+/* sinf for uClibc
+ *
+ * wrapper for sin(x)
+ */
+
+#ifdef __STDC__
+ float sinf(float x)
+#else
+ float sinf(x)
+ float x;
+#endif
+{
+ return (float) sin( (double)x );
+}
+
+
+/* ceilf for uClibc
+ *
+ * wrapper for ceil(x)
+ */
+
+#ifdef __STDC__
+ float ceilf(float x)
+#else
+ float ceilf(x)
+ float x;
+#endif
+{
+ return (float) ceil( (double)x );
+}
+
+
+/* rintf for uClibc
+ *
+ * wrapper for rint(x)
+ */
+
+#ifdef __STDC__
+ float rintf(float x)
+#else
+ float rintf(x)
+ float x;
+#endif
+{
+ return (float) sin( (double)x );
+}
+
diff --git a/toolchain/uClibc/Makefile b/toolchain/uClibc/Makefile
new file mode 100644
index 0000000000..732911215e
--- /dev/null
+++ b/toolchain/uClibc/Makefile
@@ -0,0 +1,98 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/target.mk
+
+PKG_NAME:=uClibc
+PKG_VERSION:=0.9.28
+
+PKG_SOURCE:=uClibc-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=http://www.uclibc.org/downloads
+PKG_MD5SUM:=1ada58d919a82561061e4741fb6abd29
+PKG_CAT:=bzcat
+
+PKG_BUILD_DIR:=$(TOOLCHAIN_BUILD_DIR)/uClibc-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/host-build.mk
+
+UCLIBC_TARGET_ARCH:=$(shell echo $(ARCH) | sed -e s'/-.*//' \
+ -e 's/i.86/i386/' \
+ -e 's/sparc.*/sparc/' \
+ -e 's/arm.*/arm/g' \
+ -e 's/m68k.*/m68k/' \
+ -e 's/ppc/powerpc/g' \
+ -e 's/v850.*/v850/g' \
+ -e 's/sh64/sh/' \
+ -e 's/sh[234].*/sh/' \
+ -e 's/mips.*/mips/' \
+ -e 's/mipsel.*/mips/' \
+ -e 's/cris.*/cris/' \
+)
+
+define Build/Prepare
+ $(call Build/Prepare/Default)
+ $(SED) 's,^CROSS=.*,CROSS=$(TARGET_CROSS),g' $(PKG_BUILD_DIR)/Rules.mak
+ if [ -e config/$(ARCH).$(BOARD) ]; then \
+ $(CP) config/$(ARCH).$(BOARD) $(PKG_BUILD_DIR)/.config; \
+ else \
+ $(CP) config/$(ARCH) $(PKG_BUILD_DIR)/.config; \
+ fi
+ $(SED) 's,^KERNEL_SOURCE=.*,KERNEL_SOURCE=\"$(LINUX_HEADERS_DIR)\",g' \
+ $(PKG_BUILD_DIR)/.config
+ifeq ($(CONFIG_LARGEFILE),y)
+ $(SED) 's,^.*UCLIBC_HAS_LFS.*,UCLIBC_HAS_LFS=y,g' $(PKG_BUILD_DIR)/.config
+else
+ $(SED) 's,^.*UCLIBC_HAS_LFS.*,UCLIBC_HAS_LFS=n,g' $(PKG_BUILD_DIR)/.config
+endif
+ $(SED) 's,.*UCLIBC_HAS_WCHAR.*,UCLIBC_HAS_WCHAR=y,g' $(PKG_BUILD_DIR)/.config
+ifeq ($(CONFIG_SOFT_FLOAT),y)
+ $(SED) 's,.*HAS_FPU.*,HAS_FPU=n\nUCLIBC_HAS_FLOATS=y\nUCLIBC_HAS_SOFT_FLOAT=y,g' $(PKG_BUILD_DIR)/.config
+endif
+ mkdir -p $(TOOLCHAIN_BUILD_DIR)/uClibc_dev/usr/include
+ mkdir -p $(TOOLCHAIN_BUILD_DIR)/uClibc_dev/usr/lib
+ mkdir -p $(TOOLCHAIN_BUILD_DIR)/uClibc_dev/lib
+ PATH=$(TARGET_PATH) $(MAKE) -C $(PKG_BUILD_DIR) \
+ PREFIX=$(TOOLCHAIN_BUILD_DIR)/uClibc_dev/ \
+ DEVEL_PREFIX=/usr/ \
+ RUNTIME_PREFIX=$(TOOLCHAIN_BUILD_DIR)/uClibc_dev/ \
+ HOSTCC="$(HOSTCC)" \
+ CPU_CFLAGS="$(TARGET_CFLAGS)" \
+ pregen install_dev;
+endef
+
+define Build/Configure
+endef
+
+define Build/Compile
+ PATH=$(TARGET_PATH) $(MAKE) -C $(PKG_BUILD_DIR) \
+ PREFIX= \
+ DEVEL_PREFIX=/ \
+ RUNTIME_PREFIX=/ \
+ HOSTCC="$(HOSTCC)" \
+ CPU_CFLAGS="$(TARGET_CFLAGS)" \
+ all
+endef
+
+define Build/Install
+ $(MAKE) -C $(PKG_BUILD_DIR) \
+ PREFIX=$(STAGING_DIR)/ \
+ DEVEL_PREFIX=/ \
+ RUNTIME_PREFIX=/ \
+ install_runtime
+ $(MAKE) -C $(PKG_BUILD_DIR) \
+ PREFIX=$(STAGING_DIR)/ \
+ DEVEL_PREFIX=/ \
+ RUNTIME_PREFIX=/ \
+ install_dev
+ echo $(PKG_VERSION) > $(STAGING_DIR)/uclibc_version
+endef
+
+define Build/Clean
+ rm -rf $(PKG_BUILD_DIR) $(TOOLCHAIN_BUILD_DIR)/uClibc_dev
+endef
+
+$(eval $(call HostBuild))
diff --git a/toolchain/uClibc/config/armeb b/toolchain/uClibc/config/armeb
new file mode 100644
index 0000000000..fa796953f2
--- /dev/null
+++ b/toolchain/uClibc/config/armeb
@@ -0,0 +1,168 @@
+#
+# Automatically generated make config: don't edit
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+HAVE_ELF=y
+ARCH_SUPPORTS_LITTLE_ENDIAN=y
+TARGET_ARCH="arm"
+ARCH_SUPPORTS_BIG_ENDIAN=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# ARCH_LITTLE_ENDIAN is not set
+ARCH_BIG_ENDIAN=y
+# ARCH_HAS_NO_MMU is not set
+ARCH_HAS_MMU=y
+UCLIBC_HAS_FLOATS=y
+# HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+# DO_C99_MATH is not set
+KERNEL_SOURCE="./toolchain_build_armeb/linux"
+C_SYMBOL_PREFIX=""
+HAVE_DOT_CONFIG=y
+
+#
+# General Library Settings
+#
+# HAVE_NO_PIC is not set
+DOPIC=y
+# HAVE_NO_SHARED is not set
+HAVE_SHARED=y
+# ARCH_HAS_NO_LDSO is not set
+BUILD_UCLIBC_LDSO=y
+# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
+LDSO_LDD_SUPPORT=y
+LDSO_CACHE_SUPPORT=y
+# LDSO_PRELOAD_FILE_SUPPORT is not set
+LDSO_BASE_FILENAME="ld.so"
+# LDSO_RUNPATH is not set
+# DL_FINI_CRT_COMPAT is not set
+UCLIBC_CTOR_DTOR=y
+# HAS_NO_THREADS is not set
+UCLIBC_HAS_THREADS=y
+# PTHREADS_DEBUG_SUPPORT is not set
+UCLIBC_HAS_LFS=y
+# UCLIBC_STATIC_LDCONFIG is not set
+# MALLOC is not set
+# MALLOC_SIMPLE is not set
+MALLOC_STANDARD=y
+MALLOC_GLIBC_COMPAT=y
+UCLIBC_DYNAMIC_ATEXIT=y
+HAS_SHADOW=y
+# UNIX98PTY_ONLY is not set
+ASSUME_DEVPTS=y
+UCLIBC_HAS_TM_EXTENSIONS=y
+UCLIBC_HAS_TZ_CACHING=y
+UCLIBC_HAS_TZ_FILE=y
+UCLIBC_HAS_TZ_FILE_READ_MANY=y
+UCLIBC_TZ_FILE_PATH="/etc/TZ"
+
+#
+# Networking Support
+#
+UCLIBC_HAS_IPV6=y
+UCLIBC_HAS_RPC=y
+UCLIBC_HAS_FULL_RPC=y
+
+#
+# String and Stdio Support
+#
+UCLIBC_HAS_STRING_GENERIC_OPT=y
+UCLIBC_HAS_STRING_ARCH_OPT=y
+UCLIBC_HAS_CTYPE_TABLES=y
+UCLIBC_HAS_CTYPE_SIGNED=y
+# UCLIBC_HAS_CTYPE_UNSAFE is not set
+UCLIBC_HAS_CTYPE_CHECKED=y
+# UCLIBC_HAS_CTYPE_ENFORCED is not set
+UCLIBC_HAS_WCHAR=y
+# UCLIBC_HAS_LOCALE is not set
+UCLIBC_HAS_HEXADECIMAL_FLOATS=y
+UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
+UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
+UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y
+# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
+UCLIBC_HAS_STDIO_BUFSIZ_4096=y
+# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
+UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
+# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
+UCLIBC_HAS_STDIO_GETC_MACRO=y
+UCLIBC_HAS_STDIO_PUTC_MACRO=y
+UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
+# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
+UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
+UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
+UCLIBC_HAS_PRINTF_M_SPEC=y
+UCLIBC_HAS_ERRNO_MESSAGES=y
+# UCLIBC_HAS_SYS_ERRLIST is not set
+UCLIBC_HAS_SIGNUM_MESSAGES=y
+# UCLIBC_HAS_SYS_SIGLIST is not set
+UCLIBC_HAS_GNU_GETOPT=y
+
+#
+# Big and Tall
+#
+UCLIBC_HAS_REGEX=y
+UCLIBC_HAS_WORDEXP=y
+UCLIBC_HAS_FTW=y
+UCLIBC_HAS_GLOB=y
+
+#
+# Library Installation Options
+#
+SHARED_LIB_LOADER_PREFIX="/lib"
+RUNTIME_PREFIX="/"
+DEVEL_PREFIX="/usr/"
+
+#
+# uClibc security related options
+#
+# UCLIBC_SECURITY is not set
+
+#
+# uClibc development/debugging options
+#
+CROSS_COMPILER_PREFIX=""
+# DODEBUG is not set
+# DODEBUG_PT is not set
+# DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
+WARNINGS="-Wall"
+# UCLIBC_MJN3_ONLY is not set
diff --git a/toolchain/uClibc/config/i386 b/toolchain/uClibc/config/i386
new file mode 100644
index 0000000000..e258ffe935
--- /dev/null
+++ b/toolchain/uClibc/config/i386
@@ -0,0 +1,185 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+#
+# Automatically generated make config: don't edit
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+TARGET_i386=y
+# TARGET_i960 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+HAVE_ELF=y
+ARCH_SUPPORTS_LITTLE_ENDIAN=y
+TARGET_ARCH="i386"
+# CONFIG_GENERIC_386 is not set
+# CONFIG_386 is not set
+CONFIG_486=y
+# CONFIG_586 is not set
+# CONFIG_586MMX is not set
+# CONFIG_686 is not set
+# CONFIG_PENTIUMII is not set
+# CONFIG_PENTIUMIII is not set
+# CONFIG_PENTIUM4 is not set
+# CONFIG_K6 is not set
+# CONFIG_K7 is not set
+# CONFIG_ELAN is not set
+# CONFIG_CRUSOE is not set
+# CONFIG_WINCHIPC6 is not set
+# CONFIG_WINCHIP2 is not set
+# CONFIG_CYRIXIII is not set
+# CONFIG_NEHEMIAH is not set
+# CONFIG_MIPS_ISA_1 is not set
+# CONFIG_MIPS_ISA_2 is not set
+# CONFIG_MIPS_ISA_3 is not set
+# CONFIG_MIPS_ISA_4 is not set
+# CONFIG_MIPS_ISA_MIPS32 is not set
+# CONFIG_MIPS_ISA_MIPS64 is not set
+ARCH_LITTLE_ENDIAN=y
+# ARCH_BIG_ENDIAN is not set
+# ARCH_HAS_NO_MMU is not set
+ARCH_HAS_MMU=y
+UCLIBC_HAS_FLOATS=y
+HAS_FPU=y
+# DO_C99_MATH is not set
+KERNEL_SOURCE="./toolchain_build_i386/linux"
+C_SYMBOL_PREFIX=""
+HAVE_DOT_CONFIG=y
+
+#
+# General Library Settings
+#
+# HAVE_NO_PIC is not set
+DOPIC=y
+# HAVE_NO_SHARED is not set
+HAVE_SHARED=y
+# ARCH_HAS_NO_LDSO is not set
+BUILD_UCLIBC_LDSO=y
+# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
+LDSO_LDD_SUPPORT=y
+LDSO_CACHE_SUPPORT=y
+# LDSO_PRELOAD_FILE_SUPPORT is not set
+LDSO_BASE_FILENAME="ld.so"
+# LDSO_RUNPATH is not set
+# DL_FINI_CRT_COMPAT is not set
+UCLIBC_CTOR_DTOR=y
+# HAS_NO_THREADS is not set
+UCLIBC_HAS_THREADS=y
+# PTHREADS_DEBUG_SUPPORT is not set
+UCLIBC_HAS_LFS=y
+# UCLIBC_STATIC_LDCONFIG is not set
+# MALLOC is not set
+# MALLOC_SIMPLE is not set
+MALLOC_STANDARD=y
+MALLOC_GLIBC_COMPAT=y
+UCLIBC_DYNAMIC_ATEXIT=y
+HAS_SHADOW=y
+# UNIX98PTY_ONLY is not set
+ASSUME_DEVPTS=y
+UCLIBC_HAS_TM_EXTENSIONS=y
+UCLIBC_HAS_TZ_CACHING=y
+UCLIBC_HAS_TZ_FILE=y
+UCLIBC_HAS_TZ_FILE_READ_MANY=y
+UCLIBC_TZ_FILE_PATH="/etc/TZ"
+
+#
+# Networking Support
+#
+UCLIBC_HAS_IPV6=y
+UCLIBC_HAS_RPC=y
+UCLIBC_HAS_FULL_RPC=y
+
+#
+# String and Stdio Support
+#
+UCLIBC_HAS_STRING_GENERIC_OPT=y
+UCLIBC_HAS_STRING_ARCH_OPT=y
+UCLIBC_HAS_CTYPE_TABLES=y
+UCLIBC_HAS_CTYPE_SIGNED=y
+# UCLIBC_HAS_CTYPE_UNSAFE is not set
+UCLIBC_HAS_CTYPE_CHECKED=y
+# UCLIBC_HAS_CTYPE_ENFORCED is not set
+UCLIBC_HAS_WCHAR=y
+# UCLIBC_HAS_LOCALE is not set
+UCLIBC_HAS_HEXADECIMAL_FLOATS=y
+UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
+UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
+UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y
+# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
+UCLIBC_HAS_STDIO_BUFSIZ_4096=y
+# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
+UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
+# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
+UCLIBC_HAS_STDIO_GETC_MACRO=y
+UCLIBC_HAS_STDIO_PUTC_MACRO=y
+UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
+# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
+UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
+UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
+UCLIBC_HAS_PRINTF_M_SPEC=y
+UCLIBC_HAS_ERRNO_MESSAGES=y
+# UCLIBC_HAS_SYS_ERRLIST is not set
+UCLIBC_HAS_SIGNUM_MESSAGES=y
+# UCLIBC_HAS_SYS_SIGLIST is not set
+UCLIBC_HAS_GNU_GETOPT=y
+
+#
+# Big and Tall
+#
+UCLIBC_HAS_REGEX=y
+UCLIBC_HAS_WORDEXP=y
+UCLIBC_HAS_FTW=y
+UCLIBC_HAS_GLOB=y
+
+#
+# Library Installation Options
+#
+SHARED_LIB_LOADER_PREFIX="/lib"
+RUNTIME_PREFIX="/"
+DEVEL_PREFIX="/usr/"
+
+#
+# uClibc security related options
+#
+# UCLIBC_SECURITY is not set
+
+#
+# uClibc development/debugging options
+#
+CROSS_COMPILER_PREFIX=""
+# DODEBUG is not set
+# DODEBUG_PT is not set
+# DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
+WARNINGS="-Wall"
+# UCLIBC_MJN3_ONLY is not set
diff --git a/toolchain/uClibc/config/mips b/toolchain/uClibc/config/mips
new file mode 100644
index 0000000000..ac30b59648
--- /dev/null
+++ b/toolchain/uClibc/config/mips
@@ -0,0 +1,170 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+#
+# Automatically generated make config: don't edit
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+TARGET_mips=y
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+HAVE_ELF=y
+ARCH_SUPPORTS_LITTLE_ENDIAN=y
+TARGET_ARCH="mips"
+ARCH_CFLAGS="-mno-split-addresses"
+ARCH_SUPPORTS_BIG_ENDIAN=y
+# CONFIG_MIPS_ISA_1 is not set
+# CONFIG_MIPS_ISA_2 is not set
+# CONFIG_MIPS_ISA_3 is not set
+# CONFIG_MIPS_ISA_4 is not set
+CONFIG_MIPS_ISA_MIPS32=y
+# CONFIG_MIPS_ISA_MIPS64 is not set
+# ARCH_LITTLE_ENDIAN is not set
+ARCH_BIG_ENDIAN=y
+# ARCH_HAS_NO_MMU is not set
+ARCH_HAS_MMU=y
+UCLIBC_HAS_FLOATS=y
+HAS_FPU=y
+# DO_C99_MATH is not set
+KERNEL_SOURCE="./toolchain_build_mips/linux"
+C_SYMBOL_PREFIX=""
+HAVE_DOT_CONFIG=y
+
+#
+# General Library Settings
+#
+# HAVE_NO_PIC is not set
+DOPIC=y
+# HAVE_NO_SHARED is not set
+HAVE_SHARED=y
+# ARCH_HAS_NO_LDSO is not set
+BUILD_UCLIBC_LDSO=y
+# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
+LDSO_LDD_SUPPORT=y
+LDSO_CACHE_SUPPORT=y
+# LDSO_PRELOAD_FILE_SUPPORT is not set
+LDSO_BASE_FILENAME="ld.so"
+# LDSO_RUNPATH is not set
+DL_FINI_CRT_COMPAT=y
+UCLIBC_CTOR_DTOR=y
+# HAS_NO_THREADS is not set
+UCLIBC_HAS_THREADS=y
+# PTHREADS_DEBUG_SUPPORT is not set
+UCLIBC_HAS_LFS=y
+# UCLIBC_STATIC_LDCONFIG is not set
+# MALLOC is not set
+# MALLOC_SIMPLE is not set
+MALLOC_STANDARD=y
+MALLOC_GLIBC_COMPAT=y
+UCLIBC_DYNAMIC_ATEXIT=y
+HAS_SHADOW=y
+# UNIX98PTY_ONLY is not set
+ASSUME_DEVPTS=y
+UCLIBC_HAS_TM_EXTENSIONS=y
+UCLIBC_HAS_TZ_CACHING=y
+UCLIBC_HAS_TZ_FILE=y
+UCLIBC_HAS_TZ_FILE_READ_MANY=y
+UCLIBC_TZ_FILE_PATH="/etc/TZ"
+
+#
+# Networking Support
+#
+UCLIBC_HAS_IPV6=y
+UCLIBC_HAS_RPC=y
+UCLIBC_HAS_FULL_RPC=y
+
+#
+# String and Stdio Support
+#
+UCLIBC_HAS_STRING_GENERIC_OPT=y
+UCLIBC_HAS_STRING_ARCH_OPT=y
+UCLIBC_HAS_CTYPE_TABLES=y
+UCLIBC_HAS_CTYPE_SIGNED=y
+# UCLIBC_HAS_CTYPE_UNSAFE is not set
+UCLIBC_HAS_CTYPE_CHECKED=y
+# UCLIBC_HAS_CTYPE_ENFORCED is not set
+UCLIBC_HAS_WCHAR=y
+# UCLIBC_HAS_LOCALE is not set
+UCLIBC_HAS_HEXADECIMAL_FLOATS=y
+UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
+UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
+UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y
+# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
+UCLIBC_HAS_STDIO_BUFSIZ_4096=y
+# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
+UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
+# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
+UCLIBC_HAS_STDIO_GETC_MACRO=y
+UCLIBC_HAS_STDIO_PUTC_MACRO=y
+UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
+# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
+UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
+UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
+UCLIBC_HAS_PRINTF_M_SPEC=y
+UCLIBC_HAS_ERRNO_MESSAGES=y
+# UCLIBC_HAS_SYS_ERRLIST is not set
+UCLIBC_HAS_SIGNUM_MESSAGES=y
+# UCLIBC_HAS_SYS_SIGLIST is not set
+UCLIBC_HAS_GNU_GETOPT=y
+
+#
+# Big and Tall
+#
+UCLIBC_HAS_REGEX=y
+UCLIBC_HAS_WORDEXP=y
+UCLIBC_HAS_FTW=y
+UCLIBC_HAS_GLOB=y
+
+#
+# Library Installation Options
+#
+SHARED_LIB_LOADER_PREFIX="/lib"
+RUNTIME_PREFIX="/"
+DEVEL_PREFIX="/usr/"
+
+#
+# uClibc security related options
+#
+# UCLIBC_SECURITY is not set
+
+#
+# uClibc development/debugging options
+#
+CROSS_COMPILER_PREFIX=""
+# DODEBUG is not set
+# DODEBUG_PT is not set
+# DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
+WARNINGS="-Wall"
+# UCLIBC_MJN3_ONLY is not set
diff --git a/toolchain/uClibc/config/mipsel b/toolchain/uClibc/config/mipsel
new file mode 100644
index 0000000000..7a959e2ec4
--- /dev/null
+++ b/toolchain/uClibc/config/mipsel
@@ -0,0 +1,170 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+#
+# Automatically generated make config: don't edit
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+TARGET_mips=y
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+HAVE_ELF=y
+ARCH_SUPPORTS_LITTLE_ENDIAN=y
+TARGET_ARCH="mips"
+ARCH_CFLAGS="-mno-split-addresses"
+ARCH_SUPPORTS_BIG_ENDIAN=y
+# CONFIG_MIPS_ISA_1 is not set
+# CONFIG_MIPS_ISA_2 is not set
+# CONFIG_MIPS_ISA_3 is not set
+# CONFIG_MIPS_ISA_4 is not set
+CONFIG_MIPS_ISA_MIPS32=y
+# CONFIG_MIPS_ISA_MIPS64 is not set
+ARCH_LITTLE_ENDIAN=y
+# ARCH_BIG_ENDIAN is not set
+# ARCH_HAS_NO_MMU is not set
+ARCH_HAS_MMU=y
+UCLIBC_HAS_FLOATS=y
+HAS_FPU=y
+# DO_C99_MATH is not set
+KERNEL_SOURCE="./toolchain_build_mipsel/linux"
+C_SYMBOL_PREFIX=""
+HAVE_DOT_CONFIG=y
+
+#
+# General Library Settings
+#
+# HAVE_NO_PIC is not set
+DOPIC=y
+# HAVE_NO_SHARED is not set
+HAVE_SHARED=y
+# ARCH_HAS_NO_LDSO is not set
+BUILD_UCLIBC_LDSO=y
+# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
+LDSO_LDD_SUPPORT=y
+LDSO_CACHE_SUPPORT=y
+# LDSO_PRELOAD_FILE_SUPPORT is not set
+LDSO_BASE_FILENAME="ld.so"
+# LDSO_RUNPATH is not set
+DL_FINI_CRT_COMPAT=y
+UCLIBC_CTOR_DTOR=y
+# HAS_NO_THREADS is not set
+UCLIBC_HAS_THREADS=y
+# PTHREADS_DEBUG_SUPPORT is not set
+UCLIBC_HAS_LFS=y
+# UCLIBC_STATIC_LDCONFIG is not set
+# MALLOC is not set
+# MALLOC_SIMPLE is not set
+MALLOC_STANDARD=y
+MALLOC_GLIBC_COMPAT=y
+UCLIBC_DYNAMIC_ATEXIT=y
+HAS_SHADOW=y
+# UNIX98PTY_ONLY is not set
+ASSUME_DEVPTS=y
+UCLIBC_HAS_TM_EXTENSIONS=y
+UCLIBC_HAS_TZ_CACHING=y
+UCLIBC_HAS_TZ_FILE=y
+UCLIBC_HAS_TZ_FILE_READ_MANY=y
+UCLIBC_TZ_FILE_PATH="/etc/TZ"
+
+#
+# Networking Support
+#
+UCLIBC_HAS_IPV6=y
+UCLIBC_HAS_RPC=y
+UCLIBC_HAS_FULL_RPC=y
+
+#
+# String and Stdio Support
+#
+UCLIBC_HAS_STRING_GENERIC_OPT=y
+UCLIBC_HAS_STRING_ARCH_OPT=y
+UCLIBC_HAS_CTYPE_TABLES=y
+UCLIBC_HAS_CTYPE_SIGNED=y
+# UCLIBC_HAS_CTYPE_UNSAFE is not set
+UCLIBC_HAS_CTYPE_CHECKED=y
+# UCLIBC_HAS_CTYPE_ENFORCED is not set
+UCLIBC_HAS_WCHAR=y
+# UCLIBC_HAS_LOCALE is not set
+UCLIBC_HAS_HEXADECIMAL_FLOATS=y
+UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
+UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
+UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y
+# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
+UCLIBC_HAS_STDIO_BUFSIZ_4096=y
+# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
+UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
+# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
+UCLIBC_HAS_STDIO_GETC_MACRO=y
+UCLIBC_HAS_STDIO_PUTC_MACRO=y
+UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
+# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
+UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
+UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
+UCLIBC_HAS_PRINTF_M_SPEC=y
+UCLIBC_HAS_ERRNO_MESSAGES=y
+# UCLIBC_HAS_SYS_ERRLIST is not set
+UCLIBC_HAS_SIGNUM_MESSAGES=y
+# UCLIBC_HAS_SYS_SIGLIST is not set
+UCLIBC_HAS_GNU_GETOPT=y
+
+#
+# Big and Tall
+#
+UCLIBC_HAS_REGEX=y
+UCLIBC_HAS_WORDEXP=y
+UCLIBC_HAS_FTW=y
+UCLIBC_HAS_GLOB=y
+
+#
+# Library Installation Options
+#
+SHARED_LIB_LOADER_PREFIX="/lib"
+RUNTIME_PREFIX="/"
+DEVEL_PREFIX="/usr/"
+
+#
+# uClibc security related options
+#
+# UCLIBC_SECURITY is not set
+
+#
+# uClibc development/debugging options
+#
+CROSS_COMPILER_PREFIX=""
+# DODEBUG is not set
+# DODEBUG_PT is not set
+# DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
+WARNINGS="-Wall"
+# UCLIBC_MJN3_ONLY is not set
diff --git a/toolchain/uClibc/config/powerpc b/toolchain/uClibc/config/powerpc
new file mode 100644
index 0000000000..d54443a92b
--- /dev/null
+++ b/toolchain/uClibc/config/powerpc
@@ -0,0 +1,168 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+#
+
+# Automatically generated make config: don't edit
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+TARGET_powerpc=y
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+HAVE_ELF=y
+TARGET_ARCH="powerpc"
+ARCH_SUPPORTS_BIG_ENDIAN=y
+# CONFIG_MIPS_ISA_1 is not set
+# CONFIG_MIPS_ISA_2 is not set
+# CONFIG_MIPS_ISA_3 is not set
+# CONFIG_MIPS_ISA_4 is not set
+# CONFIG_MIPS_ISA_MIPS32 is not set
+# CONFIG_MIPS_ISA_MIPS64 is not set
+# ARCH_LITTLE_ENDIAN is not set
+ARCH_BIG_ENDIAN=y
+# ARCH_HAS_NO_MMU is not set
+ARCH_HAS_MMU=y
+UCLIBC_HAS_FLOATS=y
+HAS_FPU=y
+# DO_C99_MATH is not set
+KERNEL_SOURCE="./toolchain_build_powerpc/linux"
+C_SYMBOL_PREFIX=""
+HAVE_DOT_CONFIG=y
+
+#
+# General Library Settings
+#
+# HAVE_NO_PIC is not set
+DOPIC=y
+# HAVE_NO_SHARED is not set
+HAVE_SHARED=y
+# ARCH_HAS_NO_LDSO is not set
+BUILD_UCLIBC_LDSO=y
+# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
+LDSO_LDD_SUPPORT=y
+LDSO_CACHE_SUPPORT=y
+# LDSO_PRELOAD_FILE_SUPPORT is not set
+LDSO_BASE_FILENAME="ld.so"
+# LDSO_RUNPATH is not set
+DL_FINI_CRT_COMPAT=y
+UCLIBC_CTOR_DTOR=y
+# HAS_NO_THREADS is not set
+UCLIBC_HAS_THREADS=y
+# PTHREADS_DEBUG_SUPPORT is not set
+UCLIBC_HAS_LFS=y
+# UCLIBC_STATIC_LDCONFIG is not set
+# MALLOC is not set
+# MALLOC_SIMPLE is not set
+MALLOC_STANDARD=y
+MALLOC_GLIBC_COMPAT=y
+UCLIBC_DYNAMIC_ATEXIT=y
+HAS_SHADOW=y
+# UNIX98PTY_ONLY is not set
+ASSUME_DEVPTS=y
+UCLIBC_HAS_TM_EXTENSIONS=y
+UCLIBC_HAS_TZ_CACHING=y
+UCLIBC_HAS_TZ_FILE=y
+UCLIBC_HAS_TZ_FILE_READ_MANY=y
+UCLIBC_TZ_FILE_PATH="/etc/TZ"
+
+#
+# Networking Support
+#
+UCLIBC_HAS_IPV6=y
+UCLIBC_HAS_RPC=y
+UCLIBC_HAS_FULL_RPC=y
+
+#
+# String and Stdio Support
+#
+UCLIBC_HAS_STRING_GENERIC_OPT=y
+UCLIBC_HAS_STRING_ARCH_OPT=y
+UCLIBC_HAS_CTYPE_TABLES=y
+UCLIBC_HAS_CTYPE_SIGNED=y
+# UCLIBC_HAS_CTYPE_UNSAFE is not set
+UCLIBC_HAS_CTYPE_CHECKED=y
+# UCLIBC_HAS_CTYPE_ENFORCED is not set
+UCLIBC_HAS_WCHAR=y
+# UCLIBC_HAS_LOCALE is not set
+UCLIBC_HAS_HEXADECIMAL_FLOATS=y
+UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
+UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
+UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y
+# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
+UCLIBC_HAS_STDIO_BUFSIZ_4096=y
+# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
+UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
+# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
+UCLIBC_HAS_STDIO_GETC_MACRO=y
+UCLIBC_HAS_STDIO_PUTC_MACRO=y
+UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
+# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
+UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
+UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
+UCLIBC_HAS_PRINTF_M_SPEC=y
+UCLIBC_HAS_ERRNO_MESSAGES=y
+# UCLIBC_HAS_SYS_ERRLIST is not set
+UCLIBC_HAS_SIGNUM_MESSAGES=y
+# UCLIBC_HAS_SYS_SIGLIST is not set
+UCLIBC_HAS_GNU_GETOPT=y
+
+#
+# Big and Tall
+#
+UCLIBC_HAS_REGEX=y
+UCLIBC_HAS_WORDEXP=y
+UCLIBC_HAS_FTW=y
+UCLIBC_HAS_GLOB=y
+
+#
+# Library Installation Options
+#
+SHARED_LIB_LOADER_PREFIX="/lib"
+RUNTIME_PREFIX="/"
+DEVEL_PREFIX="/usr/"
+
+#
+# uClibc security related options
+#
+# UCLIBC_SECURITY is not set
+
+#
+# uClibc development/debugging options
+#
+CROSS_COMPILER_PREFIX=""
+# DODEBUG is not set
+# DODEBUG_PT is not set
+# DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
+WARNINGS="-Wall"
+# UCLIBC_MJN3_ONLY is not set
diff --git a/toolchain/uClibc/patches/100-signal_handler_crash_workaround.patch b/toolchain/uClibc/patches/100-signal_handler_crash_workaround.patch
new file mode 100644
index 0000000000..72cdb7212e
--- /dev/null
+++ b/toolchain/uClibc/patches/100-signal_handler_crash_workaround.patch
@@ -0,0 +1,13 @@
+diff -ur uClibc-0.9.28/libc/sysdeps/linux/mips/sigaction.c uClibc-0.9.28.openwrt/libc/sysdeps/linux/mips/sigaction.c
+--- uClibc-0.9.28/libc/sysdeps/linux/mips/sigaction.c 2005-08-18 00:49:44.000000000 +0200
++++ uClibc-0.9.28.openwrt/libc/sysdeps/linux/mips/sigaction.c 2005-10-20 13:19:05.000000000 +0200
+@@ -49,7 +49,8 @@
+ memcpy (&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask));
+ kact.sa_flags = act->sa_flags;
+
+- kact.sa_flags = act->sa_flags | SA_RESTORER;
++/* http://bugs.uclibc.org/view.php?id=480
++ kact.sa_flags = act->sa_flags | SA_RESTORER; */
+ #ifdef HAVE_SA_RESTORER
+ kact.sa_restorer = act->sa_restorer;
+ #endif
diff --git a/toolchain/uClibc/patches/110-mips_pipe.patch b/toolchain/uClibc/patches/110-mips_pipe.patch
new file mode 100644
index 0000000000..734310f07e
--- /dev/null
+++ b/toolchain/uClibc/patches/110-mips_pipe.patch
@@ -0,0 +1,27 @@
+diff -ur uClibc-0.9.28/libc/sysdeps/linux/mips/pipe.S uClibc-0.9.28.openwrt/libc/sysdeps/linux/mips/pipe.S
+--- uClibc-0.9.28/libc/sysdeps/linux/mips/pipe.S 2005-08-18 00:49:44.000000000 +0200
++++ uClibc-0.9.28.openwrt/libc/sysdeps/linux/mips/pipe.S 2005-10-20 12:34:52.000000000 +0200
+@@ -10,22 +10,17 @@
+ .globl pipe
+ .ent pipe, 0
+ pipe:
+- addiu sp,sp,-24
+- sw a0,16(sp)
+ li v0,__NR_pipe
+ syscall
+ beqz a3, 1f
+- la t3, errno
+- sw v0, (t3)
++ sw v0, errno
+ li v0, -1
+ b 2f
+ 1:
+- lw a0, 16(sp)
+ sw v0, 0(a0)
+ sw v1, 4(a0)
+ li v0, 0
+ 2:
+- addiu sp,sp,24
+ j ra
+ .end pipe
+ .size pipe,.-pipe
diff --git a/toolchain/uClibc/patches/120-more_standard_math.patch b/toolchain/uClibc/patches/120-more_standard_math.patch
new file mode 100644
index 0000000000..f7d626ac03
--- /dev/null
+++ b/toolchain/uClibc/patches/120-more_standard_math.patch
@@ -0,0 +1,12 @@
+diff -urN uClibc.old/libm/Makefile uClibc.dev/libm/Makefile
+--- uClibc.old/libm/Makefile 2005-08-18 00:49:41.000000000 +0200
++++ uClibc.dev/libm/Makefile 2005-10-22 00:56:03.106683500 +0200
+@@ -81,6 +81,8 @@
+ w_cosh.c w_exp.c s_fabs.c s_floor.c w_fmod.c s_frexp.c \
+ s_ldexp.c w_log.c w_log10.c s_modf.c w_pow.c s_sin.c \
+ w_sinh.c w_sqrt.c s_tan.c s_tanh.c
++# extra stuff required for some apps
++CSRC+= fpmacros.c nan.c s_rint.c e_hypot.c w_hypot.c
+ CSRC+= s_expm1.c s_scalbn.c s_copysign.c e_acos.c e_asin.c e_atan2.c \
+ k_cos.c e_cosh.c e_exp.c e_fmod.c e_log.c e_log10.c e_pow.c \
+ k_sin.c e_sinh.c e_sqrt.c k_tan.c e_rem_pio2.c k_rem_pio2.c \
diff --git a/toolchain/uClibc/patches/130-ppc_gcc4_fix.patch b/toolchain/uClibc/patches/130-ppc_gcc4_fix.patch
new file mode 100644
index 0000000000..c5416f3790
--- /dev/null
+++ b/toolchain/uClibc/patches/130-ppc_gcc4_fix.patch
@@ -0,0 +1,223 @@
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/powerpc/bits/syscalls.h uClibc-0.9.28-owrt/libc/sysdeps/linux/powerpc/bits/syscalls.h
+--- uClibc-0.9.28/libc/sysdeps/linux/powerpc/bits/syscalls.h 2005-08-18 00:49:41.000000000 +0200
++++ uClibc-0.9.28-owrt/libc/sysdeps/linux/powerpc/bits/syscalls.h 2006-08-25 17:58:21.000000000 +0200
+@@ -5,67 +5,164 @@
+ # error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead."
+ #endif
+
++#include <errno.h>
++
+ /* This includes the `__NR_<name>' syscall numbers taken from the Linux kernel
+ * header files. It also defines the traditional `SYS_<name>' macros for older
+ * programs. */
+ #include <bits/sysnum.h>
+
+-
+-#define __STRINGIFY(s) __STRINGIFY2 (s)
+-#define __STRINGIFY2(s) #s
+-
+-#undef JUMPTARGET
+-#ifdef __PIC__
+-#define __MAKE_SYSCALL __STRINGIFY(__uClibc_syscall@plt)
++/* Define a macro which expands inline into the wrapper code for a system
++ call. This use is for internal calls that do not need to handle errors
++ normally. It will never touch errno.
++ On powerpc a system call basically clobbers the same registers like a
++ function call, with the exception of LR (which is needed for the
++ "sc; bnslr+" sequence) and CR (where only CR0.SO is clobbered to signal
++ an error return status). */
++
++# undef INLINE_SYSCALL
++#if 1
++# define INLINE_SYSCALL(name, nr, args...) \
++ ({ \
++ INTERNAL_SYSCALL_DECL (sc_err); \
++ long int sc_ret = INTERNAL_SYSCALL (name, sc_err, nr, args); \
++ if (INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \
++ { \
++ __set_errno (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err)); \
++ sc_ret = -1L; \
++ } \
++ sc_ret; \
++ })
+ #else
+-#define __MAKE_SYSCALL __STRINGIFY(__uClibc_syscall)
++# define INLINE_SYSCALL(name, nr, args...) \
++ ({ \
++ INTERNAL_SYSCALL_DECL (sc_err); \
++ long int sc_ret = INTERNAL_SYSCALL (name, sc_err, nr, args); \
++ if (INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \
++ { \
++ sc_ret = __syscall_error(INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err));\
++ } \
++ sc_ret; \
++ })
+ #endif
+
+-#define unified_syscall_body(name) \
+- __asm__ ( \
+- ".section \".text\"\n\t" \
+- ".align 2\n\t" \
+- ".globl " __STRINGIFY(name) "\n\t" \
+- ".type " __STRINGIFY(name) ",@function\n\t" \
+- #name":\tli 0," __STRINGIFY(__NR_##name) "\n\t" \
+- "b " __MAKE_SYSCALL "\n\t" \
+- ".size\t" __STRINGIFY(name) ",.""-" __STRINGIFY(name) "\n" \
+- )
++/* Define a macro which expands inline into the wrapper code for a system
++ call. This use is for internal calls that do not need to handle errors
++ normally. It will never touch errno.
++ On powerpc a system call basically clobbers the same registers like a
++ function call, with the exception of LR (which is needed for the
++ "sc; bnslr+" sequence) and CR (where only CR0.SO is clobbered to signal
++ an error return status). */
++
++# undef INTERNAL_SYSCALL_DECL
++# define INTERNAL_SYSCALL_DECL(err) long int err
++
++# undef INTERNAL_SYSCALL
++# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
++ ({ \
++ register long int r0 __asm__ ("r0"); \
++ register long int r3 __asm__ ("r3"); \
++ register long int r4 __asm__ ("r4"); \
++ register long int r5 __asm__ ("r5"); \
++ register long int r6 __asm__ ("r6"); \
++ register long int r7 __asm__ ("r7"); \
++ register long int r8 __asm__ ("r8"); \
++ register long int r9 __asm__ ("r9"); \
++ register long int r10 __asm__ ("r10"); \
++ register long int r11 __asm__ ("r11"); \
++ register long int r12 __asm__ ("r12"); \
++ LOADARGS_##nr(name, args); \
++ __asm__ __volatile__ \
++ ("sc \n\t" \
++ "mfcr %0" \
++ : "=&r" (r0), \
++ "=&r" (r3), "=&r" (r4), "=&r" (r5), "=&r" (r6), "=&r" (r7), \
++ "=&r" (r8), "=&r" (r9), "=&r" (r10), "=&r" (r11), "=&r" (r12) \
++ : ASM_INPUT_##nr \
++ : "cr0", "ctr", "memory"); \
++ err = r0; \
++ (int) r3; \
++ })
++# define INTERNAL_SYSCALL(name, err, nr, args...) \
++ INTERNAL_SYSCALL_NCS (__NR_##name, err, nr, ##args)
++
++# undef INTERNAL_SYSCALL_ERROR_P
++# define INTERNAL_SYSCALL_ERROR_P(val, err) \
++ ((void) (val), __builtin_expect ((err) & (1 << 28), 0))
++
++# undef INTERNAL_SYSCALL_ERRNO
++# define INTERNAL_SYSCALL_ERRNO(val, err) (val)
++
++# define LOADARGS_0(name, dummy) \
++ r0 = (long int)name
++# define LOADARGS_1(name, __arg1) \
++ LOADARGS_0(name, 0); \
++ r3 = (long int)__arg1
++# define LOADARGS_2(name, __arg1, __arg2) \
++ LOADARGS_1(name, __arg1); \
++ r4 = (long int)__arg2
++# define LOADARGS_3(name, __arg1, __arg2, __arg3) \
++ LOADARGS_2(name, __arg1, __arg2); \
++ r5 = (long int)__arg3
++# define LOADARGS_4(name, __arg1, __arg2, __arg3, __arg4) \
++ LOADARGS_3(name, __arg1, __arg2, __arg3); \
++ r6 = (long int)__arg4
++# define LOADARGS_5(name, __arg1, __arg2, __arg3, __arg4, __arg5) \
++ LOADARGS_4(name, __arg1, __arg2, __arg3, __arg4); \
++ r7 = (long int)__arg5
++# define LOADARGS_6(name, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6) \
++ LOADARGS_5(name, __arg1, __arg2, __arg3, __arg4, __arg5); \
++ r8 = (long int)__arg6
++
++# define ASM_INPUT_0 "0" (r0)
++# define ASM_INPUT_1 ASM_INPUT_0, "1" (r3)
++# define ASM_INPUT_2 ASM_INPUT_1, "2" (r4)
++# define ASM_INPUT_3 ASM_INPUT_2, "3" (r5)
++# define ASM_INPUT_4 ASM_INPUT_3, "4" (r6)
++# define ASM_INPUT_5 ASM_INPUT_4, "5" (r7)
++# define ASM_INPUT_6 ASM_INPUT_5, "6" (r8)
+
+ #undef _syscall0
+-#define _syscall0(type,name) \
+-type name(void); \
+-unified_syscall_body(name)
++#define _syscall0(type,name) \
++type name(void){ \
++ return (type) INLINE_SYSCALL(name, 0); \
++}
+
+ #undef _syscall1
+ #define _syscall1(type,name,type1,arg1) \
+-type name(type1 arg1); \
+-unified_syscall_body(name)
++type name(type1 arg1){ \
++ return (type) INLINE_SYSCALL(name, 1, arg1); \
++}
+
+ #undef _syscall2
+ #define _syscall2(type,name,type1,arg1,type2,arg2) \
+-type name(type1 arg1, type2 arg2); \
+-unified_syscall_body(name)
++type name(type1 arg1, type2 arg2){ \
++ return (type) INLINE_SYSCALL(name, 2, arg1, arg2); \
++}
+
+ #undef _syscall3
+ #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
+-type name(type1 arg1, type2 arg2, type3 arg3); \
+-unified_syscall_body(name)
++type name(type1 arg1, type2 arg2, type3 arg3){ \
++ return (type) INLINE_SYSCALL(name, 3, arg1, arg2, arg3); \
++}
+
+ #undef _syscall4
+ #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
+-type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4); \
+-unified_syscall_body(name)
++type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4){ \
++ return (type) INLINE_SYSCALL(name, 4, arg1, arg2, arg3, arg4); \
++}
+
+ #undef _syscall5
+ #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
+-type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5); \
+-unified_syscall_body(name)
++type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5){ \
++ return (type) INLINE_SYSCALL(name, 5, arg1, arg2, arg3, arg4, arg5); \
++}
+
+ #undef _syscall6
+ #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \
+-type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6); \
+-unified_syscall_body(name)
++type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6){ \
++ return (type) INLINE_SYSCALL(name, 6, arg1, arg2, arg3, arg4, arg5, arg6); \
++}
+
+ #endif /* _BITS_SYSCALLS_H */
+
+diff -urP uClibc-0.9.28/libc/sysdeps/linux/powerpc/sys/procfs.h uClibc-0.9.28-uint128/libc/sysdeps/linux/powerpc/sys/procfs.h
+--- uClibc-0.9.28/libc/sysdeps/linux/powerpc/sys/procfs.h 2005-08-18 00:49:41.000000000 +0200
++++ uClibc-0.9.28-uint128/libc/sysdeps/linux/powerpc/sys/procfs.h 2005-08-22 17:27:17.000000000 +0200
+@@ -42,15 +42,10 @@
+ typedef double elf_fpreg_t;
+ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
+
+-/* gcc 3.1 and newer support __uint128_t. */
+-#if !__GNUC_PREREQ(3,1)
+-typedef struct {
+- unsigned long u[4];
+-} __attribute((aligned(16))) __uint128_t;
+-#endif
+-
+ /* Altivec registers */
+-typedef __uint128_t elf_vrreg_t;
++typedef struct {
++ unsigned int u[4];
++} __attribute((aligned (16))) elf_vrreg_t;
+ typedef elf_vrreg_t elf_vrregset_t[ELF_NVRREG];
+
+ struct elf_siginfo
diff --git a/toolchain/uClibc/patches/140-ipv6_missing_sockopts.patch b/toolchain/uClibc/patches/140-ipv6_missing_sockopts.patch
new file mode 100644
index 0000000000..8aed08125f
--- /dev/null
+++ b/toolchain/uClibc/patches/140-ipv6_missing_sockopts.patch
@@ -0,0 +1,12 @@
+--- uClibc-0.9.27-old/libc/sysdeps/linux/common/bits/in.h 2005-01-12 08:59:21.000000000 +0100
++++ uClibc-0.9.27-new/libc/sysdeps/linux/common/bits/in.h 2005-08-23 02:12:47.000000000 +0200
+@@ -115,6 +115,9 @@
+ #define IPV6_MTU_DISCOVER 23
+ #define IPV6_MTU 24
+ #define IPV6_RECVERR 25
++#define IPV6_V6ONLY 26
++#define IPV6_JOIN_ANYCAST 27
++#define IPV6_LEAVE_ANYCAST 28
+
+ #define SCM_SRCRT IPV6_RXSRCRT
+
diff --git a/toolchain/uClibc/patches/150-portability.patch b/toolchain/uClibc/patches/150-portability.patch
new file mode 100644
index 0000000000..b29c16ee03
--- /dev/null
+++ b/toolchain/uClibc/patches/150-portability.patch
@@ -0,0 +1,38 @@
+Fix portability of build infrastructure
+* cp -d -> cp -P
+* tar --exclude is a GNU tar feature
+
+--- uClibc-0.9.28/Makefile.orig Sun Jun 11 19:08:56 2006
++++ uClibc-0.9.28/Makefile Sun Jun 11 19:12:05 2006
+@@ -158,12 +158,7 @@ install_dev:
+ $(INSTALL) -d $(PREFIX)$(DEVEL_PREFIX)lib
+ $(INSTALL) -d $(PREFIX)$(DEVEL_PREFIX)include
+ -$(INSTALL) -m 644 lib/*.[ao] $(PREFIX)$(DEVEL_PREFIX)lib/
+- if [ "$(KERNEL_SOURCE)" == "$(DEVEL_PREFIX)" ] ; then \
+- extra_exclude="--exclude include/linux --exclude include/asm'*'" ; \
+- else \
+- extra_exclude="" ; \
+- fi ; \
+- tar -chf - include --exclude .svn --exclude CVS $$extra_exclude \
++ tar -chf - include \
+ | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX)
+ ifneq ($(strip $(UCLIBC_HAS_FLOATS)),y)
+ # Remove floating point related headers since float support is disabled.
+@@ -253,7 +248,7 @@ ifeq ($(strip $(HAVE_SHARED)),y)
+ $(INSTALL) -d $(PREFIX)$(RUNTIME_PREFIX)lib
+ $(INSTALL) -m 644 lib/lib*-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so \
+ $(PREFIX)$(RUNTIME_PREFIX)lib
+- cp -dRf lib/*.so.* $(PREFIX)$(RUNTIME_PREFIX)lib
++ cp -PRf lib/*.so.* $(PREFIX)$(RUNTIME_PREFIX)lib
+ @if [ -x lib/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so ] ; then \
+ set -e; \
+ $(SHELL_SET_X); \
+@@ -370,7 +365,7 @@ distclean: clean
+ release: distclean
+ cd ..; \
+ $(RM) -r uClibc-$(VERSION); \
+- cp -dRf uClibc uClibc-$(VERSION); \
++ cp -PRf uClibc uClibc-$(VERSION); \
+ find uClibc-$(VERSION)/ -type f \
+ -name .\#* -exec $(RM) -r {} \; ; \
+ find uClibc-$(VERSION)/ -type d \