[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PULL v2 06/11] target-lm32: kill cpu_abort() calls
From: |
Andreas Färber |
Subject: |
Re: [Qemu-devel] [PULL v2 06/11] target-lm32: kill cpu_abort() calls |
Date: |
Mon, 14 Oct 2013 20:01:43 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.0 |
Am 14.10.2013 18:29, schrieb Michael Walle:
> Instead of killing QEMU, translate instructions which are not available on
> the CPU model as a noop and issue a log message at translation time.
>
> On the real hardware CPU unknown opcodes results in undefined behaviour.
>
> These changes prepare the removal of CPULM32State from DisasContext.
>
> Cc: Andreas Färber <address@hidden>
> Signed-off-by: Michael Walle <address@hidden>
> ---
> target-lm32/translate.c | 72
> ++++++++++++++++++++++++++---------------------
> 1 file changed, 40 insertions(+), 32 deletions(-)
>
> diff --git a/target-lm32/translate.c b/target-lm32/translate.c
> index 6ea0ecd..eda8caa 100644
> --- a/target-lm32/translate.c
> +++ b/target-lm32/translate.c
> @@ -80,7 +80,6 @@ typedef struct DisasContext {
> unsigned int tb_flags, synced_flags; /* tb dependent flags. */
> int is_jmp;
>
> - int nr_nops;
> struct TranslationBlock *tb;
> int singlestep_enabled;
> } DisasContext;
> @@ -422,7 +421,8 @@ static void dec_divu(DisasContext *dc)
> LOG_DIS("divu r%d, r%d, r%d\n", dc->r2, dc->r0, dc->r1);
>
> if (!(dc->env->features & LM32_FEATURE_DIVIDE)) {
> - cpu_abort(dc->env, "hardware divider is not available\n");
> + qemu_log_mask(LOG_GUEST_ERROR, "hardware divider is not
> available\n");
> + return;
> }
>
> l1 = gen_new_label();
> @@ -500,7 +500,8 @@ static void dec_modu(DisasContext *dc)
> LOG_DIS("modu r%d, r%d, %d\n", dc->r2, dc->r0, dc->r1);
>
> if (!(dc->env->features & LM32_FEATURE_DIVIDE)) {
> - cpu_abort(dc->env, "hardware divider is not available\n");
> + qemu_log_mask(LOG_GUEST_ERROR, "hardware divider is not
> available\n");
> + return;
> }
>
> l1 = gen_new_label();
> @@ -521,7 +522,9 @@ static void dec_mul(DisasContext *dc)
> }
>
> if (!(dc->env->features & LM32_FEATURE_MULTIPLY)) {
> - cpu_abort(dc->env, "hardware multiplier is not available\n");
> + qemu_log_mask(LOG_GUEST_ERROR,
> + "hardware multiplier is not available\n");
[snip]
If you do respin, could you align with opening parenthesis here and
below, please? Otherwise looks good and you can add my Reviewed-by then.
Thanks!
Andreas
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
- [Qemu-devel] [PULL v2 00/11] target-lm32 updates, Michael Walle, 2013/10/14
- [Qemu-devel] [PULL v2 01/11] lm32_sys: increase test case name length limit, Michael Walle, 2013/10/14
- [Qemu-devel] [PULL v2 07/11] target-lm32: move model features to LM32CPU, Michael Walle, 2013/10/14
- [Qemu-devel] [PULL v2 03/11] milkymist-uart: use qemu_chr_fe_write_all() instead of qemu_chr_fe_write(), Michael Walle, 2013/10/14
- [Qemu-devel] [PULL v2 06/11] target-lm32: kill cpu_abort() calls, Michael Walle, 2013/10/14
- Re: [Qemu-devel] [PULL v2 06/11] target-lm32: kill cpu_abort() calls,
Andreas Färber <=
- [Qemu-devel] [PULL v2 02/11] tests: lm32: new rule for single test cases, Michael Walle, 2013/10/14
- [Qemu-devel] [PULL v2 05/11] milkymist-vgafb: swap pixel data in source buffer, Michael Walle, 2013/10/14
- [Qemu-devel] [PULL v2 04/11] lm32_uart/lm32_juart: use qemu_chr_fe_write_all(), Michael Walle, 2013/10/14
- [Qemu-devel] [PULL v2 10/11] lm32_sys: dump cpu state if test case fails, Michael Walle, 2013/10/14
- [Qemu-devel] [PULL v2 11/11] target-lm32: stop VM on illegal or unknown instruction, Michael Walle, 2013/10/14
- [Qemu-devel] [PULL v2 08/11] target-lm32: add breakpoint/watchpoint support, Michael Walle, 2013/10/14
- [Qemu-devel] [PULL v2 09/11] lm32_sys: print test result on stderr, Michael Walle, 2013/10/14
- Re: [Qemu-devel] [PULL v2 00/11] target-lm32 updates, Michael Walle, 2013/10/14