[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 05/25] linux-user/sparc: Include TARGET_STACK_BIAS in get_sp_f
From: |
Richard Henderson |
Subject: |
[PATCH v2 05/25] linux-user/sparc: Include TARGET_STACK_BIAS in get_sp_from_cpustate |
Date: |
Sun, 25 Apr 2021 19:53:14 -0700 |
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>
---
linux-user/sparc/target_cpu.h | 9 ++++++++-
linux-user/sparc/signal.c | 2 --
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/linux-user/sparc/target_cpu.h b/linux-user/sparc/target_cpu.h
index 1fa1011775..1f4bed50f4 100644
--- a/linux-user/sparc/target_cpu.h
+++ b/linux-user/sparc/target_cpu.h
@@ -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
diff --git a/linux-user/sparc/signal.c b/linux-user/sparc/signal.c
index d27b7a3af7..76579093a8 100644
--- a/linux-user/sparc/signal.c
+++ b/linux-user/sparc/signal.c
@@ -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)
{
--
2.25.1
- [PATCH v2 00/25] linux-user/sparc: Implement rt signals, Richard Henderson, 2021/04/25
- [PATCH v2 01/25] linux-user: Split out target_restore_altstack, Richard Henderson, 2021/04/25
- [PATCH v2 02/25] linux-user: Use target_restore_altstack in all sigreturn, Richard Henderson, 2021/04/25
- [PATCH v2 03/25] linux-user: Pass CPUArchState to do_sigaltstack, Richard Henderson, 2021/04/25
- [PATCH v2 07/25] linux-user/sparc: Merge sparc64 target_syscall.h, Richard Henderson, 2021/04/25
- [PATCH v2 04/25] linux-user: Pass CPUArchState to target_restore_altstack, Richard Henderson, 2021/04/25
- [PATCH v2 06/25] linux-user/sparc: Clean up init_thread, Richard Henderson, 2021/04/25
- [PATCH v2 16/25] linux-user/sparc: Split out save_reg_win, Richard Henderson, 2021/04/25
- [PATCH v2 17/25] linux-user/sparc: Clean up get_sigframe, Richard Henderson, 2021/04/25
- [PATCH v2 05/25] linux-user/sparc: Include TARGET_STACK_BIAS in get_sp_from_cpustate,
Richard Henderson <=
- [PATCH v2 10/25] linux-user/sparc: Merge sparc64 termbits.h, Richard Henderson, 2021/04/25
- [PATCH v2 22/25] linux-user/sparc: Add 64-bit support to fpu save/restore, Richard Henderson, 2021/04/25
- [PATCH v2 11/25] linux-user/sparc: Merge sparc64/ into sparc/, Richard Henderson, 2021/04/25
- [PATCH v2 14/25] linux-user/sparc: Fix the stackframe structure, Richard Henderson, 2021/04/25
- [PATCH v2 13/25] linux-user/sparc: Remove target_rt_signal_frame as unused, Richard Henderson, 2021/04/25
- [PATCH v2 15/25] linux-user/sparc: Use target_pt_regs, Richard Henderson, 2021/04/25
- [PATCH v2 20/25] linux-user/sparc: Clean up setup_frame, Richard Henderson, 2021/04/25
- [PATCH v2 24/25] linux-user/sparc: Implement sparc64 rt signals, Richard Henderson, 2021/04/25
- [PATCH v2 09/25] linux-user/sparc: Merge sparc64 target_structs.h, Richard Henderson, 2021/04/25
- [PATCH v2 25/25] tests/tcg/sparc64: Re-enable linux-test, Richard Henderson, 2021/04/25