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/sysdeps/arm | |
parent | 2bcb36b265ea2677198c22d005873b9b9600137e (diff) | |
download | glibc-0175558aa0a16a647ee368898a83a7d42e2011e8.tar.gz |
Stop ARM setjmp/longjmp saving/restoring fpscr (bug 14908).
Diffstat (limited to 'ports/sysdeps/arm')
-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 |
3 files changed, 3 insertions, 13 deletions
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 |