summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Schlemmer <azarah@gentoo.org>2003-01-15 00:36:35 +0000
committerMartin Schlemmer <azarah@gentoo.org>2003-01-15 00:36:35 +0000
commit6dbc513507262667771035f97aae6156ba35b142 (patch)
treed776597fc7ef4b58c75933741dabf5fd3b9dc4ed /sys-libs
parentadd wrappers to ~x86 (diff)
downloadgentoo-2-6dbc513507262667771035f97aae6156ba35b142.tar.gz
gentoo-2-6dbc513507262667771035f97aae6156ba35b142.tar.bz2
gentoo-2-6dbc513507262667771035f97aae6156ba35b142.zip
add MIPS patches; fix locale issue, bug #13240
Diffstat (limited to 'sys-libs')
-rw-r--r--sys-libs/glibc/ChangeLog9
-rw-r--r--sys-libs/glibc/files/2.3.1/glibc-2.3.1-ctype-compat-v3.patch66
-rw-r--r--sys-libs/glibc/files/2.3.1/glibc-2.3.1-elf-machine-rela-mips.patch33
-rw-r--r--sys-libs/glibc/files/2.3.1/glibc-2.3.1-exit-syscall-mips.patch13
-rw-r--r--sys-libs/glibc/files/2.3.1/glibc-2.3.1-fpu-cw-mips.patch12
-rw-r--r--sys-libs/glibc/files/2.3.1/glibc-2.3.1-inline-syscall-mips.patch251
-rw-r--r--sys-libs/glibc/files/2.3.1/glibc-2.3.1-libgcc-compat-mips.patch173
-rw-r--r--sys-libs/glibc/files/2.3.1/glibc-2.3.1-librt-mips.patch15
-rw-r--r--sys-libs/glibc/files/2.3.1/glibc-2.3.1-locale.patch323
-rw-r--r--sys-libs/glibc/files/2.3.1/glibc-2.3.1-tst-rndseek-mips.patch16
-rw-r--r--sys-libs/glibc/files/2.3.1/glibc-2.3.1-ulps-mips.patch1146
-rw-r--r--sys-libs/glibc/glibc-2.3.1-r2.ebuild27
12 files changed, 2080 insertions, 4 deletions
diff --git a/sys-libs/glibc/ChangeLog b/sys-libs/glibc/ChangeLog
index ecc802a85d20..4f144deba1b2 100644
--- a/sys-libs/glibc/ChangeLog
+++ b/sys-libs/glibc/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for sys-libs/glibc
# Copyright 2002 Gentoo Technologies, Inc.; Distributed under the GPL
-# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/ChangeLog,v 1.36 2002/12/29 09:38:06 azarah Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/ChangeLog,v 1.37 2003/01/15 00:36:35 azarah Exp $
+
+ 15 Jan 2003; Martin Schlemmer <azarah@gentoo.org> glibc-2.3.1-r2.ebuild :
+
+ Fix 'locale -a' not listing all locales. This to Stefan Jones
+ <cretin@gentoo.org> for this fix, bug #13240.
+
+ Add MIPS patches, thanks to <tuxus@gentoo.org> and <dragon@gentoo.org>.
28 Dec 2002; Martin Schlemmer <azarah@gentoo.org> glibc-2.3.1-r3.ebuild :
diff --git a/sys-libs/glibc/files/2.3.1/glibc-2.3.1-ctype-compat-v3.patch b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-ctype-compat-v3.patch
new file mode 100644
index 000000000000..edf03e901307
--- /dev/null
+++ b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-ctype-compat-v3.patch
@@ -0,0 +1,66 @@
+--- glibc-2.3.1/ctype/ctype-info.c.orig 2002-11-07 15:58:39.000000000 +0200
++++ glibc-2.3.1/ctype/ctype-info.c 2002-11-07 16:01:24.000000000 +0200
+@@ -48,6 +48,7 @@
+
+ #define b(t,x,o) (((const t *) _nl_C_LC_CTYPE_##x) + o)
+
++#if 0
+ const unsigned short int *__ctype_b = b (unsigned short int, class, 128);
+ const __uint32_t *__ctype32_b = b (__uint32_t, class32, 0);
+ const __int32_t *__ctype_tolower = b (__int32_t, tolower, 128);
+@@ -61,5 +62,23 @@
+ compat_symbol (libc, __ctype32_b, __ctype32_b, GLIBC_2_0);
+ compat_symbol (libc, __ctype32_tolower, __ctype32_tolower, GLIBC_2_2);
+ compat_symbol (libc, __ctype32_toupper, __ctype32_toupper, GLIBC_2_2);
++#endif
+
+ #endif
++
++/* Temporarily exported until all .a libraries are recompiled. */
++#undef b
++#define b(t,x,o) (((const t *) _nl_C_LC_CTYPE_##x) + o)
++
++extern const char _nl_C_LC_CTYPE_class[] attribute_hidden;
++extern const char _nl_C_LC_CTYPE_class32[] attribute_hidden;
++extern const char _nl_C_LC_CTYPE_toupper[] attribute_hidden;
++extern const char _nl_C_LC_CTYPE_tolower[] attribute_hidden;
++
++const unsigned short int *__ctype_b = b (unsigned short int, class, 128);
++const __uint32_t *__ctype32_b = b (__uint32_t, class32, 0);
++const __int32_t *__ctype_tolower = b (__int32_t, tolower, 128);
++const __int32_t *__ctype_toupper = b (__int32_t, toupper, 128);
++const __uint32_t *__ctype32_tolower = b (__uint32_t, tolower, 128);
++const __uint32_t *__ctype32_toupper = b (__uint32_t, toupper, 128);
++
+--- glibc-2.3.1/locale/lc-ctype.c.orig 2002-12-30 11:43:39.000000000 +0200
++++ glibc-2.3.1/locale/lc-ctype.c 2002-12-30 11:48:22.000000000 +0200
+@@ -75,6 +75,7 @@
+ We need those relocations so that a versioned definition with a COPY
+ reloc in an executable will override the libc.so definition. */
+
++#if 0
+ compat_symbol (libc, __ctype_b, __ctype_b, GLIBC_2_0);
+ compat_symbol (libc, __ctype_tolower, __ctype_tolower, GLIBC_2_0);
+ compat_symbol (libc, __ctype_toupper, __ctype_toupper, GLIBC_2_0);
+@@ -89,4 +90,21 @@
+ __ctype32_toupper = current (uint32_t, TOUPPER32, 0);
+ __ctype32_tolower = current (uint32_t, TOLOWER32, 0);
+ #endif
++
++#endif
++
++ /* Temporary. */
++ extern __const unsigned short int *__ctype_b; /* Characteristics. */
++ extern __const __int32_t *__ctype_tolower; /* Case conversions. */
++ extern __const __int32_t *__ctype_toupper; /* Case conversions. */
++ extern const uint32_t *__ctype32_b;
++ extern const uint32_t *__ctype32_toupper;
++ extern const uint32_t *__ctype32_tolower;
++
++ __ctype_b = current (uint16_t, CLASS, 128);
++ __ctype_toupper = current (uint32_t, TOUPPER, 128);
++ __ctype_tolower = current (uint32_t, TOLOWER, 128);
++ __ctype32_b = current (uint32_t, CLASS32, 0);
++ __ctype32_toupper = current (uint32_t, TOUPPER32, 0);
++ __ctype32_tolower = current (uint32_t, TOLOWER32, 0);
+ }
diff --git a/sys-libs/glibc/files/2.3.1/glibc-2.3.1-elf-machine-rela-mips.patch b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-elf-machine-rela-mips.patch
new file mode 100644
index 000000000000..6bf94f9f5de5
--- /dev/null
+++ b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-elf-machine-rela-mips.patch
@@ -0,0 +1,33 @@
+# DP: 2002-02-04 H.J. Lu <hjl@gnu.org>
+# DP: elf/dl-conflict.c (_dl_resolve_conflicts): Dummy if
+# DP: _DL_HAVE_NO_ELF_MACHINE_RELA is defined.
+
+--- libc/elf/dl-conflict.c.mips Mon Feb 4 13:44:57 2002
++++ libc/elf/dl-conflict.c Mon Feb 4 15:10:31 2002
+@@ -33,6 +33,7 @@ void
+ _dl_resolve_conflicts (struct link_map *l, ElfW(Rela) *conflict,
+ ElfW(Rela) *conflictend)
+ {
++#ifndef _DL_HAVE_NO_ELF_MACHINE_RELA
+ if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_RELOC, 0))
+ _dl_printf ("\nconflict processing: %s\n",
+ l->l_name[0] ? l->l_name : _dl_argv[0]);
+@@ -63,4 +64,5 @@ _dl_resolve_conflicts (struct link_map *
+ for (; conflict < conflictend; ++conflict)
+ elf_machine_rela (l, conflict, NULL, NULL, (void *) conflict->r_offset);
+ }
++#endif
+ }
+--- libc/sysdeps/mips/dl-machine.h.mips Mon Feb 4 13:45:18 2002
++++ libc/sysdeps/mips/dl-machine.h Mon Feb 4 15:08:39 2002
+@@ -56,6 +56,9 @@
+ #define ELF_MACHINE_JMP_SLOT R_MIPS_REL32
+ #define elf_machine_type_class(type) ELF_RTYPE_CLASS_PLT
+
++/* MIPS doesn't support RELA. */
++#define _DL_HAVE_NO_ELF_MACHINE_RELA
++
+ /* Translate a processor specific dynamic tag to the index
+ in l_info array. */
+ #define DT_MIPS(x) (DT_MIPS_##x - DT_LOPROC + DT_NUM)
+
diff --git a/sys-libs/glibc/files/2.3.1/glibc-2.3.1-exit-syscall-mips.patch b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-exit-syscall-mips.patch
new file mode 100644
index 000000000000..2fe6cf67b73b
--- /dev/null
+++ b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-exit-syscall-mips.patch
@@ -0,0 +1,13 @@
+# DP: mips still has not INLINE_SYSCALL so define __syscall_exit
+# DP: status: applied to CVS
+
+--- libc/sysdeps/unix/sysv/linux/mips/syscalls.list.orig 2002-09-22 13:25:21.000000000 +0000
++++ libc/sysdeps/unix/sysv/linux/mips/syscalls.list 2002-09-22 13:25:21.000000000 +0000
+@@ -74,6 +74,7 @@
+ s_sigprocmask sigprocmask sigprocmask i:ipp __syscall_sigprocmask
+ s_stat64 xstat64 stat64 i:sp __syscall_stat64
+ s_truncate64 truncate64 truncate64 i:siii __syscall_truncate64
++s_exit _exit exit i:i __syscall_exit
+
+ # Todo: we can pass 6 args in registers, no need for the wrapper
+ sys_sysctl sysctl _sysctl i:p __syscall__sysctl
diff --git a/sys-libs/glibc/files/2.3.1/glibc-2.3.1-fpu-cw-mips.patch b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-fpu-cw-mips.patch
new file mode 100644
index 000000000000..392b11648c72
--- /dev/null
+++ b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-fpu-cw-mips.patch
@@ -0,0 +1,12 @@
+diff -u -r1.6 fpu_control.h
+--- libc/sysdeps/mips/fpu_control.h 6 Jul 2001 04:56:00 -0000 1.6
++++ libc/sysdeps/mips/fpu_control.h 19 Oct 2002 16:03:35 -0000
+@@ -74,7 +74,7 @@
+ #define _FPU_RC_UP 0x2
+ #define _FPU_RC_DOWN 0x3
+
+-#define _FPU_RESERVED 0xfe3c0000 /* Reserved bits in cw */
++#define _FPU_RESERVED 0xfebc0000 /* Reserved bits in cw */
+
+
+ /* The fdlibm code requires strict IEEE double precision arithmetic,
diff --git a/sys-libs/glibc/files/2.3.1/glibc-2.3.1-inline-syscall-mips.patch b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-inline-syscall-mips.patch
new file mode 100644
index 000000000000..4ec07a387678
--- /dev/null
+++ b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-inline-syscall-mips.patch
@@ -0,0 +1,251 @@
+Index: sysdeps/unix/sysv/linux/mips/sysdep.h
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/mips/sysdep.h,v
+retrieving revision 1.2
+diff -u -u -r1.2 sysdep.h
+--- libc/sysdeps/unix/sysv/linux/mips/sysdep.h 6 Jul 2001 04:56:18 -0000 1.2
++++ libc/sysdeps/unix/sysv/linux/mips/sysdep.h 21 Oct 2002 10:33:16 -0000
+@@ -33,4 +33,243 @@
+ # define SYS_ify(syscall_name) __NR_/**/syscall_name
+ #endif
+
++#undef INLINE_SYSCALL
++#define INLINE_SYSCALL(name, nr, args...) inline_syscall##nr(name, args)
++
++#define __SYSCALL_CLOBBERS "$1", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25"
++
++#define inline_syscall0(name,dummy...) \
++({ \
++ register unsigned long __v0 asm("$2") = SYS_ify(name); \
++ register unsigned long __a3 asm("$7"); \
++ unsigned long _sys_result; \
++ \
++ __asm__ volatile ( \
++ ".set\tnoreorder\n\t" \
++ "li\t$2, %2\t\t\t# " #name "\n\t" \
++ "syscall\n\t" \
++ ".set reorder" \
++ : "=&r" (__v0), "=r" (__a3) \
++ : "i" (SYS_ify(name)) \
++ : "$4", "$5", "$6", __SYSCALL_CLOBBERS); \
++ \
++ if ( __a3 ) { \
++ unsigned long _sys_error = __v0; \
++ __set_errno(_sys_error); \
++ _sys_result = (unsigned long)(-1); \
++ } else \
++ _sys_result = __v0; \
++ _sys_result; \
++})
++
++#define inline_syscall1(name,arg1) \
++({ \
++ register unsigned long __v0 asm("$2") = SYS_ify(name); \
++ register unsigned long __a0 asm("$4") = (unsigned long) arg1; \
++ register unsigned long __a3 asm("$7"); \
++ unsigned long _sys_result; \
++ \
++ __asm__ volatile ( \
++ ".set\tnoreorder\n\t" \
++ "li\t$2, %3\t\t\t# " #name "\n\t" \
++ "syscall\n\t" \
++ ".set reorder" \
++ : "=&r" (__v0), "=r" (__a3) \
++ : "r" (__a0), "i" (SYS_ify(name)) \
++ : "$5", "$6", __SYSCALL_CLOBBERS); \
++ \
++ if ( __a3 ) { \
++ unsigned long _sys_error = __v0; \
++ __set_errno(_sys_error); \
++ _sys_result = (unsigned long)(-1); \
++ } else \
++ _sys_result = __v0; \
++ _sys_result; \
++})
++
++
++
++#define inline_syscall2(name,arg1,arg2) \
++({ \
++ register unsigned long __v0 asm("$2") = SYS_ify(name); \
++ register unsigned long __a0 asm("$4") = (unsigned long) arg1; \
++ register unsigned long __a1 asm("$5") = (unsigned long) arg2; \
++ register unsigned long __a3 asm("$7"); \
++ unsigned long _sys_result; \
++ \
++ __asm__ volatile ( \
++ ".set\tnoreorder\n\t" \
++ "li\t$2, %4\t\t\t# " #name "\n\t" \
++ "syscall\n\t" \
++ ".set\treorder" \
++ : "=&r" (__v0), "=r" (__a3) \
++ : "r" (__a0), "r" (__a1), "i" (SYS_ify(name)) \
++ : "$6", __SYSCALL_CLOBBERS); \
++ \
++ if ( __a3 ) { \
++ unsigned long _sys_error = __v0; \
++ __set_errno(_sys_error); \
++ _sys_result = (unsigned long)(-1); \
++ } else \
++ _sys_result = __v0; \
++ _sys_result; \
++})
++
++#define inline_syscall3(name,arg1,arg2,arg3) \
++({ \
++ register unsigned long __v0 asm("$2") = SYS_ify(name); \
++ register unsigned long __a0 asm("$4") = (unsigned long) arg1; \
++ register unsigned long __a1 asm("$5") = (unsigned long) arg2; \
++ register unsigned long __a2 asm("$6") = (unsigned long) arg3; \
++ register unsigned long __a3 asm("$7"); \
++ unsigned long _sys_result; \
++ \
++ __asm__ volatile ( \
++ ".set\tnoreorder\n\t" \
++ "li\t$2, %5\t\t\t# " #name "\n\t" \
++ "syscall\n\t" \
++ ".set\treorder" \
++ : "=&r" (__v0), "=r" (__a3) \
++ : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)) \
++ : __SYSCALL_CLOBBERS); \
++ \
++ if (__a3 ) { \
++ unsigned long _sys_error = __v0; \
++ __set_errno(_sys_error); \
++ _sys_result = (unsigned long)(-1); \
++ } else \
++ _sys_result = __v0; \
++ _sys_result; \
++})
++
++#define inline_syscall4(name,arg1,arg2,arg3,arg4) \
++({ \
++ register unsigned long __v0 asm("$2") = SYS_ify(name); \
++ register unsigned long __a0 asm("$4") = (unsigned long) arg1; \
++ register unsigned long __a1 asm("$5") = (unsigned long) arg2; \
++ register unsigned long __a2 asm("$6") = (unsigned long) arg3; \
++ register unsigned long __a3 asm("$7") = (unsigned long) arg4; \
++ unsigned long _sys_result; \
++ \
++ __asm__ volatile ( \
++ ".set\tnoreorder\n\t" \
++ "li\t$2, %5\t\t\t# " #name "\n\t" \
++ "syscall\n\t" \
++ ".set\treorder" \
++ : "=&r" (__v0), "+r" (__a3) \
++ : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)) \
++ : __SYSCALL_CLOBBERS); \
++ \
++ if ( __a3 ) { \
++ unsigned long _sys_error = __v0; \
++ __set_errno(_sys_error); \
++ _sys_result = (unsigned long)(-1); \
++ } else \
++ _sys_result = __v0; \
++ _sys_result; \
++})
++
++#define inline_syscall5(name,arg1,arg2,arg3,arg4,arg5) \
++({ \
++ register unsigned long __v0 asm("$2") = SYS_ify(name); \
++ register unsigned long __a0 asm("$4") = (unsigned long) arg1; \
++ register unsigned long __a1 asm("$5") = (unsigned long) arg2; \
++ register unsigned long __a2 asm("$6") = (unsigned long) arg3; \
++ register unsigned long __a3 asm("$7") = (unsigned long) arg4; \
++ unsigned long _sys_result; \
++ \
++ __asm__ volatile ( \
++ ".set\tnoreorder\n\t" \
++ "lw\t$2, %6\n\t" \
++ "subu\t$29, 32\n\t" \
++ "sw\t$2, 16($29)\n\t" \
++ "li\t$2, %5\t\t\t# " #name "\n\t" \
++ "syscall\n\t" \
++ "addiu\t$29, 32\n\t" \
++ ".set\treorder" \
++ : "=&r" (__v0), "+r" (__a3) \
++ : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
++ "m" ((unsigned long)arg5) \
++ : __SYSCALL_CLOBBERS); \
++ \
++ if (__a3 != 0) { \
++ unsigned long _sys_error = __v0; \
++ __set_errno(_sys_error); \
++ _sys_result = (unsigned long)(-1); \
++ } else \
++ _sys_result = __v0; \
++ _sys_result; \
++})
++
++#define inline_syscall6(name,arg1,arg2,arg3,arg4,arg5,arg6) \
++({ \
++ register unsigned long __v0 asm("$2") = SYS_ify(name); \
++ register unsigned long __a0 asm("$4") = (unsigned long) arg1; \
++ register unsigned long __a1 asm("$5") = (unsigned long) arg2; \
++ register unsigned long __a2 asm("$6") = (unsigned long) arg3; \
++ register unsigned long __a3 asm("$7") = (unsigned long) arg4; \
++ unsigned long _sys_result; \
++ \
++ __asm__ volatile ( \
++ ".set\tnoreorder\n\t" \
++ "lw\t$2, %6\n\t" \
++ "lw\t$8, %7\n\t" \
++ "subu\t$29, 32\n\t" \
++ "sw\t$2, 16($29)\n\t" \
++ "sw\t$8, 20($29)\n\t" \
++ "li\t$2, %5\t\t\t# " #name "\n\t" \
++ "syscall\n\t" \
++ "addiu\t$29, 32\n\t" \
++ ".set\treorder" \
++ : "=&r" (__v0), "+r" (__a3) \
++ : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
++ "m" ((unsigned long)arg5), "m" ((unsigned long)arg6) \
++ : __SYSCALL_CLOBBERS); \
++ \
++ if ( __a3 ) { \
++ unsigned long _sys_error = __v0; \
++ __set_errno(_sys_error); \
++ _sys_result = (unsigned long)(-1); \
++ } else \
++ _sys_result = __v0; \
++ _sys_result; \
++})
++
++#define inline_syscall7(name,arg1,arg2,arg3,arg4,arg5,arg6,arg7) \
++({ \
++ register unsigned long __v0 asm("$2") = SYS_ify(name); \
++ register unsigned long __a0 asm("$4") = (unsigned long) arg1; \
++ register unsigned long __a1 asm("$5") = (unsigned long) arg2; \
++ register unsigned long __a2 asm("$6") = (unsigned long) arg3; \
++ register unsigned long __a3 asm("$7") = (unsigned long) arg4; \
++ unsigned long _sys_result; \
++ \
++ __asm__ volatile ( \
++ ".set\tnoreorder\n\t" \
++ "lw\t$2, %6\n\t" \
++ "lw\t$8, %7\n\t" \
++ "lw\t$9, %8\n\t" \
++ "subu\t$29, 32\n\t" \
++ "sw\t$2, 16($29)\n\t" \
++ "sw\t$8, 20($29)\n\t" \
++ "sw\t$9, 24($29)\n\t" \
++ "li\t$2, %5\t\t\t# " #name "\n\t" \
++ "syscall\n\t" \
++ "addiu\t$29, 32\n\t" \
++ ".set\treorder" \
++ : "=&r" (__v0), "+r" (__a3) \
++ : "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
++ "m" ((unsigned long)arg5), "m" ((unsigned long)arg6), \
++ "m" ((unsigned long)arg7) \
++ : __SYSCALL_CLOBBERS); \
++ \
++ if ( __a3 ) { \
++ unsigned long _sys_error = __v0; \
++ __set_errno(_sys_error); \
++ _sys_result = (unsigned long)(-1); \
++ } else \
++ _sys_result = __v0; \
++ _sys_result; \
++})
++
+ #endif /* linux/mips/sysdep.h */
diff --git a/sys-libs/glibc/files/2.3.1/glibc-2.3.1-libgcc-compat-mips.patch b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-libgcc-compat-mips.patch
new file mode 100644
index 000000000000..cc8fabbb89cb
--- /dev/null
+++ b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-libgcc-compat-mips.patch
@@ -0,0 +1,173 @@
+# DP: Description: libgcc-compat symbols for mips
+# DP: Author: Guido Guenther
+# DP: thanks to Jack Howarth for explanations and help
+# DP: Upstream status: Not submitted
+# DP: Date: 2002-10-13, updated 2002-10-20
+
+--- libc/sysdeps/mips/Makefile.orig Sun Oct 13 14:45:56 2002
++++ libc/sysdeps/mips/Makefile Sun Oct 13 14:51:20 2002
+@@ -6,3 +6,15 @@
+ ifeq ($(subdir),setjmp)
+ sysdep_routines += setjmp_aux
+ endif
++
++ifeq ($(subdir),csu)
++ifeq (yes,$(build-shared))
++# Compatibility
++ifeq (yes,$(have-protected))
++CPPFLAGS-divdi3.c = -DHAVE_DOT_HIDDEN
++CPPFLAGS-libgcc-compat.c = -DHAVE_DOT_HIDDEN
++endif
++sysdep_routines += libgcc-compat
++shared-only-routines += libgcc-compat
++endif
++endif
+--- libc/sysdeps/mips/Dist.orig Sun Oct 13 15:07:31 2002
++++ libc/sysdeps/mips/Dist Sun Oct 13 15:07:41 2002
+@@ -1,3 +1,5 @@
++divdi3.c
++libgcc-compat.c
+ setjmp_aux.c
+ regdef.h
+ sgidefs.h
+--- /dev/null Sat Mar 16 18:32:44 2002
++++ libc/sysdeps/mips/divdi3.c Sun Oct 13 14:44:34 2002
+@@ -0,0 +1,43 @@
++/* 64-bit multiplication and division libgcc routines for 32-bit mips
++ 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. */
++
++#define _DIVDI3_C
++#include <sysdeps/wordsize-32/divdi3.c>
++
++INTDEF (__udivdi3);
++INTDEF (__moddi3);
++INTDEF (__umoddi3);
++
++#ifdef HAVE_DOT_HIDDEN
++asm (".hidden __divdi3");
++asm (".hidden __udivdi3");
++asm (".hidden __moddi3");
++asm (".hidden __umoddi3");
++#endif
++
++#include <shlib-compat.h>
++
++#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_6)
++
++symbol_version (INTUSE (__divdi3), __divdi3, GLIBC_2.0);
++symbol_version (INTUSE (__udivdi3), __udivdi3, GLIBC_2.0);
++symbol_version (INTUSE (__moddi3), __moddi3, GLIBC_2.0);
++symbol_version (INTUSE (__umoddi3), __umoddi3, GLIBC_2.0);
++
++#endif
+--- /dev/null Sat Mar 16 18:32:44 2002
++++ libc/sysdeps/mips/libgcc-compat.c Sun Oct 20 17:11:59 2002
+@@ -0,0 +1,81 @@
++/* pre-.hidden libgcc compatibility
++ 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. */
++
++
++#include <stdint.h>
++#include <shlib-compat.h>
++
++#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_6)
++
++extern int32_t __cmpdi2 (int64_t, int64_t);
++int32_t __cmpdi2_internal (int64_t u, int64_t v)
++{
++ return __cmpdi2 (u, v);
++}
++symbol_version (__cmpdi2_internal, __cmpdi2, GLIBC_2.0);
++
++
++extern int32_t __ucmpdi2 (int64_t, int64_t);
++int32_t __ucmpdi2_internal (int64_t u, int64_t v)
++{
++ return __ucmpdi2 (u, v);
++}
++symbol_version (__ucmpdi2_internal, __ucmpdi2, GLIBC_2.0);
++
++
++extern int64_t __fixdfdi (double);
++int64_t __fixdfdi_internal (double d)
++{
++ return __fixdfdi (d);
++}
++symbol_version (__fixdfdi_internal, __fixdfdi, GLIBC_2.0);
++
++
++extern int64_t __fixsfdi (float);
++int64_t __fixsfdi_internal (float d)
++{
++ return __fixsfdi (d);
++}
++symbol_version (__fixsfdi_internal, __fixsfdi, GLIBC_2.0);
++
++
++extern int64_t __fixunsdfdi (double);
++int64_t __fixunsdfdi_internal (double d)
++{
++ return __fixunsdfdi (d);
++}
++symbol_version (__fixunsdfdi_internal, __fixunsdfdi, GLIBC_2.0);
++
++
++extern double __floatdidf (int64_t);
++double __floatdidf_internal (int64_t u)
++{
++ return __floatdidf (u);
++}
++symbol_version (__floatdidf_internal, __floatdidf, GLIBC_2.0);
++
++
++floatdisf (int64_t);
++float __floatdisf_internal (int64_t u)
++{
++ return __floatdisf (u);
++}
++symbol_version (__floatdisf_internal, __floatdisf, GLIBC_2.0);
++
++#endif
+--- /dev/null Sat Mar 16 18:32:44 2002
++++ libc/sysdeps/mips/Versions Sun Oct 20 17:12:00 2002
+@@ -0,0 +1,8 @@
++libc {
++ GLIBC_2.0 {
++ # Functions from libgcc.
++ __cmpdi2; __ucmpdi2;
++ __divdi3; __moddi3; __udivdi3; __umoddi3;
++ __fixdfdi; __fixsfdi; __fixunsdfdi; __floatdidf; __floatdisf;
++ }
++}
diff --git a/sys-libs/glibc/files/2.3.1/glibc-2.3.1-librt-mips.patch b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-librt-mips.patch
new file mode 100644
index 000000000000..08fcc2ac6864
--- /dev/null
+++ b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-librt-mips.patch
@@ -0,0 +1,15 @@
+# DP: add clock_{get,set}time@@GLIBC_2.0
+# DP: although it should actually be @@GLIBC_2.2
+
+--- libc/sysdeps/unix/sysv/linux/mips/Versions.orig Tue Sep 24 15:56:55 2002
++++ libc/sysdeps/unix/sysv/linux/mips/Versions Tue Sep 24 15:49:27 2002
+@@ -34,3 +34,9 @@
+ _sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
+ }
+ }
++librt {
++ GLIBC_2.0 {
++ # c*
++ clock_gettime; clock_settime;
++ }
++}
diff --git a/sys-libs/glibc/files/2.3.1/glibc-2.3.1-locale.patch b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-locale.patch
new file mode 100644
index 000000000000..545ba7fbb83f
--- /dev/null
+++ b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-locale.patch
@@ -0,0 +1,323 @@
+--- glibc-2.3.1/locale/programs/locale.c.jj 2003-01-11 18:13:57.000000000 +0000
++++ glibc-2.3.1/locale/programs/locale.c 2003-01-11 18:13:59.000000000 +0000
+@@ -43,10 +43,12 @@
+
+ #include "localeinfo.h"
+ #include "charmap-dir.h"
++#include "../locarchive.h"
+
+ extern void *xmalloc (size_t __n);
+ extern char *xstrdup (const char *__str);
+
++#define ARCHIVE_NAME LOCALEDIR "/locale-archive"
+
+ /* If set print the name of the category. */
+ static int show_category_name;
+@@ -168,7 +170,11 @@
+ int show_keyword_name);
+
+ /* Prototypes for local functions. */
++static void print_LC_IDENTIFICATION (void *mapped, size_t size);
++static void print_LC_CTYPE (void *mapped, size_t size);
+ static void write_locales (void);
++static int nameentcmp (const void *a, const void *b);
++static int write_archive_locales (void **all_datap, char *linebuf);
+ static void write_charmaps (void);
+ static void show_locale_vars (void);
+ static void show_info (const char *name);
+@@ -327,6 +333,74 @@
+ }
+
+
++static void
++print_LC_IDENTIFICATION (void *mapped, size_t size)
++{
++ /* Read the information from the file. */
++ struct
++ {
++ unsigned int magic;
++ unsigned int nstrings;
++ unsigned int strindex[0];
++ } *filedata = mapped;
++
++ if (filedata->magic == LIMAGIC (LC_IDENTIFICATION)
++ && (sizeof *filedata
++ + (filedata->nstrings
++ * sizeof (unsigned int))
++ <= size))
++ {
++ const char *str;
++
++#define HANDLE(idx, name) \
++ str = ((char *) mapped \
++ + filedata->strindex[_NL_ITEM_INDEX (_NL_IDENTIFICATION_##idx)]); \
++ if (*str != '\0') \
++ printf ("%9s | %s\n", name, str)
++ HANDLE (TITLE, "title");
++ HANDLE (SOURCE, "source");
++ HANDLE (ADDRESS, "address");
++ HANDLE (CONTACT, "contact");
++ HANDLE (EMAIL, "email");
++ HANDLE (TEL, "telephone");
++ HANDLE (FAX, "fax");
++ HANDLE (LANGUAGE, "language");
++ HANDLE (TERRITORY, "territory");
++ HANDLE (AUDIENCE, "audience");
++ HANDLE (APPLICATION, "application");
++ HANDLE (ABBREVIATION, "abbreviation");
++ HANDLE (REVISION, "revision");
++ HANDLE (DATE, "date");
++ }
++}
++
++
++static void
++print_LC_CTYPE (void *mapped, size_t size)
++{
++ struct
++ {
++ unsigned int magic;
++ unsigned int nstrings;
++ unsigned int strindex[0];
++ } *filedata = mapped;
++
++ if (filedata->magic == LIMAGIC (LC_CTYPE)
++ && (sizeof *filedata
++ + (filedata->nstrings
++ * sizeof (unsigned int))
++ <= size))
++ {
++ const char *str;
++
++ str = ((char *) mapped
++ + filedata->strindex[_NL_ITEM_INDEX (_NL_CTYPE_CODESET_NAME)]);
++ if (*str != '\0')
++ printf (" codeset | %s\n", str);
++ }
++}
++
++
+ /* Write the names of all available locales to stdout. We have some
+ sources of the information: the contents of the locale directory
+ and the locale.alias file. To avoid duplicates and print the
+@@ -358,6 +432,10 @@
+ memset (linebuf, '-', sizeof (linebuf) - 1);
+ linebuf[sizeof (linebuf) - 1] = '\0';
+
++ /* First scan the locale archive. */
++ if (write_archive_locales (&all_data, linebuf))
++ first_locale = 0;
++
+ /* Now we can look for all files in the directory. */
+ ndirents = scandir (LOCALEDIR, &dirents, select_dirs, alphasort);
+ for (cnt = 0; cnt < ndirents; ++cnt)
+@@ -375,7 +453,7 @@
+
+ if (stat64 (buf, &st) == 0 && S_ISREG (st.st_mode))
+ {
+- if (verbose)
++ if (verbose && GET (dirents[cnt]->d_name) == NULL)
+ {
+ /* Provide some nice output of all kinds of
+ information. */
+@@ -396,42 +474,7 @@
+ MAP_SHARED, fd, 0);
+ if (mapped != MAP_FAILED)
+ {
+- /* Read the information from the file. */
+- struct
+- {
+- unsigned int magic;
+- unsigned int nstrings;
+- unsigned int strindex[0];
+- } *filedata = mapped;
+-
+- if (filedata->magic == LIMAGIC (LC_IDENTIFICATION)
+- && (sizeof *filedata
+- + (filedata->nstrings
+- * sizeof (unsigned int))
+- <= (size_t) st.st_size))
+- {
+- const char *str;
+-
+-#define HANDLE(idx, name) \
+- str = ((char *) mapped \
+- + filedata->strindex[_NL_ITEM_INDEX (_NL_IDENTIFICATION_##idx)]); \
+- if (*str != '\0') \
+- printf ("%9s | %s\n", name, str)
+- HANDLE (TITLE, "title");
+- HANDLE (SOURCE, "source");
+- HANDLE (ADDRESS, "address");
+- HANDLE (CONTACT, "contact");
+- HANDLE (EMAIL, "email");
+- HANDLE (TEL, "telephone");
+- HANDLE (FAX, "fax");
+- HANDLE (LANGUAGE, "language");
+- HANDLE (TERRITORY, "territory");
+- HANDLE (AUDIENCE, "audience");
+- HANDLE (APPLICATION, "application");
+- HANDLE (ABBREVIATION, "abbreviation");
+- HANDLE (REVISION, "revision");
+- HANDLE (DATE, "date");
+- }
++ print_LC_IDENTIFICATION (mapped, st.st_size);
+
+ munmap (mapped, st.st_size);
+ }
+@@ -446,26 +489,7 @@
+ MAP_SHARED, fd, 0))
+ != MAP_FAILED))
+ {
+- struct
+- {
+- unsigned int magic;
+- unsigned int nstrings;
+- unsigned int strindex[0];
+- } *filedata = mapped;
+-
+- if (filedata->magic == LIMAGIC (LC_CTYPE)
+- && (sizeof *filedata
+- + (filedata->nstrings
+- * sizeof (unsigned int))
+- <= (size_t) st.st_size))
+- {
+- const char *str;
+-
+- str = ((char *) mapped
+- + filedata->strindex[_NL_ITEM_INDEX (_NL_CTYPE_CODESET_NAME)]);
+- if (*str != '\0')
+- printf (" codeset | %s\n", str);
+- }
++ print_LC_CTYPE (mapped, st.st_size);
+
+ munmap (mapped, st.st_size);
+ }
+@@ -474,10 +498,10 @@
+ close (fd);
+ }
+ }
+- else
+- /* If the verbose format is not selected we simply
+- collect the names. */
+- PUT (xstrdup (dirents[cnt]->d_name));
++
++ /* If the verbose format is not selected we simply
++ collect the names. */
++ PUT (xstrdup (dirents[cnt]->d_name));
+ }
+ }
+ if (ndirents > 0)
+@@ -584,6 +608,113 @@
+ }
+
+
++struct nameent
++{
++ char *name;
++ uint32_t locrec_offset;
++};
++
++
++static int
++nameentcmp (const void *a, const void *b)
++{
++ return strcoll (((const struct nameent *) a)->name,
++ ((const struct nameent *) b)->name);
++}
++
++
++static int
++write_archive_locales (void **all_datap, char *linebuf)
++{
++ struct stat64 st;
++ void *all_data = *all_datap;
++ size_t len = 0;
++ struct locarhead *head;
++ struct namehashent *namehashtab;
++ char *addr = MAP_FAILED;
++ int fd, ret = 0;
++ uint32_t cnt;
++
++ fd = open64 (ARCHIVE_NAME, O_RDONLY);
++ if (fd < 0)
++ return 0;
++
++ if (fstat64 (fd, &st) < 0 || st.st_size < sizeof (*head))
++ goto error_out;
++
++ len = st.st_size;
++ addr = mmap64 (NULL, len, PROT_READ, MAP_SHARED, fd, 0);
++ if (addr == MAP_FAILED)
++ goto error_out;
++
++ head = (struct locarhead *) addr;
++ if (head->namehash_offset + head->namehash_size > len
++ || head->string_offset + head->string_size > len
++ || head->locrectab_offset + head->locrectab_size > len
++ || head->sumhash_offset + head->sumhash_size > len)
++ goto error_out;
++
++ namehashtab = (struct namehashent *) (addr + head->namehash_offset);
++ if (! verbose)
++ {
++ for (cnt = 0; cnt < head->namehash_size; ++cnt)
++ if (namehashtab[cnt].locrec_offset != 0)
++ {
++ PUT (xstrdup (addr + namehashtab[cnt].name_offset));
++ ++ret;
++ }
++ }
++ else
++ {
++ struct nameent *names;
++ uint32_t used;
++
++ names = (struct nameent *) xmalloc (head->namehash_used
++ * sizeof (struct nameent));
++ for (cnt = used = 0; cnt < head->namehash_size; ++cnt)
++ if (namehashtab[cnt].locrec_offset != 0)
++ {
++ names[used].name = addr + namehashtab[cnt].name_offset;
++ names[used++].locrec_offset = namehashtab[cnt].locrec_offset;
++ }
++
++ /* Sort the names. */
++ qsort (names, used, sizeof (struct nameent), nameentcmp);
++
++ for (cnt = 0; cnt < used; ++cnt)
++ {
++ struct locrecent *locrec;
++
++ PUT (xstrdup (names[cnt].name));
++
++ if (cnt)
++ putchar_unlocked ('\n');
++
++ printf ("locale: %-15.15s archive: " ARCHIVE_NAME "\n%s\n",
++ names[cnt].name, linebuf);
++
++ locrec = (struct locrecent *) (addr + names[cnt].locrec_offset);
++
++ print_LC_IDENTIFICATION (addr
++ + locrec->record[LC_IDENTIFICATION].offset,
++ locrec->record[LC_IDENTIFICATION].len);
++
++ print_LC_CTYPE (addr + locrec->record[LC_CTYPE].offset,
++ locrec->record[LC_CTYPE].len);
++ }
++
++ ret = used;
++ }
++
++error_out:
++ if (addr != MAP_FAILED)
++ munmap (addr, len);
++ close (fd);
++ *all_datap = all_data;
++ return ret;
++}
++
++
+ /* Write the names of all available character maps to stdout. */
+ static void
+ write_charmaps (void)
diff --git a/sys-libs/glibc/files/2.3.1/glibc-2.3.1-tst-rndseek-mips.patch b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-tst-rndseek-mips.patch
new file mode 100644
index 000000000000..57d49cf49550
--- /dev/null
+++ b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-tst-rndseek-mips.patch
@@ -0,0 +1,16 @@
+# DP: Description: we need a longer timeout for slow machines
+# DP: Author: Guido Guenther <agx@sigxcpu.org>
+# DP: Upstream status: In CVS
+# DP: Date: 2002-10-16
+
+--- libc/stdio-common/tst-rndseek.c.orig Wed Oct 16 17:02:06 2002
++++ libc/stdio-common/tst-rndseek.c Wed Oct 16 17:02:16 2002
+@@ -10,7 +10,7 @@
+
+ static int do_test (void);
+ #define TEST_FUNCTION do_test ()
+-#define TIMEOUT 4
++#define TIMEOUT 10
+
+ #include "../test-skeleton.c"
+
diff --git a/sys-libs/glibc/files/2.3.1/glibc-2.3.1-ulps-mips.patch b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-ulps-mips.patch
new file mode 100644
index 000000000000..b4f725bac2a5
--- /dev/null
+++ b/sys-libs/glibc/files/2.3.1/glibc-2.3.1-ulps-mips.patch
@@ -0,0 +1,1146 @@
+# DP: Description: update libm-test-ulps for mips
+# DP: Author: Guido Guenther <agx@sigxcpu.org>
+# DP: Upstream status: In CVS
+# DP: Date: 2002-10-13
+
+--- libc/sysdeps/mips/fpu/libm-test-ulps.agx 2001-09-15 05:00:16.000000000 +0200
++++ libc/sysdeps/mips/fpu/libm-test-ulps 2002-10-12 23:44:56.000000000 +0200
+@@ -1,61 +1,18 @@
+ # Begin of automatic generation
+
+-# asin
+-Test "asin (-0.5) == -pi/6":
+-float: 2
+-ifloat: 2
+-Test "asin (0.5) == pi/6":
+-float: 2
+-ifloat: 2
+-Test "asin (0.7) == 0.77539749661075306374035335271498708":
+-double: 1
+-float: 2
+-idouble: 1
+-ifloat: 2
+-
+ # atan2
+-Test "atan2 (0.7, -1.0) == 2.530866689200584621918884506789267":
++Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
+ float: 3
+ ifloat: 3
+-Test "atan2 (-0.7, -1.0) == -2.530866689200584621918884506789267":
++Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
+ float: 3
+ ifloat: 3
+-Test "atan2 (1.4, -0.93) == 2.1571487668237843754887415992772736":
+-float: 4
+-ifloat: 4
+-
+-# atanh
+-Test "atanh (0.7) == 0.8673005276940531944":
+-double: 1
+-idouble: 1
+-
+-# cabs
+-Test "cabs (-0.7 + 12.4 i) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "cabs (-0.7 - 12.4 i) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "cabs (-12.4 + 0.7 i) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "cabs (-12.4 - 0.7 i) == 12.419742348374220601176836866763271":
+-float: 1
+-ifloat: 1
+-Test "cabs (0.7 + 1.2 i) == 1.3892443989449804508432547041028554":
+-double: 1
+-idouble: 1
+-Test "cabs (0.7 + 12.4 i) == 12.419742348374220601176836866763271":
++Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
+ float: 1
+ ifloat: 1
+
+-# cacos
+-Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551088992008271819053 - 1.0927647857577371459105272080819308 i":
++# atanh
++Test "atanh (0.75) == 0.972955074527656652552676371721589865":
+ float: 1
+ ifloat: 1
+
+@@ -70,20 +27,12 @@
+ float: 3
+ idouble: 1
+ ifloat: 3
+-Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459105272080819308 + 1.1351827477151551088992008271819053 i":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+
+ # casin
+-Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i":
+-double: 3
+-float: 2
+-idouble: 3
+-ifloat: 2
+-Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103321208644578462 + 1.0927647857577371459105272080819308 i":
++Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
++double: 1
+ float: 1
++idouble: 1
+ ifloat: 1
+
+ # casinh
+@@ -97,11 +46,13 @@
+ float: 6
+ idouble: 3
+ ifloat: 6
+-Test "Real part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i":
++Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
+ double: 1
+-idouble: 1
+-Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.97865459559367387689317593222160964 + 0.91135418953156011567903546856170941 i":
+ float: 1
++idouble: 1
+ ifloat: 1
+
+ # catan
+@@ -113,12 +64,9 @@
+ float: 1
+ idouble: 1
+ ifloat: 1
+-Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i":
++Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
+ float: 4
+ ifloat: 4
+-Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877443707996386368 + 0.57705737765343067644394541889341712 i":
+-double: 1
+-idouble: 1
+
+ # catanh
+ Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
+@@ -127,20 +75,21 @@
+ Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
+ float: 4
+ ifloat: 4
+-Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i":
++Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
+ double: 1
+-float: 6
+ idouble: 1
++Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
++float: 6
+ ifloat: 6
+
+ # cbrt
+ Test "cbrt (-27.0) == -3.0":
+ double: 1
+ idouble: 1
+-Test "cbrt (0.970299) == 0.99":
++Test "cbrt (0.75) == 0.908560296416069829445605878163630251":
++double: 1
++idouble: 1
++Test "cbrt (0.9921875) == 0.997389022060725270579075195353955217":
+ double: 1
+ idouble: 1
+
+@@ -148,12 +97,14 @@
+ Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
+ float: 1
+ ifloat: 1
+-Test "Real part of: ccos (0.7 + 1.2 i) == 1.3848657645312111080 - 0.97242170335830028619 i":
+-double: 1
+-idouble: 1
+-Test "Imaginary part of: ccos (0.7 + 1.2 i) == 1.3848657645312111080 - 0.97242170335830028619 i":
++Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
+ double: 1
++float: 1
+ idouble: 1
++ifloat: 1
++Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
++float: 1
++ifloat: 1
+
+ # ccosh
+ Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
+@@ -162,34 +113,30 @@
+ Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
+ float: 1
+ ifloat: 1
+-Test "Real part of: ccosh (0.7 + 1.2 i) == 0.4548202223691477654 + 0.7070296600921537682 i":
++Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
+ double: 1
+ float: 1
+ idouble: 1
+ ifloat: 1
+-Test "Imaginary part of: ccosh (0.7 + 1.2 i) == 0.4548202223691477654 + 0.7070296600921537682 i":
+-double: 1
+-idouble: 1
++Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
++float: 1
++ifloat: 1
+
+ # cexp
+ Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
+ float: 1
+ ifloat: 1
+-Test "Real part of: cexp (0.7 + 1.2 i) == 0.72969890915032360123451688642930727 + 1.8768962328348102821139467908203072 i":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "Imaginary part of: cexp (0.7 + 1.2 i) == 0.72969890915032360123451688642930727 + 1.8768962328348102821139467908203072 i":
++Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
+ float: 1
+ ifloat: 1
+
+ # clog
+ Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
+-double: 1
+ float: 3
+-idouble: 1
+ ifloat: 3
++Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
++float: 1
++ifloat: 1
+
+ # clog10
+ Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
+@@ -227,14 +174,9 @@
+ Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i":
+ float: 1
+ ifloat: 1
+-Test "Real part of: clog10 (0.7 + 1.2 i) == 0.1427786545038868803 + 0.4528483579352493248 i":
+-double: 1
++Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
+ float: 1
+-idouble: 1
+ ifloat: 1
+-Test "Imaginary part of: clog10 (0.7 + 1.2 i) == 0.1427786545038868803 + 0.4528483579352493248 i":
+-double: 1
+-idouble: 1
+ Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
+ float: 1
+ ifloat: 1
+@@ -249,28 +191,39 @@
+ ifloat: 1
+
+ # cos
+-Test "cos (0.7) == 0.76484218728448842625585999019186495":
++Test "cos (M_PI_6l * 2.0) == 0.5":
+ double: 1
+ float: 1
+ idouble: 1
+ ifloat: 1
+-Test "cos (M_PI_6l * 2.0) == 0.5":
+-double: 1
+-float: 0.5
+-idouble: 1
+-ifloat: 0.5
+ Test "cos (M_PI_6l * 4.0) == -0.5":
+ double: 2
+ float: 1
+ idouble: 2
+ ifloat: 1
+ Test "cos (pi/2) == 0":
+-double: 0.2758
+-float: 0.3667
+-idouble: 0.2758
+-ifloat: 0.3667
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
+
+ # cpow
++Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
++float: 1
++ifloat: 1
++Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
++float: 1
++ifloat: 1
++Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
++double: 1
++float: 4
++idouble: 1
++ifloat: 4
++Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
++double: 2
++float: 3
++idouble: 2
++ifloat: 3
+ Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
+ double: 1
+ float: 4
+@@ -285,19 +238,14 @@
+ idouble: 2
+ ifloat: 2
+
+-# csin
+-Test "Imaginary part of: csin (0.7 + 1.2 i) == 1.1664563419657581376 + 1.1544997246948547371 i":
+-float: 1
+-ifloat: 1
+-
+ # csinh
+ Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
+ double: 1
+ idouble: 1
+-Test "Real part of: csinh (0.7 + 1.2 i) == 0.27487868678117583582 + 1.1698665727426565139 i":
++Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
+ float: 1
+ ifloat: 1
+-Test "Imaginary part of: csinh (0.7 + 1.2 i) == 0.27487868678117583582 + 1.1698665727426565139 i":
++Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
+ float: 1
+ ifloat: 1
+
+@@ -308,27 +256,14 @@
+ Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
+ float: 1
+ ifloat: 1
+-Test "Real part of: csqrt (0.7 + 1.2 i) == 1.022067610030026450706487883081139 + 0.58704531296356521154977678719838035 i":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "Imaginary part of: csqrt (0.7 + 1.2 i) == 1.022067610030026450706487883081139 + 0.58704531296356521154977678719838035 i":
+-float: 1
+-ifloat: 1
+
+ # ctan
+ Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
+ double: 1
+ idouble: 1
+-Test "Real part of: ctan (0.7 + 1.2 i) == 0.1720734197630349001 + 0.9544807059989405538 i":
+-float: 1
+-ifloat: 1
+-Test "Imaginary part of: ctan (0.7 + 1.2 i) == 0.1720734197630349001 + 0.9544807059989405538 i":
++Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
+ double: 1
+-float: 1
+ idouble: 1
+-ifloat: 1
+
+ # ctanh
+ Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
+@@ -339,34 +274,22 @@
+ Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
+ float: 1
+ ifloat: 1
+-Test "Real part of: ctanh (0.7 + 1.2 i) == 1.3472197399061191630 + 0.4778641038326365540 i":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "Imaginary part of: ctanh (0.7 + 1.2 i) == 1.3472197399061191630 + 0.4778641038326365540 i":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
++Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
++double: 1
++idouble: 1
++
++# erf
++Test "erf (1.25) == 0.922900128256458230136523481197281140":
++double: 1
++idouble: 1
+
+ # erfc
+-Test "erfc (0.7) == 0.32219880616258152702":
++Test "erfc (2.0) == 0.00467773498104726583793074363274707139":
+ double: 1
+ idouble: 1
+-Test "erfc (1.2) == 0.089686021770364619762":
+-double: 2
+-float: 2
+-idouble: 2
+-ifloat: 2
+-Test "erfc (2.0) == 0.0046777349810472658379":
++Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8":
+ double: 1
+ idouble: 1
+-Test "erfc (4.1) == 0.67000276540848983727e-8":
+-double: 24
+-float: 12
+-idouble: 24
+-ifloat: 12
+
+ # exp10
+ Test "exp10 (-1) == 0.1":
+@@ -374,8 +297,10 @@
+ float: 1
+ idouble: 2
+ ifloat: 1
+-Test "exp10 (0.7) == 5.0118723362727228500155418688494574":
++Test "exp10 (0.75) == 5.62341325190349080394951039776481231":
++double: 1
+ float: 1
++idouble: 1
+ ifloat: 1
+ Test "exp10 (3) == 1000":
+ double: 6
+@@ -384,32 +309,13 @@
+ ifloat: 2
+
+ # expm1
++Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
++double: 1
++idouble: 1
+ Test "expm1 (1) == M_El - 1.0":
+ float: 1
+ ifloat: 1
+
+-# fmod
+-Test "fmod (-6.5, -2.3) == -1.9":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "fmod (-6.5, 2.3) == -1.9":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "fmod (6.5, -2.3) == 1.9":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "fmod (6.5, 2.3) == 1.9":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-
+ # hypot
+ Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
+ float: 1
+@@ -426,9 +332,6 @@
+ Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
+ float: 1
+ ifloat: 1
+-Test "hypot (0.7, 1.2) == 1.3892443989449804508432547041028554":
+-double: 1
+-idouble: 1
+ Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
+ float: 1
+ ifloat: 1
+@@ -440,95 +343,110 @@
+ ifloat: 1
+
+ # j0
+-Test "j0 (10.0) == -0.24593576445134833520":
++Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "j0 (0.75) == 0.864242275166648623555731103820923211":
++float: 1
++ifloat: 1
++Test "j0 (10.0) == -0.245935764451348335197760862485328754":
+ double: 2
+ float: 1
+ idouble: 2
+ ifloat: 1
+-Test "j0 (2.0) == 0.22389077914123566805":
++Test "j0 (2.0) == 0.223890779141235668051827454649948626":
+ float: 2
+ ifloat: 2
+-Test "j0 (8.0) == 0.17165080713755390609":
+-float: 1
+-ifloat: 1
+ Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
+ double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-ildouble: 1
+-ldouble: 1
+-Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
+-double: 1
+-float: 1
++float: 1
+ idouble: 1
+-ifloat: 1
+-ildouble: 1
+-ldouble: 1
+-
++ifloat: 1
++Test "j0 (8.0) == 0.171650807137553906090869407851972001":
++float: 1
++ifloat: 1
+
+ # j1
+-Test "j1 (10.0) == 0.043472746168861436670":
++Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
+ float: 2
+ ifloat: 2
+-Test "j1 (2.0) == 0.57672480775687338720":
++Test "j1 (2.0) == 0.576724807756873387202448242269137087":
+ double: 1
+ idouble: 1
+-Test "j1 (8.0) == 0.23463634685391462438":
++Test "j1 (8.0) == 0.234636346853914624381276651590454612":
+ double: 1
+ idouble: 1
+
+ # jn
+-Test "jn (0, 10.0) == -0.24593576445134833520":
++Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "jn (0, 0.75) == 0.864242275166648623555731103820923211":
++float: 1
++ifloat: 1
++Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
+ double: 2
+ float: 1
+ idouble: 2
+ ifloat: 1
+-Test "jn (0, 2.0) == 0.22389077914123566805":
++Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
+ float: 2
+ ifloat: 2
+-Test "jn (0, 8.0) == 0.17165080713755390609":
++Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
++double: 1
++float: 1
++idouble: 1
++ifloat: 1
++Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
+ float: 1
+ ifloat: 1
+-Test "jn (1, 10.0) == 0.043472746168861436670":
++Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
+ float: 2
+ ifloat: 2
+-Test "jn (1, 2.0) == 0.57672480775687338720":
++Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
+ double: 1
+ idouble: 1
+-Test "jn (1, 8.0) == 0.23463634685391462438":
++Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
+ double: 1
+ idouble: 1
+-Test "jn (10, 0.1) == 0.26905328954342155795e-19":
+-double: 6
+-float: 4
+-idouble: 6
+-ifloat: 4
+-Test "jn (10, 0.7) == 0.75175911502153953928e-11":
+-double: 3
++Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
++double: 1
+ float: 1
+-idouble: 3
++idouble: 1
++ifloat: 1
++Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
++double: 1
++float: 1
++idouble: 1
+ ifloat: 1
+-Test "jn (10, 10.0) == 0.20748610663335885770":
++Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
+ double: 4
+ float: 3
+ idouble: 4
+ ifloat: 3
+-Test "jn (10, 2.0) == 0.25153862827167367096e-6":
++Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
+ float: 4
+ ifloat: 4
+-Test "jn (3, 0.1) == 0.000020820315754756261429":
++Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
+ double: 1
++float: 1
+ idouble: 1
+-Test "jn (3, 0.7) == 0.0069296548267508408077":
++ifloat: 1
++Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
++double: 1
+ float: 1
++idouble: 1
+ ifloat: 1
+-Test "jn (3, 10.0) == 0.058379379305186812343":
++Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
+ double: 3
+ float: 1
+ idouble: 3
+ ifloat: 1
+-Test "jn (3, 2.0) == 0.12894324947440205110":
++Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
+ double: 1
+ float: 2
+ idouble: 1
+@@ -546,87 +464,45 @@
+ idouble: 1
+ ifloat: 2
+
+-# log
+-Test "log (0.7) == -0.35667494393873237891263871124118447":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+ # log10
+-Test "log10 (0.7) == -0.15490195998574316929":
++Test "log10 (0.75) == -0.124938736608299953132449886193870744":
+ double: 1
+-float: 1
++float: 2
+ idouble: 1
+-ifloat: 1
++ifloat: 2
+ Test "log10 (e) == log10(e)":
+ float: 1
+ ifloat: 1
+
+ # log1p
+-Test "log1p (-0.3) == -0.35667494393873237891263871124118447":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-# log2
+-Test "log2 (0.7) == -0.51457317282975824043":
+-double: 1
++Test "log1p (-0.25) == -0.287682072451780927439219005993827432":
+ float: 1
+-idouble: 1
+ ifloat: 1
+
+ # sincos
+-Test "sincos (0.7, &sin_res, &cos_res) puts 0.76484218728448842625585999019186495 in cos_res":
++Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
+ double: 1
+ float: 1
+ idouble: 1
+ ifloat: 1
+-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
+-double: 1
+-float: 0.5
+-idouble: 1
+-ifloat: 0.5
+ Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
+ double: 1
+ float: 1
+ idouble: 1
+ ifloat: 1
+ Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
+-double: 0.2758
+-float: 0.3667
+-idouble: 0.2758
+-ifloat: 0.3667
+-Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
+-float: 1
+-ifloat: 1
+-
+-# sinh
+-Test "sinh (0.7) == 0.75858370183953350346":
+ double: 1
+ float: 1
+ idouble: 1
+ ifloat: 1
++Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
++float: 1
++ifloat: 1
+
+ # tan
+ Test "tan (pi/4) == 1":
+-double: 0.5
+-idouble: 0.5
+-
+-# tanh
+-Test "tanh (0.7) == 0.60436777711716349631":
+ double: 1
+-float: 1
+ idouble: 1
+-ifloat: 1
+-Test "tanh (-0.7) == -0.60436777711716349631":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-ildouble: 1
+-ldouble: 1
+
+ # tgamma
+ Test "tgamma (-0.5) == -2 sqrt (pi)":
+@@ -644,174 +520,130 @@
+ ifloat: 1
+
+ # y0
+-Test "y0 (0.7) == -0.19066492933739506743":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "y0 (1.0) == 0.088256964215676957983":
++Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
+ double: 2
+ float: 1
+ idouble: 2
+ ifloat: 1
+-Test "y0 (1.5) == 0.38244892379775884396":
++Test "y0 (1.5) == 0.382448923797758843955068554978089862":
+ double: 2
+ float: 1
+ idouble: 2
+ ifloat: 1
+-Test "y0 (10.0) == 0.055671167283599391424":
++Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
+ float: 1
+ ifloat: 1
+-Test "y0 (8.0) == 0.22352148938756622053":
++Test "y0 (8.0) == 0.223521489387566220527323400498620359":
+ double: 1
+ float: 1
+ idouble: 1
+ ifloat: 1
+
+ # y1
+-Test "y1 (0.1) == -6.4589510947020269877":
++Test "y1 (0.125) == -5.19993611253477499595928744876579921":
+ double: 1
+ idouble: 1
+-Test "y1 (0.7) == -1.1032498719076333697":
+-double: 1
++Test "y1 (1.5) == -0.412308626973911295952829820633445323":
+ float: 1
+-idouble: 1
+ ifloat: 1
+-Test "y1 (1.5) == -0.41230862697391129595":
+-float: 1
+-ifloat: 1
+-Test "y1 (10.0) == 0.24901542420695388392":
++Test "y1 (10.0) == 0.249015424206953883923283474663222803":
+ double: 3
+ float: 1
+ idouble: 3
+ ifloat: 1
+-Test "y1 (2.0) == -0.10703243154093754689":
++Test "y1 (2.0) == -0.107032431540937546888370772277476637":
+ double: 1
+ float: 1
+ idouble: 1
+ ifloat: 1
+-Test "y1 (8.0) == -0.15806046173124749426":
++Test "y1 (8.0) == -0.158060461731247494255555266187483550":
+ double: 1
+ float: 2
+ idouble: 1
+ ifloat: 2
+
+ # yn
+-Test "yn (0, 0.7) == -0.19066492933739506743":
++Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
+ double: 2
+ float: 1
+ idouble: 2
+ ifloat: 1
+-Test "yn (0, 1.0) == 0.088256964215676957983":
++Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
+ double: 2
+ float: 1
+ idouble: 2
+ ifloat: 1
+-Test "yn (0, 1.5) == 0.38244892379775884396":
+-double: 2
+-float: 1
+-idouble: 2
+-ifloat: 1
+-Test "yn (0, 10.0) == 0.055671167283599391424":
++Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
+ float: 1
+ ifloat: 1
+-Test "yn (0, 8.0) == 0.22352148938756622053":
++Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
+ double: 1
+ float: 1
+ idouble: 1
+ ifloat: 1
+-Test "yn (1, 0.1) == -6.4589510947020269877":
++Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
+ double: 1
+ idouble: 1
+-Test "yn (1, 0.7) == -1.1032498719076333697":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-Test "yn (1, 1.5) == -0.41230862697391129595":
++Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
+ float: 1
+ ifloat: 1
+-Test "yn (1, 10.0) == 0.24901542420695388392":
++Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
+ double: 3
+ float: 1
+ idouble: 3
+ ifloat: 1
+-Test "yn (1, 2.0) == -0.10703243154093754689":
++Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
+ double: 1
+ float: 1
+ idouble: 1
+ ifloat: 1
+-Test "yn (1, 8.0) == -0.15806046173124749426":
++Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
+ double: 1
+ float: 2
+ idouble: 1
+ ifloat: 2
+-Test "yn (10, 0.1) == -0.11831335132045197885e19":
+-double: 2
+-float: 2
+-idouble: 2
+-ifloat: 2
+-Test "yn (10, 0.7) == -0.42447194260703866924e10":
+-double: 3
+-idouble: 3
+-Test "yn (10, 1.0) == -0.12161801427868918929e9":
++Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
+ double: 1
+ idouble: 1
+-Test "yn (10, 10.0) == -0.35981415218340272205":
++Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
+ double: 1
+ float: 1
+ idouble: 1
+ ifloat: 1
+-Test "yn (10, 2.0) == -129184.54220803928264":
+-double: 2
+-idouble: 2
+-Test "yn (3, 0.1) == -5099.3323786129048894":
++Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
+ double: 1
+-float: 1
+ idouble: 1
+-ifloat: 1
+-Test "yn (3, 0.7) == -15.819479052819633505":
+-double: 3
+-float: 1
+-idouble: 3
+-ifloat: 1
+-Test "yn (3, 10.0) == -0.25136265718383732978":
++Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
+ double: 1
+ float: 1
+ idouble: 1
+ ifloat: 1
+-Test "yn (3, 2.0) == -1.1277837768404277861":
+-double: 1
+-idouble: 1
+-
+-# Maximal error of functions:
+-Function: "asin":
+-double: 1
+-float: 2
+-idouble: 1
+-ifloat: 2
+-
+-Function: "atan2":
+-float: 4
+-ifloat: 4
+-
+-Function: "atanh":
++Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
++double: 2
++idouble: 2
++Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
+ double: 1
+ idouble: 1
+-
+-Function: "cabs":
++Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
+ double: 1
+ float: 1
+ idouble: 1
+ ifloat: 1
+-
+-Function: Real part of "cacos":
++Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
+ double: 1
+ float: 1
+ idouble: 1
+ ifloat: 1
++Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
++double: 1
++idouble: 1
++
++# Maximal error of functions:
++Function: "atan2":
++float: 3
++ifloat: 3
+
+-Function: Imaginary part of "cacos":
++Function: "atanh":
+ float: 1
+ ifloat: 1
+
+@@ -828,13 +660,9 @@
+ ifloat: 3
+
+ Function: Real part of "casin":
+-double: 3
+-float: 2
+-idouble: 3
+-ifloat: 2
+-
+-Function: Imaginary part of "casin":
++double: 1
+ float: 1
++idouble: 1
+ ifloat: 1
+
+ Function: Real part of "casinh":
+@@ -861,14 +689,10 @@
+
+ Function: Real part of "catanh":
+ double: 4
+-float: 1
+ idouble: 4
+-ifloat: 1
+
+ Function: Imaginary part of "catanh":
+-double: 1
+ float: 6
+-idouble: 1
+ ifloat: 6
+
+ Function: "cbrt":
+@@ -877,12 +701,12 @@
+
+ Function: Real part of "ccos":
+ double: 1
++float: 1
+ idouble: 1
++ifloat: 1
+
+ Function: Imaginary part of "ccos":
+-double: 1
+ float: 1
+-idouble: 1
+ ifloat: 1
+
+ Function: Real part of "ccosh":
+@@ -892,31 +716,27 @@
+ ifloat: 1
+
+ Function: Imaginary part of "ccosh":
+-double: 1
+ float: 1
+-idouble: 1
+ ifloat: 1
+
+ Function: Real part of "cexp":
+-double: 1
+ float: 1
+-idouble: 1
+ ifloat: 1
+
+ Function: Imaginary part of "cexp":
+ float: 1
+ ifloat: 1
+
++Function: Real part of "clog":
++float: 1
++ifloat: 1
++
+ Function: Imaginary part of "clog":
+-double: 1
+ float: 3
+-idouble: 1
+ ifloat: 3
+
+ Function: Real part of "clog10":
+-double: 1
+ float: 1
+-idouble: 1
+ ifloat: 1
+
+ Function: Imaginary part of "clog10":
+@@ -932,21 +752,17 @@
+ ifloat: 1
+
+ Function: Real part of "cpow":
+-double: 1
++double: 2
+ float: 4
+-idouble: 1
++idouble: 2
+ ifloat: 4
+
+ Function: Imaginary part of "cpow":
+-double: 1.1031
++double: 2
+ float: 2
+-idouble: 1.1031
++idouble: 2
+ ifloat: 2
+
+-Function: Imaginary part of "csin":
+-float: 1
+-ifloat: 1
+-
+ Function: Real part of "csinh":
+ float: 1
+ ifloat: 1
+@@ -958,44 +774,34 @@
+ ifloat: 1
+
+ Function: Real part of "csqrt":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: Imaginary part of "csqrt":
+ float: 1
+ ifloat: 1
+
+ Function: Real part of "ctan":
+ double: 1
+-float: 1
+ idouble: 1
+-ifloat: 1
+
+ Function: Imaginary part of "ctan":
+ double: 1
+-float: 1
+ idouble: 1
+-ifloat: 1
+
+ Function: Real part of "ctanh":
+-double: 2
++double: 1
+ float: 2
+-idouble: 2
++idouble: 1
+ ifloat: 2
+
+ Function: Imaginary part of "ctanh":
+-double: 2
+ float: 1
+-idouble: 2
+ ifloat: 1
+
++Function: "erf":
++double: 1
++idouble: 1
++
+ Function: "erfc":
+-double: 24
+-float: 12
+-idouble: 24
+-ifloat: 12
++double: 1
++idouble: 1
+
+ Function: "exp10":
+ double: 6
+@@ -1004,19 +810,13 @@
+ ifloat: 2
+
+ Function: "expm1":
++double: 1
+ float: 1
+-ifloat: 1
+-
+-Function: "fmod":
+-double: 2
+-float: 1
+-idouble: 2
++idouble: 1
+ ifloat: 1
+
+ Function: "hypot":
+-double: 1
+ float: 1
+-idouble: 1
+ ifloat: 1
+
+ Function: "j0":
+@@ -1032,9 +832,9 @@
+ ifloat: 2
+
+ Function: "jn":
+-double: 6
++double: 4
+ float: 4
+-idouble: 6
++idouble: 4
+ ifloat: 4
+
+ Function: "lgamma":
+@@ -1043,28 +843,14 @@
+ idouble: 1
+ ifloat: 2
+
+-Function: "log":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+ Function: "log10":
+ double: 1
+-float: 1
++float: 2
+ idouble: 1
+-ifloat: 1
++ifloat: 2
+
+ Function: "log1p":
+-double: 1
+ float: 1
+-idouble: 1
+-ifloat: 1
+-
+-Function: "log2":
+-double: 1
+-float: 1
+-idouble: 1
+ ifloat: 1
+
+ Function: "sincos":
+@@ -1073,21 +859,9 @@
+ idouble: 1
+ ifloat: 1
+
+-Function: "sinh":
+-double: 1
+-float: 1
+-idouble: 1
+-ifloat: 1
+-
+ Function: "tan":
+-double: 0.5
+-idouble: 0.5
+-
+-Function: "tanh":
+ double: 1
+-float: 1
+ idouble: 1
+-ifloat: 1
+
+ Function: "tgamma":
+ double: 1
diff --git a/sys-libs/glibc/glibc-2.3.1-r2.ebuild b/sys-libs/glibc/glibc-2.3.1-r2.ebuild
index c5018ae00319..69a12e8ae595 100644
--- a/sys-libs/glibc/glibc-2.3.1-r2.ebuild
+++ b/sys-libs/glibc/glibc-2.3.1-r2.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2002 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/glibc-2.3.1-r2.ebuild,v 1.14 2002/12/17 12:45:51 cretin Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/glibc-2.3.1-r2.ebuild,v 1.15 2003/01/15 00:36:35 azarah Exp $
IUSE="nls pic build"
@@ -44,7 +44,7 @@ SRC_URI="http://ftp.gnu.org/gnu/glibc/glibc-${PV}.tar.gz
http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-${PV}.tar.gz"
HOMEPAGE="http://www.gnu.org/software/libc/libc.html"
-KEYWORDS="x86 ppc sparc alpha"
+KEYWORDS="x86 ppc sparc alpha mips"
# Is 99% compadible, just some .a's bork
SLOT="2.2"
LICENSE="GPL-2"
@@ -93,7 +93,7 @@ src_unpack() {
# Thanks to Jan Gutter <jangutter@tuks.co.za> for reporting it.
#
# <azarah@gentoo.org> (26 Oct 2002).
- cd ${S}; epatch ${FILESDIR}/${PV}/${P}-ctype-compat-v2.patch
+ cd ${S}; epatch ${FILESDIR}/${PV}/${P}-ctype-compat-v3.patch
# One more compat issue which breaks sun-jdk-1.3.1. See bug #8766 for more
# info, and also:
@@ -117,6 +117,27 @@ src_unpack() {
# http://sources.redhat.com/ml/libc-alpha/2002-11/msg00151.html
# <cretin@gentoo.org> (17 Nov 2002).
cd ${S}; epatch ${FILESDIR}/${PV}/${P}-prelinkfix.patch
+
+ # Fix 'locale -a' not listing all locales. This to Stefan Jones
+ # <cretin@gentoo.org> for this fix, bug #13240.
+ cd ${S}; epatch ${FILESDIR}/${PV}/${P}-locale.patch
+
+ # A few patches only for the MIPS platform. Descriptions of what they
+ # do can be found in the patch headers.
+ # <tuxus@gentoo.org> thx <dragon@gentoo.org> (11 Jan 2003)
+ if [ "${ARCH}" = "mips" ]
+ then
+ cd ${S}
+ epatch ${FILESDIR}/${PV}/${P}-elf-machine-rela-mips.patch
+ epatch ${FILESDIR}/${PV}/${P}-exit-syscall-mips.patch
+ epatch ${FILESDIR}/${PV}/${P}-fpu-cw-mips.patch
+# epatch ${FILESDIR}/${PV}/${P}-inline-syscall-mips.patch
+ epatch ${FILESDIR}/${PV}/${P}-libgcc-compat-mips.patch
+ epatch ${FILESDIR}/${PV}/${P}-librt-mips.patch
+ epatch ${FILESDIR}/${PV}/${P}-tst-rndseek-mips.patch
+ epatch ${FILESDIR}/${PV}/${P}-ulps-mips.patch
+ fi
+
}
src_compile() {