diff options
Diffstat (limited to 'toolchain')
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Ãe 5, 90409 NÃ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Ãe 5, 90409 NÃ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 (¤t_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 (¤t_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, ¬ify); ++ err = current_pointers->td_ta_event_addr_p (thread_agent, event, ¬ify); + 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 \ |