implement simple memory snapshot mechanismus
Uses Copy on Write to make it posible to restore the memory state after a snapshot was made. To restore all MemoryRegions created after the snapshot are removed.
This commit is contained in:
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_aarch64
|
||||
#define memory_map_io memory_map_io_aarch64
|
||||
#define memory_map_ptr memory_map_ptr_aarch64
|
||||
#define memory_cow memory_cow_aarch64
|
||||
#define memory_unmap memory_unmap_aarch64
|
||||
#define memory_free memory_free_aarch64
|
||||
#define flatview_unref flatview_unref_aarch64
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_aarch64
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_aarch64
|
||||
#define memory_region_find memory_region_find_aarch64
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_aarch64
|
||||
#define memory_listener_register memory_listener_register_aarch64
|
||||
#define memory_listener_unregister memory_listener_unregister_aarch64
|
||||
#define address_space_remove_listeners address_space_remove_listeners_aarch64
|
||||
|
||||
@@ -2155,6 +2155,22 @@ store_helper(CPUArchState *env, target_ulong addr, uint64_t val,
|
||||
}
|
||||
}
|
||||
|
||||
if (uc->snapshot_level && mr->ram && mr->priority < uc->snapshot_level) {
|
||||
mr = memory_cow(uc, mr, addr & TARGET_PAGE_MASK, TARGET_PAGE_SIZE);
|
||||
if (!mr) {
|
||||
uc->invalid_addr = paddr;
|
||||
uc->invalid_error = UC_ERR_NOMEM;
|
||||
cpu_exit(uc->cpu);
|
||||
return;
|
||||
}
|
||||
/* refill tlb after CoW */
|
||||
tlb_fill(env_cpu(env), paddr, size, MMU_DATA_STORE,
|
||||
mmu_idx, retaddr);
|
||||
index = tlb_index(env, mmu_idx, addr);
|
||||
entry = tlb_entry(env, mmu_idx, addr);
|
||||
tlb_addr = tlb_addr_write(entry);
|
||||
}
|
||||
|
||||
/* Handle anything that isn't just a straight memory access. */
|
||||
if (unlikely(tlb_addr & ~TARGET_PAGE_MASK)) {
|
||||
CPUIOTLBEntry *iotlbentry;
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_arm
|
||||
#define memory_map_io memory_map_io_arm
|
||||
#define memory_map_ptr memory_map_ptr_arm
|
||||
#define memory_cow memory_cow_arm
|
||||
#define memory_unmap memory_unmap_arm
|
||||
#define memory_free memory_free_arm
|
||||
#define flatview_unref flatview_unref_arm
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_arm
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_arm
|
||||
#define memory_region_find memory_region_find_arm
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_arm
|
||||
#define memory_listener_register memory_listener_register_arm
|
||||
#define memory_listener_unregister memory_listener_unregister_arm
|
||||
#define address_space_remove_listeners address_space_remove_listeners_arm
|
||||
|
||||
@@ -687,6 +687,35 @@ void memory_region_add_subregion(MemoryRegion *mr,
|
||||
hwaddr offset,
|
||||
MemoryRegion *subregion);
|
||||
|
||||
/**
|
||||
* memory_region_add_subregion_overlap: Add a subregion to a container
|
||||
* with overlap.
|
||||
*
|
||||
* Adds a subregion at @offset. The subregion may overlap with other
|
||||
* subregions. Conflicts are resolved by having a higher @priority hide a
|
||||
* lower @priority. Subregions without priority are taken as @priority 0.
|
||||
* A region may only be added once as a subregion (unless removed with
|
||||
* memory_region_del_subregion()); use memory_region_init_alias() if you
|
||||
* want a region to be a subregion in multiple locations.
|
||||
*
|
||||
* @mr: the region to contain the new subregion; must be a container
|
||||
* initialized with memory_region_init().
|
||||
* @offset: the offset relative to @mr where @subregion is added.
|
||||
* @subregion: the subregion to be added.
|
||||
* @priority: used for resolving overlaps; highest priority wins.
|
||||
*/
|
||||
void memory_region_add_subregion_overlap(MemoryRegion *mr,
|
||||
hwaddr offset,
|
||||
MemoryRegion *subregion,
|
||||
int priority);
|
||||
|
||||
/**
|
||||
* memory_region_filter_subregions: filter subregios by priority.
|
||||
*
|
||||
* remove all subregions beginning by a specified subregion
|
||||
*/
|
||||
void memory_region_filter_subregions(MemoryRegion *mr, int32_t level);
|
||||
|
||||
/**
|
||||
* memory_region_get_ram_addr: Get the ram address associated with a memory
|
||||
* region
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_m68k
|
||||
#define memory_map_io memory_map_io_m68k
|
||||
#define memory_map_ptr memory_map_ptr_m68k
|
||||
#define memory_cow memory_cow_m68k
|
||||
#define memory_unmap memory_unmap_m68k
|
||||
#define memory_free memory_free_m68k
|
||||
#define flatview_unref flatview_unref_m68k
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_m68k
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_m68k
|
||||
#define memory_region_find memory_region_find_m68k
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_m68k
|
||||
#define memory_listener_register memory_listener_register_m68k
|
||||
#define memory_listener_unregister memory_listener_unregister_m68k
|
||||
#define address_space_remove_listeners address_space_remove_listeners_m68k
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_mips
|
||||
#define memory_map_io memory_map_io_mips
|
||||
#define memory_map_ptr memory_map_ptr_mips
|
||||
#define memory_cow memory_cow_mips
|
||||
#define memory_unmap memory_unmap_mips
|
||||
#define memory_free memory_free_mips
|
||||
#define flatview_unref flatview_unref_mips
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_mips
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_mips
|
||||
#define memory_region_find memory_region_find_mips
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_mips
|
||||
#define memory_listener_register memory_listener_register_mips
|
||||
#define memory_listener_unregister memory_listener_unregister_mips
|
||||
#define address_space_remove_listeners address_space_remove_listeners_mips
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_mips64
|
||||
#define memory_map_io memory_map_io_mips64
|
||||
#define memory_map_ptr memory_map_ptr_mips64
|
||||
#define memory_cow memory_cow_mips64
|
||||
#define memory_unmap memory_unmap_mips64
|
||||
#define memory_free memory_free_mips64
|
||||
#define flatview_unref flatview_unref_mips64
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_mips64
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_mips64
|
||||
#define memory_region_find memory_region_find_mips64
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_mips64
|
||||
#define memory_listener_register memory_listener_register_mips64
|
||||
#define memory_listener_unregister memory_listener_unregister_mips64
|
||||
#define address_space_remove_listeners address_space_remove_listeners_mips64
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_mips64el
|
||||
#define memory_map_io memory_map_io_mips64el
|
||||
#define memory_map_ptr memory_map_ptr_mips64el
|
||||
#define memory_cow memory_cow_mips64el
|
||||
#define memory_unmap memory_unmap_mips64el
|
||||
#define memory_free memory_free_mips64el
|
||||
#define flatview_unref flatview_unref_mips64el
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_mips64el
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_mips64el
|
||||
#define memory_region_find memory_region_find_mips64el
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_mips64el
|
||||
#define memory_listener_register memory_listener_register_mips64el
|
||||
#define memory_listener_unregister memory_listener_unregister_mips64el
|
||||
#define address_space_remove_listeners address_space_remove_listeners_mips64el
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_mipsel
|
||||
#define memory_map_io memory_map_io_mipsel
|
||||
#define memory_map_ptr memory_map_ptr_mipsel
|
||||
#define memory_cow memory_cow_mipsel
|
||||
#define memory_unmap memory_unmap_mipsel
|
||||
#define memory_free memory_free_mipsel
|
||||
#define flatview_unref flatview_unref_mipsel
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_mipsel
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_mipsel
|
||||
#define memory_region_find memory_region_find_mipsel
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_mipsel
|
||||
#define memory_listener_register memory_listener_register_mipsel
|
||||
#define memory_listener_unregister memory_listener_unregister_mipsel
|
||||
#define address_space_remove_listeners address_space_remove_listeners_mipsel
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_ppc
|
||||
#define memory_map_io memory_map_io_ppc
|
||||
#define memory_map_ptr memory_map_ptr_ppc
|
||||
#define memory_cow memory_cow_ppc
|
||||
#define memory_unmap memory_unmap_ppc
|
||||
#define memory_free memory_free_ppc
|
||||
#define flatview_unref flatview_unref_ppc
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_ppc
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_ppc
|
||||
#define memory_region_find memory_region_find_ppc
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_ppc
|
||||
#define memory_listener_register memory_listener_register_ppc
|
||||
#define memory_listener_unregister memory_listener_unregister_ppc
|
||||
#define address_space_remove_listeners address_space_remove_listeners_ppc
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_ppc64
|
||||
#define memory_map_io memory_map_io_ppc64
|
||||
#define memory_map_ptr memory_map_ptr_ppc64
|
||||
#define memory_cow memory_cow_ppc64
|
||||
#define memory_unmap memory_unmap_ppc64
|
||||
#define memory_free memory_free_ppc64
|
||||
#define flatview_unref flatview_unref_ppc64
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_ppc64
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_ppc64
|
||||
#define memory_region_find memory_region_find_ppc64
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_ppc64
|
||||
#define memory_listener_register memory_listener_register_ppc64
|
||||
#define memory_listener_unregister memory_listener_unregister_ppc64
|
||||
#define address_space_remove_listeners address_space_remove_listeners_ppc64
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_riscv32
|
||||
#define memory_map_io memory_map_io_riscv32
|
||||
#define memory_map_ptr memory_map_ptr_riscv32
|
||||
#define memory_cow memory_cow_riscv32
|
||||
#define memory_unmap memory_unmap_riscv32
|
||||
#define memory_free memory_free_riscv32
|
||||
#define flatview_unref flatview_unref_riscv32
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_riscv32
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_riscv32
|
||||
#define memory_region_find memory_region_find_riscv32
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_riscv32
|
||||
#define memory_listener_register memory_listener_register_riscv32
|
||||
#define memory_listener_unregister memory_listener_unregister_riscv32
|
||||
#define address_space_remove_listeners address_space_remove_listeners_riscv32
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_riscv64
|
||||
#define memory_map_io memory_map_io_riscv64
|
||||
#define memory_map_ptr memory_map_ptr_riscv64
|
||||
#define memory_cow memory_cow_riscv64
|
||||
#define memory_unmap memory_unmap_riscv64
|
||||
#define memory_free memory_free_riscv64
|
||||
#define flatview_unref flatview_unref_riscv64
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_riscv64
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_riscv64
|
||||
#define memory_region_find memory_region_find_riscv64
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_riscv64
|
||||
#define memory_listener_register memory_listener_register_riscv64
|
||||
#define memory_listener_unregister memory_listener_unregister_riscv64
|
||||
#define address_space_remove_listeners address_space_remove_listeners_riscv64
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_s390x
|
||||
#define memory_map_io memory_map_io_s390x
|
||||
#define memory_map_ptr memory_map_ptr_s390x
|
||||
#define memory_cow memory_cow_s390x
|
||||
#define memory_unmap memory_unmap_s390x
|
||||
#define memory_free memory_free_s390x
|
||||
#define flatview_unref flatview_unref_s390x
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_s390x
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_s390x
|
||||
#define memory_region_find memory_region_find_s390x
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_s390x
|
||||
#define memory_listener_register memory_listener_register_s390x
|
||||
#define memory_listener_unregister memory_listener_unregister_s390x
|
||||
#define address_space_remove_listeners address_space_remove_listeners_s390x
|
||||
|
||||
@@ -26,6 +26,9 @@
|
||||
|
||||
//#define DEBUG_UNASSIGNED
|
||||
|
||||
void memory_region_transaction_begin(void);
|
||||
void memory_region_transaction_commit(MemoryRegion *mr);
|
||||
|
||||
typedef struct AddrRange AddrRange;
|
||||
|
||||
/*
|
||||
@@ -49,7 +52,7 @@ MemoryRegion *memory_map(struct uc_struct *uc, hwaddr begin, size_t size, uint32
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memory_region_add_subregion(uc->system_memory, begin, ram);
|
||||
memory_region_add_subregion_overlap(uc->system_memory, begin, ram, uc->snapshot_level);
|
||||
|
||||
if (uc->cpu) {
|
||||
tlb_flush(uc->cpu);
|
||||
@@ -79,6 +82,48 @@ MemoryRegion *memory_map_ptr(struct uc_struct *uc, hwaddr begin, size_t size, ui
|
||||
return ram;
|
||||
}
|
||||
|
||||
static void make_contained(struct uc_struct *uc, MemoryRegion *current)
|
||||
{
|
||||
hwaddr addr = current->addr;
|
||||
MemoryRegion *container = g_new(MemoryRegion, 1);
|
||||
memory_region_init(uc, container, int128_get64(current->size));
|
||||
memory_region_del_subregion(uc->system_memory, current);
|
||||
memory_region_add_subregion_overlap(container, 0, current, current->priority);
|
||||
memory_region_add_subregion(uc->system_memory, addr, container);
|
||||
}
|
||||
|
||||
MemoryRegion *memory_cow(struct uc_struct *uc, MemoryRegion *current, hwaddr begin, size_t size)
|
||||
{
|
||||
hwaddr offset;
|
||||
hwaddr current_offset;
|
||||
MemoryRegion *ram = g_new(MemoryRegion, 1);
|
||||
|
||||
if (current->container == uc->system_memory) {
|
||||
make_contained(uc, current);
|
||||
}
|
||||
offset = begin - current->container->addr;;
|
||||
current_offset = offset - current->addr;
|
||||
|
||||
memory_region_init_ram(uc, ram, size, current->perms);
|
||||
if (ram->addr == -1 || !ram->ram_block) {
|
||||
g_free(ram);
|
||||
return NULL;
|
||||
}
|
||||
memory_region_transaction_begin();
|
||||
|
||||
memcpy(ramblock_ptr(ram->ram_block, 0), ramblock_ptr(current->ram_block, current_offset), size);
|
||||
memory_region_add_subregion_overlap(current->container, offset, ram, uc->snapshot_level);
|
||||
|
||||
if (uc->cpu) {
|
||||
tlb_flush(uc->cpu);
|
||||
}
|
||||
|
||||
uc->memory_region_update_pending = true;
|
||||
memory_region_transaction_commit(ram);
|
||||
|
||||
return ram;
|
||||
}
|
||||
|
||||
static uint64_t mmio_read_wrapper(struct uc_struct *uc, void *opaque, hwaddr addr, unsigned size)
|
||||
{
|
||||
mmio_cbs* cbs = (mmio_cbs*)opaque;
|
||||
@@ -148,6 +193,21 @@ MemoryRegion *memory_map_io(struct uc_struct *uc, ram_addr_t begin, size_t size,
|
||||
return mmio;
|
||||
}
|
||||
|
||||
void memory_region_filter_subregions(MemoryRegion *mr, int32_t level)
|
||||
{
|
||||
MemoryRegion *subregion, *subregion_next;
|
||||
memory_region_transaction_begin();
|
||||
QTAILQ_FOREACH_SAFE(subregion, &mr->subregions, subregions_link, subregion_next) {
|
||||
if (subregion->priority >= level) {
|
||||
memory_region_del_subregion(mr, subregion);
|
||||
subregion->destructor(subregion);
|
||||
g_free(subregion);
|
||||
mr->uc->memory_region_update_pending = true;
|
||||
}
|
||||
}
|
||||
memory_region_transaction_commit(mr);
|
||||
}
|
||||
|
||||
void memory_unmap(struct uc_struct *uc, MemoryRegion *mr)
|
||||
{
|
||||
int i;
|
||||
@@ -179,16 +239,15 @@ void memory_unmap(struct uc_struct *uc, MemoryRegion *mr)
|
||||
|
||||
int memory_free(struct uc_struct *uc)
|
||||
{
|
||||
int i;
|
||||
MemoryRegion *mr;
|
||||
MemoryRegion *subregion, *subregion_next;
|
||||
MemoryRegion *mr = uc->system_memory;
|
||||
|
||||
for (i = 0; i < uc->mapped_block_count; i++) {
|
||||
mr = uc->mapped_blocks[i];
|
||||
mr->enabled = false;
|
||||
memory_region_del_subregion(uc->system_memory, mr);
|
||||
mr->destructor(mr);
|
||||
QTAILQ_FOREACH_SAFE(subregion, &mr->subregions, subregions_link, subregion_next) {
|
||||
subregion->enabled = false;
|
||||
memory_region_del_subregion(uc->system_memory, subregion);
|
||||
subregion->destructor(subregion);
|
||||
/* destroy subregion */
|
||||
g_free(mr);
|
||||
g_free(subregion);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -886,6 +945,7 @@ static void memory_region_destructor_none(MemoryRegion *mr)
|
||||
|
||||
static void memory_region_destructor_ram(MemoryRegion *mr)
|
||||
{
|
||||
memory_region_filter_subregions(mr, 0);
|
||||
qemu_ram_free(mr->uc, mr->ram_block);
|
||||
}
|
||||
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_sparc
|
||||
#define memory_map_io memory_map_io_sparc
|
||||
#define memory_map_ptr memory_map_ptr_sparc
|
||||
#define memory_cow memory_cow_sparc
|
||||
#define memory_unmap memory_unmap_sparc
|
||||
#define memory_free memory_free_sparc
|
||||
#define flatview_unref flatview_unref_sparc
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_sparc
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_sparc
|
||||
#define memory_region_find memory_region_find_sparc
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_sparc
|
||||
#define memory_listener_register memory_listener_register_sparc
|
||||
#define memory_listener_unregister memory_listener_unregister_sparc
|
||||
#define address_space_remove_listeners address_space_remove_listeners_sparc
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_sparc64
|
||||
#define memory_map_io memory_map_io_sparc64
|
||||
#define memory_map_ptr memory_map_ptr_sparc64
|
||||
#define memory_cow memory_cow_sparc64
|
||||
#define memory_unmap memory_unmap_sparc64
|
||||
#define memory_free memory_free_sparc64
|
||||
#define flatview_unref flatview_unref_sparc64
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_sparc64
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_sparc64
|
||||
#define memory_region_find memory_region_find_sparc64
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_sparc64
|
||||
#define memory_listener_register memory_listener_register_sparc64
|
||||
#define memory_listener_unregister memory_listener_unregister_sparc64
|
||||
#define address_space_remove_listeners address_space_remove_listeners_sparc64
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_tricore
|
||||
#define memory_map_io memory_map_io_tricore
|
||||
#define memory_map_ptr memory_map_ptr_tricore
|
||||
#define memory_cow memory_cow_tricore
|
||||
#define memory_unmap memory_unmap_tricore
|
||||
#define memory_free memory_free_tricore
|
||||
#define flatview_unref flatview_unref_tricore
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_tricore
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_tricore
|
||||
#define memory_region_find memory_region_find_tricore
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_tricore
|
||||
#define memory_listener_register memory_listener_register_tricore
|
||||
#define memory_listener_unregister memory_listener_unregister_tricore
|
||||
#define address_space_remove_listeners address_space_remove_listeners_tricore
|
||||
|
||||
@@ -137,6 +137,8 @@ static inline void uc_common_init(struct uc_struct* uc)
|
||||
uc->memory_map_io = memory_map_io;
|
||||
uc->set_tlb = uc_set_tlb;
|
||||
uc->memory_mapping = find_memory_mapping;
|
||||
uc->memory_filter_subregions = memory_region_filter_subregions;
|
||||
uc->memory_cow = memory_cow;
|
||||
|
||||
if (!uc->release)
|
||||
uc->release = release_common;
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#define memory_map memory_map_x86_64
|
||||
#define memory_map_io memory_map_io_x86_64
|
||||
#define memory_map_ptr memory_map_ptr_x86_64
|
||||
#define memory_cow memory_cow_x86_64
|
||||
#define memory_unmap memory_unmap_x86_64
|
||||
#define memory_free memory_free_x86_64
|
||||
#define flatview_unref flatview_unref_x86_64
|
||||
@@ -144,6 +145,7 @@
|
||||
#define memory_region_del_subregion memory_region_del_subregion_x86_64
|
||||
#define memory_region_add_subregion_overlap memory_region_add_subregion_overlap_x86_64
|
||||
#define memory_region_find memory_region_find_x86_64
|
||||
#define memory_region_filter_subregions memory_region_filter_subregions_x86_64
|
||||
#define memory_listener_register memory_listener_register_x86_64
|
||||
#define memory_listener_unregister memory_listener_unregister_x86_64
|
||||
#define address_space_remove_listeners address_space_remove_listeners_x86_64
|
||||
|
||||
Reference in New Issue
Block a user