|
@@ -769,14 +769,13 @@ tb_page_addr_t get_page_addr_code(CPUArchState *env1, target_ulong addr)
|
|
pd = iotlbentry->addr & ~TARGET_PAGE_MASK;
|
|
pd = iotlbentry->addr & ~TARGET_PAGE_MASK;
|
|
mr = iotlb_to_region(cpu, pd, iotlbentry->attrs);
|
|
mr = iotlb_to_region(cpu, pd, iotlbentry->attrs);
|
|
if (memory_region_is_unassigned(mr)) {
|
|
if (memory_region_is_unassigned(mr)) {
|
|
- CPUClass *cc = CPU_GET_CLASS(cpu);
|
|
|
|
-
|
|
|
|
- if (cc->do_unassigned_access) {
|
|
|
|
- cc->do_unassigned_access(cpu, addr, false, true, 0, 4);
|
|
|
|
- } else {
|
|
|
|
- report_bad_exec(cpu, addr);
|
|
|
|
- exit(1);
|
|
|
|
- }
|
|
|
|
|
|
+ cpu_unassigned_access(cpu, addr, false, true, 0, 4);
|
|
|
|
+ /* The CPU's unassigned access hook might have longjumped out
|
|
|
|
+ * with an exception. If it didn't (or there was no hook) then
|
|
|
|
+ * we can't proceed further.
|
|
|
|
+ */
|
|
|
|
+ report_bad_exec(cpu, addr);
|
|
|
|
+ exit(1);
|
|
}
|
|
}
|
|
p = (void *)((uintptr_t)addr + env1->tlb_table[mmu_idx][page_index].addend);
|
|
p = (void *)((uintptr_t)addr + env1->tlb_table[mmu_idx][page_index].addend);
|
|
return qemu_ram_addr_from_host_nofail(p);
|
|
return qemu_ram_addr_from_host_nofail(p);
|