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]

Re: [patch] Fix recent gdb.mi testsuite "unknown output after running"


On Thursday 21 May 2009 03:16:29, Pedro Alves wrote:
> On Wednesday 20 May 2009 19:32:10, Jan Kratochvil wrote:
> 
> > recently getting on Fedora 11 (=Rawhide) x86_64:
> > 
> > FAIL: gdb.mi/mi-nsintrall.exp: mi runto main (unknown output after running)
> > ERROR: mi-nsintrall.exp tests suppressed
> > FAIL: gdb.mi/mi-async.exp: start: stop (unknown output after running)
> > FAIL: gdb.mi/mi-async.exp: restart: stop (unknown output after running)
> > FAIL: gdb.mi/mi-nsmoribund.exp: mi runto main (unknown output after running)
> > ERROR: mi-nsmoribund.exp tests suppressed
> > FAIL: gdb.mi/mi-nonstop.exp: mi runto main (unknown output after running)
> > ERROR: mi-nonstop.exp tests suppressed
> > FAIL: gdb.mi/mi-nonstop-exit.exp: mi runto main (unknown output after running)
> > ERROR: mi-nonstop-exit.exp tests suppressed
> > 
> > but it is more a bug in the testsuite as GDB output looks valid (below).
> > 
> > Attaching a quick fix, just I understand an MI grammar compliant parser would
> > be better for the testsuite.
> 
> I'd like to understand what caused this.  This is probably related
> to my recent changes to linux-nat.c to rework async mode, and add
> multiprocess, although I wasn't seeing this when I commited them.

It was, pie on my face.

I changed linux_nat_is_async_p recently to do:

-  return 1;
+  /* See target.h/target_async_mask.  */
+  return linux_nat_async_mask_value;

... and, linux_nat_create_inferior does:

 static void
 linux_nat_create_inferior (struct target_ops *ops, 
                            char *exec_file, char *allargs, char **env,
                            int from_tty)
 {
   int saved_async = 0;

   /* The fork_child mechanism is synchronous and calls target_wait, so
      we have to mask the async mode.  */

   if (target_can_async_p ())
     /* Mask async mode.  Creating a child requires a loop calling
        wait_for_inferior currently.  */
     saved_async = linux_nat_async_mask (0);

   linux_ops->to_create_inferior (ops, exec_file, allargs, env, from_tty);
 
   if (saved_async)
     linux_nat_async_mask (saved_async);
 }

The bowls of linux_ops->to_create_inferior do:

 fork_inferior
     -> startup_inferior
          -> target_wait
          -> target_resume


and mi/mi-interp.c:mi_on_resume has this:

 if (!running_result_record_printed && mi_proceeded)
    {
      running_result_record_printed = 1;
      /* This is what gdb used to do historically -- printing prompt even if
	 it cannot actually accept any input.  This will be surely removed
	 for MI3, and may be removed even earler.  */
      /* FIXME: review the use of target_is_async_p here -- is that
	 what we want? */
      if (!target_is_async_p ())
      ^^^^^^^^^^^^^^^^^^^^^^^^^^
	fputs_unfiltered ("(gdb) \n", raw_stdout);
    }

The target_is_async_p call here is now returning false due to the async
masking in create_inferior, and hence we're outputting that extra
prompt.  Sigh.  I believe that the check on target_is_async_p is
correct, but, something else is broken, namely the whole async-masking
workaround mechanism.

Here's what I think is a better solution (something that I
mentioned before in other similar contexts, and what I've actually
done on gdbserver too):

