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. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature
