Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* sim/arm/armos.c: IsTTY [PATCH]
@ 2005-08-15 21:19 Shaun Jackman
  2005-08-22 18:51 ` Shaun Jackman
  2005-08-30  2:38 ` Daniel Jacobowitz
  0 siblings, 2 replies; 22+ messages in thread
From: Shaun Jackman @ 2005-08-15 21:19 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 3863 bytes --]

This patch adds support for the ARM IsTTY, Remove, and Rename SWI calls.

Please cc me in your reply. Cheers,
Shaun

2005-08-15  Shaun Jackman  <sjackman@gmail.com>

	* sim/arm/armos.c (unlink): Remove this macro. It is unused
	in this file and conflicts with sim_callback->unlink.
	(SWIremove): New function.
	(SWIrename): Ditto.
	(ARMul_OSHandleSWI): Handle the RDP calls SWI_IsTTY,
	SWI_Remove, and SWI_Rename, as well as the RDI calls
	AngelSWI_Reason_IsTTY, AngelSWI_Reason_Remove, and
	AngelSWI_Reason_Rename.

Index: sim/arm/armos.c
===================================================================
RCS file: /cvs/src/src/sim/arm/armos.c,v
retrieving revision 1.22
diff -u -r1.22 armos.c
--- sim/arm/armos.c	12 May 2005 07:36:58 -0000	1.22
+++ sim/arm/armos.c	15 Aug 2005 18:41:51 -0000
@@ -34,10 +34,6 @@
 #define TARGET_O_BINARY 0
 #endif
 
-#ifdef __STDC__
-#define unlink(s) remove(s)
-#endif
-
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>		/* For SEEK_SET etc.  */
 #endif
@@ -403,6 +399,36 @@
   OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
 }
 
+static void
+SWIremove (ARMul_State * state, ARMword path)
+{
+  struct OSblock *OSptr = (struct OSblock *) state->OSptr;
+  char dummy[2000];
+  int i;
+
+  for (i = 0; (dummy[i] = ARMul_SafeReadByte (state, path + i)); i++)
+    ;
+
+  state->Reg[0] = sim_callback->unlink (sim_callback, dummy);
+  OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
+}
+
+static void
+SWIrename (ARMul_State * state, ARMword old, ARMword new)
+{
+  struct OSblock *OSptr = (struct OSblock *) state->OSptr;
+  char olddummy[2000], newdummy[2000];
+  int i;
+
+  for (i = 0; (olddummy[i] = ARMul_SafeReadByte (state, old + i)); i++)
+    ;
+  for (i = 0; (newdummy[i] = ARMul_SafeReadByte (state, new + i)); i++)
+    ;
+
+  state->Reg[0] = sim_callback->rename (sim_callback, olddummy, newdummy);
+  OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
+}
+
 /* The emulator calls this routine when a SWI instruction is encuntered.
    The parameter passed is the SWI number (lower 24 bits of the
instruction).  */
 
@@ -544,6 +570,30 @@
       state->Emulate = FALSE;
       break;
 
+    case SWI_Remove:
+      if (swi_mask & SWI_MASK_DEMON)
+	SWIremove (state, state->Reg[0]);
+      else
+	unhandled = TRUE;
+      break;
+
+    case SWI_Rename:
+      if (swi_mask & SWI_MASK_DEMON)
+	SWIrename (state, state->Reg[0], state->Reg[1]);
+      else
+	unhandled = TRUE;
+      break;
+
+    case SWI_IsTTY:
+      if (swi_mask & SWI_MASK_DEMON)
+	{
+	  state->Reg[0] = sim_callback->isatty (sim_callback, state->Reg[0]);
+	  OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
+	}
+      else
+	unhandled = TRUE;
+      break;
+
       /* Handle Angel SWIs as well as Demon ones.  */
     case AngelSWI_ARM:
     case AngelSWI_Thumb:
@@ -566,10 +616,7 @@
 	  
 	      /* Unimplemented reason codes.  */
 	    case AngelSWI_Reason_ReadC:
-	    case AngelSWI_Reason_IsTTY:
 	    case AngelSWI_Reason_TmpNam:
-	    case AngelSWI_Reason_Remove:
-	    case AngelSWI_Reason_Rename:
 	    case AngelSWI_Reason_System:
 	    case AngelSWI_Reason_EnterSVC:
 	    default:
@@ -684,6 +731,21 @@
 			ARMul_ReadWord (state, addr + 4),
 			ARMul_ReadWord (state, addr + 8));
 	      break;
+
+	    case AngelSWI_Reason_IsTTY:
+	      state->Reg[0] = sim_callback->close (sim_callback,
+						   ARMul_ReadWord (state, addr));
+	      OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
+	      break;
+
+	    case AngelSWI_Reason_Remove:
+	      SWIremove (state,
+			 ARMul_ReadWord (state, addr));
+
+	    case AngelSWI_Reason_Rename:
+	      SWIrename (state,
+			 ARMul_ReadWord (state, addr),
+			 ARMul_ReadWord (state, addr + 4));
 	    }
 	}
       else

[-- Attachment #2: sim-arm-swi.diff --]
[-- Type: text/plain, Size: 3610 bytes --]

2005-08-15  Shaun Jackman  <sjackman@gmail.com>

	* sim/arm/armos.c (unlink): Remove this macro. It is unused
	in this file and conflicts with sim_callback->unlink.
	(SWIremove): New function.
	(SWIrename): Ditto.
	(ARMul_OSHandleSWI): Handle the RDP calls SWI_IsTTY,
	SWI_Remove, and SWI_Rename, as well as the RDI calls
	AngelSWI_Reason_IsTTY, AngelSWI_Reason_Remove, and
	AngelSWI_Reason_Rename.

Index: sim/arm/armos.c
===================================================================
RCS file: /cvs/src/src/sim/arm/armos.c,v
retrieving revision 1.22
diff -u -r1.22 armos.c
--- sim/arm/armos.c	12 May 2005 07:36:58 -0000	1.22
+++ sim/arm/armos.c	15 Aug 2005 18:41:51 -0000
@@ -34,10 +34,6 @@
 #define TARGET_O_BINARY 0
 #endif
 
-#ifdef __STDC__
-#define unlink(s) remove(s)
-#endif
-
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>		/* For SEEK_SET etc.  */
 #endif
@@ -403,6 +399,36 @@
   OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
 }
 
+static void
+SWIremove (ARMul_State * state, ARMword path)
+{
+  struct OSblock *OSptr = (struct OSblock *) state->OSptr;
+  char dummy[2000];
+  int i;
+
+  for (i = 0; (dummy[i] = ARMul_SafeReadByte (state, path + i)); i++)
+    ;
+
+  state->Reg[0] = sim_callback->unlink (sim_callback, dummy);
+  OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
+}
+
+static void
+SWIrename (ARMul_State * state, ARMword old, ARMword new)
+{
+  struct OSblock *OSptr = (struct OSblock *) state->OSptr;
+  char olddummy[2000], newdummy[2000];
+  int i;
+
+  for (i = 0; (olddummy[i] = ARMul_SafeReadByte (state, old + i)); i++)
+    ;
+  for (i = 0; (newdummy[i] = ARMul_SafeReadByte (state, new + i)); i++)
+    ;
+
+  state->Reg[0] = sim_callback->rename (sim_callback, olddummy, newdummy);
+  OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
+}
+
 /* The emulator calls this routine when a SWI instruction is encuntered.
    The parameter passed is the SWI number (lower 24 bits of the instruction).  */
 
@@ -544,6 +570,30 @@
       state->Emulate = FALSE;
       break;
 
+    case SWI_Remove:
+      if (swi_mask & SWI_MASK_DEMON)
+	SWIremove (state, state->Reg[0]);
+      else
+	unhandled = TRUE;
+      break;
+
+    case SWI_Rename:
+      if (swi_mask & SWI_MASK_DEMON)
+	SWIrename (state, state->Reg[0], state->Reg[1]);
+      else
+	unhandled = TRUE;
+      break;
+
+    case SWI_IsTTY:
+      if (swi_mask & SWI_MASK_DEMON)
+	{
+	  state->Reg[0] = sim_callback->isatty (sim_callback, state->Reg[0]);
+	  OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
+	}
+      else
+	unhandled = TRUE;
+      break;
+
       /* Handle Angel SWIs as well as Demon ones.  */
     case AngelSWI_ARM:
     case AngelSWI_Thumb:
@@ -566,10 +616,7 @@
 	  
 	      /* Unimplemented reason codes.  */
 	    case AngelSWI_Reason_ReadC:
-	    case AngelSWI_Reason_IsTTY:
 	    case AngelSWI_Reason_TmpNam:
-	    case AngelSWI_Reason_Remove:
-	    case AngelSWI_Reason_Rename:
 	    case AngelSWI_Reason_System:
 	    case AngelSWI_Reason_EnterSVC:
 	    default:
@@ -684,6 +731,21 @@
 			ARMul_ReadWord (state, addr + 4),
 			ARMul_ReadWord (state, addr + 8));
 	      break;
+
+	    case AngelSWI_Reason_IsTTY:
+	      state->Reg[0] = sim_callback->close (sim_callback,
+						   ARMul_ReadWord (state, addr));
+	      OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
+	      break;
+
+	    case AngelSWI_Reason_Remove:
+	      SWIremove (state,
+			 ARMul_ReadWord (state, addr));
+
+	    case AngelSWI_Reason_Rename:
+	      SWIrename (state,
+			 ARMul_ReadWord (state, addr),
+			 ARMul_ReadWord (state, addr + 4));
 	    }
 	}
       else

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2005-11-17 13:46 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-08-15 21:19 sim/arm/armos.c: IsTTY [PATCH] Shaun Jackman
2005-08-22 18:51 ` Shaun Jackman
2005-08-30  2:38 ` Daniel Jacobowitz
2005-09-06 16:22   ` Richard Earnshaw
2005-09-07 16:51   ` Shaun Jackman
2005-09-08  9:07     ` Richard Earnshaw
2005-09-08 19:28       ` Eli Zaretskii
2005-09-09 17:16       ` Shaun Jackman
2005-09-09 17:23       ` Shaun Jackman
2005-09-17 22:37         ` Daniel Jacobowitz
2005-09-17 23:32           ` Shaun Jackman
2005-09-18  1:14             ` Daniel Jacobowitz
2005-09-18  2:40               ` Shaun Jackman
2005-09-18  2:59                 ` Daniel Jacobowitz
     [not found]                 ` <20050918025653.GA4285@nevyn.them.org>
     [not found]                   ` <7f45d93905091720161f61e995@mail.gmail.com>
     [not found]                     ` <20050918033152.GA6546@nevyn.them.org>
2005-10-13 20:30                       ` Shaun Jackman
2005-10-19 16:12                 ` Shaun Jackman
2005-11-17 10:49                   ` Daniel Jacobowitz
2005-11-17 15:54                     ` Shaun Jackman
2005-09-18  3:32           ` Eli Zaretskii
2005-09-18  3:44             ` Daniel Jacobowitz
2005-09-18  9:04               ` Mark Kettenis
2005-09-18 19:13                 ` Eli Zaretskii

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox