qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] linux-user: Handle microMIPS encoding when proc


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH] linux-user: Handle microMIPS encoding when processing trap exceptions
Date: Wed, 17 Jul 2013 18:20:27 +0100

On 17 July 2013 17:50, Kwok Cheung Yeung <address@hidden> wrote:
> Decode trap instructions during the handling of a EXCP_TRAP according to
> the current ISA mode.
>
> Signed-off-by: Kwok Cheung Yeung <address@hidden>
> ---
>  linux-user/main.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/linux-user/main.c b/linux-user/main.c
> index 7f15d3d..c417e26 100644
> --- a/linux-user/main.c
> +++ b/linux-user/main.c
> @@ -2379,7 +2379,10 @@ done_syscall:
>
>                  /* The immediate versions don't provide a code.  */
>                  if (!(trap_instr & 0xFC000000)) {

So this trap_instr is read in QEMU via a simple get_user_ual(),
whereas if you look at the Linux kernel:
http://lxr.linux.no/#linux+v3.10.1/arch/mips/kernel/traps.c#L904

it specifically does two 16 bit loads for the microMIPS case.
Are you sure this code is correct for both big and little
endian MIPS configs?

(Similar remarks apply for EXCP_BREAK.)

> -                    code = ((trap_instr >> 6) & ((1 << 10) - 1));
> +                    if (env->hflags & MIPS_HFLAG_M16)   /* microMIPS mode */
> +                        code = ((trap_instr >> 12) & ((1 << 4) - 1));
> +                    else
> +                        code = ((trap_instr >> 6) & ((1 << 10) - 1));

This if statement needs braces to fit QEMU coding style.
scripts/checkpatch.pl will tell you about this sort of thing.

thanks
-- PMM



reply via email to

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