summaryrefslogtreecommitdiff
path: root/patches/glibc/2.2.5
diff options
context:
space:
mode:
Diffstat (limited to 'patches/glibc/2.2.5')
-rw-r--r--patches/glibc/2.2.5/alpha-build-failure.patch37
-rw-r--r--patches/glibc/2.2.5/arm-asm-clobber.patch23
-rw-r--r--patches/glibc/2.2.5/arm-ctl_bus_isa.patch51
-rw-r--r--patches/glibc/2.2.5/cris-libc-symbols.patch97
-rw-r--r--patches/glibc/2.2.5/cris-stack-direction.patch61
-rw-r--r--patches/glibc/2.2.5/dl-machine-alpha.patch424
-rw-r--r--patches/glibc/2.2.5/dl-machine-arm.patch389
-rw-r--r--patches/glibc/2.2.5/dl-machine-m68k.patch206
-rw-r--r--patches/glibc/2.2.5/dl-machine-sh.patch41
-rw-r--r--patches/glibc/2.2.5/dl-machine-sparc.patch230
-rw-r--r--patches/glibc/2.2.5/errlist-1.9.patch25
-rw-r--r--patches/glibc/2.2.5/errlist-arm.patch48
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-3.4-fixup.patch68
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-3.4-grp.patch63
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-3.4-weakextern.patch48
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-configure.patch21
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-elf-2.patch43
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-elf.patch39
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-gconv.patch226
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-i386.patch49
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-iconv.patch20
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-iconvdata.patch114
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-locale.patch49
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-malloc.patch48
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-mipsel.patch81
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-msort.patch47
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-powerpc-procfs.patch54
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-powerpc.patch23
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-sunrpc.patch221
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-alpha-pwrite64.patch58
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-arm-pwrite64.patch30
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-crosstest.patch27
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-crossyes.patch11
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-cygwin.patch89
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-hhl-powerpc-fpu.patch1134
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-i386-pwrite64.patch20
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-m68k-pwrite.patch32
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-mips-build-gmon.patch86
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-mips-clone-local-label.patch47
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.56.patch31
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.57.patch43
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.59-kinda.patch35
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.60.patch53
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-powerpc-as.patch29
-rw-r--r--patches/glibc/2.2.5/glibc-2.2.5-ppc405erratum77.patch65
-rw-r--r--patches/glibc/2.2.5/glibc-2.3.2-allow-gcc-3.5-xdr.patch44
-rw-r--r--patches/glibc/2.2.5/glibc-drow-sh.patch77
-rw-r--r--patches/glibc/2.2.5/glibc-test-lowram.patch14
-rw-r--r--patches/glibc/2.2.5/initfini-alpha.patch125
-rw-r--r--patches/glibc/2.2.5/initfini-ia64.patch219
-rw-r--r--patches/glibc/2.2.5/initfini-sh.patch243
-rw-r--r--patches/glibc/2.2.5/longjmp-sparc.patch75
-rw-r--r--patches/glibc/2.2.5/sh-setjmp-fix.patch29
-rw-r--r--patches/glibc/2.2.5/sprintf-prototype.patch13
-rw-r--r--patches/glibc/2.2.5/sscanf.patch82
-rw-r--r--patches/glibc/2.2.5/unwind-arm.patch19
56 files changed, 5576 insertions, 0 deletions
diff --git a/patches/glibc/2.2.5/alpha-build-failure.patch b/patches/glibc/2.2.5/alpha-build-failure.patch
new file mode 100644
index 0000000..d131f1b
--- /dev/null
+++ b/patches/glibc/2.2.5/alpha-build-failure.patch
@@ -0,0 +1,37 @@
+See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=156841
+
+Here's the error I got before I applied the patch:
+
+/home3/dank/crosstool-0.5/result/alpha-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/lib/gcc-lib/alpha-unknown-linux-gnu/3.2.3/../../../../alpha-unknown-linux-gnu/bin/ld: /home3/dank/crosstool-0.5/build/alpha-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/libc_pic.os: pc-relative relocation against dynamic symbol __divlu
+/home3/dank/crosstool-0.5/result/alpha-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/lib/gcc-lib/alpha-unknown-linux-gnu/3.2.3/../../../../alpha-unknown-linux-gnu/bin/ld: /home3/dank/crosstool-0.5/build/alpha-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/libc_pic.os: pc-relative relocation against dynamic symbol __divqu
+/home3/dank/crosstool-0.5/result/alpha-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/lib/gcc-lib/alpha-unknown-linux-gnu/3.2.3/../../../../alpha-unknown-linux-gnu/bin/ld: /home3/dank/crosstool-0.5/build/alpha-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/libc_pic.os: pc-relative relocation against dynamic symbol __remlu
+/home3/dank/crosstool-0.5/result/alpha-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/lib/gcc-lib/alpha-unknown-linux-gnu/3.2.3/../../../../alpha-unknown-linux-gnu/bin/ld: /home3/dank/crosstool-0.5/build/alpha-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/libc_pic.os: pc-relative relocation against dynamic symbol __remqu
+collect2: ld returned 1 exit status
+make[1]: *** [/home3/dank/crosstool-0.5/build/alpha-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/libc.so] Error 1
+
+
+--- glibc-2.2.5/sysdeps/alpha/divrem.h 6 Jul 2001 04:55:45 -0000 1.8
++++ glibc-2.2.5/sysdeps/alpha/divrem.h 15 Jun 2002 20:53:37 -0000 1.9
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
++/* Copyright (C) 1996,97,2002 Free Software Foundation, Inc.
+ Contributed by David Mosberger (davidm@cs.arizona.edu).
+ This file is part of the GNU C Library.
+
+@@ -86,6 +86,7 @@
+
+ .align 3
+ UFUNC_NAME:
++$udiv_entry:
+ lda sp, -STACK(sp)
+ .frame sp, STACK, retaddr, 0
+ #ifdef PROF
+@@ -206,7 +207,7 @@
+ cmovge AT, AT, arg2
+
+ /* Do the unsigned division. */
+- bsr retaddr, UFUNC_NAME
++ bsr retaddr, $udiv_entry
+
+ /* Restore originals and adjust the sign of the result. */
+ ldq arg1, 0(sp)
diff --git a/patches/glibc/2.2.5/arm-asm-clobber.patch b/patches/glibc/2.2.5/arm-asm-clobber.patch
new file mode 100644
index 0000000..06376b5
--- /dev/null
+++ b/patches/glibc/2.2.5/arm-asm-clobber.patch
@@ -0,0 +1,23 @@
+http://gcc.gnu.org/PR11103
+
+Error:
+../sysdeps/unix/sysv/linux/arm/sigaction.c: In function `__libc_sigaction':
+../sysdeps/unix/sysv/linux/arm/sigaction.c:100: error: asm-specifier for variable `_a1' conflicts with asm clobber list
+../sysdeps/unix/sysv/linux/arm/sigaction.c:139: error: asm-specifier for variable `_a1' conflicts with asm clobber list
+make[2]: *** [/crosstool-0.22/build/arm-unknown-linux-gnu/gcc-3.3-glibc-2.2.5/build-glibc/signal/sigaction.o] Error 1
+
+Fix from http://lists.arm.linux.org.uk/pipermail/linux-arm/2003-July/005826.html
+rediffed against glibc-2.2.5
+Not tested. (I don't even understand it, just being a patch monkey...)
+
+--- glibc-2.2.5/sysdeps/unix/sysv/linux/arm/sysdep.h.old Wed Aug 27 09:58:15 2003
++++ glibc-2.2.5/sysdeps/unix/sysv/linux/arm/sysdep.h Wed Aug 27 09:59:04 2003
+@@ -131,7 +131,7 @@
+ asm volatile ("swi %1 @ syscall " #name \
+ : "=r" (_a1) \
+ : "i" (SYS_ify(name)) ASM_ARGS_##nr \
+- : "a1", "memory"); \
++ : "memory"); \
+ _sys_result = _a1; \
+ } \
+ if (_sys_result >= (unsigned int) -4095) \
diff --git a/patches/glibc/2.2.5/arm-ctl_bus_isa.patch b/patches/glibc/2.2.5/arm-ctl_bus_isa.patch
new file mode 100644
index 0000000..3422070
--- /dev/null
+++ b/patches/glibc/2.2.5/arm-ctl_bus_isa.patch
@@ -0,0 +1,51 @@
+Applies to both glibc-2.2.5 and glibc-2.3.2, and probably glibc cvs as of Aug 2004.
+Needed to build glibc with linux kernels 2.4.23 or higher on ARM,
+Fixes following error:
+
+../sysdeps/unix/sysv/linux/arm/ioperm.c: In function `init_iosys':
+../sysdeps/unix/sysv/linux/arm/ioperm.c:103: error: `BUS_ISA' undeclared (first use in this function)
+../sysdeps/unix/sysv/linux/arm/ioperm.c:103: error: (Each undeclared identifier is reported only once
+../sysdeps/unix/sysv/linux/arm/ioperm.c:103: error: for each function it appears in.)
+../sysdeps/unix/sysv/linux/arm/ioperm.c:103: error: initializer element is not constant
+../sysdeps/unix/sysv/linux/arm/ioperm.c:103: error: (near initialization for `iobase_name[1]')
+../sysdeps/unix/sysv/linux/arm/ioperm.c:104: error: initializer element is not constant
+../sysdeps/unix/sysv/linux/arm/ioperm.c:104: error: (near initialization for `ioshift_name[1]')
+make[2]: *** [/home/dank/crosstool-0.28/build/arm-softfloat-linux-gnu/gcc-3.3.4-glibc-2.2.5/build-glibc/misc/ioperm.o] Error 1
+
+cf. "[SYSCTL] BUS_ISA -> CTL_BUS_ISA", http://www.ussg.iu.edu/hypermail/linux/kernel/0311.0/0529.html
+
+--- glibc-2.3.2/sysdeps/unix/sysv/linux/arm/ioperm.c.old 2003-02-20 14:22:24.000000000 -0800
++++ glibc-2.3.2/sysdeps/unix/sysv/linux/arm/ioperm.c 2004-01-31 16:01:50.000000000 -0800
+@@ -47,6 +47,12 @@
+ #include <asm/page.h>
+ #include <sys/sysctl.h>
+
++/* see http://www.ussg.iu.edu/hypermail/linux/kernel/0311.0/0529.html */
++#include <linux/version.h>
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,23))
++#define CTL_BUS_ISA BUS_ISA /* and hope it's not the one from linux/input.h */
++#endif
++
+ #define PATH_ARM_SYSTYPE "/etc/arm_systype"
+ #define PATH_CPUINFO "/proc/cpuinfo"
+
+@@ -80,7 +86,7 @@
+ * Initialize I/O system. There are several ways to get the information
+ * we need. Each is tried in turn until one succeeds.
+ *
+- * 1. Sysctl (CTL_BUS, BUS_ISA, ISA_*). This is the preferred method
++ * 1. Sysctl (CTL_BUS, CTL_BUS_ISA, ISA_*). This is the preferred method
+ * but not all kernels support it.
+ *
+ * 2. Read the value (not the contents) of symlink PATH_ARM_SYSTYPE.
+@@ -100,8 +106,8 @@
+ {
+ char systype[256];
+ int i, n;
+- static int iobase_name[] = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_BASE };
+- static int ioshift_name[] = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_SHIFT };
++ static int iobase_name[] = { CTL_BUS, CTL_BUS_ISA, BUS_ISA_PORT_BASE };
++ static int ioshift_name[] = { CTL_BUS, CTL_BUS_ISA, BUS_ISA_PORT_SHIFT };
+ size_t len = sizeof(io.base);
+
+ if (! sysctl (iobase_name, 3, &io.io_base, &len, NULL, 0)
diff --git a/patches/glibc/2.2.5/cris-libc-symbols.patch b/patches/glibc/2.2.5/cris-libc-symbols.patch
new file mode 100644
index 0000000..42c67d2
--- /dev/null
+++ b/patches/glibc/2.2.5/cris-libc-symbols.patch
@@ -0,0 +1,97 @@
+From http://sources.redhat.com/ml/libc-alpha/2002-06/msg00006.html
+
+Message-ID: <15612.44195.299251.921969@honolulu.ilog.fr>
+Date: Tue, 4 Jun 2002 14:03:47 +0200 (CEST)
+From: Bruno Haible <bruno at clisp dot org>
+To: libc-alpha at sources dot redhat dot com
+Subject: link_warning fix
+
+
+Hi,
+
+While cross-compiling glibc-2.2.5 for target=cris-linux using gcc-3.1 and
+binutils-2.12.90.0.7, I get an error
+
+cris-linux-gcc ../sysdeps/unix/sysv/linux/sigstack.c -c -O2 -Wall -Winline -Wstrict-prototypes -Wwrite-strings -g -I../include -I. -I/backup/cross-build/build-glibc-cris/signal -I.. -I../libio -I/backup/cross-build/build-glibc-cris -I../sysdeps/cris/elf -I../linuxthreads/sysdeps/unix/sysv/linux -I../linuxthreads/sysdeps/pthread -I../sysdeps/pthread -I../linuxthreads/sysdeps/unix/sysv -I../linuxthreads/sysdeps/unix -I../linuxthreads/sysdeps/cris -I../sysdeps/unix/sysv/linux/cris -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/cris -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -nostdinc -isystem /cross/cris-linux-tools/lib/gcc-lib/cris-linux/3.1/include -isystem /cross/cris-linux/include -D_LIBC_REENTRANT -include ../include/libc-symbols.h -o /backup/cross-build/build-glibc-cris/signal/sigstack.o
+/tmp/cca7qZyI.s: Assembler messages:
+/tmp/cca7qZyI.s:87: Warning: rest of line ignored; first ignored character is `,'
+/tmp/cca7qZyI.s:87: Error: Unknown opcode: `progbits'
+make[2]: *** [/backup/cross-build/build-glibc-cris/signal/sigstack.o] Fehler 1
+
+
+The reason is that the .s file contains the following.
+
+...
+ .size sigstack,.Lfe1-sigstack
+#APP
+ .section .gnu.warning.sigstack
+ .previous
+#NO_APP
+ .section .gnu.warning.sigstack
+ #,"a",@progbits
+ .align 2
+ .type __evoke_link_warning_sigstack,@object
+...
+
+and comments (introduced by '#') are recognized by the assembler only after
+#APP, not after #NO_APP. The workaround is to add '#APP' to the fake section
+name. The following patch works for me.
+
+2002-06-02 Bruno Haible <bruno@clisp.org>
+
+ * include/libc-symbols.h (__as_app_line): New macro.
+ (link_warning): Emit #APP line to turn comment recognition on.
+
+*** glibc-2.2.5/include/libc-symbols.h.bak 2001-08-04 01:02:52.000000000 +0200
+--- glibc-2.2.5/include/libc-symbols.h 2002-06-02 16:22:15.000000000 +0200
+***************
+*** 207,224 ****
+ # define __make_section_unallocated(section_string)
+ # endif
+
+! /* Tacking on "\n\t#" to the section name makes gcc put it's bogus
+! section attributes on what looks like a comment to the assembler. */
+ # ifdef HAVE_SECTION_QUOTES
+ # define link_warning(symbol, msg) \
+ __make_section_unallocated (".gnu.warning." #symbol) \
+! static const char __evoke_link_warning_##symbol[] \
+! __attribute__ ((section (".gnu.warning." #symbol "\"\n\t#\""))) = msg;
+ # else
+ # define link_warning(symbol, msg) \
+ __make_section_unallocated (".gnu.warning." #symbol) \
+! static const char __evoke_link_warning_##symbol[] \
+! __attribute__ ((section (".gnu.warning." #symbol "\n\t#"))) = msg;
+ # endif
+ # else /* Not ELF: a.out */
+ # ifdef HAVE_XCOFF
+--- 207,235 ----
+ # define __make_section_unallocated(section_string)
+ # endif
+
+! /* Tacking on "\n\t#" to the section name makes gcc put its bogus
+! section attributes on what looks like a comment to the assembler.
+! Furthermore, with gas, we need to add a "#APP" line so the comment
+! is recognized as such. */
+! # ifdef HAVE_GNU_AS
+! # define __as_app_line "#APP\n"
+! # else
+! # define __as_app_line ""
+! # endif
+ # ifdef HAVE_SECTION_QUOTES
+ # define link_warning(symbol, msg) \
+ __make_section_unallocated (".gnu.warning." #symbol) \
+! static const char __evoke_link_warning_##symbol[] \
+! __attribute__ \
+! ((section (".gnu.warning." #symbol "\"\n" __as_app_line "\t#\""))) \
+! = msg;
+ # else
+ # define link_warning(symbol, msg) \
+ __make_section_unallocated (".gnu.warning." #symbol) \
+! static const char __evoke_link_warning_##symbol[] \
+! __attribute__ \
+! ((section (".gnu.warning." #symbol "\n" __as_app_line "\t#"))) \
+! = msg;
+ # endif
+ # else /* Not ELF: a.out */
+ # ifdef HAVE_XCOFF
+
diff --git a/patches/glibc/2.2.5/cris-stack-direction.patch b/patches/glibc/2.2.5/cris-stack-direction.patch
new file mode 100644
index 0000000..158eb39
--- /dev/null
+++ b/patches/glibc/2.2.5/cris-stack-direction.patch
@@ -0,0 +1,61 @@
+From http://sources.redhat.com/ml/libc-alpha/2002-06/msg00007.html
+
+Message-ID: <15612.44228.774370.154718@honolulu.ilog.fr>
+Date: Tue, 4 Jun 2002 14:04:20 +0200 (CEST)
+From: Bruno Haible <bruno at clisp dot org>
+To: libc-alpha at sources dot redhat dot com
+Subject: cris stack direction
+
+
+Hi,
+
+While cross-compiling glibc-2.2.5 for target=cris-linux using gcc-3.1 and
+binutils-2.12.90.0.7, I get an error
+
+cris-linux-gcc cancel.c -c -O2 -Wall -Winline -Wstrict-prototypes -Wwrite-strings -g -D__NO_WEAK_PTHREAD_ALIASES -D_RPC_THREAD_SAFE_ -I../include -I. -I/backup/cross-build/build-glibc-cris/linuxthreads -I.. -I../libio -I/backup/cross-build/build-glibc-cris -I../sysdeps/cris/elf -I../linuxthreads/sysdeps/unix/sysv/linux -I../linuxthreads/sysdeps/pthread -I../sysdeps/pthread -I../linuxthreads/sysdeps/unix/sysv -I../linuxthreads/sysdeps/unix -I../linuxthreads/sysdeps/cris -I../sysdeps/unix/sysv/linux/cris -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/cris -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -nostdinc -isystem /cross/cris-linux-tools/lib/gcc-lib/cris-linux/3.1/include -isystem /cross/cris-linux/include -D_LIBC_REENTRANT -include ../include/libc-symbols.h -o /backup/cross-build/build-glibc-cris/linuxthreads/cancel.o
+cancel.c:29:3: #error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP"
+cancel.c: In function `_pthread_cleanup_push':
+cancel.c:134: warning: implicit declaration of function `FRAME_LEFT'
+make[2]: *** [/backup/cross-build/build-glibc-cris/linuxthreads/cancel.o] Fehler 1
+
+The fix is to add a file sysdeps/cris/stackinfo.h.
+
+
+2002-06-02 Bruno Haible <bruno@clisp.org>
+
+ * sysdeps/cris/stackinfo.h: New file.
+
+*** glibc-2.2.5/sysdeps/cris/stackinfo.h.bak 2002-06-02 17:52:05.000000000 +0200
+--- glibc-2.2.5/sysdeps/cris/stackinfo.h 2002-06-02 17:52:24.000000000 +0200
+***************
+*** 0 ****
+--- 1,28 ----
++ /* Copyright (C) 2002 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C 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
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++ /* This file contains a bit of information about the stack allocation
++ of the processor. */
++
++ #ifndef _STACKINFO_H
++ #define _STACKINFO_H 1
++
++ /* On cris the stack grows down. */
++ #define _STACK_GROWS_DOWN 1
++
++ #endif /* stackinfo.h */
+
diff --git a/patches/glibc/2.2.5/dl-machine-alpha.patch b/patches/glibc/2.2.5/dl-machine-alpha.patch
new file mode 100644
index 0000000..50e5bc5
--- /dev/null
+++ b/patches/glibc/2.2.5/dl-machine-alpha.patch
@@ -0,0 +1,424 @@
+From http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/alpha/dl-machine.h.diff?r1=1.56&r2=1.57&cvsroot=glibc
+(minus first hunk)
+Lets glibc-2.2.5 compile with gcc-3.3
+
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/alpha/dl-machine.h,v
+retrieving revision 1.56
+retrieving revision 1.57
+diff -u -r1.56 -r1.57
+--- libc/sysdeps/alpha/dl-machine.h 2001/12/12 00:10:27 1.56
++++ libc/sysdeps/alpha/dl-machine.h 2001/12/31 17:33:59 1.57
+@@ -156,125 +157,126 @@
+ #define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name, IMB) \
+ extern void tramp_name (void); \
+ asm ( "\
+- .globl " #tramp_name "
+- .ent " #tramp_name "
+-" #tramp_name ":
+- lda $sp, -44*8($sp)
+- .frame $sp, 44*8, $26
+- /* Preserve all integer registers that C normally doesn't. */
+- stq $26, 0*8($sp)
+- stq $0, 1*8($sp)
+- stq $1, 2*8($sp)
+- stq $2, 3*8($sp)
+- stq $3, 4*8($sp)
+- stq $4, 5*8($sp)
+- stq $5, 6*8($sp)
+- stq $6, 7*8($sp)
+- stq $7, 8*8($sp)
+- stq $8, 9*8($sp)
+- stq $16, 10*8($sp)
+- stq $17, 11*8($sp)
+- stq $18, 12*8($sp)
+- stq $19, 13*8($sp)
+- stq $20, 14*8($sp)
+- stq $21, 15*8($sp)
+- stq $22, 16*8($sp)
+- stq $23, 17*8($sp)
+- stq $24, 18*8($sp)
+- stq $25, 19*8($sp)
+- stq $29, 20*8($sp)
+- stt $f0, 21*8($sp)
+- stt $f1, 22*8($sp)
+- stt $f10, 23*8($sp)
+- stt $f11, 24*8($sp)
+- stt $f12, 25*8($sp)
+- stt $f13, 26*8($sp)
+- stt $f14, 27*8($sp)
+- stt $f15, 28*8($sp)
+- stt $f16, 29*8($sp)
+- stt $f17, 30*8($sp)
+- stt $f18, 31*8($sp)
+- stt $f19, 32*8($sp)
+- stt $f20, 33*8($sp)
+- stt $f21, 34*8($sp)
+- stt $f22, 35*8($sp)
+- stt $f23, 36*8($sp)
+- stt $f24, 37*8($sp)
+- stt $f25, 38*8($sp)
+- stt $f26, 39*8($sp)
+- stt $f27, 40*8($sp)
+- stt $f28, 41*8($sp)
+- stt $f29, 42*8($sp)
+- stt $f30, 43*8($sp)
+- .mask 0x27ff01ff, -44*8
+- .fmask 0xfffffc03, -(44-21)*8
+- /* Set up our $gp */
+- br $gp, .+4
+- ldgp $gp, 0($gp)
+- .prologue 0
+- /* Set up the arguments for fixup: */
+- /* $16 = link_map out of plt0 */
+- /* $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24 */
+- /* $18 = return address */
+- subq $28, $27, $17
+- ldq $16, 8($27)
+- subq $17, 20, $17
+- mov $26, $18
+- addq $17, $17, $17
+- /* Do the fixup */
+- bsr $26, " ASM_ALPHA_NG_SYMBOL_PREFIX #fixup_name "..ng
+- /* Move the destination address into position. */
+- mov $0, $27
+- /* Restore program registers. */
+- ldq $26, 0*8($sp)
+- ldq $0, 1*8($sp)
+- ldq $1, 2*8($sp)
+- ldq $2, 3*8($sp)
+- ldq $3, 4*8($sp)
+- ldq $4, 5*8($sp)
+- ldq $5, 6*8($sp)
+- ldq $6, 7*8($sp)
+- ldq $7, 8*8($sp)
+- ldq $8, 9*8($sp)
+- ldq $16, 10*8($sp)
+- ldq $17, 11*8($sp)
+- ldq $18, 12*8($sp)
+- ldq $19, 13*8($sp)
+- ldq $20, 14*8($sp)
+- ldq $21, 15*8($sp)
+- ldq $22, 16*8($sp)
+- ldq $23, 17*8($sp)
+- ldq $24, 18*8($sp)
+- ldq $25, 19*8($sp)
+- ldq $29, 20*8($sp)
+- ldt $f0, 21*8($sp)
+- ldt $f1, 22*8($sp)
+- ldt $f10, 23*8($sp)
+- ldt $f11, 24*8($sp)
+- ldt $f12, 25*8($sp)
+- ldt $f13, 26*8($sp)
+- ldt $f14, 27*8($sp)
+- ldt $f15, 28*8($sp)
+- ldt $f16, 29*8($sp)
+- ldt $f17, 30*8($sp)
+- ldt $f18, 31*8($sp)
+- ldt $f19, 32*8($sp)
+- ldt $f20, 33*8($sp)
+- ldt $f21, 34*8($sp)
+- ldt $f22, 35*8($sp)
+- ldt $f23, 36*8($sp)
+- ldt $f24, 37*8($sp)
+- ldt $f25, 38*8($sp)
+- ldt $f26, 39*8($sp)
+- ldt $f27, 40*8($sp)
+- ldt $f28, 41*8($sp)
+- ldt $f29, 42*8($sp)
+- ldt $f30, 43*8($sp)
+- /* Flush the Icache after having modified the .plt code. */
+- " #IMB "
+- /* Clean up and turn control to the destination */
+- lda $sp, 44*8($sp)
+- jmp $31, ($27)
++ .globl " #tramp_name " \n\
++ .ent " #tramp_name " \n\
++" #tramp_name ": \n\
++ lda $sp, -44*8($sp) \n\
++ .frame $sp, 44*8, $26 \n\
++ /* Preserve all integer registers that C normally \n\
++ doesn't. */ \n\
++ stq $26, 0*8($sp) \n\
++ stq $0, 1*8($sp) \n\
++ stq $1, 2*8($sp) \n\
++ stq $2, 3*8($sp) \n\
++ stq $3, 4*8($sp) \n\
++ stq $4, 5*8($sp) \n\
++ stq $5, 6*8($sp) \n\
++ stq $6, 7*8($sp) \n\
++ stq $7, 8*8($sp) \n\
++ stq $8, 9*8($sp) \n\
++ stq $16, 10*8($sp) \n\
++ stq $17, 11*8($sp) \n\
++ stq $18, 12*8($sp) \n\
++ stq $19, 13*8($sp) \n\
++ stq $20, 14*8($sp) \n\
++ stq $21, 15*8($sp) \n\
++ stq $22, 16*8($sp) \n\
++ stq $23, 17*8($sp) \n\
++ stq $24, 18*8($sp) \n\
++ stq $25, 19*8($sp) \n\
++ stq $29, 20*8($sp) \n\
++ stt $f0, 21*8($sp) \n\
++ stt $f1, 22*8($sp) \n\
++ stt $f10, 23*8($sp) \n\
++ stt $f11, 24*8($sp) \n\
++ stt $f12, 25*8($sp) \n\
++ stt $f13, 26*8($sp) \n\
++ stt $f14, 27*8($sp) \n\
++ stt $f15, 28*8($sp) \n\
++ stt $f16, 29*8($sp) \n\
++ stt $f17, 30*8($sp) \n\
++ stt $f18, 31*8($sp) \n\
++ stt $f19, 32*8($sp) \n\
++ stt $f20, 33*8($sp) \n\
++ stt $f21, 34*8($sp) \n\
++ stt $f22, 35*8($sp) \n\
++ stt $f23, 36*8($sp) \n\
++ stt $f24, 37*8($sp) \n\
++ stt $f25, 38*8($sp) \n\
++ stt $f26, 39*8($sp) \n\
++ stt $f27, 40*8($sp) \n\
++ stt $f28, 41*8($sp) \n\
++ stt $f29, 42*8($sp) \n\
++ stt $f30, 43*8($sp) \n\
++ .mask 0x27ff01ff, -44*8 \n\
++ .fmask 0xfffffc03, -(44-21)*8 \n\
++ /* Set up our $gp */ \n\
++ br $gp, .+4 \n\
++ ldgp $gp, 0($gp) \n\
++ .prologue 0 \n\
++ /* Set up the arguments for fixup: */ \n\
++ /* $16 = link_map out of plt0 */ \n\
++ /* $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24 */\n\
++ /* $18 = return address */ \n\
++ subq $28, $27, $17 \n\
++ ldq $16, 8($27) \n\
++ subq $17, 20, $17 \n\
++ mov $26, $18 \n\
++ addq $17, $17, $17 \n\
++ /* Do the fixup */ \n\
++ bsr $26, " ASM_ALPHA_NG_SYMBOL_PREFIX #fixup_name "..ng\n\
++ /* Move the destination address into position. */ \n\
++ mov $0, $27 \n\
++ /* Restore program registers. */ \n\
++ ldq $26, 0*8($sp) \n\
++ ldq $0, 1*8($sp) \n\
++ ldq $1, 2*8($sp) \n\
++ ldq $2, 3*8($sp) \n\
++ ldq $3, 4*8($sp) \n\
++ ldq $4, 5*8($sp) \n\
++ ldq $5, 6*8($sp) \n\
++ ldq $6, 7*8($sp) \n\
++ ldq $7, 8*8($sp) \n\
++ ldq $8, 9*8($sp) \n\
++ ldq $16, 10*8($sp) \n\
++ ldq $17, 11*8($sp) \n\
++ ldq $18, 12*8($sp) \n\
++ ldq $19, 13*8($sp) \n\
++ ldq $20, 14*8($sp) \n\
++ ldq $21, 15*8($sp) \n\
++ ldq $22, 16*8($sp) \n\
++ ldq $23, 17*8($sp) \n\
++ ldq $24, 18*8($sp) \n\
++ ldq $25, 19*8($sp) \n\
++ ldq $29, 20*8($sp) \n\
++ ldt $f0, 21*8($sp) \n\
++ ldt $f1, 22*8($sp) \n\
++ ldt $f10, 23*8($sp) \n\
++ ldt $f11, 24*8($sp) \n\
++ ldt $f12, 25*8($sp) \n\
++ ldt $f13, 26*8($sp) \n\
++ ldt $f14, 27*8($sp) \n\
++ ldt $f15, 28*8($sp) \n\
++ ldt $f16, 29*8($sp) \n\
++ ldt $f17, 30*8($sp) \n\
++ ldt $f18, 31*8($sp) \n\
++ ldt $f19, 32*8($sp) \n\
++ ldt $f20, 33*8($sp) \n\
++ ldt $f21, 34*8($sp) \n\
++ ldt $f22, 35*8($sp) \n\
++ ldt $f23, 36*8($sp) \n\
++ ldt $f24, 37*8($sp) \n\
++ ldt $f25, 38*8($sp) \n\
++ ldt $f26, 39*8($sp) \n\
++ ldt $f27, 40*8($sp) \n\
++ ldt $f28, 41*8($sp) \n\
++ ldt $f29, 42*8($sp) \n\
++ ldt $f30, 43*8($sp) \n\
++ /* Flush the Icache after having modified the .plt code. */\n\
++ " #IMB " \n\
++ /* Clean up and turn control to the destination */ \n\
++ lda $sp, 44*8($sp) \n\
++ jmp $31, ($27) \n\
+ .end " #tramp_name)
+
+ #ifndef PROF
+@@ -292,85 +294,87 @@
+ its return value is the user program's entry point. */
+
+ #define RTLD_START asm ("\
+-.text
+- .set at
+- .globl _start
+- .ent _start
+-_start:
+- br $gp, 0f
+-0: ldgp $gp, 0($gp)
+- .prologue 0
+- /* Pass pointer to argument block to _dl_start. */
+- mov $sp, $16
+- bsr $26, "ASM_ALPHA_NG_SYMBOL_PREFIX"_dl_start..ng
+- .end _start
+- /* FALLTHRU */
+- .globl _dl_start_user
+- .ent _dl_start_user
+-_dl_start_user:
+- .frame $30,0,$31,0
+- .prologue 0
+- /* Save the user entry point address in s0. */
+- mov $0, $9
+- /* Store the highest stack address. */
+- stq $30, __libc_stack_end
+- /* See if we were run as a command with the executable file
+- name as an extra leading argument. */
+- ldl $1, _dl_skip_args
+- bne $1, $fixup_stack
+-$fixup_stack_ret:
+- /* The special initializer gets called with the stack just
+- as the application's entry point will see it; it can
+- switch stacks if it moves these contents over. */
+-" RTLD_START_SPECIAL_INIT "
+- /* Call _dl_init(_dl_loaded, argc, argv, envp) to run initializers. */
+- ldq $16, _dl_loaded
+- ldq $17, 0($sp)
+- lda $18, 8($sp)
+- s8addq $17, 8, $19
+- addq $19, $18, $19
+- jsr $26, _dl_init
+- /* Pass our finalizer function to the user in $0. */
+- lda $0, _dl_fini
+- /* Jump to the user's entry point. */
+- mov $9, $27
+- jmp ($9)
+-$fixup_stack:
+- /* Adjust the stack pointer to skip _dl_skip_args words. This
+- involves copying everything down, since the stack pointer must
+- always be 16-byte aligned. */
+- ldq $2, 0($sp)
+- ldq $5, _dl_argv
+- subq $31, $1, $6
+- subq $2, $1, $2
+- s8addq $6, $5, $5
+- mov $sp, $4
+- s8addq $1, $sp, $3
+- stq $2, 0($sp)
+- stq $5, _dl_argv
+- /* Copy down argv. */
+-0: ldq $5, 8($3)
+- addq $4, 8, $4
+- addq $3, 8, $3
+- stq $5, 0($4)
+- bne $5, 0b
+- /* Copy down envp. */
+-1: ldq $5, 8($3)
+- addq $4, 8, $4
+- addq $3, 8, $3
+- stq $5, 0($4)
+- bne $5, 1b
+- /* Copy down auxiliary table. */
+-2: ldq $5, 8($3)
+- ldq $6, 16($3)
+- addq $4, 16, $4
+- addq $3, 16, $3
+- stq $5, -8($4)
+- stq $6, 0($4)
+- bne $5, 2b
+- br $fixup_stack_ret
+- .end _dl_start_user
+- .set noat
++.text \n\
++ .set at \n\
++ .globl _start \n\
++ .ent _start \n\
++_start: \n\
++ br $gp, 0f \n\
++0: ldgp $gp, 0($gp) \n\
++ .prologue 0 \n\
++ /* Pass pointer to argument block to _dl_start. */ \n\
++ mov $sp, $16 \n\
++ bsr $26, "ASM_ALPHA_NG_SYMBOL_PREFIX"_dl_start..ng \n\
++ .end _start \n\
++ /* FALLTHRU */ \n\
++ .globl _dl_start_user \n\
++ .ent _dl_start_user \n\
++_dl_start_user: \n\
++ .frame $30,0,$31,0 \n\
++ .prologue 0 \n\
++ /* Save the user entry point address in s0. */ \n\
++ mov $0, $9 \n\
++ /* Store the highest stack address. */ \n\
++ stq $30, __libc_stack_end \n\
++ /* See if we were run as a command with the executable \n\
++ file name as an extra leading argument. */ \n\
++ ldl $1, _dl_skip_args \n\
++ bne $1, $fixup_stack \n\
++$fixup_stack_ret: \n\
++ /* The special initializer gets called with the stack \n\
++ just as the application's entry point will see it; \n\
++ it can switch stacks if it moves these contents \n\
++ over. */ \n\
++" RTLD_START_SPECIAL_INIT " \n\
++ /* Call _dl_init(_dl_loaded, argc, argv, envp) to run \n\
++ initializers. */ \n\
++ ldq $16, _dl_loaded \n\
++ ldq $17, 0($sp) \n\
++ lda $18, 8($sp) \n\
++ s8addq $17, 8, $19 \n\
++ addq $19, $18, $19 \n\
++ jsr $26, _dl_init \n\
++ /* Pass our finalizer function to the user in $0. */ \n\
++ lda $0, _dl_fini \n\
++ /* Jump to the user's entry point. */ \n\
++ mov $9, $27 \n\
++ jmp ($9) \n\
++$fixup_stack: \n\
++ /* Adjust the stack pointer to skip _dl_skip_args words.\n\
++ This involves copying everything down, since the \n\
++ stack pointer must always be 16-byte aligned. */ \n\
++ ldq $2, 0($sp) \n\
++ ldq $5, _dl_argv \n\
++ subq $31, $1, $6 \n\
++ subq $2, $1, $2 \n\
++ s8addq $6, $5, $5 \n\
++ mov $sp, $4 \n\
++ s8addq $1, $sp, $3 \n\
++ stq $2, 0($sp) \n\
++ stq $5, _dl_argv \n\
++ /* Copy down argv. */ \n\
++0: ldq $5, 8($3) \n\
++ addq $4, 8, $4 \n\
++ addq $3, 8, $3 \n\
++ stq $5, 0($4) \n\
++ bne $5, 0b \n\
++ /* Copy down envp. */ \n\
++1: ldq $5, 8($3) \n\
++ addq $4, 8, $4 \n\
++ addq $3, 8, $3 \n\
++ stq $5, 0($4) \n\
++ bne $5, 1b \n\
++ /* Copy down auxiliary table. */ \n\
++2: ldq $5, 8($3) \n\
++ ldq $6, 16($3) \n\
++ addq $4, 16, $4 \n\
++ addq $3, 16, $3 \n\
++ stq $5, -8($4) \n\
++ stq $6, 0($4) \n\
++ bne $5, 2b \n\
++ br $fixup_stack_ret \n\
++ .end _dl_start_user \n\
++ .set noat \n\
+ .previous");
+
+ #ifndef RTLD_START_SPECIAL_INIT
diff --git a/patches/glibc/2.2.5/dl-machine-arm.patch b/patches/glibc/2.2.5/dl-machine-arm.patch
new file mode 100644
index 0000000..176983b
--- /dev/null
+++ b/patches/glibc/2.2.5/dl-machine-arm.patch
@@ -0,0 +1,389 @@
+Fixes error:
+In file included from dynamic-link.h:21,
+ from dl-load.c:32:
+../sysdeps/arm/dl-machine.h:124:25: missing terminating " character
+...
+make[2]: *** [/crosstool-0.22/build/arm-unknown-linux-gnu/gcc-3.3-glibc-2.2.5/build-glibc/elf/dl-load.o] Error 1
+
+The first two hunks of
+http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/arm/dl-machine.h.diff?r1=1.39&r2=1.40&cvsroot=glibc
+applied cleanly, but the third hunk didn't, so I just added the \n\'s by hand for that section.
+
+--- glibc-2.2.5/sysdeps/arm/dl-machine.h.orig Sat Sep 8 14:31:40 2001
++++ glibc-2.2.5/sysdeps/arm/dl-machine.h Wed Aug 27 10:55:26 2003
+@@ -121,14 +121,15 @@
+ and then redirect to the address it returns. */
+ // macro for handling PIC situation....
+ #ifdef PIC
+-#define CALL_ROUTINE(x) " ldr sl,0f
+- add sl, pc, sl
+-1: ldr r2, 2f
+- mov lr, pc
+- add pc, sl, r2
+- b 3f
+-0: .word _GLOBAL_OFFSET_TABLE_ - 1b - 4
+-2: .word " #x "(GOTOFF)
++#define CALL_ROUTINE(x) "\
++ ldr sl,0f\n\
++ add sl, pc, sl\n\
++1: ldr r2, 2f\n\
++ mov lr, pc\n\
++ add pc, sl, r2\n\
++ b 3f\n\
++0: .word _GLOBAL_OFFSET_TABLE_ - 1b - 4\n\
++2: .word " #x "(GOTOFF)\n\
+ 3: "
+ #else
+ #define CALL_ROUTINE(x) " bl " #x
+@@ -136,114 +137,114 @@
+
+ #ifndef PROF
+ # define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
+- .text
+- .globl _dl_runtime_resolve
+- .type _dl_runtime_resolve, #function
+- .align 2
+-_dl_runtime_resolve:
+- @ we get called with
+- @ stack[0] contains the return address from this call
+- @ ip contains &GOT[n+3] (pointer to function)
+- @ lr points to &GOT[2]
+-
+- @ save almost everything; lr is already on the stack
+- stmdb sp!,{r0-r3,sl,fp}
+-
+- @ prepare to call fixup()
+- @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each
+- sub r1, ip, lr
+- sub r1, r1, #4
+- add r1, r1, r1
+-
+- @ get pointer to linker struct
+- ldr r0, [lr, #-4]
+-
+- @ call fixup routine
+- " CALL_ROUTINE(fixup) "
+-
+- @ save the return
+- mov ip, r0
+-
+- @ restore the stack
+- ldmia sp!,{r0-r3,sl,fp,lr}
+-
+- @ jump to the newly found address
+- mov pc, ip
+-
+- .size _dl_runtime_resolve, .-_dl_runtime_resolve
+-
+- .globl _dl_runtime_profile
+- .type _dl_runtime_profile, #function
+- .align 2
+-_dl_runtime_profile:
+- @ save almost everything; lr is already on the stack
+- stmdb sp!,{r0-r3,sl,fp}
+-
+- @ prepare to call fixup()
+- @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each
+- sub r1, ip, lr
+- sub r1, r1, #4
+- add r1, r1, r1
+-
+- @ get pointer to linker struct
+- ldr r0, [lr, #-4]
+-
+- @ call profiling fixup routine
+- " CALL_ROUTINE(profile_fixup) "
+-
+- @ save the return
+- mov ip, r0
+-
+- @ restore the stack
+- ldmia sp!,{r0-r3,sl,fp,lr}
+-
+- @ jump to the newly found address
+- mov pc, ip
+-
+- .size _dl_runtime_resolve, .-_dl_runtime_resolve
+- .previous
++ .text\n\
++ .globl _dl_runtime_resolve\n\
++ .type _dl_runtime_resolve, #function\n\
++ .align 2\n\
++_dl_runtime_resolve:\n\
++ @ we get called with\n\
++ @ stack[0] contains the return address from this call\n\
++ @ ip contains &GOT[n+3] (pointer to function)\n\
++ @ lr points to &GOT[2]\n\
++\n\
++ @ save almost everything; lr is already on the stack\n\
++ stmdb sp!,{r0-r3,sl,fp}\n\
++\n\
++ @ prepare to call fixup()\n\
++ @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each\n\
++ sub r1, ip, lr\n\
++ sub r1, r1, #4\n\
++ add r1, r1, r1\n\
++\n\
++ @ get pointer to linker struct\n\
++ ldr r0, [lr, #-4]\n\
++\n\
++ @ call fixup routine\n\
++ " CALL_ROUTINE(fixup) "\n\
++\n\
++ @ save the return\n\
++ mov ip, r0\n\
++\n\
++ @ restore the stack\n\
++ ldmia sp!,{r0-r3,sl,fp,lr}\n\
++\n\
++ @ jump to the newly found address\n\
++ mov pc, ip\n\
++\n\
++ .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\
++\n\
++ .globl _dl_runtime_profile\n\
++ .type _dl_runtime_profile, #function\n\
++ .align 2\n\
++_dl_runtime_profile:\n\
++ @ save almost everything; lr is already on the stack\n\
++ stmdb sp!,{r0-r3,sl,fp}\n\
++\n\
++ @ prepare to call fixup()\n\
++ @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each\n\
++ sub r1, ip, lr\n\
++ sub r1, r1, #4\n\
++ add r1, r1, r1\n\
++\n\
++ @ get pointer to linker struct\n\
++ ldr r0, [lr, #-4]\n\
++\n\
++ @ call profiling fixup routine\n\
++ " CALL_ROUTINE(profile_fixup) "\n\
++\n\
++ @ save the return\n\
++ mov ip, r0\n\
++\n\
++ @ restore the stack\n\
++ ldmia sp!,{r0-r3,sl,fp,lr}\n\
++\n\
++ @ jump to the newly found address\n\
++ mov pc, ip\n\
++\n\
++ .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\
++ .previous\n\
+ ");
+ #else // PROF
+ # define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
+- .text
+- .globl _dl_runtime_resolve
+- .globl _dl_runtime_profile
+- .type _dl_runtime_resolve, #function
+- .type _dl_runtime_profile, #function
+- .align 2
+-_dl_runtime_resolve:
+-_dl_runtime_profile:
+- @ we get called with
+- @ stack[0] contains the return address from this call
+- @ ip contains &GOT[n+3] (pointer to function)
+- @ lr points to &GOT[2]
+-
+- @ save almost everything; return add is already on the stack
+- stmdb sp!,{r0-r3,sl,fp}
+-
+- @ prepare to call fixup()
+- @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each
+- sub r1, ip, lr
+- sub r1, r1, #4
+- add r1, r1, r1
+-
+- @ get pointer to linker struct
+- ldr r0, [lr, #-4]
+-
+- @ call profiling fixup routine
+- " CALL_ROUTINE(fixup) "
+-
+- @ save the return
+- mov ip, r0
+-
+- @ restore the stack
+- ldmia sp!,{r0-r3,sl,fp,lr}
+-
+- @ jump to the newly found address
+- mov pc, ip
+-
+- .size _dl_runtime_profile, .-_dl_runtime_profile
+- .previous
++ .text\n\
++ .globl _dl_runtime_resolve\n\
++ .globl _dl_runtime_profile\n\
++ .type _dl_runtime_resolve, #function\n\
++ .type _dl_runtime_profile, #function\n\
++ .align 2\n\
++_dl_runtime_resolve:\n\
++_dl_runtime_profile:\n\
++ @ we get called with\n\
++ @ stack[0] contains the return address from this call\n\
++ @ ip contains &GOT[n+3] (pointer to function)\n\
++ @ lr points to &GOT[2]\n\
++\n\
++ @ save almost everything; return add is already on the stack\n\
++ stmdb sp!,{r0-r3,sl,fp}\n\
++\n\
++ @ prepare to call fixup()\n\
++ @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each\n\
++ sub r1, ip, lr\n\
++ sub r1, r1, #4\n\
++ add r1, r1, r1\n\
++\n\
++ @ get pointer to linker struct\n\
++ ldr r0, [lr, #-4]\n\
++\n\
++ @ call profiling fixup routine\n\
++ " CALL_ROUTINE(fixup) "\n\
++\n\
++ @ save the return\n\
++ mov ip, r0\n\
++\n\
++ @ restore the stack\n\
++ ldmia sp!,{r0-r3,sl,fp,lr}\n\
++\n\
++ @ jump to the newly found address\n\
++ mov pc, ip\n\
++\n\
++ .size _dl_runtime_profile, .-_dl_runtime_profile\n\
++ .previous\n\
+ ");
+ #endif //PROF
+
+@@ -256,70 +257,70 @@
+ its return value is the user program's entry point. */
+
+ #define RTLD_START asm ("\
+-.text
+-.globl _start
+-.globl _dl_start_user
+-_start:
+- @ at start time, all the args are on the stack
+- mov r0, sp
+- bl _dl_start
+- @ returns user entry point in r0
+-_dl_start_user:
+- mov r6, r0
+- @ we are PIC code, so get global offset table
+- ldr sl, .L_GET_GOT
+- add sl, pc, sl
+-.L_GOT_GOT:
+- @ Store the highest stack address
+- ldr r1, .L_STACK_END
+- ldr r1, [sl, r1]
+- str sp, [r1]
+- @ See if we were run as a command with the executable file
+- @ name as an extra leading argument.
+- ldr r4, .L_SKIP_ARGS
+- ldr r4, [sl, r4]
+- @ get the original arg count
+- ldr r1, [sp]
+- @ subtract _dl_skip_args from it
+- sub r1, r1, r4
+- @ adjust the stack pointer to skip them
+- add sp, sp, r4, lsl #2
+- @ get the argv address
+- add r2, sp, #4
+- @ store the new argc in the new stack location
+- str r1, [sp]
+- @ compute envp
+- add r3, r2, r1, lsl #2
+- add r3, r3, #4
+-
+- @ now we call _dl_init
+- ldr r0, .L_LOADED
+- ldr r0, [sl, r0]
+- ldr r0, [r0]
+- @ call _dl_init
+- bl _dl_init(PLT)
+- @ clear the startup flag
+- ldr r2, .L_STARTUP_FLAG
+- ldr r1, [sl, r2]
+- mov r0, #0
+- str r0, [r1]
+- @ load the finalizer function
+- ldr r0, .L_FINI_PROC
+- ldr r0, [sl, r0]
+- @ jump to the user_s entry point
+- mov pc, r6
+-.L_GET_GOT:
++.text\n\
++.globl _start\n\
++.globl _dl_start_user\n\
++_start:\n\
++ @ at start time, all the args are on the stack\n\
++ mov r0, sp\n\
++ bl _dl_start\n\
++ @ returns user entry point in r0\n\
++_dl_start_user:\n\
++ mov r6, r0\n\
++ @ we are PIC code, so get global offset table\n\
++ ldr sl, .L_GET_GOT\n\
++ add sl, pc, sl\n\
++.L_GOT_GOT:\n\
++ @ Store the highest stack address\n\
++ ldr r1, .L_STACK_END\n\
++ ldr r1, [sl, r1]\n\
++ str sp, [r1]\n\
++ @ See if we were run as a command with the executable file\n\
++ @ name as an extra leading argument.\n\
++ ldr r4, .L_SKIP_ARGS\n\
++ ldr r4, [sl, r4]\n\
++ @ get the original arg count\n\
++ ldr r1, [sp]\n\
++ @ subtract _dl_skip_args from it\n\
++ sub r1, r1, r4\n\
++ @ adjust the stack pointer to skip them\n\
++ add sp, sp, r4, lsl #2\n\
++ @ get the argv address\n\
++ add r2, sp, #4\n\
++ @ store the new argc in the new stack location\n\
++ str r1, [sp]\n\
++ @ compute envp\n\
++ add r3, r2, r1, lsl #2\n\
++ add r3, r3, #4\n\
++\n\
++ @ now we call _dl_init\n\
++ ldr r0, .L_LOADED\n\
++ ldr r0, [sl, r0]\n\
++ ldr r0, [r0]\n\
++ @ call _dl_init\n\
++ bl _dl_init(PLT)\n\
++ @ clear the startup flag\n\
++ ldr r2, .L_STARTUP_FLAG\n\
++ ldr r1, [sl, r2]\n\
++ mov r0, #0\n\
++ str r0, [r1]\n\
++ @ load the finalizer function\n\
++ ldr r0, .L_FINI_PROC\n\
++ ldr r0, [sl, r0]\n\
++ @ jump to the user_s entry point\n\
++ mov pc, r6\n\
++.L_GET_GOT:\n\
+ .word _GLOBAL_OFFSET_TABLE_ - .L_GOT_GOT - 4 \n\
+ .L_SKIP_ARGS: \n\
+ .word _dl_skip_args(GOTOFF) \n\
+-.L_STARTUP_FLAG:
+- .word _dl_starting_up(GOT)
+-.L_FINI_PROC:
+- .word _dl_fini(GOT)
+-.L_STACK_END:
+- .word __libc_stack_end(GOT)
+-.L_LOADED:
+- .word _dl_loaded(GOT)
++.L_STARTUP_FLAG:\n\
++ .word _dl_starting_up(GOT)\n\
++.L_FINI_PROC:\n\
++ .word _dl_fini(GOT)\n\
++.L_STACK_END:\n\
++ .word __libc_stack_end(GOT)\n\
++.L_LOADED:\n\
++ .word _dl_loaded(GOT)\n\
+ .previous\n\
+ ");
+
diff --git a/patches/glibc/2.2.5/dl-machine-m68k.patch b/patches/glibc/2.2.5/dl-machine-m68k.patch
new file mode 100644
index 0000000..2e9ee04
--- /dev/null
+++ b/patches/glibc/2.2.5/dl-machine-m68k.patch
@@ -0,0 +1,206 @@
+Retrieved with
+ wget 'http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/m68k/dl-machine.h.diff?r1=1.53&r2=1.55&cvsroot=glibc'
+
+Fixes error
+
+In file included from dynamic-link.h:21,
+ from dl-load.c:32:
+../sysdeps/m68k/dl-machine.h:108: error: parse error before '.' token
+../sysdeps/m68k/dl-machine.h:109: error: stray '@' in program
+../sysdeps/m68k/dl-machine.h:120: error: syntax error at '#' token
+../sysdeps/m68k/dl-machine.h:123: error: stray '\' in program
+../sysdeps/m68k/dl-machine.h:123: error: missing terminating " character
+../sysdeps/m68k/dl-machine.h:148: error: stray '@' in program
+../sysdeps/m68k/dl-machine.h:152: error: syntax error at '#' token
+../sysdeps/m68k/dl-machine.h:156: error: stray '@' in program
+../sysdeps/m68k/dl-machine.h:161: error: stray '@' in program
+../sysdeps/m68k/dl-machine.h:163: error: stray '@' in program
+../sysdeps/m68k/dl-machine.h:166: error: stray '@' in program
+In file included from dynamic-link.h:21,
+ from dl-load.c:32:
+../sysdeps/m68k/dl-machine.h:175:4: invalid preprocessing directive #Call
+../sysdeps/m68k/dl-machine.h:179: error: stray '@' in program
+../sysdeps/m68k/dl-machine.h:180: error: stray '@' in program
+../sysdeps/m68k/dl-machine.h:181: error: syntax error at '#' token
+../sysdeps/m68k/dl-machine.h:182: error: syntax error at '#' token
+../sysdeps/m68k/dl-machine.h:184: error: stray '@' in program
+../sysdeps/m68k/dl-machine.h:187: error: missing terminating ' character
+../sysdeps/m68k/dl-machine.h:190: error: missing terminating " character
+dl-load.c: In function `_dl_map_object_from_fd':
+dl-load.c:1089: warning: use of cast expressions as lvalues is deprecated
+dl-load.c:1089: warning: use of cast expressions as lvalues is deprecated
+dl-load.c:1109: warning: use of cast expressions as lvalues is deprecated
+dl-load.c:1109: warning: use of cast expressions as lvalues is deprecated
+make[2]: *** [/home/dank/wk/crosstool-0.28-rc24/build/m68k-unknown-linux-gnu/gcc-3.4.0-glibc-2.2.5/build-glibc/elf/dl-load.o] Error 1
+
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/m68k/dl-machine.h,v
+retrieving revision 1.53
+retrieving revision 1.55
+diff -u -r1.53 -r1.55
+--- libc/sysdeps/m68k/dl-machine.h 2001/08/26 22:26:36 1.53
++++ libc/sysdeps/m68k/dl-machine.h 2002/02/01 10:28:20 1.55
+@@ -1,5 +1,5 @@
+ /* Machine-dependent ELF dynamic relocation inline functions. m68k version.
+- Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
++ Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -85,11 +85,11 @@
+ {
+ got[2] = (Elf32_Addr) &_dl_runtime_profile;
+
+- if (_dl_name_match_p (_dl_profile, l))
++ if (_dl_name_match_p (GL(dl_profile), l))
+ {
+ /* This is the object we are looking for. Say that we really
+ want profiling and the timers are started. */
+- _dl_profile_map = l;
++ GL(dl_profile_map) = l;
+ }
+ }
+ else
+@@ -104,22 +104,22 @@
+ /* This code is used in dl-runtime.c to call the `fixup' function
+ and then redirect to the address it returns. */
+ #define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name) \
+-"| Trampoline for " #fixup_name "
+- .globl " #tramp_name "
+- .type " #tramp_name ", @function
+-" #tramp_name ":
+- | Save %a0 (struct return address) and %a1.
+- move.l %a0, -(%sp)
+- move.l %a1, -(%sp)
+- | Call the real address resolver.
+- jbsr " #fixup_name "
+- | Restore register %a0 and %a1.
+- move.l (%sp)+, %a1
+- move.l (%sp)+, %a0
+- | Pop parameters
+- addq.l #8, %sp
+- | Call real function.
+- jmp (%d0)
++"| Trampoline for " #fixup_name "\n\
++ .globl " #tramp_name "\n\
++ .type " #tramp_name ", @function\n\
++" #tramp_name ":\n\
++ | Save %a0 (struct return address) and %a1.\n\
++ move.l %a0, -(%sp)\n\
++ move.l %a1, -(%sp)\n\
++ | Call the real address resolver.\n\
++ jbsr " #fixup_name "\n\
++ | Restore register %a0 and %a1.\n\
++ move.l (%sp)+, %a1\n\
++ move.l (%sp)+, %a0\n\
++ | Pop parameters\n\
++ addq.l #8, %sp\n\
++ | Call real function.\n\
++ jmp (%d0)\n\
+ .size " #tramp_name ", . - " #tramp_name "\n"
+ #ifndef PROF
+ #define ELF_MACHINE_RUNTIME_TRAMPOLINE \
+@@ -143,50 +143,50 @@
+ its return value is the user program's entry point. */
+
+ #define RTLD_START asm ("\
+- .text
+- .globl _start
+- .type _start,@function
+-_start:
+- move.l %sp, -(%sp)
+- jbsr _dl_start
+- addq.l #4, %sp
+- /* FALLTHRU */
+-
+- .globl _dl_start_user
+- .type _dl_start_user,@function
+-_dl_start_user:
+- | Save the user entry point address in %a4.
+- move.l %d0, %a4
+- | Point %a5 at the GOT.
+- lea _GLOBAL_OFFSET_TABLE_@GOTPC(%pc), %a5
+- | Remember the highest stack address.
+- move.l %sp, ([__libc_stack_end@GOT.w, %a5])
+- | See if we were run as a command with the executable file
+- | name as an extra leading argument.
+- move.l ([_dl_skip_args@GOT.w, %a5]), %d0
+- | Pop the original argument count
+- move.l (%sp)+, %d1
+- | Subtract _dl_skip_args from it.
+- sub.l %d0, %d1
+- | Adjust the stack pointer to skip _dl_skip_args words.
+- lea (%sp, %d0*4), %sp
+- | Push back the modified argument count.
+- move.l %d1, -(%sp)
+- # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env)
+- pea 8(%sp, %d1*4)
+- pea 8(%sp)
+- move.l %d1, -(%sp)
+- move.l ([_dl_loaded@GOT.w, %a5]), -(%sp)
+- jbsr _dl_init@PLTPC
+- addq.l #8, %sp
+- addq.l #8, %sp
+- | Pass our finalizer function to the user in %a1.
+- move.l _dl_fini@GOT.w(%a5), %a1
+- | Initialize %fp with the stack pointer.
+- move.l %sp, %fp
+- | Jump to the user's entry point.
+- jmp (%a4)
+- .size _dl_start_user, . - _dl_start_user
++ .text\n\
++ .globl _start\n\
++ .type _start,@function\n\
++_start:\n\
++ move.l %sp, -(%sp)\n\
++ jbsr _dl_start\n\
++ addq.l #4, %sp\n\
++ /* FALLTHRU */\n\
++\n\
++ .globl _dl_start_user\n\
++ .type _dl_start_user,@function\n\
++_dl_start_user:\n\
++ | Save the user entry point address in %a4.\n\
++ move.l %d0, %a4\n\
++ | Point %a5 at the GOT.\n\
++ lea _GLOBAL_OFFSET_TABLE_@GOTPC(%pc), %a5\n\
++ | Remember the highest stack address.\n\
++ move.l %sp, ([__libc_stack_end@GOT.w, %a5])\n\
++ | See if we were run as a command with the executable file\n\
++ | name as an extra leading argument.\n\
++ move.l ([_dl_skip_args@GOT.w, %a5]), %d0\n\
++ | Pop the original argument count\n\
++ move.l (%sp)+, %d1\n\
++ | Subtract _dl_skip_args from it.\n\
++ sub.l %d0, %d1\n\
++ | Adjust the stack pointer to skip _dl_skip_args words.\n\
++ lea (%sp, %d0*4), %sp\n\
++ | Push back the modified argument count.\n\
++ move.l %d1, -(%sp)\n\
++ # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env)\n\
++ pea 8(%sp, %d1*4)\n\
++ pea 8(%sp)\n\
++ move.l %d1, -(%sp)\n\
++ move.l ([_rtld_global@GOT.w, %a5]), -(%sp)\n\
++ jbsr _dl_init@PLTPC\n\
++ addq.l #8, %sp\n\
++ addq.l #8, %sp\n\
++ | Pass our finalizer function to the user in %a1.\n\
++ move.l _dl_fini@GOT.w(%a5), %a1\n\
++ | Initialize %fp with the stack pointer.\n\
++ move.l %sp, %fp\n\
++ | Jump to the user's entry point.\n\
++ jmp (%a4)\n\
++ .size _dl_start_user, . - _dl_start_user\n\
+ .previous");
+
+ /* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so
+@@ -251,7 +251,7 @@
+ found. */
+ break;
+ if (sym->st_size > refsym->st_size
+- || (sym->st_size < refsym->st_size && _dl_verbose))
++ || (sym->st_size < refsym->st_size && GL(dl_verbose)))
+ {
+ extern char **_dl_argv;
+ const char *strtab;
diff --git a/patches/glibc/2.2.5/dl-machine-sh.patch b/patches/glibc/2.2.5/dl-machine-sh.patch
new file mode 100644
index 0000000..ac046e4
--- /dev/null
+++ b/patches/glibc/2.2.5/dl-machine-sh.patch
@@ -0,0 +1,41 @@
+Retrieved with
+wget 'http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/sh/dl-machine.h.diff?r1=1.21&r2=1.22&cvsroot=glibc'
+
+Fixes error
+/tmp/ccFobT8r.s: Assembler messages:
+/tmp/ccFobT8r.s:1819: Error: symbol `.L3' is already defined
+make[2]: *** [/home/dank/wk/crosstool-0.28-rc24/build/sh4-unknown-linux-gnu/gcc-3.4.0-glibc-2.2.5/build-glibc/elf/rtld.os] Error 1
+make[2]: Leaving directory `/home/dank/wk/crosstool-0.28-rc24/build/sh4-unknown-linux-gnu/gcc-3.4.0-glibc-2.2.5/glibc-2.2.5/elf'
+
+See also http://sources.redhat.com/ml/libc-alpha/2002-07/msg00001.html
+
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/sh/dl-machine.h,v
+retrieving revision 1.21
+retrieving revision 1.22
+diff -u -r1.21 -r1.22
+--- libc/sysdeps/sh/dl-machine.h 2002/04/08 20:59:36 1.21
++++ libc/sysdeps/sh/dl-machine.h 2002/06/28 17:26:01 1.22
+@@ -53,16 +53,16 @@
+ elf_machine_load_address (void)
+ {
+ Elf32_Addr addr;
+- asm ("mov.l .L1,r0\n\
+- mov.l .L3,r2\n\
++ asm ("mov.l 1f,r0\n\
++ mov.l 3f,r2\n\
+ add r12,r2\n\
+ mov.l @(r0,r12),r0\n\
+- bra .L2\n\
++ bra 2f\n\
+ sub r0,r2\n\
+ .align 2\n\
+- .L1: .long _dl_start@GOT\n\
+- .L3: .long _dl_start@GOTOFF\n\
+- .L2: mov r2,%0"
++ 1: .long _dl_start@GOT\n\
++ 3: .long _dl_start@GOTOFF\n\
++ 2: mov r2,%0"
+ : "=r" (addr) : : "r0", "r1", "r2");
+ return addr;
+ }
diff --git a/patches/glibc/2.2.5/dl-machine-sparc.patch b/patches/glibc/2.2.5/dl-machine-sparc.patch
new file mode 100644
index 0000000..ccdb6d3
--- /dev/null
+++ b/patches/glibc/2.2.5/dl-machine-sparc.patch
@@ -0,0 +1,230 @@
+--- glibc-2.2.5/sysdeps/sparc/sparc32/dl-machine.h.old Sat Jun 7 18:19:03 2003
++++ glibc-2.2.5/sysdeps/sparc/sparc32/dl-machine.h Sat Jun 7 18:20:04 2003
+@@ -148,23 +148,23 @@
+ and then redirect to the address it returns. */
+ #define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name) \
+ asm ( "\
+- .text
+- .globl " #tramp_name "
+- .type " #tramp_name ", @function
+- .align 32
+-" #tramp_name ":
+- /* Set up the arguments to fixup --
+- %o0 = link_map out of plt0
+- %o1 = offset of reloc entry
+- %o2 = return address */
+- ld [%o7 + 8], %o0
+- srl %g1, 10, %o1
+- mov %i7, %o2
+- call " #fixup_name "
+- sub %o1, 4*12, %o1
+- jmp %o0
+- restore
+- .size " #tramp_name ", . - " #tramp_name "
++ .text\n\
++ .globl " #tramp_name "\n\
++ .type " #tramp_name ", @function\n\
++ .align 32\n\
++" #tramp_name ":\n\
++ /* Set up the arguments to fixup --\n\
++ %o0 = link_map out of plt0\n\
++ %o1 = offset of reloc entry\n\
++ %o2 = return address */\n\
++ ld [%o7 + 8], %o0\n\
++ srl %g1, 10, %o1\n\
++ mov %i7, %o2\n\
++ call " #fixup_name "\n\
++ sub %o1, 4*12, %o1\n\
++ jmp %o0\n\
++ restore\n\
++ .size " #tramp_name ", . - " #tramp_name "\n\
+ .previous")
+
+ #ifndef PROF
+@@ -199,96 +199,96 @@
+ its return value is the user program's entry point. */
+
+ #define RTLD_START __asm__ ("\
+- .text
+- .globl _start
+- .type _start, @function
+- .align 32
+-_start:
+- /* Allocate space for functions to drop their arguments. */
+- sub %sp, 6*4, %sp
+- /* Pass pointer to argument block to _dl_start. */
+- call _dl_start
+- add %sp, 22*4, %o0
+- /* FALTHRU */
+- .globl _dl_start_user
+- .type _dl_start_user, @function
+-_dl_start_user:
+- /* Load the PIC register. */
+-1: call 2f
+- sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
+-2: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
+- add %l7, %o7, %l7
+- /* Save the user entry point address in %l0 */
+- mov %o0, %l0
+- /* Store the highest stack address. */
+- sethi %hi(__libc_stack_end), %g2
+- or %g2, %lo(__libc_stack_end), %g2
+- ld [%l7 + %g2], %l1
+- sethi %hi(_dl_skip_args), %g2
+- add %sp, 6*4, %l2
+- or %g2, %lo(_dl_skip_args), %g2
+- st %l2, [%l1]
+- /* See if we were run as a command with the executable file name as an
+- extra leading argument. If so, adjust the contents of the stack. */
+- ld [%l7+%g2], %i0
+- ld [%i0], %i0
+- tst %i0
+- beq 3f
+- ld [%sp+22*4], %i5 /* load argc */
+- /* Find out how far to shift. */
+- sethi %hi(_dl_argv), %l3
+- or %l3, %lo(_dl_argv), %l3
+- ld [%l7+%l3], %l3
+- sub %i5, %i0, %i5
+- ld [%l3], %l4
+- sll %i0, 2, %i2
+- st %i5, [%sp+22*4]
+- sub %l4, %i2, %l4
+- add %sp, 23*4, %i1
+- add %i1, %i2, %i2
+- st %l4, [%l3]
+- /* Copy down argv */
+-21: ld [%i2], %i3
+- add %i2, 4, %i2
+- tst %i3
+- st %i3, [%i1]
+- bne 21b
+- add %i1, 4, %i1
+- /* Copy down env */
+-22: ld [%i2], %i3
+- add %i2, 4, %i2
+- tst %i3
+- st %i3, [%i1]
+- bne 22b
+- add %i1, 4, %i1
+- /* Copy down auxiliary table. */
+-23: ld [%i2], %i3
+- ld [%i2+4], %i4
+- add %i2, 8, %i2
+- tst %i3
+- st %i3, [%i1]
+- st %i4, [%i1+4]
+- bne 23b
+- add %i1, 8, %i1
+- /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */
+-3: sethi %hi(_dl_loaded), %o0
+- add %sp, 23*4, %o2
+- orcc %o0, %lo(_dl_loaded), %o0
+- sll %i5, 2, %o3
+- ld [%l7+%o0], %o0
+- add %o3, 4, %o3
+- mov %i5, %o1
+- add %o2, %o3, %o3
+- call _dl_init
+- ld [%o0], %o0
+- /* Pass our finalizer function to the user in %g1. */
+- sethi %hi(_dl_fini), %g1
+- or %g1, %lo(_dl_fini), %g1
+- ld [%l7+%g1], %g1
+- /* Jump to the user's entry point and deallocate the extra stack we got. */
+- jmp %l0
+- add %sp, 6*4, %sp
+- .size _dl_start_user, . - _dl_start_user
++ .text\n\
++ .globl _start\n\
++ .type _start, @function\n\
++ .align 32\n\
++_start:\n\
++ /* Allocate space for functions to drop their arguments. */\n\
++ sub %sp, 6*4, %sp\n\
++ /* Pass pointer to argument block to _dl_start. */\n\
++ call _dl_start\n\
++ add %sp, 22*4, %o0\n\
++ /* FALTHRU */\n\
++ .globl _dl_start_user\n\
++ .type _dl_start_user, @function\n\
++_dl_start_user:\n\
++ /* Load the PIC register. */\n\
++1: call 2f\n\
++ sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n\
++2: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n\
++ add %l7, %o7, %l7\n\
++ /* Save the user entry point address in %l0 */\n\
++ mov %o0, %l0\n\
++ /* Store the highest stack address. */\n\
++ sethi %hi(__libc_stack_end), %g2\n\
++ or %g2, %lo(__libc_stack_end), %g2\n\
++ ld [%l7 + %g2], %l1\n\
++ sethi %hi(_dl_skip_args), %g2\n\
++ add %sp, 6*4, %l2\n\
++ or %g2, %lo(_dl_skip_args), %g2\n\
++ st %l2, [%l1]\n\
++ /* See if we were run as a command with the executable file name as an\n\
++ extra leading argument. If so, adjust the contents of the stack. */\n\
++ ld [%l7+%g2], %i0\n\
++ ld [%i0], %i0\n\
++ tst %i0\n\
++ beq 3f\n\
++ ld [%sp+22*4], %i5 /* load argc */\n\
++ /* Find out how far to shift. */\n\
++ sethi %hi(_dl_argv), %l3\n\
++ or %l3, %lo(_dl_argv), %l3\n\
++ ld [%l7+%l3], %l3\n\
++ sub %i5, %i0, %i5\n\
++ ld [%l3], %l4\n\
++ sll %i0, 2, %i2\n\
++ st %i5, [%sp+22*4]\n\
++ sub %l4, %i2, %l4\n\
++ add %sp, 23*4, %i1\n\
++ add %i1, %i2, %i2\n\
++ st %l4, [%l3]\n\
++ /* Copy down argv */\n\
++21: ld [%i2], %i3\n\
++ add %i2, 4, %i2\n\
++ tst %i3\n\
++ st %i3, [%i1]\n\
++ bne 21b\n\
++ add %i1, 4, %i1\n\
++ /* Copy down env */\n\
++22: ld [%i2], %i3\n\
++ add %i2, 4, %i2\n\
++ tst %i3\n\
++ st %i3, [%i1]\n\
++ bne 22b\n\
++ add %i1, 4, %i1\n\
++ /* Copy down auxiliary table. */\n\
++23: ld [%i2], %i3\n\
++ ld [%i2+4], %i4\n\
++ add %i2, 8, %i2\n\
++ tst %i3\n\
++ st %i3, [%i1]\n\
++ st %i4, [%i1+4]\n\
++ bne 23b\n\
++ add %i1, 8, %i1\n\
++ /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */\n\
++3: sethi %hi(_dl_loaded), %o0\n\
++ add %sp, 23*4, %o2\n\
++ orcc %o0, %lo(_dl_loaded), %o0\n\
++ sll %i5, 2, %o3\n\
++ ld [%l7+%o0], %o0\n\
++ add %o3, 4, %o3\n\
++ mov %i5, %o1\n\
++ add %o2, %o3, %o3\n\
++ call _dl_init\n\
++ ld [%o0], %o0\n\
++ /* Pass our finalizer function to the user in %g1. */\n\
++ sethi %hi(_dl_fini), %g1\n\
++ or %g1, %lo(_dl_fini), %g1\n\
++ ld [%l7+%g1], %g1\n\
++ /* Jump to the user's entry point and deallocate the extra stack we got. */\n\
++ jmp %l0\n\
++ add %sp, 6*4, %sp\n\
++ .size _dl_start_user, . - _dl_start_user\n\
+ .previous");
+
+ static inline Elf32_Addr
diff --git a/patches/glibc/2.2.5/errlist-1.9.patch b/patches/glibc/2.2.5/errlist-1.9.patch
new file mode 100644
index 0000000..3bd7fc6
--- /dev/null
+++ b/patches/glibc/2.2.5/errlist-1.9.patch
@@ -0,0 +1,25 @@
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/Attic/errlist.c,v
+retrieving revision 1.8
+retrieving revision 1.9
+diff -u -r1.8 -r1.9
+--- libc/sysdeps/unix/sysv/linux/errlist.c 2001/07/06 04:56:12 1.8
++++ libc/sysdeps/unix/sysv/linux/errlist.c 2002/05/20 06:56:53 1.9
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1998, 2000 Free Software Foundation, Inc.
++/* Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -38,10 +38,9 @@
+ const int __old_sys_nerr = OLD_ERRLIST_SIZE;
+
+ strong_alias (__old_sys_nerr, _old_sys_nerr);
+-weak_alias (__old_sys_nerr, _old_sys_nerr)
+ compat_symbol (libc, __old_sys_nerr, _sys_nerr, GLIBC_2_0);
+ compat_symbol (libc, _old_sys_nerr, sys_nerr, GLIBC_2_0);
+-weak_alias (__old_sys_errlist, _old_sys_errlist);
++strong_alias (__old_sys_errlist, _old_sys_errlist);
+ compat_symbol (libc, __old_sys_errlist, _sys_errlist, GLIBC_2_0);
+ compat_symbol (libc, _old_sys_errlist, sys_errlist, GLIBC_2_0);
+ #endif
diff --git a/patches/glibc/2.2.5/errlist-arm.patch b/patches/glibc/2.2.5/errlist-arm.patch
new file mode 100644
index 0000000..ac4eb5b
--- /dev/null
+++ b/patches/glibc/2.2.5/errlist-arm.patch
@@ -0,0 +1,48 @@
+Subject: patch for arm
+From: Philip Blundell <Philip dot Blundell at pobox dot com>
+To: libc-hacker at sources dot redhat dot com
+Content-Type: text/plain
+Content-Transfer-Encoding: 7bit
+Date: 22 Jul 2002 20:12:06 +0100
+Message-Id: <1027365126.725.10.camel@kc>
+Mime-Version: 1.0
+
+The mainline seems to need this patch in order to compile.
+
+p.
+
+2002-07-22 Philip Blundell <philb@gnu.org>
+
+ * sysdeps/unix/sysv/linux/arm/errlist.c: Remove extra weak alias
+ definiton of _old_sys_nerr. Define _old_sys_errlist as strong
+ alias.
+
+Index: sysdeps/unix/sysv/linux/arm/errlist.c
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/arm/errlist.c,v
+retrieving revision 1.4
+diff -u -p -r1.4 errlist.c
+--- glibc/sysdeps/unix/sysv/linux/arm/errlist.c 6 Jul 2001 04:56:13 -0000 1.4
++++ glibc/sysdeps/unix/sysv/linux/arm/errlist.c 22 Jul 2002 19:10:57 -0000
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1998, 2000 Free Software Foundation, Inc.
++/* Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -38,10 +38,9 @@ extern const char *const *__old_sys_errl
+ const int __old_sys_nerr = OLD_ERRLIST_SIZE;
+
+ strong_alias (__old_sys_nerr, _old_sys_nerr);
+-weak_alias (__old_sys_nerr, _old_sys_nerr)
+ compat_symbol (libc, __old_sys_nerr, _sys_nerr, GLIBC_2_0);
+ compat_symbol (libc, _old_sys_nerr, sys_nerr, GLIBC_2_0);
+-weak_alias (__old_sys_errlist, _old_sys_errlist);
++strong_alias (__old_sys_errlist, _old_sys_errlist);
+ compat_symbol (libc, __old_sys_errlist, _sys_errlist, GLIBC_2_0);
+ compat_symbol (libc, _old_sys_errlist, sys_errlist, GLIBC_2_0);
+ #endif
+
+
+
+
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-3.4-fixup.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-3.4-fixup.patch
new file mode 100644
index 0000000..2ee7174
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-3.4-fixup.patch
@@ -0,0 +1,68 @@
+Fixes
+dl-runtime.c:56: error: conflicting types for 'fixup'
+../sysdeps/i386/dl-machine.h:158: error: previous declaration of 'fixup' was here
+when building with gcc-3.4.0
+
+First hunk:
+Define ARCH_FIXUP_ATTRIBUTE and use it in the fixup function declarations.
+http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/i386/dl-machine.h.diff?r1=1.124&r2=1.125&cvsroot=glibc
+[rediffed against glibc-2.2.5]
+
+Second hunk:
+If ARCH_FIXUP_ATTRIBUTE is not defined, provide dummy definition.
+Use macro in fixup function definitions.
+http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/elf/dl-runtime.c.diff?r1=1.64&r2=1.65&cvsroot=glibc
+[rediffed against glibc-2.3.2]
+
+===================================================================
+--- glibc-2.2.5/sysdeps/i386/dl-machine.h.old Sun Apr 11 11:53:23 2004
++++ glibc-2.2.5/sysdeps/i386/dl-machine.h Sun Apr 11 11:55:38 2004
+@@ -63,11 +63,12 @@
+ destroys the passed register information. */
+ /* GKM FIXME: Fix trampoline to pass bounds so we can do
+ without the `__unbounded' qualifier. */
++#define ARCH_FIXUP_ATTRIBUTE __attribute__ ((regparm (3), unused))
+ static ElfW(Addr) fixup (struct link_map *__unbounded l, ElfW(Word) reloc_offset)
+- __attribute__ ((regparm (2), unused));
++ ARCH_FIXUP_ATTRIBUTE;
+ static ElfW(Addr) profile_fixup (struct link_map *l, ElfW(Word) reloc_offset,
+ ElfW(Addr) retaddr)
+- __attribute__ ((regparm (3), unused));
++ ARCH_FIXUP_ATTRIBUTE;
+ #endif
+
+ /* Set up the loaded object described by L so its unrelocated PLT
+===================================================================
+--- /home/dank/downloads/glibc-2.3.2/elf/dl-runtime.c Fri Feb 7 11:41:12 2003
++++ glibc-2.3.2/elf/dl-runtime.c Thu Apr 8 22:24:26 2004
+@@ -36,6 +36,12 @@
+ # define VERSYMIDX(sym) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (sym))
+ #endif
+
++/* The fixup functions might have need special attributes. If none
++ are provided define the macro as empty. */
++#ifndef ARCH_FIXUP_ATTRIBUTE
++# define ARCH_FIXUP_ATTRIBUTE
++#endif
++
+
+ /* This function is called through a special trampoline from the PLT the
+ first time each PLT entry is called. We must perform the relocation
+@@ -45,7 +51,7 @@
+ function. */
+
+ #ifndef ELF_MACHINE_NO_PLT
+-static ElfW(Addr) __attribute_used__
++static ElfW(Addr) __attribute_used__ ARCH_FIXUP_ATTRIBUTE
+ fixup (
+ # ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS
+ ELF_MACHINE_RUNTIME_FIXUP_ARGS,
+@@ -132,7 +138,7 @@
+
+ #if !defined PROF && !defined ELF_MACHINE_NO_PLT && !__BOUNDED_POINTERS__
+
+-static ElfW(Addr) __attribute_used__
++static ElfW(Addr) __attribute_used__ ARCH_FIXUP_ATTRIBUTE
+ profile_fixup (
+ #ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS
+ ELF_MACHINE_RUNTIME_FIXUP_ARGS,
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-3.4-grp.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-3.4-grp.patch
new file mode 100644
index 0000000..5d609f9
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-3.4-grp.patch
@@ -0,0 +1,63 @@
+Fixes
+initgroups.c: In function `internal_getgrouplist':
+initgroups.c:179: error: parse error before "__FUNCTION__"
+
+CVSROOT: /cvs/glibc
+Module name: libc
+Changes by: roland@sources.redhat.com 2001-12-16 21:52:12
+
+Modified files:
+ nss : nsswitch.c
+ grp : initgroups.c
+
+Log message:
+ 2001-12-16 Roland McGrath <roland@frob.com>
+
+ * nss/nsswitch.c (__nss_next): Don't use __FUNCTION__ as literal.
+ * grp/initgroups.c (internal_getgrouplist): Likewise.
+
+http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/grp/initgroups.c.diff?r1=1.26&r2=1.27&cvsroot=glibc
+http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/nss/nsswitch.c.diff?r1=1.52&r2=1.53&cvsroot=glibc
+
+===================================================================
+RCS file: /cvs/glibc/libc/grp/initgroups.c,v
+retrieving revision 1.26
+retrieving revision 1.27
+diff -u -r1.26 -r1.27
+--- libc/grp/initgroups.c 2001/07/06 04:54:46 1.26
++++ libc/grp/initgroups.c 2001/12/17 05:52:11 1.27
+@@ -176,7 +176,7 @@
+
+ /* This is really only for debugging. */
+ if (NSS_STATUS_TRYAGAIN > status || status > NSS_STATUS_RETURN)
+- __libc_fatal ("illegal status in " __FUNCTION__);
++ __libc_fatal ("illegal status in internal_getgrouplist");
+
+ if (status != NSS_STATUS_SUCCESS
+ && nss_next_action (nip, status) == NSS_ACTION_RETURN)
+@@ -214,7 +214,7 @@
+ }
+ else
+ *ngroups = result;
+-
++
+ memcpy (groups, newgroups, *ngroups * sizeof (gid_t));
+
+ free (newgroups);
+
+===================================================================
+RCS file: /cvs/glibc/libc/nss/nsswitch.c,v
+retrieving revision 1.52
+retrieving revision 1.53
+diff -u -r1.52 -r1.53
+--- libc/nss/nsswitch.c 2001/07/17 08:21:36 1.52
++++ libc/nss/nsswitch.c 2001/12/17 05:52:11 1.53
+@@ -178,7 +178,7 @@
+ {
+ /* This is really only for debugging. */
+ if (NSS_STATUS_TRYAGAIN > status || status > NSS_STATUS_RETURN)
+- __libc_fatal ("illegal status in " __FUNCTION__);
++ __libc_fatal ("illegal status in __nss_next");
+
+ if (nss_next_action (*ni, status) == NSS_ACTION_RETURN)
+ return 1;
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-3.4-weakextern.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-3.4-weakextern.patch
new file mode 100644
index 0000000..31b7b67
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-3.4-weakextern.patch
@@ -0,0 +1,48 @@
+Suggested by Jake Page <jake at cs dot stanford dot edu>
+in http://sources.redhat.com/ml/crossgcc/2004-07/msg00169.html
+but the libc-symbols.h fragment has been reworked to fix typos
+and to still work on gcc-2.95.3, which lacks _Pragma.
+
+His comment was:
+ Fixes gcc-3.4 optimizing out comparisons to weak external symbols in code
+ like:
+ if (__pthread_mutex_init != NULL)
+ __pthread_mutex_init(...);
+ that causes segfaults during libc init when not linked to libpthread
+
+diff -uNr glibc-2.2.5-orig/resolv/res_libc.c glibc-2.2.5/resolv/res_libc.c
+--- glibc-2.2.5-orig/resolv/res_libc.c 2001-02-12 12:23:34.000000000 -0800
++++ glibc-2.2.5/resolv/res_libc.c 2004-07-27 22:56:32.000000000 -0700
+@@ -84,7 +84,8 @@
+
+ #if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2)
+ # undef res_init
+-strong_alias (__res_init, __res_init_weak);
++extern int __res_init_weak (void);
+ weak_extern (__res_init_weak);
++strong_alias (__res_init, __res_init_weak);
+ compat_symbol (libc, __res_init_weak, res_init, GLIBC_2_0);
+ #endif
+--- glibc-2.2.5/include/libc-symbols.h.old Fri Aug 13 04:20:55 2004
++++ glibc-2.2.5/include/libc-symbols.h Fri Aug 13 04:37:06 2004
+@@ -108,10 +108,16 @@
+
+ /* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined). */
+ # define weak_extern(symbol) _weak_extern (symbol)
+-# ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
+-# define _weak_extern(symbol) asm (".weakext " __SYMBOL_PREFIX #symbol);
+-# else
+-# define _weak_extern(symbol) asm (".weak " __SYMBOL_PREFIX #symbol);
++# if __GNUC__ >= 3
++ /* see http://sources.redhat.com/ml/libc-alpha/2003-01/msg00043.html */
++# define __weak_extern_1(expr) _Pragma(#expr)
++# define _weak_extern(symbol) __weak_extern_1(weak symbol)
++# else /* __GNUC__ == 2 */
++# ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
++# define _weak_extern(symbol) asm (".weakext " __SYMBOL_PREFIX #symbol);
++# else
++# define _weak_extern(symbol) asm (".weak " __SYMBOL_PREFIX #symbol);
++# endif
+ # endif
+
+ # else
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-configure.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-configure.patch
new file mode 100644
index 0000000..effd636
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-configure.patch
@@ -0,0 +1,21 @@
+Fixes
+checking version of powerpc-405-linux-gnu-gcc ... 4.0.0, bad
+checking for gnumake... no
+checking for gmake... no
+checking for make... make
+checking version of make... 3.80, ok
+configure: error:
+*** These critical programs are missing or too old:gcc
+
+
+--- glibc-2.2.5/configure.old 2005-03-10 00:23:46.374213600 -0800
++++ glibc-2.2.5/configure 2005-03-10 00:25:13.313996744 -0800
+@@ -1476,7 +1476,7 @@
+ ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- *gcc-2.9[5-9].*|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|2.9[5-9]*|3.[0-9]*|cygnus-2.9[1-9]*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]|sgicc-*)
++ *gcc-2.9[5-9].*|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|2.9[5-9]*|3.[0-9]*|4.0*|cygnus-2.9[1-9]*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]|sgicc-*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-elf-2.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-elf-2.patch
new file mode 100644
index 0000000..0428c87
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-elf-2.patch
@@ -0,0 +1,43 @@
+Fixes
+dynamic-link.h:38: error: invalid storage class for function 'elf_get_dynamic_info'
+kinda like http://sourceware.org/cgi-bin/cvsweb.cgi/libc/elf/dynamic-link.h.diff?r1=1.50&r2=1.51&cvsroot=glibc does
+and fixes
+In file included from dynamic-link.h:218,
+ from dl-reloc.c:153:
+do-rel.h:46: error: invalid storage class for function 'elf_dynamic_do_rel'
+
+--- /home/dank/downloads/glibc-2.2.5/elf/dynamic-link.h 2001-07-05 21:54:46.000000000 -0700
++++ glibc-2.2.5/elf/dynamic-link.h 2005-03-11 14:18:34.542858064 -0800
+@@ -33,7 +33,16 @@
+
+ /* Read the dynamic section at DYN and fill in INFO with indices DT_*. */
+
++#if __GNUC__ >= 4
++#ifndef RESOLVE_MAP
++static
++#else
++auto
++#endif
++inline void __attribute__ ((unused, always_inline))
++#else
+ static inline void __attribute__ ((unused))
++#endif
+ elf_get_dynamic_info (struct link_map *l)
+ {
+ ElfW(Dyn) *dyn = l->l_ld;
+
+--- /home/dank/downloads/glibc-2.2.5/elf/do-rel.h 2001-08-24 11:45:23.000000000 -0700
++++ glibc-2.2.5/elf/do-rel.h 2005-03-11 14:26:43.538519424 -0800
+@@ -39,7 +39,12 @@
+ relocations; they should be set up to call _dl_runtime_resolve, rather
+ than fully resolved now. */
+
++#if __GNUC__ >= 4
++auto inline void
++__attribute ((always_inline))
++#else
+ static inline void
++#endif
+ elf_dynamic_do_rel (struct link_map *map,
+ ElfW(Addr) reladdr, ElfW(Addr) relsize,
+ int lazy)
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-elf.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-elf.patch
new file mode 100644
index 0000000..2a8c3a9
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-elf.patch
@@ -0,0 +1,39 @@
+Fixes
+
+dl-load.c: In function '_dl_map_object_from_fd':
+dl-load.c:1089: error: invalid lvalue in assignment
+dl-load.c:1109: error: invalid lvalue in assignment
+make[2]: *** [/home/dank/queue/jobdir.fast2/crosstool-dev/build/i686-unknown-linux-gnu/gcc-4.0-20050305-glibc-2.2.5/build-glibc/elf/dl-load.o] Error 1
+
+http://sourceware.org/cgi-bin/cvsweb.cgi/libc/elf/dl-load.c.diff?r1=1.235&r2=1.236&cvsroot=glibc
+rediffed against glibc-2.2.5
+
+Revision 1.236, Sat Feb 21 18:25:41 2004 UTC by aj
+Branch: MAIN
+Changes since 1.235: +2 -2 lines
+Diff to previous 1.235 (colored)
+
+(_dl_map_object_from_fd): Fix casts used as lvalue.
+
+
+diff -ur glibc-2.2.5/elf/dl-load.c glibc-2.2.5-patched/elf/dl-load.c
+--- glibc-2.2.5/elf/dl-load.c 2001-11-10 14:43:10.000000000 -0800
++++ glibc-2.2.5-patched/elf/dl-load.c 2005-03-11 13:48:18.211982328 -0800
+@@ -1086,7 +1086,7 @@
+ }
+ else
+ /* Adjust the PT_PHDR value by the runtime load address. */
+- (ElfW(Addr)) l->l_phdr += l->l_addr;
++ l->l_phdr = (ElfW(Phdr) *) ((ElfW(Addr)) l->l_phdr + l->l_addr);
+ }
+
+ /* We are done mapping in the file. We no longer need the descriptor. */
+@@ -1106,7 +1106,7 @@
+ }
+ }
+ else
+- (ElfW(Addr)) l->l_ld += l->l_addr;
++ l->l_ld = (ElfW(Dyn) *) ((ElfW(Addr)) l->l_ld + l->l_addr);
+
+ l->l_entry += l->l_addr;
+
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-gconv.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-gconv.patch
new file mode 100644
index 0000000..54c349e
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-gconv.patch
@@ -0,0 +1,226 @@
+Fixes
+gconv_open.c: In function `__gconv_open':
+gconv_open.c:186: error: invalid lvalue in assignment
+when building glibc-2.2.5 with gcc-4.0.
+Same as ../glibc-2.3.2/glibc-2.3.2-allow-gcc-3.5-gconv.patch
+but rediffed against glibc-2.2.5.
+
+wget 'http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/iconv/gconv_simple.c.diff?r1=1.59&r2=1.63&cvsroot=glibc'
+ * (internal_ucs4_loop): Fix typo in last change.
+
+ * (internal_ucs4le_loop): Remove cast used as lvalue.
+
+ * Fix last commit.
+
+ * iconv/gconv_simple.c (ucs4le_internal_loop): Remove cast used as lvalue.
+ (internal_ucs4le_loop_single): Likewise.
+ (ucs4_internal_loop): Likewise.
+ (BODY): Likewise.
+ (internal_ucs4_loop_single): Likewise.
+
+wget 'http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/iconv/gconv_open.c.diff?r1=1.32&r2=1.33&cvsroot=glibc'
+ * iconv/gconv_simple.c (ucs4le_internal_loop): Remove cast used as lvalue.
+ (internal_ucs4le_loop_single): Likewise.
+ (ucs4_internal_loop): Likewise.
+ (BODY): Likewise.
+ (internal_ucs4_loop_single): Likewise.
+
+
+===================================================================
+RCS file: /cvs/glibc/libc/iconv/gconv_open.c,v
+retrieving revision 1.32
+retrieving revision 1.33
+diff -u -r1.32 -r1.33
+--- libc/iconv/gconv_open.c 2001/11/29 04:51:58 1.32
++++ libc/iconv/gconv_open.c 2004/02/07 15:56:32 1.33
+@@ -1,5 +1,5 @@
+ /* Find matching transformation algorithms and initialize steps.
+- Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
++ Copyright (C) 1997, 1998, 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+@@ -182,8 +182,13 @@
+ || __builtin_expect (__gconv_translit_find (runp), 0) == 0)
+ lastp = runp;
+ else
+- /* This means we haven't found the module. Remove it. */
+- (lastp == NULL ? trans : lastp->next) = runp->next;
++ {
++ /* This means we haven't found the module. Remove it. */
++ if (lastp == NULL)
++ trans = runp->next;
++ else
++ lastp->next = runp->next;
++ }
+ }
+
+ /* Allocate room for handle. */
+===================================================================
+--- glibc-2.2.5/iconv/gconv_simple.c.old 2001-08-03 15:06:46.000000000 -0700
++++ glibc-2.2.5/iconv/gconv_simple.c 2005-03-10 00:49:45.558181608 -0800
+@@ -1,5 +1,5 @@
+ /* Simple transformations functions.
+- Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
++ Copyright (C) 1997, 1998, 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+@@ -73,12 +73,13 @@
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
+ /* Sigh, we have to do some real work. */
+ size_t cnt;
++ uint32_t *outptr32 = (uint32_t *) outptr;
+
+ for (cnt = 0; cnt < n_convert; ++cnt, inptr += 4)
+- *((uint32_t *) outptr)++ = bswap_32 (*(const uint32_t *) inptr);
++ *outptr32++ = bswap_32 (*(const uint32_t *) inptr);
+
+ *inptrp = inptr;
+- *outptrp = outptr;
++ *outptrp = (unsigned char *) outptr32;
+ #elif __BYTE_ORDER == __BIG_ENDIAN
+ /* Simply copy the data. */
+ *inptrp = inptr + n_convert * 4;
+@@ -176,13 +177,16 @@
+ (*outptrp)[2] = state->__value.__wchb[1];
+ (*outptrp)[3] = state->__value.__wchb[0];
+
+- *outptrp += 4;
+ #elif __BYTE_ORDER == __BIG_ENDIAN
+ /* XXX unaligned */
+- *(*((uint32_t **) outptrp)++) = state->__value.__wch;
++ (*outptrp)[0] = state->__value.__wchb[0];
++ (*outptrp)[1] = state->__value.__wchb[1];
++ (*outptrp)[2] = state->__value.__wchb[2];
++ (*outptrp)[3] = state->__value.__wchb[3];
+ #else
+ # error "This endianess is not supported."
+ #endif
++ *outptrp += 4;
+
+ /* Clear the state buffer. */
+ state->__count &= ~7;
+@@ -251,7 +255,8 @@
+ return __GCONV_ILLEGAL_INPUT;
+ }
+
+- *((uint32_t *) outptr)++ = inval;
++ *((uint32_t *) outptr) = inval;
++ outptr += sizeof (uint32_t);
+ }
+
+ *inptrp = inptr;
+@@ -427,9 +432,11 @@
+ #if __BYTE_ORDER == __BIG_ENDIAN
+ /* Sigh, we have to do some real work. */
+ size_t cnt;
++ uint32_t *outptr32 = (uint32_t *) outptr;
+
+ for (cnt = 0; cnt < n_convert; ++cnt, inptr += 4)
+- *((uint32_t *) outptr)++ = bswap_32 (*(const uint32_t *) inptr);
++ *outptr32++ = bswap_32 (*(const uint32_t *) inptr);
++ outptr = (unsigned char *) outptr32;
+
+ *inptrp = inptr;
+ *outptrp = outptr;
+@@ -530,12 +537,17 @@
+ (*outptrp)[2] = state->__value.__wchb[1];
+ (*outptrp)[3] = state->__value.__wchb[0];
+
+- *outptrp += 4;
+ #else
+ /* XXX unaligned */
+- *(*((uint32_t **) outptrp)++) = state->__value.__wch;
++ (*outptrp)[0] = state->__value.__wchb[0];
++ (*outptrp)[1] = state->__value.__wchb[1];
++ (*outptrp)[2] = state->__value.__wchb[2];
++ (*outptrp)[3] = state->__value.__wchb[3];
++
+ #endif
+
++ *outptrp += 4;
++
+ /* Clear the state buffer. */
+ state->__count &= ~7;
+
+@@ -600,7 +612,8 @@
+ return __GCONV_ILLEGAL_INPUT;
+ }
+
+- *((uint32_t *) outptr)++ = inval;
++ *((uint32_t *) outptr) = inval;
++ outptr += sizeof (uint32_t);
+ }
+
+ *inptrp = inptr;
+@@ -782,7 +795,8 @@
+ } \
+ else \
+ /* It's an one byte sequence. */ \
+- *((uint32_t *) outptr)++ = *inptr++; \
++ *((uint32_t *) outptr) = *inptr++; \
++ outptr += sizeof (uint32_t); \
+ }
+ #define LOOP_NEED_FLAGS
+ #include <iconv/loop.c>
+@@ -812,7 +826,8 @@
+ } \
+ else \
+ /* It's an one byte sequence. */ \
+- *outptr++ = *((const uint32_t *) inptr)++; \
++ *outptr++ = *((const uint32_t *) inptr); \
++ inptr += sizeof (uint32_t); \
+ }
+ #define LOOP_NEED_FLAGS
+ #include <iconv/loop.c>
+@@ -1031,7 +1046,8 @@
+ } \
+ \
+ /* Now adjust the pointers and store the result. */ \
+- *((uint32_t *) outptr)++ = ch; \
++ *((uint32_t *) outptr) = ch; \
++ outptr += sizeof (uint32_t); \
+ }
+ #define LOOP_NEED_FLAGS
+
+@@ -1174,7 +1190,8 @@
+ continue; \
+ } \
+ \
+- *((uint32_t *) outptr)++ = u1; \
++ *((uint32_t *) outptr) = u1; \
++ outptr += sizeof (uint32_t); \
+ inptr += 2; \
+ }
+ #define LOOP_NEED_FLAGS
+@@ -1224,7 +1241,8 @@
+ } \
+ else \
+ { \
+- *((uint16_t *) outptr)++ = val; \
++ *((uint16_t *) outptr) = val; \
++ outptr += sizeof (uint16_t); \
+ inptr += 4; \
+ } \
+ }
+@@ -1265,7 +1283,8 @@
+ continue; \
+ } \
+ \
+- *((uint32_t *) outptr)++ = u1; \
++ *((uint32_t *) outptr) = u1; \
++ outptr += sizeof (uint32_t); \
+ inptr += 2; \
+ }
+ #define LOOP_NEED_FLAGS
+@@ -1314,7 +1333,8 @@
+ } \
+ else \
+ { \
+- *((uint16_t *) outptr)++ = bswap_16 (val); \
++ *((uint16_t *) outptr) = bswap_16 (val); \
++ outptr += sizeof (uint16_t); \
+ inptr += 4; \
+ } \
+ }
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-i386.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-i386.patch
new file mode 100644
index 0000000..f13a892
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-i386.patch
@@ -0,0 +1,49 @@
+Fixes
+../sysdeps/i386/dl-machine.h: In function '_dl_relocate_object':
+../sysdeps/i386/dl-machine.h:306: error: invalid storage class for function 'elf_machine_rel'
+../sysdeps/i386/dl-machine.h:385: error: invalid storage class for function 'elf_machine_rel_relative'
+../sysdeps/i386/dl-machine.h:393: error: invalid storage class for function 'elf_machine_lazy_rel'
+
+when building glibc-2.2.5 with gcc-4.0.
+
+--- /home/dank/downloads/glibc-2.2.5/sysdeps/i386/dl-machine.h 2001-08-30 16:09:10.000000000 -0700
++++ glibc-2.2.5/sysdeps/i386/dl-machine.h 2005-03-11 14:00:22.601858328 -0800
+@@ -298,7 +299,12 @@
+ /* Perform the relocation specified by RELOC and SYM (which is fully resolved).
+ MAP is the object containing the reloc. */
+
++#if __GNUC__ >= 4
++auto inline void
++__attribute ((always_inline))
++#else
+ static inline void
++#endif
+ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
+ const Elf32_Sym *sym, const struct r_found_version *version,
+ Elf32_Addr *const reloc_addr)
+@@ -378,7 +384,12 @@
+ }
+ }
+
++#if __GNUC__ >= 4
++auto inline void
++__attribute ((always_inline))
++#else
+ static inline void
++#endif
+ elf_machine_rel_relative (Elf32_Addr l_addr, const Elf32_Rel *reloc,
+ Elf32_Addr *const reloc_addr)
+ {
+@@ -386,7 +397,12 @@
+ *reloc_addr += l_addr;
+ }
+
++#if __GNUC__ >= 4
++auto inline void
++__attribute ((always_inline))
++#else
+ static inline void
++#endif
+ elf_machine_lazy_rel (struct link_map *map,
+ Elf32_Addr l_addr, const Elf32_Rel *reloc)
+ {
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-iconv.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-iconv.patch
new file mode 100644
index 0000000..f7cfa58
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-iconv.patch
@@ -0,0 +1,20 @@
+Fixes
+iconvconfig.c: In function 'write_output':
+iconvconfig.c:973: error: invalid storage class for function 'name_insert'
+
+--- glibc-2.2.5/iconv/iconvconfig.c.old 2002-01-20 19:20:53.000000000 -0800
++++ glibc-2.2.5/iconv/iconvconfig.c 2005-03-11 14:30:27.000000000 -0800
+@@ -969,7 +969,12 @@
+ char tmpfname[sizeof (GCONV_MODULES_CACHE) + strlen (".XXXXXX")];
+
+ /* Function to insert the names. */
+- static void name_insert (const void *nodep, VISIT value, int level)
++#if __GNUC__ >= 4
++ auto
++#else
++ static
++#endif
++ void name_insert (const void *nodep, VISIT value, int level)
+ {
+ struct name *name;
+ unsigned int idx;
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-iconvdata.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-iconvdata.patch
new file mode 100644
index 0000000..5019031
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-iconvdata.patch
@@ -0,0 +1,114 @@
+Fixes
+
+In file included from jis0208.c:23:
+jis0208.h:32: error: array type has incomplete element type
+when building with gcc-4.0
+
+In file included from cp1258.c:869:
+../iconv/skeleton.c: In function 'gconv':
+../iconv/skeleton.c:323: error: invalid lvalue in increment
+
+In file included from cp1255.c:550:
+../iconv/skeleton.c: In function 'gconv':
+../iconv/skeleton.c:323: error: invalid lvalue in increment
+
+In file included from gb18030.c:22114:
+../iconv/loop.c: In function 'from_gb18030':
+../iconv/loop.c:282: error: invalid lvalue in increment
+../iconv/loop.c: In function 'from_gb18030_single':
+../iconv/loop.c:384: error: invalid lvalue in increment
+
+--- /home/dank/downloads/glibc-2.2.5/iconvdata/iso8859-1.c 2001-08-03 15:06:50.000000000 -0700
++++ glibc-2.2.5/iconvdata/iso8859-1.c 2005-03-11 15:09:15.233602808 -0800
+@@ -35,7 +35,8 @@
+ #define MIN_NEEDED_OUTPUT MIN_NEEDED_TO
+ #define LOOPFCT FROM_LOOP
+ #define BODY \
+- *((uint32_t *) outptr)++ = *inptr++;
++ *((uint32_t *) outptr) = *inptr++; \
++ outptr += sizeof (uint32_t);
+ #include <iconv/loop.c>
+
+
+--- /home/dank/downloads/glibc-2.2.5/iconvdata/jis0208.h 2001-07-05 21:54:52.000000000 -0700
++++ glibc-2.2.5/iconvdata/jis0208.h 2005-03-11 15:27:23.295192304 -0800
+@@ -24,15 +24,6 @@
+ #include <gconv.h>
+ #include <stdint.h>
+
+-/* Conversion table. */
+-extern const uint16_t __jis0208_to_ucs[];
+-
+-extern const char __jisx0208_from_ucs4_lat1[256][2];
+-extern const char __jisx0208_from_ucs4_greek[0xc1][2];
+-extern const struct jisx0208_ucs_idx __jisx0208_from_ucs_idx[];
+-extern const char __jisx0208_from_ucs_tab[][2];
+-
+-
+ /* Struct for table with indeces in UCS mapping table. */
+ struct jisx0208_ucs_idx
+ {
+@@ -42,6 +33,15 @@
+ };
+
+
++/* Conversion table. */
++extern const uint16_t __jis0208_to_ucs[];
++
++extern const char __jisx0208_from_ucs4_lat1[256][2];
++extern const char __jisx0208_from_ucs4_greek[0xc1][2];
++extern const struct jisx0208_ucs_idx __jisx0208_from_ucs_idx[];
++extern const char __jisx0208_from_ucs_tab[][2];
++
++
+ static inline uint32_t
+ jisx0208_to_ucs4 (const unsigned char **s, size_t avail, unsigned char offset)
+ {
+--- /home/dank/downloads/glibc-2.2.5/iconvdata/cp1258.c 2001-07-05 21:54:49.000000000 -0700
++++ glibc-2.2.5/iconvdata/cp1258.c 2005-03-11 15:41:44.953200376 -0800
+@@ -66,7 +66,8 @@
+ if (__builtin_expect (outbuf + 4 <= outend, 1)) \
+ { \
+ /* Write out the last character. */ \
+- *((uint32_t *) outbuf)++ = data->__statep->__count >> 3; \
++ *((uint32_t *) outbuf) = data->__statep->__count >> 3; \
++ outbuf += sizeof (uint32_t); \
+ data->__statep->__count = 0; \
+ } \
+ else \
+--- /home/dank/downloads/glibc-2.2.5/iconvdata/cp1255.c 2001-07-05 21:54:49.000000000 -0700
++++ glibc-2.2.5/iconvdata/cp1255.c 2005-03-11 15:47:40.689120296 -0800
+@@ -65,7 +65,8 @@
+ if (__builtin_expect (outbuf + 4 <= outend, 1)) \
+ { \
+ /* Write out the last character. */ \
+- *((uint32_t *) outbuf)++ = data->__statep->__count >> 3; \
++ *((uint32_t *) outbuf) = data->__statep->__count >> 3; \
++ outbuf += sizeof (uint32_t); \
+ data->__statep->__count = 0; \
+ } \
+ else \
+--- /home/dank/downloads/glibc-2.2.5/iconvdata/gb18030.c 2001-08-03 15:06:47.000000000 -0700
++++ glibc-2.2.5/iconvdata/gb18030.c 2005-03-11 15:54:59.060477720 -0800
+@@ -22108,7 +22108,8 @@
+ } \
+ } \
+ \
+- *((uint32_t *) outptr)++ = ch; \
++ *((uint32_t *) outptr) = ch; \
++ outptr += sizeof (uint32_t); \
+ }
+ #define LOOP_NEED_FLAGS
+ #include <iconv/loop.c>
+--- /home/dank/downloads/glibc-2.2.5/iconvdata/iso-2022-cn-ext.c 2001-07-05 21:54:51.000000000 -0700
++++ glibc-2.2.5/iconvdata/iso-2022-cn-ext.c 2005-03-11 15:55:42.002949472 -0800
+@@ -411,7 +411,8 @@
+ } \
+ } \
+ \
+- *((uint32_t *) outptr)++ = ch; \
++ *((uint32_t *) outptr) = ch; \
++ outptr += sizeof (uint32_t); \
+ }
+ #define EXTRA_LOOP_DECLS , int *setp
+ #define INIT_PARAMS int set = (*setp >> 3) & CURRENT_MASK; \
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-locale.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-locale.patch
new file mode 100644
index 0000000..fa4b5b7
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-locale.patch
@@ -0,0 +1,49 @@
+Fixes
+
+In file included from strcoll.c:101:
+../locale/weight.h: In function 'strcoll':
+../locale/weight.h:23: error: invalid storage class for function 'findidx'
+make[2]: *** [/home/dank/queue/jobdir.fast2/crosstool-dev/build/i686-unknown-linux-gnu/gcc-4.0-20050305-glibc-2.2.5/build-glibc/string/strcoll.o] Error 1
+make[2]: Leaving directory `/home/dank/queue/jobdir.fast2/crosstool-dev/build/i686-unknown-linux-gnu/gcc-4.0-20050305-glibc-2.2.5/glibc-2.2.5/string'
+make[1]: *** [string/subdir_lib] Error 2
+make[1]: Leaving directory `/home/dank/queue/jobdir.fast2/crosstool-dev/build/i686-unknown-linux-gnu/gcc-4.0-20050305-glibc-2.2.5/glibc-2.2.5'
+make: *** [all] Error 2
+
+Discussed here
+http://sources.redhat.com/ml/libc-hacker/2004-09/msg00015.html
+the fix checked in to cvs seems to be
+http://sources.redhat.com/ml/glibc-cvs/2004-q3/msg01071.html
+but that fix doesn't support older gcc's, so I can't use it directly.
+
+Here's a fix the does work with older versions of gcc:
+
+--- glibc-2.2.5/locale/weight.h.old 2001-07-05 21:55:33.000000000 -0700
++++ glibc-2.2.5/locale/weight.h 2005-03-10 16:07:46.669579888 -0800
+@@ -18,7 +18,12 @@
+ 02111-1307 USA. */
+
+ /* Find index of weight. */
++#if __GNUC__ >= 4
++auto inline int32_t
++__attribute ((always_inline))
++#else
+ static inline int32_t
++#endif
+ findidx (const unsigned char **cpp)
+ {
+ int_fast32_t i = table[*(*cpp)++];
+--- glibc-2.2.5/locale/weightwc.h.old 2001-08-06 21:26:15.000000000 -0700
++++ glibc-2.2.5/locale/weightwc.h 2005-03-10 16:13:08.651631176 -0800
+@@ -18,7 +18,12 @@
+ 02111-1307 USA. */
+
+ /* Find index of weight. */
++#if __GNUC__ >= 4
++auto inline int32_t
++__attribute ((always_inline))
++#else
+ static inline int32_t
++#endif
+ findidx (const wint_t **cpp)
+ {
+ int32_t i;
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-malloc.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-malloc.patch
new file mode 100644
index 0000000..2d9f092
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-malloc.patch
@@ -0,0 +1,48 @@
+Fixes
+programs/ld-collate.c: In function 'obstack_int32_grow':
+programs/ld-collate.c:48: error: invalid lvalue in increment
+programs/ld-collate.c: In function 'obstack_int32_grow_fast':
+programs/ld-collate.c:57: error: invalid lvalue in increment
+
+Change taken by eyeball from version 1.20 at
+http://sourceware.org/cgi-bin/cvsweb.cgi/libc/malloc/obstack.h?cvsroot=glibc
+
+--- /home/dank/downloads/glibc-2.2.5/malloc/obstack.h 2001-07-05 21:55:35.000000000 -0700
++++ glibc-2.2.5/malloc/obstack.h 2005-03-11 16:12:16.175812224 -0800
+@@ -423,22 +423,29 @@
+ ({ struct obstack *__o = (OBSTACK); \
+ if (__o->next_free + sizeof (void *) > __o->chunk_limit) \
+ _obstack_newchunk (__o, sizeof (void *)); \
+- *((void **)__o->next_free)++ = (datum); \
+- (void) 0; })
++ obstack_ptr_grow_fast (__o, datum); })
+
+ # define obstack_int_grow(OBSTACK,datum) \
+ __extension__ \
+ ({ struct obstack *__o = (OBSTACK); \
+ if (__o->next_free + sizeof (int) > __o->chunk_limit) \
+ _obstack_newchunk (__o, sizeof (int)); \
+- *((int *)__o->next_free)++ = (datum); \
++ obstack_int_grow_fast (__o, datum); })
++
++# define obstack_ptr_grow_fast(OBSTACK,aptr) \
++__extension__ \
++({ struct obstack *__o1 = (OBSTACK); \
++ *(const void **) __o1->next_free = (aptr); \
++ __o1->next_free += sizeof (const void *); \
+ (void) 0; })
+
+-# define obstack_ptr_grow_fast(h,aptr) \
+- (*((void **) (h)->next_free)++ = (aptr))
++# define obstack_int_grow_fast(OBSTACK,aint) \
++__extension__ \
++({ struct obstack *__o1 = (OBSTACK); \
++ *(int *) __o1->next_free = (aint); \
++ __o1->next_free += sizeof (int); \
++ (void) 0; })
+
+-# define obstack_int_grow_fast(h,aint) \
+- (*((int *) (h)->next_free)++ = (aint))
+
+ # define obstack_blank(OBSTACK,length) \
+ __extension__ \
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-mipsel.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-mipsel.patch
new file mode 100644
index 0000000..1b4f445
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-mipsel.patch
@@ -0,0 +1,81 @@
+Message-ID: <424A8F67.7060307@kaear.co.uk>
+Date: Wed, 30 Mar 2005 12:37:11 +0100
+From: Piete Sartain <kaear@kaear.co.uk>
+To: crossgcc@sources.redhat.com
+Subject: [Patch] CT 0.3 - glibc-2.2.5-allow-gcc-4.0-mipsel
+
+
+I copied the relevant sections out of
+http://kegel.com/crosstool/crosstool-0.29/patches/glibc-2.3-20050307/glibc-2.3.4-allow-gcc-4.0-powerpc64.patch
+for a mipsel target.
+
+The build still fails, but now with an assembler error at crtbegin.o.
+
+[---dank: judging from my old buildlogs, this should fix:
+
+In file included from dynamic-link.h:21,
+ from dl-reloc.c:153:
+../sysdeps/mips/dl-machine.h: In function '_dl_relocate_object':
+../sysdeps/mips/dl-machine.h:477: error: invalid storage class for function 'elf_machine_rel'
+../sysdeps/mips/dl-machine.h:539: error: invalid storage class for function 'elf_machine_rel_relative'
+../sysdeps/mips/dl-machine.h:546: error: invalid storage class for function 'elf_machine_lazy_rel'
+../sysdeps/mips/dl-machine.h:554: error: invalid storage class for function 'elf_machine_got_rel'
+../sysdeps/mips/dl-machine.h:641: error: invalid storage class for function 'elf_machine_runtime_setup'
+make[2]: Leaving directory `/home/dank/queue/jobdir.fast2/crosstool-0.30/build/mipsel-unknown-linux-gnu/gcc-4.0-20050305-glibc-2.2.5/glibc-2.2.5/elf'
+make[2]: *** [/home/dank/queue/jobdir.fast2/crosstool-0.30/build/mipsel-unknown-linux-gnu/gcc-4.0-20050305-glibc-2.2.5/build-glibc/elf/dl-reloc.o] Error 1
+make[1]: *** [elf/subdir_lib] Error 2
+make[1]: Leaving directory `/home/dank/queue/jobdir.fast2/crosstool-0.30/build/mipsel-unknown-linux-gnu/gcc-4.0-20050305-glibc-2.2.5/glibc-2.2.5'
+make: *** [all] Error 2
+---]
+
+
+--- glibc-2.2.5/sysdeps/mips/dl-machine.h.old 2005-03-28 18:19:56.000000000 +0100
++++ glibc-2.2.5/sysdeps/mips/dl-machine.h 2005-03-28 18:25:15.000000000 +0100
+@@ -534,14 +534,28 @@
+ }
+ }
+
+-static inline void
++#if __GNUC__ >= 4
++ auto inline void
++#else
++ static inline void
++#endif
++#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
++ __attribute ((always_inline))
++#endif
+ elf_machine_rel_relative (ElfW(Addr) l_addr, const ElfW(Rel) *reloc,
+ ElfW(Addr) *const reloc_addr)
+ {
+ /* XXX Nothing to do. There is no relative relocation, right? */
+ }
+
+-static inline void
++#if __GNUC__ >= 4
++ auto inline void
++#else
++ static inline void
++#endif
++#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
++ __attribute ((always_inline))
++#endif
+ elf_machine_lazy_rel (struct link_map *map,
+ ElfW(Addr) l_addr, const ElfW(Rel) *reloc)
+ {
+@@ -550,7 +564,14 @@
+
+ #ifndef RTLD_BOOTSTRAP
+ /* Relocate GOT. */
+-static inline void
++#if __GNUC__ >= 4
++ auto inline void
++#else
++ static inline void
++#endif
++#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
++ __attribute ((always_inline))
++#endif
+ elf_machine_got_rel (struct link_map *map, int lazy)
+ {
+ ElfW(Addr) *got;
+
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-msort.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-msort.patch
new file mode 100644
index 0000000..171d2e4
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-msort.patch
@@ -0,0 +1,47 @@
+Fixes
+
+msort.c: In function 'msort_with_tmp':
+msort.c:59: error: invalid lvalue in increment
+msort.c:59: error: invalid lvalue in increment
+msort.c:64: error: invalid lvalue in increment
+msort.c:64: error: invalid lvalue in increment
+make[2]: *** [/home/dank/queue/jobdir.fast2/crosstool-dev/build/i686-unknown-linux-gnu/gcc-4.0-20050305-glibc-2.2.5/build-glibc/stdlib/msort.o] Error 1
+make[2]: Leaving directory `/home/dank/queue/jobdir.fast2/crosstool-dev/build/i686-unknown-linux-gnu/gcc-4.0-20050305-glibc-2.2.5/glibc-2.2.5/stdlib'
+make[1]: *** [stdlib/subdir_lib] Error 2
+make[1]: Leaving directory `/home/dank/queue/jobdir.fast2/crosstool-dev/build/i686-unknown-linux-gnu/gcc-4.0-20050305-glibc-2.2.5/glibc-2.2.5'
+make: *** [all] Error 2
+
+when building glibc-2.2.5 with gcc-3.4.
+
+Taken from ../glibc-2.3.2/glibc-2.3.2-allow-gcc-3.5-msort.patch
+and rediffed.
+
+--- glibc-2.2.5/stdlib/msort.c.old 2001-07-05 21:55:41.000000000 -0700
++++ glibc-2.2.5/stdlib/msort.c 2005-03-10 08:24:24.152204976 -0800
+@@ -1,6 +1,6 @@
+ /* An alternative to qsort, with an identical interface.
+ This file is part of the GNU C Library.
+- Copyright (C) 1992, 1995-1997, 1999, 2000, 2001 Free Software Foundation, Inc.
++ Copyright (C) 1992, 1995-1997, 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
+ Written by Mike Haertel, September 1988.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -56,12 +56,16 @@
+ if ((*cmp) (b1, b2) <= 0)
+ {
+ --n1;
+- *((op_t *) tmp)++ = *((op_t *) b1)++;
++ *((op_t *) tmp) = *((op_t *) b1);
++ tmp += sizeof (op_t);
++ b1 += sizeof (op_t);
+ }
+ else
+ {
+ --n2;
+- *((op_t *) tmp)++ = *((op_t *) b2)++;
++ *((op_t *) tmp) = *((op_t *) b2);
++ tmp += sizeof (op_t);
++ b2 += sizeof (op_t);
+ }
+ }
+ else
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-powerpc-procfs.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-powerpc-procfs.patch
new file mode 100644
index 0000000..fb1a0c9
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-powerpc-procfs.patch
@@ -0,0 +1,54 @@
+(See similar patch for glibc-2.3.3)
+
+This fix discussed here:
+http://gcc.gnu.org/ml/gcc/2005-01/msg00509.html
+
+Fixes
+
+In file included from ../linuxthreads_db/proc_service.h:20,
+ from ../linuxthreads_db/thread_dbP.h:6,
+ from internals.h:36,
+ from attr.c:23:
+../sysdeps/unix/sysv/linux/powerpc/sys/procfs.h:53: error: syntax error before 'elf_vrreg_t'
+../sysdeps/unix/sysv/linux/powerpc/sys/procfs.h:53: warning: type defaults to 'int' in declaration of 'elf_vrreg_t'
+../sysdeps/unix/sysv/linux/powerpc/sys/procfs.h:53: warning: data definition has no type or storage class
+../sysdeps/unix/sysv/linux/powerpc/sys/procfs.h:54: error: syntax error before 'elf_vrregset_t'
+../sysdeps/unix/sysv/linux/powerpc/sys/procfs.h:54: warning: type defaults to 'int' in declaration of 'elf_vrregset_t'
+../sysdeps/unix/sysv/linux/powerpc/sys/procfs.h:54: warning: data definition has no type or storage class
+make[2]: Leaving directory `/home/dank/queue/jobdir.fast2/crosstool-0.30/build/powerpc-405-linux-gnu/gcc-4.0-20050305-glibc-2.2.5/glibc-2.2.5/linuxthreads'
+make[2]: *** [/home/dank/queue/jobdir.fast2/crosstool-0.30/build/powerpc-405-linux-gnu/gcc-4.0-20050305-glibc-2.2.5/build-glibc/linuxthreads/attr.o] Error 1
+
+From: Martin Egholm Nielsen martin at egholm-nielsen dot dk
+To: crossgcc at sources dot redhat dot com
+Date: Thu, 24 Mar 2005 18:40:27 +0100
+Subject: [Patch] CT 0.29 - glibc-2.2.5-allow-gcc-4.0-powerpc-procfs
+
+Hi Dan,
+
+I had to add the following patch in order to make CT 0.29 and glibc
+2.2.5 compile with gcc 4.0 (20050305) and Kernel 2.4.20...
+
+// Martin
+
+--- glibc-2.2.5/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h.old 2005-03-24 13:11:39.746062400 +0100
++++ glibc-2.2.5/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h 2005-03-24 13:15:11.810996800 +0100
+@@ -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/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-powerpc.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-powerpc.patch
new file mode 100644
index 0000000..6b889c2
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-powerpc.patch
@@ -0,0 +1,23 @@
+In file included from dynamic-link.h:21,
+ from dl-reloc.c:153:
+../sysdeps/powerpc/dl-machine.h: In function '_dl_relocate_object':
+../sysdeps/powerpc/dl-machine.h:399: error: invalid storage class for function 'elf_machine_rela_relative'
+make[2]: *** [/home/dank/queue/jobdir.dual2/crosstool-dev/build/powerpc-750-linux-gnu/gcc-4.0-20050305-glibc-2.2.5/build-glibc/elf/dl-reloc.o] Error 1
+--- glibc-2.2.5/sysdeps/powerpc/dl-machine.h.old Thu Mar 17 13:28:17 2005
++++ glibc-2.2.5/sysdeps/powerpc/dl-machine.h Thu Mar 17 13:29:03 2005
+@@ -393,7 +393,14 @@
+ reloc_addr, finaladdr, rinfo);
+ }
+
+-static inline void
++#if __GNUC__ >= 4
++ auto inline void
++#else
++ static inline void
++#endif
++#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
++ __attribute ((always_inline))
++#endif
+ elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
+ Elf32_Addr *const reloc_addr)
+ {
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-sunrpc.patch b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-sunrpc.patch
new file mode 100644
index 0000000..4a07130
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-allow-gcc-4.0-sunrpc.patch
@@ -0,0 +1,221 @@
+[Taken from ../glibc-2.3.2/glibc-2.3.2-allow-gcc-3.4-sunrpc.patch,
+rediffed, and with a fix for sunrpc/auth_none.c that was
+inexplicably not included in the original patch.]
+
+Fixes
+
+auth_none.c: In function 'authnone_create':
+auth_none.c:83: error: invalid lvalue in assignment
+clnt_perr.c: In function '_buf':
+clnt_perr.c:68: error: invalid lvalue in assignment
+clnt_raw.c: In function 'clntraw_create':
+clnt_raw.c:103: error: invalid lvalue in assignment
+clnt_simp.c: In function 'callrpc':
+clnt_simp.c:78: error: invalid lvalue in assignment
+etc.
+
+building glibc-2.2.5 with gcc-4.0.
+
+---
+
+http://sources.redhat.com/ml/libc-hacker/2004-02/msg00005.html
+[Also in CVS, but the original patch is easier to get.]
+
+Fixes errors like
+
+clnt_perr.c: In function `_buf':
+clnt_perr.c:67: error: invalid lvalue in assignment
+
+when building with gcc-3.5.
+
+To: libc-hacker at sources dot redhat dot com
+Subject: Fix cast as lvalue in sunrpc
+From: Andreas Schwab <schwab at suse dot de>
+X-Yow: SHHHH!! I hear SIX TATTOOED TRUCK-DRIVERS tossing ENGINE BLOCKS
+ into empty OIL DRUMS dot dot
+Date: Sun, 08 Feb 2004 17:38:31 +0100
+Message-ID: <je4qu1frw8.fsf@sykes.suse.de>
+
+This fixes the uses of casts as lvalue in the sunrpc code.
+
+Andreas.
+
+2004-02-08 Andreas Schwab <schwab@suse.de>
+
+ * include/rpc/rpc.h: Declare thread variables with their correct
+ type.
+ * sunrpc/clnt_perr.c: Don't cast thread variables.
+ * sunrpc/clnt_raw.c: Likewise.
+ * sunrpc/clnt_simp.c: Likewise.
+ * sunrpc/key_call.c: Likewise.
+ * sunrpc/svcauth_des.c: Likewise.
+ * sunrpc/svc.c: Likewise.
+ * sunrpc/svc_raw.c: Likewise.
+ * sunrpc/svc_simple.c: Likewise.
+
+diff -ur glibc-2.2.5/include/rpc/rpc.h glibc-2.2.5-patched/include/rpc/rpc.h
+--- glibc-2.2.5/include/rpc/rpc.h 2001-03-25 21:11:32.000000000 -0800
++++ glibc-2.2.5-patched/include/rpc/rpc.h 2005-03-11 13:18:29.810860624 -0800
+@@ -18,24 +18,24 @@
+
+ void *authnone_private_s; /* auth_none.c */
+
+- void *clnt_perr_buf_s; /* clnt_perr.c */
++ char *clnt_perr_buf_s; /* clnt_perr.c */
+
+- void *clntraw_private_s; /* clnt_raw.c */
++ struct clntraw_private_s *clntraw_private_s; /* clnt_raw.c */
+
+- void *callrpc_private_s; /* clnt_simp.c */
++ struct callrpc_private_s *callrpc_private_s; /* clnt_simp.c */
+
+- void *key_call_private_s; /* key_call.c */
++ struct key_call_private *key_call_private_s; /* key_call.c */
+
+- void *authdes_cache_s; /* svcauth_des.c */
+- void *authdes_lru_s; /* svcauth_des.c */
++ struct cache_entry *authdes_cache_s; /* svcauth_des.c */
++ int *authdes_lru_s; /* svcauth_des.c */
+
+- void *svc_xports_s; /* svc.c */
+- void *svc_head_s; /* svc.c */
++ SVCXPRT **svc_xports_s; /* svc.c */
++ struct svc_callout *svc_head_s; /* svc.c */
+
+- void *svcraw_private_s; /* svc_raw.c */
++ struct svcraw_private_s *svcraw_private_s; /* svc_raw.c */
+
+- void *svcsimple_proglst_s; /* svc_simple.c */
+- void *svcsimple_transp_s; /* svc_simple.c */
++ struct proglst_ *svcsimple_proglst_s; /* svc_simple.c */
++ SVCXPRT *svcsimple_transp_s; /* svc_simple.c */
+ };
+
+ extern struct rpc_thread_variables *__rpc_thread_variables(void)
+--- glibc-2.2.5/sunrpc/auth_none.c.old 2005-03-10 16:26:53.874178280 -0800
++++ glibc-2.2.5/sunrpc/auth_none.c 2005-03-10 16:34:24.551664888 -0800
+@@ -62,7 +62,7 @@
+ u_int mcnt;
+ };
+ #ifdef _RPC_THREAD_SAFE_
+-#define authnone_private ((struct authnone_private_s *)RPC_THREAD_VARIABLE(authnone_private_s))
++#define authnone_private RPC_THREAD_VARIABLE(authnone_private_s)
+ #else
+ static struct authnone_private_s *authnone_private;
+ #endif
+diff -ur glibc-2.2.5/sunrpc/clnt_perr.c glibc-2.2.5-patched/sunrpc/clnt_perr.c
+--- glibc-2.2.5/sunrpc/clnt_perr.c 2001-08-16 21:48:31.000000000 -0700
++++ glibc-2.2.5-patched/sunrpc/clnt_perr.c 2005-03-11 13:18:29.812860320 -0800
+@@ -56,7 +56,7 @@
+ * buf variable in a few functions. Overriding a global variable
+ * with a local variable of the same name is a bad idea, anyway.
+ */
+-#define buf ((char *)RPC_THREAD_VARIABLE(clnt_perr_buf_s))
++#define buf RPC_THREAD_VARIABLE(clnt_perr_buf_s)
+ #else
+ static char *buf;
+ #endif
+diff -ur glibc-2.2.5/sunrpc/clnt_raw.c glibc-2.2.5-patched/sunrpc/clnt_raw.c
+--- glibc-2.2.5/sunrpc/clnt_raw.c 2001-03-20 10:34:22.000000000 -0800
++++ glibc-2.2.5-patched/sunrpc/clnt_raw.c 2005-03-11 13:18:29.813860168 -0800
+@@ -61,7 +61,7 @@
+ u_int mcnt;
+ };
+ #ifdef _RPC_THREAD_SAFE_
+-#define clntraw_private ((struct clntraw_private_s *)RPC_THREAD_VARIABLE(clntraw_private_s))
++#define clntraw_private RPC_THREAD_VARIABLE(clntraw_private_s)
+ #else
+ static struct clntraw_private_s *clntraw_private;
+ #endif
+diff -ur glibc-2.2.5/sunrpc/clnt_simp.c glibc-2.2.5-patched/sunrpc/clnt_simp.c
+--- glibc-2.2.5/sunrpc/clnt_simp.c 2001-08-19 23:28:21.000000000 -0700
++++ glibc-2.2.5-patched/sunrpc/clnt_simp.c 2005-03-11 13:18:29.814860016 -0800
+@@ -55,7 +55,7 @@
+ char *oldhost;
+ };
+ #ifdef _RPC_THREAD_SAFE_
+-#define callrpc_private ((struct callrpc_private_s *)RPC_THREAD_VARIABLE(callrpc_private_s))
++#define callrpc_private RPC_THREAD_VARIABLE(callrpc_private_s)
+ #else
+ static struct callrpc_private_s *callrpc_private;
+ #endif
+diff -ur glibc-2.2.5/sunrpc/key_call.c glibc-2.2.5-patched/sunrpc/key_call.c
+--- glibc-2.2.5/sunrpc/key_call.c 2001-03-20 10:34:22.000000000 -0800
++++ glibc-2.2.5-patched/sunrpc/key_call.c 2005-03-11 13:18:29.816859712 -0800
+@@ -360,7 +360,7 @@
+ uid_t uid; /* user-id at last authorization */
+ };
+ #ifdef _RPC_THREAD_SAFE_
+-#define key_call_private_main ((struct key_call_private *)RPC_THREAD_VARIABLE(key_call_private_s))
++#define key_call_private_main RPC_THREAD_VARIABLE(key_call_private_s)
+ #else
+ static struct key_call_private *key_call_private_main;
+ #endif
+diff -ur glibc-2.2.5/sunrpc/svcauth_des.c glibc-2.2.5-patched/sunrpc/svcauth_des.c
+--- glibc-2.2.5/sunrpc/svcauth_des.c 2001-08-19 23:37:09.000000000 -0700
++++ glibc-2.2.5-patched/sunrpc/svcauth_des.c 2005-03-11 13:18:29.821858952 -0800
+@@ -72,8 +72,8 @@
+ char *localcred; /* generic local credential */
+ };
+ #ifdef _RPC_THREAD_SAFE_
+-#define authdes_cache ((struct cache_entry *)RPC_THREAD_VARIABLE(authdes_cache_s))
+-#define authdes_lru ((int *)RPC_THREAD_VARIABLE(authdes_lru_s))
++#define authdes_cache RPC_THREAD_VARIABLE(authdes_cache_s)
++#define authdes_lru RPC_THREAD_VARIABLE(authdes_lru_s)
+ #else
+ static struct cache_entry *authdes_cache;
+ static int *authdes_lru;
+diff -ur glibc-2.2.5/sunrpc/svc.c glibc-2.2.5-patched/sunrpc/svc.c
+--- glibc-2.2.5/sunrpc/svc.c 2001-03-20 10:34:22.000000000 -0800
++++ glibc-2.2.5-patched/sunrpc/svc.c 2005-03-11 13:18:29.817859560 -0800
+@@ -44,7 +44,7 @@
+ #include <sys/poll.h>
+
+ #ifdef _RPC_THREAD_SAFE_
+-#define xports ((SVCXPRT **)RPC_THREAD_VARIABLE(svc_xports_s))
++#define xports RPC_THREAD_VARIABLE(svc_xports_s)
+ #else
+ static SVCXPRT **xports;
+ #endif
+@@ -63,7 +63,7 @@
+ void (*sc_dispatch) (struct svc_req *, SVCXPRT *);
+ };
+ #ifdef _RPC_THREAD_SAFE_
+-#define svc_head ((struct svc_callout *)RPC_THREAD_VARIABLE(svc_head_s))
++#define svc_head RPC_THREAD_VARIABLE(svc_head_s)
+ #else
+ static struct svc_callout *svc_head;
+ #endif
+diff -ur glibc-2.2.5/sunrpc/svc_raw.c glibc-2.2.5-patched/sunrpc/svc_raw.c
+--- glibc-2.2.5/sunrpc/svc_raw.c 2001-03-20 10:34:22.000000000 -0800
++++ glibc-2.2.5-patched/sunrpc/svc_raw.c 2005-03-11 13:18:29.818859408 -0800
+@@ -54,7 +54,7 @@
+ char verf_body[MAX_AUTH_BYTES];
+ };
+ #ifdef _RPC_THREAD_SAFE_
+-#define svcraw_private ((struct svcraw_private_s *)RPC_THREAD_VARIABLE(svcraw_private_s))
++#define svcraw_private RPC_THREAD_VARIABLE(svcraw_private_s)
+ #else
+ static struct svcraw_private_s *svcraw_private;
+ #endif
+diff -ur glibc-2.2.5/sunrpc/svc_simple.c glibc-2.2.5-patched/sunrpc/svc_simple.c
+--- glibc-2.2.5/sunrpc/svc_simple.c 2001-08-17 00:16:04.000000000 -0700
++++ glibc-2.2.5-patched/sunrpc/svc_simple.c 2005-03-11 13:18:29.820859104 -0800
+@@ -62,7 +62,7 @@
+ struct proglst_ *p_nxt;
+ };
+ #ifdef _RPC_THREAD_SAFE_
+-#define proglst ((struct proglst_ *)RPC_THREAD_VARIABLE(svcsimple_proglst_s))
++#define proglst RPC_THREAD_VARIABLE(svcsimple_proglst_s)
+ #else
+ static struct proglst_ *proglst;
+ #endif
+@@ -70,7 +70,7 @@
+
+ static void universal (struct svc_req *rqstp, SVCXPRT *transp_s);
+ #ifdef _RPC_THREAD_SAFE_
+-#define transp ((SVCXPRT *)RPC_THREAD_VARIABLE(svcsimple_transp_s))
++#define transp RPC_THREAD_VARIABLE(svcsimple_transp_s)
+ #else
+ static SVCXPRT *transp;
+ #endif
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-alpha-pwrite64.patch b/patches/glibc/2.2.5/glibc-2.2.5-alpha-pwrite64.patch
new file mode 100644
index 0000000..89cc9ea
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-alpha-pwrite64.patch
@@ -0,0 +1,58 @@
+Fix for this error:
+
+../sysdeps/unix/sysv/linux/pread.c: In function `__libc_pread':
+../sysdeps/unix/sysv/linux/pread.c:52: error: `__NR_pread' undeclared (first use in this function)
+../sysdeps/unix/sysv/linux/pread.c:52: error: (Each undeclared identifier is reported only once
+../sysdeps/unix/sysv/linux/pread.c:52: error: for each function it appears in.)
+make[2]: *** [/home/dank/crosstool-0.28/build/alpha-unknown-linux-gnu/gcc-3.4.1-glibc-2.2.5/build-glibc/posix/pread.o] Error 1
+make[2]: Leaving directory `/home/dank/crosstool-0.28/build/alpha-unknown-linux-gnu/gcc-3.4.1-glibc-2.2.5/glibc-2.2.5/posix'
+make[1]: *** [posix/subdir_lib] Error 2
+make[1]: Leaving directory `/home/dank/crosstool-0.28/build/alpha-unknown-linux-gnu/gcc-3.4.1-glibc-2.2.5/glibc-2.2.5'
+make: *** [all] Error 2
+
+[ Same as glibc-2.3.2-alpha-pwrite.patch except for copyright date ]
+
+extracted from GLIBC CVS by Dan Kegel
+wget 'http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/unix/sysv/linux/alpha/sysdep.h.diff?r1=1.14&r2=1.15&cvsroot=glibc'
+(to match context of...)
+wget 'http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/unix/sysv/linux/alpha/sysdep.h.diff?r1=1.16&r2=1.17&cvsroot=glibc'
+and rediffed.
+
+cf.
+http://sources.redhat.com/ml/libc-alpha/2003-10/msg00038.html
+
+Originally thought we needed this hunk, too:
+http://sources.redhat.com/ml/libc-alpha/2003-10/msg00037.html
+but it seems the sysdep.h change is sufficient, and works better
+when compiling against linux-2.4.
+
+===================================================================
+--- glibc-2.3.2/sysdeps/unix/sysv/linux/alpha/sysdep.h.old 2004-05-24 22:21:44.000000000 -0700
++++ glibc-2.3.2/sysdeps/unix/sysv/linux/alpha/sysdep.h 2004-05-24 22:22:48.000000000 -0700
+@@ -1,3 +1,3 @@
+-/* Copyright (C) 1992, 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
++/* Copyright (C) 1992, 1993, 1995, 1996, 1997, 2004 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
+@@ -60,6 +60,21 @@
+ #define __NR_osf_getsysinfo 256
+ #define __NR_osf_setsysinfo 257
+
++/* Help old kernel headers where particular syscalls are not available. */
++#ifndef __NR_semtimedop
++# define __NR_semtimedop 423
++#endif
++
++/* This is a kludge to make syscalls.list find these under the names
++ pread and pwrite, since some kernel headers define those names
++ and some define the *64 names for the same system calls. */
++#if !defined __NR_pread && defined __NR_pread64
++# define __NR_pread __NR_pread64
++#endif
++#if !defined __NR_pwrite && defined __NR_pwrite64
++# define __NR_pwrite __NR_pwrite64
++#endif
++
+ /*
+ * In order to get the hidden arguments for rt_sigaction set up
+ * properly, we need to call the assembly version. Detect this in the
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-arm-pwrite64.patch b/patches/glibc/2.2.5/glibc-2.2.5-arm-pwrite64.patch
new file mode 100644
index 0000000..c4bd19c
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-arm-pwrite64.patch
@@ -0,0 +1,30 @@
+Should fix
+
+../sysdeps/unix/sysv/linux/pread.c: In function `__libc_pread':
+../sysdeps/unix/sysv/linux/pread.c:52: error: `__NR_pread' undeclared (first use in this function)
+../sysdeps/unix/sysv/linux/pread.c:52: error: (Each undeclared identifier is reported only once
+../sysdeps/unix/sysv/linux/pread.c:52: error: for each function it appears in.)
+make[2]: *** [/home/dank/crosstool-0.28/build/arm-9tdmi-linux-gnu/gcc-3.4.1-glibc-2.2.5/build-glibc/posix/pread.o] Error 1
+make[2]: Leaving directory `/home/dank/crosstool-0.28/build/arm-9tdmi-linux-gnu/gcc-3.4.1-glibc-2.2.5/glibc-2.2.5/posix'
+make[1]: *** [posix/subdir_lib] Error 2
+
+Copied from similar patch for alpha.
+
+--- glibc-2.2.5-orig/sysdeps/unix/sysv/linux/arm/sysdep.h 2001-07-05 21:56:13.000000000 -0700
++++ glibc-2.2.5/sysdeps/unix/sysv/linux/arm/sysdep.h 2004-08-07 10:45:26.000000000 -0700
+@@ -32,6 +32,15 @@
+ #define SWI_BASE (0x900000)
+ #define SYS_ify(syscall_name) (__NR_##syscall_name)
+
++/* This is a kludge to make syscalls.list find these under the names
++ pread and pwrite, since some kernel headers define those names
++ and some define the *64 names for the same system calls. */
++#if !defined __NR_pread && defined __NR_pread64
++# define __NR_pread __NR_pread64
++#endif
++#if !defined __NR_pwrite && defined __NR_pwrite64
++# define __NR_pwrite __NR_pwrite64
++#endif
+
+ #ifdef __ASSEMBLER__
+
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-crosstest.patch b/patches/glibc/2.2.5/glibc-2.2.5-crosstest.patch
new file mode 100644
index 0000000..c9f3701
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-crosstest.patch
@@ -0,0 +1,27 @@
+Fixes errors like
+ /build-glibc/dlfcn/glrefmain: cannot load `glreflib1.so'
+in glibc regression test
+
+--- glibc-2.2.5/dlfcn/Makefile.old Thu Jul 24 16:30:20 2003
++++ glibc-2.2.5/dlfcn/Makefile Thu Jul 24 17:25:01 2003
+@@ -60,6 +60,8 @@
+ test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(modules-names)))
+ $(test-modules): $(objpfx)%.so: $(objpfx)%.os
+ $(build-module)
++# without following rule, test-modules don't get built when cross-compiling
++tests: $(test-modules)
+
+ $(objpfx)glrefmain: $(libdl)
+ $(objpfx)glrefmain.out: $(objpfx)glrefmain \
+--- glibc-2.2.5/elf/Makefile.old Thu Jul 24 18:17:12 2003
++++ glibc-2.2.5/elf/Makefile Thu Jul 24 18:18:58 2003
+@@ -263,6 +263,9 @@
+ test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(strip $(modules-names))))
+ generated += $(addsuffix .so,$(strip $(modules-names)))
+
++# without following rule, test-modules don't get built when cross-compiling
++tests: $(test-modules)
++
+ ifeq (yes,$(build-shared))
+ ifeq ($(cross-compiling),no)
+ tests: $(objpfx)tst-pathopt.out
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-crossyes.patch b/patches/glibc/2.2.5/glibc-2.2.5-crossyes.patch
new file mode 100644
index 0000000..842d8f5
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-crossyes.patch
@@ -0,0 +1,11 @@
+--- glibc-2.2.5/configure.old 2003-05-30 21:51:13.000000000 -0700
++++ glibc-2.2.5/configure 2003-05-30 21:51:23.000000000 -0700
+@@ -1738,7 +1738,7 @@
+ 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
+- ac_cv_prog_cc_cross=no
++ ac_cv_prog_cc_cross=yes
+ else
+ ac_cv_prog_cc_cross=yes
+ fi
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-cygwin.patch b/patches/glibc/2.2.5/glibc-2.2.5-cygwin.patch
new file mode 100644
index 0000000..f14998d
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-cygwin.patch
@@ -0,0 +1,89 @@
+Fixes
+elf/librtld.os: In function `process_envvars': : undefined reference to `__access'
+...
+when building glibc-2.3.2 on cygwin
+
+Idea from
+http://sources.redhat.com/ml/bug-glibc/2002-01/msg00071/glibc-2.2-cygin-shared.patch
+forward ported to glibc-2.3.2.
+Basically, make glibc use .oST as suffix for 'object static'
+instead of .oS, since cygwin has trouble distinguishing .os from .oS
+(Original patch had .on, but .oST is more mnemonic for 'object static')
+
+
+diff -Naur from-cvs/Makeconfig patched/Makeconfig
+--- from-cvs/Makeconfig Fri Jan 11 14:40:35 2002
++++ patched/Makeconfig Fri Jan 11 15:07:30 2002
+@@ -439,13 +439,13 @@
+ # run the linked programs.
+ link-libc = -Wl,-rpath-link=$(rpath-link) \
+ $(common-objpfx)libc.so$(libc.so-version) \
+- $(common-objpfx)$(patsubst %,$(libtype.oS),c) $(gnulib)
++ $(common-objpfx)$(patsubst %,$(libtype.oST),c) $(gnulib)
+ # This is how to find at build-time things that will be installed there.
+ rpath-dirs = math elf dlfcn nss nis rt resolv crypt
+ else
+ ifneq (,$(findstring aix,$(config-os)))
+ link-libc = $(common-objpfx)libc.a \
+- $(common-objpfx)$(patsubst %,$(libtype.oS),c) $(gnulib)
++ $(common-objpfx)$(patsubst %,$(libtype.oST),c) $(gnulib)
+ rpath-dirs = math dlfcn nss nis rt resolv crypt
+ endif
+ endif
+@@ -649,7 +649,7 @@
+ # The compilation rules use $(CPPFLAGS-${SUFFIX}) and $(CFLAGS-${SUFFIX})
+ # to pass different flags for each flavor.
+ libtypes = $(foreach o,$(object-suffixes-for-libc),$(libtype$o))
+-all-object-suffixes := .o .os .op .og .ob .oS
++all-object-suffixes := .o .os .op .og .ob .oST
+ object-suffixes :=
+ CPPFLAGS-.o = $(pic-default)
+ CFLAGS-.o = $(filter %frame-pointer,$(+cflags))
+@@ -703,14 +703,14 @@
+
+ ifeq (yes,$(build-shared))
+ # Build special library that contains the static-only routines for libc.
+-object-suffixes-for-libc += .oS
++object-suffixes-for-libc += .oST
+
+ # Must build the routines as PIC, though, because they can end up in (users')
+ # shared objects. We don't want to use CFLAGS-os because users may, for
+ # example, make that processor-specific.
+-CFLAGS-.oS = $(CFLAGS-.o) $(pic-ccflag)
+-CPPFLAGS-.oS = $(CPPFLAGS-.o) -DPIC
+-libtype.oS = lib%_nonshared.a
++CFLAGS-.oST = $(CFLAGS-.o) $(pic-ccflag)
++CPPFLAGS-.oST = $(CPPFLAGS-.o) -DPIC
++libtype.oST = lib%_nonshared.a
+ endif
+
+
+diff -Naur from-cvs/Makerules patched/Makerules
+--- from-cvs/Makerules Fri Jan 11 14:40:42 2002
++++ patched/Makerules Fri Jan 11 15:06:00 2002
+@@ -361,7 +361,7 @@
+ # Bounded pointer thunks are only built for *.ob
+ elide-bp-thunks = $(addprefix $(bppfx),$(bp-thunks))
+
+-elide-routines.oS += $(filter-out $(static-only-routines),\
++elide-routines.oST += $(filter-out $(static-only-routines),\
+ $(routines) $(aux) $(sysdep_routines)) \
+ $(elide-bp-thunks)
+ elide-routines.os += $(static-only-routines) $(elide-bp-thunks)
+@@ -842,14 +842,14 @@
+ # of the files are taken by the linker.
+ install: $(inst_libdir)/libc.so
+ $(inst_libdir)/libc.so: $(common-objpfx)libc.so$(libc.so-version) \
+- $(inst_libdir)/$(patsubst %,$(libtype.oS),\
++ $(inst_libdir)/$(patsubst %,$(libtype.oST),\
+ $(libprefix)$(libc-name)) \
+ $(+force)
+ (echo '/* GNU ld script';\
+ echo ' Use the shared library, but some functions are only in';\
+ echo ' the static library, so try that secondarily. */';\
+ echo 'GROUP ( $(slibdir)/libc.so$(libc.so-version)' \
+- '$(libdir)/$(patsubst %,$(libtype.oS),$(libprefix)$(libc-name))'\
++ '$(libdir)/$(patsubst %,$(libtype.oST),$(libprefix)$(libc-name))'\
+ ')' \
+ ) > $@.new
+ mv -f $@.new $@
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-hhl-powerpc-fpu.patch b/patches/glibc/2.2.5/glibc-2.2.5-hhl-powerpc-fpu.patch
new file mode 100644
index 0000000..97740d5
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-hhl-powerpc-fpu.patch
@@ -0,0 +1,1134 @@
+# See http://sources.redhat.com/ml/crossgcc/2002-05/msg00132.html
+# This patch is taken directly from the Montavista Hard Hat Linux 2.0 source RPMs,
+# but has been rediffed against glibc-2.2.5
+
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/Dist glibc-2.2.5/sysdeps/powerpc/Dist
+--- glibc-2.2.5.old/sysdeps/powerpc/Dist Fri Jun 30 23:30:21 2000
++++ glibc-2.2.5/sysdeps/powerpc/Dist Thu Jul 10 11:43:17 2003
+@@ -1,9 +1,6 @@
+ dl-machine.c
+ dl-start.S
+ ppc-mcount.S
+-fe_nomask.c
+-fprrest.S
+-fprsave.S
+ gprsave1.S
+ gprsave0.S
+ gprrest1.S
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/Makefile glibc-2.2.5/sysdeps/powerpc/Makefile
+--- glibc-2.2.5.old/sysdeps/powerpc/Makefile Mon Nov 27 15:32:47 2000
++++ glibc-2.2.5/sysdeps/powerpc/Makefile Thu Jul 10 11:43:17 2003
+@@ -3,16 +3,12 @@
+ +cflags += -mnew-mnemonics -Wa,-mppc -mpowerpc
+ asm-CPPFLAGS += -Wa,-mppc
+
+-ifeq ($(subdir),math)
+-libm-support += fenv_const fe_nomask
+-endif
+-
+ ifeq ($(subdir),gmon)
+ sysdep_routines += ppc-mcount
+ endif
+
+ ifeq ($(subdir),misc)
+-sysdep_routines += gprsave0 gprrest0 gprsave1 gprrest1 fprsave fprrest
++sysdep_routines += gprsave0 gprrest0 gprsave1 gprrest1
+ endif
+
+ # On PPC, -fpic works until the GOT contains 2^15 bytes, and possibly
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/Versions glibc-2.2.5/sysdeps/powerpc/Versions
+--- glibc-2.2.5.old/sysdeps/powerpc/Versions Mon Feb 28 13:27:57 2000
++++ glibc-2.2.5/sysdeps/powerpc/Versions Thu Jul 10 11:43:17 2003
+@@ -1,8 +1,4 @@
+ libm {
+- GLIBC_2.1 {
+- # symbols used in macros from sysdeps/powerpc/bits/fenv.h
+- __fe_dfl_env; __fe_enabled_env; __fe_nonieee_env; __fe_nomask_env;
+- }
+ GLIBC_2.2 {
+ # Special functions to save and restore registers used by the
+ # runtime libraries.
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/__longjmp.S glibc-2.2.5/sysdeps/powerpc/__longjmp.S
+--- glibc-2.2.5.old/sysdeps/powerpc/__longjmp.S Thu Jul 5 21:56:01 2001
++++ glibc-2.2.5/sysdeps/powerpc/__longjmp.S Thu Jul 10 11:43:17 2003
+@@ -24,6 +24,8 @@
+ #include <bp-sym.h>
+ #include <bp-asm.h>
+
++/* The FPU loads have been removed from this file - see fpu/__longjmp.S */
++
+ ENTRY (BP_SYM (__longjmp))
+ CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
+
+@@ -31,44 +33,26 @@
+ lwz r2,(JB_GPR2*4)(r3)
+ lwz r0,(JB_LR*4)(r3)
+ lwz r14,((JB_GPRS+0)*4)(r3)
+- lfd fp14,((JB_FPRS+0*2)*4)(r3)
+ lwz r15,((JB_GPRS+1)*4)(r3)
+- lfd fp15,((JB_FPRS+1*2)*4)(r3)
+ lwz r16,((JB_GPRS+2)*4)(r3)
+- lfd fp16,((JB_FPRS+2*2)*4)(r3)
+ lwz r17,((JB_GPRS+3)*4)(r3)
+- lfd fp17,((JB_FPRS+3*2)*4)(r3)
+ lwz r18,((JB_GPRS+4)*4)(r3)
+- lfd fp18,((JB_FPRS+4*2)*4)(r3)
+ lwz r19,((JB_GPRS+5)*4)(r3)
+- lfd fp19,((JB_FPRS+5*2)*4)(r3)
+ lwz r20,((JB_GPRS+6)*4)(r3)
+- lfd fp20,((JB_FPRS+6*2)*4)(r3)
+ mtlr r0
+ lwz r21,((JB_GPRS+7)*4)(r3)
+- lfd fp21,((JB_FPRS+7*2)*4)(r3)
+ lwz r22,((JB_GPRS+8)*4)(r3)
+- lfd fp22,((JB_FPRS+8*2)*4)(r3)
+ lwz r0,(JB_CR*4)(r3)
+ lwz r23,((JB_GPRS+9)*4)(r3)
+- lfd fp23,((JB_FPRS+9*2)*4)(r3)
+ lwz r24,((JB_GPRS+10)*4)(r3)
+- lfd fp24,((JB_FPRS+10*2)*4)(r3)
+ lwz r25,((JB_GPRS+11)*4)(r3)
+- lfd fp25,((JB_FPRS+11*2)*4)(r3)
+ mtcrf 0xFF,r0
+ lwz r26,((JB_GPRS+12)*4)(r3)
+- lfd fp26,((JB_FPRS+12*2)*4)(r3)
+ lwz r27,((JB_GPRS+13)*4)(r3)
+- lfd fp27,((JB_FPRS+13*2)*4)(r3)
+ lwz r28,((JB_GPRS+14)*4)(r3)
+- lfd fp28,((JB_FPRS+14*2)*4)(r3)
+ lwz r29,((JB_GPRS+15)*4)(r3)
+- lfd fp29,((JB_FPRS+15*2)*4)(r3)
+ lwz r30,((JB_GPRS+16)*4)(r3)
+- lfd fp30,((JB_FPRS+16*2)*4)(r3)
+ lwz r31,((JB_GPRS+17)*4)(r3)
+- lfd fp31,((JB_FPRS+17*2)*4)(r3)
+ mr r3,r4
+ blr
+ END (BP_SYM (__longjmp))
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/bits/setjmp.h glibc-2.2.5/sysdeps/powerpc/bits/setjmp.h
+--- glibc-2.2.5.old/sysdeps/powerpc/bits/setjmp.h Thu Jul 5 21:56:01 2001
++++ glibc-2.2.5/sysdeps/powerpc/bits/setjmp.h Thu Jul 10 11:43:17 2003
+@@ -17,6 +17,7 @@
+ 02111-1307 USA. */
+
+ /* Define the machine-dependent type `jmp_buf'. PowerPC version. */
++/* For processors without floating point. */
+
+ #ifndef _SETJMP_H
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+@@ -33,12 +34,11 @@
+ # define JB_LR 2 /* The address we will return to */
+ # define JB_GPRS 3 /* GPRs 14 through 31 are saved, 18 in total */
+ # define JB_CR 21 /* Condition code registers. */
+-# define JB_FPRS 22 /* FPRs 14 through 31 are saved, 18*2 words total */
+-# define JB_SIZE (58*4)
++# define JB_SIZE (22*4)
+ #endif
+
+ #ifndef _ASM
+-typedef long int __jmp_buf[58];
++typedef long int __jmp_buf[22];
+ #endif
+
+ /* Test if longjmp to JMPBUF would unwind the frame
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fclrexcpt.c glibc-2.2.5/sysdeps/powerpc/fclrexcpt.c
+--- glibc-2.2.5.old/sysdeps/powerpc/fclrexcpt.c Thu Jul 5 21:56:01 2001
++++ glibc-2.2.5/sysdeps/powerpc/fclrexcpt.c Wed Dec 31 16:00:00 1969
+@@ -1,48 +0,0 @@
+-/* Clear given exceptions in current floating-point environment.
+- Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C 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
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#include <fenv_libc.h>
+-
+-#undef feclearexcept
+-int
+-__feclearexcept (int excepts)
+-{
+- fenv_union_t u;
+-
+- /* Get the current state. */
+- u.fenv = fegetenv_register ();
+-
+- /* Clear the relevant bits. */
+- u.l[1] = u.l[1] & ~((-(excepts >> (31 - FPSCR_VX) & 1) & FE_ALL_INVALID)
+- | (excepts & FPSCR_STICKY_BITS));
+-
+- /* Put the new state in effect. */
+- fesetenv_register (u.fenv);
+-
+- /* Success. */
+- return 0;
+-}
+-
+-#include <shlib-compat.h>
+-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
+-strong_alias (__feclearexcept, __old_feclearexcept)
+-compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
+-#endif
+-
+-versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fe_nomask.c glibc-2.2.5/sysdeps/powerpc/fe_nomask.c
+--- glibc-2.2.5.old/sysdeps/powerpc/fe_nomask.c Thu Jul 5 21:56:01 2001
++++ glibc-2.2.5/sysdeps/powerpc/fe_nomask.c Wed Dec 31 16:00:00 1969
+@@ -1,32 +0,0 @@
+-/* Procedure definition for FE_NOMASK_ENV.
+- Copyright (C) 1997 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C 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
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#include <fenv.h>
+-#include <errno.h>
+-
+-/* This is presently a stub, until it's decided how the kernels should
+- support this. */
+-
+-const fenv_t *
+-__fe_nomask_env(void)
+-{
+- __set_errno (ENOSYS);
+- return FE_ENABLED_ENV;
+-}
+-stub_warning (__fe_nomask_env)
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fprrest.S glibc-2.2.5/sysdeps/powerpc/fprrest.S
+--- glibc-2.2.5.old/sysdeps/powerpc/fprrest.S Thu Jul 5 21:56:01 2001
++++ glibc-2.2.5/sysdeps/powerpc/fprrest.S Wed Dec 31 16:00:00 1969
+@@ -1,94 +0,0 @@
+-/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C 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
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-/*
+- Floating Point Registers (FPRs) restore routine
+-*/
+-
+-#include <sysdep.h>
+-
+-ENTRY(_restfpr_all)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf14)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_14)
+-C_TEXT(_restf14):
+-C_TEXT(_restfpr_14): lfd fp14,-144(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf15)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_15)
+-C_TEXT(_restf15):
+-C_TEXT(_restfpr_15): lfd fp15,-136(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf16)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_16)
+-C_TEXT(_restf16):
+-C_TEXT(_restfpr_16): lfd fp16,-128(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf17)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_17)
+-C_TEXT(_restf17):
+-C_TEXT(_restfpr_17): lfd fp17,-120(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf18)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_18)
+-C_TEXT(_restf18):
+-C_TEXT(_restfpr_18): lfd fp18,-112(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf19)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_19)
+-C_TEXT(_restf19):
+-C_TEXT(_restfpr_19): lfd fp19,-104(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf20)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_20)
+-C_TEXT(_restf20):
+-C_TEXT(_restfpr_20): lfd fp20,-96(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf21)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_21)
+-C_TEXT(_restf21):
+-C_TEXT(_restfpr_21): lfd fp21,-88(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf22)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_22)
+-C_TEXT(_restf22):
+-C_TEXT(_restfpr_22): lfd fp22,-80(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf23)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_23)
+-C_TEXT(_restf23):
+-C_TEXT(_restfpr_23): lfd fp23,-72(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf24)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_24)
+-C_TEXT(_restf24):
+-C_TEXT(_restfpr_24): lfd fp24,-64(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf25)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_25)
+-C_TEXT(_restf25):
+-C_TEXT(_restfpr_25): lfd fp25,-56(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf26)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_26)
+-C_TEXT(_restf26):
+-C_TEXT(_restfpr_26): lfd fp26,-48(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf27)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_27)
+-C_TEXT(_restf27):
+-C_TEXT(_restfpr_27): lfd fp27,-40(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf28)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_28)
+-C_TEXT(_restf28):
+-C_TEXT(_restfpr_28): lfd fp28,-32(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restf29)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_29)
+-C_TEXT(_restf29):
+-C_TEXT(_restfpr_29): lwz r0,8(r1) #get return address from frame
+- lfd fp29,-24(r1) #restore f29
+- mtlr r0 #move return address to LR
+- lfd fp30,-16(r1) #restore f30
+- lfd fp31,-8(r1) #restore f31
+- blr #return
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fprsave.S glibc-2.2.5/sysdeps/powerpc/fprsave.S
+--- glibc-2.2.5.old/sysdeps/powerpc/fprsave.S Thu Jul 5 21:56:01 2001
++++ glibc-2.2.5/sysdeps/powerpc/fprsave.S Wed Dec 31 16:00:00 1969
+@@ -1,93 +0,0 @@
+-/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C 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
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-/*
+- Floating Point Registers (FPRs) save routine
+-*/
+-
+-#include <sysdep.h>
+-
+-ENTRY(_savefpr_all)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef14)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_14)
+-C_TEXT(_savef14):
+-C_TEXT(_savefpr_14): stfd fp14,-144(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef15)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_15)
+-C_TEXT(_savef15):
+-C_TEXT(_savefpr_15): stfd fp15,-136(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef16)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_16)
+-C_TEXT(_savef16):
+-C_TEXT(_savefpr_16): stfd fp16,-128(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef17)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_17)
+-C_TEXT(_savef17):
+-C_TEXT(_savefpr_17): stfd fp17,-120(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef18)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_18)
+-C_TEXT(_savef18):
+-C_TEXT(_savefpr_18): stfd fp18,-112(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef19)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_19)
+-C_TEXT(_savef19):
+-C_TEXT(_savefpr_19): stfd fp19,-104(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef20)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_20)
+-C_TEXT(_savef20):
+-C_TEXT(_savefpr_20): stfd fp20,-96(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef21)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_21)
+-C_TEXT(_savef21):
+-C_TEXT(_savefpr_21): stfd fp21,-88(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef22)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_22)
+-C_TEXT(_savef22):
+-C_TEXT(_savefpr_22): stfd fp22,-80(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef23)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_23)
+-C_TEXT(_savef23):
+-C_TEXT(_savefpr_23): stfd fp23,-72(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef24)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_24)
+-C_TEXT(_savef24):
+-C_TEXT(_savefpr_24): stfd fp24,-64(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef25)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_25)
+-C_TEXT(_savef25):
+-C_TEXT(_savefpr_25): stfd fp25,-56(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef26)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_26)
+-C_TEXT(_savef26):
+-C_TEXT(_savefpr_26): stfd fp26,-48(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef27)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_27)
+-C_TEXT(_savef27):
+-C_TEXT(_savefpr_27): stfd fp27,-40(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef28)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_28)
+-C_TEXT(_savef28):
+-C_TEXT(_savefpr_28): stfd fp28,-32(r1)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savef29)
+- ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_29)
+-C_TEXT(_savef29):
+-C_TEXT(_savefpr_29): stfd fp29,-24(r1) #save f29
+- stfd fp30,-16(r1) #save f30
+- stfd fp31,-8(r1) #save f31
+- stw r0,8(r1) #save LR in callers frame
+- blr #return
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/Dist glibc-2.2.5/sysdeps/powerpc/fpu/Dist
+--- glibc-2.2.5.old/sysdeps/powerpc/fpu/Dist Wed Jan 26 17:48:02 2000
++++ glibc-2.2.5/sysdeps/powerpc/fpu/Dist Thu Jul 10 11:43:17 2003
+@@ -1,3 +1,6 @@
++fe_nomask.c
++fprrest.S
++fprsave.S
+ fenv_const.c
+ fenv_libc.h
+ t_sqrt.c
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/Makefile glibc-2.2.5/sysdeps/powerpc/fpu/Makefile
+--- glibc-2.2.5.old/sysdeps/powerpc/fpu/Makefile Mon Oct 11 15:29:00 1999
++++ glibc-2.2.5/sysdeps/powerpc/fpu/Makefile Thu Jul 10 11:43:17 2003
+@@ -1,3 +1,7 @@
+ ifeq ($(subdir),math)
+ libm-support += fenv_const fe_nomask t_sqrt
+ endif
++
++ifeq ($(subdir),misc)
++sysdep_routines += fprsave fprrest
++endif
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/Versions glibc-2.2.5/sysdeps/powerpc/fpu/Versions
+--- glibc-2.2.5.old/sysdeps/powerpc/fpu/Versions Wed Dec 31 16:00:00 1969
++++ glibc-2.2.5/sysdeps/powerpc/fpu/Versions Thu Jul 10 11:43:17 2003
+@@ -0,0 +1,6 @@
++libm {
++ GLIBC_2.1 {
++ # symbols used in macros from sysdeps/powerpc/bits/fenv.h
++ __fe_dfl_env; __fe_enabled_env; __fe_nonieee_env; __fe_nomask_env;
++ }
++}
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/__longjmp.S glibc-2.2.5/sysdeps/powerpc/fpu/__longjmp.S
+--- glibc-2.2.5.old/sysdeps/powerpc/fpu/__longjmp.S Wed Dec 31 16:00:00 1969
++++ glibc-2.2.5/sysdeps/powerpc/fpu/__longjmp.S Thu Jul 10 11:43:17 2003
+@@ -0,0 +1,74 @@
++/* longjmp for PowerPC.
++ Copyright (C) 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Library General Public License as
++ published by the Free Software Foundation; either version 2 of the
++ License, or (at your option) any later version.
++
++ The GNU C 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
++ Library General Public License for more details.
++
++ You should have received a copy of the GNU Library General Public
++ License along with the GNU C Library; see the file COPYING.LIB. If not,
++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA. */
++
++#include <sysdep.h>
++#define _ASM
++#define _SETJMP_H
++#include <bits/setjmp.h>
++#include <bp-sym.h>
++#include <bp-asm.h>
++
++ENTRY (BP_SYM (__longjmp))
++ CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
++
++ lwz r1,(JB_GPR1*4)(r3)
++ lwz r2,(JB_GPR2*4)(r3)
++ lwz r0,(JB_LR*4)(r3)
++ lwz r14,((JB_GPRS+0)*4)(r3)
++ lfd fp14,((JB_FPRS+0*2)*4)(r3)
++ lwz r15,((JB_GPRS+1)*4)(r3)
++ lfd fp15,((JB_FPRS+1*2)*4)(r3)
++ lwz r16,((JB_GPRS+2)*4)(r3)
++ lfd fp16,((JB_FPRS+2*2)*4)(r3)
++ lwz r17,((JB_GPRS+3)*4)(r3)
++ lfd fp17,((JB_FPRS+3*2)*4)(r3)
++ lwz r18,((JB_GPRS+4)*4)(r3)
++ lfd fp18,((JB_FPRS+4*2)*4)(r3)
++ lwz r19,((JB_GPRS+5)*4)(r3)
++ lfd fp19,((JB_FPRS+5*2)*4)(r3)
++ lwz r20,((JB_GPRS+6)*4)(r3)
++ lfd fp20,((JB_FPRS+6*2)*4)(r3)
++ mtlr r0
++ lwz r21,((JB_GPRS+7)*4)(r3)
++ lfd fp21,((JB_FPRS+7*2)*4)(r3)
++ lwz r22,((JB_GPRS+8)*4)(r3)
++ lfd fp22,((JB_FPRS+8*2)*4)(r3)
++ lwz r0,(JB_CR*4)(r3)
++ lwz r23,((JB_GPRS+9)*4)(r3)
++ lfd fp23,((JB_FPRS+9*2)*4)(r3)
++ lwz r24,((JB_GPRS+10)*4)(r3)
++ lfd fp24,((JB_FPRS+10*2)*4)(r3)
++ lwz r25,((JB_GPRS+11)*4)(r3)
++ lfd fp25,((JB_FPRS+11*2)*4)(r3)
++ mtcrf 0xFF,r0
++ lwz r26,((JB_GPRS+12)*4)(r3)
++ lfd fp26,((JB_FPRS+12*2)*4)(r3)
++ lwz r27,((JB_GPRS+13)*4)(r3)
++ lfd fp27,((JB_FPRS+13*2)*4)(r3)
++ lwz r28,((JB_GPRS+14)*4)(r3)
++ lfd fp28,((JB_FPRS+14*2)*4)(r3)
++ lwz r29,((JB_GPRS+15)*4)(r3)
++ lfd fp29,((JB_FPRS+15*2)*4)(r3)
++ lwz r30,((JB_GPRS+16)*4)(r3)
++ lfd fp30,((JB_FPRS+16*2)*4)(r3)
++ lwz r31,((JB_GPRS+17)*4)(r3)
++ lfd fp31,((JB_FPRS+17*2)*4)(r3)
++ mr r3,r4
++ blr
++END (BP_SYM (__longjmp))
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/bits/setjmp.h glibc-2.2.5/sysdeps/powerpc/fpu/bits/setjmp.h
+--- glibc-2.2.5.old/sysdeps/powerpc/fpu/bits/setjmp.h Wed Dec 31 16:00:00 1969
++++ glibc-2.2.5/sysdeps/powerpc/fpu/bits/setjmp.h Thu Jul 10 11:43:17 2003
+@@ -0,0 +1,47 @@
++/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Library General Public License as
++ published by the Free Software Foundation; either version 2 of the
++ License, or (at your option) any later version.
++
++ The GNU C 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
++ Library General Public License for more details.
++
++ You should have received a copy of the GNU Library General Public
++ License along with the GNU C Library; see the file COPYING.LIB. If not,
++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA. */
++
++/* Define the machine-dependent type `jmp_buf'. PowerPC version. */
++
++#ifndef _SETJMP_H
++# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
++#endif
++
++/* The previous bits/setjmp.h had __jmp_buf defined as a structure.
++ We use an array of 'long int' instead, to make writing the
++ assembler easier. Naturally, user code should not depend on
++ either representation. */
++
++#if defined __USE_MISC || defined _ASM
++# define JB_GPR1 0 /* Also known as the stack pointer */
++# define JB_GPR2 1
++# define JB_LR 2 /* The address we will return to */
++# define JB_GPRS 3 /* GPRs 14 through 31 are saved, 18 in total */
++# define JB_CR 21 /* Condition code registers. */
++# define JB_FPRS 22 /* FPRs 14 through 31 are saved, 18*2 words total */
++# define JB_SIZE (58*4)
++#endif
++
++#ifndef _ASM
++typedef long int __jmp_buf[58];
++#endif
++
++/* Test if longjmp to JMPBUF would unwind the frame
++ containing a local variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *) (address) < (void *) (jmpbuf)[JB_GPR1])
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/fclrexcpt.c glibc-2.2.5/sysdeps/powerpc/fpu/fclrexcpt.c
+--- glibc-2.2.5.old/sysdeps/powerpc/fpu/fclrexcpt.c Wed Dec 31 16:00:00 1969
++++ glibc-2.2.5/sysdeps/powerpc/fpu/fclrexcpt.c Thu Jul 5 21:56:01 2001
+@@ -0,0 +1,48 @@
++/* Clear given exceptions in current floating-point environment.
++ Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C 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
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv_libc.h>
++
++#undef feclearexcept
++int
++__feclearexcept (int excepts)
++{
++ fenv_union_t u;
++
++ /* Get the current state. */
++ u.fenv = fegetenv_register ();
++
++ /* Clear the relevant bits. */
++ u.l[1] = u.l[1] & ~((-(excepts >> (31 - FPSCR_VX) & 1) & FE_ALL_INVALID)
++ | (excepts & FPSCR_STICKY_BITS));
++
++ /* Put the new state in effect. */
++ fesetenv_register (u.fenv);
++
++ /* Success. */
++ return 0;
++}
++
++#include <shlib-compat.h>
++#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
++strong_alias (__feclearexcept, __old_feclearexcept)
++compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
++#endif
++
++versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/fe_nomask.c glibc-2.2.5/sysdeps/powerpc/fpu/fe_nomask.c
+--- glibc-2.2.5.old/sysdeps/powerpc/fpu/fe_nomask.c Wed Dec 31 16:00:00 1969
++++ glibc-2.2.5/sysdeps/powerpc/fpu/fe_nomask.c Thu Jul 5 21:56:01 2001
+@@ -0,0 +1,32 @@
++/* Procedure definition for FE_NOMASK_ENV.
++ Copyright (C) 1997 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C 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
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <fenv.h>
++#include <errno.h>
++
++/* This is presently a stub, until it's decided how the kernels should
++ support this. */
++
++const fenv_t *
++__fe_nomask_env(void)
++{
++ __set_errno (ENOSYS);
++ return FE_ENABLED_ENV;
++}
++stub_warning (__fe_nomask_env)
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/fprrest.S glibc-2.2.5/sysdeps/powerpc/fpu/fprrest.S
+--- glibc-2.2.5.old/sysdeps/powerpc/fpu/fprrest.S Wed Dec 31 16:00:00 1969
++++ glibc-2.2.5/sysdeps/powerpc/fpu/fprrest.S Thu Jul 5 21:56:01 2001
+@@ -0,0 +1,94 @@
++/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C 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
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++/*
++ Floating Point Registers (FPRs) restore routine
++*/
++
++#include <sysdep.h>
++
++ENTRY(_restfpr_all)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf14)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_14)
++C_TEXT(_restf14):
++C_TEXT(_restfpr_14): lfd fp14,-144(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf15)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_15)
++C_TEXT(_restf15):
++C_TEXT(_restfpr_15): lfd fp15,-136(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf16)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_16)
++C_TEXT(_restf16):
++C_TEXT(_restfpr_16): lfd fp16,-128(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf17)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_17)
++C_TEXT(_restf17):
++C_TEXT(_restfpr_17): lfd fp17,-120(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf18)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_18)
++C_TEXT(_restf18):
++C_TEXT(_restfpr_18): lfd fp18,-112(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf19)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_19)
++C_TEXT(_restf19):
++C_TEXT(_restfpr_19): lfd fp19,-104(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf20)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_20)
++C_TEXT(_restf20):
++C_TEXT(_restfpr_20): lfd fp20,-96(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf21)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_21)
++C_TEXT(_restf21):
++C_TEXT(_restfpr_21): lfd fp21,-88(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf22)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_22)
++C_TEXT(_restf22):
++C_TEXT(_restfpr_22): lfd fp22,-80(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf23)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_23)
++C_TEXT(_restf23):
++C_TEXT(_restfpr_23): lfd fp23,-72(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf24)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_24)
++C_TEXT(_restf24):
++C_TEXT(_restfpr_24): lfd fp24,-64(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf25)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_25)
++C_TEXT(_restf25):
++C_TEXT(_restfpr_25): lfd fp25,-56(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf26)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_26)
++C_TEXT(_restf26):
++C_TEXT(_restfpr_26): lfd fp26,-48(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf27)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_27)
++C_TEXT(_restf27):
++C_TEXT(_restfpr_27): lfd fp27,-40(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf28)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_28)
++C_TEXT(_restf28):
++C_TEXT(_restfpr_28): lfd fp28,-32(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restf29)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_29)
++C_TEXT(_restf29):
++C_TEXT(_restfpr_29): lwz r0,8(r1) #get return address from frame
++ lfd fp29,-24(r1) #restore f29
++ mtlr r0 #move return address to LR
++ lfd fp30,-16(r1) #restore f30
++ lfd fp31,-8(r1) #restore f31
++ blr #return
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/fprsave.S glibc-2.2.5/sysdeps/powerpc/fpu/fprsave.S
+--- glibc-2.2.5.old/sysdeps/powerpc/fpu/fprsave.S Wed Dec 31 16:00:00 1969
++++ glibc-2.2.5/sysdeps/powerpc/fpu/fprsave.S Thu Jul 5 21:56:01 2001
+@@ -0,0 +1,93 @@
++/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C 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
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++/*
++ Floating Point Registers (FPRs) save routine
++*/
++
++#include <sysdep.h>
++
++ENTRY(_savefpr_all)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef14)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_14)
++C_TEXT(_savef14):
++C_TEXT(_savefpr_14): stfd fp14,-144(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef15)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_15)
++C_TEXT(_savef15):
++C_TEXT(_savefpr_15): stfd fp15,-136(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef16)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_16)
++C_TEXT(_savef16):
++C_TEXT(_savefpr_16): stfd fp16,-128(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef17)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_17)
++C_TEXT(_savef17):
++C_TEXT(_savefpr_17): stfd fp17,-120(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef18)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_18)
++C_TEXT(_savef18):
++C_TEXT(_savefpr_18): stfd fp18,-112(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef19)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_19)
++C_TEXT(_savef19):
++C_TEXT(_savefpr_19): stfd fp19,-104(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef20)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_20)
++C_TEXT(_savef20):
++C_TEXT(_savefpr_20): stfd fp20,-96(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef21)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_21)
++C_TEXT(_savef21):
++C_TEXT(_savefpr_21): stfd fp21,-88(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef22)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_22)
++C_TEXT(_savef22):
++C_TEXT(_savefpr_22): stfd fp22,-80(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef23)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_23)
++C_TEXT(_savef23):
++C_TEXT(_savefpr_23): stfd fp23,-72(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef24)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_24)
++C_TEXT(_savef24):
++C_TEXT(_savefpr_24): stfd fp24,-64(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef25)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_25)
++C_TEXT(_savef25):
++C_TEXT(_savefpr_25): stfd fp25,-56(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef26)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_26)
++C_TEXT(_savef26):
++C_TEXT(_savefpr_26): stfd fp26,-48(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef27)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_27)
++C_TEXT(_savef27):
++C_TEXT(_savefpr_27): stfd fp27,-40(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef28)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_28)
++C_TEXT(_savef28):
++C_TEXT(_savefpr_28): stfd fp28,-32(r1)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savef29)
++ ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_29)
++C_TEXT(_savef29):
++C_TEXT(_savefpr_29): stfd fp29,-24(r1) #save f29
++ stfd fp30,-16(r1) #save f30
++ stfd fp31,-8(r1) #save f31
++ stw r0,8(r1) #save LR in callers frame
++ blr #return
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/fpu_control.h glibc-2.2.5/sysdeps/powerpc/fpu/fpu_control.h
+--- glibc-2.2.5.old/sysdeps/powerpc/fpu/fpu_control.h Wed Dec 31 16:00:00 1969
++++ glibc-2.2.5/sysdeps/powerpc/fpu/fpu_control.h Thu Jul 5 21:56:01 2001
+@@ -0,0 +1,67 @@
++/* FPU control word definitions. PowerPC version.
++ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C 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
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _FPU_CONTROL_H
++#define _FPU_CONTROL_H
++
++/* rounding control */
++#define _FPU_RC_NEAREST 0x00 /* RECOMMENDED */
++#define _FPU_RC_DOWN 0x03
++#define _FPU_RC_UP 0x02
++#define _FPU_RC_ZERO 0x01
++
++#define _FPU_MASK_NI 0x04 /* non-ieee mode */
++
++/* masking of interrupts */
++#define _FPU_MASK_ZM 0x10 /* zero divide */
++#define _FPU_MASK_OM 0x40 /* overflow */
++#define _FPU_MASK_UM 0x20 /* underflow */
++#define _FPU_MASK_XM 0x08 /* inexact */
++#define _FPU_MASK_IM 0x80 /* invalid operation */
++
++#define _FPU_RESERVED 0xffffff00 /* These bits are reserved are not changed. */
++
++/* The fdlibm code requires no interrupts for exceptions. */
++#define _FPU_DEFAULT 0x00000000 /* Default value. */
++
++/* IEEE: same as above, but (some) exceptions;
++ we leave the 'inexact' exception off.
++ */
++#define _FPU_IEEE 0x000000f0
++
++/* Type of the control word. */
++typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__)));
++
++/* Macros for accessing the hardware control word. */
++#define _FPU_GETCW(cw) ( { \
++ union { double d; fpu_control_t cw[2]; } tmp __attribute__ ((__aligned__(8))); \
++ __asm__ ("mffs 0; stfd%U0 0,%0" : "=m" (tmp.d) : : "fr0"); \
++ (cw)=tmp.cw[1]; \
++ tmp.cw[1]; } )
++#define _FPU_SETCW(cw) { \
++ union { double d; fpu_control_t cw[2]; } tmp __attribute__ ((__aligned__(8))); \
++ tmp.cw[0] = 0xFFF80000; /* More-or-less arbitrary; this is a QNaN. */ \
++ tmp.cw[1] = cw; \
++ __asm__ ("lfd%U0 0,%0; mtfsf 255,0" : : "m" (tmp.d) : "fr0"); \
++}
++
++/* Default control word set at startup. */
++extern fpu_control_t __fpu_control;
++
++#endif /* _FPU_CONTROL_H */
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/setjmp.S glibc-2.2.5/sysdeps/powerpc/fpu/setjmp.S
+--- glibc-2.2.5.old/sysdeps/powerpc/fpu/setjmp.S Wed Dec 31 16:00:00 1969
++++ glibc-2.2.5/sysdeps/powerpc/fpu/setjmp.S Thu Jul 10 11:43:44 2003
+@@ -0,0 +1,73 @@
++/* setjmp for PowerPC.
++ Copyright (C) 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Library General Public License as
++ published by the Free Software Foundation; either version 2 of the
++ License, or (at your option) any later version.
++
++ The GNU C 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
++ Library General Public License for more details.
++
++ You should have received a copy of the GNU Library General Public
++ License along with the GNU C Library; see the file COPYING.LIB. If not,
++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA. */
++
++#include <sysdep.h>
++#define _ASM
++#define _SETJMP_H
++#include <bits/setjmp.h>
++#include <bp-sym.h>
++#include <bp-asm.h>
++
++ENTRY (BP_SYM (__sigsetjmp))
++ CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
++
++ stw r1,(JB_GPR1*4)(3)
++ mflr r0
++ stw r2,(JB_GPR2*4)(3)
++ stw r14,((JB_GPRS+0)*4)(3)
++ stfd fp14,((JB_FPRS+0*2)*4)(3)
++ stw r0,(JB_LR*4)(3)
++ stw r15,((JB_GPRS+1)*4)(3)
++ stfd fp15,((JB_FPRS+1*2)*4)(3)
++ mfcr r0
++ stw r16,((JB_GPRS+2)*4)(3)
++ stfd fp16,((JB_FPRS+2*2)*4)(3)
++ stw r0,(JB_CR*4)(3)
++ stw r17,((JB_GPRS+3)*4)(3)
++ stfd fp17,((JB_FPRS+3*2)*4)(3)
++ stw r18,((JB_GPRS+4)*4)(3)
++ stfd fp18,((JB_FPRS+4*2)*4)(3)
++ stw r19,((JB_GPRS+5)*4)(3)
++ stfd fp19,((JB_FPRS+5*2)*4)(3)
++ stw r20,((JB_GPRS+6)*4)(3)
++ stfd fp20,((JB_FPRS+6*2)*4)(3)
++ stw r21,((JB_GPRS+7)*4)(3)
++ stfd fp21,((JB_FPRS+7*2)*4)(3)
++ stw r22,((JB_GPRS+8)*4)(3)
++ stfd fp22,((JB_FPRS+8*2)*4)(3)
++ stw r23,((JB_GPRS+9)*4)(3)
++ stfd fp23,((JB_FPRS+9*2)*4)(3)
++ stw r24,((JB_GPRS+10)*4)(3)
++ stfd fp24,((JB_FPRS+10*2)*4)(3)
++ stw r25,((JB_GPRS+11)*4)(3)
++ stfd fp25,((JB_FPRS+11*2)*4)(3)
++ stw r26,((JB_GPRS+12)*4)(3)
++ stfd fp26,((JB_FPRS+12*2)*4)(3)
++ stw r27,((JB_GPRS+13)*4)(3)
++ stfd fp27,((JB_FPRS+13*2)*4)(3)
++ stw r28,((JB_GPRS+14)*4)(3)
++ stfd fp28,((JB_FPRS+14*2)*4)(3)
++ stw r29,((JB_GPRS+15)*4)(3)
++ stfd fp29,((JB_FPRS+15*2)*4)(3)
++ stw r30,((JB_GPRS+16)*4)(3)
++ stfd fp30,((JB_FPRS+16*2)*4)(3)
++ stw r31,((JB_GPRS+17)*4)(3)
++ stfd fp31,((JB_FPRS+17*2)*4)(3)
++ b JUMPTARGET (BP_SYM (__sigjmp_save))
++END (BP_SYM (__sigsetjmp))
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu_control.h glibc-2.2.5/sysdeps/powerpc/fpu_control.h
+--- glibc-2.2.5.old/sysdeps/powerpc/fpu_control.h Thu Jul 5 21:56:01 2001
++++ glibc-2.2.5/sysdeps/powerpc/fpu_control.h Wed Dec 31 16:00:00 1969
+@@ -1,67 +0,0 @@
+-/* FPU control word definitions. PowerPC version.
+- Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C 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
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#ifndef _FPU_CONTROL_H
+-#define _FPU_CONTROL_H
+-
+-/* rounding control */
+-#define _FPU_RC_NEAREST 0x00 /* RECOMMENDED */
+-#define _FPU_RC_DOWN 0x03
+-#define _FPU_RC_UP 0x02
+-#define _FPU_RC_ZERO 0x01
+-
+-#define _FPU_MASK_NI 0x04 /* non-ieee mode */
+-
+-/* masking of interrupts */
+-#define _FPU_MASK_ZM 0x10 /* zero divide */
+-#define _FPU_MASK_OM 0x40 /* overflow */
+-#define _FPU_MASK_UM 0x20 /* underflow */
+-#define _FPU_MASK_XM 0x08 /* inexact */
+-#define _FPU_MASK_IM 0x80 /* invalid operation */
+-
+-#define _FPU_RESERVED 0xffffff00 /* These bits are reserved are not changed. */
+-
+-/* The fdlibm code requires no interrupts for exceptions. */
+-#define _FPU_DEFAULT 0x00000000 /* Default value. */
+-
+-/* IEEE: same as above, but (some) exceptions;
+- we leave the 'inexact' exception off.
+- */
+-#define _FPU_IEEE 0x000000f0
+-
+-/* Type of the control word. */
+-typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__)));
+-
+-/* Macros for accessing the hardware control word. */
+-#define _FPU_GETCW(cw) ( { \
+- union { double d; fpu_control_t cw[2]; } tmp __attribute__ ((__aligned__(8))); \
+- __asm__ ("mffs 0; stfd%U0 0,%0" : "=m" (tmp.d) : : "fr0"); \
+- (cw)=tmp.cw[1]; \
+- tmp.cw[1]; } )
+-#define _FPU_SETCW(cw) { \
+- union { double d; fpu_control_t cw[2]; } tmp __attribute__ ((__aligned__(8))); \
+- tmp.cw[0] = 0xFFF80000; /* More-or-less arbitrary; this is a QNaN. */ \
+- tmp.cw[1] = cw; \
+- __asm__ ("lfd%U0 0,%0; mtfsf 255,0" : : "m" (tmp.d) : "fr0"); \
+-}
+-
+-/* Default control word set at startup. */
+-extern fpu_control_t __fpu_control;
+-
+-#endif /* _FPU_CONTROL_H */
+diff -Naur glibc-2.2.5.old/sysdeps/powerpc/setjmp.S glibc-2.2.5/sysdeps/powerpc/setjmp.S
+--- glibc-2.2.5.old/sysdeps/powerpc/setjmp.S Thu Jul 5 21:56:01 2001
++++ glibc-2.2.5/sysdeps/powerpc/setjmp.S Thu Jul 10 11:43:44 2003
+@@ -24,6 +24,8 @@
+ #include <bp-sym.h>
+ #include <bp-asm.h>
+
++/* The FPU stores have been removed from this file - see fpu/setjmp.S */
++
+ ENTRY (BP_SYM (__sigsetjmp))
+ CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
+
+@@ -31,43 +33,25 @@
+ mflr r0
+ stw r2,(JB_GPR2*4)(3)
+ stw r14,((JB_GPRS+0)*4)(3)
+- stfd fp14,((JB_FPRS+0*2)*4)(3)
+ stw r0,(JB_LR*4)(3)
+ stw r15,((JB_GPRS+1)*4)(3)
+- stfd fp15,((JB_FPRS+1*2)*4)(3)
+ mfcr r0
+ stw r16,((JB_GPRS+2)*4)(3)
+- stfd fp16,((JB_FPRS+2*2)*4)(3)
+ stw r0,(JB_CR*4)(3)
+ stw r17,((JB_GPRS+3)*4)(3)
+- stfd fp17,((JB_FPRS+3*2)*4)(3)
+ stw r18,((JB_GPRS+4)*4)(3)
+- stfd fp18,((JB_FPRS+4*2)*4)(3)
+ stw r19,((JB_GPRS+5)*4)(3)
+- stfd fp19,((JB_FPRS+5*2)*4)(3)
+ stw r20,((JB_GPRS+6)*4)(3)
+- stfd fp20,((JB_FPRS+6*2)*4)(3)
+ stw r21,((JB_GPRS+7)*4)(3)
+- stfd fp21,((JB_FPRS+7*2)*4)(3)
+ stw r22,((JB_GPRS+8)*4)(3)
+- stfd fp22,((JB_FPRS+8*2)*4)(3)
+ stw r23,((JB_GPRS+9)*4)(3)
+- stfd fp23,((JB_FPRS+9*2)*4)(3)
+ stw r24,((JB_GPRS+10)*4)(3)
+- stfd fp24,((JB_FPRS+10*2)*4)(3)
+ stw r25,((JB_GPRS+11)*4)(3)
+- stfd fp25,((JB_FPRS+11*2)*4)(3)
+ stw r26,((JB_GPRS+12)*4)(3)
+- stfd fp26,((JB_FPRS+12*2)*4)(3)
+ stw r27,((JB_GPRS+13)*4)(3)
+- stfd fp27,((JB_FPRS+13*2)*4)(3)
+ stw r28,((JB_GPRS+14)*4)(3)
+- stfd fp28,((JB_FPRS+14*2)*4)(3)
+ stw r29,((JB_GPRS+15)*4)(3)
+- stfd fp29,((JB_FPRS+15*2)*4)(3)
+ stw r30,((JB_GPRS+16)*4)(3)
+- stfd fp30,((JB_FPRS+16*2)*4)(3)
+ stw r31,((JB_GPRS+17)*4)(3)
+- stfd fp31,((JB_FPRS+17*2)*4)(3)
+ b JUMPTARGET (BP_SYM (__sigjmp_save))
+ END (BP_SYM (__sigsetjmp))
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-i386-pwrite64.patch b/patches/glibc/2.2.5/glibc-2.2.5-i386-pwrite64.patch
new file mode 100644
index 0000000..761771f
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-i386-pwrite64.patch
@@ -0,0 +1,20 @@
+diff -urN glibc-2.2.5-orig/sysdeps/unix/sysv/linux/i386/sysdep.h glibc-2.2.5/sysdeps/unix/sysv/linux/i386/sysdep.h
+--- glibc-2.2.5-orig/sysdeps/unix/sysv/linux/i386/sysdep.h 2001-07-06 06:56:16.000000000 +0200
++++ glibc-2.2.5/sysdeps/unix/sysv/linux/i386/sysdep.h 2004-09-03 12:35:44.000000000 +0200
+@@ -36,6 +36,16 @@
+ #undef L
+ #define L(name) .L##name
+
++/* This is a kludge to make syscalls.list find these under the names
++ * pread and pwrite, since some kernel headers define those names
++ * and some define the *64 names for the same system calls. */
++#if !defined __NR_pread && defined __NR_pread64
++# define __NR_pread __NR_pread64
++#endif
++#if !defined __NR_pwrite && defined __NR_pwrite64
++# define __NR_pwrite __NR_pwrite64
++#endif
++
+ #ifdef __ASSEMBLER__
+
+ /* Linux uses a negative return value to indicate syscall errors,
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-m68k-pwrite.patch b/patches/glibc/2.2.5/glibc-2.2.5-m68k-pwrite.patch
new file mode 100644
index 0000000..eefc6fa
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-m68k-pwrite.patch
@@ -0,0 +1,32 @@
+Copied from similar patch for other architectures.
+
+Should fix this error:
+../sysdeps/unix/sysv/linux/pread.c: In function `__libc_pread':
+../sysdeps/unix/sysv/linux/pread.c:53: `__NR_pread' undeclared (first use in this function)
+../sysdeps/unix/sysv/linux/pread.c:53: (Each undeclared identifier is reported only once
+../sysdeps/unix/sysv/linux/pread.c:53: for each function it appears in.)
+make[2]: *** [/home/dank/wk/crosstool-0.28-rc37/build/m68k-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.5/build-glibc/posix/pread.o] Error 1
+make[2]: Leaving directory `/home/dank/wk/crosstool-0.28-rc37/build/m68k-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.5/glibc-2.2.5/posix'
+make[1]: *** [posix/subdir_lib] Error 2
+make[1]: Leaving directory `/home/dank/wk/crosstool-0.28-rc37/build/m68k-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.5/glibc-2.2.5'
+make: *** [all] Error 2
+
+--- glibc-2.2.5/sysdeps/unix/sysv/linux/m68k/sysdep.h.old 2004-10-05 08:37:37.000000000 -0700
++++ glibc-2.2.5/sysdeps/unix/sysv/linux/m68k/sysdep.h 2004-10-05 08:38:22.000000000 -0700
+@@ -32,6 +32,16 @@
+ # define SYS_ify(syscall_name) __NR_/**/syscall_name
+ #endif
+
++/* This is a kludge to make syscalls.list find these under the names
++ pread and pwrite, since some kernel headers define those names
++ and some define the *64 names for the same system calls. */
++#if !defined __NR_pread && defined __NR_pread64
++# define __NR_pread __NR_pread64
++#endif
++#if !defined __NR_pwrite && defined __NR_pwrite64
++# define __NR_pwrite __NR_pwrite64
++#endif
++
+ #ifdef __ASSEMBLER__
+
+ /* Linux uses a negative return value to indicate syscall errors, unlike
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-mips-build-gmon.patch b/patches/glibc/2.2.5/glibc-2.2.5-mips-build-gmon.patch
new file mode 100644
index 0000000..a8267e6
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-mips-build-gmon.patch
@@ -0,0 +1,86 @@
+From http://www.ltc.com/~brad/mips/glibc-2.2.5-mips-build-gmon.diff
+See http://www.ltc.com/~brad/mips/mips-cross-toolchain.html
+
+--- glibc-2.2.5/sysdeps/mips/machine-gmon.h 2001-08-13 04:42:44.000000000 -0400
++++ glibc-2.2.5/sysdeps/mips/machine-gmon.h 2002-09-25 17:10:59.000000000 -0400
+@@ -17,42 +17,52 @@
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+-#define _MCOUNT_DECL static void __mcount
++#define _MCOUNT_DECL(frompc,selfpc) \
++static void __attribute_used__ __mcount (u_long frompc, u_long selfpc)
+
+ /* Call __mcount with our the return PC for our caller,
+ and the return PC our caller will return to. */
+ #ifdef __PIC__
+ #define CPLOAD ".cpload $25;"
++#define CPRESTORE ".cprestore 44\n\t"
+ #else
+ #define CPLOAD
++#define CPRESTORE
+ #endif
+
+ #define MCOUNT asm(\
+- ".globl _mcount;" \
+- ".align 2;" \
+- ".type _mcount,@function;" \
+- "_mcount:;" \
+- ".set noreorder;" \
+- ".set noat;" \
++ ".globl _mcount;\n\t" \
++ ".align 2;\n\t" \
++ ".type _mcount,@function;\n\t" \
++ ".ent _mcount\n\t" \
++ "_mcount:\n\t" \
++ ".frame $sp,44,$31\n\t" \
++ ".set noreorder;\n\t" \
++ ".set noat;\n\t" \
+ CPLOAD \
+- "sw $4,8($29);" \
+- "sw $5,12($29);" \
+- "sw $6,16($29);" \
+- "sw $7,20($29);" \
+- "sw $1,0($29);" \
+- "sw $31,4($29);" \
+- "move $5,$31;" \
+- "move $4,$1;" \
+- "jal __mcount;" \
+- "nop;" \
+- "lw $4,8($29);" \
+- "lw $5,12($29);" \
+- "lw $6,16($29);" \
+- "lw $7,20($29);" \
+- "lw $31,4($29);" \
+- "lw $1,0($29);" \
+- "addu $29,$29,8;" \
+- "j $31;" \
+- "move $31,$1;" \
+- ".set reorder;" \
+- ".set at");
++ "subu $29,$29,48;\n\t" \
++ CPRESTORE \
++ "sw $4,24($29);\n\t" \
++ "sw $5,28($29);\n\t" \
++ "sw $6,32($29);\n\t" \
++ "sw $7,36($29);\n\t" \
++ "sw $2,40($29);\n\t" \
++ "sw $1,16($29);\n\t" \
++ "sw $31,20($29);\n\t" \
++ "move $5,$31;\n\t" \
++ "move $4,$1;\n\t" \
++ "jal __mcount;\n\t" \
++ "nop;\n\t" \
++ "lw $4,24($29);\n\t" \
++ "lw $5,28($29);\n\t" \
++ "lw $6,32($29);\n\t" \
++ "lw $7,36($29);\n\t" \
++ "lw $2,40($29);\n\t" \
++ "lw $31,20($29);\n\t" \
++ "lw $1,16($29);\n\t" \
++ "addu $29,$29,56;\n\t" \
++ "j $31;\n\t" \
++ "move $31,$1;\n\t" \
++ ".set reorder;\n\t" \
++ ".set at\n\t" \
++ ".end _mcount");
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-mips-clone-local-label.patch b/patches/glibc/2.2.5/glibc-2.2.5-mips-clone-local-label.patch
new file mode 100644
index 0000000..66fee29
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-mips-clone-local-label.patch
@@ -0,0 +1,47 @@
+This is a workaround for
+
+mipsel-unknown-linux-gnu-gcc ../sysdeps/unix/sysv/linux/mips/clone.S -c -I../include -I. -I/home3/dank/crosstool-0.7/build/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/misc -I.. -I../libio -I/home3/dank/crosstool-0.7/build/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc -I../sysdeps/mips/elf -I../linuxthreads/sysdeps/unix/sysv/linux -I../linuxthreads/sysdeps/pthread -I../sysdeps/pthread -I../linuxthreads/sysdeps/unix/sysv -I../linuxthreads/sysdeps/unix -I../linuxthreads/sysdeps/mips -I../sysdeps/unix/sysv/linux/mips -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/mips -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/mips/mipsel -I../sysdeps/mips/fpu -I../sysdeps/mips -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -nostdinc -isystem /home3/dank/crosstool-0.7/result/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/lib/gcc-lib/mipsel-unknown-linux-gnu/3.2.3/include -isystem /home3/dank/crosstool-0.7/result/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/mipsel-unknown-linux-gnu/include -D_LIBC_REENTRANT -include ../include/libc-symbols.h -DPIC -DASSEMBLER -o /home3/dank/crosstool-0.7/build/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/misc/clone.o
+../sysdeps/unix/sysv/linux/mips/clone.S: Assembler messages:
+../sysdeps/unix/sysv/linux/mips/clone.S:66: Error: Can not represent BFD_RELOC_16_PCREL_S2 relocation in this object file format
+make[2]: *** [/home3/dank/crosstool-0.7/build/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/misc/clone.o] Error 1
+
+which was using h.j.lu's binutils-2.13.90.0.18.
+
+
+But see http://lists.debian.org/debian-mips/2003/debian-mips-200305/msg00011.html
+which says
+"A newer version of binutils (CVS post 2003-03-12) fixes it without
+the need of changing perfectly legal code."
+So presumably this can be ditched sooner or later.
+
+From http://honk.physik.uni-konstanz.de/~agx/linux-mips/glibc/patches/applied/clone-local-label.diff
+
+2003-03-13 Guido Guenther <agx@sigxcpu.org>
+
+ * sysdeps/unix/sysv/linux/mips/clone.S: introduce and use local label
+ .Lthread_start since current binutils don't allow branches to globally
+ visible symbols.
+
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/mips/clone.S,v
+retrieving revision 1.10
+diff -u -r1.10 clone.S
+--- glibc-2.2.5/sysdeps/unix/sysv/linux/mips/clone.S 12 Mar 2003 01:04:51 -0000 1.10
++++ glibc-2.2.5/sysdeps/unix/sysv/linux/mips/clone.S 12 Mar 2003 19:04:39 -0000
+@@ -63,7 +63,7 @@
+ syscall
+
+ bnez a3,error
+- beqz v0,__thread_start
++ beqz v0,.Lthread_start
+
+ /* Successful return from the parent */
+ addiu sp,32
+@@ -85,6 +85,7 @@
+ debug info. */
+
+ ENTRY(__thread_start)
++.Lthread_start:
+ /* cp is already loaded. */
+ .cprestore 16
+ /* The stackframe has been created on entry of clone(). */
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.56.patch b/patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.56.patch
new file mode 100644
index 0000000..4276eee
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.56.patch
@@ -0,0 +1,31 @@
+wget http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/mips/dl-machine.h.diff?r1=1.55&r2=1.56&cvsroot=glibc
+
+Changelog:
+ (__dl_runtime_resolve): Remove `const' from `got'.
+
+Fixes error
+
+dl-runtime.c: In function `__dl_runtime_resolve':
+dl-runtime.c:235: error: assignment of read-only location
+make[2]: *** [/home/dank/crosstool-0.28-rc32/build/mipsel-unknown-linux-gnu/gcc-3.4.0-glibc-2.2.5/build-glibc/elf/dl-runtime.o] Error 1
+
+when building mipsel-gcc-3.4.0-glibc-2.2.5
+
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/mips/dl-machine.h,v
+retrieving revision 1.55
+retrieving revision 1.56
+diff -u -r1.55 -r1.56
+--- libc/sysdeps/mips/dl-machine.h 2001/09/08 17:16:44 1.55
++++ libc/sysdeps/mips/dl-machine.h 2002/01/17 23:21:33 1.56
+@@ -276,8 +276,8 @@
+ = (const void *) D_PTR (l, l_info[DT_SYMTAB]); \
+ const char *strtab \
+ = (const void *) D_PTR (l, l_info[DT_STRTAB]); \
+- const ElfW(Addr) *got \
+- = (const ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]); \
++ ElfW(Addr) *got \
++ = (ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]); \
+ const ElfW(Word) local_gotno \
+ = (const ElfW(Word)) l->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val; \
+ const ElfW(Word) gotsym \
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.57.patch b/patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.57.patch
new file mode 100644
index 0000000..129cffa
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.57.patch
@@ -0,0 +1,43 @@
+wget 'http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/mips/dl-machine.h.diff?r1=1.57&r2=1.58&cvsroot=glibc'
+
+ChangeLog:
+ (ELF_MACHINE_BEFORE_RTLD_RELOC): Don't use label at end of compound statement.
+
+Fixes error
+
+rtld.c: In function `_dl_start':
+rtld.c:183: error: label at end of compound statement
+make[2]: *** [/home/dank/wk/crosstool-0.28-rc32/build/mipsel-unknown-linux-gnu/gcc-3.4.0-glibc-2.2.5/build-glibc/elf/rtld.os] Error 1
+
+
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/mips/dl-machine.h,v
+retrieving revision 1.56
+retrieving revision 1.57
+diff -u -r1.56 -r1.57
+--- libc/sysdeps/mips/dl-machine.h 2002/01/17 23:21:33 1.56
++++ libc/sysdeps/mips/dl-machine.h 2002/01/29 02:58:00 1.57
+@@ -1,5 +1,5 @@
+ /* Machine-dependent ELF dynamic relocation inline functions. MIPS version.
+- Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
++ Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Kazumoto Kojima <kkojima@info.kanagawa-u.ac.jp>.
+
+@@ -132,7 +132,7 @@
+ got = (ElfW(Addr) *) D_PTR (map, l_info[DT_PLTGOT]); \
+ \
+ if (__builtin_expect (map->l_addr == 0, 1)) \
+- goto done; \
++ break; \
+ \
+ /* got[0] is reserved. got[1] is also reserved for the dynamic object \
+ generated by gnu ld. Skip these reserved entries from \
+@@ -169,7 +169,6 @@
+ got++; \
+ sym++; \
+ } \
+-done: \
+ } while(0)
+
+
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.59-kinda.patch b/patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.59-kinda.patch
new file mode 100644
index 0000000..ef174c2
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.59-kinda.patch
@@ -0,0 +1,35 @@
+Fixes error
+
+In file included from dynamic-link.h:21,
+ from dl-load.c:32:
+../sysdeps/mips/dl-machine.h:454: error: parse error before "$29"
+../sysdeps/mips/dl-machine.h:454: warning: type defaults to `int' in declaration of `$29'
+../sysdeps/mips/dl-machine.h:454: error: stray '\' in program
+../sysdeps/mips/dl-machine.h:454: error: syntax error at '#' token
+../sysdeps/mips/dl-machine.h:454: error: stray '\' in program
+../sysdeps/mips/dl-machine.h:454: error: stray '\' in program
+../sysdeps/mips/dl-machine.h:454: error: syntax error at '#' token
+../sysdeps/mips/dl-machine.h:454: error: stray '\' in program
+../sysdeps/mips/dl-machine.h:454: error: stray '\' in program
+../sysdeps/mips/dl-machine.h:454: error: stray '\' in program
+../sysdeps/mips/dl-machine.h:454: error: stray '\' in program
+../sysdeps/mips/dl-machine.h:454: error: missing terminating " character
+...
+make[2]: *** [/home/dank/wk/crosstool-0.28-rc24/build/mipsel-unknown-linux-gnu/gcc-3.4.0-glibc-2.2.5/build-glibc/elf/dl-load.o] Error 1
+make[2]: Leaving directory `/home/dank/wk/crosstool-0.28-rc24/build/mipsel-unknown-linux-gnu/gcc-3.4.0-glibc-2.2.5/glibc-2.2.5/elf'
+
+See also http://sources.redhat.com/ml/crossgcc/2003-12/msg00014.html
+
+===================================================================
+diff -u -r1.58 -r1.59
+--- libc/sysdeps/mips/dl-machine.h 2002/02/01 01:31:55 1.58
++++ libc/sysdeps/mips/dl-machine.h 2002/02/03 00:29:15 1.59
+@@ -449,7 +449,7 @@
+ addu $7, $7, 4\n\
+ subu $29, 16\n\
+ # Call the function to run the initializers.\n\
+- jal _dl_init
++ jal _dl_init\n\
+ addiu $29, 16\n\
+ # Pass our finalizer function to the user in $2 as per ELF ABI.\n\
+ la $2, _dl_fini\n\
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.60.patch b/patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.60.patch
new file mode 100644
index 0000000..ea3e28c
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-mips-dl-machine-1.60.patch
@@ -0,0 +1,53 @@
+Message-ID: <20040926095115.9204.qmail@webmail-2-5.mesa1.secureserver.net>
+Date: Sun, 26 Sep 2004 02:51:15 -0700
+From: ml@bitbash.net
+Subject: RE: crosstool-0.28-rc36: ld.so.1 undefined reference
+To: Dan Kegel <dank@kegel.com>
+cc: crossgcc@sources.redhat.com
+
+gcc-3.4.0-glibc-2.2.5 barfs with a few undefined refereces and multiple
+definitions. The follwing patch seems to take care of the undefined
+reference of __dl_runtime_resolve symbol.
+
+Filename: patches/glibc-2.2.5/glibc-2.2.5-mips-dl-machine-1.60.patch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Retrieved with
+wget 'http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/mips/dl-machine.h.diff?r1=1.59&r2=1.60&cvsroot=glibc'
+See http://sources.redhat.com/ml/libc-alpha/2002-02/msg00091.html
+See also glibc-2.2.5-mips-build-gmon.patch, which takes care of the other part of this for mips.
+
+ChangeLog:
+ sysdeps/mips/dl-machine.h (elf_machine_matches_host): Use
+ __attribute_used__.
+ (__dl_runtime_resolve): Likewise.
+
+Fixes error
+
+/home/cross/crosstool-0.28-rc36/build/mips-unknown-linux-gnu/gcc-3.4.0-glibc-2.2.5/build-glibc/elf/ld.so.1:
+undefined reference to `__dl_runtime_resolve'
+
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/mips/dl-machine.h,v
+retrieving revision 1.59
+retrieving revision 1.60
+diff -u -r1.59 -r1.60
+--- libc/sysdeps/mips/dl-machine.h 2002/02/03 00:29:15 1.59
++++ libc/sysdeps/mips/dl-machine.h 2002/02/08 18:56:57 1.60
+@@ -69,7 +69,7 @@
+ } while (0)
+
+ /* Return nonzero iff ELF header is compatible with the running host. */
+-static inline int __attribute__ ((unused))
++static inline int __attribute_used__
+ elf_machine_matches_host (const ElfW(Ehdr) *ehdr)
+ {
+ switch (ehdr->e_machine)
+@@ -262,7 +262,7 @@
+ /* This is called from assembly stubs below which the compiler can't see. */ \
+ static ElfW(Addr) \
+ __dl_runtime_resolve (ElfW(Word), ElfW(Word), ElfW(Addr), ElfW(Addr)) \
+- __attribute__ ((unused)); \
++ __attribute_used__; \
+ \
+ static ElfW(Addr) \
+ __dl_runtime_resolve (ElfW(Word) sym_index, \
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-powerpc-as.patch b/patches/glibc/2.2.5/glibc-2.2.5-powerpc-as.patch
new file mode 100644
index 0000000..c070bd4
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-powerpc-as.patch
@@ -0,0 +1,29 @@
+Based on glibc-2.3.2/glibc-2.3.2-powerpc-as.patch
+
+Fixes the following errors when building glibc for ppc7450:
+
+/tmp/ccwlHdbl.s: Assembler messages:
+/tmp/ccwlHdbl.s:73: Error: Unrecognized opcode: `stvx'
+/tmp/ccwlHdbl.s:74: Error: Unrecognized opcode: `mfvrsave'
+/tmp/ccwlHdbl.s:300: Error: Unrecognized opcode: `lvx'
+/tmp/ccwlHdbl.s:302: Error: Unrecognized opcode: `mtvrsave'
+make[2]: *** [/usr/local/src/crosstool-0.28-rc34/build/powerpc-7450-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/libio/iopopen.o] Error 1
+make[2]: Leaving directory `/home/local/src/crosstool-0.28-rc34/build/powerpc-7450-linux-gnu/gcc-3.2.3-glibc-2.2.5/glibc-2.2.5/libio'
+make[1]: *** [libio/subdir_lib] Error 2
+make[1]: Leaving directory `/home/local/src/crosstool-0.28-rc34/build/powerpc-7450-linux-gnu/gcc-3.2.3-glibc-2.2.5/glibc-2.2.5'
+make: *** [all] Error 2
+
+Contributed by Tom Warzeka <waz@quahog.npt.nuwc.navy.mil>
+
+===================================================================
+--- glibc-2.2.5/sysdeps/powerpc/Makefile~ 2004-08-31 14:59:15.000000000 -0400
++++ glibc-2.2.5/sysdeps/powerpc/Makefile 2004-09-02 19:47:21.000000000 -0400
+@@ -1,7 +1,6 @@
+ # We always want to use the new mnemonic syntax even if we are on a RS6000
+ # machine.
+-+cflags += -mnew-mnemonics -Wa,-mppc -mpowerpc
+-asm-CPPFLAGS += -Wa,-mppc
+++cflags += -mnew-mnemonics
+
+ ifeq ($(subdir),gmon)
+ sysdep_routines += ppc-mcount
diff --git a/patches/glibc/2.2.5/glibc-2.2.5-ppc405erratum77.patch b/patches/glibc/2.2.5/glibc-2.2.5-ppc405erratum77.patch
new file mode 100644
index 0000000..2267f85
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.2.5-ppc405erratum77.patch
@@ -0,0 +1,65 @@
+# see http://bugs.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&pr=4155
+# and http://www.kegel.com/xgcc3/ppc405erratum77.html
+# See also matching patch for linuxthreads
+
+diff -aur glibc-2.2.5.orig/sysdeps/powerpc/atomicity.h glibc-2.2.5/sysdeps/powerpc/atomicity.h
+--- glibc-2.2.5.orig/sysdeps/powerpc/atomicity.h Thu Jul 5 21:56:01 2001
++++ glibc-2.2.5/sysdeps/powerpc/atomicity.h Tue Jul 23 05:39:38 2002
+@@ -28,6 +28,17 @@
+ # define __ATOMICITY_INLINE inline
+ #endif
+
++#ifdef __PPC405__
++/* workaround for PPC405 erratum #77 - Mark Hatle, dank. References:
++ http://www-3.ibm.com/chips/techlib/techlib.nsf/techdocs/89DED00DEBFF54BF87256A8000491BA2/$file/405CR_C_errata_1_2.pdf
++ http://ppc.bkbits.net:8080/linuxppc_2_4_devel/cset@1.489
++ http://www.kegel.com/xgcc3/ppc405erratum77.html
++ FIXME: using dbct instead of sync would be faster */
++#define __LIBC_PPC405_ERR77_SYNC "sync \n\t"
++#else
++#define __LIBC_PPC405_ERR77_SYNC
++#endif
++
+ static __ATOMICITY_INLINE int
+ __attribute__ ((unused))
+ exchange_and_add (volatile uint32_t *mem, int val)
+@@ -36,6 +47,7 @@
+ __asm__ ("\n\
+ 0: lwarx %0,0,%2 \n\
+ add%I3 %1,%0,%3 \n\
++ " __LIBC_PPC405_ERR77_SYNC "\n\
+ stwcx. %1,0,%2 \n\
+ bne- 0b \n\
+ " : "=&b"(result), "=&r"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory");
+@@ -50,6 +62,7 @@
+ __asm__ ("\n\
+ 0: lwarx %0,0,%1 \n\
+ add%I2 %0,%0,%2 \n\
++ " __LIBC_PPC405_ERR77_SYNC "\n\
+ stwcx. %0,0,%1 \n\
+ bne- 0b \n\
+ " : "=&b"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory");
+@@ -65,6 +78,7 @@
+ sub%I2c. %0,%0,%2 \n\
+ cntlzw %0,%0 \n\
+ bne- 1f \n\
++ " __LIBC_PPC405_ERR77_SYNC "\n\
+ stwcx. %3,0,%1 \n\
+ bne- 0b \n\
+ 1: \n\
+@@ -79,6 +93,7 @@
+ long int result;
+ __asm__ ("\n\
+ 0: lwarx %0,0,%1 \n\
++ " __LIBC_PPC405_ERR77_SYNC "\n\
+ stwcx. %2,0,%1 \n\
+ bne- 0b \n\
+ " : "=&r"(result) : "r"(p), "r"(newval) : "cr0", "memory");
+@@ -94,6 +109,7 @@
+ 0: lwarx %0,0,%1 \n\
+ cmpwi %0,0 \n\
+ bne- 1f \n\
++ " __LIBC_PPC405_ERR77_SYNC "\n\
+ stwcx. %2,0,%1 \n\
+ bne- 0b \n\
+ 1: \n\
diff --git a/patches/glibc/2.2.5/glibc-2.3.2-allow-gcc-3.5-xdr.patch b/patches/glibc/2.2.5/glibc-2.3.2-allow-gcc-3.5-xdr.patch
new file mode 100644
index 0000000..4d811e9
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-2.3.2-allow-gcc-3.5-xdr.patch
@@ -0,0 +1,44 @@
+http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sunrpc/rpc/xdr.h.diff?r1=1.27&r2=1.28&cvsroot=glibc
+(but see also http://sources.redhat.com/ml/libc-alpha/2004-03/msg00267.html
+and http://gcc.gnu.org/ml/gcc-patches/2004-03/msg02056.html)
+
+Fixes errors
+
+rpc_cmsg.c: In function `xdr_callmsg':
+rpc_cmsg.c:70: error: invalid lvalue in increment
+rpc_cmsg.c:71: error: invalid lvalue in increment
+rpc_cmsg.c:74: error: invalid lvalue in increment
+rpc_cmsg.c:77: error: invalid lvalue in increment
+rpc_cmsg.c:78: error: invalid lvalue in increment
+rpc_cmsg.c:79: error: invalid lvalue in increment
+rpc_cmsg.c:81: error: invalid lvalue in increment
+rpc_cmsg.c:89: error: invalid lvalue in increment
+rpc_cmsg.c:106: error: invalid lvalue in increment
+rpc_cmsg.c:107: error: invalid lvalue in increment
+rpc_cmsg.c:112: error: invalid lvalue in increment
+rpc_cmsg.c:117: error: invalid lvalue in increment
+rpc_cmsg.c:118: error: invalid lvalue in increment
+rpc_cmsg.c:119: error: invalid lvalue in increment
+rpc_cmsg.c:121: error: invalid lvalue in increment
+rpc_cmsg.c:160: error: invalid lvalue in increment
+
+===================================================================
+RCS file: /cvs/glibc/libc/sunrpc/rpc/xdr.h,v
+retrieving revision 1.27
+retrieving revision 1.28
+diff -u -r1.27 -r1.28
+--- libc/sunrpc/rpc/xdr.h 2002/12/16 02:05:49 1.27
++++ libc/sunrpc/rpc/xdr.h 2004/03/22 10:52:33 1.28
+@@ -262,10 +262,8 @@
+ * and shouldn't be used any longer. Code which use this defines or longs
+ * in the RPC code will not work on 64bit Solaris platforms !
+ */
+-#define IXDR_GET_LONG(buf) \
+- ((long)ntohl((u_long)*__extension__((u_int32_t*)(buf))++))
+-#define IXDR_PUT_LONG(buf, v) \
+- (*__extension__((u_int32_t*)(buf))++ = (long)htonl((u_long)(v)))
++#define IXDR_GET_LONG(buf) ((long)IXDR_GET_U_INT32(buf))
++#define IXDR_PUT_LONG(buf, v) ((long)IXDR_PUT_INT32(buf, (long)(v)))
+ #define IXDR_GET_U_LONG(buf) ((u_long)IXDR_GET_LONG(buf))
+ #define IXDR_PUT_U_LONG(buf, v) IXDR_PUT_LONG(buf, (long)(v))
+
diff --git a/patches/glibc/2.2.5/glibc-drow-sh.patch b/patches/glibc/2.2.5/glibc-drow-sh.patch
new file mode 100644
index 0000000..82984e5
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-drow-sh.patch
@@ -0,0 +1,77 @@
+[pread changes deleted, since those seem to be specific to glibc-2.3.2]
+
+Date: Thu, 19 Jun 2003 20:02:07 -0400
+From: Daniel Jacobowitz <drow@false.org>
+Subject: [linux-sh:02808] Patch needed for CVS glibc on SH
+To: linux-sh@m17n.org, libc-alpha@sources.redhat.com
+Message-Id: <20030620000207.GA19907@nevyn.them.org>
+X-ML-Name: linux-sh
+X-Mail-Count: 02808
+X-MLServer: fml [fml 4.0.1]; post only (only members can post)
+X-ML-Info: If you have a question, send e-mail with the body
+ "help" (without quotes) to the address linux-sh-ctl@m17n.org;
+ help=<mailto:linux-sh-ctl@m17n.org?body=help>
+Mail-Followup-To: linux-sh@m17n.org, libc-alpha@sources.redhat.com
+Content-Disposition: inline
+User-Agent: Mutt/1.5.1i
+Mime-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+Precedence: bulk
+Lines: 74
+List-Software: fml [fml 4.0.1]
+List-Post: <mailto:linux-sh@m17n.org>
+List-Owner: <mailto:linux-sh-admin@m17n.org>
+List-Help: <mailto:linux-sh-ctl@m17n.org?body=help>
+List-Unsubscribe: <mailto:linux-sh-ctl@m17n.org?body=unsubscribe>
+List-Id: linux-sh.m17n.org
+
+I believe this flushes my current patches to make glibc work on SH. Issues:
+ - MIPS pread functions have some wackiness in them for the MIPS calling
+ conventions, which align long longs to even register pairs; it appears
+ that SH does not do this. This fixes pread64/pwrite64.
+ - st_ino is _NOT_ 64-bit in the latest SH kernel trees, or at least it
+ wasn't when I checked in April. --enable-kernel=2.4.x breaks terribly
+ without this patch; the errors are along the lines of "version GLIBC_2.3
+ not found", because that's the first consequence of a messed up inode
+ field - ld.so compares by inodes at some point.
+
+--
+Daniel Jacobowitz
+MontaVista Software Debian GNU/Linux Developer
+
+2003-06-19 Daniel Jacobowitz <drow@mvista.com>
+
+ * sysdeps/unix/sysv/linux/kernel-features.h: Update kernel features
+ for the SH architecture.
+ * sysdeps/unix/sysv/linux/sh/pread.c: Use generic Linux version
+ instead of the MIPS version.
+ * sysdeps/unix/sysv/linux/sh/pread64.c: Likewise.
+ * sysdeps/unix/sysv/linux/sh/pwrite.c: Likewise.
+ * sysdeps/unix/sysv/linux/sh/pwrite64.c: Likewise.
+
+--- glibc-2.3.2/sysdeps/unix/sysv/linux/kernel-features.h.org 2003-04-21 10:57:55.000000000 -0400
++++ glibc-2.3.2/sysdeps/unix/sysv/linux/kernel-features.h 2003-04-21 11:16:47.000000000 -0400
+@@ -151,11 +151,20 @@
+
+ /* The changed st_ino field appeared in 2.4.0-test6. But we cannot
+ distinguish this version from other 2.4.0 releases. Therefore play
+- save and assume it available is for 2.4.1 and up. */
+-#if __LINUX_KERNEL_VERSION >= 132097
++ save and assume it available is for 2.4.1 and up. However, SH is lame,
++ and still does not have a 64-bit inode field. */
++#if __LINUX_KERNEL_VERSION >= 132097 \
++ && !defined __sh__
+ # define __ASSUME_ST_INO_64_BIT 1
+ #endif
+
++/* SH kernels got stat64, mmap2, and truncate64 during 2.4.0-test. */
++#if __LINUX_KERNEL_VERSION >= 132096 && defined __sh__
++# define __ASSUME_TRUNCATE64_SYSCALL 1
++# define __ASSUME_MMAP2_SYSCALL 1
++# define __ASSUME_STAT64_SYSCALL 1
++#endif
++
+ /* To support locking of large files a new fcntl() syscall was introduced
+ in 2.4.0-test7. We test for 2.4.1 for the earliest version we know
+ the syscall is available. */
+
diff --git a/patches/glibc/2.2.5/glibc-test-lowram.patch b/patches/glibc/2.2.5/glibc-test-lowram.patch
new file mode 100644
index 0000000..2308629
--- /dev/null
+++ b/patches/glibc/2.2.5/glibc-test-lowram.patch
@@ -0,0 +1,14 @@
+--- glibc-2.2.5/malloc/tst-calloc.c.old Sun Aug 3 16:17:58 2003
++++ glibc-2.2.5/malloc/tst-calloc.c Sun Aug 3 16:20:01 2003
+@@ -24,9 +24,8 @@
+ #include <stdio.h>
+
+
+-/* Number of samples per size. */
+-#define N 50000
+-
++/* Number of samples per size. This is also the maximum memory consumption in kilobytes. */
++#define N 8000
+
+ static void
+ fixed_test (int size)
diff --git a/patches/glibc/2.2.5/initfini-alpha.patch b/patches/glibc/2.2.5/initfini-alpha.patch
new file mode 100644
index 0000000..49c4e67
--- /dev/null
+++ b/patches/glibc/2.2.5/initfini-alpha.patch
@@ -0,0 +1,125 @@
+Trivial fix to allow compiling with gcc3.3.
+
+--- glibc-2.2.5/sysdeps/alpha/elf/initfini.c.old Fri Jun 6 17:59:45 2003
++++ glibc-2.2.5/sysdeps/alpha/elf/initfini.c Fri Jun 6 18:00:20 2003
+@@ -37,62 +37,62 @@
+ files, all of which may have different GP values. So we must reload
+ the GP value from crti.o in crtn.o. */
+
+-__asm__ ("
+-
+-#include \"defs.h\"
+-
+-/*@HEADER_ENDS*/
+-
+-/*@_init_PROLOG_BEGINS*/
+- .section .init, \"ax\", @progbits
+- .globl _init
+- .ent _init
+-_init:
+- ldgp $29, 0($27)
+- subq $30, 16, $30
+- lda $27, __gmon_start__
+- stq $26, 0($30)
+- stq $29, 8($30)
+- .prologue 1
+- beq $27, 1f
+- jsr $26, ($27), __gmon_start__
+- ldq $29, 8($30)
+-1:
+- .align 3
+- .end _init
+- .size _init, 0
+-/*@_init_PROLOG_ENDS*/
+-
+-/*@_init_EPILOG_BEGINS*/
+- .section .init, \"ax\", @progbits
+- ldq $26, 0($30)
+- ldq $29, 8($30)
+- addq $30, 16, $30
+- ret
+-/*@_init_EPILOG_ENDS*/
+-
+-/*@_fini_PROLOG_BEGINS*/
+- .section .fini, \"ax\", @progbits
+- .globl _fini
+- .ent _fini
+-_fini:
+- ldgp $29, 0($27)
+- subq $30, 16, $30
+- stq $26, 0($30)
+- stq $29, 8($30)
+- .prologue 1
+- .align 3
+- .end _fini
+- .size _fini, 0
+-/*@_fini_PROLOG_ENDS*/
+-
+-/*@_fini_EPILOG_BEGINS*/
+- .section .fini, \"ax\", @progbits
+- ldq $26, 0($30)
+- ldq $29, 8($30)
+- addq $30, 16, $30
+- ret
+-/*@_fini_EPILOG_ENDS*/
+-
+-/*@TRAILER_BEGINS*/
++__asm__ ("\n\
++\n\
++#include \"defs.h\"\n\
++\n\
++/*@HEADER_ENDS*/\n\
++\n\
++/*@_init_PROLOG_BEGINS*/\n\
++ .section .init, \"ax\", @progbits\n\
++ .globl _init\n\
++ .ent _init\n\
++_init:\n\
++ ldgp $29, 0($27)\n\
++ subq $30, 16, $30\n\
++ lda $27, __gmon_start__\n\
++ stq $26, 0($30)\n\
++ stq $29, 8($30)\n\
++ .prologue 1\n\
++ beq $27, 1f\n\
++ jsr $26, ($27), __gmon_start__\n\
++ ldq $29, 8($30)\n\
++1:\n\
++ .align 3\n\
++ .end _init\n\
++ .size _init, 0\n\
++/*@_init_PROLOG_ENDS*/\n\
++\n\
++/*@_init_EPILOG_BEGINS*/\n\
++ .section .init, \"ax\", @progbits\n\
++ ldq $26, 0($30)\n\
++ ldq $29, 8($30)\n\
++ addq $30, 16, $30\n\
++ ret\n\
++/*@_init_EPILOG_ENDS*/\n\
++\n\
++/*@_fini_PROLOG_BEGINS*/\n\
++ .section .fini, \"ax\", @progbits\n\
++ .globl _fini\n\
++ .ent _fini\n\
++_fini:\n\
++ ldgp $29, 0($27)\n\
++ subq $30, 16, $30\n\
++ stq $26, 0($30)\n\
++ stq $29, 8($30)\n\
++ .prologue 1\n\
++ .align 3\n\
++ .end _fini\n\
++ .size _fini, 0\n\
++/*@_fini_PROLOG_ENDS*/\n\
++\n\
++/*@_fini_EPILOG_BEGINS*/\n\
++ .section .fini, \"ax\", @progbits\n\
++ ldq $26, 0($30)\n\
++ ldq $29, 8($30)\n\
++ addq $30, 16, $30\n\
++ ret\n\
++/*@_fini_EPILOG_ENDS*/\n\
++\n\
++/*@TRAILER_BEGINS*/\n\
+ ");
diff --git a/patches/glibc/2.2.5/initfini-ia64.patch b/patches/glibc/2.2.5/initfini-ia64.patch
new file mode 100644
index 0000000..a55a55a
--- /dev/null
+++ b/patches/glibc/2.2.5/initfini-ia64.patch
@@ -0,0 +1,219 @@
+Retrieved with
+wget 'http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/ia64/elf/initfini.c.diff?r1=1.2&r2=1.3&cvsroot=glibc'
+
+Revision 1.3, Sun Aug 25 00:34:23 2002 UTC (2 years, 1 month ago) by drepper
+Branch: MAIN
+CVS Tags: glibc-2-3-1, glibc-2-3
+Changes since 1.2: +78 -78 lines
+
+(__asm__): Don't use newlines embedded in string.
+
+Fixes error
+
+../sysdeps/ia64/elf/initfini.c:30:10: missing terminating " character
+../sysdeps/ia64/elf/initfini.c:32:10: #include expects "FILENAME" or <FILENAME>
+../sysdeps/ia64/elf/initfini.c:37: error: request for member `section' in something not a structure or union
+../sysdeps/ia64/elf/initfini.c:38: error: parse error before numeric constant
+../sysdeps/ia64/elf/initfini.c:39: error: syntax error at '#' token
+../sysdeps/ia64/elf/initfini.c:40: error: syntax error at '#' token
+../sysdeps/ia64/elf/initfini.c:46: error: syntax error at '@' token
+../sysdeps/ia64/elf/initfini.c:46: error: syntax error at '#' token
+../sysdeps/ia64/elf/initfini.c:48: error: parse error before "r15"
+../sysdeps/ia64/elf/initfini.c:48: warning: type defaults to `int' in declaration of `r15'
+../sysdeps/ia64/elf/initfini.c:50: error: parse error before '.' token
+../sysdeps/ia64/elf/initfini.c:56: error: syntax error at '#' token
+../sysdeps/ia64/elf/initfini.c:57: error: parse error before "r12"
+../sysdeps/ia64/elf/initfini.c:57: warning: type defaults to `int' in declaration of `r12'
+../sysdeps/ia64/elf/initfini.c:58: warning: type defaults to `int' in declaration of `r12'
+../sysdeps/ia64/elf/initfini.c:58: warning: data definition has no type or storage class
+../sysdeps/ia64/elf/initfini.c:59: error: parse error before "gp"
+../sysdeps/ia64/elf/initfini.c:59: warning: type defaults to `int' in declaration of `gp'
+../sysdeps/ia64/elf/initfini.c:63: error: syntax error at '#' token
+../sysdeps/ia64/elf/initfini.c:74: error: syntax error at '#' token
+../sysdeps/ia64/elf/initfini.c:80: error: syntax error at '#' token
+../sysdeps/ia64/elf/initfini.c:81: error: syntax error at '#' token
+../sysdeps/ia64/elf/initfini.c:89: error: syntax error at '#' token
+../sysdeps/ia64/elf/initfini.c:92: error: syntax error at '#' token
+../sysdeps/ia64/elf/initfini.c:96: error: parse error before '.' token
+../sysdeps/ia64/elf/initfini.c:101: error: syntax error at '#' token
+../sysdeps/ia64/elf/initfini.c:106: error: syntax error at '#' token
+../sysdeps/ia64/elf/initfini.c:107:1: missing terminating " character
+make[2]: *** [/home/dank/wk/crosstool-0.28-rc37/build/ia64-unknown-linux-gnu/gcc-3.3.4-glibc-2.2.5/build-glibc/csu/initfini.s] Error 1
+make[2]: Leaving directory `/home/dank/wk/crosstool-0.28-rc37/build/ia64-unknown-linux-gnu/gcc-3.3.4-glibc-2.2.5/glibc-2.2.5/csu'
+make[1]: *** [csu/subdir_lib] Error 2
+make[1]: Leaving directory `/home/dank/wk/crosstool-0.28-rc37/build/ia64-unknown-linux-gnu/gcc-3.3.4-glibc-2.2.5/glibc-2.2.5'
+make: *** [all] Error 2
+
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/ia64/elf/initfini.c,v
+retrieving revision 1.2
+retrieving revision 1.3
+diff -u -r1.2 -r1.3
+--- libc/sysdeps/ia64/elf/initfini.c 2001/07/06 04:55:54 1.2
++++ libc/sysdeps/ia64/elf/initfini.c 2002/08/25 00:34:23 1.3
+@@ -1,5 +1,5 @@
+ /* Special .init and .fini section support for ia64.
+- Copyright (C) 2000 Free Software Foundation, Inc.
++ Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -27,81 +27,81 @@
+ * crtn.s puts the corresponding function epilogues
+ in the .init and .fini sections. */
+
+-__asm__ ("
+-
+-#include \"defs.h\"
+-
+-/*@HEADER_ENDS*/
+-
+-/*@_init_PROLOG_BEGINS*/
+- .section .init
+- .align 16
+- .global _init#
+- .proc _init#
+-_init:
+- alloc r34 = ar.pfs, 0, 3, 0, 0
+- mov r32 = r12
+- mov r33 = b0
+- adds r12 = -16, r12
+- addl r14 = @ltoff(@fptr(__gmon_start__#)), gp
+- ;;
+- ld8 r15 = [r14]
+- ;;
+- cmp.eq p6, p7 = 0, r15
+- (p6) br.cond.dptk .L5
+-
+-/* we could use r35 to save gp, but we use the stack since that's what
+- * all the other init routines will do --davidm 00/04/05 */
+- st8 [r12] = gp, -16
+- br.call.sptk.many b0 = __gmon_start__# ;;
+- adds r12 = 16, r12
+- ;;
+- ld8 gp = [r12]
+- ;;
+-.L5:
+- .align 16
+- .endp _init#
+-
+-/*@_init_PROLOG_ENDS*/
+-
+-/*@_init_EPILOG_BEGINS*/
+- .section .init
+- .regstk 0,2,0,0
+- mov r12 = r32
+- mov ar.pfs = r34
+- mov b0 = r33
+- br.ret.sptk.many b0
+- .endp _init#
+-/*@_init_EPILOG_ENDS*/
+-
+-/*@_fini_PROLOG_BEGINS*/
+- .section .fini
+- .align 16
+- .global _fini#
+- .proc _fini#
+-_fini:
+- alloc r34 = ar.pfs, 0, 3, 0, 0
+- mov r32 = r12
+- mov r33 = b0
+- adds r12 = -16, r12
+- ;;
+- .align 16
+- .endp _fini#
+-
+-/*@_fini_PROLOG_ENDS*/
+- br.call.sptk.many b0 = i_am_not_a_leaf# ;;
+- ;;
+-
+-/*@_fini_EPILOG_BEGINS*/
+- .section .fini
+- mov r12 = r32
+- mov ar.pfs = r34
+- mov b0 = r33
+- br.ret.sptk.many b0
+- .endp _fini#
+-
+-/*@_fini_EPILOG_ENDS*/
+-
+-/*@TRAILER_BEGINS*/
+- .weak __gmon_start__#
++__asm__ ("\n\
++\n\
++#include \"defs.h\"\n\
++\n\
++/*@HEADER_ENDS*/\n\
++\n\
++/*@_init_PROLOG_BEGINS*/\n\
++ .section .init\n\
++ .align 16\n\
++ .global _init#\n\
++ .proc _init#\n\
++_init:\n\
++ alloc r34 = ar.pfs, 0, 3, 0, 0\n\
++ mov r32 = r12\n\
++ mov r33 = b0\n\
++ adds r12 = -16, r12\n\
++ addl r14 = @ltoff(@fptr(__gmon_start__#)), gp\n\
++ ;;\n\
++ ld8 r15 = [r14]\n\
++ ;;\n\
++ cmp.eq p6, p7 = 0, r15\n\
++ (p6) br.cond.dptk .L5\n\
++\n\
++/* we could use r35 to save gp, but we use the stack since that's what\n\
++ * all the other init routines will do --davidm 00/04/05 */\n\
++ st8 [r12] = gp, -16\n\
++ br.call.sptk.many b0 = __gmon_start__# ;;\n\
++ adds r12 = 16, r12\n\
++ ;;\n\
++ ld8 gp = [r12]\n\
++ ;;\n\
++.L5:\n\
++ .align 16\n\
++ .endp _init#\n\
++\n\
++/*@_init_PROLOG_ENDS*/\n\
++\n\
++/*@_init_EPILOG_BEGINS*/\n\
++ .section .init\n\
++ .regstk 0,2,0,0\n\
++ mov r12 = r32\n\
++ mov ar.pfs = r34\n\
++ mov b0 = r33\n\
++ br.ret.sptk.many b0\n\
++ .endp _init#\n\
++/*@_init_EPILOG_ENDS*/\n\
++\n\
++/*@_fini_PROLOG_BEGINS*/\n\
++ .section .fini\n\
++ .align 16\n\
++ .global _fini#\n\
++ .proc _fini#\n\
++_fini:\n\
++ alloc r34 = ar.pfs, 0, 3, 0, 0\n\
++ mov r32 = r12\n\
++ mov r33 = b0\n\
++ adds r12 = -16, r12\n\
++ ;;\n\
++ .align 16\n\
++ .endp _fini#\n\
++\n\
++/*@_fini_PROLOG_ENDS*/\n\
++ br.call.sptk.many b0 = i_am_not_a_leaf# ;;\n\
++ ;;\n\
++\n\
++/*@_fini_EPILOG_BEGINS*/\n\
++ .section .fini\n\
++ mov r12 = r32\n\
++ mov ar.pfs = r34\n\
++ mov b0 = r33\n\
++ br.ret.sptk.many b0\n\
++ .endp _fini#\n\
++\n\
++/*@_fini_EPILOG_ENDS*/\n\
++\n\
++/*@TRAILER_BEGINS*/\n\
++ .weak __gmon_start__#\n\
+ ");
diff --git a/patches/glibc/2.2.5/initfini-sh.patch b/patches/glibc/2.2.5/initfini-sh.patch
new file mode 100644
index 0000000..d1e0eae
--- /dev/null
+++ b/patches/glibc/2.2.5/initfini-sh.patch
@@ -0,0 +1,243 @@
+--- glibc-2.2.5/sysdeps/sh/elf/initfini.c.orig Thu Jul 5 21:56:03 2001
++++ glibc-2.2.5/sysdeps/sh/elf/initfini.c Wed May 28 08:45:08 2003
+@@ -27,122 +27,122 @@
+ * crtn.s puts the corresponding function epilogues
+ in the .init and .fini sections. */
+
+-__asm__ ("
+-
+-#include \"defs.h\"
+-#define SHARED
+-
+-/*@HEADER_ENDS*/
+-
+-/*@TESTS_BEGIN*/
+-
+-/*@TESTS_END*/
+-
+-/*@_init_PROLOG_BEGINS*/
+- .section .init
+- .align 5
+- .global _init
+- .type _init,@function
+-_init:
+- mov.l r12,@-r15
+- mov.l r14,@-r15
+- sts.l pr,@-r15
+-#ifdef SHARED
+- mova .L22,r0
+- mov.l .L22,r12
+- add r0,r12
+- mova .L23,r0
+- mov.l .L23,r1
+- add r0,r1
+-#else
+- mov.l .L23,r1
+-#endif
+- jsr @r1
+- mov r15,r14
+- bra 1f
+- nop
+- .align 2
+-#ifdef SHARED
+-.L22:
+- .long _GLOBAL_OFFSET_TABLE_
+-.L23:
+- .long __gmon_start__@PLT
+-#else
+-.L23:
+- .long __gmon_start__
+-#endif
+- .data
+- .global __fpscr_values
+-__fpscr_values:
+- .long 0
+- .long 0x80000
+- .previous
+-1:
+- ALIGN
+- END_INIT
+-
+-
+-/*@_init_PROLOG_ENDS*/
+-
+-/*@_init_EPILOG_BEGINS*/
+- .section .init
+- mov r14,r15
+- lds.l @r15+,pr
+- mov.l @r15+,r14
+- rts
+- mov.l @r15+,r12
+- END_INIT
+- .section .text
+- .align 5
+- .weak __gmon_start__
+- .type __gmon_start__,@function
+-__gmon_start__:
+- mov.l r14,@-r15
+- mov r15,r14
+- mov r14,r15
+- rts
+- mov.l @r15+,r14
+-
+-/*@_init_EPILOG_ENDS*/
+-
+-/*@_fini_PROLOG_BEGINS*/
+- .section .fini
+- .align 5
+- .global _fini
+- .type _fini,@function
+-_fini:
+- mov.l r12,@-r15
+- mov.l r14,@-r15
+- sts.l pr,@-r15
+-#ifdef SHARED
+- mova .L27,r0
+- mov.l .L27,r12
+- add r0,r12
+-#endif
+- mov r15,r14
+- ALIGN
+- END_FINI
+-#ifdef SHARED
+- bra 1f
+- nop
+- .align 2
+-.L27:
+- .long _GLOBAL_OFFSET_TABLE_
+-#endif
+-1:
+-/*@_fini_PROLOG_ENDS*/
+-
+-/*@_fini_EPILOG_BEGINS*/
+- .section .fini
+- mov r14,r15
+- lds.l @r15+,pr
+- mov.l @r15+,r14
+- rts
+- mov.l @r15+,r12
+-
+- END_FINI
+-
+-/*@_fini_EPILOG_ENDS*/
+-
+-/*@TRAILER_BEGINS*/
++__asm__ ("\n\
++\n\
++#include \"defs.h\"\n\
++#define SHARED\n\
++\n\
++/*@HEADER_ENDS*/\n\
++\n\
++/*@TESTS_BEGIN*/\n\
++\n\
++/*@TESTS_END*/\n\
++\n\
++/*@_init_PROLOG_BEGINS*/\n\
++ .section .init\n\
++ .align 5\n\
++ .global _init\n\
++ .type _init,@function\n\
++_init:\n\
++ mov.l r12,@-r15\n\
++ mov.l r14,@-r15\n\
++ sts.l pr,@-r15\n\
++#ifdef SHARED\n\
++ mova .L22,r0\n\
++ mov.l .L22,r12\n\
++ add r0,r12\n\
++ mova .L23,r0\n\
++ mov.l .L23,r1\n\
++ add r0,r1\n\
++#else\n\
++ mov.l .L23,r1\n\
++#endif\n\
++ jsr @r1\n\
++ mov r15,r14\n\
++ bra 1f\n\
++ nop\n\
++ .align 2\n\
++#ifdef SHARED\n\
++.L22:\n\
++ .long _GLOBAL_OFFSET_TABLE_\n\
++.L23:\n\
++ .long __gmon_start__@PLT\n\
++#else\n\
++.L23:\n\
++ .long __gmon_start__\n\
++#endif\n\
++ .data\n\
++ .global __fpscr_values\n\
++__fpscr_values:\n\
++ .long 0\n\
++ .long 0x80000\n\
++ .previous\n\
++1:\n\
++ ALIGN\n\
++ END_INIT\n\
++\n\
++ \n\
++/*@_init_PROLOG_ENDS*/\n\
++\n\
++/*@_init_EPILOG_BEGINS*/\n\
++ .section .init\n\
++ mov r14,r15\n\
++ lds.l @r15+,pr\n\
++ mov.l @r15+,r14\n\
++ rts \n\
++ mov.l @r15+,r12\n\
++ END_INIT\n\
++ .section .text\n\
++ .align 5\n\
++ .weak __gmon_start__\n\
++ .type __gmon_start__,@function\n\
++__gmon_start__:\n\
++ mov.l r14,@-r15\n\
++ mov r15,r14\n\
++ mov r14,r15\n\
++ rts \n\
++ mov.l @r15+,r14\n\
++ \n\
++/*@_init_EPILOG_ENDS*/\n\
++\n\
++/*@_fini_PROLOG_BEGINS*/\n\
++ .section .fini\n\
++ .align 5\n\
++ .global _fini\n\
++ .type _fini,@function\n\
++_fini:\n\
++ mov.l r12,@-r15\n\
++ mov.l r14,@-r15\n\
++ sts.l pr,@-r15\n\
++#ifdef SHARED\n\
++ mova .L27,r0\n\
++ mov.l .L27,r12\n\
++ add r0,r12\n\
++#endif\n\
++ mov r15,r14\n\
++ ALIGN\n\
++ END_FINI\n\
++#ifdef SHARED\n\
++ bra 1f\n\
++ nop\n\
++ .align 2\n\
++.L27:\n\
++ .long _GLOBAL_OFFSET_TABLE_\n\
++#endif\n\
++1:\n\
++/*@_fini_PROLOG_ENDS*/\n\
++\n\
++/*@_fini_EPILOG_BEGINS*/\n\
++ .section .fini\n\
++ mov r14,r15\n\
++ lds.l @r15+,pr\n\
++ mov.l @r15+,r14\n\
++ rts \n\
++ mov.l @r15+,r12\n\
++\n\
++ END_FINI\n\
++ \n\
++/*@_fini_EPILOG_ENDS*/\n\
++\n\
++/*@TRAILER_BEGINS*/\n\
+ ");
diff --git a/patches/glibc/2.2.5/longjmp-sparc.patch b/patches/glibc/2.2.5/longjmp-sparc.patch
new file mode 100644
index 0000000..d11e9f8
--- /dev/null
+++ b/patches/glibc/2.2.5/longjmp-sparc.patch
@@ -0,0 +1,75 @@
+From libc-alpha-return-8354-listarch-libc-alpha=sourceware dot cygnus dot com at sources dot redhat dot com Mon Jul 01 11:18:29 2002
+Return-Path: <libc-alpha-return-8354-listarch-libc-alpha=sourceware dot cygnus dot com at sources dot redhat dot com>
+Delivered-To: listarch-libc-alpha at sourceware dot cygnus dot com
+Received: (qmail 10698 invoked by alias); 1 Jul 2002 11:18:28 -0000
+Mailing-List: contact libc-alpha-help at sources dot redhat dot com; run by ezmlm
+Precedence: bulk
+List-Subscribe: <mailto:libc-alpha-subscribe at sources dot redhat dot com>
+List-Archive: <http://sources.redhat.com/ml/libc-alpha/>
+List-Post: <mailto:libc-alpha at sources dot redhat dot com>
+List-Help: <mailto:libc-alpha-help at sources dot redhat dot com>, <http://sources dot redhat dot com/ml/#faqs>
+Sender: libc-alpha-owner at sources dot redhat dot com
+Delivered-To: mailing list libc-alpha at sources dot redhat dot com
+Received: (qmail 10659 invoked from network); 1 Jul 2002 11:18:27 -0000
+Received: from unknown (HELO sceaux.ilog.fr) (193.55.64.10)
+ by sources dot redhat dot com with SMTP; 1 Jul 2002 11:18:27 -0000
+Received: from ftp.ilog.fr (ftp.ilog.fr [193.55.64.11])
+ by sceaux dot ilog dot fr (8 dot 11 dot 6/8 dot 11 dot 6) with SMTP id g61BFDi08003
+ for <libc-alpha at sources dot redhat dot com>; Mon, 1 Jul 2002 13:15:18 +0200 (MET DST)
+Received: from laposte.ilog.fr ([193.55.64.67])
+ by ftp dot ilog dot fr (NAVGW 2 dot 5 dot 1 dot 16) with SMTP id M2002070113180506608
+ for <libc-alpha at sources dot redhat dot com>; Mon, 01 Jul 2002 13:18:05 +0200
+Received: from honolulu.ilog.fr ([172.17.4.43])
+ by laposte dot ilog dot fr (8 dot 11 dot 6/8 dot 11 dot 5) with ESMTP id g61BI2w29996;
+ Mon, 1 Jul 2002 13:18:02 +0200 (MET DST)
+Received: (from haible@localhost)
+ by honolulu dot ilog dot fr (8 dot 9 dot 3/8 dot 9 dot 3/SuSE Linux 8 dot 9 dot 3-0 dot 1) id NAA01763;
+ Mon, 1 Jul 2002 13:12:40 +0200
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+Content-Transfer-Encoding: base64
+Message-ID: <15648.14632.526690.249866@honolulu.ilog.fr>
+Date: Mon, 1 Jul 2002 13:12:40 +0200 (CEST)
+From: Bruno Haible <bruno at clisp dot org>
+To: libc-alpha at sources dot redhat dot com
+Subject: sparc32/sysdep.h and gcc-3.1
+
+Hi,
+
+When building glibc-2.2.5 for sparc with gcc-3.1 I get a build error
+
+sparc-linux-gcc ../sysdeps/sparc/sparc32/__longjmp.S -c -I../include -I. -I/backup/cross-build/build-glibc-sparc/setjmp -I.. -I../libio -I/backup/cross-build/build-glibc-sparc -I../sysdeps/sparc/sparc32/elf -I../linuxthreads/sysdeps/unix/sysv/linux/sparc -I../linuxthreads/sysdeps/unix/sysv/linux -I../linuxthreads/sysdeps/pthread -I../sysdeps/pthread -I../linuxthreads/sysdeps/unix/sysv -I../linuxthreads/sysdeps/unix -I../linuxthreads/sysdeps/sparc/sparc32 -I../linuxthreads/sysdeps/sparc -I../sysdeps/unix/sysv/linux/sparc/sparc32 -I../sysdeps/unix/sysv/linux/sparc -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/sparc -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/sparc/sparc32/fpu -I../sysdeps/sparc/sparc32 -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/sparc/sparc32/soft-fp -I../sysdeps/sparc/fpu -I../sysdeps/sparc -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -nostdinc -isystem /cross/sparc-linux-tools/lib/gcc-lib/sparc-linux/3.1/include -isystem /cross/sparc-linux/include -D_LIBC_REENTRANT -include ../include/libc-symbols.h -DASSEMBLER -D__ASSEMBLY__ -o /backup/cross-build/build-glibc-sparc/setjmp/__longjmp.o
+../sysdeps/sparc/sparc32/__longjmp.S: Assembler messages:
+../sysdeps/sparc/sparc32/__longjmp.S:41: Error: Illegal operands
+../sysdeps/sparc/sparc32/__longjmp.S:43: Error: Illegal operands
+../sysdeps/sparc/sparc32/__longjmp.S:48: Error: unknown pseudo-op: `.'
+../sysdeps/sparc/sparc32/__longjmp.S:50: Error: Illegal operands
+../sysdeps/sparc/sparc32/__longjmp.S:52: Error: Illegal operands
+../sysdeps/sparc/sparc32/__longjmp.S:55: Error: unknown pseudo-op: `.'
+../sysdeps/sparc/sparc32/__longjmp.S:72: Error: unknown pseudo-op: `.'
+../sysdeps/sparc/sparc32/__longjmp.S:76: Error: unknown pseudo-op: `.'
+make[2]: *** [/backup/cross-build/build-glibc-sparc/setjmp/__longjmp.o] Fehler 1
+make[2]: Leaving directory `/packages2/glibc-2.2.5/setjmp'
+
+Apparently "cpp0 -lang-asm" now leaves spaces around ## in place, if the token
+on the left or right of it is a lone dot (not a valid C identifier). Hard to
+say that it's a bug in the gcc-3.1 cpp, because -lang-asm is a gcc extension.
+The fix is just to remove the spaces.
+
+
+2002-06-05 Bruno Haible <bruno@clisp.org>
+
+ * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h (LOC): Remove spaces.
+
+--- glibc-2.2.5/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h.bak 2001-07-06 06:56:21.000000000 +0200
++++ glibc-2.2.5/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h 2002-06-05 23:14:40.000000000 +0200
+@@ -48,7 +48,7 @@
+ #define END(name) \
+ .size name, . - name
+
+-#define LOC(name) . ## L ## name
++#define LOC(name) .##L##name
+
+ #ifdef PIC
+ #define SYSCALL_ERROR_HANDLER \
+
diff --git a/patches/glibc/2.2.5/sh-setjmp-fix.patch b/patches/glibc/2.2.5/sh-setjmp-fix.patch
new file mode 100644
index 0000000..3f86a5e
--- /dev/null
+++ b/patches/glibc/2.2.5/sh-setjmp-fix.patch
@@ -0,0 +1,29 @@
+Fixes glibc 'make tests' failure running isomac
+
+make[2]: *** [/home3/dank/wk/ixos/dap_interim/linux/3rdParty/crosstool/crosstool-0.15/build/sh4-unknown-linux-gnu/gcc-ss-3_3-20030714-glibc-2.2.5/build-glibc/stdlib/isomac.out] Error 2
+
+isomac.out contains:
+...
+setjmp.h
+#define JB_SIZE (4 * 15)
+
+See http://sources.redhat.com/ml/libc-hacker/2002-11/msg00009.html
+and http://www.schweikhardt.net/isomac.c.html
+
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/sh/bits/setjmp.h,v
+retrieving revision 1.4
+retrieving revision 1.5
+diff -u -r1.4 -r1.5
+--- libc/sysdeps/sh/bits/setjmp.h 2001/07/06 04:56:03 1.4
++++ libc/sysdeps/sh/bits/setjmp.h 2002/11/06 00:08:30 1.5
+@@ -42,7 +42,9 @@
+ } __jmp_buf[1];
+ #endif
+
++#if defined __USE_MISC || defined _ASM
+ #define JB_SIZE (4 * 15)
++#endif
+
+ /* Test if longjmp to JMPBUF would unwind the frame
+ containing a local variable at ADDRESS. */
diff --git a/patches/glibc/2.2.5/sprintf-prototype.patch b/patches/glibc/2.2.5/sprintf-prototype.patch
new file mode 100644
index 0000000..b0d346b
--- /dev/null
+++ b/patches/glibc/2.2.5/sprintf-prototype.patch
@@ -0,0 +1,13 @@
+--- glibc-2.2.5/stdio-common/sprintf.c.old Wed May 28 08:59:11 2003
++++ glibc-2.2.5/stdio-common/sprintf.c Wed May 28 08:59:45 2003
+@@ -27,9 +27,7 @@
+ /* Write formatted output into S, according to the format string FORMAT. */
+ /* VARARGS2 */
+ int
+-sprintf (s, format)
+- char *s;
+- const char *format;
++sprintf (char *s, const char *format, ...)
+ {
+ va_list arg;
+ int done;
diff --git a/patches/glibc/2.2.5/sscanf.patch b/patches/glibc/2.2.5/sscanf.patch
new file mode 100644
index 0000000..4ee33e2
--- /dev/null
+++ b/patches/glibc/2.2.5/sscanf.patch
@@ -0,0 +1,82 @@
+[dank] Modified very slightly to apply to 2.2.5.
+
+2003-03-05 Roland McGrath <roland@redhat.com>
+
+ * stdio-common/sscanf.c: Use prototype defn with ... syntax.
+ * libio/swscanf.c: Likewise.
+ * libio/swprintf.c: Likewise.
+
+===================================================================
+RCS file: /cvs/glibc/libc/stdio-common/sscanf.c,v
+retrieving revision 1.8
+retrieving revision 1.9
+diff -u -r1.8 -r1.9
+--- libc/stdio-common/sscanf.c 2002/08/10 09:24:42 1.8
++++ libc/stdio-common/sscanf.c 2003/03/05 19:58:03 1.9
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991, 1995, 1996, 1998 Free Software Foundation, Inc.
++/* Copyright (C) 1991,1995,1996,1998,2002,2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -27,9 +27,7 @@
+ /* Read formatted input from S, according to the format string FORMAT. */
+ /* VARARGS2 */
+ int
+-sscanf (s, format)
+- const char *s;
+- const char *format;
++sscanf (const char *s, const char *format, ...)
+ {
+ va_list arg;
+ int done;
+===================================================================
+RCS file: /cvs/glibc/libc/libio/swprintf.c,v
+retrieving revision 1.3
+retrieving revision 1.4
+diff -u -r1.3 -r1.4
+--- libc/libio/swprintf.c 2001/07/06 04:55:32 1.3
++++ libc/libio/swprintf.c 2003/03/05 19:58:03 1.4
+@@ -1,4 +1,5 @@
+-/* Copyright (C) 1991,1995,1997,1998,1999,2000 Free Software Foundation, Inc.
++/* Copyright (C) 1991,1995,1997,1998,1999,2000,2003
++ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -22,10 +23,7 @@
+ /* Write formatted output into S, according to the format string FORMAT. */
+ /* VARARGS3 */
+ int
+-swprintf (s, n, format)
+- wchar_t *s;
+- size_t n;
+- const wchar_t *format;
++swprintf (wchar_t *s, size_t n, const wchar_t *format, ...)
+ {
+ va_list arg;
+ int done;
+===================================================================
+RCS file: /cvs/glibc/libc/libio/swscanf.c,v
+retrieving revision 1.2
+retrieving revision 1.3
+diff -u -r1.2 -r1.3
+--- libc/libio/swscanf.c 2001/07/06 04:55:32 1.2
++++ libc/libio/swscanf.c 2003/03/05 19:58:03 1.3
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991, 1995, 1996, 1998, 1999 Free Software Foundation, Inc.
++/* Copyright (C) 1991,1995,1996,1998,1999,2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -22,9 +22,7 @@
+ /* Read formatted input from S, according to the format string FORMAT. */
+ /* VARARGS2 */
+ int
+-swscanf (s, format)
+- const wchar_t *s;
+- const wchar_t *format;
++swscanf (const wchar_t *s, const wchar_t *format, ...)
+ {
+ va_list arg;
+ int done;
diff --git a/patches/glibc/2.2.5/unwind-arm.patch b/patches/glibc/2.2.5/unwind-arm.patch
new file mode 100644
index 0000000..37f7b8d
--- /dev/null
+++ b/patches/glibc/2.2.5/unwind-arm.patch
@@ -0,0 +1,19 @@
+# See http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2002-September/011508.html
+# Fixes error
+# arm-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/libc.so.6: undefined reference to `size_of_encoded_value'
+# arm-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/libc.so.6: undefined reference to `read_encoded_value_with_base'
+# make[2]: *** [arm-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/iconv/iconvconfig] Error 1
+
+--- glibc-2.2.5/sysdeps/unix/sysv/linux/configure.old Sun Jan 20 19:27:33 2002
++++ glibc-2.2.5/sysdeps/unix/sysv/linux/configure Sun Jun 8 03:33:03 2003
+@@ -56,6 +56,10 @@
+ arch_minimum_kernel=2.1.100
+ libc_cv_gcc_unwind_find_fde=yes
+ ;;
++ arm*)
++ libc_cv_gcc_unwind_find_fde=yes
++ arch_minimum_kernel=2.0.10
++ ;;
+ i386*)
+ libc_cv_gcc_unwind_find_fde=yes
+ arch_minimum_kernel=2.0.10