On 2017-07-06 16:20, Richard Henderson wrote: > If a signal is delivered during the execution of a delay slot, > or a gUSA region, clear those bits from the environment so that > the signal handler does not start in that same state.
How are signals delivered in linux-user? At least in system mode we forbid interrupts in the delay slot (see commit 5c6f3eb7db), as the manual clearly declare them as indivisible. Maybe the same should be done for linux-user? > > Cleaning the bits on signal return is paranoid good sense. > > Signed-off-by: Richard Henderson <r...@twiddle.net> > --- > linux-user/signal.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/linux-user/signal.c b/linux-user/signal.c > index a537778..8c0b851 100644 > --- a/linux-user/signal.c > +++ b/linux-user/signal.c > @@ -3544,6 +3544,7 @@ static void restore_sigcontext(CPUSH4State *regs, > struct target_sigcontext *sc) > __get_user(regs->fpul, &sc->sc_fpul); > > regs->tra = -1; /* disable syscall checks */ > + regs->flags &= ~(DELAY_SLOT_MASK | GUSA_MASK); > } > > static void setup_frame(int sig, struct target_sigaction *ka, Why not using TB_FLAG_ENVFLAGS_MASK introduced earlier in this patch series? -- Aurelien Jarno GPG: 4096R/1DDD8C9B aurel...@aurel32.net http://www.aurel32.net