On 4/16/21 5:49 PM, Alex Bennée wrote: > This is a left over erroneous check from the days front-ends handled > io start/end themselves. Regardless just because IO could be performed > on the last instruction doesn't obligate the front end to do so. > > This fixes an abort faced by the aspeed execute-in-place support which > will necessarily trigger this state (even before the one-shot > CF_LAST_IO fix). The test still seems to hang once it attempts to boot > the Linux kernel but I suspect this is an unrelated issue with icount > and the timer handling code. > > Signed-off-by: Alex Bennée <alex.ben...@linaro.org> > Cc: Cédric Le Goater <c...@kaod.org>
Tested-by: Cédric Le Goater <c...@kaod.org> Thanks, C. > --- > target/arm/translate.c | 5 ----- > 1 file changed, 5 deletions(-) > > diff --git a/target/arm/translate.c b/target/arm/translate.c > index 62b1c2081b..7103da2d7a 100644 > --- a/target/arm/translate.c > +++ b/target/arm/translate.c > @@ -9199,11 +9199,6 @@ static void arm_tr_tb_stop(DisasContextBase *dcbase, > CPUState *cpu) > { > DisasContext *dc = container_of(dcbase, DisasContext, base); > > - if (tb_cflags(dc->base.tb) & CF_LAST_IO && dc->condjmp) { > - /* FIXME: This can theoretically happen with self-modifying code. */ > - cpu_abort(cpu, "IO on conditional branch instruction"); > - } > - > /* At this stage dc->condjmp will only be set when the skipped > instruction was a conditional branch or trap, and the PC has > already been written. */ >