* armos.c (SWIWrite0): Use generic host_callback mechanism
authorKeith Seitz <keiths@redhat.com>
Thu, 21 Feb 2002 20:22:49 +0000 (20:22 +0000)
committerKeith Seitz <keiths@redhat.com>
Thu, 21 Feb 2002 20:22:49 +0000 (20:22 +0000)
for supported OS functions "open", "close", "write", etc.
(SWIopen): Likewise.
(SWIread): Likewise.
(SWIwrite): Likewise.
(SWIflen): Likewise.
(ARMul_OSHandleSWI): Likewise.

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

index fc072e77d840df81a5ebee0ffcbdebaeb6fef9f6..bf7256c4516517fc79225d6a0ba699bd3efc4a20 100644 (file)
@@ -1,3 +1,13 @@
+2002-02-21  Keith Seitz  <keiths@redhat.com>
+
+       * armos.c (SWIWrite0): Use generic host_callback mechanism
+       for supported OS functions "open", "close", "write", etc.
+       (SWIopen): Likewise.
+       (SWIread): Likewise.
+       (SWIwrite): Likewise.
+       (SWIflen): Likewise.
+       (ARMul_OSHandleSWI): Likewise.
+
 2002-02-05  Nick Clifton  <nickc@cambridge.redhat.com>
 
        * wrapper.c (sim_create_inferior): Modify previous patch so that
index 93dcbd89345c5d229a840915182efe5311e2f688..3b0db22b34d71f1d43f8d737cb8c1f39ddbdc1db 100644 (file)
@@ -83,6 +83,9 @@ extern int _fisatty (FILE *);
 /* For RDIError_BreakpointReached.  */
 #include "dbg_rdi.h"
 
+#include "callback.h"
+extern host_callback *sim_callback;
+
 extern unsigned ARMul_OSInit (ARMul_State * state);
 extern void ARMul_OSExit (ARMul_State * state);
 extern unsigned ARMul_OSHandleSWI (ARMul_State * state, ARMword number);
@@ -258,9 +261,9 @@ SWIWrite0 (ARMul_State * state, ARMword addr)
   struct OSblock *OSptr = (struct OSblock *) state->OSptr;
 
   while ((temp = ARMul_SafeReadByte (state, addr++)) != 0)
-    (void) fputc ((char) temp, stdout);
+    (void) sim_callback->write_stdout (sim_callback, (char *) &temp, 1);
 
-  OSptr->ErrorNo = errno;
+  OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
 }
 
 static void
@@ -303,8 +306,8 @@ SWIopen (ARMul_State * state, ARMword name, ARMword SWIflags)
     }
   else
     {
-      state->Reg[0] = (int) open (dummy, flags, 0666);
-      OSptr->ErrorNo = errno;
+      state->Reg[0] = sim_callback->open (sim_callback, dummy, flags);
+      OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
     }
 }
 
@@ -318,19 +321,19 @@ SWIread (ARMul_State * state, ARMword f, ARMword ptr, ARMword len)
 
   if (local == NULL)
     {
-      fprintf (stderr, "sim: Unable to read 0x%ulx bytes - out of memory\n",
+      sim_callback->printf_filtered (sim_callback, "sim: Unable to read 0x%ulx bytes - out of memory\n",
               len);
       return;
     }
 
-  res = read (f, local, len);
+  res = sim_callback->read (sim_callback, f, local, len);
   if (res > 0)
     for (i = 0; i < res; i++)
       ARMul_SafeWriteByte (state, ptr + i, local[i]);
 
   free (local);
   state->Reg[0] = res == -1 ? -1 : len - res;
-  OSptr->ErrorNo = errno;
+  OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
 }
 
 static void
@@ -343,7 +346,7 @@ SWIwrite (ARMul_State * state, ARMword f, ARMword ptr, ARMword len)
 
   if (local == NULL)
     {
-      fprintf (stderr, "sim: Unable to write 0x%lx bytes - out of memory\n",
+      sim_callback->printf_filtered (sim_callback, "sim: Unable to write 0x%lx bytes - out of memory\n",
               (long) len);
       return;
     }
@@ -351,11 +354,11 @@ SWIwrite (ARMul_State * state, ARMword f, ARMword ptr, ARMword len)
   for (i = 0; i < len; i++)
     local[i] = ARMul_SafeReadByte (state, ptr + i);
 
-  res = write (f, local, len);
+  res = sim_callback->write (sim_callback, f, local, len);
   state->Reg[0] = res == -1 ? -1 : len - res;
   free (local);
 
-  OSptr->ErrorNo = errno;
+  OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
 }
 
 static void
@@ -371,12 +374,12 @@ SWIflen (ARMul_State * state, ARMword fh)
       return;
     }
 
-  addr = lseek (fh, 0, SEEK_CUR);
+  addr = sim_callback->lseek (sim_callback, fh, 0, SEEK_CUR);
 
-  state->Reg[0] = lseek (fh, 0L, SEEK_END);
-  (void) lseek (fh, addr, SEEK_SET);
+  state->Reg[0] = sim_callback->lseek (sim_callback, fh, 0L, SEEK_END);
+  (void) sim_callback->lseek (sim_callback, fh, addr, SEEK_SET);
 
-  OSptr->ErrorNo = errno;
+  OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
 }
 
 /* The emulator calls this routine when a SWI instruction is encuntered.
@@ -442,13 +445,13 @@ ARMul_OSHandleSWI (ARMul_State * state, ARMword number)
       break;
 
     case SWI_Time:
-      state->Reg[0] = (ARMword) time (NULL);
-      OSptr->ErrorNo = errno;
+      state->Reg[0] = (ARMword) sim_callback->time (sim_callback, NULL);
+      OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
       break;
 
     case SWI_Close:
-      state->Reg[0] = close (state->Reg[0]);
-      OSptr->ErrorNo = errno;
+      state->Reg[0] = sim_callback->close (sim_callback, state->Reg[0]);
+      OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
       break;
 
     case SWI_Flen:
@@ -461,13 +464,16 @@ ARMul_OSHandleSWI (ARMul_State * state, ARMword number)
 
     case SWI_Seek:
       /* We must return non-zero for failure.  */
-      state->Reg[0] = -1 >= lseek (state->Reg[0], state->Reg[1], SEEK_SET);
-      OSptr->ErrorNo = errno;
+      state->Reg[0] = -1 >= sim_callback->lseek (sim_callback, state->Reg[0], state->Reg[1], SEEK_SET);
+      OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
       break;
 
     case SWI_WriteC:
-      (void) fputc ((int) state->Reg[0], stdout);
-      OSptr->ErrorNo = errno;
+      {
+       char tmp = state->Reg[0];
+       (void) sim_callback->write_stdout (sim_callback, &tmp, 1);
+       OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
+      }
       break;
 
     case SWI_Write0:
@@ -528,13 +534,16 @@ ARMul_OSHandleSWI (ARMul_State * state, ARMword number)
          break;
 
        case AngelSWI_Reason_Time:
-         state->Reg[0] = (ARMword) time (NULL);
-         OSptr->ErrorNo = errno;
+         state->Reg[0] = (ARMword) sim_callback->time (sim_callback, NULL);
+         OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
          break;
 
        case AngelSWI_Reason_WriteC:
-         (void) fputc ((int) ARMul_SafeReadByte (state, addr), stdout);
-         OSptr->ErrorNo = errno;
+         {
+           char tmp = ARMul_SafeReadByte (state, addr);
+           (void) sim_callback->write_stdout (sim_callback, &tmp, 1);
+           OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
+         }
          /* Fall thgrough.  */
 
        case AngelSWI_Reason_Write0:
@@ -542,15 +551,15 @@ ARMul_OSHandleSWI (ARMul_State * state, ARMword number)
          break;
 
        case AngelSWI_Reason_Close:
-         state->Reg[0] = close (ARMul_ReadWord (state, addr));
-         OSptr->ErrorNo = errno;
+         state->Reg[0] = sim_callback->close (sim_callback, ARMul_ReadWord (state, addr));
+         OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
          break;
 
        case AngelSWI_Reason_Seek:
-         state->Reg[0] = -1 >= lseek (ARMul_ReadWord (state, addr),
+         state->Reg[0] = -1 >= sim_callback->lseek (sim_callback, ARMul_ReadWord (state, addr),
                                       ARMul_ReadWord (state, addr + 4),
                                       SEEK_SET);
-         OSptr->ErrorNo = errno;
+         OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
          break;
 
        case AngelSWI_Reason_FLen:
@@ -652,7 +661,7 @@ ARMul_OSHandleSWI (ARMul_State * state, ARMword number)
        }
       else
        {
-         fprintf (stderr, "unknown SWI encountered - %x - ignoring\n", number);
+         sim_callback->printf_filtered (sim_callback, "sim: unknown SWI encountered - %x - ignoring\n", number);
          return FALSE;
        }
     }