On Wed, Apr 11, 2018 at 4:19 AM, Emilio G. Cota <c...@braap.org> wrote:
> If the PC is in the last page of the address space, next_page_start > overflows to 0. Fix it. > > Reported-by: Richard Henderson <richard.hender...@linaro.org> > Suggested-by: Richard Henderson <richard.hender...@linaro.org> > Cc: Michael Clark <m...@sifive.com> > Cc: Palmer Dabbelt <pal...@sifive.com> > Cc: Sagar Karandikar <sag...@eecs.berkeley.edu> > Cc: Bastian Koppelmann <kbast...@mail.uni-paderborn.de> > Signed-off-by: Emilio G. Cota <c...@braap.org> > Reviewed-by: Michael Clark <m...@sifive.com> > --- > target/riscv/translate.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/target/riscv/translate.c b/target/riscv/translate.c > index 808eab7..d2d2e5e 100644 > --- a/target/riscv/translate.c > +++ b/target/riscv/translate.c > @@ -1849,11 +1849,11 @@ void gen_intermediate_code(CPUState *cs, > TranslationBlock *tb) > CPURISCVState *env = cs->env_ptr; > DisasContext ctx; > target_ulong pc_start; > - target_ulong next_page_start; > + target_ulong page_start; > int num_insns; > int max_insns; > pc_start = tb->pc; > - next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; > + page_start = pc_start & TARGET_PAGE_MASK; > ctx.pc = pc_start; > > /* once we have GDB, the rest of the translate.c implementation > should be > @@ -1903,7 +1903,7 @@ void gen_intermediate_code(CPUState *cs, > TranslationBlock *tb) > if (cs->singlestep_enabled) { > break; > } > - if (ctx.pc >= next_page_start) { > + if (ctx.pc - page_start >= TARGET_PAGE_SIZE) { > break; > } > if (tcg_op_buf_full()) { > -- > 2.7.4 > >