On 05/06/2015 08:44 AM, Peter Maydell wrote: > On 6 May 2015 at 15:12, Richard Henderson <r...@twiddle.net> wrote: >> On 05/06/2015 12:06 AM, Peter Crosthwaite wrote: >>> Can >>> we rely on the env/CPUState always being up to date during >>> target_disas (which happens at translate time?) or will we need to go >>> field by field to make sure any env updates explicitly occur before >>> target_disas? >> >> I *think* so, but it's a near thing. The path goes >> >> tb_find_fast: >> cpu_get_tb_cpu_state, fill fill in flags for TB from current ENV state. >> tb_find_slow, >> tb_gen_code, using those same flags. >> >> There's the edge case of re-translation, but I'm going to assert that cpu >> mode >> changes ought not happen in that context. Doing otherwise means that the >> kernel has just switched modes, the translator has failed to end the TB, and >> the new code has faulted immediately. > > This is making the assumption that what the disassembler sees as > a "different mode" is the same as what the translator sees as a > "different mode" for which it needs to end the TB... This happens > to be true for ARM, at least, but I don't see any particular > reason why it is necessarily so for everything.
I'm pretty sure it is, though. Certainly true for x86 and mips. I might call it a translator bug not to end the TB at a mode change. r~