summaryrefslogtreecommitdiff
path: root/patches/glibc/2.2.2
diff options
context:
space:
mode:
Diffstat (limited to 'patches/glibc/2.2.2')
-rw-r--r--patches/glibc/2.2.2/arm-ctl_bus_isa.patch51
-rw-r--r--patches/glibc/2.2.2/glibc-2.1.3-allow-gcc-3.4-grp.patch56
-rw-r--r--patches/glibc/2.2.2/glibc-2.1.3-allow-gcc3-sscanf.patch73
-rw-r--r--patches/glibc/2.2.2/glibc-2.1.3-allow-gcc3-versioninfo.patch17
-rw-r--r--patches/glibc/2.2.2/glibc-2.2.2-allow-gcc-3-configure.patch21
-rw-r--r--patches/glibc/2.2.2/glibc-2.2.2-allow-gcc3-dl-machine-i386.patch232
-rw-r--r--patches/glibc/2.2.2/glibc-2.2.2-allow-gcc3-errlist.patch18
-rw-r--r--patches/glibc/2.2.2/glibc-2.2.2-allow-gcc3-longlong.patch811
-rw-r--r--patches/glibc/2.2.2/glibc-2.2.2-export_fp_hw.patch30
-rw-r--r--patches/glibc/2.2.2/glibc-2.2.2-printf-not-macro.patch36
-rw-r--r--patches/glibc/2.2.2/glibc-2.2.2-syslog-bugfix.patch60
-rw-r--r--patches/glibc/2.2.2/glibc-2.2.5-alpha-pwrite64.patch58
-rw-r--r--patches/glibc/2.2.2/glibc-2.2.5-arm-pwrite64.patch30
-rw-r--r--patches/glibc/2.2.2/glibc-2.2.5-i386-pwrite64.patch20
-rw-r--r--patches/glibc/2.2.2/glibc-2.2.5-m68k-pwrite.patch32
-rw-r--r--patches/glibc/2.2.2/glibc-manual-stdin.texi-1.127.patch18
-rw-r--r--patches/glibc/2.2.2/glibc-nss-noopt.patch26
-rw-r--r--patches/glibc/2.2.2/tst-pathopt-cross.patch23
18 files changed, 1612 insertions, 0 deletions
diff --git a/patches/glibc/2.2.2/arm-ctl_bus_isa.patch b/patches/glibc/2.2.2/arm-ctl_bus_isa.patch
new file mode 100644
index 0000000..3422070
--- /dev/null
+++ b/patches/glibc/2.2.2/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.2/glibc-2.1.3-allow-gcc-3.4-grp.patch b/patches/glibc/2.2.2/glibc-2.1.3-allow-gcc-3.4-grp.patch
new file mode 100644
index 0000000..db70efb
--- /dev/null
+++ b/patches/glibc/2.2.2/glibc-2.1.3-allow-gcc-3.4-grp.patch
@@ -0,0 +1,56 @@
+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
+
+Removed 2nd hunk for glibc-2.1.3 (it was just whitespace)
+
+===================================================================
+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)
+
+===================================================================
+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.2/glibc-2.1.3-allow-gcc3-sscanf.patch b/patches/glibc/2.2.2/glibc-2.1.3-allow-gcc3-sscanf.patch
new file mode 100644
index 0000000..b1269e0
--- /dev/null
+++ b/patches/glibc/2.2.2/glibc-2.1.3-allow-gcc3-sscanf.patch
@@ -0,0 +1,73 @@
+http://sources.redhat.com/ml/bug-glibc/2003-08/msg00087.html
+
+From: Gernot Hillier <gernot dot hillier at siemens dot com>
+Organization: Siemens AG
+To: Jeffrey Bedard <jefbed at e-list dot net>, bug-glibc at gnu dot org
+Date: Mon, 18 Aug 2003 08:50:03 +0200
+References: <3F3D0899.6020004@e-list.net>
+Message-Id: <200308180850.03431.gernot.hillier@siemens.com>
+Subject: Re: Build Fails with gcc 3.3.1
+X-BeenThere: bug-glibc@gnu.org
+
+Hi!
+
+Am Freitag, 15. August 2003 18:21 schrieb Jeffrey Bedard:
+> gcc sscanf.c -c -std=gnu99 -O2 -Wall -Winline -Wstrict-prototypes
+[...]
+> sscanf.c:31: warning: conflicting types for built-in function `sscanf'
+> sscanf.c: In function `sscanf':
+> sscanf.c:37: error: `va_start' used in function with fixed args
+> .../stdio-common/_itoa.h: At top level:
+> .../stdio-common/_itoa.h:40: warning: inlining failed in call to
+> `_itoa_word' .../stdio-common/_itoa.h:76: warning: called from here
+> make[2]: ***
+> [/home/jefbed/src/packages/glibc-build/stdio-common/sscanf.o] Error 1
+
+You can find the fitting patch in the glibc CVS. You have to replace some
+function headers.
+
+I created a patch for glibc-2.2.5 for the same reason. I don't know if it
+applies cleanly, but if not it should at least show you what to do...
+
+--
+Bye,
+
+Gernot Hillier
+Siemens AG
+
+
+
+
+Content-Disposition: attachment; filename="glibc-2.2.5-gcc-3.3.diff"
+
+diff -ur glibc-2.2.5.orig/stdio-common/sprintf.c glibc-2.2.5/stdio-common/sprintf.c
+--- glibc-2.2.5.orig/stdio-common/sprintf.c 2001-07-06 06:55:41.000000000 +0200
++++ glibc-2.2.5/stdio-common/sprintf.c 2003-08-11 13:25:48.000000000 +0200
+@@ -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;
+Only in glibc-2.2.5/stdio-common: sprintf.c.orig
+Only in glibc-2.2.5/stdio-common: sprintf.c.rej
+diff -ur glibc-2.2.5.orig/stdio-common/sscanf.c glibc-2.2.5/stdio-common/sscanf.c
+--- glibc-2.2.5.orig/stdio-common/sscanf.c 2001-07-06 06:55:41.000000000 +0200
++++ glibc-2.2.5/stdio-common/sscanf.c 2003-08-11 13:27:58.000000000 +0200
+@@ -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;
+
diff --git a/patches/glibc/2.2.2/glibc-2.1.3-allow-gcc3-versioninfo.patch b/patches/glibc/2.2.2/glibc-2.1.3-allow-gcc3-versioninfo.patch
new file mode 100644
index 0000000..ce88879
--- /dev/null
+++ b/patches/glibc/2.2.2/glibc-2.1.3-allow-gcc3-versioninfo.patch
@@ -0,0 +1,17 @@
+# gcc-3.x doesn't like run-on strings
+# See also http://sources.redhat.com/ml/libc-alpha/2004-01/msg00032.html
+
+--- glibc-2.1.3/csu/Makefile.old 2004-03-04 12:18:52.000000000 -0800
++++ glibc-2.1.3/csu/Makefile 2004-03-04 12:19:35.000000000 -0800
+@@ -188,8 +188,8 @@
+ esac; \
+ files="$(all-Banner-files)"; \
+ if test -n "$$files"; then \
+- echo "\"Available extensions:"; \
+- sed -e '/^#/d' -e 's/^[[:space:]]*/ /' $$files; \
+- echo "\""; \
++ echo -e "\"Available extensions:\\\\n\""; \
++ sed -e '/^#/d' -e 's/^[[:space:]]*/ /' \
++ -e 's/^\(.*\)$$/\"\1\\n\"/' $$files; \
+ fi) > $@T
+ mv -f $@T $@
diff --git a/patches/glibc/2.2.2/glibc-2.2.2-allow-gcc-3-configure.patch b/patches/glibc/2.2.2/glibc-2.2.2-allow-gcc-3-configure.patch
new file mode 100644
index 0000000..efd6b2a
--- /dev/null
+++ b/patches/glibc/2.2.2/glibc-2.2.2-allow-gcc-3-configure.patch
@@ -0,0 +1,21 @@
+Works around version check:
+
+checking for i686-unknown-linux-gnu-gcc... gcc
+checking version of gcc... 3.4.2, bad
+...
+configure: error:
+*** Some critical program is missing or too old.
+*** Check the INSTALL file for required versions.
+
+
+--- glibc-2.2.2/configure.old 2005-04-10 16:57:42.692071968 -0700
++++ glibc-2.2.2/configure 2005-04-10 16:58:52.993384544 -0700
+@@ -1437,7 +1437,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]*|cygnus-2.9[1-9]*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]|sgicc-*)
++ *gcc-2.9[5-9].*|*3.[234].*|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|2.9[5-9]*|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.2/glibc-2.2.2-allow-gcc3-dl-machine-i386.patch b/patches/glibc/2.2.2/glibc-2.2.2-allow-gcc3-dl-machine-i386.patch
new file mode 100644
index 0000000..b946165
--- /dev/null
+++ b/patches/glibc/2.2.2/glibc-2.2.2-allow-gcc3-dl-machine-i386.patch
@@ -0,0 +1,232 @@
+Fixes errors:
+In file included from dynamic-link.h:21,
+ from dl-load.c:32:
+../sysdeps/i386/dl-machine.h:121: error: parse error before '.' token
+../sysdeps/i386/dl-machine.h:122: error: stray '@' in program
+../sysdeps/i386/dl-machine.h:125: error: syntax error at '#' token
+../sysdeps/i386/dl-machine.h:128: error: syntax error at '#' token
+../sysdeps/i386/dl-machine.h:129: error: syntax error at '#' token
+../sysdeps/i386/dl-machine.h:129: error: stray '`' in program
+../sysdeps/i386/dl-machine.h:129: error: missing terminating ' character
+...
+../sysdeps/i386/dl-machine.h:227:22: warning: character constant too long for its type
+../sysdeps/i386/dl-machine.h:209: error: stray '\' in program
+../sysdeps/i386/dl-machine.h:209: error: stray '\' in program
+../sysdeps/i386/dl-machine.h:209: error: stray '\' in program
+../sysdeps/i386/dl-machine.h:209: error: missing terminating " character
+../sysdeps/i386/dl-machine.h: In function `dl_platform_init':
+../sysdeps/i386/dl-machine.h:273: error: `_dl_platform' undeclared (first use in this function)
+../sysdeps/i386/dl-machine.h:273: error: (Each undeclared identifier is reported only once
+../sysdeps/i386/dl-machine.h:273: error: for each function it appears in.)
+dl-load.c: In function `_dl_map_object_from_fd':
+dl-load.c:1043: warning: use of cast expressions as lvalues is deprecated
+dl-load.c:1043: warning: use of cast expressions as lvalues is deprecated
+dl-load.c:1058: warning: use of cast expressions as lvalues is deprecated
+dl-load.c:1058: warning: use of cast expressions as lvalues is deprecated
+
+dl-runtime.c:53: error: conflicting types for 'fixup'
+../sysdeps/i386/dl-machine.h:67: error: previous declaration of 'fixup' was here
+dl-runtime.c:53: error: conflicting types for 'fixup'
+../sysdeps/i386/dl-machine.h:67: error: previous declaration of 'fixup' was here
+dl-runtime.c:135: error: conflicting types for 'profile_fixup'
+../sysdeps/i386/dl-machine.h:70: error: previous declaration of 'profile_fixup' was here
+dl-runtime.c:135: error: conflicting types for 'profile_fixup'
+../sysdeps/i386/dl-machine.h:70: error: previous declaration of 'profile_fixup' was here
+../sysdeps/i386/dl-machine.h:67: warning: 'fixup' declared `static' but never defined
+../sysdeps/i386/dl-machine.h:70: warning: 'profile_fixup' declared `static' but never defined
+
+Updated to repair breakage caused by unconditionally requiring ARCH_FIXUP_ATTRIBUTE
+to be defined. (No wonder glibc-2.2.2 didn't build for anything but x86...)
+
+===================================================================
+--- glibc-2.2.2/sysdeps/i386/dl-machine.h.old 2005-04-11 17:45:13.000000000 -0700
++++ glibc-2.2.2/sysdeps/i386/dl-machine.h 2005-04-12 10:01:47.000000000 -0700
+@@ -63,11 +63,14 @@
+ 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
+@@ -117,68 +120,68 @@
+ and then redirect to the address it returns. */
+ #if !defined PROF && !__BOUNDED_POINTERS__
+ # define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
+- .text
+- .globl _dl_runtime_resolve
+- .type _dl_runtime_resolve, @function
+- .align 16
+-_dl_runtime_resolve:
+- pushl %eax # Preserve registers otherwise clobbered.
+- pushl %ecx
+- pushl %edx
+- movl 16(%esp), %edx # Copy args pushed by PLT in register. Note
+- movl 12(%esp), %eax # that `fixup' takes its parameters in regs.
+- call fixup # Call resolver.
+- popl %edx # Get register content back.
+- popl %ecx
+- xchgl %eax, (%esp) # Get %eax contents end store function address.
+- ret $8 # Jump to function address.
+- .size _dl_runtime_resolve, .-_dl_runtime_resolve
+-
+- .globl _dl_runtime_profile
+- .type _dl_runtime_profile, @function
+- .align 16
+-_dl_runtime_profile:
+- pushl %eax # Preserve registers otherwise clobbered.
+- pushl %ecx
+- pushl %edx
+- movl 20(%esp), %ecx # Load return address
+- movl 16(%esp), %edx # Copy args pushed by PLT in register. Note
+- movl 12(%esp), %eax # that `fixup' takes its parameters in regs.
+- call profile_fixup # Call resolver.
+- popl %edx # Get register content back.
+- popl %ecx
+- xchgl %eax, (%esp) # Get %eax contents end store function address.
+- ret $8 # Jump to function address.
+- .size _dl_runtime_profile, .-_dl_runtime_profile
+- .previous
++ .text\n\
++ .globl _dl_runtime_resolve\n\
++ .type _dl_runtime_resolve, @function\n\
++ .align 16\n\
++_dl_runtime_resolve:\n\
++ pushl %eax # Preserve registers otherwise clobbered.\n\
++ pushl %ecx\n\
++ pushl %edx\n\
++ movl 16(%esp), %edx # Copy args pushed by PLT in register. Note\n\
++ movl 12(%esp), %eax # that `fixup' takes its parameters in regs.\n\
++ call fixup # Call resolver.\n\
++ popl %edx # Get register content back.\n\
++ popl %ecx\n\
++ xchgl %eax, (%esp) # Get %eax contents end store function address.\n\
++ ret $8 # Jump to function address.\n\
++ .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\
++\n\
++ .globl _dl_runtime_profile\n\
++ .type _dl_runtime_profile, @function\n\
++ .align 16\n\
++_dl_runtime_profile:\n\
++ pushl %eax # Preserve registers otherwise clobbered.\n\
++ pushl %ecx\n\
++ pushl %edx\n\
++ movl 20(%esp), %ecx # Load return address\n\
++ movl 16(%esp), %edx # Copy args pushed by PLT in register. Note\n\
++ movl 12(%esp), %eax # that `fixup' takes its parameters in regs.\n\
++ call profile_fixup # Call resolver.\n\
++ popl %edx # Get register content back.\n\
++ popl %ecx\n\
++ xchgl %eax, (%esp) # Get %eax contents end store function address.\n\
++ ret $8 # Jump to function address.\n\
++ .size _dl_runtime_profile, .-_dl_runtime_profile\n\
++ .previous\n\
+ ");
+ #else
+-# 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 16
+-_dl_runtime_resolve:
+-_dl_runtime_profile:
+- pushl %eax # Preserve registers otherwise clobbered.
+- pushl %ecx
+- pushl %edx
+- movl 16(%esp), %edx # Push the arguments for `fixup'
+- movl 12(%esp), %eax
+- pushl %edx
+- pushl %eax
+- call fixup # Call resolver.
+- popl %edx # Pop the parameters
+- popl %ecx
+- popl %edx # Get register content back.
+- popl %ecx
+- xchgl %eax, (%esp) # Get %eax contents end store function address.
+- ret $8 # Jump to function address.
+- .size _dl_runtime_resolve, .-_dl_runtime_resolve
+- .size _dl_runtime_profile, .-_dl_runtime_profile
+- .previous
++# define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\n\
++ .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 16\n\
++_dl_runtime_resolve:\n\
++_dl_runtime_profile:\n\
++ pushl %eax # Preserve registers otherwise clobbered.\n\
++ pushl %ecx\n\
++ pushl %edx\n\
++ movl 16(%esp), %edx # Push the arguments for `fixup'\n\
++ movl 12(%esp), %eax\n\
++ pushl %edx\n\
++ pushl %eax\n\
++ call fixup # Call resolver.\n\
++ popl %edx # Pop the parameters\n\
++ popl %ecx\n\
++ popl %edx # Get register content back.\n\
++ popl %ecx\n\
++ xchgl %eax, (%esp) # Get %eax contents end store function address.\n\
++ ret $8 # Jump to function address.\n\
++ .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\
++ .size _dl_runtime_profile, .-_dl_runtime_profile\n\
++ .previous\n\
+ ");
+ #endif
+
+@@ -205,7 +208,7 @@
+ _dl_start_user:\n\
+ # Save the user entry point address in %edi.\n\
+ movl %eax, %edi\n\
+- # Point %ebx at the GOT.
++ # Point %ebx at the GOT.\n\
+ call 0b\n\
+ addl $_GLOBAL_OFFSET_TABLE_, %ebx\n\
+ # Store the highest stack address\n\
+
+===================================================================
+--- glibc-2.2.2/elf/dl-runtime.c.old 2005-07-07 15:40:26.000000000 -0700
++++ glibc-2.2.2/elf/dl-runtime.c 2005-07-07 15:41:57.000000000 -0700
+@@ -33,6 +33,11 @@
+ # 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
+@@ -42,7 +47,7 @@
+ function. */
+
+ #ifndef ELF_MACHINE_NO_PLT
+-static ElfW(Addr) __attribute__ ((unused))
++static ElfW(Addr) __attribute__ ((unused)) ARCH_FIXUP_ATTRIBUTE
+ fixup (
+ # ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS
+ ELF_MACHINE_RUNTIME_FIXUP_ARGS,
+@@ -126,7 +131,7 @@
+
+ #if !defined PROF && !defined ELF_MACHINE_NO_PLT && !__BOUNDED_POINTERS__
+
+-static ElfW(Addr) __attribute__ ((unused))
++static ElfW(Addr) __attribute__ ((unused)) ARCH_FIXUP_ATTRIBUTE
+ profile_fixup (
+ #ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS
+ ELF_MACHINE_RUNTIME_FIXUP_ARGS,
diff --git a/patches/glibc/2.2.2/glibc-2.2.2-allow-gcc3-errlist.patch b/patches/glibc/2.2.2/glibc-2.2.2-allow-gcc3-errlist.patch
new file mode 100644
index 0000000..1a9d407
--- /dev/null
+++ b/patches/glibc/2.2.2/glibc-2.2.2-allow-gcc3-errlist.patch
@@ -0,0 +1,18 @@
+Fixes error
+../sysdeps/unix/sysv/linux/errlist.c:41: error: weak declaration of '_old_sys_nerr' must precede definition
+
+===================================================================
+--- glibc-2.2.2/sysdeps/unix/sysv/linux/errlist.c.old 2005-04-11 16:58:21.000000000 -0700
++++ glibc-2.2.2/sysdeps/unix/sysv/linux/errlist.c 2005-04-11 16:58:10.000000000 -0700
+@@ -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.2/glibc-2.2.2-allow-gcc3-longlong.patch b/patches/glibc/2.2.2/glibc-2.2.2-allow-gcc3-longlong.patch
new file mode 100644
index 0000000..b119b92
--- /dev/null
+++ b/patches/glibc/2.2.2/glibc-2.2.2-allow-gcc3-longlong.patch
@@ -0,0 +1,811 @@
+Fixes error
+./longlong.h:423: error: parse error before '%' token
+./longlong.h:423: error: missing terminating " character
+./longlong.h:432: error: missing terminating " character
+See also patches/glibc-2.1.3/glibc-2.1.3-allow-gcc3-longlong.patch
+
+===================================================================
+--- glibc-2.2.2/stdlib/longlong.h.old 2000-02-11 15:48:58.000000000 -0800
++++ glibc-2.2.2/stdlib/longlong.h 2005-04-11 15:36:10.000000000 -0700
+@@ -108,8 +108,8 @@
+
+ #if (defined (__a29k__) || defined (_AM29K)) && W_TYPE_SIZE == 32
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+- __asm__ ("add %1,%4,%5
+- addc %0,%2,%3" \
++ __asm__ ("add %1,%4,%5\n" \
++ "addc %0,%2,%3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%r" ((USItype) (ah)), \
+@@ -117,8 +117,8 @@
+ "%r" ((USItype) (al)), \
+ "rI" ((USItype) (bl)))
+ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+- __asm__ ("sub %1,%4,%5
+- subc %0,%2,%3" \
++ __asm__ ("sub %1,%4,%5\n" \
++ "subc %0,%2,%3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "r" ((USItype) (ah)), \
+@@ -175,8 +175,8 @@
+
+ #if defined (__arc__) && W_TYPE_SIZE == 32
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+- __asm__ ("add.f %1, %4, %5
+- adc %0, %2, %3" \
++ __asm__ ("add.f %1, %4, %5\n" \
++ "adc %0, %2, %3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%r" ((USItype) (ah)), \
+@@ -184,8 +184,8 @@
+ "%r" ((USItype) (al)), \
+ "rIJ" ((USItype) (bl)))
+ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+- __asm__ ("sub.f %1, %4, %5
+- sbc %0, %2, %3" \
++ __asm__ ("sub.f %1, %4, %5\n" \
++ "sbc %0, %2, %3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "r" ((USItype) (ah)), \
+@@ -206,8 +206,8 @@
+
+ #if defined (__arm__) && W_TYPE_SIZE == 32
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+- __asm__ ("adds %1, %4, %5
+- adc %0, %2, %3" \
++ __asm__ ("adds %1, %4, %5\n" \
++ "adc %0, %2, %3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%r" ((USItype) (ah)), \
+@@ -215,8 +215,8 @@
+ "%r" ((USItype) (al)), \
+ "rI" ((USItype) (bl)))
+ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+- __asm__ ("subs %1, %4, %5
+- sbc %0, %2, %3" \
++ __asm__ ("subs %1, %4, %5\n" \
++ "sbc %0, %2, %3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "r" ((USItype) (ah)), \
+@@ -225,19 +225,19 @@
+ "rI" ((USItype) (bl)))
+ #define umul_ppmm(xh, xl, a, b) \
+ {register USItype __t0, __t1, __t2; \
+- __asm__ ("%@ Inlined umul_ppmm
+- mov %2, %5, lsr #16
+- mov %0, %6, lsr #16
+- bic %3, %5, %2, lsl #16
+- bic %4, %6, %0, lsl #16
+- mul %1, %3, %4
+- mul %4, %2, %4
+- mul %3, %0, %3
+- mul %0, %2, %0
+- adds %3, %4, %3
+- addcs %0, %0, #65536
+- adds %1, %1, %3, lsl #16
+- adc %0, %0, %3, lsr #16" \
++ __asm__ ("%@ Inlined umul_ppmm\n" \
++ "mov %2, %5, lsr #16\n" \
++ "mov %0, %6, lsr #16\n" \
++ "bic %3, %5, %2, lsl #16\n" \
++ "bic %4, %6, %0, lsl #16\n" \
++ "mul %1, %3, %4\n" \
++ "mul %4, %2, %4\n" \
++ "mul %3, %0, %3\n" \
++ "mul %0, %2, %0\n" \
++ "adds %3, %4, %3\n" \
++ "addcs %0, %0, #65536\n" \
++ "adds %1, %1, %3, lsl #16\n" \
++ "adc %0, %0, %3, lsr #16" \
+ : "=&r" ((USItype) (xh)), \
+ "=r" ((USItype) (xl)), \
+ "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \
+@@ -277,8 +277,8 @@
+
+ #if defined (__gmicro__) && W_TYPE_SIZE == 32
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+- __asm__ ("add.w %5,%1
+- addx %3,%0" \
++ __asm__ ("add.w %5,%1\n" \
++ "addx %3,%0" \
+ : "=g" ((USItype) (sh)), \
+ "=&g" ((USItype) (sl)) \
+ : "%0" ((USItype) (ah)), \
+@@ -286,8 +286,8 @@
+ "%1" ((USItype) (al)), \
+ "g" ((USItype) (bl)))
+ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+- __asm__ ("sub.w %5,%1
+- subx %3,%0" \
++ __asm__ ("sub.w %5,%1\n" \
++ "subx %3,%0" \
+ : "=g" ((USItype) (sh)), \
+ "=&g" ((USItype) (sl)) \
+ : "0" ((USItype) (ah)), \
+@@ -316,8 +316,8 @@
+
+ #if defined (__hppa) && W_TYPE_SIZE == 32
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+- __asm__ ("add %4,%5,%1
+- addc %2,%3,%0" \
++ __asm__ ("add %4,%5,%1\n" \
++ "addc %2,%3,%0" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%rM" ((USItype) (ah)), \
+@@ -325,8 +325,8 @@
+ "%rM" ((USItype) (al)), \
+ "rM" ((USItype) (bl)))
+ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+- __asm__ ("sub %4,%5,%1
+- subb %2,%3,%0" \
++ __asm__ ("sub %4,%5,%1\n" \
++ "subb %2,%3,%0" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "rM" ((USItype) (ah)), \
+@@ -357,22 +357,22 @@
+ do { \
+ USItype __tmp; \
+ __asm__ ( \
+- "ldi 1,%0
+- extru,= %1,15,16,%%r0 ; Bits 31..16 zero?
+- extru,tr %1,15,16,%1 ; No. Shift down, skip add.
+- ldo 16(%0),%0 ; Yes. Perform add.
+- extru,= %1,23,8,%%r0 ; Bits 15..8 zero?
+- extru,tr %1,23,8,%1 ; No. Shift down, skip add.
+- ldo 8(%0),%0 ; Yes. Perform add.
+- extru,= %1,27,4,%%r0 ; Bits 7..4 zero?
+- extru,tr %1,27,4,%1 ; No. Shift down, skip add.
+- ldo 4(%0),%0 ; Yes. Perform add.
+- extru,= %1,29,2,%%r0 ; Bits 3..2 zero?
+- extru,tr %1,29,2,%1 ; No. Shift down, skip add.
+- ldo 2(%0),%0 ; Yes. Perform add.
+- extru %1,30,1,%1 ; Extract bit 1.
+- sub %0,%1,%0 ; Subtract it.
+- " : "=r" (count), "=r" (__tmp) : "1" (x)); \
++ "ldi 1,%0\n" \
++ "extru,= %1,15,16,%%r0 ; Bits 31..16 zero?\n" \
++ "extru,tr %1,15,16,%1 ; No. Shift down, skip add.\n" \
++ "ldo 16(%0),%0 ; Yes. Perform add.\n" \
++ "extru,= %1,23,8,%%r0 ; Bits 15..8 zero?\n" \
++ "extru,tr %1,23,8,%1 ; No. Shift down, skip add.\n" \
++ "ldo 8(%0),%0 ; Yes. Perform add.\n" \
++ "extru,= %1,27,4,%%r0 ; Bits 7..4 zero?\n" \
++ "extru,tr %1,27,4,%1 ; No. Shift down, skip add.\n" \
++ "ldo 4(%0),%0 ; Yes. Perform add.\n" \
++ "extru,= %1,29,2,%%r0 ; Bits 3..2 zero?\n" \
++ "extru,tr %1,29,2,%1 ; No. Shift down, skip add.\n" \
++ "ldo 2(%0),%0 ; Yes. Perform add.\n" \
++ "extru %1,30,1,%1 ; Extract bit 1.\n" \
++ "sub %0,%1,%0 ; Subtract it.\n" \
++ : "=r" (count), "=r" (__tmp) : "1" (x)); \
+ } while (0)
+ #endif
+
+@@ -419,8 +419,8 @@
+
+ #if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+- __asm__ ("addl %5,%1
+- adcl %3,%0" \
++ __asm__ ("addl %5,%1\n" \
++ "adcl %3,%0" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%0" ((USItype) (ah)), \
+@@ -428,8 +428,8 @@
+ "%1" ((USItype) (al)), \
+ "g" ((USItype) (bl)))
+ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+- __asm__ ("subl %5,%1
+- sbbl %3,%0" \
++ __asm__ ("subl %5,%1\n" \
++ "sbbl %3,%0" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "0" ((USItype) (ah)), \
+@@ -525,9 +525,9 @@
+ #if defined (__M32R__) && W_TYPE_SIZE == 32
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ /* The cmp clears the condition bit. */ \
+- __asm__ ("cmp %0,%0
+- addx %%5,%1
+- addx %%3,%0" \
++ __asm__ ("cmp %0,%0\n" \
++ "addx %%5,%1\n" \
++ "addx %%3,%0" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%0" ((USItype) (ah)), \
+@@ -537,9 +537,9 @@
+ : "cbit")
+ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ /* The cmp clears the condition bit. */ \
+- __asm__ ("cmp %0,%0
+- subx %5,%1
+- subx %3,%0" \
++ __asm__ ("cmp %0,%0\n" \
++ "subx %5,%1\n" \
++ "subx %3,%0" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "0" ((USItype) (ah)), \
+@@ -551,8 +551,8 @@
+
+ #if defined (__mc68000__) && W_TYPE_SIZE == 32
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+- __asm__ ("add%.l %5,%1
+- addx%.l %3,%0" \
++ __asm__ ("add%.l %5,%1\n" \
++ "addx%.l %3,%0" \
+ : "=d" ((USItype) (sh)), \
+ "=&d" ((USItype) (sl)) \
+ : "%0" ((USItype) (ah)), \
+@@ -560,8 +560,8 @@
+ "%1" ((USItype) (al)), \
+ "g" ((USItype) (bl)))
+ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+- __asm__ ("sub%.l %5,%1
+- subx%.l %3,%0" \
++ __asm__ ("sub%.l %5,%1\n" \
++ "subx%.l %3,%0" \
+ : "=d" ((USItype) (sh)), \
+ "=&d" ((USItype) (sl)) \
+ : "0" ((USItype) (ah)), \
+@@ -602,32 +602,32 @@
+ #if !defined(__mcf5200__)
+ /* %/ inserts REGISTER_PREFIX, %# inserts IMMEDIATE_PREFIX. */
+ #define umul_ppmm(xh, xl, a, b) \
+- __asm__ ("| Inlined umul_ppmm
+- move%.l %2,%/d0
+- move%.l %3,%/d1
+- move%.l %/d0,%/d2
+- swap %/d0
+- move%.l %/d1,%/d3
+- swap %/d1
+- move%.w %/d2,%/d4
+- mulu %/d3,%/d4
+- mulu %/d1,%/d2
+- mulu %/d0,%/d3
+- mulu %/d0,%/d1
+- move%.l %/d4,%/d0
+- eor%.w %/d0,%/d0
+- swap %/d0
+- add%.l %/d0,%/d2
+- add%.l %/d3,%/d2
+- jcc 1f
+- add%.l %#65536,%/d1
+-1: swap %/d2
+- moveq %#0,%/d0
+- move%.w %/d2,%/d0
+- move%.w %/d4,%/d2
+- move%.l %/d2,%1
+- add%.l %/d1,%/d0
+- move%.l %/d0,%0" \
++ __asm__ ("| Inlined umul_ppmm\n" \
++ "move%.l %2,%/d0\n" \
++ "move%.l %3,%/d1\n" \
++ "move%.l %/d0,%/d2\n" \
++ "swap %/d0\n" \
++ "move%.l %/d1,%/d3\n" \
++ "swap %/d1\n" \
++ "move%.w %/d2,%/d4\n" \
++ "mulu %/d3,%/d4\n" \
++ "mulu %/d1,%/d2\n" \
++ "mulu %/d0,%/d3\n" \
++ "mulu %/d0,%/d1\n" \
++ "move%.l %/d4,%/d0\n" \
++ "eor%.w %/d0,%/d0\n" \
++ "swap %/d0\n" \
++ "add%.l %/d0,%/d2\n" \
++ "add%.l %/d3,%/d2\n" \
++ "jcc 1f\n" \
++ "add%.l %#65536,%/d1\n" \
++"1: swap %/d2\n" \
++ "moveq %#0,%/d0\n" \
++ "move%.w %/d2,%/d0\n" \
++ "move%.w %/d4,%/d2\n" \
++ "move%.l %/d2,%1\n" \
++ "add%.l %/d1,%/d0\n" \
++ "move%.l %/d0,%0" \
+ : "=g" ((USItype) (xh)), \
+ "=g" ((USItype) (xl)) \
+ : "g" ((USItype) (a)), \
+@@ -653,8 +653,8 @@
+
+ #if defined (__m88000__) && W_TYPE_SIZE == 32
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+- __asm__ ("addu.co %1,%r4,%r5
+- addu.ci %0,%r2,%r3" \
++ __asm__ ("addu.co %1,%r4,%r5\n" \
++ "addu.ci %0,%r2,%r3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%rJ" ((USItype) (ah)), \
+@@ -662,8 +662,8 @@
+ "%rJ" ((USItype) (al)), \
+ "rJ" ((USItype) (bl)))
+ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+- __asm__ ("subu.co %1,%r4,%r5
+- subu.ci %0,%r2,%r3" \
++ __asm__ ("subu.co %1,%r4,%r5\n" \
++ "subu.ci %0,%r2,%r3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "rJ" ((USItype) (ah)), \
+@@ -880,8 +880,8 @@
+
+ #if defined (__pyr__) && W_TYPE_SIZE == 32
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+- __asm__ ("addw %5,%1
+- addwc %3,%0" \
++ __asm__ ("addw %5,%1\n" \
++ "addwc %3,%0" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%0" ((USItype) (ah)), \
+@@ -889,8 +889,8 @@
+ "%1" ((USItype) (al)), \
+ "g" ((USItype) (bl)))
+ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+- __asm__ ("subw %5,%1
+- subwb %3,%0" \
++ __asm__ ("subw %5,%1\n" \
++ "subwb %3,%0" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "0" ((USItype) (ah)), \
+@@ -902,8 +902,8 @@
+ ({union {UDItype __ll; \
+ struct {USItype __h, __l;} __i; \
+ } __xx; \
+- __asm__ ("movw %1,%R0
+- uemul %2,%0" \
++ __asm__ ("movw %1,%R0\n" \
++ "uemul %2,%0" \
+ : "=&r" (__xx.__ll) \
+ : "g" ((USItype) (u)), \
+ "g" ((USItype) (v))); \
+@@ -912,8 +912,8 @@
+
+ #if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+- __asm__ ("a %1,%5
+- ae %0,%3" \
++ __asm__ ("a %1,%5\n" \
++ "ae %0,%3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%0" ((USItype) (ah)), \
+@@ -921,8 +921,8 @@
+ "%1" ((USItype) (al)), \
+ "r" ((USItype) (bl)))
+ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+- __asm__ ("s %1,%5
+- se %0,%3" \
++ __asm__ ("s %1,%5\n" \
++ "se %0,%3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "0" ((USItype) (ah)), \
+@@ -933,26 +933,26 @@
+ do { \
+ USItype __m0 = (m0), __m1 = (m1); \
+ __asm__ ( \
+- "s r2,r2
+- mts r10,%2
+- m r2,%3
+- m r2,%3
+- m r2,%3
+- m r2,%3
+- m r2,%3
+- m r2,%3
+- m r2,%3
+- m r2,%3
+- m r2,%3
+- m r2,%3
+- m r2,%3
+- m r2,%3
+- m r2,%3
+- m r2,%3
+- m r2,%3
+- m r2,%3
+- cas %0,r2,r0
+- mfs r10,%1" \
++ "s r2,r2\n"
++ "mts r10,%2\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "m r2,%3\n" \
++ "cas %0,r2,r0\n" \
++ "mfs r10,%1" \
+ : "=r" ((USItype) (ph)), \
+ "=r" ((USItype) (pl)) \
+ : "%r" (__m0), \
+@@ -982,9 +982,9 @@
+ #if defined (__sh2__) && W_TYPE_SIZE == 32
+ #define umul_ppmm(w1, w0, u, v) \
+ __asm__ ( \
+- "dmulu.l %2,%3
+- sts macl,%1
+- sts mach,%0" \
++ "dmulu.l %2,%3\n" \
++ "sts macl,%1\n" \
++ "sts mach,%0" \
+ : "=r" ((USItype)(w1)), \
+ "=r" ((USItype)(w0)) \
+ : "r" ((USItype)(u)), \
+@@ -996,8 +996,8 @@
+ #if defined (__sparc__) && !defined(__arch64__) \
+ && !defined(__sparcv9) && W_TYPE_SIZE == 32
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+- __asm__ ("addcc %r4,%5,%1
+- addx %r2,%3,%0" \
++ __asm__ ("addcc %r4,%5,%1\n" \
++ "addx %r2,%3,%0" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%rJ" ((USItype) (ah)), \
+@@ -1006,8 +1006,8 @@
+ "rI" ((USItype) (bl)) \
+ __CLOBBER_CC)
+ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+- __asm__ ("subcc %r4,%5,%1
+- subx %r2,%3,%0" \
++ __asm__ ("subcc %r4,%5,%1\n" \
++ "subx %r2,%3,%0" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "rJ" ((USItype) (ah)), \
+@@ -1040,45 +1040,45 @@
+ : "r" ((USItype) (u)), \
+ "r" ((USItype) (v)))
+ #define udiv_qrnnd(q, r, n1, n0, d) \
+- __asm__ ("! Inlined udiv_qrnnd
+- wr %%g0,%2,%%y ! Not a delayed write for sparclite
+- tst %%g0
+- divscc %3,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%%g1
+- divscc %%g1,%4,%0
+- rd %%y,%1
+- bl,a 1f
+- add %1,%4,%1
+-1: ! End of inline udiv_qrnnd" \
++ __asm__ ("! Inlined udiv_qrnnd\n" \
++ "wr %%g0,%2,%%y ! Not a delayed write for sparclite\n" \
++ "tst %%g0\n" \
++ "divscc %3,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%%g1\n" \
++ "divscc %%g1,%4,%0\n" \
++ "rd %%y,%1\n" \
++ "bl,a 1f\n" \
++ "add %1,%4,%1\n" \
++"1: ! End of inline udiv_qrnnd" \
+ : "=r" ((USItype) (q)), \
+ "=r" ((USItype) (r)) \
+ : "r" ((USItype) (n1)), \
+@@ -1099,46 +1099,46 @@
+ /* SPARC without integer multiplication and divide instructions.
+ (i.e. at least Sun4/20,40,60,65,75,110,260,280,330,360,380,470,490) */
+ #define umul_ppmm(w1, w0, u, v) \
+- __asm__ ("! Inlined umul_ppmm
+- wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr
+- sra %3,31,%%o5 ! Don't move this insn
+- and %2,%%o5,%%o5 ! Don't move this insn
+- andcc %%g0,0,%%g1 ! Don't move this insn
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,%3,%%g1
+- mulscc %%g1,0,%%g1
+- add %%g1,%%o5,%0
+- rd %%y,%1" \
++ __asm__ ("! Inlined umul_ppmm\n" \
++ "wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr\n" \
++ "sra %3,31,%%o5 ! Don't move this insn\n" \
++ "and %2,%%o5,%%o5 ! Don't move this insn\n" \
++ "andcc %%g0,0,%%g1 ! Don't move this insn\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,%3,%%g1\n" \
++ "mulscc %%g1,0,%%g1\n" \
++ "add %%g1,%%o5,%0\n" \
++ "rd %%y,%1" \
+ : "=r" ((USItype) (w1)), \
+ "=r" ((USItype) (w0)) \
+ : "%rI" ((USItype) (u)), \
+@@ -1148,30 +1148,30 @@
+ /* It's quite necessary to add this much assembler for the sparc.
+ The default udiv_qrnnd (in C) is more than 10 times slower! */
+ #define udiv_qrnnd(q, r, n1, n0, d) \
+- __asm__ ("! Inlined udiv_qrnnd
+- mov 32,%%g1
+- subcc %1,%2,%%g0
+-1: bcs 5f
+- addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb
+- sub %1,%2,%1 ! this kills msb of n
+- addx %1,%1,%1 ! so this can't give carry
+- subcc %%g1,1,%%g1
+-2: bne 1b
+- subcc %1,%2,%%g0
+- bcs 3f
+- addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb
+- b 3f
+- sub %1,%2,%1 ! this kills msb of n
+-4: sub %1,%2,%1
+-5: addxcc %1,%1,%1
+- bcc 2b
+- subcc %%g1,1,%%g1
+-! Got carry from n. Subtract next step to cancel this carry.
+- bne 4b
+- addcc %0,%0,%0 ! shift n1n0 and a 0-bit in lsb
+- sub %1,%2,%1
+-3: xnor %0,0,%0
+- ! End of inline udiv_qrnnd" \
++ __asm__ ("! Inlined udiv_qrnnd\n" \
++ "mov 32,%%g1\n" \
++ "subcc %1,%2,%%g0\n" \
++"1: bcs 5f\n" \
++ "addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb\n" \
++ "sub %1,%2,%1 ! this kills msb of n\n" \
++ "addx %1,%1,%1 ! so this can't give carry\n" \
++ "subcc %%g1,1,%%g1\n" \
++"2: bne 1b\n" \
++ "subcc %1,%2,%%g0\n" \
++ "bcs 3f\n" \
++ "addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb\n" \
++ "b 3f\n" \
++ "sub %1,%2,%1 ! this kills msb of n\n" \
++"4: sub %1,%2,%1\n" \
++"5: addxcc %1,%1,%1\n" \
++ "bcc 2b\n" \
++ "subcc %%g1,1,%%g1\n" \
++"! Got carry from n. Subtract next step to cancel this carry.\n" \
++ "bne 4b\n" \
++ "addcc %0,%0,%0 ! shift n1n0 and a 0-bit in lsb\n" \
++ "sub %1,%2,%1\n" \
++"3: xnor %0,0,%0\n" \
++ "! End of inline udiv_qrnnd" \
+ : "=&r" ((USItype) (q)), \
+ "=&r" ((USItype) (r)) \
+ : "r" ((USItype) (d)), \
+@@ -1185,11 +1185,11 @@
+ #if ((defined (__sparc__) && defined (__arch64__)) \
+ || defined (__sparcv9)) && W_TYPE_SIZE == 64
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+- __asm__ ("addcc %r4,%5,%1
+- add %r2,%3,%0
+- bcs,a,pn %%xcc, 1f
+- add %0, 1, %0
+- 1:" \
++ __asm__ ("addcc %r4,%5,%1\n" \
++ "add %r2,%3,%0\n" \
++ "bcs,a,pn %%xcc, 1f\n" \
++ "add %0, 1, %0\n" \
++ "1:" \
+ : "=r" ((UDItype)(sh)), \
+ "=&r" ((UDItype)(sl)) \
+ : "%rJ" ((UDItype)(ah)), \
+@@ -1199,11 +1199,11 @@
+ __CLOBBER_CC)
+
+ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+- __asm__ ("subcc %r4,%5,%1
+- sub %r2,%3,%0
+- bcs,a,pn %%xcc, 1f
+- sub %0, 1, %0
+- 1:" \
++ __asm__ ("subcc %r4,%5,%1\n" \
++ "sub %r2,%3,%0\n" \
++ "bcs,a,pn %%xcc, 1f\n" \
++ "sub %0, 1, %0\n" \
++ "1:" \
+ : "=r" ((UDItype)(sh)), \
+ "=&r" ((UDItype)(sl)) \
+ : "rJ" ((UDItype)(ah)), \
+@@ -1216,27 +1216,27 @@
+ do { \
+ UDItype tmp1, tmp2, tmp3, tmp4; \
+ __asm__ __volatile__ ( \
+- "srl %7,0,%3
+- mulx %3,%6,%1
+- srlx %6,32,%2
+- mulx %2,%3,%4
+- sllx %4,32,%5
+- srl %6,0,%3
+- sub %1,%5,%5
+- srlx %5,32,%5
+- addcc %4,%5,%4
+- srlx %7,32,%5
+- mulx %3,%5,%3
+- mulx %2,%5,%5
+- sethi %%hi(0x80000000),%2
+- addcc %4,%3,%4
+- srlx %4,32,%4
+- add %2,%2,%2
+- movcc %%xcc,%%g0,%2
+- addcc %5,%4,%5
+- sllx %3,32,%3
+- add %1,%3,%1
+- add %5,%2,%0" \
++ "srl %7,0,%3\n" \
++ "mulx %3,%6,%1\n" \
++ "srlx %6,32,%2\n" \
++ "mulx %2,%3,%4\n" \
++ "sllx %4,32,%5\n" \
++ "srl %6,0,%3\n" \
++ "sub %1,%5,%5\n" \
++ "srlx %5,32,%5\n" \
++ "addcc %4,%5,%4\n" \
++ "srlx %7,32,%5\n" \
++ "mulx %3,%5,%3\n" \
++ "mulx %2,%5,%5\n" \
++ "sethi %%hi(0x80000000),%2\n" \
++ "addcc %4,%3,%4\n" \
++ "srlx %4,32,%4\n" \
++ "add %2,%2,%2\n" \
++ "movcc %%xcc,%%g0,%2\n" \
++ "addcc %5,%4,%5\n" \
++ "sllx %3,32,%3\n" \
++ "add %1,%3,%1\n" \
++ "add %5,%2,%0" \
+ : "=r" ((UDItype)(wh)), \
+ "=&r" ((UDItype)(wl)), \
+ "=&r" (tmp1), "=&r" (tmp2), "=&r" (tmp3), "=&r" (tmp4) \
+@@ -1250,8 +1250,8 @@
+
+ #if defined (__vax__) && W_TYPE_SIZE == 32
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+- __asm__ ("addl2 %5,%1
+- adwc %3,%0" \
++ __asm__ ("addl2 %5,%1\n" \
++ "adwc %3,%0" \
+ : "=g" ((USItype) (sh)), \
+ "=&g" ((USItype) (sl)) \
+ : "%0" ((USItype) (ah)), \
+@@ -1259,8 +1259,8 @@
+ "%1" ((USItype) (al)), \
+ "g" ((USItype) (bl)))
+ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+- __asm__ ("subl2 %5,%1
+- sbwc %3,%0" \
++ __asm__ ("subl2 %5,%1\n" \
++ "sbwc %3,%0" \
+ : "=g" ((USItype) (sh)), \
+ "=&g" ((USItype) (sl)) \
+ : "0" ((USItype) (ah)), \
diff --git a/patches/glibc/2.2.2/glibc-2.2.2-export_fp_hw.patch b/patches/glibc/2.2.2/glibc-2.2.2-export_fp_hw.patch
new file mode 100644
index 0000000..a14e1d4
--- /dev/null
+++ b/patches/glibc/2.2.2/glibc-2.2.2-export_fp_hw.patch
@@ -0,0 +1,30 @@
+Fixes undefined symbol _fp_hw required by the ABI:
+readelf -s /opt/crosstool/i686-pc-linux-gnu/i686-unknown-linux-gnu/gcc-3.4.3-glibc-2.2.2/i686-unknown-linux-gnu/lib/crt1.o | grep fp_hw
+ 29: 00000000 4 NOTYPE GLOBAL DEFAULT UND _fp_hw
+Rumored to fix problems with icc, which gets upset at any symbol
+which is undefined, even if nobody cares about it.
+
+Revision 1.16, Thu Feb 22 19:57:34 2001 UTC (4 years, 2 months ago) by drepper
+Branch: MAIN
+CVS Tags: glibc-2_2_3
+Changes since 1.15: +1 -1 lines
+Diff to previous 1.15 (colored)
+
+(_fp_hw): Actually define label.
+
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/i386/elf/start.S,v
+retrieving revision 1.15
+retrieving revision 1.16
+diff -u -r1.15 -r1.16
+--- libc/sysdeps/i386/elf/start.S 2001/02/03 21:34:54 1.15
++++ libc/sysdeps/i386/elf/start.S 2001/02/22 19:57:34 1.16
+@@ -85,7 +85,7 @@
+ meaningless since we don't support machines < 80386. */
+ .section .rodata
+ .globl _fp_hw
+- .long 3
++_fp_hw: .long 3
+ .size _fp_hw, 4
+
+ /* Define a symbol for the first piece of initialized data. */
diff --git a/patches/glibc/2.2.2/glibc-2.2.2-printf-not-macro.patch b/patches/glibc/2.2.2/glibc-2.2.2-printf-not-macro.patch
new file mode 100644
index 0000000..eae6fec
--- /dev/null
+++ b/patches/glibc/2.2.2/glibc-2.2.2-printf-not-macro.patch
@@ -0,0 +1,36 @@
+I'm testing toolchains with glibc-2.2.2 now. It looks ok except
+that glibc-2.2.2 headers contain the gosh-awful line
+ # define printf(fmt, args...) fprintf (stdout, fmt, ##args)
+which causes builds of programs with methods named 'printf' to fail with
+ error: `stdout' is not a type
+Feh.
+
+Revision 1.8, Thu Aug 2 16:09:51 2001 UTC (3 years, 9 months ago) by aj
+Branch: MAIN
+CVS Tags: glibc-2_3_2, glibc-2_2_4, glibc-2-3-1, glibc-2-3, glibc-2-2-branch, glibc-2-2-5
+
+(printf): Remove printf optimization since GCC 3.0 can optimize printf.
+
+http://sourceware.org/cgi-bin/cvsweb.cgi/libc/libio/bits/stdio.h.diff?r1=1.7&r2=1.8&cvsroot=glibc
+
+===================================================================
+RCS file: /cvs/glibc/libc/libio/bits/stdio.h,v
+retrieving revision 1.7
+retrieving revision 1.8
+diff -u -r1.7 -r1.8
+--- libc/libio/bits/stdio.h 2001/07/06 04:55:32 1.7
++++ libc/libio/bits/stdio.h 2001/08/02 16:09:51 1.8
+@@ -29,13 +29,6 @@
+
+
+ #ifdef __USE_EXTERN_INLINES
+-/* Since version 2.97 GCC knows about `fprintf' and can optimize certain
+- cases. Help gcc to optimize more code by mapping `printf' to the known
+- `fprintf' function. Unfortunately we have to use a macro. */
+-# if __GNUC_PREREQ (2,97)
+-# define printf(fmt, args...) fprintf (stdout, fmt, ##args)
+-# endif
+-
+ /* Write formatted output to stdout from argument list ARG. */
+ __STDIO_INLINE int
+ vprintf (__const char *__restrict __fmt, _G_va_list __arg) __THROW
diff --git a/patches/glibc/2.2.2/glibc-2.2.2-syslog-bugfix.patch b/patches/glibc/2.2.2/glibc-2.2.2-syslog-bugfix.patch
new file mode 100644
index 0000000..1a48c00
--- /dev/null
+++ b/patches/glibc/2.2.2/glibc-2.2.2-syslog-bugfix.patch
@@ -0,0 +1,60 @@
+Backport a bugfix from glibc-2.2.5 to glibc-2.2.2 for the following problem:
+ When syslog-ng is restarted (or HUPed), vixie-cron (and probably other
+ programs) stop logging to syslog.
+
+
+2001-08-27 Ulrich Drepper <Drepper@redhat.com> * misc/syslog.c (vsyslog):
+ Try a bit harder to use syslogd. If the connection went down after we
+ first used it try to connect again and resend the message before printing
+ to the console.
+
+http://sourceware.org/cgi-bin/cvsweb.cgi/libc/misc/Attic/syslog.c.diff?r1=1.32&r2=1.30&cvsroot=glibc
+[ paths adjusted ]
+
+===================================================================
+RCS file: /cvs/glibc/libc/misc/Attic/syslog.c,v
+retrieving revision 1.30
+retrieving revision 1.32
+diff -u -r1.30 -r1.32
+--- glibc-2.2.2/misc/syslog.c 2001/08/24 03:21:14 1.30
++++ glibc-2.2.5/misc/syslog.c 2001/08/30 23:13:49 1.32
+@@ -239,17 +239,29 @@
+
+ if (!connected || __send(LogFile, buf, bufsize, 0) < 0)
+ {
+- closelog_internal (); /* attempt re-open next time */
+- /*
+- * Output the message to the console; don't worry about blocking,
+- * if console blocks everything will. Make sure the error reported
+- * is the one from the syslogd failure.
+- */
+- if (LogStat & LOG_CONS &&
+- (fd = __open(_PATH_CONSOLE, O_WRONLY|O_NOCTTY, 0)) >= 0)
++ if (connected)
+ {
+- dprintf (fd, "%s\r\n", buf + msgoff);
+- (void)__close(fd);
++ /* Try to reopen the syslog connection. Maybe it went
++ down. */
++ closelog_internal ();
++ openlog_internal(LogTag, LogStat | LOG_NDELAY, 0);
++ }
++
++ if (!connected || __send(LogFile, buf, bufsize, 0) < 0)
++ {
++ closelog_internal (); /* attempt re-open next time */
++ /*
++ * Output the message to the console; don't worry
++ * about blocking, if console blocks everything will.
++ * Make sure the error reported is the one from the
++ * syslogd failure.
++ */
++ if (LogStat & LOG_CONS &&
++ (fd = __open(_PATH_CONSOLE, O_WRONLY|O_NOCTTY, 0)) >= 0)
++ {
++ dprintf (fd, "%s\r\n", buf + msgoff);
++ (void)__close(fd);
++ }
+ }
+ }
+
diff --git a/patches/glibc/2.2.2/glibc-2.2.5-alpha-pwrite64.patch b/patches/glibc/2.2.2/glibc-2.2.5-alpha-pwrite64.patch
new file mode 100644
index 0000000..89cc9ea
--- /dev/null
+++ b/patches/glibc/2.2.2/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.2/glibc-2.2.5-arm-pwrite64.patch b/patches/glibc/2.2.2/glibc-2.2.5-arm-pwrite64.patch
new file mode 100644
index 0000000..c4bd19c
--- /dev/null
+++ b/patches/glibc/2.2.2/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.2/glibc-2.2.5-i386-pwrite64.patch b/patches/glibc/2.2.2/glibc-2.2.5-i386-pwrite64.patch
new file mode 100644
index 0000000..761771f
--- /dev/null
+++ b/patches/glibc/2.2.2/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.2/glibc-2.2.5-m68k-pwrite.patch b/patches/glibc/2.2.2/glibc-2.2.5-m68k-pwrite.patch
new file mode 100644
index 0000000..eefc6fa
--- /dev/null
+++ b/patches/glibc/2.2.2/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.2/glibc-manual-stdin.texi-1.127.patch b/patches/glibc/2.2.2/glibc-manual-stdin.texi-1.127.patch
new file mode 100644
index 0000000..70245a6
--- /dev/null
+++ b/patches/glibc/2.2.2/glibc-manual-stdin.texi-1.127.patch
@@ -0,0 +1,18 @@
+===================================================================
+RCS file: /cvs/glibc/libc/manual/stdio.texi,v
+retrieving revision 1.126
+retrieving revision 1.127
+diff -u -r1.126 -r1.127
+--- libc/manual/stdio.texi 2001/06/06 07:11:31 1.126
++++ libc/manual/stdio.texi 2001/07/31 18:57:16 1.127
+@@ -3265,8 +3265,8 @@
+ If you are trying to read input that doesn't match a single, fixed
+ pattern, you may be better off using a tool such as Flex to generate a
+ lexical scanner, or Bison to generate a parser, rather than using
+-@code{scanf}. For more information about these tools, see @ref{, , ,
+-flex.info, Flex: The Lexical Scanner Generator}, and @ref{, , ,
++@code{scanf}. For more information about these tools, see @ref{Top, , ,
++flex.info, Flex: The Lexical Scanner Generator}, and @ref{Top, , ,
+ bison.info, The Bison Reference Manual}.
+
+ @node Input Conversion Syntax
diff --git a/patches/glibc/2.2.2/glibc-nss-noopt.patch b/patches/glibc/2.2.2/glibc-nss-noopt.patch
new file mode 100644
index 0000000..28aa2e1
--- /dev/null
+++ b/patches/glibc/2.2.2/glibc-nss-noopt.patch
@@ -0,0 +1,26 @@
+--- glibc-2.2.2/nss/Makefile.orig Tue May 20 16:02:47 2003
++++ glibc-2.2.2/nss/Makefile Tue May 20 16:03:52 2003
+@@ -41,6 +41,10 @@
+
+ tests = test-netdb
+
++# Disable optimization when building nss to avoid crash described in
++# http://gcc.gnu.org/ml/gcc-bugs/1998-06/msg00168.html
++default_cflags := -g -O0
++
+ include ../Makeconfig
+
+ ifeq (yes,$(build-static-nss))
+--- glibc-2.2.2/locale/Makefile.orig Tue May 20 17:29:11 2003
++++ glibc-2.2.2/locale/Makefile Tue May 20 17:29:39 2003
+@@ -66,6 +66,10 @@
+ GPERF = gperf
+ GPERFFLAGS = -acCgopt -k1,2,5,9,$$ -L ANSI-C
+
++# Disable optimization when building locale or nss to avoid crash described in
++# http://gcc.gnu.org/ml/gcc-bugs/1998-06/msg00168.html
++default_cflags := -g -O0
++
+ include ../Rules
+
+ programs/%-kw.h: programs/%-kw.gperf
diff --git a/patches/glibc/2.2.2/tst-pathopt-cross.patch b/patches/glibc/2.2.2/tst-pathopt-cross.patch
new file mode 100644
index 0000000..f64d673
--- /dev/null
+++ b/patches/glibc/2.2.2/tst-pathopt-cross.patch
@@ -0,0 +1,23 @@
+Fixes error
+tst-pathopt.sh: /crosstool-0.20/build/powerpc-750-linux-gnu/gcc-2.95.3-glibc-2.2.2/build-glibc/elf/ld.so: cannot execute binary file
+make[2]: *** [/crosstool-0.20/build/powerpc-750-linux-gnu/gcc-2.95.3-glibc-2.2.2/build-glibc/elf/tst-pathopt.out] Error 126
+See also http://sources.redhat.com/ml/libc-alpha/2001-03/msg00113.html
+
+===================================================================
+RCS file: /cvs/glibc/libc/elf/Makefile,v
+retrieving revision 1.196
+retrieving revision 1.197
+diff -u -r1.196 -r1.197
+--- libc/elf/Makefile 2001/03/16 07:29:45 1.196
++++ libc/elf/Makefile 2001/03/25 04:57:51 1.197
+@@ -246,8 +246,10 @@
+ generated += $(addsuffix .so,$(strip $(modules-names)))
+
+ ifeq (yes,$(build-shared))
++ifeq ($(cross-compiling),no)
+ tests: $(objpfx)tst-pathopt.out
+ endif
++endif
+
+ $(objpfx)testobj1.so: $(libdl)
+ $(objpfx)testobj1_1.so: $(objpfx)testobj1.so $(libdl)