> void HELPER(wsr_ibreaka)(uint32_t i, uint32_t v) > { > if (env->sregs[IBREAKENABLE] & (1 << i) && env->sregs[IBREAKA + i] > != v) { > tb_invalidate_phys_page_range( > env->sregs[IBREAKA + i], env->sregs[IBREAKA + i] + 1, 0); > tb_invalidate_phys_page_range(v, v + 1, 0); > } > env->sregs[IBREAKA + i] = v; > } > > tb_invalidate_phys_page_range() expects a virtual address in user mode, > and a ram_addr_t in system mode. I'm guessing that v is a virtual address?
Yes, it's a virtual address here, as well as in wsr_lbeg/wsr_lend helpers. I made a test for it and it actually fails. I wonder how could it stay unnoticed that long :() > This needs to be fixed for system mode if so (and in any case - even if > it's a physical address, it needs to be translated to a ram_addr_t). Sure. Will try to fix it, though it's completely unclear to me now how to do it efficiently. -- Thanks. -- Max