[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-arm] [Qemu-devel] [PATCH 5/6] accel/tcg: Return -1 for executi
From: |
Thomas Huth |
Subject: |
Re: [Qemu-arm] [Qemu-devel] [PATCH 5/6] accel/tcg: Return -1 for execution from MMIO regions in get_page_addr_code() |
Date: |
Wed, 14 Nov 2018 18:19:00 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 |
On 2018-07-10 18:00, Peter Maydell wrote:
> Now that all the callers can handle get_page_addr_code() returning -1,
> remove all the code which tries to handle execution from MMIO regions
> or small-MMU-region RAM areas. This will mean that we can correctly
> execute from these areas, rather than ending up either aborting QEMU
> or delivering an incorrect guest exception.
>
> Signed-off-by: Peter Maydell <address@hidden>
> ---
> accel/tcg/cputlb.c | 95 +++++-----------------------------------------
> 1 file changed, 10 insertions(+), 85 deletions(-)
>
> diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
> index c491703f15f..abb0225dc79 100644
> --- a/accel/tcg/cputlb.c
> +++ b/accel/tcg/cputlb.c
> @@ -741,39 +741,6 @@ void tlb_set_page(CPUState *cpu, target_ulong vaddr,
> prot, mmu_idx, size);
> }
>
> -static void report_bad_exec(CPUState *cpu, target_ulong addr)
> -{
> - /* Accidentally executing outside RAM or ROM is quite common for
> - * several user-error situations, so report it in a way that
> - * makes it clear that this isn't a QEMU bug and provide suggestions
> - * about what a user could do to fix things.
> - */
> - error_report("Trying to execute code outside RAM or ROM at 0x"
> - TARGET_FMT_lx, addr);
> - error_printf("This usually means one of the following happened:\n\n"
> - "(1) You told QEMU to execute a kernel for the wrong
> machine "
> - "type, and it crashed on startup (eg trying to run a "
> - "raspberry pi kernel on a versatilepb QEMU machine)\n"
> - "(2) You didn't give QEMU a kernel or BIOS filename at all,
> "
> - "and QEMU executed a ROM full of no-op instructions until "
> - "it fell off the end\n"
> - "(3) Your guest kernel has a bug and crashed by jumping "
> - "off into nowhere\n\n"
> - "This is almost always one of the first two, so check your "
> - "command line and that you are using the right type of
> kernel "
> - "for this machine.\n"
> - "If you think option (3) is likely then you can try
> debugging "
> - "your guest with the -d debug options; in particular "
> - "-d guest_errors will cause the log to include a dump of
> the "
> - "guest register state at this point.\n\n"
> - "Execution cannot continue; stopping here.\n\n");
Hi Peter!
Looks like this patch now causes QEMU to segfault instead of printing the
above error message in certain cases, e.g.:
$ gdb --args aarch64-softmmu/qemu-system-aarch64 -M n800
[...]
(gdb) r
Starting program: aarch64-softmmu/qemu-system-aarch64 -M n800
[...]
Program received signal SIGSEGV, Segmentation fault.
[...]
(gdb) bt
#0 0x0000555555addc68 in onenand_read (opaque=0x555557600600, addr=98304,
size=4) at hw/block/onenand.c:612
#1 0x00005555558b175c in memory_region_read_accessor (mr=0x555557600b80,
addr=98304, value=0x7fffdbffe360, size=4, shift=0, mask=4294967295, attrs=...)
at memory.c:440
#2 0x00005555558ae669 in access_with_adjusted_size (address@hidden,
address@hidden, address@hidden, access_size_min=<optimized out>,
access_size_max=<optimized out>, address@hidden <memory_region_read_accessor>,
address@hidden, address@hidden) at memory.c:570
#3 0x00005555558b3016 in memory_region_dispatch_read (attrs=..., size=4,
pval=0x7fffdbffe360, addr=98304, mr=0x555557600b80) at memory.c:1375
#4 0x00005555558b3016 in memory_region_dispatch_read (mr=0x555557600b80,
address@hidden, address@hidden, address@hidden, attrs=...)
at memory.c:1402
#5 0x000055555583cb23 in io_readx (address@hidden, address@hidden,
address@hidden, address@hidden, address@hidden, recheck=<optimized out>,
address@hidden, address@hidden) at accel/tcg/cputlb.c:729
#6 0x00005555558d79cd in helper_le_ldl_cmmu (access_type=MMU_INST_FETCH,
recheck=<optimized out>, retaddr=0, addr=98304, index=96, mmu_idx=1,
env=0x555556b58a30)
at accel/tcg/softmmu_template.h:106
#7 0x00005555558d79cd in helper_le_ldl_cmmu (address@hidden, address@hidden,
oi=33, address@hidden)
at accel/tcg/softmmu_template.h:144
#8 0x00005555559d2595 in arm_tr_translate_insn (retaddr=0, ptr=98304,
env=0x555556b58a30) at include/exec/cpu_ldst_template.h:102
Any clue what's going on here?
Thomas
- Re: [Qemu-arm] [Qemu-devel] [PATCH 5/6] accel/tcg: Return -1 for execution from MMIO regions in get_page_addr_code(),
Thomas Huth <=