[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 21/27] linux-user/nios2: Fix EA vs PC confusion
|
From: |
Laurent Vivier |
|
Subject: |
[PULL 21/27] linux-user/nios2: Fix EA vs PC confusion |
|
Date: |
Thu, 6 Jan 2022 11:41:31 +0100 |
From: Richard Henderson <richard.henderson@linaro.org>
The real kernel will talk about the user PC as EA,
because that's where the hardware will have copied it,
and where it expects to put it to then use ERET.
But qemu does not emulate all of the exception stuff
while emulating user-only. Manipulate PC directly.
This fixes signal entry and return, and eliminates
some slight confusion from target_cpu_copy_regs.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20211221025012.1057923-6-richard.henderson@linaro.org>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
linux-user/nios2/cpu_loop.c | 5 +----
linux-user/nios2/signal.c | 6 +++---
2 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/linux-user/nios2/cpu_loop.c b/linux-user/nios2/cpu_loop.c
index de0fc63e2196..1e93ef34e649 100644
--- a/linux-user/nios2/cpu_loop.c
+++ b/linux-user/nios2/cpu_loop.c
@@ -155,9 +155,6 @@ void target_cpu_copy_regs(CPUArchState *env, struct
target_pt_regs *regs)
env->regs[R_SP] = regs->sp;
env->regs[R_GP] = regs->gp;
env->regs[CR_ESTATUS] = regs->estatus;
- env->regs[R_EA] = regs->ea;
- /* TODO: unsigned long orig_r7; */
-
- /* Emulate eret when starting thread. */
env->regs[R_PC] = regs->ea;
+ /* TODO: unsigned long orig_r7; */
}
diff --git a/linux-user/nios2/signal.c b/linux-user/nios2/signal.c
index adbffe32e3c8..20b65aa06e08 100644
--- a/linux-user/nios2/signal.c
+++ b/linux-user/nios2/signal.c
@@ -73,7 +73,7 @@ static void rt_setup_ucontext(struct target_ucontext *uc,
CPUNios2State *env)
__put_user(env->regs[R_RA], &gregs[23]);
__put_user(env->regs[R_FP], &gregs[24]);
__put_user(env->regs[R_GP], &gregs[25]);
- __put_user(env->regs[R_EA], &gregs[27]);
+ __put_user(env->regs[R_PC], &gregs[27]);
__put_user(env->regs[R_SP], &gregs[28]);
}
@@ -122,7 +122,7 @@ static int rt_restore_ucontext(CPUNios2State *env, struct
target_ucontext *uc,
__get_user(env->regs[R_GP], &gregs[25]);
/* Not really necessary no user settable bits */
__get_user(temp, &gregs[26]);
- __get_user(env->regs[R_EA], &gregs[27]);
+ __get_user(env->regs[R_PC], &gregs[27]);
__get_user(env->regs[R_RA], &gregs[23]);
__get_user(env->regs[R_SP], &gregs[28]);
@@ -181,7 +181,7 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
env->regs[4] = sig;
env->regs[5] = frame_addr + offsetof(struct target_rt_sigframe, info);
env->regs[6] = frame_addr + offsetof(struct target_rt_sigframe, uc);
- env->regs[R_EA] = ka->_sa_handler;
+ env->regs[R_PC] = ka->_sa_handler;
unlock_user_struct(frame, frame_addr, 1);
}
--
2.33.1
- [PULL 22/27] linux-user/nios2: Fix sigmask in setup_rt_frame, (continued)
- [PULL 22/27] linux-user/nios2: Fix sigmask in setup_rt_frame, Laurent Vivier, 2022/01/06
- [PULL 26/27] linux-user: netlink: Add IFLA_VFINFO_LIST, Laurent Vivier, 2022/01/06
- [PULL 09/27] linux-user: Add code for PR_GET/SET_UNALIGN, Laurent Vivier, 2022/01/06
- [PULL 20/27] linux-user/nios2: Map a real kuser page, Laurent Vivier, 2022/01/06
- [PULL 02/27] linux-user/hexagon: Use generic target_stat64 structure, Laurent Vivier, 2022/01/06
- [PULL 16/27] linux-user/syscall.c: fix missed flag for shared memory in open_self_maps, Laurent Vivier, 2022/01/06
- [PULL 27/27] linux-user: netlink: update IFLA_BRPORT entries, Laurent Vivier, 2022/01/06
- [PULL 07/27] linux-user: Split out do_prctl and subroutines, Laurent Vivier, 2022/01/06
- [PULL 25/27] linux-user: netlink: update IFLA entries, Laurent Vivier, 2022/01/06
- [PULL 21/27] linux-user/nios2: Fix EA vs PC confusion,
Laurent Vivier <=
- [PULL 08/27] linux-user: Disable more prctl subcodes, Laurent Vivier, 2022/01/06
- [PULL 19/27] linux-user/elfload: Rename ARM_COMMPAGE to HI_COMMPAGE, Laurent Vivier, 2022/01/06
- [PULL 23/27] linux-user/nios2: Use set_sigmask in do_rt_sigreturn, Laurent Vivier, 2022/01/06
- [PULL 24/27] linux-user/syscall.c: malloc to g_try_malloc, Laurent Vivier, 2022/01/06
- [PULL 05/27] linux-user: target_syscall.h remove definition TARGET_MINSIGSTKSZ, Laurent Vivier, 2022/01/06
- Re: [PULL 00/27] Linux user for 7.0 patches, Richard Henderson, 2022/01/06