This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.19-601-g4ba7a00


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  4ba7a00fe3779e6ffafad6d47305b3491cdac33e (commit)
      from  b3a9f56ba59c3d8eadd3135a1c25c37a63151450 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=4ba7a00fe3779e6ffafad6d47305b3491cdac33e

commit 4ba7a00fe3779e6ffafad6d47305b3491cdac33e
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Wed Jun 18 12:32:01 2014 +0000

    Fix __ieee754_logl (-LDBL_MAX) in FE_DOWNWARD mode (bug 17022).
    
    This patch fixes __ieee754_logl (-LDBL_MAX) on x86_64 and x86 not to
    subtract 1 from its argument and so cause spurious overflow in
    FE_DOWNWARD mode.  (For any argument strictly less than -1, it doesn't
    matter whether or not 1 is subtracted before computing log1p, as long
    as the result doesn't overflow to -Inf.)
    
    Tested x86_64 and x86.  (This particular case lacks test coverage,
    since the testsuite doesn't cover -lieee, but it will be covered by
    tests after the following patch to test pow in all rounding modes,
    which was the context in which this bug was found.)
    
    	[BZ #17022]
    	* sysdeps/i386/fpu/e_logl.S (__ieee754_logl): Do not subtract 1
    	from arguments -2 or below.
    	* sysdeps/i386/i686/fpu/e_logl.S (__ieee754_logl): Likewise.
    	* sysdeps/x86_64/fpu/e_logl.S (__ieee754_logl): Likewise.

diff --git a/ChangeLog b/ChangeLog
index 997cec6..3204c4e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2014-06-18  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #17022]
+	* sysdeps/i386/fpu/e_logl.S (__ieee754_logl): Do not subtract 1
+	from arguments -2 or below.
+	* sysdeps/i386/i686/fpu/e_logl.S (__ieee754_logl): Likewise.
+	* sysdeps/x86_64/fpu/e_logl.S (__ieee754_logl): Likewise.
+
 2014-06-18  Andreas Schwab  <schwab@suse.de>
 
 	[BZ #17062]
diff --git a/NEWS b/NEWS
index 429dba5..0c4d8bb 100644
--- a/NEWS
+++ b/NEWS
@@ -19,8 +19,8 @@ Version 2.20
   16791, 16796, 16799, 16800, 16815, 16823, 16824, 16831, 16838, 16849,
   16854, 16876, 16877, 16878, 16882, 16885, 16888, 16890, 16912, 16915,
   16916, 16917, 16922, 16927, 16928, 16932, 16943, 16958, 16965, 16966,
-  16967, 16977, 16978, 16984, 16990, 16996, 17009, 17031, 17042, 17048,
-  17058, 17062.
+  16967, 16977, 16978, 16984, 16990, 16996, 17009, 17022, 17031, 17042,
+  17048, 17058, 17062.
 
 * The minimum Linux kernel version that this version of the GNU C Library
   can be used with is 2.6.32.
diff --git a/sysdeps/i386/fpu/e_logl.S b/sysdeps/i386/fpu/e_logl.S
index edae1d7..828e98a 100644
--- a/sysdeps/i386/fpu/e_logl.S
+++ b/sysdeps/i386/fpu/e_logl.S
@@ -40,8 +40,11 @@ ENTRY(__ieee754_logl)
 	fld	%st		// x : x : log(2)
 	sahf
 	jc	3f		// in case x is NaN or +-Inf
+	movzwl	4+8(%esp), %eax
+	cmpl	$0xc000, %eax
+	jae	6f		// x <= -2, avoid overflow from -LDBL_MAX - 1.
 4:	fsubl	MO(one)		// x-1 : x : log(2)
-	fld	%st		// x-1 : x-1 : x : log(2)
+6:	fld	%st		// x-1 : x-1 : x : log(2)
 	fabs			// |x-1| : x-1 : x : log(2)
 	fcompl	MO(limit)	// x-1 : x : log(2)
 	fnstsw			// x-1 : x : log(2)
diff --git a/sysdeps/i386/i686/fpu/e_logl.S b/sysdeps/i386/i686/fpu/e_logl.S
index a0d1107..0ccc8fc 100644
--- a/sysdeps/i386/i686/fpu/e_logl.S
+++ b/sysdeps/i386/i686/fpu/e_logl.S
@@ -39,8 +39,11 @@ ENTRY(__ieee754_logl)
 	LOAD_PIC_REG (dx)
 #endif
 	fld	%st		// x : x : log(2)
+	movzwl	4+8(%esp), %eax
+	cmpl	$0xc000, %eax
+	jae	5f		// x <= -2, avoid overflow from -LDBL_MAX - 1.
 	fsubl	MO(one)		// x-1 : x : log(2)
-	fld	%st		// x-1 : x-1 : x : log(2)
+5:	fld	%st		// x-1 : x-1 : x : log(2)
 	fabs			// |x-1| : x-1 : x : log(2)
 	fld	MO(limit)	// 0.29 : |x-1| : x-1 : x : log(2)
 	fcomip	%st(1)		// |x-1| : x-1 : x : log(2)
diff --git a/sysdeps/x86_64/fpu/e_logl.S b/sysdeps/x86_64/fpu/e_logl.S
index 315afc0..047b8db 100644
--- a/sysdeps/x86_64/fpu/e_logl.S
+++ b/sysdeps/x86_64/fpu/e_logl.S
@@ -38,8 +38,11 @@ ENTRY(__ieee754_logl)
 	fld	%st		// x : x : log(2)
 	testb	$1, %ah
 	jnz	3f		// in case x is NaN or +-Inf
+	movzwl	8+8(%rsp), %eax
+	cmpl	$0xc000, %eax
+	jae	6f		// x <= -2, avoid overflow from -LDBL_MAX - 1.
 4:	fsubl	MO(one)		// x-1 : x : log(2)
-	fld	%st		// x-1 : x-1 : x : log(2)
+6:	fld	%st		// x-1 : x-1 : x : log(2)
 	fabs			// |x-1| : x-1 : x : log(2)
 	fcompl	MO(limit)	// x-1 : x : log(2)
 	fnstsw			// x-1 : x : log(2)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                      |    8 ++++++++
 NEWS                           |    4 ++--
 sysdeps/i386/fpu/e_logl.S      |    5 ++++-
 sysdeps/i386/i686/fpu/e_logl.S |    5 ++++-
 sysdeps/x86_64/fpu/e_logl.S    |    5 ++++-
 5 files changed, 22 insertions(+), 5 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]