From: Carlos O'Donell Date: Wed, 15 May 2013 15:47:47 +0000 (-0400) Subject: hppa: Fix _FPU_GETCW and _FPU_SETCW. X-Git-Tag: glibc-2.18~260 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b7f7d28b61a806f02e1f4cea81213027c088be8b;p=thirdparty%2Fglibc.git hppa: Fix _FPU_GETCW and _FPU_SETCW. The following patch fixes both _FPU_GETCW and _FPU_SETCW for hppa. The initial implementation was flawed and not well tested. We failed to set cw, and passed in the value of a register to fldd. This patch fixes both of those errors and allows the libm tests to pass without failure. Signed-off-by: Guy Martin Signed-off-by: Carlos O'Donell --- 2013-05-15 Guy Martin Carlos O'Donell [BZ# 15000] * ports/sysdeps/hppa/fpu/fpu_control.h (_FPU_GETCW): Set cw. (_FPU_SETCW): Pass address to fldd. --- diff --git a/NEWS b/NEWS index 72c6a1c7172..f7bff079633 100644 --- a/NEWS +++ b/NEWS @@ -12,12 +12,12 @@ Version 2.18 2546, 2560, 5159, 6809, 10060, 10062, 10357, 11120, 11561, 12387, 12723, 13550, 13889, 13951, 13988, 14142, 14176, 14200, 14280, 14293, 14317, 14327, 14478, 14496, 14582, 14686, 14812, 14888, 14908, 14920, 14952, - 14964, 14981, 14982, 14985, 14994, 14996, 15003, 15006, 15007, 15020, - 15023, 15036, 15054, 15055, 15062, 15078, 15084, 15085, 15086, 15160, - 15214, 15221, 15232, 15234, 15283, 15285, 15287, 15304, 15305, 15307, - 15309, 15327, 15330, 15335, 15336, 15337, 15342, 15346, 15359, 15361, - 15366, 15380, 15394, 15395, 15405, 15406, 15409, 15416, 15418, 15419, - 15423, 15426, 15429, 15448. + 14964, 14981, 14982, 14985, 14994, 14996, 15000, 15003, 15006, 15007, + 15020, 15023, 15036, 15054, 15055, 15062, 15078, 15084, 15085, 15086, + 15160, 15214, 15221, 15232, 15234, 15283, 15285, 15287, 15304, 15305, + 15307, 15309, 15327, 15330, 15335, 15336, 15337, 15342, 15346, 15359, + 15361, 15366, 15380, 15394, 15395, 15405, 15406, 15409, 15416, 15418, + 15419, 15423, 15426, 15429, 15448. * CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla #15078). diff --git a/ports/ChangeLog.hppa b/ports/ChangeLog.hppa index 6aa0e9188b4..64bf7605f40 100644 --- a/ports/ChangeLog.hppa +++ b/ports/ChangeLog.hppa @@ -1,3 +1,10 @@ +2013-05-15 Guy Martin + Carlos O'Donell + + [BZ# 15000] + * ports/sysdeps/hppa/fpu/fpu_control.h (_FPU_GETCW): Set cw. + (_FPU_SETCW): Pass address to fldd. + 2013-04-02 Thomas Schwinge * sysdeps/hppa/math_private.h: New file. diff --git a/ports/sysdeps/hppa/fpu/fpu_control.h b/ports/sysdeps/hppa/fpu/fpu_control.h index 5cac3344d6f..627cdd5b929 100644 --- a/ports/sysdeps/hppa/fpu/fpu_control.h +++ b/ports/sysdeps/hppa/fpu/fpu_control.h @@ -49,7 +49,7 @@ typedef unsigned int fpu_control_t; __asm__ ("fstd %%fr0,0(%1)\n\t" \ "fldd 0(%1),%%fr0\n\t" \ : "=m" (__fullfp.__fpreg) : "r" (&__fullfp.__fpreg) : "%r0"); \ - __fullfp.__halfreg[0]; \ + cw = __fullfp.__halfreg[0]; \ }) #define _FPU_SETCW(cw) \ @@ -57,7 +57,7 @@ typedef unsigned int fpu_control_t; union { __extension__ unsigned long long __fpreg; unsigned int __halfreg[2]; } __fullfp; \ __fullfp.__halfreg[0] = cw; \ __asm__ ("fldd 0(%1),%%fr0\n\t" \ - : : "m" (__fullfp.__fpreg), "r" (__fullfp.__fpreg) : "%r0" ); \ + : : "m" (__fullfp.__fpreg), "r" (&__fullfp.__fpreg) : "%r0" ); \ }) /* Default control word set at startup. */