From b77bce1efd874b84caf4ebc458188ce22c0e57aa Mon Sep 17 00:00:00 2001 From: SarahW Date: Thu, 28 Mar 2019 20:38:33 +0000 Subject: [PATCH] Clear page_mask2 when the second page in a block is inaccessible. --- src/codegen_backend.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/codegen_backend.c b/src/codegen_backend.c index 8239e94..19e32f6 100644 --- a/src/codegen_backend.c +++ b/src/codegen_backend.c @@ -704,6 +704,13 @@ void codegen_block_generate_end_mask_recompile() fatal("block->next_2->pc=BLOCK_PC_INVALID %p\n", (void *)&codeblock[block->next_2]); } } + else + { + /*Second page not present. page_mask2 is most likely set only because + the recompiler didn't know how long the last instruction was, so + clear it*/ + block->page_mask2 = 0; + } } // pclog("block_end: %08x %08x %016llx\n", block->pc, codegen_endpc, block->page_mask); @@ -776,6 +783,13 @@ void codegen_block_generate_end_mask_mark() block->dirty_mask2 = &page_2->dirty_mask; } + else + { + /*Second page not present. page_mask2 is most likely set only because + the recompiler didn't know how long the last instruction was, so + clear it*/ + block->page_mask2 = 0; + } } // pclog("block_end: %08x %08x %016llx\n", block->pc, codegen_endpc, block->page_mask);