- target_wait is modeled on wait(2), and has in the mean time
gained a `pid' argument; so it is something between a `wait' and 
a `waitpid' --- it doesn't have an `options' flag.  If we add it
a new `options' parameter, we can have the caller selectivelly pass
down to the target that a blocking or non-blocking target_wait is
requested, and we can make the targets stop checking on the
target_is_async_p/target_can_async_p "globals".  startup_inferior
wants a blocking wait, so does wait_for_inferior.  fetch_inferior_event
never wants to block.  We drop the async masking on
linux_nat_create_inferior.  We could also drop the masking on
infcall.c, but I left it out for the moment, for no other reason than
wanting splitting this bug fix from further cleanup.

The patch below implements it.  The only interesting changes are
to infrun.c, fork-child.c, linux-nat.c, and remote.c.  All the 
rest is trivial adjustment to all other target_wait implementations,
and none of them care about the new argument, because no other
target implements async mode.

I've tested this on native linux async, and local gdbserver in
async mode too.  I'll check it in if there are no knee-jerk
reactions.

( warning, description + ChangeLog entry are bigger than
the patch itself :-) )

-- 
Pedro Alves

2009-05-21  Pedro Alves  <pedro@codesourcery.com>

	* target.h (TARGET_WNOHANG): New.
	* target.c (target_wait): Add `options' argument.  Adjust.
	(struct target_ops) <to_wait>: Add `options' argument.
	(target_wait): Add `options' argument.
	* infrun.c (wait_for_inferior): Pass 0 as options to
	target_wait (blocking wait).
	(fetch_inferior_event): Pass TARGET_WNOHANG as options to
	target_wait.
	* fork-child.c (startup_inferior): Pass 0 as options to
	target_wait (blocking wait).
	* linux-nat.c (linux_nat_create_inferior): Remove async masking.
	(linux_nat_wait_1): Add `target_options' argument.  Use it instead
	of checking on target_can_async_p.
	(linux_nat_wait): Add `target_options' argument.  Adjust.
	* remote.c (remote_wait_ns): Add `options' argument.  Adjust to
	check on TARGET_WNOWAIT instead of checking on remote_is_async_p.
	(remote_wait_as): Add `options' argument.  Adjust to check on
	TARGET_WNOWAIT instead of checking on remote_is_async_p.  If doing
	a blocking wait, keep waiting until an interesting event comes
	out.
	(remote_wait): Add `options' argument.  Don't loop here if the
	target is in async mode, and a blocking wait has been requested.

	* top.c (deprecated_target_wait_hook): Add `options' argument.
	* linux-thread-db.c (thread_db_wait): Add `options' argument, and
	pass it down to the layer beneath.
	* inf-ptrace.c (inf_ptrace_wait): Add `options' argument.
	* record.c (record_beneath_to_wait): Add `options' argument.
	(record_wait): Add `options' argument, and pass it down to the
	layer beneath.
	* bsd-uthread.c (bsd_uthread_wait): Add `options' argument.
	* darwin-nat.c (darwin_wait): Likewise.
	* defs.h (deprecated_target_wait_hook): Likewise.
	* gnu-nat.c (gnu_wait): Add `options' argument.
	* go32-nat.c (go32_wait): Likewise.
	* hpux-thread.c (hpux_thread_wait): Add `options' argument, and
	pass it down to the layer beneath.
	* inf-ttrace.c (inf_ttrace_wait): Add `options' argument.
	* monitor.c (monitor_wait): Likewise.
	* nto-procfs.c (procfs_wait): Likewise.
	* remote-mips.c (mips_wait): Add `options' argument.
	* remote-sim.c (gdbsim_wait): Likewise.
	* rs6000-nat.c (rs6000_wait): Add `options' argument.
	* sol-thread.c (sol_thread_wait): Add `options' argument, and pass
	it down to the layer beneath.
	* spu-linux-nat.c (spu_child_wait): Add `options' argument.
	* windows-nat.c (windows_wait): Likewise.
	* tui/tui-hooks.c (tui_target_wait_hook): Likewise.  Adjust.

---
 gdb/bsd-uthread.c     |    2 +-
 gdb/darwin-nat.c      |    2 +-
 gdb/defs.h            |    3 ++-
 gdb/fork-child.c      |    2 +-
 gdb/gnu-nat.c         |    2 +-
 gdb/go32-nat.c        |    2 +-
 gdb/hpux-thread.c     |    4 ++--
 gdb/inf-ptrace.c      |    2 +-
 gdb/inf-ttrace.c      |    2 +-
 gdb/infrun.c          |    8 ++++----
 gdb/linux-nat.c       |   24 +++++++++---------------
 gdb/linux-thread-db.c |    5 +++--
 gdb/monitor.c         |    2 +-
 gdb/nto-procfs.c      |    2 +-
 gdb/record.c          |   10 ++++++----
 gdb/remote-mips.c     |    2 +-
 gdb/remote-sim.c      |    2 +-
 gdb/remote.c          |   39 ++++++++++++++++++---------------------
 gdb/rs6000-nat.c      |    2 +-
 gdb/sol-thread.c      |    4 ++--
 gdb/spu-linux-nat.c   |    2 +-
 gdb/target.c          |    4 ++--
 gdb/target.h          |    9 +++++++--
 gdb/top.c             |    3 ++-
 gdb/tui/tui-hooks.c   |    4 ++--
 gdb/windows-nat.c     |    2 +-
 26 files changed, 73 insertions(+), 72 deletions(-)

Index: src/gdb/target.h
===================================================================
--- src.orig/gdb/target.h	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/target.h	2009-05-21 14:19:26.000000000 +0100
@@ -153,6 +153,10 @@ struct target_waitstatus
     value;
   };
 
+/* Options that can be passed to target_wait.  */
+
+#define TARGET_WNOHANG 1
+
 /* Return a pretty printed form of target_waitstatus.
    Space for the result is malloc'd, caller must free.  */
 extern char *target_waitstatus_to_string (const struct target_waitstatus *);
@@ -327,7 +331,7 @@ struct target_ops
     void (*to_disconnect) (struct target_ops *, char *, int);
     void (*to_resume) (struct target_ops *, ptid_t, int, enum target_signal);
     ptid_t (*to_wait) (struct target_ops *,
-		      ptid_t, struct target_waitstatus *);
+		       ptid_t, struct target_waitstatus *, int);
     void (*to_fetch_registers) (struct target_ops *, struct regcache *, int);
     void (*to_store_registers) (struct target_ops *, struct regcache *, int);
     void (*to_prepare_to_store) (struct regcache *);
@@ -623,7 +627,8 @@ extern void target_resume (ptid_t ptid, 
    to the prompt with a debugging target but without the frame cache,
    stop_pc, etc., set up.  */
 
-extern ptid_t target_wait (ptid_t ptid, struct target_waitstatus *status);
+extern ptid_t target_wait (ptid_t ptid, struct target_waitstatus *status,
+			   int options);
 
 /* Fetch at least register REGNO, or all regs if regno == -1.  No result.  */
 
Index: src/gdb/target.c
===================================================================
--- src.orig/gdb/target.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/target.c	2009-05-21 14:19:26.000000000 +0100
@@ -1836,7 +1836,7 @@ target_disconnect (char *args, int from_
 }
 
 ptid_t
-target_wait (ptid_t ptid, struct target_waitstatus *status)
+target_wait (ptid_t ptid, struct target_waitstatus *status, int options)
 {
   struct target_ops *t;
 
@@ -1844,7 +1844,7 @@ target_wait (ptid_t ptid, struct target_
     {
       if (t->to_wait != NULL)
 	{
-	  ptid_t retval = (*t->to_wait) (t, ptid, status);
+	  ptid_t retval = (*t->to_wait) (t, ptid, status, options);
 
 	  if (targetdebug)
 	    {
Index: src/gdb/infrun.c
===================================================================
--- src.orig/gdb/infrun.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/infrun.c	2009-05-21 14:19:26.000000000 +0100
@@ -1842,9 +1842,9 @@ wait_for_inferior (int treat_exec_as_sig
       struct cleanup *old_chain;
 
       if (deprecated_target_wait_hook)
-	ecs->ptid = deprecated_target_wait_hook (waiton_ptid, &ecs->ws);
+	ecs->ptid = deprecated_target_wait_hook (waiton_ptid, &ecs->ws, 0);
       else
-	ecs->ptid = target_wait (waiton_ptid, &ecs->ws);
+	ecs->ptid = target_wait (waiton_ptid, &ecs->ws, 0);
 
       if (debug_infrun)
 	print_target_wait_results (waiton_ptid, ecs->ptid, &ecs->ws);
@@ -1920,9 +1920,9 @@ fetch_inferior_event (void *client_data)
 
   if (deprecated_target_wait_hook)
     ecs->ptid =
-      deprecated_target_wait_hook (waiton_ptid, &ecs->ws);
+      deprecated_target_wait_hook (waiton_ptid, &ecs->ws, TARGET_WNOHANG);
   else
-    ecs->ptid = target_wait (waiton_ptid, &ecs->ws);
+    ecs->ptid = target_wait (waiton_ptid, &ecs->ws, TARGET_WNOHANG);
 
   if (debug_infrun)
     print_target_wait_results (waiton_ptid, ecs->ptid, &ecs->ws);
Index: src/gdb/fork-child.c
===================================================================
--- src.orig/gdb/fork-child.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/fork-child.c	2009-05-21 14:19:26.000000000 +0100
@@ -448,7 +448,7 @@ startup_inferior (int ntraps)
 
       struct target_waitstatus ws;
       memset (&ws, 0, sizeof (ws));
-      event_ptid = target_wait (resume_ptid, &ws);
+      event_ptid = target_wait (resume_ptid, &ws, 0);
 
       if (ws.kind == TARGET_WAITKIND_IGNORE)
 	/* The inferior didn't really stop, keep waiting.  */
Index: src/gdb/linux-nat.c
===================================================================
--- src.orig/gdb/linux-nat.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/linux-nat.c	2009-05-21 14:19:26.000000000 +0100
@@ -1341,7 +1341,6 @@ linux_nat_create_inferior (struct target
 			   char *exec_file, char *allargs, char **env,
 			   int from_tty)
 {
-  int saved_async = 0;
 #ifdef HAVE_PERSONALITY
   int personality_orig = 0, personality_set = 0;
 #endif /* HAVE_PERSONALITY */
@@ -1349,11 +1348,6 @@ linux_nat_create_inferior (struct target
   /* The fork_child mechanism is synchronous and calls target_wait, so
      we have to mask the async mode.  */
 
-  if (target_can_async_p ())
-    /* Mask async mode.  Creating a child requires a loop calling
-       wait_for_inferior currently.  */
-    saved_async = linux_nat_async_mask (0);
-
 #ifdef HAVE_PERSONALITY
   if (disable_randomization)
     {
@@ -1383,9 +1377,6 @@ linux_nat_create_inferior (struct target
 		 safe_strerror (errno));
     }
 #endif /* HAVE_PERSONALITY */
-
-  if (saved_async)
-    linux_nat_async_mask (saved_async);
 }
 
 static void
@@ -2687,7 +2678,8 @@ linux_nat_filter_event (int lwpid, int s
 
 static ptid_t
 linux_nat_wait_1 (struct target_ops *ops,
-		  ptid_t ptid, struct target_waitstatus *ourstatus)
+		  ptid_t ptid, struct target_waitstatus *ourstatus,
+		  int target_options)
 {
   static sigset_t prev_mask;
   struct lwp_info *lp = NULL;
@@ -2822,8 +2814,9 @@ retry:
       set_sigint_trap ();
     }
 
-  if (target_can_async_p ())
-    options |= WNOHANG; /* In async mode, don't block.  */
+  /* Translate generic target options into linux options.  */
+  if (target_options & TARGET_WNOHANG)
+    options |= WNOHANG;
 
   while (lp == NULL)
     {
@@ -2928,7 +2921,7 @@ retry:
 	     In sync mode, suspend waiting for a SIGCHLD signal.  */
 	  if (options & __WCLONE)
 	    {
-	      if (target_can_async_p ())
+	      if (target_options & TARGET_WNOHANG)
 		{
 		  /* No interesting event.  */
 		  ourstatus->kind = TARGET_WAITKIND_IGNORE;
@@ -3072,7 +3065,8 @@ retry:
 
 static ptid_t
 linux_nat_wait (struct target_ops *ops,
-		ptid_t ptid, struct target_waitstatus *ourstatus)
+		ptid_t ptid, struct target_waitstatus *ourstatus,
+		int target_options)
 {
   ptid_t event_ptid;
 
@@ -3083,7 +3077,7 @@ linux_nat_wait (struct target_ops *ops,
   if (target_can_async_p ())
     async_file_flush ();
 
-  event_ptid = linux_nat_wait_1 (ops, ptid, ourstatus);
+  event_ptid = linux_nat_wait_1 (ops, ptid, ourstatus, target_options);
 
   /* If we requested any event, and something came out, assume there
      may be more.  If we requested a specific lwp or process, also
Index: src/gdb/remote.c
===================================================================
--- src.orig/gdb/remote.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/remote.c	2009-05-21 14:19:26.000000000 +0100
@@ -4646,7 +4646,7 @@ process_stop_reply (struct stop_reply *s
 /* The non-stop mode version of target_wait.  */
 
 static ptid_t
-remote_wait_ns (ptid_t ptid, struct target_waitstatus *status)
+remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
 {
   struct remote_state *rs = get_remote_state ();
   struct remote_arch_state *rsa = get_remote_arch_state ();
@@ -4688,16 +4688,15 @@ remote_wait_ns (ptid_t ptid, struct targ
       if (stop_reply != NULL)
 	return process_stop_reply (stop_reply, status);
 
-      /* Still no event.  If we're in asynchronous mode, then just
+      /* Still no event.  If we're just polling for an event, then
 	 return to the event loop.  */
-      if (remote_is_async_p ())
+      if (options & TARGET_WNOHANG)
 	{
 	  status->kind = TARGET_WAITKIND_IGNORE;
 	  return minus_one_ptid;
 	}
 
-      /* Otherwise, asynchronous mode is masked, so do a blocking
-	 wait.  */
+      /* Otherwise do a blocking wait.  */
       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
 				  1 /* forever */);
     }
@@ -4707,7 +4706,7 @@ remote_wait_ns (ptid_t ptid, struct targ
    STATUS just as `wait' would.  */
 
 static ptid_t
-remote_wait_as (ptid_t ptid, struct target_waitstatus *status)
+remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
 {
   struct remote_state *rs = get_remote_state ();
   struct remote_arch_state *rsa = get_remote_arch_state ();
@@ -4717,6 +4716,8 @@ remote_wait_as (ptid_t ptid, struct targ
   char *buf, *p;
   struct stop_reply *stop_reply;
 
+ again:
+
   status->kind = TARGET_WAITKIND_IGNORE;
   status->value.integer = 0;
 
@@ -4819,8 +4820,14 @@ remote_wait_as (ptid_t ptid, struct targ
     }
 
   if (status->kind == TARGET_WAITKIND_IGNORE)
-    /* Nothing interesting happened.  */
-    return minus_one_ptid;
+    {
+      /* Nothing interesting happened.  If we're doing a non-blocking
+	 poll, we're done.  Otherwise, go back to waiting.  */
+      if (options & TARGET_WNOHANG)
+	return minus_one_ptid;
+      else
+	goto again;
+    }
   else if (status->kind != TARGET_WAITKIND_EXITED
 	   && status->kind != TARGET_WAITKIND_SIGNALLED)
     {
@@ -4841,24 +4848,14 @@ remote_wait_as (ptid_t ptid, struct targ
 
 static ptid_t
 remote_wait (struct target_ops *ops,
-	     ptid_t ptid, struct target_waitstatus *status)
+	     ptid_t ptid, struct target_waitstatus *status, int options)
 {
   ptid_t event_ptid;
 
   if (non_stop)
-    event_ptid = remote_wait_ns (ptid, status);
+    event_ptid = remote_wait_ns (ptid, status, options);
   else
-    {
-      /* In synchronous mode, keep waiting until the target stops.  In
-	 asynchronous mode, always return to the event loop.  */
-
-      do
-	{
-	  event_ptid = remote_wait_as (ptid, status);
-	}
-      while (status->kind == TARGET_WAITKIND_IGNORE
-	     && !target_can_async_p ());
-    }
+    event_ptid = remote_wait_as (ptid, status, options);
 
   if (target_can_async_p ())
     {
Index: src/gdb/bsd-uthread.c
===================================================================
--- src.orig/gdb/bsd-uthread.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/bsd-uthread.c	2009-05-21 14:19:26.000000000 +0100
@@ -345,7 +345,7 @@ bsd_uthread_xfer_partial (struct target_
 
 static ptid_t
 bsd_uthread_wait (struct target_ops *ops,
-		  ptid_t ptid, struct target_waitstatus *status)
+		  ptid_t ptid, struct target_waitstatus *status, int options)
 {
   CORE_ADDR addr;
   struct target_ops *beneath = find_target_beneath (ops);
Index: src/gdb/darwin-nat.c
===================================================================
--- src.orig/gdb/darwin-nat.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/darwin-nat.c	2009-05-21 14:19:26.000000000 +0100
@@ -476,7 +476,7 @@ catch_exception_raise (mach_port_t port,
 
 static ptid_t
 darwin_wait (struct target_ops *ops,
-	     ptid_t ptid, struct target_waitstatus *status)
+	     ptid_t ptid, struct target_waitstatus *status, int options)
 {
   kern_return_t kret;
   mach_msg_header_t *hdr = &msgin.hdr;
Index: src/gdb/defs.h
===================================================================
--- src.orig/gdb/defs.h	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/defs.h	2009-05-21 14:19:26.000000000 +0100
@@ -1111,7 +1111,8 @@ extern void (*deprecated_register_change
 extern void (*deprecated_memory_changed_hook) (CORE_ADDR addr, int len);
 extern void (*deprecated_context_hook) (int);
 extern ptid_t (*deprecated_target_wait_hook) (ptid_t ptid,
-                                         struct target_waitstatus * status);
+					      struct target_waitstatus *status,
+					      int options);
 
 extern void (*deprecated_attach_hook) (void);
 extern void (*deprecated_detach_hook) (void);
Index: src/gdb/gnu-nat.c
===================================================================
--- src.orig/gdb/gnu-nat.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/gnu-nat.c	2009-05-21 14:19:26.000000000 +0100
@@ -1435,7 +1435,7 @@ struct inf *waiting_inf;
 /* Wait for something to happen in the inferior, returning what in STATUS. */
 static ptid_t
 gnu_wait (struct target_ops *ops,
-	  ptid_t ptid, struct target_waitstatus *status)
+	  ptid_t ptid, struct target_waitstatus *status, int options)
 {
   struct msg
     {
Index: src/gdb/go32-nat.c
===================================================================
--- src.orig/gdb/go32-nat.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/go32-nat.c	2009-05-21 14:19:26.000000000 +0100
@@ -416,7 +416,7 @@ static char child_cwd[FILENAME_MAX];
 
 static ptid_t
 go32_wait (struct target_ops *ops,
-	   ptid_t ptid, struct target_waitstatus *status)
+	   ptid_t ptid, struct target_waitstatus *status, int options)
 {
   int i;
   unsigned char saved_opcode;
Index: src/gdb/hpux-thread.c
===================================================================
--- src.orig/gdb/hpux-thread.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/hpux-thread.c	2009-05-21 14:19:26.000000000 +0100
@@ -190,7 +190,7 @@ hpux_thread_resume (struct target_ops *o
 
 static ptid_t
 hpux_thread_wait (struct target_ops *ops,
-		  ptid_t ptid, struct target_waitstatus *ourstatus)
+		  ptid_t ptid, struct target_waitstatus *ourstatus, int options)
 {
   ptid_t rtnval;
   struct cleanup *old_chain;
@@ -203,7 +203,7 @@ hpux_thread_wait (struct target_ops *ops
     ptid = main_ptid;
 
   rtnval = deprecated_child_ops.to_wait (&deprecated_child_ops,
-					 ptid, ourstatus);
+					 ptid, ourstatus, options);
 
   rtnval = find_active_thread ();
 
Index: src/gdb/inf-ptrace.c
===================================================================
--- src.orig/gdb/inf-ptrace.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/inf-ptrace.c	2009-05-21 14:19:26.000000000 +0100
@@ -396,7 +396,7 @@ inf_ptrace_resume (struct target_ops *op
 
 static ptid_t
 inf_ptrace_wait (struct target_ops *ops,
-		 ptid_t ptid, struct target_waitstatus *ourstatus)
+		 ptid_t ptid, struct target_waitstatus *ourstatus, int options)
 {
   pid_t pid;
   int status, save_errno;
Index: src/gdb/inf-ttrace.c
===================================================================
--- src.orig/gdb/inf-ttrace.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/inf-ttrace.c	2009-05-21 14:19:26.000000000 +0100
@@ -924,7 +924,7 @@ inf_ttrace_resume (struct target_ops *op
 
 static ptid_t
 inf_ttrace_wait (struct target_ops *ops,
-		 ptid_t ptid, struct target_waitstatus *ourstatus)
+		 ptid_t ptid, struct target_waitstatus *ourstatus, int options)
 {
   pid_t pid = ptid_get_pid (ptid);
   lwpid_t lwpid = ptid_get_lwp (ptid);
Index: src/gdb/linux-thread-db.c
===================================================================
--- src.orig/gdb/linux-thread-db.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/linux-thread-db.c	2009-05-21 14:19:26.000000000 +0100
@@ -1178,12 +1178,13 @@ check_event (ptid_t ptid)
 
 static ptid_t
 thread_db_wait (struct target_ops *ops,
-		ptid_t ptid, struct target_waitstatus *ourstatus)
+		ptid_t ptid, struct target_waitstatus *ourstatus,
+		int options)
 {
   struct thread_db_info *info;
   struct target_ops *beneath = find_target_beneath (ops);
 
-  ptid = beneath->to_wait (beneath, ptid, ourstatus);
+  ptid = beneath->to_wait (beneath, ptid, ourstatus, options);
 
   if (ourstatus->kind == TARGET_WAITKIND_IGNORE)
     return ptid;
Index: src/gdb/monitor.c
===================================================================
--- src.orig/gdb/monitor.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/monitor.c	2009-05-21 14:19:26.000000000 +0100
@@ -1065,7 +1065,7 @@ monitor_wait_filter (char *buf,
 
 static ptid_t
 monitor_wait (struct target_ops *ops,
-	      ptid_t ptid, struct target_waitstatus *status)
+	      ptid_t ptid, struct target_waitstatus *status, int options)
 {
   int old_timeout = timeout;
   char buf[TARGET_BUF_SIZE];
Index: src/gdb/nto-procfs.c
===================================================================
--- src.orig/gdb/nto-procfs.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/nto-procfs.c	2009-05-21 14:19:26.000000000 +0100
@@ -623,7 +623,7 @@ nto_interrupt (int signo)
 
 static ptid_t
 procfs_wait (struct target_ops *ops,
-	     ptid_t ptid, struct target_waitstatus *ourstatus)
+	     ptid_t ptid, struct target_waitstatus *ourstatus, int options)
 {
   sigset_t set;
   siginfo_t info;
Index: src/gdb/record.c
===================================================================
--- src.orig/gdb/record.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/record.c	2009-05-21 14:19:26.000000000 +0100
@@ -98,7 +98,8 @@ static void (*record_beneath_to_resume) 
                                          enum target_signal);
 static struct target_ops *record_beneath_to_wait_ops;
 static ptid_t (*record_beneath_to_wait) (struct target_ops *, ptid_t,
-					 struct target_waitstatus *);
+					 struct target_waitstatus *,
+					 int);
 static struct target_ops *record_beneath_to_store_registers_ops;
 static void (*record_beneath_to_store_registers) (struct target_ops *,
                                                   struct regcache *,
@@ -566,7 +567,8 @@ record_wait_cleanups (void *ignore)
 
 static ptid_t
 record_wait (struct target_ops *ops,
-              ptid_t ptid, struct target_waitstatus *status)
+	     ptid_t ptid, struct target_waitstatus *status,
+	     int options)
 {
   struct cleanup *set_cleanups = record_gdb_operation_disable_set ();
 
@@ -590,7 +592,7 @@ record_wait (struct target_ops *ops,
 	{
 	  /* This is a single step.  */
 	  return record_beneath_to_wait (record_beneath_to_wait_ops,
-                                                      ptid, status);
+					 ptid, status, 0);
 	}
       else
 	{
@@ -601,7 +603,7 @@ record_wait (struct target_ops *ops,
 	  while (1)
 	    {
 	      ret = record_beneath_to_wait (record_beneath_to_wait_ops,
-					    ptid, status);
+					    ptid, status, 0);
 
 	      if (status->kind == TARGET_WAITKIND_STOPPED
 		  && status->value.sig == TARGET_SIGNAL_TRAP)
Index: src/gdb/remote-mips.c
===================================================================
--- src.orig/gdb/remote-mips.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/remote-mips.c	2009-05-21 14:19:26.000000000 +0100
@@ -1695,7 +1695,7 @@ mips_signal_from_protocol (int sig)
 
 static ptid_t
 mips_wait (struct target_ops *ops,
-	   ptid_t ptid, struct target_waitstatus *status)
+	   ptid_t ptid, struct target_waitstatus *status, int options)
 {
   int rstatus;
   int err;
Index: src/gdb/remote-sim.c
===================================================================
--- src.orig/gdb/remote-sim.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/remote-sim.c	2009-05-21 14:19:26.000000000 +0100
@@ -676,7 +676,7 @@ gdbsim_cntrl_c (int signo)
 
 static ptid_t
 gdbsim_wait (struct target_ops *ops,
-	     ptid_t ptid, struct target_waitstatus *status)
+	     ptid_t ptid, struct target_waitstatus *status, int options)
 {
   static RETSIGTYPE (*prev_sigint) ();
   int sigrc = 0;
Index: src/gdb/rs6000-nat.c
===================================================================
--- src.orig/gdb/rs6000-nat.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/rs6000-nat.c	2009-05-21 14:19:26.000000000 +0100
@@ -521,7 +521,7 @@ rs6000_xfer_partial (struct target_ops *
 
 static ptid_t
 rs6000_wait (struct target_ops *ops,
-	     ptid_t ptid, struct target_waitstatus *ourstatus)
+	     ptid_t ptid, struct target_waitstatus *ourstatus, int options)
 {
   pid_t pid;
   int status, save_errno;
Index: src/gdb/sol-thread.c
===================================================================
--- src.orig/gdb/sol-thread.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/sol-thread.c	2009-05-21 14:19:26.000000000 +0100
@@ -381,7 +381,7 @@ sol_thread_resume (struct target_ops *op
 
 static ptid_t
 sol_thread_wait (struct target_ops *ops,
-		 ptid_t ptid, struct target_waitstatus *ourstatus)
+		 ptid_t ptid, struct target_waitstatus *ourstatus, int options)
 {
   ptid_t rtnval;
   ptid_t save_ptid;
@@ -407,7 +407,7 @@ sol_thread_wait (struct target_ops *ops,
 		 GET_THREAD (save_ptid));
     }
 
-  rtnval = beneath->to_wait (beneath, ptid, ourstatus);
+  rtnval = beneath->to_wait (beneath, ptid, ourstatus, options);
 
   if (ourstatus->kind != TARGET_WAITKIND_EXITED)
     {
Index: src/gdb/spu-linux-nat.c
===================================================================
--- src.orig/gdb/spu-linux-nat.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/spu-linux-nat.c	2009-05-21 14:19:26.000000000 +0100
@@ -422,7 +422,7 @@ spu_child_post_attach (int pid)
    minus_one_ptid in case of error; store status into *OURSTATUS.  */
 static ptid_t
 spu_child_wait (struct target_ops *ops,
-		ptid_t ptid, struct target_waitstatus *ourstatus)
+		ptid_t ptid, struct target_waitstatus *ourstatus, int options)
 {
   int save_errno;
   int status;
Index: src/gdb/top.c
===================================================================
--- src.orig/gdb/top.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/top.c	2009-05-21 14:19:26.000000000 +0100
@@ -266,7 +266,8 @@ void (*deprecated_memory_changed_hook) (
    while waiting for target events.  */
 
 ptid_t (*deprecated_target_wait_hook) (ptid_t ptid,
-				       struct target_waitstatus * status);
+				       struct target_waitstatus *status,
+				       int options);
 
 /* Used by UI as a wrapper around command execution.  May do various things
    like enabling/disabling buttons, etc...  */
Index: src/gdb/tui/tui-hooks.c
===================================================================
--- src.orig/gdb/tui/tui-hooks.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/tui/tui-hooks.c	2009-05-21 14:19:26.000000000 +0100
@@ -160,7 +160,7 @@ tui_event_modify_breakpoint (int number)
    Leave curses mode and setup program mode.  */
 static ptid_t
 tui_target_wait_hook (ptid_t pid, 
-		      struct target_waitstatus *status)
+		      struct target_waitstatus *status, int options)
 {
   ptid_t res;
 
@@ -174,7 +174,7 @@ tui_target_wait_hook (ptid_t pid, 
     }
 #endif
   tui_target_has_run = 1;
-  res = target_wait (pid, status);
+  res = target_wait (pid, status, options);
 
   if (tui_active)
     {
Index: src/gdb/windows-nat.c
===================================================================
--- src.orig/gdb/windows-nat.c	2009-05-21 14:19:25.000000000 +0100
+++ src/gdb/windows-nat.c	2009-05-21 14:19:26.000000000 +0100
@@ -1494,7 +1494,7 @@ out:
 /* Wait for interesting events to occur in the target process.  */
 static ptid_t
 windows_wait (struct target_ops *ops,
-	      ptid_t ptid, struct target_waitstatus *ourstatus)
+	      ptid_t ptid, struct target_waitstatus *ourstatus, int options)
 {
   int pid = -1;
 


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