* armos.c (ARMul_OSHandleSWI): Handle the RedBoot system
authorDaniel Jacobowitz <drow@false.org>
Thu, 2 Feb 2006 01:48:16 +0000 (01:48 +0000)
committerDaniel Jacobowitz <drow@false.org>
Thu, 2 Feb 2006 01:48:16 +0000 (01:48 +0000)
call meminfo. Return ENOSYS for unhandled RedBoot syscalls.

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

index 84bdf6e..df88ef1 100644 (file)
@@ -1,3 +1,8 @@
+2006-02-01  Shaun Jackman  <sjackman@gmail.com>
+
+       * armos.c (ARMul_OSHandleSWI): Handle the RedBoot system
+       call meminfo. Return ENOSYS for unhandled RedBoot syscalls.
+
 2005-11-23  Mark Mitchell  <mark@codesourcery.com>
 
        * wrapper.c (gdb/signals.h): Include it.
@@ -7,7 +12,7 @@
 
 2005-11-16  Shaun Jackman  <sjackman@gmail.com>
 
-       * sim/arm/armos.c: Include limits.h
+       * armos.c: Include limits.h
        (unlink): Remove this macro. It is unused in this file and
        conflicts with sim_callback->unlink.
        (PATH_MAX): Define as 1024 if not already defined.
index 5f5ead7..8e346c7 100644 (file)
@@ -859,9 +859,26 @@ ARMul_OSHandleSWI (ARMul_State * state, ARMword number)
            case 18: /* Time.  */
              sim_callback->printf_filtered
                (sim_callback,
-                "sim: unhandled RedBoot syscall '%d' encountered - ignoring\n",
+                "sim: unhandled RedBoot syscall `%d' encountered - "
+                "returning ENOSYS\n",
                 state->Reg[0]);
-             return FALSE;
+             state->Reg[0] = -1;
+             OSptr->ErrorNo = cb_host_to_target_errno
+               (sim_callback, ENOSYS);
+             break;
+           case 1001: /* Meminfo. */
+             {
+               ARMword totmem = state->Reg[1],
+                       topmem = state->Reg[2];
+               ARMword stack = state->MemSize > 0
+                 ? state->MemSize : ADDRUSERSTACK;
+               if (totmem != 0)
+                 ARMul_WriteWord (state, totmem, stack);
+               if (topmem != 0)
+                 ARMul_WriteWord (state, topmem, stack);
+               state->Reg[0] = 0;
+               break;
+             }
 
            default:
              sim_callback->printf_filtered