[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 17/17] target/riscv: convert to TranslatorOps
From: |
Emilio G. Cota |
Subject: |
Re: [Qemu-devel] [PATCH v2 17/17] target/riscv: convert to TranslatorOps |
Date: |
Tue, 10 Apr 2018 10:38:58 -0400 |
User-agent: |
Mutt/1.5.24 (2015-08-30) |
On Tue, Apr 10, 2018 at 09:05:06 -0500, Eric Blake wrote:
> On 04/10/2018 07:59 AM, Emilio G. Cota wrote:
> > On Tue, Apr 10, 2018 at 11:24:37 +1000, Richard Henderson wrote:
> >> On 04/07/2018 04:20 AM, Emilio G. Cota wrote:
> >>> + next_page = (ctx->base.pc_first & TARGET_PAGE_MASK) +
> >>> TARGET_PAGE_SIZE;
> >>> + if (ctx->base.pc_next >= next_page) {
> >>
> >> This fails for the last page of the address space.
> >> Better is
> >>
> >> page_start = ctx->base.pc_first & TARGET_PAGE_MASK;
> >> if (ctx->base.pc_next - page_start >= TARGET_PAGE_SIZE) {
> >
> > Apart from the variable name change, I fail to see how this (A - B >= C)
> > is not equivalent to the above (A => B + C). What am I missing?
>
> Integer overflow. Adding TARGET_PAGE_SIZE might wrap next_page to 0,
> which changes the semantics of the conditional; while performing the
> subtraction avoids the case of overflow.
Ah indeed. Thanks.
Turns out we have this problem in other targets as well -- will fix.
E.
[Qemu-devel] [PATCH v2 12/17] target/s390x: convert to TranslatorOps, Emilio G. Cota, 2018/04/06
[Qemu-devel] [PATCH v2 16/17] target/riscv: convert to DisasContextBase, Emilio G. Cota, 2018/04/06
[Qemu-devel] [PATCH v2 07/17] target/mips: convert to DisasContextBase, Emilio G. Cota, 2018/04/06
[Qemu-devel] [PATCH v2 10/17] target/s390x: convert to DisasJumpType, Emilio G. Cota, 2018/04/06