mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
target-arm: Clean up handling of AArch64 PSTATE
The env->pstate field is a little odd since it doesn't strictly speaking represent an architectural register. However it's convenient for QEMU to use it to hold the various PSTATE architectural bits in the same format the architecture specifies for SPSR registers (since this is the same format the kernel uses for signal handlers and the KVM register). Add some structure to how we deal with it: * document what env->pstate is * add some #defines for various bits in it * add helpers for reading/writing it taking account of caching of NZCV, and use them where appropriate * reset it on startup Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 1385645602-18662-3-git-send-email-peter.maydell@linaro.org Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
This commit is contained in:
parent
b197ebd410
commit
d356312fdc
5 changed files with 78 additions and 20 deletions
|
@ -1171,7 +1171,7 @@ static int target_setup_sigframe(struct target_rt_sigframe *sf,
|
|||
}
|
||||
__put_user(env->xregs[31], &sf->uc.tuc_mcontext.sp);
|
||||
__put_user(env->pc, &sf->uc.tuc_mcontext.pc);
|
||||
__put_user(env->pstate, &sf->uc.tuc_mcontext.pstate);
|
||||
__put_user(pstate_read(env), &sf->uc.tuc_mcontext.pstate);
|
||||
|
||||
__put_user(/*current->thread.fault_address*/ 0,
|
||||
&sf->uc.tuc_mcontext.fault_address);
|
||||
|
@ -1210,6 +1210,7 @@ static int target_restore_sigframe(CPUARMState *env,
|
|||
struct target_aux_context *aux =
|
||||
(struct target_aux_context *)sf->uc.tuc_mcontext.__reserved;
|
||||
uint32_t magic, size;
|
||||
uint64_t pstate;
|
||||
|
||||
target_to_host_sigset(&set, &sf->uc.tuc_sigmask);
|
||||
sigprocmask(SIG_SETMASK, &set, NULL);
|
||||
|
@ -1220,7 +1221,8 @@ static int target_restore_sigframe(CPUARMState *env,
|
|||
|
||||
__get_user(env->xregs[31], &sf->uc.tuc_mcontext.sp);
|
||||
__get_user(env->pc, &sf->uc.tuc_mcontext.pc);
|
||||
__get_user(env->pstate, &sf->uc.tuc_mcontext.pstate);
|
||||
__get_user(pstate, &sf->uc.tuc_mcontext.pstate);
|
||||
pstate_write(env, pstate);
|
||||
|
||||
__get_user(magic, &aux->fpsimd.head.magic);
|
||||
__get_user(size, &aux->fpsimd.head.size);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue