[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 21/59] linux-user/sparc: Fix the stackframe structure
From: |
Laurent Vivier |
Subject: |
[PULL 21/59] linux-user/sparc: Fix the stackframe structure |
Date: |
Mon, 17 May 2021 20:13:46 +0200 |
From: Richard Henderson <richard.henderson@linaro.org>
Move target_reg_window up and use it. Fold structptr and xxargs
into xargs -- the use of a host pointer was incorrect anyway.
Rename the structure to target_stackf for consistency.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20210426025334.1168495-15-richard.henderson@linaro.org>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
linux-user/sparc/signal.c | 38 +++++++++++++++++++++-----------------
1 file changed, 21 insertions(+), 17 deletions(-)
diff --git a/linux-user/sparc/signal.c b/linux-user/sparc/signal.c
index 29c5e3b0c0be..3474098641a6 100644
--- a/linux-user/sparc/signal.c
+++ b/linux-user/sparc/signal.c
@@ -21,16 +21,26 @@
#include "signal-common.h"
#include "linux-user/trace.h"
-/* A Sparc stack frame */
-struct sparc_stackf {
+/* A Sparc register window */
+struct target_reg_window {
abi_ulong locals[8];
abi_ulong ins[8];
- /* It's simpler to treat fp and callers_pc as elements of ins[]
- * since we never need to access them ourselves.
- */
- char *structptr;
- abi_ulong xargs[6];
- abi_ulong xxargs[1];
+};
+
+/* A Sparc stack frame. */
+struct target_stackf {
+ /*
+ * Since qemu does not reference fp or callers_pc directly,
+ * it's simpler to treat fp and callers_pc as elements of ins[],
+ * and then bundle locals[] and ins[] into reg_window.
+ */
+ struct target_reg_window win;
+ /*
+ * Similarly, bundle structptr and xxargs into xargs[].
+ * This portion of the struct is part of the function call abi,
+ * and belongs to the callee for spilling argument registers.
+ */
+ abi_ulong xargs[8];
};
typedef struct {
@@ -56,7 +66,7 @@ typedef struct {
struct target_signal_frame {
- struct sparc_stackf ss;
+ struct target_stackf ss;
__siginfo_t info;
abi_ulong fpu_save;
uint32_t insns[2] QEMU_ALIGNED(8);
@@ -150,10 +160,10 @@ void setup_frame(int sig, struct target_sigaction *ka,
}
for (i = 0; i < 8; i++) {
- __put_user(env->regwptr[i + WREG_L0], &sf->ss.locals[i]);
+ __put_user(env->regwptr[i + WREG_L0], &sf->ss.win.locals[i]);
}
for (i = 0; i < 8; i++) {
- __put_user(env->regwptr[i + WREG_I0], &sf->ss.ins[i]);
+ __put_user(env->regwptr[i + WREG_I0], &sf->ss.win.ins[i]);
}
if (err)
goto sigsegv;
@@ -349,12 +359,6 @@ struct target_ucontext {
target_mcontext_t tuc_mcontext;
};
-/* A V9 register window */
-struct target_reg_window {
- abi_ulong locals[8];
- abi_ulong ins[8];
-};
-
/* {set, get}context() needed for 64-bit SparcLinux userland. */
void sparc64_set_context(CPUSPARCState *env)
{
--
2.31.1
- [PULL 13/59] linux-user/sparc: Clean up init_thread, (continued)
- [PULL 13/59] linux-user/sparc: Clean up init_thread, Laurent Vivier, 2021/05/17
- [PULL 11/59] linux-user: Pass CPUArchState to target_restore_altstack, Laurent Vivier, 2021/05/17
- [PULL 17/59] linux-user/sparc: Merge sparc64 termbits.h, Laurent Vivier, 2021/05/17
- [PULL 03/59] linux-user/arm: Split out emulate_arm_fpa11, Laurent Vivier, 2021/05/17
- [PULL 12/59] linux-user/sparc: Include TARGET_STACK_BIAS in get_sp_from_cpustate, Laurent Vivier, 2021/05/17
- [PULL 16/59] linux-user/sparc: Merge sparc64 target_structs.h, Laurent Vivier, 2021/05/17
- [PULL 19/59] linux-user/sparc: Remove target_sigcontext as unused, Laurent Vivier, 2021/05/17
- [PULL 20/59] linux-user/sparc: Remove target_rt_signal_frame as unused, Laurent Vivier, 2021/05/17
- [PULL 22/59] linux-user/sparc: Use target_pt_regs, Laurent Vivier, 2021/05/17
- [PULL 25/59] linux-user/sparc: Save and restore fpu in signal frame, Laurent Vivier, 2021/05/17
- [PULL 21/59] linux-user/sparc: Fix the stackframe structure,
Laurent Vivier <=
- [PULL 04/59] linux-user/arm: Do not emulate fpa11 in thumb mode, Laurent Vivier, 2021/05/17
- [PULL 09/59] linux-user: Use target_restore_altstack in all sigreturn, Laurent Vivier, 2021/05/17
- [PULL 10/59] linux-user: Pass CPUArchState to do_sigaltstack, Laurent Vivier, 2021/05/17
- [PULL 29/59] linux-user/sparc: Add 64-bit support to fpu save/restore, Laurent Vivier, 2021/05/17
- [PULL 18/59] linux-user/sparc: Merge sparc64/ into sparc/, Laurent Vivier, 2021/05/17
- [PULL 30/59] linux-user/sparc: Implement sparc32 rt signals, Laurent Vivier, 2021/05/17
- [PULL 32/59] tests/tcg/sparc64: Re-enable linux-test, Laurent Vivier, 2021/05/17
- [PULL 28/59] linux-user/sparc: Minor corrections to do_sigreturn, Laurent Vivier, 2021/05/17
- [PULL 36/59] linux-user/s390x: Remove restore_sigregs return value, Laurent Vivier, 2021/05/17
- [PULL 37/59] linux-user/s390x: Fix trace in restore_regs, Laurent Vivier, 2021/05/17