> No, it should cause an external abort exception, really.

Ok.

> It's just nobody's needed it (guest OSes should never do anything
> that provokes an external abort unless they're buggy) so nobody's
> bothered doing it yet.

Understood. Thanks.

I'm using QEMU to debug a platform (ARM7TDMI) + OS (eCos) that do not
support a MMU,
so external aborts sometimes occur. The supported ARM946 (which only
has a MPU) is likely
to produce the same type of errors. I guess it is a marginal use of QEMU though.

> Also when it's added various boards need
> testing to see how much they're relying on the current "unassigned
> RAM returns 0" to cover up for missing device models, which
> is a bit tedious given how many boards we have.

Ok. Got it.

There is a piece of code I'm not sure to understand, in
   get_page_addr_code(CPUArchState *env1, target_ulong addr)

…
    if (unlikely(env1->tlb_table[mmu_idx][page_index].addr_code !=
                 (addr & TARGET_PAGE_MASK))) {
        cpu_ldub_code(env1, addr);
    }
    pd = env1->iotlb[mmu_idx][page_index] & ~TARGET_PAGE_MASK;
    mr = iotlb_to_region(pd);
    if (memory_region_is_unassigned(mr))
…

cpu_ldub_code() leads to call io_mem_read() which may trigger a
unassigned_mem_read().
In this case, the invalid mem access is always considered as a data
access, whereas it is an execution access if I'm not mistaken.

In other words, before
get_page_addr_code:memory_region_is_unassigned() is tested and
get_page_addr_code:do_unassigned_access() gets a "chance" to be called
as an "instruction" invalid access, another unsigned access is
triggered with a "data" invalid access.

Did I miss something here?

Would you have any advice on how to stop the execution of the VCPU on
the first invalid memory access (in single step mode)?

Thanks for your help,
Manu.

Reply via email to