This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Committed, sim/cris: support fdopen on fd 0, 1 and 2.


Like the previous fdopen special-case, but for the "standard"
fd:s, 0, 1 and 2, assuming they're stdin, stdout and stderr (see
patch for why the assumption is sadly valid).  This is the last
change before committing the testsuite with a test added for
this change.  (And JFTR, I *have* used zlib for testing before.)

sim/:
	cris/traps.c (TARGET_O_RDONLY, TARGET_O_WRONLY): Define.
	(open_map): Use TARGET_O_ACCMODE, TARGET_O_RDONLY and
	TARGET_O_WRONLY.
	(cris_break_13_handler) <case TARGET_SYS_fcntl>: Add support for
	F_GETFL on fd 0, 1 and 2.

Index: traps.c
===================================================================
RCS file: /cvs/src/src/sim/cris/traps.c,v
retrieving revision 1.5
diff -p -u -r1.5 traps.c
--- traps.c	17 Nov 2005 16:14:53 -0000	1.5
+++ traps.c	20 Nov 2005 14:20:58 -0000
@@ -664,18 +664,22 @@ static const CB_TARGET_DEFS_MAP errno_ma
    installation and removing synonyms and unnecessary items.  Don't
    forget the end-marker.  */
 
-/* This one we treat specially, as it's used in the fcntl syscall.  */
-#define TARGET_O_ACCMODE 3
+/* These we treat specially, as they're used in the fcntl F_GETFL
+   syscall.  For consistency, open_map is also manually edited to use
+   these macros.  */
+#define TARGET_O_ACCMODE 0x3
+#define TARGET_O_RDONLY 0x0
+#define TARGET_O_WRONLY 0x1
 
 static const CB_TARGET_DEFS_MAP open_map[] = {
 #ifdef O_ACCMODE
-  { O_ACCMODE, 0x3 },
+  { O_ACCMODE, TARGET_O_ACCMODE },
 #endif
 #ifdef O_RDONLY
-  { O_RDONLY, 0x0 },
+  { O_RDONLY, TARGET_O_RDONLY },
 #endif
 #ifdef O_WRONLY
-  { O_WRONLY, 0x1 },
+  { O_WRONLY, TARGET_O_WRONLY },
 #endif
 #ifdef O_RDWR
   { O_RDWR, 0x2 },
@@ -1429,9 +1433,24 @@ cris_break_13_handler (SIM_CPU *current_
 		  retval = current_cpu->last_open_flags & TARGET_O_ACCMODE;
 		  break;
 		}
+	      else if (arg1 == 0)
+		{
+		  /* Because we can't freopen fd:s 0, 1, 2 to mean
+		     something else than stdin, stdout and stderr
+		     (sim/common/syscall.c:cb_syscall special cases fd
+		     0, 1 and 2), we know what flags that we can
+		     sanely return for these fd:s.  */
+		  retval = TARGET_O_RDONLY;
+		  break;
+		}
+	      else if (arg1 == 1 || arg1 == 2)
+		{
+		  retval = TARGET_O_WRONLY;
+		  break;
+		}
 	      /* FALLTHROUGH */
-	      /* Abort for all other cases.  */
 	    default:
+	      /* Abort for all other cases.  */
 	      sim_io_eprintf (sd, "Unimplemented %s syscall "
 			      "(fd: 0x%lx: cmd: 0x%lx arg: 0x%lx)\n",
 			      callnum == TARGET_SYS_fcntl

brgds, H-P


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]