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] gdbserver: Remove gdb_id_to_thread_id


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

commit 96cde54f0adf2315404f3eba35dc3dfbc57f98c8
Author: Simon Marchi <simon.marchi@ericsson.com>
Date:   Fri Sep 15 18:02:51 2017 +0200

    gdbserver: Remove gdb_id_to_thread_id
    
    From what I understand, this function is not doing anything useful as of
    today.
    
    Here's the result of my archeological research:
    
    - The field thread_info::gdb_id was added in
    
      a06660f7  Use LWP IDs for thread IDs in gdbserver
    
      There was problem when using a 32-bits gdb with a 64-bits gdbserver.
      For some reason that I don't fully understand, the thread ids
      exchanged between gdb and gdbserver could overflow a 32 bits data
      type.  My guess is that they were the thread address (e.g. the
      0x7ffff7f20b40 in "Thread 0x7ffff7f20b40 (LWP 1058)" today).  This
      patch changed that so gdb/gdbserver would talk in terms of the OS
      assigned numerical id (as shown in ps).  It therefore added a way to
      convert between this gdb_id (the numerical id) and the thread id (the
      address).
    
    - 95954743cb  Implement the multiprocess extensions, and add linux
                  multiprocess supportNon-stop mode support.
    
      This patch made gdbserver deal with threads using their numerical ids
      and not the address-like id.  Starting from there, the gdb_id <->
      thread id conversion was not needed anymore, since the remote protocol
      and gdbserver were using the same kind of ids again.  The gdb_id field
      in the thread_info structure was also unused starting there.
    
    - d50171e4  Teach linux gdbserver to step-over-breakpoints.
    
      This patch moved the thread_info structure around, and got rid of the
      gdb_id field (which was unused).
    
    Looking at the implementation of gdb_id_to_thread_id, it is not doing
    anything useful.  It is looking up a thread by ptid using
    find_thread_ptid, which basically loops over all threads looking at
    their entry.id field.  If a thread with that ptid is found, it returns
    its entry.id field.  So it will always return the same thing as it input
    (with the exception of if no thread exist with that ptid, then it will
    return null_ptid).
    
    gdb/gdbserver/ChangeLog:
    
    	* inferiors.h (gdb_id_to_thread_id): Remove.
    	* inferiors.c (gdb_id_to_thread_id): Remove.
    	* server.c (process_serial_event): Adjust to gdb_id_to_thread_id
    	removal.  Move pid declaration closer to where it's used.

Diff:
---
 gdb/gdbserver/ChangeLog   |  7 +++++++
 gdb/gdbserver/inferiors.c |  8 --------
 gdb/gdbserver/inferiors.h |  1 -
 gdb/gdbserver/server.c    | 28 +++++++++-------------------
 4 files changed, 16 insertions(+), 28 deletions(-)

diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 144e09a..eaf8e6e 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,5 +1,12 @@
 2017-09-15  Simon Marchi  <simon.marchi@ericsson.com>
 
+	* inferiors.h (gdb_id_to_thread_id): Remove.
+	* inferiors.c (gdb_id_to_thread_id): Remove.
+	* server.c (process_serial_event): Adjust to gdb_id_to_thread_id
+	removal.  Move pid declaration closer to where it's used.
+
+2017-09-15  Simon Marchi  <simon.marchi@ericsson.com>
+
 	* server.c (handle_detach): New function.
 	(process_serial_event): Move code out, call handle_detach.
 
diff --git a/gdb/gdbserver/inferiors.c b/gdb/gdbserver/inferiors.c
index 2212850..933dd76 100644
--- a/gdb/gdbserver/inferiors.c
+++ b/gdb/gdbserver/inferiors.c
@@ -173,14 +173,6 @@ find_any_thread_of_pid (int pid)
   return (struct thread_info *) entry;
 }
 
-ptid_t
-gdb_id_to_thread_id (ptid_t gdb_id)
-{
-  struct thread_info *thread = find_thread_ptid (gdb_id);
-
-  return thread ? thread->entry.id : null_ptid;
-}
-
 static void
 free_one_thread (struct inferior_list_entry *inf)
 {
diff --git a/gdb/gdbserver/inferiors.h b/gdb/gdbserver/inferiors.h
index f229e67..6316fe5 100644
--- a/gdb/gdbserver/inferiors.h
+++ b/gdb/gdbserver/inferiors.h
@@ -144,7 +144,6 @@ int have_started_inferiors_p (void);
 int have_attached_inferiors_p (void);
 
 ptid_t thread_to_gdb_id (struct thread_info *);
-ptid_t gdb_id_to_thread_id (ptid_t);
 
 void clear_inferiors (void);
 struct inferior_list_entry *find_inferior
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c
index 3de7f16..32c9bab 100644
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -4139,23 +4139,16 @@ process_serial_event (void)
     case 'H':
       if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
 	{
-	  ptid_t gdb_id, thread_id;
-	  int pid;
-
 	  require_running_or_break (own_buf);
 
-	  gdb_id = read_ptid (&own_buf[2], NULL);
-
-	  pid = ptid_get_pid (gdb_id);
+	  ptid_t thread_id = read_ptid (&own_buf[2], NULL);
 
-	  if (ptid_equal (gdb_id, null_ptid)
-	      || ptid_equal (gdb_id, minus_one_ptid))
+	  if (thread_id == null_ptid || thread_id == minus_one_ptid)
 	    thread_id = null_ptid;
-	  else if (pid != 0
-		   && ptid_equal (pid_to_ptid (pid),
-				  gdb_id))
+	  else if (thread_id.is_pid ())
 	    {
-	      thread_info *thread = find_any_thread_of_pid (pid);
+	      /* The ptid represents a pid.  */
+	      thread_info *thread = find_any_thread_of_pid (thread_id.pid ());
 
 	      if (thread == NULL)
 		{
@@ -4167,8 +4160,8 @@ process_serial_event (void)
 	    }
 	  else
 	    {
-	      thread_id = gdb_id_to_thread_id (gdb_id);
-	      if (ptid_equal (thread_id, null_ptid))
+	      /* The ptid represents a lwp/tid.  */
+	      if (find_thread_ptid (thread_id) == NULL)
 		{
 		  write_enn (own_buf);
 		  break;
@@ -4373,13 +4366,10 @@ process_serial_event (void)
 
     case 'T':
       {
-	ptid_t gdb_id, thread_id;
-
 	require_running_or_break (own_buf);
 
-	gdb_id = read_ptid (&own_buf[1], NULL);
-	thread_id = gdb_id_to_thread_id (gdb_id);
-	if (ptid_equal (thread_id, null_ptid))
+	ptid_t thread_id = read_ptid (&own_buf[1], NULL);
+	if (find_thread_ptid (thread_id) == NULL)
 	  {
 	    write_enn (own_buf);
 	    break;


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