* callback.h (struct host_callback_struct): New members pipe,
authorHans-Peter Nilsson <hp@axis.com>
Fri, 28 Jan 2005 03:39:28 +0000 (03:39 +0000)
committerHans-Peter Nilsson <hp@axis.com>
Fri, 28 Jan 2005 03:39:28 +0000 (03:39 +0000)
pipe_empty, pipe_nonempty, ispipe, pipe_buffer and
target_sizeof_int.
(CB_SYS_pipe): New macro.

include/gdb/ChangeLog
include/gdb/callback.h

index d07d00d1686dd77fafe254540cf462531c6803c8..42e1bfac4b81044377f0823b2dace2bc5bb195a7 100644 (file)
@@ -1,5 +1,10 @@
 2005-01-28  Hans-Peter Nilsson  <hp@axis.com>
 
+       * callback.h (struct host_callback_struct): New members pipe,
+       pipe_empty, pipe_nonempty, ispipe, pipe_buffer and
+       target_sizeof_int.
+       (CB_SYS_pipe): New macro.
+
        * callback.h: Include "bfd.h".
        (struct host_callback_struct): New member target_endian.
        (cb_store_target_endian): Declare.
index 08b1b6b357230a8303944824118a9d4faf0d51ff..6c75a193d068513cdce91da3c23b6c7ea7027b90 100644 (file)
@@ -98,6 +98,14 @@ struct host_callback_struct
   int (*lstat) PARAMS ((host_callback *, const char *, struct stat *));
   int (*ftruncate) PARAMS ((host_callback *, int, long));
   int (*truncate) PARAMS ((host_callback *, const char *, long));
+  int (*pipe) PARAMS ((host_callback *, int *));
+
+  /* Called by the framework when a read call has emptied a pipe buffer.  */
+  void (*pipe_empty) PARAMS ((host_callback *, int read_fd, int write_fd));
+
+  /* Called by the framework when a write call makes a pipe buffer
+     non-empty.  */
+  void (*pipe_nonempty) PARAMS ((host_callback *, int read_fd, int write_fd));
 
   /* When present, call to the client to give it the oportunity to
      poll any io devices for a request to quit (indicated by a nonzero
@@ -136,6 +144,22 @@ struct host_callback_struct
      implement now.  */
   short fd_buddy[MAX_CALLBACK_FDS+1];
 
+  /* 0 = none, >0 = reader (index of writer),
+     <0 = writer (negative index of reader).
+     If abs (ispipe[N]) == N, then N is an end of a pipe whose other
+     end is closed.  */
+  short ispipe[MAX_CALLBACK_FDS];
+
+  /* A writer stores the buffer at its index.  Consecutive writes
+     realloc the buffer and add to the size.  The reader indicates the
+     read part in its .size, until it has consumed it all, at which
+     point it deallocates the buffer and zeroes out both sizes.  */
+  struct pipe_write_buffer
+  {
+    int size;
+    char *buffer;
+  } pipe_buffer[MAX_CALLBACK_FDS];
+
   /* System call numbers.  */
   CB_TARGET_DEFS_MAP *syscall_map;
   /* Errno values.  */
@@ -155,6 +179,14 @@ struct host_callback_struct
 
   enum bfd_endian target_endian;
 
+  /* Size of an "int" on the target (for syscalls whose ABI uses "int").
+     This must include padding, and only padding-at-higher-address is
+     supported.  For example, a 64-bit target with 32-bit int:s which
+     are padded to 64 bits when in an array, should supposedly set this
+     to 8.  The default is 4 which matches ILP32 targets and 64-bit
+     targets with 32-bit ints and no padding.  */
+  int target_sizeof_int;
+
   /* Marker for those wanting to do sanity checks.
      This should remain the last member of this struct to help catch
      miscompilation errors. */
@@ -199,6 +231,7 @@ extern host_callback default_callback;
 #define CB_SYS_rename  20
 #define CB_SYS_truncate        21
 #define CB_SYS_ftruncate 22
+#define CB_SYS_pipe    23
 \f
 /* Struct use to pass and return information necessary to perform a
    system call.  */