Stop MIPS setjmp / longjmp saving / restoring floating-point flags (bug 14909).

This commit is contained in:
Joseph Myers 2013-06-14 21:42:24 +00:00
parent c69f6af9e5
commit 601eb33deb
7 changed files with 23 additions and 29 deletions

18
NEWS
View file

@ -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).

View file

@ -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>

View file

@ -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. */

View file

@ -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

View file

@ -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. */

View file

@ -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);
}

View file

@ -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);
}