diff options
author | Joseph Myers <joseph@codesourcery.com> | 2013-05-14 19:50:14 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2013-05-14 19:50:14 +0000 |
commit | 0175558aa0a16a647ee368898a83a7d42e2011e8 (patch) | |
tree | 787d4afa4e51b49fa91c279eb8864da3d82ad933 /ports | |
parent | 2bcb36b265ea2677198c22d005873b9b9600137e (diff) | |
download | glibc-0175558aa0a16a647ee368898a83a7d42e2011e8.tar.gz glibc-0175558aa0a16a647ee368898a83a7d42e2011e8.tar.xz glibc-0175558aa0a16a647ee368898a83a7d42e2011e8.zip |
Stop ARM setjmp/longjmp saving/restoring fpscr (bug 14908).
Diffstat (limited to 'ports')
-rw-r--r-- | ports/ChangeLog.arm | 8 | ||||
-rw-r--r-- | ports/sysdeps/arm/__longjmp.S | 5 | ||||
-rw-r--r-- | ports/sysdeps/arm/bits/setjmp.h | 6 | ||||
-rw-r--r-- | ports/sysdeps/arm/setjmp.S | 5 |
4 files changed, 11 insertions, 13 deletions
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 <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 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 |