This is the mail archive of the gdb-cvs@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]

[binutils-gdb] Use target_continue{, _no_signal} instead of target_resume


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=049a857091cff98371b5688140832a3cf767153c

commit 049a857091cff98371b5688140832a3cf767153c
Author: Sergio Durigan Junior <sergiodj@redhat.com>
Date:   Thu Aug 25 16:26:24 2016 -0400

    Use target_continue{,_no_signal} instead of target_resume
    
    This commit implements a new function, target_continue, on top of the
    target_resume function.  Then, it replaces all calls to target_resume
    by calls to target_continue or to the already existing
    target_continue_no_signal.
    
    This is one of the (many) necessary steps needed to consolidate the
    target interface between GDB and gdbserver.  In particular, I am
    interested in the impact this change will have on the unification of
    the fork_inferior function (which I have been working on).
    
    Tested on the BuildBot, no regressions introduced.
    
    gdb/gdbserver/ChangeLog:
    2016-09-31  Sergio Durigan Junior  <sergiodj@redhat.com>
    
    	* server.c (start_inferior): New variable 'ptid'.  Replace calls
    	to the_target->resume by target_continue{,_no_signal}, depending
    	on the case.
    	* target.c (target_stop_and_wait): Call target_continue_no_signal
    	instead of the_target->resume.
    	(target_continue): New function.
    
    gdb/ChangeLog:
    2016-09-31  Sergio Durigan Junior  <sergiodj@redhat.com>
    
    	* fork-child.c (startup_inferior): Replace calls to target_resume
    	by target_continue{,_no_signal}, depending on the case.
    	* linux-nat.c (cleanup_target_stop): Call
    	target_continue_no_signal instead of target_resume.
    	* procfs.c (procfs_wait): Likewise.
    	* target.c (target_continue): New function.
    	* target/target.h (target_continue): New prototype.

Diff:
---
 gdb/ChangeLog           | 10 ++++++++++
 gdb/fork-child.c        |  4 ++--
 gdb/gdbserver/ChangeLog |  9 +++++++++
 gdb/gdbserver/server.c  | 25 +++++++------------------
 gdb/gdbserver/target.c  | 19 ++++++++++++++-----
 gdb/linux-nat.c         |  2 +-
 gdb/procfs.c            |  4 ++--
 gdb/target.c            |  8 ++++++++
 gdb/target/target.h     | 10 +++++++---
 9 files changed, 60 insertions(+), 31 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 602a05a..60b5950 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,13 @@
+2016-09-01  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* fork-child.c (startup_inferior): Replace calls to target_resume
+	by target_continue{,_no_signal}, depending on the case.
+	* linux-nat.c (cleanup_target_stop): Call
+	target_continue_no_signal instead of target_resume.
+	* procfs.c (procfs_wait): Likewise.
+	* target.c (target_continue): New function.
+	* target/target.h (target_continue): New prototype.
+
 2016-08-31  Yao Qi  <yao.qi@linaro.org>
 
 	* record-full.c (record_full_insert_breakpoint): Fix typo.
