summaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/i386/fpu/s_cos.S27
-rw-r--r--sysdeps/i386/fpu/s_cosf.S27
-rw-r--r--sysdeps/i386/fpu/s_cosl.S29
-rw-r--r--sysdeps/i386/fpu/s_sin.S27
-rw-r--r--sysdeps/i386/fpu/s_sinf.S27
-rw-r--r--sysdeps/i386/fpu/s_sinl.S29
-rw-r--r--sysdeps/i386/fpu/s_tan.S27
-rw-r--r--sysdeps/i386/fpu/s_tanf.S27
-rw-r--r--sysdeps/i386/fpu/s_tanl.S29
-rw-r--r--sysdeps/ieee754/dbl-64/s_expm1.c6
-rw-r--r--sysdeps/ieee754/dbl-64/s_sin.c15
-rw-r--r--sysdeps/ieee754/dbl-64/s_tan.c31
-rw-r--r--sysdeps/ieee754/flt-32/s_cosf.c9
-rw-r--r--sysdeps/ieee754/flt-32/s_expm1f.c6
-rw-r--r--sysdeps/ieee754/flt-32/s_sinf.c9
-rw-r--r--sysdeps/ieee754/flt-32/s_tanf.c9
-rw-r--r--sysdeps/ieee754/k_standard.c10
-rw-r--r--sysdeps/ieee754/ldbl-96/s_cosl.c7
-rw-r--r--sysdeps/ieee754/ldbl-96/s_sinl.c7
-rw-r--r--sysdeps/unix/sysv/linux/dl-osinfo.h2
-rw-r--r--sysdeps/unix/sysv/linux/readv.c2
-rw-r--r--sysdeps/unix/sysv/linux/writev.c2
-rw-r--r--sysdeps/x86_64/dl-machine.h2
-rw-r--r--sysdeps/x86_64/fpu/s_cosl.S16
-rw-r--r--sysdeps/x86_64/fpu/s_expm1l.S6
-rw-r--r--sysdeps/x86_64/fpu/s_sinl.S14
-rw-r--r--sysdeps/x86_64/fpu/s_tanl.S14
27 files changed, 365 insertions, 51 deletions
diff --git a/sysdeps/i386/fpu/s_cos.S b/sysdeps/i386/fpu/s_cos.S
index ac8b1459d9..d341d008c5 100644
--- a/sysdeps/i386/fpu/s_cos.S
+++ b/sysdeps/i386/fpu/s_cos.S
@@ -1,15 +1,24 @@
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
* Public domain.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
RCSID("$NetBSD: s_cos.S,v 1.5 1995/05/08 23:54:00 jtc Exp $")
ENTRY(__cos)
fldl 4(%esp)
- fcos
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fcos
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -25,5 +34,21 @@ ENTRY(__cos)
fstp %st(1)
fcos
ret
+3:
+#ifdef PIC
+ pushl %ebx
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (ebx, 0)
+ LOAD_PIC_REG (bx)
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+ popl %ebx
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (ebx)
+#else
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+#endif
+ jmp 4b
END (__cos)
weak_alias (__cos, cos)
diff --git a/sysdeps/i386/fpu/s_cosf.S b/sysdeps/i386/fpu/s_cosf.S
index 21f87aa874..578967ad3c 100644
--- a/sysdeps/i386/fpu/s_cosf.S
+++ b/sysdeps/i386/fpu/s_cosf.S
@@ -1,15 +1,24 @@
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
* Public domain.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
RCSID("$NetBSD: s_cosf.S,v 1.3 1995/05/08 23:55:16 jtc Exp $")
ENTRY(__cosf)
flds 4(%esp)
- fcos
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fcos
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -25,5 +34,21 @@ ENTRY(__cosf)
fstp %st(1)
fcos
ret
+3:
+#ifdef PIC
+ pushl %ebx
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (ebx, 0)
+ LOAD_PIC_REG (bx)
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+ popl %ebx
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (ebx)
+#else
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+#endif
+ jmp 4b
END (__cosf)
weak_alias (__cosf, cosf)
diff --git a/sysdeps/i386/fpu/s_cosl.S b/sysdeps/i386/fpu/s_cosl.S
index 61c9010c99..27dd74f21b 100644
--- a/sysdeps/i386/fpu/s_cosl.S
+++ b/sysdeps/i386/fpu/s_cosl.S
@@ -3,15 +3,22 @@
* Public domain.
*
* Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
-RCSID("$NetBSD: $")
-
ENTRY(__cosl)
fldt 4(%esp)
- fcos
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fcos
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -27,5 +34,21 @@ ENTRY(__cosl)
fstp %st(1)
fcos
ret
+3:
+#ifdef PIC
+ pushl %ebx
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (ebx, 0)
+ LOAD_PIC_REG (bx)
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+ popl %ebx
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (ebx)
+#else
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+#endif
+ jmp 4b
END (__cosl)
weak_alias (__cosl, cosl)
diff --git a/sysdeps/i386/fpu/s_sin.S b/sysdeps/i386/fpu/s_sin.S
index eb22d7e98b..6b913992dc 100644
--- a/sysdeps/i386/fpu/s_sin.S
+++ b/sysdeps/i386/fpu/s_sin.S
@@ -1,15 +1,24 @@
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
* Public domain.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
RCSID("$NetBSD: s_sin.S,v 1.5 1995/05/09 00:25:54 jtc Exp $")
ENTRY(__sin)
fldl 4(%esp)
- fsin
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fsin
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -25,5 +34,21 @@ ENTRY(__sin)
fstp %st(1)
fsin
ret
+3:
+#ifdef PIC
+ pushl %ebx
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (ebx, 0)
+ LOAD_PIC_REG (bx)
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+ popl %ebx
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (ebx)
+#else
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+#endif
+ jmp 4b
END (__sin)
weak_alias (__sin, sin)
diff --git a/sysdeps/i386/fpu/s_sinf.S b/sysdeps/i386/fpu/s_sinf.S
index 5ca45f52e2..67621f70f2 100644
--- a/sysdeps/i386/fpu/s_sinf.S
+++ b/sysdeps/i386/fpu/s_sinf.S
@@ -1,15 +1,24 @@
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
* Public domain.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
RCSID("$NetBSD: s_sinf.S,v 1.3 1995/05/09 00:27:53 jtc Exp $")
ENTRY(__sinf)
flds 4(%esp)
- fsin
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fsin
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -25,5 +34,21 @@ ENTRY(__sinf)
fstp %st(1)
fsin
ret
+3:
+#ifdef PIC
+ pushl %ebx
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (ebx, 0)
+ LOAD_PIC_REG (bx)
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+ popl %ebx
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (ebx)
+#else
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+#endif
+ jmp 4b
END (__sinf)
weak_alias (__sinf, sinf)
diff --git a/sysdeps/i386/fpu/s_sinl.S b/sysdeps/i386/fpu/s_sinl.S
index 3e215de5e1..68c4f99668 100644
--- a/sysdeps/i386/fpu/s_sinl.S
+++ b/sysdeps/i386/fpu/s_sinl.S
@@ -3,15 +3,22 @@
* Public domain.
*
* Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
-RCSID("$NetBSD: $")
-
ENTRY(__sinl)
fldt 4(%esp)
- fsin
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fsin
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -27,5 +34,21 @@ ENTRY(__sinl)
fstp %st(1)
fsin
ret
+3:
+#ifdef PIC
+ pushl %ebx
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (ebx, 0)
+ LOAD_PIC_REG (bx)
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+ popl %ebx
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (ebx)
+#else
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+#endif
+ jmp 4b
END (__sinl)
weak_alias (__sinl, sinl)
diff --git a/sysdeps/i386/fpu/s_tan.S b/sysdeps/i386/fpu/s_tan.S
index 7b3547af4c..b35bb835de 100644
--- a/sysdeps/i386/fpu/s_tan.S
+++ b/sysdeps/i386/fpu/s_tan.S
@@ -1,15 +1,24 @@
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
* Public domain.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
RCSID("$NetBSD: s_tan.S,v 1.5 1995/05/09 00:30:00 jtc Exp $")
ENTRY(__tan)
fldl 4(%esp)
- fptan
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fptan
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -26,5 +35,21 @@ ENTRY(__tan)
fptan
fstp %st(0)
ret
+3:
+#ifdef PIC
+ pushl %ebx
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (ebx, 0)
+ LOAD_PIC_REG (bx)
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+ popl %ebx
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (ebx)
+#else
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+#endif
+ jmp 4b
END (__tan)
weak_alias (__tan, tan)
diff --git a/sysdeps/i386/fpu/s_tanf.S b/sysdeps/i386/fpu/s_tanf.S
index 355dff9c8d..74bc22fceb 100644
--- a/sysdeps/i386/fpu/s_tanf.S
+++ b/sysdeps/i386/fpu/s_tanf.S
@@ -1,15 +1,24 @@
/*
* Written by J.T. Conklin <jtc@netbsd.org>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
* Public domain.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
RCSID("$NetBSD: s_tanf.S,v 1.3 1995/05/09 00:31:09 jtc Exp $")
ENTRY(__tanf)
flds 4(%esp)
- fptan
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fptan
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -26,5 +35,21 @@ ENTRY(__tanf)
fptan
fstp %st(0)
ret
+3:
+#ifdef PIC
+ pushl %ebx
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (ebx, 0)
+ LOAD_PIC_REG (bx)
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+ popl %ebx
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (ebx)
+#else
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+#endif
+ jmp 4b
END (__tanf)
weak_alias (__tanf, tanf)
diff --git a/sysdeps/i386/fpu/s_tanl.S b/sysdeps/i386/fpu/s_tanl.S
index f2bdd6a605..151b77113f 100644
--- a/sysdeps/i386/fpu/s_tanl.S
+++ b/sysdeps/i386/fpu/s_tanl.S
@@ -3,15 +3,22 @@
* Public domain.
*
* Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
-RCSID("$NetBSD: $")
-
ENTRY(__tanl)
fldt 4(%esp)
- fptan
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fptan
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -28,5 +35,21 @@ ENTRY(__tanl)
fptan
fstp %st(0)
ret
+3:
+#ifdef PIC
+ pushl %ebx
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (ebx, 0)
+ LOAD_PIC_REG (bx)
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+ popl %ebx
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (ebx)
+#else
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+#endif
+ jmp 4b
END (__tanl)
weak_alias (__tanl, tanl)
diff --git a/sysdeps/ieee754/dbl-64/s_expm1.c b/sysdeps/ieee754/dbl-64/s_expm1.c
index bfd15b2e31..324354336e 100644
--- a/sysdeps/ieee754/dbl-64/s_expm1.c
+++ b/sysdeps/ieee754/dbl-64/s_expm1.c
@@ -112,6 +112,7 @@ static char rcsid[] = "$NetBSD: s_expm1.c,v 1.8 1995/05/10 20:47:09 jtc Exp $";
* to produce the hexadecimal values shown.
*/
+#include <errno.h>
#include "math.h"
#include "math_private.h"
#define one Q[0]
@@ -159,7 +160,10 @@ Q[] = {1.0, -3.33333333333331316428e-02, /* BFA11111 111110F4 */
return x+x; /* NaN */
else return (xsb==0)? x:-1.0;/* exp(+-inf)={inf,-1} */
}
- if(x > o_threshold) return huge*huge; /* overflow */
+ if(x > o_threshold) {
+ __set_errno (ERANGE);
+ return huge*huge; /* overflow */
+ }
}
if(xsb!=0) { /* x < -56*ln2, return -1.0 with inexact */
if(x+tiny<0.0) /* raise inexact */
diff --git a/sysdeps/ieee754/dbl-64/s_sin.c b/sysdeps/ieee754/dbl-64/s_sin.c
index 86e1a6d121..b40776f5e2 100644
--- a/sysdeps/ieee754/dbl-64/s_sin.c
+++ b/sysdeps/ieee754/dbl-64/s_sin.c
@@ -1,7 +1,7 @@
/*
* IBM Accurate Mathematical Library
* written by International Business Machines Corp.
- * Copyright (C) 2001 Free Software Foundation
+ * Copyright (C) 2001, 2009 Free Software Foundation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
@@ -48,6 +48,7 @@
/****************************************************************************/
+#include <errno.h>
#include "endian.h"
#include "mydefs.h"
#include "usncs.h"
@@ -329,7 +330,11 @@ double __sin(double x){
} /* else if (k < 0x7ff00000 ) */
/*--------------------- |x| > 2^1024 ----------------------------------*/
- else return x / x;
+ else {
+ if (k == 0x7ff00000 && u.i[LOW_HALF] == 0)
+ __set_errno (EDOM);
+ return x / x;
+ }
return 0; /* unreachable */
}
@@ -572,7 +577,11 @@ double __cos(double x)
- else return x / x; /* |x| > 2^1024 */
+ else {
+ if (k == 0x7ff00000 && u.i[LOW_HALF] == 0)
+ __set_errno (EDOM);
+ return x / x; /* |x| > 2^1024 */
+ }
return 0;
}
diff --git a/sysdeps/ieee754/dbl-64/s_tan.c b/sysdeps/ieee754/dbl-64/s_tan.c
index cf8d4d0267..4e26d90ae1 100644
--- a/sysdeps/ieee754/dbl-64/s_tan.c
+++ b/sysdeps/ieee754/dbl-64/s_tan.c
@@ -1,7 +1,7 @@
/*
* IBM Accurate Mathematical Library
* written by International Business Machines Corp.
- * Copyright (C) 2001 Free Software Foundation
+ * Copyright (C) 2001, 2009 Free Software Foundation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
@@ -33,6 +33,8 @@
/* round to nearest mode of IEEE 754 standard. */
/* */
/*********************************************************************/
+
+#include <errno.h>
#include "endian.h"
#include "dla.h"
#include "mpa.h"
@@ -61,7 +63,11 @@ double tan(double x) {
/* x=+-INF, x=NaN */
num.d = x; ux = num.i[HIGH_HALF];
- if ((ux&0x7ff00000)==0x7ff00000) return x-x;
+ if ((ux&0x7ff00000)==0x7ff00000) {
+ if ((ux&0x7fffffff)==0x7ff00000)
+ __set_errno (EDOM);
+ return x-x;
+ }
w=(x<ZERO) ? -x : x;
@@ -108,7 +114,8 @@ double tan(double x) {
fi = xfg[i][1].d; gi = xfg[i][2].d; t2 = pz*(gi+fi)/(gi-pz);
if ((y=fi+(t2-fi*u3.d))==fi+(t2+fi*u3.d)) return (s*y);
t3 = (t2<ZERO) ? -t2 : t2;
- if ((y=fi+(t2-(t4=fi*ua3.d+t3*ub3.d)))==fi+(t2+t4)) return (s*y);
+ t4 = fi*ua3.d+t3*ub3.d;
+ if ((y=fi+(t2-t4))==fi+(t2+t4)) return (s*y);
/* Second stage */
ffi = xfg[i][3].d;
@@ -216,13 +223,15 @@ double tan(double x) {
t2 = pz*(fi+gi)/(fi+pz);
if ((y=gi-(t2-gi*u10.d))==gi-(t2+gi*u10.d)) return (-sy*y);
t3 = (t2<ZERO) ? -t2 : t2;
- if ((y=gi-(t2-(t4=gi*ua10.d+t3*ub10.d)))==gi-(t2+t4)) return (-sy*y); }
+ t4 = gi*ua10.d+t3*ub10.d;
+ if ((y=gi-(t2-t4))==gi-(t2+t4)) return (-sy*y); }
else {
/* tan */
t2 = pz*(gi+fi)/(gi-pz);
if ((y=fi+(t2-fi*u9.d))==fi+(t2+fi*u9.d)) return (sy*y);
t3 = (t2<ZERO) ? -t2 : t2;
- if ((y=fi+(t2-(t4=fi*ua9.d+t3*ub9.d)))==fi+(t2+t4)) return (sy*y); }
+ t4 = fi*ua9.d+t3*ub9.d;
+ if ((y=fi+(t2-t4))==fi+(t2+t4)) return (sy*y); }
/* Second stage */
ffi = xfg[i][3].d;
@@ -327,13 +336,15 @@ double tan(double x) {
t2 = pz*(fi+gi)/(fi+pz);
if ((y=gi-(t2-gi*u18.d))==gi-(t2+gi*u18.d)) return (-sy*y);
t3 = (t2<ZERO) ? -t2 : t2;
- if ((y=gi-(t2-(t4=gi*ua18.d+t3*ub18.d)))==gi-(t2+t4)) return (-sy*y); }
+ t4 = gi*ua18.d+t3*ub18.d;
+ if ((y=gi-(t2-t4))==gi-(t2+t4)) return (-sy*y); }
else {
/* tan */
t2 = pz*(gi+fi)/(gi-pz);
if ((y=fi+(t2-fi*u17.d))==fi+(t2+fi*u17.d)) return (sy*y);
t3 = (t2<ZERO) ? -t2 : t2;
- if ((y=fi+(t2-(t4=fi*ua17.d+t3*ub17.d)))==fi+(t2+t4)) return (sy*y); }
+ t4 = fi*ua17.d+t3*ub17.d;
+ if ((y=fi+(t2-t4))==fi+(t2+t4)) return (sy*y); }
/* Second stage */
ffi = xfg[i][3].d;
@@ -431,13 +442,15 @@ double tan(double x) {
t2 = pz*(fi+gi)/(fi+pz);
if ((y=gi-(t2-gi*u26.d))==gi-(t2+gi*u26.d)) return (-sy*y);
t3 = (t2<ZERO) ? -t2 : t2;
- if ((y=gi-(t2-(t4=gi*ua26.d+t3*ub26.d)))==gi-(t2+t4)) return (-sy*y); }
+ t4 = gi*ua26.d+t3*ub26.d;
+ if ((y=gi-(t2-t4))==gi-(t2+t4)) return (-sy*y); }
else {
/* tan */
t2 = pz*(gi+fi)/(gi-pz);
if ((y=fi+(t2-fi*u25.d))==fi+(t2+fi*u25.d)) return (sy*y);
t3 = (t2<ZERO) ? -t2 : t2;
- if ((y=fi+(t2-(t4=fi*ua25.d+t3*ub25.d)))==fi+(t2+t4)) return (sy*y); }
+ t4 = fi*ua25.d+t3*ub25.d;
+ if ((y=fi+(t2-t4))==fi+(t2+t4)) return (sy*y); }
/* Second stage */
ffi = xfg[i][3].d;
diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c
index 86c59d440c..4f9f239f6f 100644
--- a/sysdeps/ieee754/flt-32/s_cosf.c
+++ b/sysdeps/ieee754/flt-32/s_cosf.c
@@ -8,7 +8,7 @@
*
* Developed at SunPro, a Sun Microsystems, Inc. business.
* Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
+ * software is freely granted, provided that this notice
* is preserved.
* ====================================================
*/
@@ -17,6 +17,7 @@
static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $";
#endif
+#include <errno.h>
#include "math.h"
#include "math_private.h"
@@ -43,7 +44,11 @@ static float one=1.0;
if(ix <= 0x3f490fd8) return __kernel_cosf(x,z);
/* cos(Inf or NaN) is NaN */
- else if (ix>=0x7f800000) return x-x;
+ else if (ix>=0x7f800000) {
+ if (ix == 0x7f800000)
+ __set_errno (EDOM);
+ return x-x;
+ }
/* argument reduction needed */
else {
diff --git a/sysdeps/ieee754/flt-32/s_expm1f.c b/sysdeps/ieee754/flt-32/s_expm1f.c
index 1f032be25f..3f4536b906 100644
--- a/sysdeps/ieee754/flt-32/s_expm1f.c
+++ b/sysdeps/ieee754/flt-32/s_expm1f.c
@@ -17,6 +17,7 @@
static char rcsid[] = "$NetBSD: s_expm1f.c,v 1.5 1995/05/10 20:47:11 jtc Exp $";
#endif
+#include <errno.h>
#include "math.h"
#include "math_private.h"
@@ -63,7 +64,10 @@ Q5 = -2.0109921195e-07; /* 0xb457edbb */
return x+x; /* NaN */
if(hx==0x7f800000)
return (xsb==0)? x:-1.0;/* exp(+-inf)={inf,-1} */
- if(x > o_threshold) return huge*huge; /* overflow */
+ if(x > o_threshold) {
+ __set_errno (ERANGE);
+ return huge*huge; /* overflow */
+ }
}
if(xsb!=0) { /* x < -27*ln2, return -1.0 with inexact */
if(x+tiny<(float)0.0) /* raise inexact */
diff --git a/sysdeps/ieee754/flt-32/s_sinf.c b/sysdeps/ieee754/flt-32/s_sinf.c
index 76a7c21fcb..673e379f0c 100644
--- a/sysdeps/ieee754/flt-32/s_sinf.c
+++ b/sysdeps/ieee754/flt-32/s_sinf.c
@@ -8,7 +8,7 @@
*
* Developed at SunPro, a Sun Microsystems, Inc. business.
* Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
+ * software is freely granted, provided that this notice
* is preserved.
* ====================================================
*/
@@ -17,6 +17,7 @@
static char rcsid[] = "$NetBSD: s_sinf.c,v 1.4 1995/05/10 20:48:16 jtc Exp $";
#endif
+#include <errno.h>
#include "math.h"
#include "math_private.h"
@@ -37,7 +38,11 @@ static char rcsid[] = "$NetBSD: s_sinf.c,v 1.4 1995/05/10 20:48:16 jtc Exp $";
if(ix <= 0x3f490fd8) return __kernel_sinf(x,z,0);
/* sin(Inf or NaN) is NaN */
- else if (ix>=0x7f800000) return x-x;
+ else if (ix>=0x7f800000) {
+ if (ix == 0x7f800000)
+ __set_errno (EDOM);
+ return x-x;
+ }
/* argument reduction needed */
else {
diff --git a/sysdeps/ieee754/flt-32/s_tanf.c b/sysdeps/ieee754/flt-32/s_tanf.c
index e8f6016c32..4a852cb1f4 100644
--- a/sysdeps/ieee754/flt-32/s_tanf.c
+++ b/sysdeps/ieee754/flt-32/s_tanf.c
@@ -8,7 +8,7 @@
*
* Developed at SunPro, a Sun Microsystems, Inc. business.
* Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
+ * software is freely granted, provided that this notice
* is preserved.
* ====================================================
*/
@@ -17,6 +17,7 @@
static char rcsid[] = "$NetBSD: s_tanf.c,v 1.4 1995/05/10 20:48:20 jtc Exp $";
#endif
+#include <errno.h>
#include "math.h"
#include "math_private.h"
@@ -37,7 +38,11 @@ static char rcsid[] = "$NetBSD: s_tanf.c,v 1.4 1995/05/10 20:48:20 jtc Exp $";
if(ix <= 0x3f490fda) return __kernel_tanf(x,z,1);
/* tan(Inf or NaN) is NaN */
- else if (ix>=0x7f800000) return x-x; /* NaN */
+ else if (ix>=0x7f800000) {
+ if (ix==0x7f800000)
+ __set_errno (EDOM);
+ return x-x; /* NaN */
+ }
/* argument reduction needed */
else {
diff --git a/sysdeps/ieee754/k_standard.c b/sysdeps/ieee754/k_standard.c
index d8fa2a4493..ede5157454 100644
--- a/sysdeps/ieee754/k_standard.c
+++ b/sysdeps/ieee754/k_standard.c
@@ -383,7 +383,7 @@ static double zero = 0.0; /* used as const */
else
exc.retval = HUGE_VAL;
if (_LIB_VERSION == _POSIX_)
- __set_errno (EDOM);
+ __set_errno (ERANGE);
else if (!matherr(&exc)) {
if (_LIB_VERSION == _SVID_) {
(void) WRITE2("lgamma: SING error\n", 19);
@@ -528,7 +528,7 @@ static double zero = 0.0; /* used as const */
else
exc.retval = -HUGE_VAL;
if (_LIB_VERSION == _POSIX_)
- __set_errno (EDOM);
+ __set_errno (ERANGE);
else if (!matherr(&exc)) {
if (_LIB_VERSION == _SVID_) {
(void) WRITE2("pow(0,neg): DOMAIN error\n", 25);
@@ -547,7 +547,7 @@ static double zero = 0.0; /* used as const */
else
exc.retval = HUGE_VAL;
if (_LIB_VERSION == _POSIX_)
- __set_errno (EDOM);
+ __set_errno (ERANGE);
else if (!matherr(&exc)) {
if (_LIB_VERSION == _SVID_) {
(void) WRITE2("pow(0,neg): DOMAIN error\n", 25);
@@ -692,7 +692,7 @@ static double zero = 0.0; /* used as const */
? "atanhf" : "atanhl");
exc.retval = x/zero; /* sign(x)*inf */
if (_LIB_VERSION == _POSIX_)
- __set_errno (EDOM);
+ __set_errno (ERANGE);
else if (!matherr(&exc)) {
if (_LIB_VERSION == _SVID_) {
(void) WRITE2("atanh: SING error\n", 18);
@@ -990,7 +990,7 @@ static double zero = 0.0; /* used as const */
__set_errno (ERANGE);
}
break;
-
+
/* #### Last used is 50/150/250 ### */
}
return exc.retval;
diff --git a/sysdeps/ieee754/ldbl-96/s_cosl.c b/sysdeps/ieee754/ldbl-96/s_cosl.c
index 9765f7fd4e..e33abc9afd 100644
--- a/sysdeps/ieee754/ldbl-96/s_cosl.c
+++ b/sysdeps/ieee754/ldbl-96/s_cosl.c
@@ -49,6 +49,7 @@ static char rcsid[] = "$NetBSD: $";
* TRIG(x) returns trig(x) nearly rounded
*/
+#include <errno.h>
#include "math.h"
#include "math_private.h"
@@ -71,7 +72,11 @@ static char rcsid[] = "$NetBSD: $";
return __kernel_cosl(x,z);
/* cos(Inf or NaN) is NaN */
- else if (se==0x7fff) return x-x;
+ else if (se==0x7fff) {
+ if ((i0 | i1) == 0)
+ __set_errno (EDOM);
+ return x-x;
+ }
/* argument reduction needed */
else {
diff --git a/sysdeps/ieee754/ldbl-96/s_sinl.c b/sysdeps/ieee754/ldbl-96/s_sinl.c
index 4fd48805b4..b939bd6a99 100644
--- a/sysdeps/ieee754/ldbl-96/s_sinl.c
+++ b/sysdeps/ieee754/ldbl-96/s_sinl.c
@@ -49,6 +49,7 @@ static char rcsid[] = "$NetBSD: $";
* TRIG(x) returns trig(x) nearly rounded
*/
+#include <errno.h>
#include "math.h"
#include "math_private.h"
@@ -71,7 +72,11 @@ static char rcsid[] = "$NetBSD: $";
return __kernel_sinl(x,z,0);
/* sin(Inf or NaN) is NaN */
- else if (se==0x7fff) return x-x;
+ else if (se==0x7fff) {
+ if ((i0 | i1) == 0)
+ __set_errno (EDOM);
+ return x-x;
+ }
/* argument reduction needed */
else {
diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h
index 9fcfd47829..430166a578 100644
--- a/sysdeps/unix/sysv/linux/dl-osinfo.h
+++ b/sysdeps/unix/sysv/linux/dl-osinfo.h
@@ -32,7 +32,7 @@
#ifdef SHARED
/* This is the function used in the dynamic linker to print the fatal error
message. */
-static inline void
+static void
__attribute__ ((__noreturn__))
dl_fatal (const char *str)
{
diff --git a/sysdeps/unix/sysv/linux/readv.c b/sysdeps/unix/sysv/linux/readv.c
index bff4a3ff74..9425084a25 100644
--- a/sysdeps/unix/sysv/linux/readv.c
+++ b/sysdeps/unix/sysv/linux/readv.c
@@ -27,8 +27,10 @@
#include <bp-checks.h>
#include <kernel-features.h>
+#ifndef __ASSUME_COMPLETE_READV_WRITEV
static ssize_t __atomic_readv_replacement (int, __const struct iovec *,
int) internal_function;
+#endif
/* Not all versions of the kernel support the large number of records. */
diff --git a/sysdeps/unix/sysv/linux/writev.c b/sysdeps/unix/sysv/linux/writev.c
index 55e915d34d..8552856cdb 100644
--- a/sysdeps/unix/sysv/linux/writev.c
+++ b/sysdeps/unix/sysv/linux/writev.c
@@ -27,8 +27,10 @@
#include <bp-checks.h>
#include <kernel-features.h>
+#ifndef __ASSUME_COMPLETE_READV_WRITEV
static ssize_t __atomic_writev_replacement (int, const struct iovec *,
int) internal_function;
+#endif
/* Not all versions of the kernel support the large number of records. */
diff --git a/sysdeps/x86_64/dl-machine.h b/sysdeps/x86_64/dl-machine.h
index 8c67b5b5f9..4444ae0a71 100644
--- a/sysdeps/x86_64/dl-machine.h
+++ b/sysdeps/x86_64/dl-machine.h
@@ -403,7 +403,9 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
fmt = "\
%s: Symbol `%s' causes overflow in R_X86_64_32 relocation\n";
+# ifndef RESOLVE_CONFLICT_FIND_MAP
print_err:
+# endif
strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf (fmt,
diff --git a/sysdeps/x86_64/fpu/s_cosl.S b/sysdeps/x86_64/fpu/s_cosl.S
index 6636fb5ec6..6921cda567 100644
--- a/sysdeps/x86_64/fpu/s_cosl.S
+++ b/sysdeps/x86_64/fpu/s_cosl.S
@@ -4,15 +4,22 @@
*
* Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
* Adapted for x86-64 by Andreas Jaeger <aj@suse.de>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
-RCSID("$NetBSD: $")
-
ENTRY(__cosl)
fldt 8(%rsp)
- fcos
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fcos
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -28,5 +35,8 @@ ENTRY(__cosl)
fstp %st(1)
fcos
ret
+3: call __errno_location@PLT
+ movl $EDOM, (%rax)
+ jmp 4b
END (__cosl)
weak_alias (__cosl, cosl)
diff --git a/sysdeps/x86_64/fpu/s_expm1l.S b/sysdeps/x86_64/fpu/s_expm1l.S
index 05a1bfcce1..c0b93e94a9 100644
--- a/sysdeps/x86_64/fpu/s_expm1l.S
+++ b/sysdeps/x86_64/fpu/s_expm1l.S
@@ -1,5 +1,5 @@
/* ix87 specific implementation of exp(x)-1.
- Copyright (C) 1996, 1997, 2001, 2002, 2008 Free Software Foundation, Inc.
+ Copyright (C) 1996,1997,2001,2002,2008,2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
Based on code by John C. Bowman <bowman@ipp-garching.mpg.de>.
@@ -51,7 +51,7 @@ ENTRY(__expm1l)
movzwl 8+8(%rsp), %eax // load sign bit and 15-bit exponent
xorb $0x80, %ah // invert sign bit (now 1 is "positive")
cmpl $0xc006, %eax // is num positive and exp >= 6 (number is >= 128.0)?
- jae __ieee754_expl // (if num is denormal, it is at least >= 64.0)
+ jae __expl // (if num is denormal, it is at least >= 64.0)
fldt 8(%rsp) // x
fxam // Is NaN or +-Inf?
@@ -76,7 +76,7 @@ ENTRY(__expm1l)
fscale // 2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fsubrl MO(one) // 1-2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fstp %st(1) // 1-2^int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
- fsubrp %st, %st(1) // 2^(log2(e)*x)
+ fsubrp %st, %st(1) // 2^(log2(e)*x)-1
ret
2: testl $0x200, %eax // Test sign.
diff --git a/sysdeps/x86_64/fpu/s_sinl.S b/sysdeps/x86_64/fpu/s_sinl.S
index 181f112f4f..79fc4af95b 100644
--- a/sysdeps/x86_64/fpu/s_sinl.S
+++ b/sysdeps/x86_64/fpu/s_sinl.S
@@ -4,13 +4,22 @@
*
* Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
* Adapted for x86-64 by Andreas Jaeger <aj@suse.de>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
ENTRY(__sinl)
fldt 8(%rsp)
- fsin
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fsin
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -26,5 +35,8 @@ ENTRY(__sinl)
fstp %st(1)
fsin
ret
+3: call __errno_location@PLT
+ movl $EDOM, (%rax)
+ jmp 4b
END (__sinl)
weak_alias (__sinl, sinl)
diff --git a/sysdeps/x86_64/fpu/s_tanl.S b/sysdeps/x86_64/fpu/s_tanl.S
index 674e908acc..6427e3f6f0 100644
--- a/sysdeps/x86_64/fpu/s_tanl.S
+++ b/sysdeps/x86_64/fpu/s_tanl.S
@@ -4,15 +4,24 @@
*
* Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
* Adapted for x86-64 by Andreas Jaeger <aj@suse.de>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
RCSID("$NetBSD: $")
ENTRY(__tanl)
fldt 8(%rsp)
- fptan
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fptan
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -29,5 +38,8 @@ ENTRY(__tanl)
fptan
fstp %st(0)
ret
+3: call __errno_location@PLT
+ movl $EDOM, (%rax)
+ jmp 4b
END (__tanl)
weak_alias (__tanl, tanl)