Commit be2f08ed authored by Alexander Kartashov's avatar Alexander Kartashov Committed by Pavel Emelyanov

sigframe: introduced the macros to access the FPU state

An fpu_state_t instance shouldn't be stored in an ARM sigframe
that makes it necessary to generalize the way the FPU state is
accessed in the routine construct_sigframe()
Signed-off-by: 's avatarAlexander Kartashov <alekskartashov@parallels.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 03a9c6b0
...@@ -125,6 +125,8 @@ struct rt_sigframe { ...@@ -125,6 +125,8 @@ struct rt_sigframe {
#define RT_SIGFRAME_UC(rt_sigframe) rt_sigframe->sig.uc #define RT_SIGFRAME_UC(rt_sigframe) rt_sigframe->sig.uc
#define RT_SIGFRAME_REGIP(rt_sigframe) (rt_sigframe)->sig.uc.uc_mcontext.arm_ip #define RT_SIGFRAME_REGIP(rt_sigframe) (rt_sigframe)->sig.uc.uc_mcontext.arm_ip
#define RT_SIGFRAME_HAS_FPU(rt_sigframe) 1
#define RT_SIGFRAME_FPU(rt_sigframe) ((struct aux_sigframe *)&sigframe->sig.uc.uc_regspace)->vfp
#define SIGFRAME_OFFSET 0 #define SIGFRAME_OFFSET 0
......
...@@ -132,6 +132,8 @@ struct rt_sigframe { ...@@ -132,6 +132,8 @@ struct rt_sigframe {
#define RT_SIGFRAME_UC(rt_sigframe) rt_sigframe->uc #define RT_SIGFRAME_UC(rt_sigframe) rt_sigframe->uc
#define RT_SIGFRAME_REGIP(rt_sigframe) (rt_sigframe)->uc.uc_mcontext.rip #define RT_SIGFRAME_REGIP(rt_sigframe) (rt_sigframe)->uc.uc_mcontext.rip
#define RT_SIGFRAME_HAS_FPU(rt_sigframe) (rt_sigframe)->fpu_state.has_fpu
#define RT_SIGFRAME_FPU(rt_sigframe) (rt_sigframe)->fpu_state
#define SIGFRAME_OFFSET 8 #define SIGFRAME_OFFSET 8
......
...@@ -20,12 +20,11 @@ int construct_sigframe(struct rt_sigframe *sigframe, ...@@ -20,12 +20,11 @@ int construct_sigframe(struct rt_sigframe *sigframe,
} else } else
memset(blk_sigset, 0, sizeof(k_rtsigset_t)); memset(blk_sigset, 0, sizeof(k_rtsigset_t));
sigframe->fpu_state.has_fpu = true;
if (restore_fpu(sigframe, core)) if (restore_fpu(sigframe, core))
return -1; return -1;
if (sigframe->fpu_state.has_fpu) if (RT_SIGFRAME_HAS_FPU(sigframe))
if (sigreturn_prep_fpu_frame(sigframe, &rsigframe->fpu_state)) if (sigreturn_prep_fpu_frame(sigframe, &RT_SIGFRAME_FPU(rsigframe)))
return -1; return -1;
if (restore_gpregs(sigframe, CORE_THREAD_ARCH_INFO(core)->gpregs)) if (restore_gpregs(sigframe, CORE_THREAD_ARCH_INFO(core)->gpregs))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment