Catch and ignore SWIs of -1, they can be caused by an interrupted system
authorNick Clifton <nickc@redhat.com>
Thu, 15 Aug 2002 14:28:55 +0000 (14:28 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 15 Aug 2002 14:28:55 +0000 (14:28 +0000)
call being resumed by GDB.

sim/arm/ChangeLog
sim/arm/armos.c

index acd66adb5aecc008d13a2751576a782640f05811..9ce404ed6bd36be2062b008d40321ca487882a68 100644 (file)
@@ -1,3 +1,8 @@
+2002-08-15  Nick Clifton  <nickc@redhat.com>
+
+       * armos.c (ARMul_OSHandleSWI): Catch and ignore SWIs of -1, they
+       can be caused by an interrupted system call being resumed by GDB.
+
 2002-07-05  Nick Clifton  <nickc@cambridge.redhat.com>
 
        * armemu.c (ARMul_Emulate32): Add more tests for valid MIA, MIAPH
index ccf9a576e8799e3af8f3dfa8b3b3c3f8b488ae39..7c0360c51f49a06daf126660a9a6dd741ceb482c 100644 (file)
@@ -553,6 +553,13 @@ ARMul_OSHandleSWI (ARMul_State * state, ARMword number)
          /* R0 is a reason code.  */
          switch (state->Reg[0])
            {
+           case -1:
+             /* This can happen when a SWI is interrupted (eg receiving a
+                ctrl-C whilst processing SWIRead()).  The SWI will complete
+                returning -1 in r0 to the caller.  If GDB is then used to
+                resume the system call the reason code will now be -1.  */
+             return FALSE;
+         
              /* Unimplemented reason codes.  */
            case AngelSWI_Reason_ReadC:
            case AngelSWI_Reason_IsTTY:
@@ -685,6 +692,13 @@ ARMul_OSHandleSWI (ARMul_State * state, ARMword number)
       /* These are used by the FPE code.  */
       break;
       
+    case -1:
+      /* This can happen when a SWI is interrupted (eg receiving a
+        ctrl-C whilst processing SWIRead()).  The SWI will complete
+        returning -1 in r0 to the caller.  If GDB is then used to
+        resume the system call the reason code will now be -1.  */
+      return FALSE;
+         
     case 0x180001: /* RedBoot's Syscall SWI in ARM mode.  */
       if (swi_mask & SWI_MASK_REDBOOT)
        {