public inbox for archer-commits@sourceware.org
help / color / mirror / Atom feed
* [SCM]  scox/gdbserver-multi-client: Consolidate gdbserver global variables
@ 2017-11-08  2:32 scox
  0 siblings, 0 replies; only message in thread
From: scox @ 2017-11-08  2:32 UTC (permalink / raw)
  To: archer-commits

The branch, scox/gdbserver-multi-client has been updated
       via  37e2b1e4e11410819a8e862c6ab3c0fe27298f57 (commit)
      from  016f5a3777ab6ce33616917be7795a7501f29dd7 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 37e2b1e4e11410819a8e862c6ab3c0fe27298f57
Author: Stan Cox <scox@redhat.com>
Date:   Tue Nov 7 21:30:04 2017 -0500

    Consolidate gdbserver global variables
    
    	* server.h (client_breakpoints): Use a set. Change all users.
    	(multi_client_states.cs):  Use a map.  Change all users.
    	* mem-break.c (has_client_breakpoint_at): Move from here..
    	* server.c (multi_client_states::has_client_breakpoint_at): ..to here
    	(client_state::client_state):  New constructor.
    	(multi_client_states::set_client_state): Use it.	 Use client
    	states map.
    	(multi_client_states::add_client_breakpoint):  Use client breaks
    	set.

-----------------------------------------------------------------------

Summary of changes:
 gdb/gdbserver/ChangeLog      |   12 ++
 gdb/gdbserver/event-loop.c   |    3 +
 gdb/gdbserver/fork-child.c   |    2 +-
 gdb/gdbserver/gdbthread.h    |    4 +-
 gdb/gdbserver/hostio.c       |    2 -
 gdb/gdbserver/inferiors.c    |    6 +-
 gdb/gdbserver/inferiors.h    |    4 -
 gdb/gdbserver/linux-low.c    |   40 ++--
 gdb/gdbserver/linux-low.h    |    2 +-
 gdb/gdbserver/remote-utils.c |  124 ++++++------
 gdb/gdbserver/remote-utils.h |    5 +-
 gdb/gdbserver/server.c       |  439 +++++++++++++++++++++++++-----------------
 gdb/gdbserver/server.h       |  235 +++++++++++++++++++----
 gdb/nat/linux-personality.h  |    2 +-
 14 files changed, 566 insertions(+), 314 deletions(-)

First 500 lines of diff:
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index eaf6a68..5a84e82 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -2,6 +2,18 @@
 
 	* config.in, configure: Regenerate.
 
+2017-11-03  Stan Cox  <scox@redhat.com>
+
+	* server.h (client_breakpoints):  Use a set. Change all users.
+	(multi_client_states.cs):  Use a map.  Change all users.
+	* mem-break.c (has_client_breakpoint_at): Move from here..
+	* server.c (multi_client_states::has_client_breakpoint_at): ..to here
+	(client_state::client_state):  New constructor.
+	(multi_client_states::set_client_state): Use it.  Use client
+	states map.
+	(multi_client_states::add_client_breakpoint):  Use client breaks
+	set.
+
 2017-10-27  Simon Marchi  <simon.marchi@ericsson.com>
 
 	* target.c (struct thread_search): Remove.
diff --git a/gdb/gdbserver/event-loop.c b/gdb/gdbserver/event-loop.c
index b391e2e..b9bd166 100644
--- a/gdb/gdbserver/event-loop.c
+++ b/gdb/gdbserver/event-loop.c
@@ -385,6 +385,9 @@ delete_file_handler (gdb_fildes_t fd)
 	;
       prev_ptr->next_file = file_ptr->next_file;
     }
+
+  struct multi_client_states *client_states = get_client_states();
+  client_states->delete_client_state (fd);
   free (file_ptr);
 }
 
