aboutsummaryrefslogtreecommitdiff
path: root/linux-user/nios2
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2021-04-25 19:53:11 -0700
committerLaurent Vivier <laurent@vivier.eu>2021-05-15 21:43:23 +0200
commit56384cf3adaeb15bab479be328605e301ae253f2 (patch)
tree21e7e2d6cd96a0b2da2879ea30488b6e39845356 /linux-user/nios2
parent92bad948367c4b8a58f6bb81b45750f1d583f274 (diff)
downloadqemu-56384cf3adaeb15bab479be328605e301ae253f2.zip
qemu-56384cf3adaeb15bab479be328605e301ae253f2.tar.gz
qemu-56384cf3adaeb15bab479be328605e301ae253f2.tar.bz2
linux-user: Use target_restore_altstack in all sigreturn
Note that target_restore_altstack uses the host memory pointer that we have already verified, so TARGET_EFAULT is not a possible return value. Note that using -EFAULT was a bug. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20210426025334.1168495-3-richard.henderson@linaro.org> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Diffstat (limited to 'linux-user/nios2')
-rw-r--r--linux-user/nios2/signal.c8
1 files changed, 1 insertions, 7 deletions
diff --git a/linux-user/nios2/signal.c b/linux-user/nios2/signal.c
index 7d53506..751ea88 100644
--- a/linux-user/nios2/signal.c
+++ b/linux-user/nios2/signal.c
@@ -82,9 +82,7 @@ static int rt_restore_ucontext(CPUNios2State *env, struct target_ucontext *uc,
int *pr2)
{
int temp;
- abi_ulong off, frame_addr = env->regs[R_SP];
unsigned long *gregs = uc->tuc_mcontext.gregs;
- int err;
/* Always make any pending restarted system calls return -EINTR */
/* current->restart_block.fn = do_no_restart_syscall; */
@@ -130,11 +128,7 @@ static int rt_restore_ucontext(CPUNios2State *env, struct target_ucontext *uc,
__get_user(env->regs[R_RA], &gregs[23]);
__get_user(env->regs[R_SP], &gregs[28]);
- off = offsetof(struct target_rt_sigframe, uc.tuc_stack);
- err = do_sigaltstack(frame_addr + off, 0, get_sp_from_cpustate(env));
- if (err == -EFAULT) {
- return 1;
- }
+ target_restore_altstack(&uc->tuc_stack, get_sp_from_cpustate(env));
*pr2 = env->regs[2];
return 0;