diff --git a/gdb/fork-child.c b/gdb/fork-child.c
index 6856cf6..3e29a1f 100644
--- a/gdb/fork-child.c
+++ b/gdb/fork-child.c
@@ -514,7 +514,7 @@ startup_inferior (int ntraps)
       if (resume_signal != GDB_SIGNAL_TRAP)
 	{
 	  /* Let shell child handle its own signals in its own way.  */
-	  target_resume (resume_ptid, 0, resume_signal);
+	  target_continue (resume_ptid, resume_signal);
 	}
       else
 	{
@@ -540,7 +540,7 @@ startup_inferior (int ntraps)
 	    break;
 
 	  /* Just make it go on.  */
-	  target_resume (resume_ptid, 0, GDB_SIGNAL_0);
+	  target_continue_no_signal (resume_ptid);
 	}
     }
 
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 4dc2e45..921a5d4 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,12 @@
+2016-09-01  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* server.c (start_inferior): New variable 'ptid'.  Replace calls
+	to the_target->resume by target_continue{,_no_signal}, depending
+	on the case.
+	* target.c (target_stop_and_wait): Call target_continue_no_signal
+	instead of the_target->resume.
+	(target_continue): New function.
+
 2016-08-31  Antoine Tremblay  <antoine.tremblay@ericsson.com>
 
 	* linux-low.c (linux_wait_1): Move event switch after unsuspend_lwps.
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c
index 6fbd61d..9c06443 100644
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -258,12 +258,7 @@ start_inferior (char **argv)
 
   if (wrapper_argv != NULL)
     {
-      struct thread_resume resume_info;
-
-      memset (&resume_info, 0, sizeof (resume_info));
-      resume_info.thread = pid_to_ptid (signal_pid);
-      resume_info.kind = resume_continue;
-      resume_info.sig = 0;
+      ptid_t ptid = pid_to_ptid (signal_pid);
 
       last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
 
@@ -271,7 +266,7 @@ start_inferior (char **argv)
 	{
 	  do
 	    {
-	      (*the_target->resume) (&resume_info, 1);
+	      target_continue_no_signal (ptid);
 
 	      last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
 	      if (last_status.kind != TARGET_WAITKIND_STOPPED)
@@ -3929,7 +3924,6 @@ process_serial_event (void)
 
       if ((tracing && disconnected_tracing) || any_persistent_commands ())
 	{
-	  struct thread_resume resume_info;
 	  struct process_info *process = find_process_pid (pid);
 
 	  if (process == NULL)
@@ -3965,10 +3959,7 @@ process_serial_event (void)
 	  process->gdb_detached = 1;
 
 	  /* Detaching implicitly resumes all threads.  */
-	  resume_info.thread = minus_one_ptid;
-	  resume_info.kind = resume_continue;
-	  resume_info.sig = 0;
-	  (*the_target->resume) (&resume_info, 1);
+	  target_continue_no_signal (minus_one_ptid);
 
 	  write_ok (own_buf);
 	  break; /* from switch/case */
@@ -4428,7 +4419,7 @@ handle_target_event (int err, gdb_client_data client_data)
 	      /* A thread stopped with a signal, but gdb isn't
 		 connected to handle it.  Pass it down to the
 		 inferior, as if it wasn't being traced.  */
-	      struct thread_resume resume_info;
+	      enum gdb_signal signal;
 
 	      if (debug_threads)
 		debug_printf ("GDB not connected; forwarding event %d for"
@@ -4436,13 +4427,11 @@ handle_target_event (int err, gdb_client_data client_data)
 			      (int) last_status.kind,
 			      target_pid_to_str (last_ptid));
 
-	      resume_info.thread = last_ptid;
-	      resume_info.kind = resume_continue;
 	      if (last_status.kind == TARGET_WAITKIND_STOPPED)
-		resume_info.sig = gdb_signal_to_host (last_status.value.sig);
+		signal = last_status.value.sig;
 	      else
-		resume_info.sig = 0;
-	      (*the_target->resume) (&resume_info, 1);
+		signal = GDB_SIGNAL_0;
+	      target_continue (last_ptid, signal);
 	    }
 	}
       else
diff --git a/gdb/gdbserver/target.c b/gdb/gdbserver/target.c
index 42d22b4..8435dc2 100644
--- a/gdb/gdbserver/target.c
+++ b/gdb/gdbserver/target.c
@@ -248,12 +248,8 @@ target_stop_and_wait (ptid_t ptid)
 {
   struct target_waitstatus status;
   int was_non_stop = non_stop;
-  struct thread_resume resume_info;
 
-  resume_info.thread = ptid;
-  resume_info.kind = resume_stop;
-  resume_info.sig = GDB_SIGNAL_0;
-  (*the_target->resume) (&resume_info, 1);
+  target_continue_no_signal (ptid);
 
   non_stop = 1;
   mywait (ptid, &status, 0, 0);
@@ -273,6 +269,19 @@ target_continue_no_signal (ptid_t ptid)
   (*the_target->resume) (&resume_info, 1);
 }
 
+/* See target/target.h.  */
+
+void
+target_continue (ptid_t ptid, enum gdb_signal signal)
+{
+  struct thread_resume resume_info;
+
+  resume_info.thread = ptid;
+  resume_info.kind = resume_continue;
+  resume_info.sig = gdb_signal_to_host (signal);
+  (*the_target->resume) (&resume_info, 1);
+}
+
 int
 start_non_stop (int nonstop)
 {
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index 5d5efa0..7410f8e 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -4289,7 +4289,7 @@ cleanup_target_stop (void *arg)
   gdb_assert (arg != NULL);
 
   /* Unpause all */
-  target_resume (*ptid, 0, GDB_SIGNAL_0);
+  target_continue_no_signal (*ptid);
 }
 
 static VEC(static_tracepoint_marker_p) *
diff --git a/gdb/procfs.c b/gdb/procfs.c
index 67b424f..0e0641e 100644
--- a/gdb/procfs.c
+++ b/gdb/procfs.c
@@ -3716,7 +3716,7 @@ wait_again:
 		    else
 		      {
 			/* How to keep going without returning to wfi: */
-			target_resume (ptid, 0, GDB_SIGNAL_0);
+			target_continue_no_signal (ptid);
 			goto wait_again;
 		      }
 		  }
@@ -3742,7 +3742,7 @@ wait_again:
 		    /* This is an internal event and should be transparent
 		       to wfi, so resume the execution and wait again.	See
 		       comment in procfs_init_inferior() for more details.  */
-		    target_resume (ptid, 0, GDB_SIGNAL_0);
+		    target_continue_no_signal (ptid);
 		    goto wait_again;
 		  }
 #endif
diff --git a/gdb/target.c b/gdb/target.c
index 13e3cdb..87c9681 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -3449,6 +3449,14 @@ target_continue_no_signal (ptid_t ptid)
   target_resume (ptid, 0, GDB_SIGNAL_0);
 }
 
+/* See target/target.h.  */
+
+void
+target_continue (ptid_t ptid, enum gdb_signal signal)
+{
+  target_resume (ptid, 0, signal);
+}
+
 /* Concatenate ELEM to LIST, a comma separate list, and return the
    result.  The LIST incoming argument is released.  */
 
diff --git a/gdb/target/target.h b/gdb/target/target.h
index 76af732..64ef782 100644
--- a/gdb/target/target.h
+++ b/gdb/target/target.h
@@ -64,10 +64,14 @@ extern int target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr,
 
 extern void target_stop_and_wait (ptid_t ptid);
 
-/* Restart a target previously stopped by target_stop_and_wait.
-   No signal is delivered to the target.  This function must be
-   provided by the client.  */
+/* Restart a target previously stopped.  No signal is delivered to the
+   target.  This function must be provided by the client.  */
 
 extern void target_continue_no_signal (ptid_t ptid);
 
+/* Restart a target previously stopped.  SIGNAL is delivered to the
+   target.  This function must be provided by the client.  */
+
+extern void target_continue (ptid_t ptid, enum gdb_signal signal);
+
 #endif /* TARGET_COMMON_H */


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