rpms/glibc/devel glibc-bz3306.patch, NONE, 1.1 glibc-bz3427.patch, NONE, 1.1 glibc-fnmatch-speedup.patch, NONE, 1.1 glibc-libio-__THROW.patch, NONE, 1.1 glibc.spec, 1.299, 1.300
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Sat Mar 31 17:47:43 UTC 2007
- Previous message (by thread): rpms/glibc/devel .cvsignore, 1.200, 1.201 glibc-fedora.patch, 1.219, 1.220 glibc.spec, 1.298, 1.299 sources, 1.224, 1.225
- Next message (by thread): rpms/libgnome/devel libgnome-2.18.0-prgname.patch, NONE, 1.1 libgnome-2.17.90-default-icontheme.patch, 1.1, 1.2 libgnome.spec, 1.82, 1.83
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: jakub
Update of /cvs/dist/rpms/glibc/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv13951
Modified Files:
glibc.spec
Added Files:
glibc-bz3306.patch glibc-bz3427.patch
glibc-fnmatch-speedup.patch glibc-libio-__THROW.patch
Log Message:
2.5.90-20
glibc-bz3306.patch:
math/bug-nextafter.c | 255 ++++++++++++++++++++++++++++
math/bug-nexttoward.c | 255 ++++++++++++++++++++++++++++
math/math_private.h | 6
math/s_nextafter.c | 20 +-
math/s_nexttowardf.c | 21 +-
sysdeps/i386/fpu/math_private.h | 18 +
sysdeps/i386/fpu/s_nextafterl.c | 18 -
sysdeps/i386/fpu/s_nexttoward.c | 25 +-
sysdeps/i386/fpu/s_nexttowardf.c | 25 +-
sysdeps/ieee754/flt-32/s_nextafterf.c | 20 +-
sysdeps/ieee754/ldbl-128/s_nextafterl.c | 18 -
sysdeps/ieee754/ldbl-128/s_nexttoward.c | 23 +-
sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c | 23 +-
sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c | 26 +-
sysdeps/ieee754/ldbl-96/s_nextafterl.c | 20 +-
sysdeps/ieee754/ldbl-96/s_nexttoward.c | 23 +-
sysdeps/ieee754/ldbl-96/s_nexttowardf.c | 28 +--
sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c | 28 +--
sysdeps/x86_64/fpu/math_private.h | 21 ++
19 files changed, 723 insertions(+), 150 deletions(-)
--- NEW FILE glibc-bz3306.patch ---
2007-03-27 Jakub Jelinek <jakub at redhat.com>
[BZ #3306]
* math/math_private.h (math_opt_barrier, math_force_eval): Define.
* sysdeps/i386/fpu/math_private.h: New file.
* sysdeps/x86_64/fpu/math_private.h: New file.
* math/s_nexttowardf.c (__nexttowardf): Use math_opt_barrier and
math_force_eval macros. Use "+m" constraint on asm rather than
"=m" and "m".
* math/s_nextafter.c (__nextafter): Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c (__nexttoward):
Likewise.
* sysdeps/ieee754/flt-32/s_nextafterf.c (__nextafterf): Likewise.
* sysdeps/ieee754/ldbl-128/s_nexttoward.c (__nexttoward): Likewise.
* sysdeps/ieee754/ldbl-96/s_nexttoward.c (__nexttoward): Likewise.
* sysdeps/i386/fpu/s_nextafterl.c (__nextafterl): Use
math_opt_barrier and math_force_eval macros.
* sysdeps/ieee754/ldbl-128/s_nextafterl.c (__nextafterl): Likewise.
* sysdeps/ieee754/ldbl-96/s_nextafterl.c (__nextafterl): Likewise.
* sysdeps/i386/fpu/s_nexttoward.c: Include float.h.
(__nexttoward): Use math_opt_barrier and
math_force_eval macros. Use "+m" constraint on asm rather than
"=m" and "m". Only use asm to force double result if
FLT_EVAL_METHOD is 2.
* sysdeps/i386/fpu/s_nexttowardf.c: Include float.h.
(__nexttowardf): Use math_opt_barrier and
math_force_eval macros. Use "+m" constraint on asm rather than
"=m" and "m". Only use asm to force double result if
FLT_EVAL_METHOD is not 0.
* sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: Include float.h.
(__nexttowardf): Use math_opt_barrier and
math_force_eval macros. If FLT_EVAL_METHOD is not 0, force
x to float using asm.
* sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c: Include float.h.
(__nldbl_nexttowardf): Use math_opt_barrier and
math_force_eval macros. If FLT_EVAL_METHOD is not 0, force
x to float using asm.
* sysdeps/ieee754/ldbl-96/s_nexttowardf.c: Include float.h.
(__nexttowardf): Use math_opt_barrier and math_force_eval
macros. If FLT_EVAL_METHOD is not 0, force x to float using asm.
* math/bug-nextafter.c (zero, inf): New variables.
(main): Add new tests.
* math/bug-nexttoward.c (zero, inf): New variables.
(main): Add new tests.
--- libc/math/s_nexttowardf.c.jj 2005-12-14 11:34:14.000000000 +0100
+++ libc/math/s_nexttowardf.c 2007-03-27 14:05:13.000000000 +0200
@@ -21,7 +21,7 @@
*/
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
#include <float.h>
#ifdef __STDC__
@@ -45,10 +45,12 @@
return x+y;
if((long double) x==y) return y; /* x=y, return y */
if(ix==0) { /* x == 0 */
- float x2;
+ float u;
SET_FLOAT_WORD(x,(u_int32_t)(hy&0x80000000)|1);/* return +-minsub*/
- x2 = x*x;
- if(x2==x) return x2; else return x; /* raise underflow flag */
+ u = math_opt_barrier (x);
+ u = u * u;
+ math_force_eval (u); /* raise underflow flag */
+ return x;
}
if(hx>=0) { /* x > 0 */
if(hy<0||(ix>>23)>(iy>>20)-0x380
@@ -70,15 +72,12 @@
x = x+x; /* overflow */
if (FLT_EVAL_METHOD != 0)
/* Force conversion to float. */
- asm ("" : "=m"(x) : "m"(x));
+ asm ("" : "+m"(x));
return x;
}
- if(hy<0x00800000) { /* underflow */
- float x2 = x*x;
- if(x2!=x) { /* raise underflow flag */
- SET_FLOAT_WORD(x2,hx);
- return x2;
- }
+ if(hy<0x00800000) {
+ float u = x*x; /* underflow */
+ math_force_eval (u); /* raise underflow flag */
}
SET_FLOAT_WORD(x,hx);
return x;
--- libc/math/bug-nextafter.c.jj 2003-12-09 19:10:47.000000000 +0100
+++ libc/math/bug-nextafter.c 2007-03-23 15:25:00.000000000 +0100
@@ -4,6 +4,9 @@
#include <stdlib.h>
#include <stdio.h>
+float zero = 0.0;
+float inf = INFINITY;
+
int
main (void)
{
@@ -34,6 +37,81 @@ main (void)
++result;
}
+ i = 0;
+ m = FLT_MIN;
+ feclearexcept (FE_ALL_EXCEPT);
+ i = nextafterf (m, i);
+ if (i < 0 || i >= FLT_MIN)
+ {
+ puts ("nextafterf+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafterf+ did not underflow");
+ ++result;
+ }
+ i = 0;
+ feclearexcept (FE_ALL_EXCEPT);
+ i = nextafterf (-m, -i);
+ if (i > 0 || i <= -FLT_MIN)
+ {
+ puts ("nextafterf- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafterf- did not underflow");
+ ++result;
+ }
+ i = -INFINITY;
+ feclearexcept (FE_ALL_EXCEPT);
+ m = nextafterf (zero, inf);
+ if (m < 0.0 || m >= FLT_MIN)
+ {
+ puts ("nextafterf+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafterf+ did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nextafterf (m, i) != 0.0)
+ {
+ puts ("nextafterf+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafterf+ did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ m = nextafterf (copysignf (zero, -1.0), -inf);
+ if (m > 0.0 || m <= -FLT_MIN)
+ {
+ puts ("nextafterf- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafterf- did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nextafterf (m, -i) != 0.0)
+ {
+ puts ("nextafterf- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafterf- did not underflow");
+ ++result;
+ }
+
double di = INFINITY;
double dm = DBL_MAX;
feclearexcept (FE_ALL_EXCEPT);
@@ -59,5 +137,182 @@ main (void)
++result;
}
+ di = 0;
+ dm = DBL_MIN;
+ feclearexcept (FE_ALL_EXCEPT);
+ di = nextafter (dm, di);
+ if (di < 0 || di >= DBL_MIN)
+ {
+ puts ("nextafter+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafter+ did not underflow");
+ ++result;
+ }
+ di = 0;
+ feclearexcept (FE_ALL_EXCEPT);
+ di = nextafter (-dm, -di);
+ if (di > 0 || di <= -DBL_MIN)
+ {
+ puts ("nextafter- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafter- did not underflow");
+ ++result;
+ }
+ di = -INFINITY;
+ feclearexcept (FE_ALL_EXCEPT);
+ dm = nextafter (zero, inf);
+ if (dm < 0.0 || dm >= DBL_MIN)
+ {
+ puts ("nextafter+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafter+ did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nextafter (dm, di) != 0.0)
+ {
+ puts ("nextafter+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafter+ did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ dm = nextafter (copysign (zero, -1.0), -inf);
+ if (dm > 0.0 || dm <= -DBL_MIN)
+ {
+ puts ("nextafter- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafter- did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nextafter (dm, -di) != 0.0)
+ {
+ puts ("nextafter- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafter- did not underflow");
+ ++result;
+ }
+
+#ifndef NO_LONG_DOUBLE
+ long double li = INFINITY;
+ long double lm = LDBL_MAX;
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nextafterl (lm, li) != li)
+ {
+ puts ("nextafterl+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_OVERFLOW) == 0)
+ {
+ puts ("nextafterl+ did not overflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nextafterl (-lm, -li) != -li)
+ {
+ puts ("nextafterl failed");
+ ++result;
+ }
+ if (fetestexcept (FE_OVERFLOW) == 0)
+ {
+ puts ("nextafterl- did not overflow");
+ ++result;
+ }
+
+ li = 0;
+ lm = LDBL_MIN;
+ feclearexcept (FE_ALL_EXCEPT);
+ li = nextafterl (lm, li);
+ if (li < 0 || li >= LDBL_MIN)
+ {
+ puts ("nextafterl+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafterl+ did not underflow");
+ ++result;
+ }
+ li = 0;
+ feclearexcept (FE_ALL_EXCEPT);
+ li = nextafterl (-lm, -li);
+ if (li > 0 || li <= -LDBL_MIN)
+ {
+ puts ("nextafterl- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafterl- did not underflow");
+ ++result;
+ }
+ li = -INFINITY;
+ feclearexcept (FE_ALL_EXCEPT);
+ lm = nextafterl (zero, inf);
+ if (lm < 0.0 || lm >= LDBL_MIN)
+ {
+ puts ("nextafterl+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafterl+ did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nextafterl (lm, li) != 0.0)
+ {
+ puts ("nextafterl+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafterl+ did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ lm = nextafterl (copysign (zero, -1.0), -inf);
+ if (lm > 0.0 || lm <= -LDBL_MIN)
+ {
+ puts ("nextafterl- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafterl- did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nextafterl (lm, -li) != 0.0)
+ {
+ puts ("nextafterl- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nextafterl- did not underflow");
+ ++result;
+ }
+#endif
+
return result;
}
--- libc/math/s_nextafter.c.jj 2005-12-14 11:33:59.000000000 +0100
+++ libc/math/s_nextafter.c 2007-03-27 14:05:23.000000000 +0200
@@ -26,7 +26,7 @@ static char rcsid[] = "$NetBSD: s_nextaf
#define nexttoward __internal_nexttoward
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
#include <float.h>
#ifdef __STDC__
@@ -49,9 +49,12 @@ static char rcsid[] = "$NetBSD: s_nextaf
return x+y;
if(x==y) return y; /* x=y, return y */
if((ix|lx)==0) { /* x == 0 */
+ double u;
INSERT_WORDS(x,hy&0x80000000,1); /* return +-minsubnormal */
- y = x*x;
- if(y==x) return y; else return x; /* raise underflow flag */
+ u = math_opt_barrier (x);
+ u = u*u;
+ math_force_eval (u); /* raise underflow flag */
+ return x;
}
if(hx>=0) { /* x > 0 */
if(hx>hy||((hx==hy)&&(lx>ly))) { /* x > y, x -= ulp */
@@ -74,15 +77,12 @@ static char rcsid[] = "$NetBSD: s_nextaf
if(hy>=0x7ff00000) {
x = x+x; /* overflow */
if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
- asm ("" : "=m"(x) : "m"(x));
+ asm ("" : "+m"(x));
return x; /* overflow */
}
- if(hy<0x00100000) { /* underflow */
- y = x*x;
- if(y!=x) { /* raise underflow flag */
- INSERT_WORDS(y,hx,lx);
- return y;
- }
+ if(hy<0x00100000) {
+ double u = x*x; /* underflow */
+ math_force_eval (u); /* raise underflow flag */
}
INSERT_WORDS(x,hx,lx);
return x;
--- libc/math/math_private.h.jj 2005-11-21 16:43:03.000000000 +0100
+++ libc/math/math_private.h 2007-03-23 14:32:06.000000000 +0100
@@ -332,4 +332,10 @@ extern double __slowexp (double __x);
extern double __slowpow (double __x, double __y, double __z);
extern void __docos (double __x, double __dx, double __v[]);
+#ifndef math_opt_barrier
+#define math_opt_barrier(x) \
+({ __typeof (x) __x = x; __asm ("" : "+m" (__x)); __x; })
+#define math_force_eval(x) __asm __volatile ("" : : "m" (x))
+#endif
+
#endif /* _MATH_PRIVATE_H_ */
--- libc/math/bug-nexttoward.c.jj 2003-12-07 22:13:09.000000000 +0100
+++ libc/math/bug-nexttoward.c 2007-03-23 15:47:10.000000000 +0100
@@ -4,6 +4,9 @@
#include <stdlib.h>
#include <stdio.h>
+float zero = 0.0;
+float inf = INFINITY;
+
int
main (void)
{
@@ -35,6 +38,81 @@ main (void)
++result;
}
+ fi = 0;
+ m = FLT_MIN;
+ feclearexcept (FE_ALL_EXCEPT);
+ fi = nexttowardf (m, fi);
+ if (fi < 0 || fi >= FLT_MIN)
+ {
+ puts ("nexttowardf+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttowardf+ did not underflow");
+ ++result;
+ }
+ fi = 0;
+ feclearexcept (FE_ALL_EXCEPT);
+ fi = nexttowardf (-m, -fi);
+ if (fi > 0 || fi <= -FLT_MIN)
+ {
+ puts ("nexttowardf- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttowardf- did not underflow");
+ ++result;
+ }
+ fi = -INFINITY;
+ feclearexcept (FE_ALL_EXCEPT);
+ m = nexttowardf (zero, inf);
+ if (m < 0.0 || m >= FLT_MIN)
+ {
+ puts ("nexttowardf+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttowardf+ did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nexttowardf (m, fi) != 0.0)
+ {
+ puts ("nexttowardf+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttowardf+ did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ m = nexttowardf (copysignf (zero, -1.0), -inf);
+ if (m > 0.0 || m <= -FLT_MIN)
+ {
+ puts ("nexttowardf- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttowardf- did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nexttowardf (m, -fi) != 0.0)
+ {
+ puts ("nexttowardf- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttowardf- did not underflow");
+ ++result;
+ }
+
tl = (long double) DBL_MAX + 1.0e305L;
double di = INFINITY;
double dm = DBL_MAX;
@@ -61,5 +139,182 @@ main (void)
++result;
}
+ di = 0;
+ dm = DBL_MIN;
+ feclearexcept (FE_ALL_EXCEPT);
+ di = nexttoward (dm, di);
+ if (di < 0 || di >= DBL_MIN)
+ {
+ puts ("nexttoward+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttoward+ did not underflow");
+ ++result;
+ }
+ di = 0;
+ feclearexcept (FE_ALL_EXCEPT);
+ di = nexttoward (-dm, -di);
+ if (di > 0 || di <= -DBL_MIN)
+ {
+ puts ("nexttoward- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttoward- did not underflow");
+ ++result;
+ }
+ di = -INFINITY;
+ feclearexcept (FE_ALL_EXCEPT);
+ dm = nexttoward (zero, inf);
+ if (dm < 0.0 || dm >= DBL_MIN)
+ {
+ puts ("nexttoward+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttoward+ did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nexttoward (dm, di) != 0.0)
+ {
+ puts ("nexttoward+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttoward+ did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ dm = nexttoward (copysign (zero, -1.0), -inf);
+ if (dm > 0.0 || dm <= -DBL_MIN)
+ {
+ puts ("nexttoward- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttoward- did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nexttoward (dm, -di) != 0.0)
+ {
+ puts ("nexttoward- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttoward- did not underflow");
+ ++result;
+ }
+
+#ifndef NO_LONG_DOUBLE
+ long double li = INFINITY;
+ long double lm = LDBL_MAX;
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nexttowardl (lm, li) != li)
+ {
+ puts ("nexttowardl+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_OVERFLOW) == 0)
+ {
+ puts ("nexttowardl+ did not overflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nexttowardl (-lm, -li) != -li)
+ {
+ puts ("nexttowardl failed");
+ ++result;
+ }
+ if (fetestexcept (FE_OVERFLOW) == 0)
+ {
+ puts ("nexttowardl- did not overflow");
+ ++result;
+ }
+
+ li = 0;
+ lm = LDBL_MIN;
+ feclearexcept (FE_ALL_EXCEPT);
+ li = nexttowardl (lm, li);
+ if (li < 0 || li >= LDBL_MIN)
+ {
+ puts ("nexttowardl+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttowardl+ did not underflow");
+ ++result;
+ }
+ li = 0;
+ feclearexcept (FE_ALL_EXCEPT);
+ li = nexttowardl (-lm, -li);
+ if (li > 0 || li <= -LDBL_MIN)
+ {
+ puts ("nexttowardl- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttowardl- did not underflow");
+ ++result;
+ }
+ li = -INFINITY;
+ feclearexcept (FE_ALL_EXCEPT);
+ lm = nexttowardl (zero, inf);
+ if (lm < 0.0 || lm >= LDBL_MIN)
+ {
+ puts ("nexttowardl+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttowardl+ did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nexttowardl (lm, li) != 0.0)
+ {
+ puts ("nexttowardl+ failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttowardl+ did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ lm = nexttowardl (copysign (zero, -1.0), -inf);
+ if (lm > 0.0 || lm <= -LDBL_MIN)
+ {
+ puts ("nexttowardl- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttowardl- did not underflow");
+ ++result;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ if (nexttowardl (lm, -li) != 0.0)
+ {
+ puts ("nexttowardl- failed");
+ ++result;
+ }
+ if (fetestexcept (FE_UNDERFLOW) == 0)
+ {
+ puts ("nexttowardl- did not underflow");
+ ++result;
+ }
+#endif
+
return result;
}
--- libc/sysdeps/i386/fpu/s_nextafterl.c.jj 2003-02-15 06:22:58.000000000 +0100
+++ libc/sysdeps/i386/fpu/s_nextafterl.c 2007-03-27 13:50:40.000000000 +0200
@@ -27,7 +27,7 @@ static char rcsid[] = "$NetBSD: $";
*/
#include "math.h"
-#include "math_private.h"
+#include <math_private.h>
#ifdef __STDC__
long double __nextafterl(long double x, long double y)
@@ -52,9 +52,12 @@ static char rcsid[] = "$NetBSD: $";
return x+y;
if(x==y) return y; /* x=y, return y */
if((ix|hx|lx)==0) { /* x == 0 */
+ long double u;
SET_LDOUBLE_WORDS(x,esy&0x8000,0,1);/* return +-minsubnormal */
- y = x*x;
- if(y==x) return y; else return x; /* raise underflow flag */
+ u = math_opt_barrier (x);
+ u = u * u;
+ math_force_eval (u); /* raise underflow flag */
+ return x;
}
if(esx>=0) { /* x > 0 */
if(esx>esy||((esx==esy) && (hx>hy||((hx==hy)&&(lx>ly))))) {
@@ -109,12 +112,9 @@ static char rcsid[] = "$NetBSD: $";
}
esy = esx&0x7fff;
if(esy==0x7fff) return x+x; /* overflow */
- if(esy==0) { /* underflow */
- y = x*x;
- if(y!=x) { /* raise underflow flag */
- SET_LDOUBLE_WORDS(y,esx,hx,lx);
- return y;
- }
+ if(esy==0) {
+ long double u = x*x; /* underflow */
+ math_force_eval (u); /* raise underflow flag */
}
SET_LDOUBLE_WORDS(x,esx,hx,lx);
return x;
--- libc/sysdeps/i386/fpu/s_nexttoward.c.jj 2007-03-27 13:28:32.000000000 +0200
+++ libc/sysdeps/i386/fpu/s_nexttoward.c 2007-03-27 14:09:50.000000000 +0200
@@ -27,7 +27,8 @@ static char rcsid[] = "$NetBSD: $";
*/
#include "math.h"
-#include "math_private.h"
+#include <math_private.h>
+#include <float.h>
#ifdef __STDC__
double __nexttoward(double x, long double y)
@@ -52,10 +53,12 @@ static char rcsid[] = "$NetBSD: $";
return x+y;
if((long double) x==y) return y; /* x=y, return y */
if((ix|lx)==0) { /* x == 0 */
- double x2;
+ double u;
INSERT_WORDS(x,(esy&0x8000)<<16,1); /* return +-minsub */
- x2 = x*x;
- if(x2==x) return x2; else return x; /* raise underflow flag */
+ u = math_opt_barrier (x);
+ u = u * u;
+ math_force_eval (u); /* raise underflow flag */
+ return x;
}
if(hx>=0) { /* x > 0 */
if (esy>=0x8000||((ix>>20)&0x7ff)>iy-0x3c00
@@ -85,16 +88,14 @@ static char rcsid[] = "$NetBSD: $";
hy = hx&0x7ff00000;
if(hy>=0x7ff00000) {
x = x+x; /* overflow */
- /* Force conversion to double. */
- asm ("" : "=m"(x) : "m"(x));
+ if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
+ /* Force conversion to double. */
+ asm ("" : "+m"(x));
return x;
}
- if(hy<0x00100000) { /* underflow */
- double x2 = x*x;
- if(x2!=x) { /* raise underflow flag */
- INSERT_WORDS(x2,hx,lx);
- return x2;
- }
+ if(hy<0x00100000) {
+ double u = x*x; /* underflow */
+ math_force_eval (u); /* raise underflow flag */
}
INSERT_WORDS(x,hx,lx);
return x;
--- libc/sysdeps/i386/fpu/s_nexttowardf.c.jj 2003-12-07 22:12:13.000000000 +0100
+++ libc/sysdeps/i386/fpu/s_nexttowardf.c 2007-03-27 14:09:58.000000000 +0200
@@ -19,7 +19,8 @@ static char rcsid[] = "$NetBSD: $";
#endif
#include "math.h"
-#include "math_private.h"
+#include <math_private.h>
+#include <float.h>
#ifdef __STDC__
float __nexttowardf(float x, long double y)
@@ -44,10 +45,12 @@ static char rcsid[] = "$NetBSD: $";
return x+y;
if((long double) x==y) return y; /* x=y, return y */
if(ix==0) { /* x == 0 */
- float x2;
+ float u;
SET_FLOAT_WORD(x,((esy&0x8000)<<16)|1);/* return +-minsub*/
- x2 = x*x;
- if(x2==x) return x2; else return x; /* raise underflow flag */
+ u = math_opt_barrier (x);
+ u = u * u;
+ math_force_eval (u); /* raise underflow flag */
+ return x;
}
if(hx>=0) { /* x > 0 */
if(esy>=0x8000||((ix>>23)&0xff)>iy-0x3f80
@@ -69,16 +72,14 @@ static char rcsid[] = "$NetBSD: $";
hy = hx&0x7f800000;
if(hy>=0x7f800000) {
x = x+x; /* overflow */
- /* Force conversion to float. */
- asm ("" : "=m"(x) : "m"(x));
+ if (FLT_EVAL_METHOD != 0)
+ /* Force conversion to float. */
+ asm ("" : "+m"(x));
return x;
}
- if(hy<0x00800000) { /* underflow */
- float x2 = x*x;
- if(x2!=x) { /* raise underflow flag */
- SET_FLOAT_WORD(x2,hx);
- return x2;
- }
+ if(hy<0x00800000) {
+ float u = x*x; /* underflow */
+ math_force_eval (u); /* raise underflow flag */
}
SET_FLOAT_WORD(x,hx);
return x;
--- libc/sysdeps/i386/fpu/math_private.h.jj 2007-03-23 14:30:22.000000000 +0100
+++ libc/sysdeps/i386/fpu/math_private.h 2007-03-23 15:32:38.000000000 +0100
@@ -0,0 +1,18 @@
+#ifndef _MATH_PRIVATE_H
+
+#define math_opt_barrier(x) \
+({ __typeof(x) __x; \
+ __asm ("" : "=t" (__x) : "0" (x)); \
+ __x; })
+#define math_force_eval(x) \
+do \
+ { \
+ if (sizeof (x) <= sizeof (double)) \
+ __asm __volatile ("" : : "m" (x)); \
+ else \
+ __asm __volatile ("" : : "f" (x)); \
+ } \
+while (0)
+
+#include <math/math_private.h>
+#endif
--- libc/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c.jj 2006-01-28 01:07:25.000000000 +0100
+++ libc/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c 2007-03-27 14:06:04.000000000 +0200
@@ -26,7 +26,7 @@ static char rcsid[] = "$NetBSD: $";
*/
#include "math.h"
-#include "math_private.h"
+#include <math_private.h>
#include <math_ldbl_opt.h>
#include <float.h>
@@ -55,10 +55,12 @@ static char rcsid[] = "$NetBSD: $";
return x+y;
if((long double) x==y) return y; /* x=y, return y */
if((ix|lx)==0) { /* x == 0 */
- double x2;
+ double u;
INSERT_WORDS(x,(u_int32_t)((hy>>32)&0x80000000),1);/* return +-minsub */
- x2 = x*x;
- if(x2==x) return x2; else return x; /* raise underflow flag */
+ u = math_opt_barrier (x);
+ u = u * u;
+ math_force_eval (u); /* raise underflow flag */
+ return x;
}
if(hx>=0) { /* x > 0 */
if (hy<0||(ix>>20)>(iy>>52)
@@ -89,16 +91,13 @@ static char rcsid[] = "$NetBSD: $";
if(hy>=0x7ff00000) {
x = x+x; /* overflow */
if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
- /* Force conversion to float. */
- asm ("" : "=m"(x) : "m"(x));
+ /* Force conversion to double. */
+ asm ("" : "+m"(x));
return x;
}
- if(hy<0x00100000) { /* underflow */
- double x2 = x*x;
- if(x2!=x) { /* raise underflow flag */
- INSERT_WORDS(x2,hx,lx);
- return x2;
- }
+ if(hy<0x00100000) {
+ double u = x*x; /* underflow */
+ math_force_eval (u); /* raise underflow flag */
}
INSERT_WORDS(x,hx,lx);
return x;
--- libc/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c.jj 2006-01-28 01:07:25.000000000 +0100
+++ libc/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c 2007-03-27 14:11:11.000000000 +0200
@@ -19,8 +19,9 @@ static char rcsid[] = "$NetBSD: $";
#endif
#include "math.h"
-#include "math_private.h"
+#include <math_private.h>
#include <math_ldbl_opt.h>
+#include <float.h>
#ifdef __STDC__
float __nexttowardf(float x, long double y)
@@ -46,10 +47,12 @@ static char rcsid[] = "$NetBSD: $";
return x+y;
if((long double) x==y) return y; /* x=y, return y */
if(ix==0) { /* x == 0 */
- float x2;
+ float u;
SET_FLOAT_WORD(x,(u_int32_t)((hy>>32)&0x80000000)|1);/* return +-minsub*/
- x2 = x*x;
- if(x2==x) return x2; else return x; /* raise underflow flag */
+ u = math_opt_barrier (x);
+ u = u * u;
+ math_force_eval (u); /* raise underflow flag */
+ return x;
}
if(hx>=0) { /* x > 0 */
if(hy<0||(ix>>23)>(iy>>52)-0x380
@@ -69,13 +72,16 @@ static char rcsid[] = "$NetBSD: $";
}
}
hy = hx&0x7f800000;
- if(hy>=0x7f800000) return x+x; /* overflow */
+ if(hy>=0x7f800000) {
+ x = x+x; /* overflow */
+ if (FLT_EVAL_METHOD != 0)
+ /* Force conversion to float. */
+ asm ("" : "+m"(x));
+ return x;
+ }
if(hy<0x00800000) { /* underflow */
- float x2 = x*x;
- if(x2!=x) { /* raise underflow flag */
- SET_FLOAT_WORD(x2,hx);
- return x2;
- }
+ float u = x*x;
+ math_force_eval (u); /* raise underflow flag */
}
SET_FLOAT_WORD(x,hx);
return x;
--- libc/sysdeps/ieee754/flt-32/s_nextafterf.c.jj 2003-12-07 21:53:59.000000000 +0100
+++ libc/sysdeps/ieee754/flt-32/s_nextafterf.c 2007-03-27 14:06:23.000000000 +0200
@@ -18,7 +18,7 @@ static char rcsid[] = "$NetBSD: s_nextaf
#endif
#include "math.h"
-#include "math_private.h"
+#include <math_private.h>
#include <float.h>
#ifdef __STDC__
@@ -40,9 +40,12 @@ static char rcsid[] = "$NetBSD: s_nextaf
return x+y;
if(x==y) return y; /* x=y, return y */
if(ix==0) { /* x == 0 */
+ float u;
SET_FLOAT_WORD(x,(hy&0x80000000)|1);/* return +-minsubnormal */
- y = x*x;
- if(y==x) return y; else return x; /* raise underflow flag */
+ u = math_opt_barrier (x);
+ u = u*u;
+ math_force_eval (u); /* raise underflow flag */
+ return x;
}
if(hx>=0) { /* x > 0 */
if(hx>hy) { /* x > y, x -= ulp */
@@ -61,15 +64,12 @@ static char rcsid[] = "$NetBSD: s_nextaf
if(hy>=0x7f800000) {
x = x+x; /* overflow */
if (FLT_EVAL_METHOD != 0)
- asm ("" : "=m"(x) : "m"(x));
+ asm ("" : "+m"(x));
return x; /* overflow */
}
- if(hy<0x00800000) { /* underflow */
- y = x*x;
- if(y!=x) { /* raise underflow flag */
- SET_FLOAT_WORD(y,hx);
- return y;
- }
+ if(hy<0x00800000) {
+ float u = x*x; /* underflow */
+ math_force_eval (u); /* raise underflow flag */
}
SET_FLOAT_WORD(x,hx);
return x;
--- libc/sysdeps/ieee754/ldbl-128/s_nextafterl.c.jj 1999-07-14 02:09:34.000000000 +0200
+++ libc/sysdeps/ieee754/ldbl-128/s_nextafterl.c 2007-03-27 13:51:15.000000000 +0200
@@ -25,7 +25,7 @@ static char rcsid[] = "$NetBSD: $";
*/
#include "math.h"
-#include "math_private.h"
+#include <math_private.h>
#ifdef __STDC__
long double __nextafterl(long double x, long double y)
@@ -47,9 +47,12 @@ static char rcsid[] = "$NetBSD: $";
return x+y;
if(x==y) return y; /* x=y, return y */
if((ix|lx)==0) { /* x == 0 */
+ long double u;
SET_LDOUBLE_WORDS64(x,hy&0x8000000000000000ULL,1);/* return +-minsubnormal */
- y = x*x;
- if(y==x) return y; else return x; /* raise underflow flag */
+ u = math_opt_barrier (x);
+ u = u * u;
+ math_force_eval (u); /* raise underflow flag */
+ return x;
}
if(hx>=0) { /* x > 0 */
if(hx>hy||((hx==hy)&&(lx>ly))) { /* x > y, x -= ulp */
@@ -70,12 +73,9 @@ static char rcsid[] = "$NetBSD: $";
}
hy = hx&0x7fff000000000000LL;
if(hy==0x7fff000000000000LL) return x+x;/* overflow */
- if(hy==0) { /* underflow */
- y = x*x;
- if(y!=x) { /* raise underflow flag */
- SET_LDOUBLE_WORDS64(y,hx,lx);
- return y;
- }
+ if(hy==0) {
+ long double u = x*x; /* underflow */
+ math_force_eval (u); /* raise underflow flag */
}
SET_LDOUBLE_WORDS64(x,hx,lx);
return x;
--- libc/sysdeps/ieee754/ldbl-128/s_nexttoward.c.jj 2003-12-07 22:21:29.000000000 +0100
+++ libc/sysdeps/ieee754/ldbl-128/s_nexttoward.c 2007-03-27 14:06:31.000000000 +0200
@@ -26,7 +26,7 @@ static char rcsid[] = "$NetBSD: $";
*/
#include "math.h"
-#include "math_private.h"
+#include <math_private.h>
#include <float.h>
#ifdef __STDC__
@@ -53,10 +53,12 @@ static char rcsid[] = "$NetBSD: $";
return x+y;
if((long double) x==y) return y; /* x=y, return y */
if((ix|lx)==0) { /* x == 0 */
- double x2;
+ double u;
INSERT_WORDS(x,(u_int32_t)((hy>>32)&0x80000000),1);/* return +-minsub */
- x2 = x*x;
- if(x2==x) return x2; else return x; /* raise underflow flag */
+ u = math_opt_barrier (x);
+ u = u * u;
+ math_force_eval (u); /* raise underflow flag */
+ return x;
}
if(hx>=0) { /* x > 0 */
if (hy<0||(ix>>20)>(iy>>48)-0x3c00
@@ -87,16 +89,13 @@ static char rcsid[] = "$NetBSD: $";
if(hy>=0x7ff00000) {
x = x+x; /* overflow */
if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
- /* Force conversion to float. */
- asm ("" : "=m"(x) : "m"(x));
+ /* Force conversion to double. */
+ asm ("" : "+m"(x));
return x;
}
- if(hy<0x00100000) { /* underflow */
- double x2 = x*x;
- if(x2!=x) { /* raise underflow flag */
- INSERT_WORDS(x2,hx,lx);
- return x2;
- }
+ if(hy<0x00100000) {
+ double u = x*x; /* underflow */
+ math_force_eval (u); /* raise underflow flag */
}
INSERT_WORDS(x,hx,lx);
return x;
--- libc/sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c.jj 2006-01-21 20:43:12.000000000 +0100
+++ libc/sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c 2007-03-27 14:12:02.000000000 +0200
@@ -20,7 +20,10 @@
* Special cases:
*/
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
+#include <float.h>
float __nldbl_nexttowardf(float x, double y);
@@ -39,10 +42,12 @@ float __nldbl_nexttowardf(float x, doubl
return x+y;
if((double) x==y) return y; /* x=y, return y */
if(ix==0) { /* x == 0 */
- float x2;
+ float u;
SET_FLOAT_WORD(x,(u_int32_t)(hy&0x80000000)|1);/* return +-minsub*/
- x2 = x*x;
- if(x2==x) return x2; else return x; /* raise underflow flag */
+ u = math_opt_barrier (x);
+ u = u * u;
+ math_force_eval (u); /* raise underflow flag */
+ return x;
}
if(hx>=0) { /* x > 0 */
if(hy<0||(ix>>23)>(iy>>20)-0x380
@@ -60,13 +65,16 @@ float __nldbl_nexttowardf(float x, doubl
hx += 1;
}
hy = hx&0x7f800000;
- if(hy>=0x7f800000) return x+x; /* overflow */
- if(hy<0x00800000) { /* underflow */
- float x2 = x*x;
- if(x2!=x) { /* raise underflow flag */
- SET_FLOAT_WORD(x2,hx);
- return x2;
- }
+ if(hy>=0x7f800000) {
+ x = x+x; /* overflow */
+ if (FLT_EVAL_METHOD != 0)
+ /* Force conversion to float. */
+ asm ("" : "+m"(x));
+ return x;
+ }
+ if(hy<0x00800000) {
+ float u = x*x; /* underflow */
+ math_force_eval (u); /* raise underflow flag */
}
SET_FLOAT_WORD(x,hx);
return x;
--- libc/sysdeps/ieee754/ldbl-96/s_nextafterl.c.jj 2001-10-16 13:02:24.000000000 +0200
+++ libc/sysdeps/ieee754/ldbl-96/s_nextafterl.c 2007-03-27 13:51:30.000000000 +0200
@@ -26,7 +26,7 @@ static char rcsid[] = "$NetBSD: $";
*/
#include "math.h"
-#include "math_private.h"
+#include <math_private.h>
#ifdef __STDC__
long double __nextafterl(long double x, long double y)
@@ -48,9 +48,12 @@ static char rcsid[] = "$NetBSD: $";
return x+y;
if(x==y) return y; /* x=y, return y */
if((ix|hx|lx)==0) { /* x == 0 */
+ long double u;
SET_LDOUBLE_WORDS(x,esy&0x8000,0,1);/* return +-minsubnormal */
- y = x*x;
- if(y==x) return y; else return x; /* raise underflow flag */
+ u = math_opt_barrier (x);
+ u = u * u;
+ math_force_eval (u); /* raise underflow flag */
+ return x;
}
if(esx<0x8000) { /* x > 0 */
if(ix>iy||((ix==iy) && (hx>hy||((hx==hy)&&(lx>ly))))) {
@@ -85,13 +88,10 @@ static char rcsid[] = "$NetBSD: $";
}
}
esy = esx&0x7fff;
- if(esy==0x7fff) return x+x; /* overflow */
- if(esy==0) { /* underflow */
- y = x*x;
- if(y!=x) { /* raise underflow flag */
- SET_LDOUBLE_WORDS(y,esx,hx,lx);
- return y;
- }
+ if(esy==0x7fff) return x+x; /* overflow */
+ if(esy==0) {
+ long double u = x*x; /* underflow */
+ math_force_eval (u); /* raise underflow flag */
}
SET_LDOUBLE_WORDS(x,esx,hx,lx);
return x;
--- libc/sysdeps/ieee754/ldbl-96/s_nexttoward.c.jj 2006-01-14 13:08:51.000000000 +0100
+++ libc/sysdeps/ieee754/ldbl-96/s_nexttoward.c 2007-03-27 14:06:48.000000000 +0200
@@ -26,7 +26,7 @@ static char rcsid[] = "$NetBSD: $";
*/
#include "math.h"
-#include "math_private.h"
+#include <math_private.h>
#include <float.h>
#ifdef __STDC__
@@ -50,10 +50,12 @@ static char rcsid[] = "$NetBSD: $";
return x+y;
if((long double) x==y) return y; /* x=y, return y */
if((ix|lx)==0) { /* x == 0 */
- double x2;
+ double u;
INSERT_WORDS(x,(esy&0x8000)<<16,1); /* return +-minsub */
- x2 = x*x;
- if(x2==x) return x2; else return x; /* raise underflow flag */
+ u = math_opt_barrier (x);
+ u = u * u;
+ math_force_eval (u); /* raise underflow flag */
+ return x;
}
if(hx>=0) { /* x > 0 */
if (esy>=0x8000||((ix>>20)&0x7ff)>iy-0x3c00
@@ -84,16 +86,13 @@ static char rcsid[] = "$NetBSD: $";
if(hy>=0x7ff00000) {
x = x+x; /* overflow */
if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
- /* Force conversion to float. */
- asm ("" : "=m"(x) : "m"(x));
+ /* Force conversion to double. */
+ asm ("" : "+m"(x));
return x;
}
- if(hy<0x00100000) { /* underflow */
- double x2 = x*x;
- if(x2!=x) { /* raise underflow flag */
- INSERT_WORDS(x2,hx,lx);
- return x2;
- }
+ if(hy<0x00100000) {
+ double u = x*x; /* underflow */
+ math_force_eval (u); /* raise underflow flag */
}
INSERT_WORDS(x,hx,lx);
return x;
--- libc/sysdeps/ieee754/ldbl-96/s_nexttowardf.c.jj 2001-06-16 05:34:42.000000000 +0200
+++ libc/sysdeps/ieee754/ldbl-96/s_nexttowardf.c 2007-03-27 14:10:56.000000000 +0200
@@ -18,7 +18,8 @@ static char rcsid[] = "$NetBSD: $";
#endif
#include "math.h"
-#include "math_private.h"
+#include <math_private.h>
+#include <float.h>
#ifdef __STDC__
float __nexttowardf(float x, long double y)
@@ -41,10 +42,12 @@ static char rcsid[] = "$NetBSD: $";
return x+y;
if((long double) x==y) return y; /* x=y, return y */
if(ix==0) { /* x == 0 */
- float x2;
+ float u;
SET_FLOAT_WORD(x,((esy&0x8000)<<16)|1);/* return +-minsub*/
- x2 = x*x;
- if(x2==x) return x2; else return x; /* raise underflow flag */
+ u = math_opt_barrier (x);
+ u = u * u;
+ math_force_eval (u); /* raise underflow flag */
+ return x;
}
if(hx>=0) { /* x > 0 */
if(esy>=0x8000||((ix>>23)&0xff)>iy-0x3f80
@@ -64,13 +67,16 @@ static char rcsid[] = "$NetBSD: $";
}
}
hy = hx&0x7f800000;
- if(hy>=0x7f800000) return x+x; /* overflow */
- if(hy<0x00800000) { /* underflow */
- float x2 = x*x;
- if(x2!=x) { /* raise underflow flag */
- SET_FLOAT_WORD(x2,hx);
- return x2;
- }
+ if(hy>=0x7f800000) {
+ x = x+x; /* overflow */
+ if (FLT_EVAL_METHOD != 0)
+ /* Force conversion to float. */
+ asm ("" : "+m"(x));
+ return x;
+ }
+ if(hy<0x00800000) {
+ float u = x*x; /* underflow */
+ math_force_eval (u); /* raise underflow flag */
}
SET_FLOAT_WORD(x,hx);
return x;
--- libc/sysdeps/x86_64/fpu/math_private.h.jj 2007-03-23 14:30:22.000000000 +0100
+++ libc/sysdeps/x86_64/fpu/math_private.h 2007-03-27 14:01:30.000000000 +0200
@@ -0,0 +1,21 @@
+#ifndef _MATH_PRIVATE_H
+
+#define math_opt_barrier(x) \
+({ __typeof(x) __x; \
+ if (sizeof (x) <= sizeof (double)) \
+ __asm ("" : "=x" (__x) : "0" (x)); \
+ else \
+ __asm ("" : "=t" (__x) : "0" (x)); \
+ __x; })
+#define math_force_eval(x) \
+do \
+ { \
+ if (sizeof (x) <= sizeof (double)) \
+ __asm __volatile ("" : : "x" (x)); \
+ else \
+ __asm __volatile ("" : : "f" (x)); \
+ } \
+while (0)
+
+#include <math/math_private.h>
+#endif
glibc-bz3427.patch:
math/test-fenv.c | 100 ++++++++++++++++++++++++++++++++++++++-
sysdeps/i386/fpu/feholdexcpt.c | 20 +++++--
sysdeps/i386/fpu/feupdateenv.c | 15 ++++-
sysdeps/ia64/fpu/feholdexcpt.c | 18 +++++--
sysdeps/ia64/fpu/feupdateenv.c | 8 +--
sysdeps/x86_64/fpu/fedisblxcpt.c | 6 --
sysdeps/x86_64/fpu/feenablxcpt.c | 6 --
sysdeps/x86_64/fpu/feholdexcpt.c | 17 ++++--
sysdeps/x86_64/fpu/feupdateenv.c | 51 +++++++++++++++++++
9 files changed, 206 insertions(+), 35 deletions(-)
--- NEW FILE glibc-bz3427.patch ---
2007-03-22 Jakub Jelinek <jakub at redhat.com>
[BZ #3427]
* sysdeps/x86_64/fpu/feholdexcpt.c (feholdexcept): Clear all
exceptions both in SW and MXCSR.
* sysdeps/x86_64/fpu/feupdateenv.c: New file.
* sysdeps/x86_64/fpu/feenablxcpt.c (feenableexcept): Remove dead code.
* sysdeps/x86_64/fpu/fedisblxcpt.c (fedisableexcept): Likewise.
* sysdeps/i386/fpu/feholdexcpt.c (feholdexcept): Clear all exceptions
in MXCSR if SSE is available.
* sysdeps/i386/fpu/feupdateenv.c: Include unistd.h, dl-procinfo.h
and ldsodefs.h.
(__feupdateenv): Query exceptions also from MXCSR if SSE is available.
Fix comment typo.
* sysdeps/ia64/fpu/feholdexcpt.c (feholdexcept): Clear all exceptions.
Return 0 rather than 1.
* sysdeps/ia64/fpu/feupdateenv.c (feupdateenv): Fix comment typo.
Remove incorrect part of a comment. Fix argument to feraiseexcept.
* math/test-fenv.c (feholdexcept_tests): New function.
(main): Call it.
2007-01-05 Richard B. Kreckel <kreckel at ginac.de>
[BZ #3427]
* sysdeps/i386/fpu/feholdexcpt.c (feholdexcept): Clear all exceptions
in SW.
--- libc/math/test-fenv.c.jj 2003-05-22 04:08:50.000000000 +0200
+++ libc/math/test-fenv.c 2007-03-22 14:41:33.000000000 +0100
@@ -1,4 +1,5 @@
-/* Copyright (C) 1997, 1998, 2000, 2001, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2000, 2001, 2003, 2007
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Andreas Jaeger <aj at suse.de> and
Ulrich Drepper <drepper at cygnus.com>, 1997.
@@ -636,6 +637,102 @@ feenv_tests (void)
}
+static void
+feholdexcept_tests (void)
+{
+ fenv_t saved, saved2;
+ int res;
+
+ feclearexcept (FE_ALL_EXCEPT);
+ fedisableexcept (FE_ALL_EXCEPT);
+#ifdef FE_DIVBYZERO
+ feraiseexcept (FE_DIVBYZERO);
+#endif
+ test_exceptions ("feholdexcept_tests FE_DIVBYZERO test",
+ DIVBYZERO_EXC, 0);
+ res = feholdexcept (&saved);
+ if (res != 0)
+ {
+ printf ("feholdexcept failed: %d\n", res);
+ ++count_errors;
+ }
+#if defined FE_TONEAREST && defined FE_TOWARDZERO
+ res = fesetround (FE_TOWARDZERO);
+ if (res != 0)
+ {
+ printf ("fesetround failed: %d\n", res);
+ ++count_errors;
+ }
+#endif
+ test_exceptions ("feholdexcept_tests 0 test", NO_EXC, 0);
+ feraiseexcept (FE_INVALID);
+ test_exceptions ("feholdexcept_tests FE_INVALID test",
+ INVALID_EXC, 0);
+ res = feupdateenv (&saved);
+ if (res != 0)
+ {
+ printf ("feupdateenv failed: %d\n", res);
+ ++count_errors;
+ }
+#if defined FE_TONEAREST && defined FE_TOWARDZERO
+ res = fegetround ();
+ if (res != FE_TONEAREST)
+ {
+ printf ("feupdateenv didn't restore rounding mode: %d\n", res);
+ ++count_errors;
+ }
+#endif
+ test_exceptions ("feholdexcept_tests FE_DIVBYZERO|FE_INVALID test",
+ DIVBYZERO_EXC | INVALID_EXC, 0);
+ feclearexcept (FE_ALL_EXCEPT);
+ feraiseexcept (FE_INVALID);
+#if defined FE_TONEAREST && defined FE_UPWARD
+ res = fesetround (FE_UPWARD);
+ if (res != 0)
+ {
+ printf ("fesetround failed: %d\n", res);
+ ++count_errors;
+ }
+#endif
+ res = feholdexcept (&saved2);
+ if (res != 0)
+ {
+ printf ("feholdexcept failed: %d\n", res);
+ ++count_errors;
+ }
+#if defined FE_TONEAREST && defined FE_UPWARD
+ res = fesetround (FE_TONEAREST);
+ if (res != 0)
+ {
+ printf ("fesetround failed: %d\n", res);
+ ++count_errors;
+ }
+#endif
+ test_exceptions ("feholdexcept_tests 0 2nd test", NO_EXC, 0);
+ feraiseexcept (FE_INEXACT);
+ test_exceptions ("feholdexcept_tests FE_INEXACT test",
+ INEXACT_EXC, 0);
+ res = feupdateenv (&saved2);
+ if (res != 0)
+ {
+ printf ("feupdateenv failed: %d\n", res);
+ ++count_errors;
+ }
+#if defined FE_TONEAREST && defined FE_UPWARD
+ res = fegetround ();
+ if (res != FE_UPWARD)
+ {
+ printf ("feupdateenv didn't restore rounding mode: %d\n", res);
+ ++count_errors;
+ }
+ fesetround (FE_TONEAREST);
+#endif
+ test_exceptions ("feholdexcept_tests FE_INEXACT|FE_INVALID test",
+ INVALID_EXC | INEXACT_EXC, 0);
+ feclearexcept (FE_ALL_EXCEPT);
+}
+
+
/* IEC 559 and ISO C99 define a default startup environment */
static void
initial_tests (void)
@@ -654,6 +751,7 @@ main (void)
initial_tests ();
fe_tests ();
feenv_tests ();
+ feholdexcept_tests ();
if (count_errors)
{
--- libc/sysdeps/ia64/fpu/feholdexcpt.c.jj 2005-07-08 20:52:46.000000000 +0200
+++ libc/sysdeps/ia64/fpu/feholdexcpt.c 2007-03-22 13:28:45.000000000 +0100
@@ -1,5 +1,5 @@
/* Store current floating-point environment and clear exceptions.
- Copyright (C) 1997, 1999, 2000, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1999, 2000, 2005, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Christian Boissat <Christian.Boissat at cern.ch>, 1999
@@ -23,12 +23,20 @@
int
feholdexcept (fenv_t *envp)
{
+ fenv_t fpsr;
/* Save the current state. */
- fegetenv (envp);
+ __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr));
+ *envp = fpsr;
- /* set the trap disable bit */
- __asm__ __volatile__ ("mov.m ar.fpsr=%0" :: "r" (*envp | FE_ALL_EXCEPT));
+ /* Set the trap disable bits. */
+ fpsr |= FE_ALL_EXCEPT;
- return 1;
+ /* And clear the exception bits. */
+ fpsr &= ~(fenv_t) (FE_ALL_EXCEPT << 13);
+
+ __asm__ __volatile__ ("mov.m ar.fpsr=%0" :: "r" (fpsr));
+
+ /* Success. */
+ return 0;
}
libm_hidden_def (feholdexcept)
--- libc/sysdeps/ia64/fpu/feupdateenv.c.jj 2001-07-06 06:55:54.000000000 +0200
+++ libc/sysdeps/ia64/fpu/feupdateenv.c 2007-03-22 13:27:28.000000000 +0100
@@ -1,5 +1,5 @@
/* Install given floating-point environment and raise exceptions.
- Copyright (C) 1997, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1997, 2000, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Christian Boissat <Christian.Boissat at cern.ch>, 1999.
@@ -32,10 +32,8 @@ feupdateenv (const fenv_t *envp)
/* Install new environment. */
fesetenv (envp);
- /* Raise the safed exception. Incidently for us the implementation
- defined format of the values in objects of type fexcept_t is the
- same as the ones specified using the FE_* constants. */
- feraiseexcept ((int) fpsr & FE_ALL_EXCEPT);
+ /* Raise the saved exceptions. */
+ feraiseexcept ((int) (fpsr >> 13) & FE_ALL_EXCEPT);
/* Success. */
return 0;
--- libc/sysdeps/i386/fpu/feholdexcpt.c.jj 2005-07-08 20:52:47.000000000 +0200
+++ libc/sysdeps/i386/fpu/feholdexcpt.c 2007-03-22 14:56:35.000000000 +0100
@@ -1,5 +1,6 @@
/* Store current floating-point environment and clear exceptions.
- Copyright (C) 1997, 1999, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1999, 2003, 2004, 2005, 2007
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper at cygnus.com>, 1997.
@@ -26,14 +27,19 @@
int
feholdexcept (fenv_t *envp)
{
- unsigned short int work;
+ fenv_t temp;
/* Store the environment. */
- __asm__ ("fnstenv %0" : "=m" (*envp));
+ __asm__ ("fnstenv %0" : "=m" (temp));
+ *envp = temp;
/* Now set all exceptions to non-stop. */
- work = envp->__control_word | 0x3f;
- __asm__ ("fldcw %0" : : "m" (*&work));
+ temp.__control_word |= 0x3f;
+
+ /* And clear all exceptions. */
+ temp.__status_word &= ~0x3f;
+
+ __asm__ ("fldenv %0" : : "m" (temp));
/* If the CPU supports SSE we set the MXCSR as well. */
if ((GLRO(dl_hwcap) & HWCAP_I386_XMM) != 0)
@@ -43,8 +49,8 @@ feholdexcept (fenv_t *envp)
/* Get the current control word. */
__asm__ ("stmxcsr %0" : "=m" (*&xwork));
- /* Set all exceptions to non-stop. */
- xwork |= 0x1f80;
+ /* Set all exceptions to non-stop and clear them. */
+ xwork = (xwork | 0x1f80) & ~0x3f;
__asm__ ("ldmxcsr %0" : : "m" (*&xwork));
}
--- libc/sysdeps/i386/fpu/feupdateenv.c.jj 2001-07-06 06:55:53.000000000 +0200
+++ libc/sysdeps/i386/fpu/feupdateenv.c 2007-03-22 14:47:22.000000000 +0100
@@ -1,5 +1,5 @@
/* Install given floating-point environment and raise exceptions.
- Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc.
+ Copyright (C) 1997,99,2000,01,07 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper at cygnus.com>, 1997.
@@ -20,20 +20,29 @@
#include <fenv.h>
#include <bp-sym.h>
+#include <unistd.h>
+#include <dl-procinfo.h>
+#include <ldsodefs.h>
int
__feupdateenv (const fenv_t *envp)
{
fexcept_t temp;
+ unsigned int xtemp = 0;
/* Save current exceptions. */
__asm__ ("fnstsw %0" : "=m" (*&temp));
- temp &= FE_ALL_EXCEPT;
+
+ /* If the CPU supports SSE we test the MXCSR as well. */
+ if ((GLRO(dl_hwcap) & HWCAP_I386_XMM) != 0)
+ __asm__ ("stmxcsr %0" : "=m" (*&xtemp));
+
+ temp = (temp | xtemp) & FE_ALL_EXCEPT;
/* Install new environment. */
fesetenv (envp);
- /* Raise the safed exception. Incidently for us the implementation
+ /* Raise the saved exception. Incidently for us the implementation
defined format of the values in objects of type fexcept_t is the
same as the ones specified using the FE_* constants. */
feraiseexcept ((int) temp);
--- libc/sysdeps/x86_64/fpu/feholdexcpt.c.jj 2005-07-08 20:52:45.000000000 +0200
+++ libc/sysdeps/x86_64/fpu/feholdexcpt.c 2007-03-22 11:46:47.000000000 +0100
@@ -1,5 +1,5 @@
/* Store current floating-point environment and clear exceptions.
- Copyright (C) 2001, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2005, 2007 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,19 +22,24 @@
int
feholdexcept (fenv_t *envp)
{
- unsigned short int work;
unsigned int mxcsr;
+ fenv_t temp;
/* Store the environment. */
__asm__ ("fnstenv %0\n"
- "stmxcsr %1" : "=m" (*envp), "=m" (envp->__mxcsr));
+ "stmxcsr %1" : "=m" (temp), "=m" (temp.__mxcsr));
+ *envp = temp;
/* Now set all exceptions to non-stop, first the x87 FPU. */
- work = envp->__control_word | 0x3f;
- __asm__ ("fldcw %0" : : "m" (*&work));
+ temp.__control_word |= 0x3f;
+
+ /* And clear all exceptions. */
+ temp.__status_word &= ~0x3f;
+
+ __asm__ ("fldenv %0" : : "m" (temp));
/* Set the SSE MXCSR register. */
- mxcsr = envp->__mxcsr | 0x1f80;
+ mxcsr = (envp->__mxcsr | 0x1f80) & ~0x3f;
__asm__ ("ldmxcsr %0" : : "m" (*&mxcsr));
return 0;
--- libc/sysdeps/x86_64/fpu/feupdateenv.c.jj 2007-03-22 12:11:41.000000000 +0100
+++ libc/sysdeps/x86_64/fpu/feupdateenv.c 2007-03-22 12:19:23.000000000 +0100
@@ -0,0 +1,51 @@
+/* Install given floating-point environment and raise exceptions.
+ Copyright (C) 1997,99,2000,01,07 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper at cygnus.com>, 1997.
+
+ 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>
+
+int
+__feupdateenv (const fenv_t *envp)
+{
+ fexcept_t temp;
+ unsigned int xtemp;
+
+ /* Save current exceptions. */
+ __asm__ ("fnstsw %0\n\tstmxcsr %1" : "=m" (*&temp), "=m" (xtemp));
+ temp = (temp | xtemp) & FE_ALL_EXCEPT;
+
+ /* Install new environment. */
+ fesetenv (envp);
+
+ /* Raise the saved exception. Incidently for us the implementation
+ defined format of the values in objects of type fexcept_t is the
+ same as the ones specified using the FE_* constants. */
+ feraiseexcept ((int) temp);
+
+ /* Success. */
+ return 0;
+}
+
+#include <shlib-compat.h>
+#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
+strong_alias (__feupdateenv, __old_feupdateenv)
+compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1);
+#endif
+
+versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2);
--- libc/sysdeps/x86_64/fpu/feenablxcpt.c.jj 2001-09-19 12:23:17.000000000 +0200
+++ libc/sysdeps/x86_64/fpu/feenablxcpt.c 2007-03-22 11:24:28.000000000 +0100
@@ -1,5 +1,5 @@
/* Enable floating-point exceptions.
- Copyright (C) 2001 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Andreas Jaeger <aj at suse.de>, 2001.
@@ -24,7 +24,7 @@ int
feenableexcept (int excepts)
{
unsigned short int new_exc, old_exc;
- unsigned int new, old;
+ unsigned int new;
excepts &= FE_ALL_EXCEPT;
@@ -40,8 +40,6 @@ feenableexcept (int excepts)
__asm__ ("stmxcsr %0" : "=m" (*&new));
/* The SSE exception masks are shifted by 7 bits. */
- old = (~new) & (FE_ALL_EXCEPT << 7);
-
new &= ~(excepts << 7);
__asm__ ("ldmxcsr %0" : : "m" (*&new));
--- libc/sysdeps/x86_64/fpu/fedisblxcpt.c.jj 2001-09-19 12:23:17.000000000 +0200
+++ libc/sysdeps/x86_64/fpu/fedisblxcpt.c 2007-03-22 11:26:35.000000000 +0100
@@ -1,5 +1,5 @@
/* Disable floating-point exceptions.
- Copyright (C) 2001 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Andreas Jaeger <aj at suse.de>, 2001.
@@ -24,7 +24,7 @@ int
fedisableexcept (int excepts)
{
unsigned short int new_exc, old_exc;
- unsigned int new, old;
+ unsigned int new;
excepts &= FE_ALL_EXCEPT;
@@ -40,8 +40,6 @@ fedisableexcept (int excepts)
__asm__ ("stmxcsr %0" : "=m" (*&new));
/* The SSE exception masks are shifted by 7 bits. */
- old = (~new) & (FE_ALL_EXCEPT << 7);
-
new |= excepts << 7;
__asm__ ("ldmxcsr %0" : : "m" (*&new));
glibc-fnmatch-speedup.patch:
Makefile | 2 -
fnmatch.c | 10 ++++--
fnmatch_loop.c | 82 +++++++++++++++++++++++++++++++++++++++------------------
tst-fnmatch2.c | 35 ++++++++++++++++++++++++
4 files changed, 99 insertions(+), 30 deletions(-)
--- NEW FILE glibc-fnmatch-speedup.patch ---
2007-03-27 Jakub Jelinek <jakub at redhat.com>
* posix/fnmatch.c (STRUCT): Define.
(fnmatch): Pass NULL as last argument to internal_fn{,w}match.
* posix/fnmatch_loop.c (struct STRUCT): New type.
(FCT): Add ends argument. If ends != NULL and normal * is
seen in the pattern, store current pattern and string pointers
and return. Adjust recursive calls.
(EXT): Adjust FCT callers.
(STRUCT): Undef at the end of the file.
* posix/Makefile (tests): Add tst-fnmatch2.
* posix/tst-fnmatch2.c: New test.
--- libc/posix/fnmatch.c.jj 2005-03-30 06:17:47.000000000 +0200
+++ libc/posix/fnmatch.c 2007-03-27 10:31:25.000000000 +0200
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003
+/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003,2007
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -209,6 +209,7 @@ __wcschrnul (s, c)
# define FCT internal_fnmatch
# define EXT ext_match
# define END end_pattern
+# define STRUCT fnmatch_struct
# define L(CS) CS
# ifdef _LIBC
# define BTOWC(C) __btowc (C)
@@ -235,7 +236,8 @@ __wcschrnul (s, c)
# define INT wint_t
# define FCT internal_fnwmatch
# define EXT ext_wmatch
-# define END end_wpattern
+# define END end_wpattern
+# define STRUCT fnwmatch_struct
# define L(CS) L##CS
# define BTOWC(C) (C)
# define STRLEN(S) __wcslen (S)
@@ -397,12 +399,12 @@ fnmatch (pattern, string, flags)
}
return internal_fnwmatch (wpattern, wstring, wstring + n,
- flags & FNM_PERIOD, flags);
+ flags & FNM_PERIOD, flags, NULL);
}
# endif /* mbstate_t and mbsrtowcs or _LIBC. */
return internal_fnmatch (pattern, string, string + strlen (string),
- flags & FNM_PERIOD, flags);
+ flags & FNM_PERIOD, flags, NULL);
}
# ifdef _LIBC
--- libc/posix/fnmatch_loop.c.jj 2005-10-15 00:44:42.000000000 +0200
+++ libc/posix/fnmatch_loop.c 2007-03-27 11:47:12.000000000 +0200
@@ -1,5 +1,5 @@
-/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2003,2004,2005
- Free Software Foundation, Inc.
+/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2003,2004,2005,
+ 2007 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
@@ -17,10 +17,18 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
+struct STRUCT
+{
+ const CHAR *pattern;
+ const CHAR *string;
+ int no_leading_period;
+};
+
/* Match STRING against the filename pattern PATTERN, returning zero if
it matches, nonzero if not. */
static int FCT (const CHAR *pattern, const CHAR *string,
- const CHAR *string_end, int no_leading_period, int flags)
+ const CHAR *string_end, int no_leading_period, int flags,
+ struct STRUCT *ends)
internal_function;
static int EXT (INT opt, const CHAR *pattern, const CHAR *string,
const CHAR *string_end, int no_leading_period, int flags)
@@ -29,12 +37,13 @@ static const CHAR *END (const CHAR *patt
static int
internal_function
-FCT (pattern, string, string_end, no_leading_period, flags)
+FCT (pattern, string, string_end, no_leading_period, flags, ends)
const CHAR *pattern;
const CHAR *string;
const CHAR *string_end;
int no_leading_period;
int flags;
+ struct STRUCT *ends;
{
register const CHAR *p = pattern, *n = string;
register UCHAR c;
@@ -97,6 +106,13 @@ FCT (pattern, string, string_end, no_lea
if (res != -1)
return res;
}
+ else if (ends != NULL)
+ {
+ ends->pattern = p - 1;
+ ends->string = n;
+ ends->no_leading_period = no_leading_period;
+ return 0;
+ }
if (n != string_end && *n == L('.') && no_leading_period)
return FNM_NOMATCH;
@@ -157,7 +173,9 @@ FCT (pattern, string, string_end, no_lea
else
{
const CHAR *endp;
+ struct STRUCT end;
+ end.pattern = NULL;
endp = MEMCHR (n, (flags & FNM_FILE_NAME) ? L('/') : L('\0'),
string_end - n);
if (endp == NULL)
@@ -170,36 +188,46 @@ FCT (pattern, string, string_end, no_lea
{
int flags2 = ((flags & FNM_FILE_NAME)
? flags : (flags & ~FNM_PERIOD));
- int no_leading_period2 = no_leading_period;
- for (--p; n < endp; ++n, no_leading_period2 = 0)
- if (FCT (p, n, string_end, no_leading_period2, flags2)
- == 0)
- return 0;
+ for (--p; n < endp; ++n, no_leading_period = 0)
+ if (FCT (p, n, string_end, no_leading_period, flags2,
+ &end) == 0)
+ goto found;
}
else if (c == L('/') && (flags & FNM_FILE_NAME))
{
while (n < string_end && *n != L('/'))
++n;
if (n < string_end && *n == L('/')
- && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags)
- == 0))
+ && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags,
+ NULL) == 0))
return 0;
}
else
{
int flags2 = ((flags & FNM_FILE_NAME)
? flags : (flags & ~FNM_PERIOD));
- int no_leading_period2 = no_leading_period;
if (c == L('\\') && !(flags & FNM_NOESCAPE))
c = *p;
c = FOLD (c);
- for (--p; n < endp; ++n, no_leading_period2 = 0)
+ for (--p; n < endp; ++n, no_leading_period = 0)
if (FOLD ((UCHAR) *n) == c
- && (FCT (p, n, string_end, no_leading_period2, flags2)
- == 0))
- return 0;
+ && (FCT (p, n, string_end, no_leading_period, flags2,
+ &end) == 0))
+ {
+ found:
+ if (end.pattern == NULL)
+ return 0;
+ break;
+ }
+ if (end.pattern != NULL)
+ {
+ p = end.pattern;
+ n = end.string;
+ no_leading_period = end.no_leading_period;
+ continue;
+ }
}
}
@@ -1098,7 +1126,7 @@ EXT (INT opt, const CHAR *pattern, const
switch (opt)
{
case L('*'):
- if (FCT (p, string, string_end, no_leading_period, flags) == 0)
+ if (FCT (p, string, string_end, no_leading_period, flags, NULL) == 0)
return 0;
/* FALLTHROUGH */
@@ -1109,7 +1137,8 @@ EXT (INT opt, const CHAR *pattern, const
/* First match the prefix with the current pattern with the
current pattern. */
if (FCT (list->str, string, rs, no_leading_period,
- flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0
+ flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD,
+ NULL) == 0
/* This was successful. Now match the rest with the rest
of the pattern. */
&& (FCT (p, rs, string_end,
@@ -1117,7 +1146,7 @@ EXT (INT opt, const CHAR *pattern, const
? no_leading_period
: rs[-1] == '/' && NO_LEADING_PERIOD (flags) ? 1 : 0,
flags & FNM_FILE_NAME
- ? flags : flags & ~FNM_PERIOD) == 0
+ ? flags : flags & ~FNM_PERIOD, NULL) == 0
/* This didn't work. Try the whole pattern. */
|| (rs != string
&& FCT (pattern - 1, rs, string_end,
@@ -1126,7 +1155,7 @@ EXT (INT opt, const CHAR *pattern, const
: (rs[-1] == '/' && NO_LEADING_PERIOD (flags)
? 1 : 0),
flags & FNM_FILE_NAME
- ? flags : flags & ~FNM_PERIOD) == 0)))
+ ? flags : flags & ~FNM_PERIOD, NULL) == 0)))
/* It worked. Signal success. */
return 0;
}
@@ -1136,7 +1165,7 @@ EXT (INT opt, const CHAR *pattern, const
return FNM_NOMATCH;
case L('?'):
- if (FCT (p, string, string_end, no_leading_period, flags) == 0)
+ if (FCT (p, string, string_end, no_leading_period, flags, NULL) == 0)
return 0;
/* FALLTHROUGH */
@@ -1148,7 +1177,8 @@ EXT (INT opt, const CHAR *pattern, const
pattern list. */
if (FCT (STRCAT (list->str, p), string, string_end,
no_leading_period,
- flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0)
+ flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD,
+ NULL) == 0)
/* It worked. Signal success. */
return 0;
while ((list = list->next) != NULL);
@@ -1163,7 +1193,8 @@ EXT (INT opt, const CHAR *pattern, const
for (runp = list; runp != NULL; runp = runp->next)
if (FCT (runp->str, string, rs, no_leading_period,
- flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0)
+ flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD,
+ NULL) == 0)
break;
/* If none of the patterns matched see whether the rest does. */
@@ -1172,8 +1203,8 @@ EXT (INT opt, const CHAR *pattern, const
rs == string
? no_leading_period
: rs[-1] == '/' && NO_LEADING_PERIOD (flags) ? 1 : 0,
- flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD)
- == 0))
+ flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD,
+ NULL) == 0))
/* This is successful. */
return 0;
}
@@ -1198,6 +1229,7 @@ EXT (INT opt, const CHAR *pattern, const
#undef FCT
#undef EXT
#undef END
+#undef STRUCT
#undef MEMPCPY
#undef MEMCHR
#undef STRCOLL
--- libc/posix/Makefile.jj 2007-02-26 18:13:45.000000000 +0100
+++ libc/posix/Makefile 2007-03-27 11:07:05.000000000 +0200
@@ -90,7 +90,7 @@ tests := tstgetopt testfnm runtests run
tst-execv1 tst-execv2 tst-execl1 tst-execl2 \
tst-execve1 tst-execve2 tst-execle1 tst-execle2 \
tst-execvp3 tst-execvp4 tst-rfc3484 tst-rfc3484-2 \
- tst-getaddrinfo3
+ tst-getaddrinfo3 tst-fnmatch2
xtests := bug-ga2
ifeq (yes,$(build-shared))
test-srcs := globtest
--- libc/posix/tst-fnmatch2.c.jj 2007-03-27 11:06:37.000000000 +0200
+++ libc/posix/tst-fnmatch2.c 2007-03-27 11:55:15.000000000 +0200
@@ -0,0 +1,35 @@
+#include <fnmatch.h>
+#include <stdio.h>
+
+int
+do_test (void)
+{
+ char pattern[] = "a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*";
+ const char *string = "aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmm"
+ "nnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy";
+ if (fnmatch (pattern, string, 0) != FNM_NOMATCH)
+ {
+ puts ("First fnmatch didn't return FNM_NOMATCH");
+ return 1;
+ }
+ pattern[(sizeof pattern) - 3] = '*';
+ if (fnmatch (pattern, string, 0) != 0)
+ {
+ puts ("Second fnmatch didn't return 0");
+ return 1;
+ }
+ if (fnmatch ("a*b/*", "abbb/.x", FNM_PATHNAME | FNM_PERIOD) != FNM_NOMATCH)
+ {
+ puts ("Third fnmatch didn't return FNM_NOMATCH");
+ return 1;
+ }
+ if (fnmatch ("a*b/*", "abbb/xy", FNM_PATHNAME | FNM_PERIOD) != 0)
+ {
+ puts ("Fourth fnmatch didn't return 0");
+ return 1;
+ }
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
glibc-libio-__THROW.patch:
fileops.c | 11 +-
libio.h | 32 ++++----
libioP.h | 235 +++++++++++++++++++++++++----------------------------------
oldfileops.c | 5 -
4 files changed, 125 insertions(+), 158 deletions(-)
--- NEW FILE glibc-libio-__THROW.patch ---
2007-03-30 Jakub Jelinek <jakub at redhat.com>
* libio/libio.h (__underflow, __uflow, __overflow, __wunderflow,
__wuflow, __woverflow, _IO_getc, _IO_putc, _IO_peekc_locked, _IO_padn,
_IO_sgetn, _IO_seekoff, _IO_seekpos, _IO_getwc, _IO_putwc, _IO_wpadn):
Remove __THROW.
* libio/fileops.c (new_do_write, _IO_file_xsgetn_mmap,
_IO_file_xsgetn_maybe_mmap): Likewise.
* libio/oldfileops.c (old_do_write): Likewise.
* libio/libioP.h (_IO_switch_to_get_mode, _IO_switch_to_wget_mode,
_IO_init_marker, _IO_init_wmarker, _IO_default_uflow,
_IO_wdefault_uflow, _IO_default_setbuf, _IO_default_seekpos,
_IO_do_write, _IO_new_do_write, _IO_old_do_write, _IO_wdo_write,
_IO_flush_all_lockp, _IO_flush_all, _IO_cleanup,
_IO_flush_all_linebuffered, _IO_new_fgetpos, _IO_old_fgetpos,
_IO_new_fsetpos, _IO_old_fsetpos, _IO_new_fgetpos64,
_IO_old_fgetpos64, _IO_new_fsetpos64, _IO_old_fsetpos64,
_IO_file_setbuf, _IO_file_seekoff, _IO_file_xsputn, _IO_file_xsgetn,
_IO_file_underflow, _IO_file_underflow_mmap,
_IO_file_underflow_maybe_mmap, _IO_file_overflow, _IO_file_attach,
_IO_file_open, _IO_file_fopen, _IO_file_write, _IO_file_read,
_IO_file_sync, _IO_file_close_it, _IO_file_finish,
_IO_new_file_attach, _IO_new_file_close_it, _IO_new_file_finish,
_IO_new_file_fopen, _IO_new_file_setbuf, _IO_file_setbuf_mmap,
_IO_new_file_sync, _IO_new_file_underflow, _IO_new_file_overflow,
_IO_new_file_seekoff, _IO_new_file_write, _IO_new_file_xsputn,
_IO_old_file_setbuf, _IO_old_file_seekoff, _IO_old_file_xsputn,
_IO_old_file_underflow, _IO_old_file_overflow, _IO_old_file_attach,
_IO_old_file_fopen, _IO_old_file_write, _IO_old_file_sync,
_IO_old_file_close_it, _IO_old_file_finish, _IO_wfile_xsputn,
_IO_wfile_setbuf, _IO_wfile_sync, _IO_wfile_underflow,
_IO_wfile_overflow, _IO_wfile_seekoff, _IO_old_proc_open,
_IO_old_proc_close, _IO_getdelim, _IO_flush_all_internal,
_IO_adjust_column_internal, _IO_default_uflow_internal,
_IO_default_xsgetn_internal, _IO_wdefault_xsputn_internal,
_IO_wdefault_xsgetn_internal, _IO_wdefault_uflow_internal,
_IO_file_setbuf_internal, _IO_file_seekoff_internal,
_IO_file_xsputn_internal, _IO_file_xsgetn_internal,
_IO_file_close_it_internal, _IO_file_underflow_internal,
_IO_file_overflow_internal, _IO_file_attach_internal,
_IO_file_fopen_internal, _IO_file_sync_internal,
_IO_file_finish_internal, _IO_wfile_xsputn_internal,
_IO_wfile_seekoff_internal, _IO_wfile_sync_internal,
_IO_switch_to_wget_mode_internal, _IO_padn_internal,
_IO_switch_to_get_mode_internal, _IO_seekoff_unlocked,
_IO_seekpos_unlocked): Likewise.
(_IO_strtod, _IO_dtoa, _IO_outfloat, _IO_read, _IO_write,
_IO_lseek, _IO_close, _IO_fstat): Remove unused prototypes.
--- libc/libio/libio.h.jj 2007-01-03 10:59:40.000000000 +0100
+++ libc/libio/libio.h 2007-03-29 18:50:38.000000000 +0200
@@ -410,12 +410,12 @@ extern void _IO_cookie_init (struct _IO_
extern "C" {
#endif
-extern int __underflow (_IO_FILE *) __THROW;
-extern int __uflow (_IO_FILE *) __THROW;
-extern int __overflow (_IO_FILE *, int) __THROW;
-extern _IO_wint_t __wunderflow (_IO_FILE *) __THROW;
-extern _IO_wint_t __wuflow (_IO_FILE *) __THROW;
-extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t) __THROW;
+extern int __underflow (_IO_FILE *);
+extern int __uflow (_IO_FILE *);
+extern int __overflow (_IO_FILE *, int);
+extern _IO_wint_t __wunderflow (_IO_FILE *);
+extern _IO_wint_t __wuflow (_IO_FILE *);
+extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t);
#if __GNUC__ >= 3
# define _IO_BE(expr, res) __builtin_expect ((expr), res)
@@ -448,12 +448,12 @@ extern _IO_wint_t __woverflow (_IO_FILE
#define _IO_feof_unlocked(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
#define _IO_ferror_unlocked(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
-extern int _IO_getc (_IO_FILE *__fp) __THROW;
-extern int _IO_putc (int __c, _IO_FILE *__fp) __THROW;
+extern int _IO_getc (_IO_FILE *__fp);
+extern int _IO_putc (int __c, _IO_FILE *__fp);
extern int _IO_feof (_IO_FILE *__fp) __THROW;
extern int _IO_ferror (_IO_FILE *__fp) __THROW;
-extern int _IO_peekc_locked (_IO_FILE *__fp) __THROW;
+extern int _IO_peekc_locked (_IO_FILE *__fp);
/* This one is for Emacs. */
#define _IO_PENDING_OUTPUT_COUNT(_fp) \
@@ -482,17 +482,17 @@ extern int _IO_vfscanf (_IO_FILE * __res
_IO_va_list, int *__restrict);
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
_IO_va_list);
-extern _IO_ssize_t _IO_padn (_IO_FILE *, int, _IO_ssize_t) __THROW;
-extern _IO_size_t _IO_sgetn (_IO_FILE *, void *, _IO_size_t) __THROW;
+extern _IO_ssize_t _IO_padn (_IO_FILE *, int, _IO_ssize_t);
+extern _IO_size_t _IO_sgetn (_IO_FILE *, void *, _IO_size_t);
-extern _IO_off64_t _IO_seekoff (_IO_FILE *, _IO_off64_t, int, int) __THROW;
-extern _IO_off64_t _IO_seekpos (_IO_FILE *, _IO_off64_t, int) __THROW;
+extern _IO_off64_t _IO_seekoff (_IO_FILE *, _IO_off64_t, int, int);
+extern _IO_off64_t _IO_seekpos (_IO_FILE *, _IO_off64_t, int);
extern void _IO_free_backup_area (_IO_FILE *) __THROW;
#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-extern _IO_wint_t _IO_getwc (_IO_FILE *__fp) __THROW;
-extern _IO_wint_t _IO_putwc (wchar_t __wc, _IO_FILE *__fp) __THROW;
+extern _IO_wint_t _IO_getwc (_IO_FILE *__fp);
+extern _IO_wint_t _IO_putwc (wchar_t __wc, _IO_FILE *__fp);
extern int _IO_fwide (_IO_FILE *__fp, int __mode) __THROW;
# if __GNUC__ >= 2
/* While compiling glibc we have to handle compatibility with very old
@@ -531,7 +531,7 @@ extern int _IO_vfwscanf (_IO_FILE * __re
_IO_va_list, int *__restrict);
extern int _IO_vfwprintf (_IO_FILE *__restrict, const wchar_t *__restrict,
_IO_va_list);
-extern _IO_ssize_t _IO_wpadn (_IO_FILE *, wint_t, _IO_ssize_t) __THROW;
+extern _IO_ssize_t _IO_wpadn (_IO_FILE *, wint_t, _IO_ssize_t);
extern void _IO_free_wbackup_area (_IO_FILE *) __THROW;
#endif
--- libc/libio/fileops.c.jj 2007-01-17 11:18:43.000000000 +0100
+++ libc/libio/fileops.c 2007-03-29 18:55:52.000000000 +0200
@@ -1,4 +1,5 @@
-/* Copyright (C) 1993, 1995, 1997-2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1995, 1997-2005, 2006, 2007
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Per Bothner <bothner at cygnus.com>.
@@ -472,7 +473,7 @@ _IO_file_setbuf_mmap (fp, p, len)
return result;
}
-static _IO_size_t new_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
+static _IO_size_t new_do_write (_IO_FILE *, const char *, _IO_size_t);
/* Write TO_DO bytes from DATA to FP.
Then mark FP as having empty buffers. */
@@ -1468,8 +1469,7 @@ _IO_file_xsgetn (fp, data, n)
}
INTDEF(_IO_file_xsgetn)
-static _IO_size_t _IO_file_xsgetn_mmap (_IO_FILE *, void *, _IO_size_t)
- __THROW;
+static _IO_size_t _IO_file_xsgetn_mmap (_IO_FILE *, void *, _IO_size_t);
static _IO_size_t
_IO_file_xsgetn_mmap (fp, data, n)
_IO_FILE *fp;
@@ -1528,8 +1528,7 @@ _IO_file_xsgetn_mmap (fp, data, n)
return s - (char *) data;
}
-static _IO_size_t _IO_file_xsgetn_maybe_mmap (_IO_FILE *, void *, _IO_size_t)
- __THROW;
+static _IO_size_t _IO_file_xsgetn_maybe_mmap (_IO_FILE *, void *, _IO_size_t);
static _IO_size_t
_IO_file_xsgetn_maybe_mmap (fp, data, n)
_IO_FILE *fp;
--- libc/libio/oldfileops.c.jj 2005-10-17 17:54:13.000000000 +0200
+++ libc/libio/oldfileops.c 2007-03-29 18:54:48.000000000 +0200
@@ -1,4 +1,5 @@
-/* Copyright (C) 1993, 1995, 1997-2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1995, 1997-2004, 2005, 2007
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Per Bothner <bothner at cygnus.com>.
@@ -271,7 +272,7 @@ _IO_old_file_setbuf (fp, p, len)
return fp;
}
-static int old_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
+static int old_do_write (_IO_FILE *, const char *, _IO_size_t);
/* Write TO_DO bytes from DATA to FP.
Then mark FP as having empty buffers. */
--- libc/libio/libioP.h.jj 2006-01-14 13:09:46.000000000 +0100
+++ libc/libio/libioP.h 2007-03-29 18:38:10.000000000 +0200
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997-2003,2004,2005,2006
+/* Copyright (C) 1993, 1997-2003,2004,2005,2006,2007
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -380,7 +380,7 @@ typedef struct _IO_FILE *_IO_ITER;
extern void _IO_switch_to_main_get_area (_IO_FILE *) __THROW;
extern void _IO_switch_to_backup_area (_IO_FILE *) __THROW;
-extern int _IO_switch_to_get_mode (_IO_FILE *) __THROW;
+extern int _IO_switch_to_get_mode (_IO_FILE *);
extern void _IO_init (_IO_FILE *, int) __THROW;
extern int _IO_sputbackc (_IO_FILE *, int) __THROW;
extern int _IO_sungetc (_IO_FILE *) __THROW;
@@ -394,7 +394,7 @@ extern unsigned _IO_adjust_column (unsig
extern void _IO_switch_to_main_wget_area (_IO_FILE *) __THROW;
extern void _IO_switch_to_wbackup_area (_IO_FILE *) __THROW;
-extern int _IO_switch_to_wget_mode (_IO_FILE *) __THROW;
+extern int _IO_switch_to_wget_mode (_IO_FILE *);
extern void _IO_wsetb (_IO_FILE *, wchar_t *, wchar_t *, int) __THROW;
extern wint_t _IO_sputbackwc (_IO_FILE *, wint_t) __THROW;
extern wint_t _IO_sungetwc (_IO_FILE *) __THROW;
@@ -404,8 +404,8 @@ extern unsigned _IO_adjust_wcolumn (unsi
/* Marker-related function. */
-extern void _IO_init_marker (struct _IO_marker *, _IO_FILE *) __THROW;
-extern void _IO_init_wmarker (struct _IO_marker *, _IO_FILE *) __THROW;
+extern void _IO_init_marker (struct _IO_marker *, _IO_FILE *);
+extern void _IO_init_wmarker (struct _IO_marker *, _IO_FILE *);
extern void _IO_remove_marker (struct _IO_marker *) __THROW;
extern int _IO_marker_difference (struct _IO_marker *, struct _IO_marker *)
__THROW;
@@ -434,22 +434,22 @@ libc_hidden_proto (_IO_list_resetlock)
/* Default jumptable functions. */
extern int _IO_default_underflow (_IO_FILE *) __THROW;
-extern int _IO_default_uflow (_IO_FILE *) __THROW;
-extern wint_t _IO_wdefault_uflow (_IO_FILE *) __THROW;
+extern int _IO_default_uflow (_IO_FILE *);
+extern wint_t _IO_wdefault_uflow (_IO_FILE *);
extern int _IO_default_doallocate (_IO_FILE *) __THROW;
extern int _IO_wdefault_doallocate (_IO_FILE *) __THROW;
extern void _IO_default_finish (_IO_FILE *, int) __THROW;
extern void _IO_wdefault_finish (_IO_FILE *, int) __THROW;
extern int _IO_default_pbackfail (_IO_FILE *, int) __THROW;
extern wint_t _IO_wdefault_pbackfail (_IO_FILE *, wint_t) __THROW;
-extern _IO_FILE* _IO_default_setbuf (_IO_FILE *, char *, _IO_ssize_t) __THROW;
+extern _IO_FILE* _IO_default_setbuf (_IO_FILE *, char *, _IO_ssize_t);
extern _IO_size_t _IO_default_xsputn (_IO_FILE *, const void *, _IO_size_t);
extern _IO_size_t _IO_wdefault_xsputn (_IO_FILE *, const void *, _IO_size_t);
extern _IO_size_t _IO_default_xsgetn (_IO_FILE *, void *, _IO_size_t);
extern _IO_size_t _IO_wdefault_xsgetn (_IO_FILE *, void *, _IO_size_t);
extern _IO_off64_t _IO_default_seekoff (_IO_FILE *, _IO_off64_t, int, int)
__THROW;
-extern _IO_off64_t _IO_default_seekpos (_IO_FILE *, _IO_off64_t, int) __THROW;
+extern _IO_off64_t _IO_default_seekpos (_IO_FILE *, _IO_off64_t, int);
extern _IO_ssize_t _IO_default_write (_IO_FILE *, const void *, _IO_ssize_t);
extern _IO_ssize_t _IO_default_read (_IO_FILE *, void *, _IO_ssize_t);
extern int _IO_default_stat (_IO_FILE *, void *) __THROW;
@@ -473,22 +473,22 @@ extern const struct _IO_jump_t _IO_old_p
extern const struct _IO_jump_t _IO_str_jumps attribute_hidden;
extern const struct _IO_jump_t _IO_wstr_jumps attribute_hidden;
extern const struct _IO_codecvt __libio_codecvt attribute_hidden;
-extern int _IO_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
-extern int _IO_new_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
-extern int _IO_old_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
-extern int _IO_wdo_write (_IO_FILE *, const wchar_t *, _IO_size_t) __THROW;
-extern int _IO_flush_all_lockp (int) __THROW;
-extern int _IO_flush_all (void) __THROW;
-extern int _IO_cleanup (void) __THROW;
-extern void _IO_flush_all_linebuffered (void) __THROW;
-extern int _IO_new_fgetpos (_IO_FILE *, _IO_fpos_t *) __THROW;
-extern int _IO_old_fgetpos (_IO_FILE *, _IO_fpos_t *) __THROW;
-extern int _IO_new_fsetpos (_IO_FILE *, const _IO_fpos_t *) __THROW;
-extern int _IO_old_fsetpos (_IO_FILE *, const _IO_fpos_t *) __THROW;
-extern int _IO_new_fgetpos64 (_IO_FILE *, _IO_fpos64_t *) __THROW;
-extern int _IO_old_fgetpos64 (_IO_FILE *, _IO_fpos64_t *) __THROW;
-extern int _IO_new_fsetpos64 (_IO_FILE *, const _IO_fpos64_t *) __THROW;
-extern int _IO_old_fsetpos64 (_IO_FILE *, const _IO_fpos64_t *) __THROW;
+extern int _IO_do_write (_IO_FILE *, const char *, _IO_size_t);
+extern int _IO_new_do_write (_IO_FILE *, const char *, _IO_size_t);
+extern int _IO_old_do_write (_IO_FILE *, const char *, _IO_size_t);
+extern int _IO_wdo_write (_IO_FILE *, const wchar_t *, _IO_size_t);
+extern int _IO_flush_all_lockp (int);
+extern int _IO_flush_all (void);
+extern int _IO_cleanup (void);
+extern void _IO_flush_all_linebuffered (void);
+extern int _IO_new_fgetpos (_IO_FILE *, _IO_fpos_t *);
+extern int _IO_old_fgetpos (_IO_FILE *, _IO_fpos_t *);
+extern int _IO_new_fsetpos (_IO_FILE *, const _IO_fpos_t *);
+extern int _IO_old_fsetpos (_IO_FILE *, const _IO_fpos_t *);
+extern int _IO_new_fgetpos64 (_IO_FILE *, _IO_fpos64_t *);
+extern int _IO_old_fgetpos64 (_IO_FILE *, _IO_fpos64_t *);
+extern int _IO_new_fsetpos64 (_IO_FILE *, const _IO_fpos64_t *);
+extern int _IO_old_fsetpos64 (_IO_FILE *, const _IO_fpos64_t *);
extern void _IO_old_init (_IO_FILE *fp, int flags) __THROW;
@@ -534,95 +534,79 @@ extern void _IO_old_init (_IO_FILE *fp,
/* Jumptable functions for files. */
extern int _IO_file_doallocate (_IO_FILE *) __THROW;
-extern _IO_FILE* _IO_file_setbuf (_IO_FILE *, char *, _IO_ssize_t) __THROW;
-extern _IO_off64_t _IO_file_seekoff (_IO_FILE *, _IO_off64_t, int, int)
- __THROW;
+extern _IO_FILE* _IO_file_setbuf (_IO_FILE *, char *, _IO_ssize_t);
+extern _IO_off64_t _IO_file_seekoff (_IO_FILE *, _IO_off64_t, int, int);
extern _IO_off64_t _IO_file_seekoff_mmap (_IO_FILE *, _IO_off64_t, int, int)
__THROW;
-extern _IO_size_t _IO_file_xsputn (_IO_FILE *, const void *, _IO_size_t)
- __THROW;
-extern _IO_size_t _IO_file_xsgetn (_IO_FILE *, void *, _IO_size_t) __THROW;
+extern _IO_size_t _IO_file_xsputn (_IO_FILE *, const void *, _IO_size_t);
+extern _IO_size_t _IO_file_xsgetn (_IO_FILE *, void *, _IO_size_t);
extern int _IO_file_stat (_IO_FILE *, void *) __THROW;
extern int _IO_file_close (_IO_FILE *) __THROW;
extern int _IO_file_close_mmap (_IO_FILE *) __THROW;
-extern int _IO_file_underflow (_IO_FILE *) __THROW;
-extern int _IO_file_underflow_mmap (_IO_FILE *) __THROW;
-extern int _IO_file_underflow_maybe_mmap (_IO_FILE *) __THROW;
-extern int _IO_file_overflow (_IO_FILE *, int) __THROW;
+extern int _IO_file_underflow (_IO_FILE *);
+extern int _IO_file_underflow_mmap (_IO_FILE *);
+extern int _IO_file_underflow_maybe_mmap (_IO_FILE *);
+extern int _IO_file_overflow (_IO_FILE *, int);
#define _IO_file_is_open(__fp) ((__fp)->_fileno != -1)
extern void _IO_file_init (struct _IO_FILE_plus *) __THROW;
-extern _IO_FILE* _IO_file_attach (_IO_FILE *, int) __THROW;
-extern _IO_FILE* _IO_file_open (_IO_FILE *, const char *, int, int, int, int)
- __THROW;
+extern _IO_FILE* _IO_file_attach (_IO_FILE *, int);
+extern _IO_FILE* _IO_file_open (_IO_FILE *, const char *, int, int, int, int);
libc_hidden_proto (_IO_file_open)
-extern _IO_FILE* _IO_file_fopen (_IO_FILE *, const char *, const char *, int)
- __THROW;
-extern _IO_ssize_t _IO_file_write (_IO_FILE *, const void *, _IO_ssize_t)
- __THROW;
-extern _IO_ssize_t _IO_file_read (_IO_FILE *, void *, _IO_ssize_t) __THROW;
-extern int _IO_file_sync (_IO_FILE *) __THROW;
-extern int _IO_file_close_it (_IO_FILE *) __THROW;
+extern _IO_FILE* _IO_file_fopen (_IO_FILE *, const char *, const char *, int);
+extern _IO_ssize_t _IO_file_write (_IO_FILE *, const void *, _IO_ssize_t);
+extern _IO_ssize_t _IO_file_read (_IO_FILE *, void *, _IO_ssize_t);
+extern int _IO_file_sync (_IO_FILE *);
+extern int _IO_file_close_it (_IO_FILE *);
extern _IO_off64_t _IO_file_seek (_IO_FILE *, _IO_off64_t, int) __THROW;
-extern void _IO_file_finish (_IO_FILE *, int) __THROW;
+extern void _IO_file_finish (_IO_FILE *, int);
-extern _IO_FILE* _IO_new_file_attach (_IO_FILE *, int) __THROW;
-extern int _IO_new_file_close_it (_IO_FILE *) __THROW;
-extern void _IO_new_file_finish (_IO_FILE *, int) __THROW;
+extern _IO_FILE* _IO_new_file_attach (_IO_FILE *, int);
+extern int _IO_new_file_close_it (_IO_FILE *);
+extern void _IO_new_file_finish (_IO_FILE *, int);
extern _IO_FILE* _IO_new_file_fopen (_IO_FILE *, const char *, const char *,
- int) __THROW;
+ int);
extern void _IO_no_init (_IO_FILE *, int, int, struct _IO_wide_data *,
const struct _IO_jump_t *) __THROW;
extern void _IO_new_file_init (struct _IO_FILE_plus *) __THROW;
-extern _IO_FILE* _IO_new_file_setbuf (_IO_FILE *, char *, _IO_ssize_t) __THROW;
-extern _IO_FILE* _IO_file_setbuf_mmap (_IO_FILE *, char *, _IO_ssize_t)
- __THROW;
-extern int _IO_new_file_sync (_IO_FILE *) __THROW;
-extern int _IO_new_file_underflow (_IO_FILE *) __THROW;
-extern int _IO_new_file_overflow (_IO_FILE *, int) __THROW;
-extern _IO_off64_t _IO_new_file_seekoff (_IO_FILE *, _IO_off64_t, int, int)
- __THROW;
-extern _IO_ssize_t _IO_new_file_write (_IO_FILE *, const void *, _IO_ssize_t)
- __THROW;
-extern _IO_size_t _IO_new_file_xsputn (_IO_FILE *, const void *, _IO_size_t)
- __THROW;
-
-extern _IO_FILE* _IO_old_file_setbuf (_IO_FILE *, char *, _IO_ssize_t) __THROW;
-extern _IO_off64_t _IO_old_file_seekoff (_IO_FILE *, _IO_off64_t, int, int)
- __THROW;
-extern _IO_size_t _IO_old_file_xsputn (_IO_FILE *, const void *, _IO_size_t)
- __THROW;
-extern int _IO_old_file_underflow (_IO_FILE *) __THROW;
-extern int _IO_old_file_overflow (_IO_FILE *, int) __THROW;
+extern _IO_FILE* _IO_new_file_setbuf (_IO_FILE *, char *, _IO_ssize_t);
+extern _IO_FILE* _IO_file_setbuf_mmap (_IO_FILE *, char *, _IO_ssize_t);
+extern int _IO_new_file_sync (_IO_FILE *);
+extern int _IO_new_file_underflow (_IO_FILE *);
+extern int _IO_new_file_overflow (_IO_FILE *, int);
+extern _IO_off64_t _IO_new_file_seekoff (_IO_FILE *, _IO_off64_t, int, int);
+extern _IO_ssize_t _IO_new_file_write (_IO_FILE *, const void *, _IO_ssize_t);
+extern _IO_size_t _IO_new_file_xsputn (_IO_FILE *, const void *, _IO_size_t);
+
+extern _IO_FILE* _IO_old_file_setbuf (_IO_FILE *, char *, _IO_ssize_t);
+extern _IO_off64_t _IO_old_file_seekoff (_IO_FILE *, _IO_off64_t, int, int);
+extern _IO_size_t _IO_old_file_xsputn (_IO_FILE *, const void *, _IO_size_t);
+extern int _IO_old_file_underflow (_IO_FILE *);
+extern int _IO_old_file_overflow (_IO_FILE *, int);
extern void _IO_old_file_init (struct _IO_FILE_plus *) __THROW;
-extern _IO_FILE* _IO_old_file_attach (_IO_FILE *, int) __THROW;
-extern _IO_FILE* _IO_old_file_fopen (_IO_FILE *, const char *, const char *)
- __THROW;
-extern _IO_ssize_t _IO_old_file_write (_IO_FILE *, const void *, _IO_ssize_t)
- __THROW;
-extern int _IO_old_file_sync (_IO_FILE *) __THROW;
-extern int _IO_old_file_close_it (_IO_FILE *) __THROW;
-extern void _IO_old_file_finish (_IO_FILE *, int) __THROW;
+extern _IO_FILE* _IO_old_file_attach (_IO_FILE *, int);
+extern _IO_FILE* _IO_old_file_fopen (_IO_FILE *, const char *, const char *);
+extern _IO_ssize_t _IO_old_file_write (_IO_FILE *, const void *, _IO_ssize_t);
+extern int _IO_old_file_sync (_IO_FILE *);
+extern int _IO_old_file_close_it (_IO_FILE *);
+extern void _IO_old_file_finish (_IO_FILE *, int);
extern int _IO_wfile_doallocate (_IO_FILE *) __THROW;
-extern _IO_size_t _IO_wfile_xsputn (_IO_FILE *, const void *, _IO_size_t)
- __THROW;
-extern _IO_FILE* _IO_wfile_setbuf (_IO_FILE *, wchar_t *, _IO_ssize_t) __THROW;
-extern wint_t _IO_wfile_sync (_IO_FILE *) __THROW;
-extern wint_t _IO_wfile_underflow (_IO_FILE *) __THROW;
-extern wint_t _IO_wfile_overflow (_IO_FILE *, wint_t) __THROW;
-extern _IO_off64_t _IO_wfile_seekoff (_IO_FILE *, _IO_off64_t, int, int)
- __THROW;
+extern _IO_size_t _IO_wfile_xsputn (_IO_FILE *, const void *, _IO_size_t);
+extern _IO_FILE* _IO_wfile_setbuf (_IO_FILE *, wchar_t *, _IO_ssize_t);
+extern wint_t _IO_wfile_sync (_IO_FILE *);
+extern wint_t _IO_wfile_underflow (_IO_FILE *);
+extern wint_t _IO_wfile_overflow (_IO_FILE *, wint_t);
+extern _IO_off64_t _IO_wfile_seekoff (_IO_FILE *, _IO_off64_t, int, int);
/* Jumptable functions for proc_files. */
extern _IO_FILE* _IO_proc_open (_IO_FILE *, const char *, const char *)
__THROW;
extern _IO_FILE* _IO_new_proc_open (_IO_FILE *, const char *, const char *)
__THROW;
-extern _IO_FILE* _IO_old_proc_open (_IO_FILE *, const char *, const char *)
- __THROW;
+extern _IO_FILE* _IO_old_proc_open (_IO_FILE *, const char *, const char *);
extern int _IO_proc_close (_IO_FILE *) __THROW;
extern int _IO_new_proc_close (_IO_FILE *) __THROW;
-extern int _IO_old_proc_close (_IO_FILE *) __THROW;
+extern int _IO_old_proc_close (_IO_FILE *);
/* Jumptable functions for strfiles. */
extern int _IO_str_underflow (_IO_FILE *) __THROW;
@@ -660,73 +644,62 @@ extern int _IO_vsnprintf (char *string,
extern _IO_size_t _IO_getline (_IO_FILE *,char *, _IO_size_t, int, int);
extern _IO_size_t _IO_getline_info (_IO_FILE *,char *, _IO_size_t,
int, int, int *);
-extern _IO_ssize_t _IO_getdelim (char **, _IO_size_t *, int, _IO_FILE *)
- __THROW;
+extern _IO_ssize_t _IO_getdelim (char **, _IO_size_t *, int, _IO_FILE *);
extern _IO_size_t _IO_getwline (_IO_FILE *,wchar_t *, _IO_size_t, wint_t, int);
extern _IO_size_t _IO_getwline_info (_IO_FILE *,wchar_t *, _IO_size_t,
wint_t, int, wint_t *);
-extern double _IO_strtod (const char *, char **) __THROW;
-extern char *_IO_dtoa (double __d, int __mode, int __ndigits,
- int *__decpt, int *__sign, char **__rve) __THROW;
-extern int _IO_outfloat (double __value, _IO_FILE *__sb, int __type,
- int __width, int __precision, int __flags,
- int __sign_mode, int __fill) __THROW;
extern struct _IO_FILE_plus *_IO_list_all;
extern void (*_IO_cleanup_registration_needed) (void);
/* Prototype for functions with alternative entry point. */
-extern int _IO_flush_all_internal (void) __THROW;
-extern unsigned _IO_adjust_column_internal (unsigned, const char *, int)
- __THROW;
+extern int _IO_flush_all_internal (void);
+extern unsigned _IO_adjust_column_internal (unsigned, const char *, int);
-extern int _IO_default_uflow_internal (_IO_FILE *) __THROW;
+extern int _IO_default_uflow_internal (_IO_FILE *);
extern void _IO_default_finish_internal (_IO_FILE *, int) __THROW;
extern int _IO_default_pbackfail_internal (_IO_FILE *, int) __THROW;
extern _IO_size_t _IO_default_xsputn_internal (_IO_FILE *, const void *,
- _IO_size_t) __THROW;
-extern _IO_size_t _IO_default_xsgetn_internal (_IO_FILE *, void *, _IO_size_t)
- __THROW;
+ _IO_size_t);
+extern _IO_size_t _IO_default_xsgetn_internal (_IO_FILE *, void *, _IO_size_t);
extern int _IO_default_doallocate_internal (_IO_FILE *) __THROW;
extern void _IO_wdefault_finish_internal (_IO_FILE *, int) __THROW;
extern wint_t _IO_wdefault_pbackfail_internal (_IO_FILE *, wint_t) __THROW;
extern _IO_size_t _IO_wdefault_xsputn_internal (_IO_FILE *, const void *,
- _IO_size_t) __THROW;
+ _IO_size_t);
extern _IO_size_t _IO_wdefault_xsgetn_internal (_IO_FILE *, void *,
- _IO_size_t) __THROW;
+ _IO_size_t);
extern int _IO_wdefault_doallocate_internal (_IO_FILE *) __THROW;
-extern wint_t _IO_wdefault_uflow_internal (_IO_FILE *) __THROW;
+extern wint_t _IO_wdefault_uflow_internal (_IO_FILE *);
extern int _IO_file_doallocate_internal (_IO_FILE *) __THROW;
-extern _IO_FILE* _IO_file_setbuf_internal (_IO_FILE *, char *, _IO_ssize_t)
- __THROW;
+extern _IO_FILE* _IO_file_setbuf_internal (_IO_FILE *, char *, _IO_ssize_t);
extern _IO_off64_t _IO_file_seekoff_internal (_IO_FILE *, _IO_off64_t,
- int, int) __THROW;
+ int, int);
extern _IO_size_t _IO_file_xsputn_internal (_IO_FILE *, const void *,
- _IO_size_t) __THROW;
-extern _IO_size_t _IO_file_xsgetn_internal (_IO_FILE *, void *, _IO_size_t)
- __THROW;
+ _IO_size_t);
+extern _IO_size_t _IO_file_xsgetn_internal (_IO_FILE *, void *, _IO_size_t);
extern int _IO_file_stat_internal (_IO_FILE *, void *) __THROW;
extern int _IO_file_close_internal (_IO_FILE *) __THROW;
-extern int _IO_file_close_it_internal (_IO_FILE *) __THROW;
-extern int _IO_file_underflow_internal (_IO_FILE *) __THROW;
-extern int _IO_file_overflow_internal (_IO_FILE *, int) __THROW;
+extern int _IO_file_close_it_internal (_IO_FILE *);
+extern int _IO_file_underflow_internal (_IO_FILE *);
+extern int _IO_file_overflow_internal (_IO_FILE *, int);
extern void _IO_file_init_internal (struct _IO_FILE_plus *) __THROW;
-extern _IO_FILE* _IO_file_attach_internal (_IO_FILE *, int) __THROW;
+extern _IO_FILE* _IO_file_attach_internal (_IO_FILE *, int);
extern _IO_FILE* _IO_file_fopen_internal (_IO_FILE *, const char *,
- const char *, int) __THROW;
+ const char *, int);
extern _IO_ssize_t _IO_file_read_internal (_IO_FILE *, void *,
_IO_ssize_t);
-extern int _IO_file_sync_internal (_IO_FILE *) __THROW;
+extern int _IO_file_sync_internal (_IO_FILE *);
extern _IO_off64_t _IO_file_seek_internal (_IO_FILE *, _IO_off64_t, int)
__THROW;
-extern void _IO_file_finish_internal (_IO_FILE *, int) __THROW;
+extern void _IO_file_finish_internal (_IO_FILE *, int);
extern _IO_size_t _IO_wfile_xsputn_internal (_IO_FILE *, const void *,
- _IO_size_t) __THROW;
+ _IO_size_t);
extern _IO_off64_t _IO_wfile_seekoff_internal (_IO_FILE *, _IO_off64_t,
- int, int) __THROW;
-extern wint_t _IO_wfile_sync_internal (_IO_FILE *) __THROW;
+ int, int);
+extern wint_t _IO_wfile_sync_internal (_IO_FILE *);
extern int _IO_str_underflow_internal (_IO_FILE *) __THROW;
extern int _IO_str_overflow_internal (_IO_FILE *, int) __THROW;
@@ -747,12 +720,12 @@ extern void _IO_wdoallocbuf_internal (_I
extern _IO_size_t _IO_sgetn_internal (_IO_FILE *, void *, _IO_size_t);
extern void _IO_flush_all_linebuffered_internal (void) __THROW;
-extern int _IO_switch_to_wget_mode_internal (_IO_FILE *) __THROW;
+extern int _IO_switch_to_wget_mode_internal (_IO_FILE *);
extern void _IO_unsave_markers_internal (_IO_FILE *) __THROW;
extern void _IO_switch_to_main_wget_area_internal (_IO_FILE *) __THROW;
extern int _IO_wdo_write_internal (_IO_FILE *, const wchar_t *, _IO_size_t);
extern int _IO_do_write_internal (_IO_FILE *, const char *, _IO_size_t);
-extern _IO_ssize_t _IO_padn_internal (_IO_FILE *, int, _IO_ssize_t) __THROW;
+extern _IO_ssize_t _IO_padn_internal (_IO_FILE *, int, _IO_ssize_t);
extern _IO_size_t _IO_getline_info_internal (_IO_FILE *,char *, _IO_size_t,
int, int, int *);
extern _IO_size_t _IO_getline_internal (_IO_FILE *, char *, _IO_size_t, int,
@@ -762,7 +735,7 @@ extern void _IO_free_backup_area_interna
extern void _IO_switch_to_wbackup_area_internal (_IO_FILE *) __THROW;
extern void _IO_setb_internal (_IO_FILE *, char *, char *, int) __THROW;
extern wint_t _IO_sputbackwc_internal (_IO_FILE *, wint_t) __THROW;
-extern int _IO_switch_to_get_mode_internal (_IO_FILE *) __THROW;
+extern int _IO_switch_to_get_mode_internal (_IO_FILE *);
extern int _IO_vfscanf_internal (_IO_FILE * __restrict,
const char * __restrict,
_IO_va_list, int *__restrict);
@@ -772,9 +745,9 @@ extern void _IO_doallocbuf_internal (_IO
extern void _IO_wsetb_internal (_IO_FILE *, wchar_t *, wchar_t *, int)
__THROW;
extern _IO_off64_t _IO_seekoff_unlocked (_IO_FILE *, _IO_off64_t, int, int)
- attribute_hidden __THROW;
+ attribute_hidden;
extern _IO_off64_t _IO_seekpos_unlocked (_IO_FILE *, _IO_off64_t, int)
- attribute_hidden __THROW;
+ attribute_hidden;
extern int _IO_putc_internal (int __c, _IO_FILE *__fp);
extern void _IO_init_internal (_IO_FILE *, int) __THROW;
extern void _IO_un_link_internal (struct _IO_FILE_plus *) __THROW;
@@ -866,12 +839,6 @@ extern void _IO_un_link_internal (struct
#ifndef OS_FSTAT
# define OS_FSTAT fstat
#endif
-struct stat;
-extern _IO_ssize_t _IO_read (int, void *, _IO_size_t);
-extern _IO_ssize_t _IO_write (int, const void *, _IO_size_t);
-extern _IO_off64_t _IO_lseek (int, _IO_off64_t, int) __THROW;
-extern int _IO_close (int);
-extern int _IO_fstat (int, struct stat *) __THROW;
extern int _IO_vscanf (const char *, _IO_va_list) __THROW;
/* _IO_pos_BAD is an _IO_off64_t value indicating error, unknown, or EOF. */
Index: glibc.spec
===================================================================
RCS file: /cvs/dist/rpms/glibc/devel/glibc.spec,v
retrieving revision 1.299
retrieving revision 1.300
diff -u -r1.299 -r1.300
--- glibc.spec 31 Mar 2007 17:37:20 -0000 1.299
+++ glibc.spec 31 Mar 2007 17:47:41 -0000 1.300
@@ -36,6 +36,10 @@
Source3: %{glibcname}-fedora-%{glibcdate}.tar.bz2
Patch0: %{glibcname}-fedora.patch
Patch1: %{name}-ia64-lib64.patch
+Patch2: glibc-bz3427.patch
+Patch3: glibc-fnmatch-speedup.patch
+Patch4: glibc-bz3306.patch
+Patch5: glibc-libio-__THROW.patch
Buildroot: %{_tmppath}/glibc-%{PACKAGE_VERSION}-root
Obsoletes: zoneinfo, libc-static, libc-devel, libc-profile, libc-headers,
Obsoletes: gencat, locale, ldconfig, locale-ja, glibc-profile
@@ -247,6 +251,10 @@
%patch1 -p1
%endif
%endif
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
# Hack till glibc-kernheaders get updated, argh
mkdir -p override_headers/linux
@@ -1558,6 +1566,9 @@
- assorted NIS+ speedups (#223467)
- fix HAVE_LIBCAP configure detection (#178934)
- remove %{_prefix}/sbin/rpcinfo from glibc-common (#228894)
+- nexttoward*/nextafter* fixes (BZ#3306)
+- feholdexcept/feupdateenv fixes (BZ#3427)
+- speed up fnmatch with two or more * in the pattern
* Sat Mar 17 2007 Jakub Jelinek <jakub at redhat.com> 2.5.90-19
- fix power6 libm compat symbols on ppc32 (#232633)
- Previous message (by thread): rpms/glibc/devel .cvsignore, 1.200, 1.201 glibc-fedora.patch, 1.219, 1.220 glibc.spec, 1.298, 1.299 sources, 1.224, 1.225
- Next message (by thread): rpms/libgnome/devel libgnome-2.18.0-prgname.patch, NONE, 1.1 libgnome-2.17.90-default-icontheme.patch, 1.1, 1.2 libgnome.spec, 1.82, 1.83
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-cvs-commits
mailing list