diff --git a/gdb/gdbserver/fork-child.c b/gdb/gdbserver/fork-child.c
index 1002620..aaf01e4 100644
--- a/gdb/gdbserver/fork-child.c
+++ b/gdb/gdbserver/fork-child.c
@@ -108,7 +108,7 @@ post_fork_inferior (int pid, const char *program)
   startup_inferior (pid, START_INFERIOR_TRAPS_EXPECTED,
 		    &last_status, &last_ptid);
   current_thread->last_resume_kind = resume_stop;
-  current_thread->last_status = last_status;
+  current_thread->last_waitstatus = last_status;
   signal_pid = pid;
   target_post_create_inferior ();
   fprintf (stderr, "Process %s created; pid = %d\n", program, pid);
diff --git a/gdb/gdbserver/gdbthread.h b/gdb/gdbserver/gdbthread.h
index b82d5b0..4ff2a69 100644
--- a/gdb/gdbserver/gdbthread.h
+++ b/gdb/gdbserver/gdbthread.h
@@ -39,7 +39,7 @@ struct thread_info
   enum resume_kind last_resume_kind;
 
   /* The last wait status reported for this thread.  */
-  struct target_waitstatus last_status;
+  struct target_waitstatus last_waitstatus;
 
   /* True if LAST_STATUS hasn't been reported to GDB yet.  */
   int status_pending_p;
@@ -73,8 +73,6 @@ struct thread_info
   struct btrace_target_info *btrace;
 };
 
-extern std::list<thread_info *> all_threads;
-
 void remove_thread (struct thread_info *thread);
 struct thread_info *add_thread (ptid_t ptid, void *target_data);
 
diff --git a/gdb/gdbserver/hostio.c b/gdb/gdbserver/hostio.c
index cd40e28..6638623 100644
--- a/gdb/gdbserver/hostio.c
+++ b/gdb/gdbserver/hostio.c
@@ -29,8 +29,6 @@
 #include <sys/stat.h>
 #include "fileio.h"
 
-extern int remote_debug;
-
 struct fd_list
 {
   int fd;
diff --git a/gdb/gdbserver/inferiors.c b/gdb/gdbserver/inferiors.c
index a0ece4d..1518ac0 100644
--- a/gdb/gdbserver/inferiors.c
+++ b/gdb/gdbserver/inferiors.c
@@ -22,10 +22,6 @@
 #include "gdbthread.h"
 #include "dll.h"
 
-std::list<process_info *> all_processes;
-std::list<thread_info *> all_threads;
-
-struct thread_info *current_thread;
 
 /* The current working directory used to start the inferior.  */
 static const char *current_inferior_cwd = NULL;
@@ -94,7 +90,7 @@ add_thread (ptid_t thread_id, void *target_data)
 
   new_thread->id = thread_id;
   new_thread->last_resume_kind = resume_continue;
-  new_thread->last_status.kind = TARGET_WAITKIND_IGNORE;
+  new_thread->last_waitstatus.kind = TARGET_WAITKIND_IGNORE;
 
   all_threads.push_back (new_thread);
 
diff --git a/gdb/gdbserver/inferiors.h b/gdb/gdbserver/inferiors.h
index fb0e2fd..6a64df7 100644
--- a/gdb/gdbserver/inferiors.h
+++ b/gdb/gdbserver/inferiors.h
@@ -81,8 +81,6 @@ pid_of (const process_info *proc)
 struct process_info *current_process (void);
 struct process_info *get_thread_process (const struct thread_info *);
 
-extern std::list<process_info *> all_processes;
-
 /* Invoke FUNC for each process.  */
 
 template <typename Func>
@@ -123,8 +121,6 @@ find_process (Func func)
   return NULL;
 }
 
-extern struct thread_info *current_thread;
-
 /* Return the first process in the processes list.  */
 struct process_info *get_first_process (void);
 
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index b367e53..d068cc6 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -545,7 +545,7 @@ handle_extended_wait (struct lwp_info **orig_event_lwp, int wstat)
 	  child_lwp->status_pending_p = 0;
 	  child_thr = get_lwp_thread (child_lwp);
 	  child_thr->last_resume_kind = resume_stop;
-	  child_thr->last_status.kind = TARGET_WAITKIND_STOPPED;
+	  child_thr->last_waitstatus.kind = TARGET_WAITKIND_STOPPED;
 
 	  /* If we're suspending all threads, leave this one suspended
 	     too.  If the fork/clone parent is stepping over a breakpoint,
@@ -723,7 +723,7 @@ handle_extended_wait (struct lwp_info **orig_event_lwp, int wstat)
       event_lwp->status_pending_p = 1;
       event_lwp->status_pending = wstat;
       event_thr->last_resume_kind = resume_continue;
-      event_thr->last_status.kind = TARGET_WAITKIND_IGNORE;
+      event_thr->last_waitstatus.kind = TARGET_WAITKIND_IGNORE;
 
       /* Update syscall state in the new lwp, effectively mid-syscall too.  */
       event_lwp->syscall_state = TARGET_WAITKIND_SYSCALL_ENTRY;
@@ -994,14 +994,14 @@ linux_ptrace_fun ()
 
 static int
 linux_create_inferior (const char *program,
-		       const std::vector<char *> &program_args)
+		       const std::vector<char *> &p_program_args)
 {
   struct lwp_info *new_lwp;
   int pid;
   ptid_t ptid;
   struct cleanup *restore_personality
     = maybe_disable_address_space_randomization (disable_randomization);
-  std::string str_program_args = stringify_argv (program_args);
+  std::string str_program_args = stringify_argv (p_program_args);
 
   pid = fork_inferior (program,
 		       str_program_args.c_str (),
@@ -1441,13 +1441,13 @@ get_detach_signal (struct thread_info *thread)
       /* If the thread had been suspended by gdbserver, and it stopped
 	 cleanly, then it'll have stopped with SIGSTOP.  But we don't
 	 want to deliver that SIGSTOP.  */
-      if (thread->last_status.kind != TARGET_WAITKIND_STOPPED
-	  || thread->last_status.value.sig == GDB_SIGNAL_0)
+      if (thread->last_waitstatus.kind != TARGET_WAITKIND_STOPPED
+	  || thread->last_waitstatus.value.sig == GDB_SIGNAL_0)
 	return 0;
 
       /* Otherwise, we may need to deliver the signal we
 	 intercepted.  */
-      status = lp->last_status;
+      status = lp->last_waitstatus;
     }
 
   if (!WIFSTOPPED (status))
@@ -1741,7 +1741,7 @@ thread_still_has_status_pending_p (struct thread_info *thread)
       CORE_ADDR pc;
       int discard = 0;
 
-      gdb_assert (lp->last_status != 0);
+      gdb_assert (lp->last_waitstatus != 0);
 
       pc = get_pc (lp);
 
@@ -1803,7 +1803,7 @@ lwp_resumed (struct lwp_info *lwp)
      corresponding stop to gdb yet?  If so, the thread is still
      resumed/running from gdb's perspective.  */
   if (thread->last_resume_kind == resume_stop
-      && thread->last_status.kind == TARGET_WAITKIND_IGNORE)
+      && thread->last_waitstatus.kind == TARGET_WAITKIND_IGNORE)
     return 1;
 
   return 0;
@@ -2478,7 +2478,7 @@ linux_low_filter_event (int lwpid, int wstat)
 
   child->stopped = 1;
 
-  child->last_status = wstat;
+  child->last_waitstatus = wstat;
 
   /* Check if the thread has exited.  */
   if ((WIFEXITED (wstat) || WIFSIGNALED (wstat)))
@@ -2657,7 +2657,7 @@ resume_stopped_resumed_lwps (thread_info *thread)
   if (lp->stopped
       && !lp->suspended
       && !lp->status_pending_p
-      && thread->last_status.kind == TARGET_WAITKIND_IGNORE)
+      && thread->last_waitstatus.kind == TARGET_WAITKIND_IGNORE)
     {
       int step = 0;
 
@@ -2899,7 +2899,7 @@ count_events_callback (thread_info *thread, void *data)
   gdb_assert (count != NULL);
 
   /* Count only resumed LWPs that have an event pending. */
-  if (thread->last_status.kind == TARGET_WAITKIND_IGNORE
+  if (thread->last_waitstatus.kind == TARGET_WAITKIND_IGNORE
       && lp->status_pending_p)
     (*count)++;
 
@@ -2913,7 +2913,7 @@ select_singlestep_lwp_callback (thread_info *thread, void *data)
 {
   struct lwp_info *lp = get_thread_lwp (thread);
 
-  if (thread->last_status.kind == TARGET_WAITKIND_IGNORE
+  if (thread->last_waitstatus.kind == TARGET_WAITKIND_IGNORE
       && thread->last_resume_kind == resume_step
       && lp->status_pending_p)
     return 1;
@@ -2932,7 +2932,7 @@ select_event_lwp_callback (thread_info *thread, void *data)
   gdb_assert (selector != NULL);
 
   /* Select only resumed LWPs that have an event pending. */
-  if (thread->last_status.kind == TARGET_WAITKIND_IGNORE
+  if (thread->last_waitstatus.kind == TARGET_WAITKIND_IGNORE
       && lp->status_pending_p)
     if ((*selector)-- == 0)
       return 1;
@@ -4661,7 +4661,7 @@ linux_set_resume_request (thread_info *thread, void *arg)
 	    {
 	      if (debug_threads)
 		debug_printf ("already %s LWP %ld at GDB's request\n",
-			      (thread->last_status.kind
+			      (thread->last_waitstatus.kind
 			       == TARGET_WAITKIND_STOPPED)
 			      ? "stopped"
 			      : "stopping",
@@ -5101,7 +5101,7 @@ linux_resume_one_thread (thread_info *thread, void *arg)
 
       /* For stop requests, we're done.  */
       lwp->resume = NULL;
-      thread->last_status.kind = TARGET_WAITKIND_IGNORE;
+      thread->last_waitstatus.kind = TARGET_WAITKIND_IGNORE;
       return 0;
     }
 
@@ -5124,8 +5124,8 @@ linux_resume_one_thread (thread_info *thread, void *arg)
 
       /* If this is the same signal we were previously stopped by,
 	 make sure to queue its siginfo.  */
-      if (WIFSTOPPED (lwp->last_status)
-	  && WSTOPSIG (lwp->last_status) == lwp->resume->sig
+      if (WIFSTOPPED (lwp->last_waitstatus)
+	  && WSTOPSIG (lwp->last_waitstatus) == lwp->resume->sig
 	  && ptrace (PTRACE_GETSIGINFO, lwpid_of (thread),
 		     (PTRACE_TYPE_ARG3) 0, &info) == 0)
 	info_p = &info;
@@ -5148,7 +5148,7 @@ linux_resume_one_thread (thread_info *thread, void *arg)
 	debug_printf ("leaving LWP %ld stopped\n", lwpid_of (thread));
     }
 
-  thread->last_status.kind = TARGET_WAITKIND_IGNORE;
+  thread->last_waitstatus.kind = TARGET_WAITKIND_IGNORE;
   lwp->resume = NULL;
   return 0;
 }
@@ -5251,7 +5251,7 @@ proceed_one_lwp (thread_info *thread, void *except)
     }
 
   if (thread->last_resume_kind == resume_stop
-      && thread->last_status.kind != TARGET_WAITKIND_IGNORE)
+      && thread->last_waitstatus.kind != TARGET_WAITKIND_IGNORE)
     {
       if (debug_threads)
 	debug_printf ("   client wants LWP to remain %ld stopped\n",
diff --git a/gdb/gdbserver/linux-low.h b/gdb/gdbserver/linux-low.h
index eda452f..f2381f3 100644
--- a/gdb/gdbserver/linux-low.h
+++ b/gdb/gdbserver/linux-low.h
@@ -302,7 +302,7 @@ struct lwp_info
   enum target_waitkind syscall_state;
 
   /* When stopped is set, the last wait status recorded for this lwp.  */
-  int last_status;
+  int last_waitstatus;
 
   /* If WAITSTATUS->KIND != TARGET_WAITKIND_IGNORE, the waitstatus for
      this LWP's last event, to pass to GDB without any further
diff --git a/gdb/gdbserver/remote-utils.c b/gdb/gdbserver/remote-utils.c
index 54f27f4..0b060f3 100644
--- a/gdb/gdbserver/remote-utils.c
+++ b/gdb/gdbserver/remote-utils.c
@@ -103,7 +103,6 @@ struct sym_cache
   struct sym_cache *next;
 };
 
-int remote_debug = 0;
 struct ui_file *gdb_stdlog;
 
 static int remote_is_stdio = 0;
@@ -115,17 +114,19 @@ static gdb_fildes_t listen_desc = INVALID_DESCRIPTOR;
 extern int using_threads;
 extern int debug_threads;
 
-/* If true, then GDB has requested noack mode.  */
-int noack_mode = 0;
-/* If true, then we tell GDB to use noack mode by default.  */
-int transport_is_reliable = 0;
-
 #ifdef USE_WIN32API
 # define read(fd, buf, len) recv (fd, (char *) buf, len, 0)
 # define write(fd, buf, len) send (fd, (char *) buf, len, 0)
 #endif
 
 int
+get_remote_desc (void)
+{
+  return remote_desc;
+}
+
+
+int
 gdb_connected (void)
 {
   return remote_desc != INVALID_DESCRIPTOR;
@@ -167,6 +168,9 @@ handle_accept_event (int err, gdb_client_data client_data)
   if (remote_desc == -1)
     perror_with_name ("Accept failed");
 
+  struct multi_client_states *client_states = get_client_states();
+  client_states->set_client_state (remote_desc);
+
   /* Enable TCP keep alive process. */
   tmp = 1;
   setsockopt (remote_desc, SOL_SOCKET, SO_KEEPALIVE,
@@ -841,14 +845,6 @@ initialize_async_io (void)
 #endif
 }
 
-/* Internal buffer used by readchar.
-   These are global to readchar because reschedule_remote needs to be
-   able to tell whether the buffer is empty.  */
-
-static unsigned char readchar_buf[BUFSIZ];
-static int readchar_bufcnt = 0;
-static unsigned char *readchar_bufp;
-
 /* Returns next char from remote GDB.  -1 if error.  */
 
 static int
@@ -1459,14 +1455,14 @@ look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb)
     return 0;
 
   /* Send the request.  */
-  strcpy (own_buf, "qSymbol:");
-  bin2hex ((const gdb_byte *) name, own_buf + strlen ("qSymbol:"),
+  strcpy (own_buffer, "qSymbol:");
+  bin2hex ((const gdb_byte *) name, own_buffer + strlen ("qSymbol:"),
 	  strlen (name));
-  if (putpkt (own_buf) < 0)
+  if (putpkt (own_buffer) < 0)
     return -1;
 
   /* FIXME:  Eventually add buffer overflow checking (to getpkt?)  */
-  len = getpkt (own_buf);
+  len = getpkt (own_buffer);
   if (len < 0)
     return -1;
 
@@ -1477,45 +1473,45 @@ look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb)
      while it figures out the address of the symbol.  */
   while (1)
     {
-      if (own_buf[0] == 'm')
+      if (own_buffer[0] == 'm')
 	{
 	  CORE_ADDR mem_addr;
-	  unsigned char *mem_buf;
+	  unsigned char *mem_buffer;
 	  unsigned int mem_len;
 
-	  decode_m_packet (&own_buf[1], &mem_addr, &mem_len);
-	  mem_buf = (unsigned char *) xmalloc (mem_len);
-	  if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
-	    bin2hex (mem_buf, own_buf, mem_len);
+	  decode_m_packet (&own_buffer[1], &mem_addr, &mem_len);
+	  mem_buffer = (unsigned char *) xmalloc (mem_len);
+	  if (read_inferior_memory (mem_addr, mem_buffer, mem_len) == 0)
+	    bin2hex (mem_buffer, own_buffer, mem_len);
 	  else
-	    write_enn (own_buf);
-	  free (mem_buf);
-	  if (putpkt (own_buf) < 0)
+	    write_enn (own_buffer);
+	  free (mem_buffer);
+	  if (putpkt (own_buffer) < 0)
 	    return -1;
 	}
-      else if (own_buf[0] == 'v')
+      else if (own_buffer[0] == 'v')
 	{
 	  int new_len = -1;
-	  handle_v_requests (own_buf, len, &new_len);
+	  handle_v_requests (own_buffer, len, &new_len);
 	  if (new_len != -1)
-	    putpkt_binary (own_buf, new_len);
+	    putpkt_binary (own_buffer, new_len);
 	  else
-	    putpkt (own_buf);
+	    putpkt (own_buffer);
 	}
       else
 	break;
-      len = getpkt (own_buf);
+      len = getpkt (own_buffer);
       if (len < 0)
 	return -1;
     }
 
-  if (!startswith (own_buf, "qSymbol:"))
+  if (!startswith (own_buffer, "qSymbol:"))
     {
-      warning ("Malformed response to qSymbol, ignoring: %s\n", own_buf);
+      warning ("Malformed response to qSymbol, ignoring: %s\n", own_buffer);
       return -1;
     }
 
-  p = own_buf + strlen ("qSymbol:");
+  p = own_buffer + strlen ("qSymbol:");
   q = p;
   while (*q && *q != ':')
     q++;
@@ -1555,13 +1551,13 @@ relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc)
   ULONGEST written = 0;
 
   /* Send the request.  */
-  sprintf (own_buf, "qRelocInsn:%s;%s", paddress (oldloc),
+  sprintf (own_buffer, "qRelocInsn:%s;%s", paddress (oldloc),
 	   paddress (*to));
-  if (putpkt (own_buf) < 0)
+  if (putpkt (own_buffer) < 0)
     return -1;
 
   /* FIXME:  Eventually add buffer overflow checking (to getpkt?)  */
-  len = getpkt (own_buf);
+  len = getpkt (own_buffer);
   if (len < 0)
     return -1;
 
@@ -1569,61 +1565,61 @@ relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc)
      wait for the qRelocInsn "response".  That requires re-entering
      the main loop.  For now, this is an adequate approximation; allow
      GDB to access memory.  */
-  while (own_buf[0] == 'm' || own_buf[0] == 'M' || own_buf[0] == 'X')
+  while (own_buffer[0] == 'm' || own_buffer[0] == 'M' || own_buffer[0] == 'X')
     {
       CORE_ADDR mem_addr;
-      unsigned char *mem_buf = NULL;
+      unsigned char *mem_buffer = NULL;
       unsigned int mem_len;
 
-      if (own_buf[0] == 'm')
+      if (own_buffer[0] == 'm')
 	{
-	  decode_m_packet (&own_buf[1], &mem_addr, &mem_len);
-	  mem_buf = (unsigned char *) xmalloc (mem_len);
-	  if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
-	    bin2hex (mem_buf, own_buf, mem_len);
+	  decode_m_packet (&own_buffer[1], &mem_addr, &mem_len);
+	  mem_buffer = (unsigned char *) xmalloc (mem_len);
+	  if (read_inferior_memory (mem_addr, mem_buffer, mem_len) == 0)
+	    bin2hex (mem_buffer, own_buffer, mem_len);
 	  else
-	    write_enn (own_buf);
+	    write_enn (own_buffer);
 	}
-      else if (own_buf[0] == 'X')
+      else if (own_buffer[0] == 'X')


hooks/post-receive
--
Repository for Project Archer.


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2017-11-08  2:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-08  2:32 [SCM] scox/gdbserver-multi-client: Consolidate gdbserver global variables scox

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).