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:
parent
ddc3e74d9c
commit
eb215f40c2
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user