1
From 0f41976636693c12e28a3bb97b84d6ec07ba2330 Mon Sep 17 00:00:00 2001
2
From: Will Newton <will.newton@linaro.org>
3
Date: Sat, 4 Jan 2014 22:15:48 +0000
4
Subject: [PATCH 073/158] linux-user: AArch64: Use correct values for FPSR/FPCR
7
Use the helpers provided for getting the correct FPSR and FPCR
8
values for the signal context.
10
Signed-off-by: Will Newton <will.newton@linaro.org>
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
Reviewed-by: Richard Henderson <rth@twiddle.net>
14
linux-user/signal.c | 10 +++++++---
15
1 file changed, 7 insertions(+), 3 deletions(-)
17
diff --git a/linux-user/signal.c b/linux-user/signal.c
18
index 4e7148a..6c74b18 100644
19
--- a/linux-user/signal.c
20
+++ b/linux-user/signal.c
21
@@ -1189,8 +1189,8 @@ static int target_setup_sigframe(struct target_rt_sigframe *sf,
22
__put_user(env->vfp.regs[i * 2 + 1], &aux->fpsimd.vregs[i * 2 + 1]);
25
- __put_user(/*env->fpsr*/0, &aux->fpsimd.fpsr);
26
- __put_user(/*env->fpcr*/0, &aux->fpsimd.fpcr);
27
+ __put_user(vfp_get_fpsr(env), &aux->fpsimd.fpsr);
28
+ __put_user(vfp_get_fpcr(env), &aux->fpsimd.fpcr);
29
__put_user(TARGET_FPSIMD_MAGIC, &aux->fpsimd.head.magic);
30
__put_user(sizeof(struct target_fpsimd_context),
31
&aux->fpsimd.head.size);
32
@@ -1209,7 +1209,7 @@ static int target_restore_sigframe(CPUARMState *env,
34
struct target_aux_context *aux =
35
(struct target_aux_context *)sf->uc.tuc_mcontext.__reserved;
36
- uint32_t magic, size;
37
+ uint32_t magic, size, fpsr, fpcr;
40
target_to_host_sigset(&set, &sf->uc.tuc_sigmask);
41
@@ -1235,6 +1235,10 @@ static int target_restore_sigframe(CPUARMState *env,
42
for (i = 0; i < 32 * 2; i++) {
43
__get_user(env->vfp.regs[i], &aux->fpsimd.vregs[i]);
45
+ __get_user(fpsr, &aux->fpsimd.fpsr);
46
+ vfp_set_fpsr(env, fpsr);
47
+ __get_user(fpcr, &aux->fpsimd.fpcr);
48
+ vfp_set_fpcr(env, fpcr);