Le 05/11/2020 à 22:23, Peter Maydell a écrit : > The function do_sigreturn() tries to store the PC, NPC and PSR in > uint32_t local variables, which implicitly drops the high half of > these fields for 64-bit guests. > > The usual effect was that a guest which used signals would crash on > return from a signal unless it was lucky enough to take it while the > PC was in the low 4GB of the address space. In particular, Debian > /bin/dash and /bin/bash would segfault after executing external > commands. > > Use abi_ulong, which is the type these fields all have in the > __siginfo_t struct. > > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> > --- > linux-user/sparc/signal.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/linux-user/sparc/signal.c b/linux-user/sparc/signal.c > index c315704b389..d12adc8e6ff 100644 > --- a/linux-user/sparc/signal.c > +++ b/linux-user/sparc/signal.c > @@ -247,7 +247,7 @@ long do_sigreturn(CPUSPARCState *env) > { > abi_ulong sf_addr; > struct target_signal_frame *sf; > - uint32_t up_psr, pc, npc; > + abi_ulong up_psr, pc, npc; > target_sigset_t set; > sigset_t host_set; > int i; >
Applied to my linux-user-for-5.2 branch. Thanks, Laurent