From 0175558aa0a16a647ee368898a83a7d42e2011e8 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 14 May 2013 19:50:14 +0000 Subject: Stop ARM setjmp/longjmp saving/restoring fpscr (bug 14908). --- NEWS | 14 +++++++------- ports/ChangeLog.arm | 8 ++++++++ ports/sysdeps/arm/__longjmp.S | 5 ----- ports/sysdeps/arm/bits/setjmp.h | 6 +++--- ports/sysdeps/arm/setjmp.S | 5 ----- 5 files changed, 18 insertions(+), 20 deletions(-) diff --git a/NEWS b/NEWS index 027ceab2e5..72c6a1c717 100644 --- a/NEWS +++ b/NEWS @@ -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). diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm index 2565518c5e..ce5fc360b1 100644 --- a/ports/ChangeLog.arm +++ b/ports/ChangeLog.arm @@ -1,3 +1,11 @@ +2013-05-14 Joseph Myers + + [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 * sysdeps/arm/armv7/multiarch/memcpy.S [__ARM_NEON__]: Don't define diff --git a/ports/sysdeps/arm/__longjmp.S b/ports/sysdeps/arm/__longjmp.S index 8de9fa1c7b..a5edede16d 100644 --- a/ports/sysdeps/arm/__longjmp.S +++ b/ports/sysdeps/arm/__longjmp.S @@ -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 diff --git a/ports/sysdeps/arm/bits/setjmp.h b/ports/sysdeps/arm/bits/setjmp.h index 21bbf7f57d..c8c3a9a324 100644 --- a/ports/sysdeps/arm/bits/setjmp.h +++ b/ports/sysdeps/arm/bits/setjmp.h @@ -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 diff --git a/ports/sysdeps/arm/setjmp.S b/ports/sysdeps/arm/setjmp.S index f750470652..a6c161db54 100644 --- a/ports/sysdeps/arm/setjmp.S +++ b/ports/sysdeps/arm/setjmp.S @@ -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 -- cgit 1.4.1