linux-user/sparc: Include TARGET_STACK_BIAS in get_sp_from_cpustate

Move TARGET_STACK_BIAS from signal.c.  Generic code cares about the
logical stack pointer, not the physical one that has a bias applied
for sparc64.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20210426025334.1168495-6-richard.henderson@linaro.org>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
Richard Henderson 2021-04-25 19:53:14 -07:00 committed by Laurent Vivier
parent ddc3e74d9c
commit eb215f40c2
2 changed files with 8 additions and 3 deletions

View file

@ -394,8 +394,6 @@ struct target_reg_window {
abi_ulong ins[8];
};
#define TARGET_STACK_BIAS 2047
/* {set, get}context() needed for 64-bit SparcLinux userland. */
void sparc64_set_context(CPUSPARCState *env)
{

View file

@ -20,6 +20,12 @@
#ifndef SPARC_TARGET_CPU_H
#define SPARC_TARGET_CPU_H
#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
# define TARGET_STACK_BIAS 2047
#else
# define TARGET_STACK_BIAS 0
#endif
static inline void cpu_clone_regs_child(CPUSPARCState *env, target_ulong newsp,
unsigned flags)
{
@ -40,6 +46,7 @@ static inline void cpu_clone_regs_child(CPUSPARCState *env, target_ulong newsp,
#endif
/* ??? The kernel appears to copy one stack frame to the new stack. */
/* ??? The kernel force aligns the new stack. */
/* Userspace provides a biased stack pointer value. */
env->regwptr[WREG_SP] = newsp;
}
@ -77,7 +84,7 @@ static inline void cpu_set_tls(CPUSPARCState *env, target_ulong newtls)
static inline abi_ulong get_sp_from_cpustate(CPUSPARCState *state)
{
return state->regwptr[WREG_SP];
return state->regwptr[WREG_SP] + TARGET_STACK_BIAS;
}
#endif