mirror of https://gitee.com/openkylin/qemu.git
accel/tcg: Document the faulting lookup in tb_lookup_cmp
It was non-obvious to me why we can raise an exception in the middle of a comparison function, but it works. While nearby, use TARGET_PAGE_ALIGN instead of open-coding. Acked-by: Ilya Leoshkevich <iii@linux.ibm.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
7e0d9973ea
commit
9867b30287
|
@ -198,7 +198,16 @@ static bool tb_lookup_cmp(const void *p, const void *d)
|
||||||
tb_page_addr_t phys_page2;
|
tb_page_addr_t phys_page2;
|
||||||
target_ulong virt_page2;
|
target_ulong virt_page2;
|
||||||
|
|
||||||
virt_page2 = (desc->pc & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
/*
|
||||||
|
* We know that the first page matched, and an otherwise valid TB
|
||||||
|
* encountered an incomplete instruction at the end of that page,
|
||||||
|
* therefore we know that generating a new TB from the current PC
|
||||||
|
* must also require reading from the next page -- even if the
|
||||||
|
* second pages do not match, and therefore the resulting insn
|
||||||
|
* is different for the new TB. Therefore any exception raised
|
||||||
|
* here by the faulting lookup is not premature.
|
||||||
|
*/
|
||||||
|
virt_page2 = TARGET_PAGE_ALIGN(desc->pc);
|
||||||
phys_page2 = get_page_addr_code(desc->env, virt_page2);
|
phys_page2 = get_page_addr_code(desc->env, virt_page2);
|
||||||
if (tb->page_addr[1] == phys_page2) {
|
if (tb->page_addr[1] == phys_page2) {
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in New Issue