Sorry about that. Somehow Google decided it should reply to you, rather than the mailing list. It was an honest mistake.
Original question is below I am unable to get this part here if (!(tb_end <= start || tb_start >= end)) in tb_invalidate_phys_page_range What would happen if code forward modifies itself, but that condition evaluates to true? Then this piece here won't get executed > #ifdef TARGET_HAS_PRECISE_SMC > if (current_tb_not_found) { > current_tb_not_found = 0; > current_tb = NULL; > if (cpu->mem_io_pc) { > /* now we have a real cpu fault */ > current_tb = tb_find_pc(uc, cpu->mem_io_pc); > } > } > if (current_tb == tb && > (current_tb->cflags & CF_COUNT_MASK) != 1) { > /* If we are modifying the current TB, we must stop > its execution. We could be more precise by checking > that the modification is after the current PC, but it > would require a specialized function to partially > restore the CPU state */ > > current_tb_modified = 1; > // self-modifying code will restore state from TB > cpu_restore_state_from_tb(cpu, current_tb, cpu->mem_io_pc); > cpu_get_tb_cpu_state(env, ¤t_pc, ¤t_cs_base, > ¤t_flags); > } > #endif /* TARGET_HAS_PRECISE_SMC */ > It just so happens I am experiencing such a case. On 14 January 2016 at 11:58, Peter Maydell <peter.mayd...@linaro.org> wrote: > On 14 January 2016 at 00:37, farmdve <farm...@gmail.com> wrote: > > I am unable to get this part here if (!(tb_end <= start || tb_start >= > end)) > > in tb_invalidate_phys_page_range > > > > What would happen if code forward modifies itself, but that condition > > evaluates to true? > > Please can you send questions to the mailing list, not to > me personally. That way anybody who knows and has time to > answer can do so. > > thanks > -- PMM >