On 14 January 2016 at 10:26, Chen Gang <cheng...@emindsoft.com.cn> wrote: > On 2016年01月14日 18:05, Peter Maydell wrote: >> If we don't mark the page as non-writeable when we generate a TB >> from it, how do we detect when guest code later writes to that >> page (which means we need to invalidate the TB) ? >> > > For me, what you said above sounds reasonable, at present, that's really > valuable to me :-) > > I guess, you also mean: our qemu will catch the host page fault signal > and invalidate the TB.
Yes, this is how it works for user-mode. (For softmmu we can catch writes and send them via the slow path which does the check for whether TBs need to be invalidated; for linux-user we have no emulated MMU so we must rely on the host kernel sending us the SIGSEGV.) The bit of code that does this is at the top of handle_cpu_signal(): if (is_write && h2g_valid(address) && page_unprotect(h2g(address), pc, puc)) { return 1; } thanks -- PMM