qemu-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]