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 /ports | |
parent | c69f6af9e5a03620c253e75fd925d38adaa3c039 (diff) | |
download | glibc-601eb33debf0c7548f52ba72cec4b3f362105e39.tar glibc-601eb33debf0c7548f52ba72cec4b3f362105e39.tar.gz glibc-601eb33debf0c7548f52ba72cec4b3f362105e39.tar.bz2 glibc-601eb33debf0c7548f52ba72cec4b3f362105e39.zip |
Stop MIPS setjmp / longjmp saving / restoring floating-point flags (bug 14909).
Diffstat (limited to 'ports')
-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 |
6 files changed, 14 insertions, 20 deletions
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); } |