memory: check for watchpoints when getting code ram_addr
authorAvi Kivity <avi@redhat.com>
Sun, 18 Mar 2012 16:31:13 +0000 (18:31 +0200)
committerAvi Kivity <avi@redhat.com>
Mon, 19 Mar 2012 09:15:01 +0000 (11:15 +0200)
The code to get the ram_addr from a (tlb entry, vaddr) pair
checks that the resulting memory is not MMIO, but neglects to
check whether the region is hidden by a watchpoint page.

Add the missing check.

Signed-off-by: Avi Kivity <avi@redhat.com>
exec.c

diff --git a/exec.c b/exec.c
index 3c2b7e51805945f67193dad06b444d58848f3597..a3818ffeb705e6750975849dd77b65f7748af5ee 100644 (file)
--- a/exec.c
+++ b/exec.c
@@ -4609,7 +4609,8 @@ tb_page_addr_t get_page_addr_code(CPUArchState *env1, target_ulong addr)
     pd = env1->iotlb[mmu_idx][page_index] & ~TARGET_PAGE_MASK;
     mr = iotlb_to_region(pd);
     if (mr != &io_mem_ram && mr != &io_mem_rom
-        && mr != &io_mem_notdirty && !mr->rom_device) {
+        && mr != &io_mem_notdirty && !mr->rom_device
+        && mr != &io_mem_watch) {
 #if defined(TARGET_ALPHA) || defined(TARGET_MIPS) || defined(TARGET_SPARC)
         cpu_unassigned_access(env1, addr, 0, 1, 0, 4);
 #else