Patchwork [12/21] sparc-linux-user: Handle SIGILL.

login
register
mail settings
Submitter Richard Henderson
Date Oct. 18, 2011, 6:50 p.m.
Message ID <1318963843-25100-13-git-send-email-rth@twiddle.net>
Download mbox | patch
Permalink /patch/120498/
State New
Headers show

Comments

Richard Henderson - Oct. 18, 2011, 6:50 p.m.
Signed-off-by: Richard Henderson <rth@twiddle.net>
Cc: Riku Voipio <riku.voipio@iki.fi>
---
 linux-user/main.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)
Blue Swirl - Oct. 18, 2011, 8:32 p.m.
On Tue, Oct 18, 2011 at 6:50 PM, Richard Henderson <rth@twiddle.net> wrote:
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> Cc: Riku Voipio <riku.voipio@iki.fi>
> ---
>  linux-user/main.c |    9 +++++++++
>  1 files changed, 9 insertions(+), 0 deletions(-)
>
> diff --git a/linux-user/main.c b/linux-user/main.c
> index 186358b..686f6f6 100644
> --- a/linux-user/main.c
> +++ b/linux-user/main.c
> @@ -1191,6 +1191,15 @@ void cpu_loop (CPUSPARCState *env)
>         case EXCP_INTERRUPT:
>             /* just indicate that signals should be handled asap */
>             break;
> +        case TT_ILL_INSN:
> +            {
> +                info.si_signo = SIGILL;

TARGET_SIGILL

> +                info.si_errno = 0;
> +                info.si_code = TARGET_ILL_ILLOPC;
> +                info._sifields._sigfault._addr = env->pc;
> +                queue_signal(env, info.si_signo, &info);
> +            }
> +            break;
>         case EXCP_DEBUG:
>             {
>                 int sig;
> --
> 1.7.6.4
>
>
Richard Henderson - Oct. 18, 2011, 10:27 p.m.
On 10/18/2011 01:32 PM, Blue Swirl wrote:
>> > +                info.si_signo = SIGILL;
> TARGET_SIGILL
> 

Doh.


r~

Patch

diff --git a/linux-user/main.c b/linux-user/main.c
index 186358b..686f6f6 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -1191,6 +1191,15 @@  void cpu_loop (CPUSPARCState *env)
         case EXCP_INTERRUPT:
             /* just indicate that signals should be handled asap */
             break;
+        case TT_ILL_INSN:
+            {
+                info.si_signo = SIGILL;
+                info.si_errno = 0;
+                info.si_code = TARGET_ILL_ILLOPC;
+                info._sifields._sigfault._addr = env->pc;
+                queue_signal(env, info.si_signo, &info);
+            }
+            break;
         case EXCP_DEBUG:
             {
                 int sig;