Stop ARM setjmp/longjmp saving/restoring fpscr (bug 14908).

This commit is contained in:
Joseph Myers 2013-05-14 19:50:14 +00:00
parent 2bcb36b265
commit 0175558aa0
5 changed files with 18 additions and 20 deletions

14
NEWS
View File

@ -11,13 +11,13 @@ 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, 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.
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.
* CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
#15078).

View File

@ -1,3 +1,11 @@
2013-05-14 Joseph Myers <joseph@codesourcery.com>
[BZ #14908]
* sysdeps/arm/setjmp.S (__sigsetjmp): Don't save fpscr.
* sysdeps/arm/__longjmp.S (__longjmp): Don't restore fpscr.
* sysdeps/arm/bits/setjmp.h (__jmp_buf): Don't mention fpscr in
comment.
2013-05-13 Roland McGrath <roland@hack.frob.com>
* sysdeps/arm/armv7/multiarch/memcpy.S [__ARM_NEON__]: Don't define

View File

@ -83,11 +83,6 @@ ENTRY (__longjmp)
/* Following instruction is vldmia ip!, {d8-d15}. */
sfi_breg r12, \
ldc p11, cr8, [\B], #64
/* Restore the floating-point status register. */
sfi_breg ip, \
ldr a3, [\B], #4
/* Following instruction is fmxr fpscr, a3. */
mcr p10, 7, a3, cr1, cr0, 0
.Lno_vfp:
#ifndef ARM_ASSUME_NO_IWMMXT

View File

@ -28,9 +28,9 @@
/* The exact set of registers saved may depend on the particular core
in use, as some coprocessor registers may need to be saved. The C
Library ABI requires that the buffer be 8-byte aligned, and
recommends that the buffer contain 64 words. The first 28 words
are occupied by v1-v6, sl, fp, sp, pc, d8-d15, and fpscr. (Note
that d8-15 require 17 words, due to the use of fstmx.) */
recommends that the buffer contain 64 words. The first 27 words
are occupied by v1-v6, sl, fp, sp, pc, and d8-d15. (Note that
d8-15 require 17 words, due to the use of fstmx.) */
typedef int __jmp_buf[64] __attribute__((__aligned__ (8)));
#endif

View File

@ -67,11 +67,6 @@ ENTRY (__sigsetjmp)
/* Following instruction is vstmia ip!, {d8-d15}. */
sfi_breg ip, \
stc p11, cr8, [\B], #64
/* Store the floating-point status register. */
/* Following instruction is vmrs a4, fpscr. */
mrc p10, 7, a4, cr1, cr0, 0
sfi_breg ip, \
str a4, [\B], #4
.Lno_vfp:
#ifndef ARM_ASSUME_NO_IWMMXT