use address_space_translate to find memory mapping
first version has bugs
This commit is contained in:
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_aarch64
|
||||
#define memory_region_init_ram memory_region_init_ram_aarch64
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_aarch64
|
||||
#define find_memory_mapping find_memory_mapping_aarch64
|
||||
#define exec_inline_op exec_inline_op_aarch64
|
||||
#define floatx80_default_nan floatx80_default_nan_aarch64
|
||||
#define float_raise float_raise_aarch64
|
||||
|
||||
@@ -1460,7 +1460,7 @@ load_helper(CPUArchState *env, target_ulong addr, TCGMemOpIdx oi,
|
||||
}
|
||||
|
||||
paddr = entry->paddr | (addr & ~TARGET_PAGE_MASK);
|
||||
mr = find_memory_region(uc, paddr);
|
||||
mr = uc->memory_mapping(uc, paddr);
|
||||
|
||||
// memory might be still unmapped while reading or fetching
|
||||
if (mr == NULL) {
|
||||
@@ -1517,7 +1517,7 @@ load_helper(CPUArchState *env, target_ulong addr, TCGMemOpIdx oi,
|
||||
tlb_addr &= ~TLB_INVALID_MASK;
|
||||
}
|
||||
paddr = entry->paddr | (addr & ~TARGET_PAGE_MASK);
|
||||
mr = find_memory_region(uc, paddr);
|
||||
mr = uc->memory_mapping(uc, paddr);
|
||||
if (mr == NULL) {
|
||||
uc->invalid_error = UC_ERR_MAP;
|
||||
if (uc->nested_level > 0 && !uc->cpu->stopped) {
|
||||
@@ -2053,7 +2053,7 @@ store_helper(CPUArchState *env, target_ulong addr, uint64_t val,
|
||||
|
||||
// Load the latest memory mapping.
|
||||
paddr = entry->paddr | (addr & ~TARGET_PAGE_MASK);
|
||||
mr = find_memory_region(uc, paddr);
|
||||
mr = uc->memory_mapping(uc, paddr);
|
||||
|
||||
if (!uc->size_recur_mem) { // disabling write callback if in recursive call
|
||||
// Unicorn: callback on memory write
|
||||
@@ -2107,7 +2107,7 @@ store_helper(CPUArchState *env, target_ulong addr, uint64_t val,
|
||||
tlb_addr = tlb_addr_write(entry) & ~TLB_INVALID_MASK;
|
||||
}
|
||||
paddr = entry->paddr | (addr & ~TARGET_PAGE_MASK);
|
||||
mr = find_memory_region(uc, paddr);
|
||||
mr = uc->memory_mapping(uc, paddr);
|
||||
if (mr == NULL) {
|
||||
uc->invalid_error = UC_ERR_MAP;
|
||||
cpu_exit(uc->cpu);
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_arm
|
||||
#define memory_region_init_ram memory_region_init_ram_arm
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_arm
|
||||
#define find_memory_mapping find_memory_mapping_arm
|
||||
#define exec_inline_op exec_inline_op_arm
|
||||
#define floatx80_default_nan floatx80_default_nan_arm
|
||||
#define float_raise float_raise_arm
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_m68k
|
||||
#define memory_region_init_ram memory_region_init_ram_m68k
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_m68k
|
||||
#define find_memory_mapping find_memory_mapping_m68k
|
||||
#define exec_inline_op exec_inline_op_m68k
|
||||
#define floatx80_default_nan floatx80_default_nan_m68k
|
||||
#define float_raise float_raise_m68k
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_mips
|
||||
#define memory_region_init_ram memory_region_init_ram_mips
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_mips
|
||||
#define find_memory_mapping find_memory_mapping_mips
|
||||
#define exec_inline_op exec_inline_op_mips
|
||||
#define floatx80_default_nan floatx80_default_nan_mips
|
||||
#define float_raise float_raise_mips
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_mips64
|
||||
#define memory_region_init_ram memory_region_init_ram_mips64
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_mips64
|
||||
#define find_memory_mapping find_memory_mapping_mips64
|
||||
#define exec_inline_op exec_inline_op_mips64
|
||||
#define floatx80_default_nan floatx80_default_nan_mips64
|
||||
#define float_raise float_raise_mips64
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_mips64el
|
||||
#define memory_region_init_ram memory_region_init_ram_mips64el
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_mips64el
|
||||
#define find_memory_mapping find_memory_mapping_mips64el
|
||||
#define exec_inline_op exec_inline_op_mips64el
|
||||
#define floatx80_default_nan floatx80_default_nan_mips64el
|
||||
#define float_raise float_raise_mips64el
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_mipsel
|
||||
#define memory_region_init_ram memory_region_init_ram_mipsel
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_mipsel
|
||||
#define find_memory_mapping find_memory_mapping_mipsel
|
||||
#define exec_inline_op exec_inline_op_mipsel
|
||||
#define floatx80_default_nan floatx80_default_nan_mipsel
|
||||
#define float_raise float_raise_mipsel
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_ppc
|
||||
#define memory_region_init_ram memory_region_init_ram_ppc
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_ppc
|
||||
#define find_memory_mapping find_memory_mapping_ppc
|
||||
#define exec_inline_op exec_inline_op_ppc
|
||||
#define floatx80_default_nan floatx80_default_nan_ppc
|
||||
#define float_raise float_raise_ppc
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_ppc64
|
||||
#define memory_region_init_ram memory_region_init_ram_ppc64
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_ppc64
|
||||
#define find_memory_mapping find_memory_mapping_ppc64
|
||||
#define exec_inline_op exec_inline_op_ppc64
|
||||
#define floatx80_default_nan floatx80_default_nan_ppc64
|
||||
#define float_raise float_raise_ppc64
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_riscv32
|
||||
#define memory_region_init_ram memory_region_init_ram_riscv32
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_riscv32
|
||||
#define find_memory_mapping find_memory_mapping_riscv32
|
||||
#define exec_inline_op exec_inline_op_riscv32
|
||||
#define floatx80_default_nan floatx80_default_nan_riscv32
|
||||
#define float_raise float_raise_riscv32
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_riscv64
|
||||
#define memory_region_init_ram memory_region_init_ram_riscv64
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_riscv64
|
||||
#define find_memory_mapping find_memory_mapping_riscv64
|
||||
#define exec_inline_op exec_inline_op_riscv64
|
||||
#define floatx80_default_nan floatx80_default_nan_riscv64
|
||||
#define float_raise float_raise_riscv64
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_s390x
|
||||
#define memory_region_init_ram memory_region_init_ram_s390x
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_s390x
|
||||
#define find_memory_mapping find_memory_mapping_s390x
|
||||
#define exec_inline_op exec_inline_op_s390x
|
||||
#define floatx80_default_nan floatx80_default_nan_s390x
|
||||
#define float_raise float_raise_s390x
|
||||
|
||||
@@ -179,8 +179,8 @@ void memory_unmap(struct uc_struct *uc, MemoryRegion *mr)
|
||||
|
||||
int memory_free(struct uc_struct *uc)
|
||||
{
|
||||
MemoryRegion *mr;
|
||||
int i;
|
||||
MemoryRegion *mr;
|
||||
|
||||
for (i = 0; i < uc->mapped_block_count; i++) {
|
||||
mr = uc->mapped_blocks[i];
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_sparc
|
||||
#define memory_region_init_ram memory_region_init_ram_sparc
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_sparc
|
||||
#define find_memory_mapping find_memory_mapping_sparc
|
||||
#define exec_inline_op exec_inline_op_sparc
|
||||
#define floatx80_default_nan floatx80_default_nan_sparc
|
||||
#define float_raise float_raise_sparc
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_sparc64
|
||||
#define memory_region_init_ram memory_region_init_ram_sparc64
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_sparc64
|
||||
#define find_memory_mapping find_memory_mapping_sparc64
|
||||
#define exec_inline_op exec_inline_op_sparc64
|
||||
#define floatx80_default_nan floatx80_default_nan_sparc64
|
||||
#define float_raise float_raise_sparc64
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_tricore
|
||||
#define memory_region_init_ram memory_region_init_ram_tricore
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_tricore
|
||||
#define find_memory_mapping find_memory_mapping_tricore
|
||||
#define exec_inline_op exec_inline_op_tricore
|
||||
#define floatx80_default_nan floatx80_default_nan_tricore
|
||||
#define float_raise float_raise_tricore
|
||||
|
||||
@@ -107,6 +107,18 @@ static uc_err uc_set_tlb(struct uc_struct *uc, int mode) {
|
||||
}
|
||||
}
|
||||
|
||||
MemoryRegion *find_memory_mapping(struct uc_struct *uc, hwaddr address)
|
||||
{
|
||||
hwaddr xlat = 0;
|
||||
hwaddr len = 1;
|
||||
MemoryRegion *mr = address_space_translate(&uc->address_space_memory, address, &xlat, &len, false, MEMTXATTRS_UNSPECIFIED);
|
||||
|
||||
if (mr == &uc->io_mem_unassigned) {
|
||||
return NULL;
|
||||
}
|
||||
return mr;
|
||||
}
|
||||
|
||||
void softfloat_init(void);
|
||||
static inline void uc_common_init(struct uc_struct* uc)
|
||||
{
|
||||
@@ -124,6 +136,7 @@ static inline void uc_common_init(struct uc_struct* uc)
|
||||
uc->tcg_flush_tlb = tcg_flush_softmmu_tlb;
|
||||
uc->memory_map_io = memory_map_io;
|
||||
uc->set_tlb = uc_set_tlb;
|
||||
uc->memory_mapping = find_memory_mapping;
|
||||
|
||||
if (!uc->release)
|
||||
uc->release = release_common;
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
#define address_space_destroy address_space_destroy_x86_64
|
||||
#define memory_region_init_ram memory_region_init_ram_x86_64
|
||||
#define memory_mapping_list_add_merge_sorted memory_mapping_list_add_merge_sorted_x86_64
|
||||
#define find_memory_mapping find_memory_mapping_x86_64
|
||||
#define exec_inline_op exec_inline_op_x86_64
|
||||
#define floatx80_default_nan floatx80_default_nan_x86_64
|
||||
#define float_raise float_raise_x86_64
|
||||
|
||||
Reference in New Issue
Block a user