diff options
Diffstat (limited to 'patches/glibc/2.2.5')
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 |