diff options
author | Joseph Myers <joseph@codesourcery.com> | 2013-06-14 21:42:24 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2013-06-14 21:42:24 +0000 |
commit | 601eb33debf0c7548f52ba72cec4b3f362105e39 (patch) | |
tree | 417ce9870681af465ea79b12cbe85f0731ac6323 | |
parent | c69f6af9e5a03620c253e75fd925d38adaa3c039 (diff) | |
download | glibc-601eb33debf0c7548f52ba72cec4b3f362105e39.tar.gz glibc-601eb33debf0c7548f52ba72cec4b3f362105e39.tar.xz glibc-601eb33debf0c7548f52ba72cec4b3f362105e39.zip |
Stop MIPS setjmp / longjmp saving / restoring floating-point flags (bug 14909).
-rw-r--r-- | NEWS | 18 | ||||
-rw-r--r-- | ports/ChangeLog.mips | 12 | ||||
-rw-r--r-- | ports/sysdeps/mips/__longjmp.c | 4 | ||||
-rw-r--r-- | ports/sysdeps/mips/bits/setjmp.h | 4 | ||||
-rw-r--r-- | ports/sysdeps/mips/mips64/__longjmp.c | 4 | ||||
-rw-r--r-- | ports/sysdeps/mips/mips64/setjmp_aux.c | 5 | ||||
-rw-r--r-- | ports/sysdeps/mips/setjmp_aux.c | 5 |
7 files changed, 23 insertions, 29 deletions
diff --git a/NEWS b/NEWS index 31fcb6c54d..36de21eee2 100644 --- a/NEWS +++ b/NEWS @@ -12,15 +12,15 @@ Version 2.18 2546, 2560, 5159, 6809, 10060, 10062, 10357, 10686, 11120, 11561, 12387, 12515, 12723, 13550, 13889, 13951, 13988, 14142, 14176, 14200, 14256, 14280, 14293, 14317, 14327, 14478, 14496, 14582, 14686, 14812, 14888, - 14894, 14908, 14920, 14952, 14964, 14981, 14982, 14985, 14991, 14994, - 14996, 15000, 15003, 15006, 15007, 15014, 15020, 15023, 15036, 15054, - 15055, 15062, 15078, 15084, 15085, 15086, 15100, 15160, 15214, 15221, - 15232, 15234, 15283, 15285, 15287, 15304, 15305, 15307, 15309, 15327, - 15330, 15335, 15336, 15337, 15339, 15342, 15346, 15359, 15361, 15366, - 15380, 15381, 15394, 15395, 15405, 15406, 15409, 15416, 15418, 15419, - 15423, 15424, 15426, 15429, 15431, 15432, 15441, 15442, 15448, 15465, - 15480, 15485, 15488, 15490, 15492, 15493, 15497, 15506, 15529, 15536, - 15553, 15577, 15583, 15618, 15627. + 14894, 14908, 14909, 14920, 14952, 14964, 14981, 14982, 14985, 14991, + 14994, 14996, 15000, 15003, 15006, 15007, 15014, 15020, 15023, 15036, + 15054, 15055, 15062, 15078, 15084, 15085, 15086, 15100, 15160, 15214, + 15221, 15232, 15234, 15283, 15285, 15287, 15304, 15305, 15307, 15309, + 15327, 15330, 15335, 15336, 15337, 15339, 15342, 15346, 15359, 15361, + 15366, 15380, 15381, 15394, 15395, 15405, 15406, 15409, 15416, 15418, + 15419, 15423, 15424, 15426, 15429, 15431, 15432, 15441, 15442, 15448, + 15465, 15480, 15485, 15488, 15490, 15492, 15493, 15497, 15506, 15529, + 15536, 15553, 15577, 15583, 15618, 15627. * CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla #15078). diff --git a/ports/ChangeLog.mips b/ports/ChangeLog.mips index e876ee2651..66f859d997 100644 --- a/ports/ChangeLog.mips +++ b/ports/ChangeLog.mips @@ -1,5 +1,17 @@ 2013-06-14 Joseph Myers <joseph@codesourcery.com> + [BZ #14909] + * sysdeps/mips/bits/setjmp.h (struct __jmp_buf_internal_tag): + Rename __fpc_csr field to __glibc_reserved1. + * sysdeps/mips/setjmp_aux.c (__sigsetjmp_aux) [__mips_hard_float]: + Do not set __fpc_csr. + * sysdeps/mips/mips64/setjmp_aux.c (__sigsetjmp_aux) + [__mips_hard_float]: Likewise. + * sysdeps/mips/__longjmp.c (____longjmp) [__mips_hard_float]: Do + not use __fpc_csr. + * sysdeps/mips/mips64/__longjmp.c (__longjmp) [__mips_hard_float]: + Likewise. + * sysdeps/mips/math-tests.h: New file. 2013-06-05 Joseph Myers <joseph@codesourcery.com> diff --git a/ports/sysdeps/mips/__longjmp.c b/ports/sysdeps/mips/__longjmp.c index 67bdb86cf8..d1d7d64dfa 100644 --- a/ports/sysdeps/mips/__longjmp.c +++ b/ports/sysdeps/mips/__longjmp.c @@ -47,10 +47,6 @@ ____longjmp (env_arg, val_arg) asm volatile ("l.d $f26, %0" : : "m" (env[0].__fpregs[3])); asm volatile ("l.d $f28, %0" : : "m" (env[0].__fpregs[4])); asm volatile ("l.d $f30, %0" : : "m" (env[0].__fpregs[5])); - - /* Get and reconstruct the floating point csr. */ - asm volatile ("lw $2, %0" : : "m" (env[0].__fpc_csr)); - asm volatile ("ctc1 $2, $31"); #endif /* Get the GP. */ diff --git a/ports/sysdeps/mips/bits/setjmp.h b/ports/sysdeps/mips/bits/setjmp.h index d35b12dc65..437848fcb9 100644 --- a/ports/sysdeps/mips/bits/setjmp.h +++ b/ports/sysdeps/mips/bits/setjmp.h @@ -59,8 +59,8 @@ typedef struct __jmp_buf_internal_tag __extension__ long long __gp; #endif - /* Floating point status register. */ - int __fpc_csr; + /* Unused (was floating point status register). */ + int __glibc_reserved1; /* Callee-saved floating point registers. */ #if _MIPS_SIM == _ABI64 diff --git a/ports/sysdeps/mips/mips64/__longjmp.c b/ports/sysdeps/mips/mips64/__longjmp.c index 1e42e9c28f..bffb1137cd 100644 --- a/ports/sysdeps/mips/mips64/__longjmp.c +++ b/ports/sysdeps/mips/mips64/__longjmp.c @@ -59,10 +59,6 @@ __longjmp (env_arg, val_arg) asm volatile ("l.d $f28, %0" : : "m" (env[0].__fpregs[4])); asm volatile ("l.d $f30, %0" : : "m" (env[0].__fpregs[5])); #endif - - /* Get and reconstruct the floating point csr. */ - asm volatile ("lw $2, %0" : : "m" (env[0].__fpc_csr)); - asm volatile ("ctc1 $2, $31"); #endif /* Get the GP. */ diff --git a/ports/sysdeps/mips/mips64/setjmp_aux.c b/ports/sysdeps/mips/mips64/setjmp_aux.c index 9515f44b83..931830391b 100644 --- a/ports/sysdeps/mips/mips64/setjmp_aux.c +++ b/ports/sysdeps/mips/mips64/setjmp_aux.c @@ -71,11 +71,6 @@ __sigsetjmp_aux (jmp_buf env, int savemask, long long sp, long long fp, asm volatile ("sd $22, %0" : : "m" (env[0].__jmpbuf[0].__regs[6])); asm volatile ("sd $23, %0" : : "m" (env[0].__jmpbuf[0].__regs[7])); -#ifdef __mips_hard_float - /* .. and finally get and reconstruct the floating point csr. */ - asm ("cfc1 %0, $31" : "=r" (env[0].__jmpbuf[0].__fpc_csr)); -#endif - /* Save the signal mask if requested. */ return __sigjmp_save (env, savemask); } diff --git a/ports/sysdeps/mips/setjmp_aux.c b/ports/sysdeps/mips/setjmp_aux.c index cb9ea245bb..26715b77d8 100644 --- a/ports/sysdeps/mips/setjmp_aux.c +++ b/ports/sysdeps/mips/setjmp_aux.c @@ -58,11 +58,6 @@ __sigsetjmp_aux (jmp_buf env, int savemask, int sp, int fp) asm volatile ("sw $22, %0" : : "m" (env[0].__jmpbuf[0].__regs[6])); asm volatile ("sw $23, %0" : : "m" (env[0].__jmpbuf[0].__regs[7])); -#ifdef __mips_hard_float - /* .. and finally get and reconstruct the floating point csr. */ - asm ("cfc1 %0, $31" : "=r" (env[0].__jmpbuf[0].__fpc_csr)); -#endif - /* Save the signal mask if requested. */ return __sigjmp_save (env, savemask); } |