2011/4/24 오유연 <yuyeon...@samsung.com>: > When consecutive memory locations are on page boundary, a base register may be > loaded before page fault occurs. After page fault handling, it losts the > memory > location information. To solve this problem, loading a base register has to > put back.
Thanks for finding this. I agree the fix is required, but I think I'd prefer it if the thumb code for this case handled it in the same way the disas_arm_insn() code does: loaded_base = 0; TCGV_UNUSED(loaded_var); [...] tmp = gen_ld32(addr, IS_USER(s)); if (i == 15) { gen_bx(s, tmp); } else if (i == rn) { loaded_var = tmp; loaded_base = 1; } else { store_reg(s, i, tmp); } [...] if (loaded_base) { store_reg(s, rn, loaded_var); } -- PMM