diff --git a/memory.c b/memory.c index 8e9ac460e8813e63fb2f3622c3704035250cbb45..eb31fa8e585033e94bb2d488e121184533db1756 100644 --- a/memory.c +++ b/memory.c @@ -304,7 +304,7 @@ static void as_memory_range_add(AddressSpace *as, FlatRange *fr) } if (!fr->readable) { - phys_offset &= TARGET_PAGE_MASK; + phys_offset &= ~TARGET_PAGE_MASK & ~IO_MEM_ROMD; } cpu_register_physical_memory_log(fr->addr.start, @@ -962,11 +962,14 @@ void memory_region_init_alias(MemoryRegion *mr, void memory_region_init_rom_device(MemoryRegion *mr, const MemoryRegionOps *ops, + void *opaque, DeviceState *dev, const char *name, uint64_t size) { memory_region_init(mr, name, size); + mr->ops = ops; + mr->opaque = opaque; mr->terminates = true; mr->destructor = memory_region_destructor_rom_device; mr->ram_addr = qemu_ram_alloc(dev, name, size); diff --git a/memory.h b/memory.h index 0553cc7526e47eac69eeac79558ffa59a1d42156..06b83ae76b3ec050f20d6a02b7b262750b42c66e 100644 --- a/memory.h +++ b/memory.h @@ -235,6 +235,7 @@ void memory_region_init_alias(MemoryRegion *mr, */ void memory_region_init_rom_device(MemoryRegion *mr, const MemoryRegionOps *ops, + void *opaque, DeviceState *dev, /* FIXME: layering violation */ const char *name, uint64_t size);