Home | History | Annotate | Line # | Download | only in gdbserver
remote-utils.cc revision 1.1
      1 /* Remote utility routines for the remote server for GDB.
      2    Copyright (C) 1986-2020 Free Software Foundation, Inc.
      3 
      4    This file is part of GDB.
      5 
      6    This program is free software; you can redistribute it and/or modify
      7    it under the terms of the GNU General Public License as published by
      8    the Free Software Foundation; either version 3 of the License, or
      9    (at your option) any later version.
     10 
     11    This program is distributed in the hope that it will be useful,
     12    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14    GNU General Public License for more details.
     15 
     16    You should have received a copy of the GNU General Public License
     17    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     18 
     19 #include "server.h"
     20 #if HAVE_TERMIOS_H
     21 #include <termios.h>
     22 #endif
     23 #include "target.h"
     24 #include "gdbthread.h"
     25 #include "tdesc.h"
     26 #include "debug.h"
     27 #include "dll.h"
     28 #include "gdbsupport/rsp-low.h"
     29 #include "gdbsupport/netstuff.h"
     30 #include "gdbsupport/filestuff.h"
     31 #include "gdbsupport/gdb-sigmask.h"
     32 #include <ctype.h>
     33 #if HAVE_SYS_IOCTL_H
     34 #include <sys/ioctl.h>
     35 #endif
     36 #if HAVE_SYS_FILE_H
     37 #include <sys/file.h>
     38 #endif
     39 #if HAVE_NETINET_IN_H
     40 #include <netinet/in.h>
     41 #endif
     42 #if HAVE_SYS_SOCKET_H
     43 #include <sys/socket.h>
     44 #endif
     45 #if HAVE_NETDB_H
     46 #include <netdb.h>
     47 #endif
     48 #if HAVE_NETINET_TCP_H
     49 #include <netinet/tcp.h>
     50 #endif
     51 #if HAVE_SYS_IOCTL_H
     52 #include <sys/ioctl.h>
     53 #endif
     54 #if HAVE_SIGNAL_H
     55 #include <signal.h>
     56 #endif
     57 #if HAVE_FCNTL_H
     58 #include <fcntl.h>
     59 #endif
     60 #include "gdbsupport/gdb_sys_time.h"
     61 #include <unistd.h>
     62 #if HAVE_ARPA_INET_H
     63 #include <arpa/inet.h>
     64 #endif
     65 #include <sys/stat.h>
     66 
     67 #if USE_WIN32API
     68 #include <ws2tcpip.h>
     69 #endif
     70 
     71 #ifndef HAVE_SOCKLEN_T
     72 typedef int socklen_t;
     73 #endif
     74 
     75 #ifndef IN_PROCESS_AGENT
     76 
     77 /* Extra value for readchar_callback.  */
     78 enum {
     79   /* The callback is currently not scheduled.  */
     80   NOT_SCHEDULED = -1
     81 };
     82 
     83 /* Status of the readchar callback.
     84    Either NOT_SCHEDULED or the callback id.  */
     85 static int readchar_callback = NOT_SCHEDULED;
     86 
     87 static int readchar (void);
     88 static void reset_readchar (void);
     89 static void reschedule (void);
     90 
     91 /* A cache entry for a successfully looked-up symbol.  */
     92 struct sym_cache
     93 {
     94   char *name;
     95   CORE_ADDR addr;
     96   struct sym_cache *next;
     97 };
     98 
     99 static int remote_is_stdio = 0;
    100 
    101 static int remote_desc = -1;
    102 static int listen_desc = -1;
    103 
    104 #ifdef USE_WIN32API
    105 # define read(fd, buf, len) recv (fd, (char *) buf, len, 0)
    106 # define write(fd, buf, len) send (fd, (char *) buf, len, 0)
    107 #endif
    108 
    109 int
    110 gdb_connected (void)
    111 {
    112   return remote_desc != -1;
    113 }
    114 
    115 /* Return true if the remote connection is over stdio.  */
    116 
    117 int
    118 remote_connection_is_stdio (void)
    119 {
    120   return remote_is_stdio;
    121 }
    122 
    123 static void
    124 enable_async_notification (int fd)
    125 {
    126 #if defined(F_SETFL) && defined (FASYNC)
    127   int save_fcntl_flags;
    128 
    129   save_fcntl_flags = fcntl (fd, F_GETFL, 0);
    130   fcntl (fd, F_SETFL, save_fcntl_flags | FASYNC);
    131 #if defined (F_SETOWN)
    132   fcntl (fd, F_SETOWN, getpid ());
    133 #endif
    134 #endif
    135 }
    136 
    137 static void
    138 handle_accept_event (int err, gdb_client_data client_data)
    139 {
    140   struct sockaddr_storage sockaddr;
    141   socklen_t len = sizeof (sockaddr);
    142 
    143   if (debug_threads)
    144     debug_printf ("handling possible accept event\n");
    145 
    146   remote_desc = accept (listen_desc, (struct sockaddr *) &sockaddr, &len);
    147   if (remote_desc == -1)
    148     perror_with_name ("Accept failed");
    149 
    150   /* Enable TCP keep alive process. */
    151   socklen_t tmp = 1;
    152   setsockopt (remote_desc, SOL_SOCKET, SO_KEEPALIVE,
    153 	      (char *) &tmp, sizeof (tmp));
    154 
    155   /* Tell TCP not to delay small packets.  This greatly speeds up
    156      interactive response. */
    157   tmp = 1;
    158   setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY,
    159 	      (char *) &tmp, sizeof (tmp));
    160 
    161 #ifndef USE_WIN32API
    162   signal (SIGPIPE, SIG_IGN);	/* If we don't do this, then gdbserver simply
    163 				   exits when the remote side dies.  */
    164 #endif
    165 
    166   if (run_once)
    167     {
    168 #ifndef USE_WIN32API
    169       close (listen_desc);		/* No longer need this */
    170 #else
    171       closesocket (listen_desc);	/* No longer need this */
    172 #endif
    173     }
    174 
    175   /* Even if !RUN_ONCE no longer notice new connections.  Still keep the
    176      descriptor open for add_file_handler to wait for a new connection.  */
    177   delete_file_handler (listen_desc);
    178 
    179   /* Convert IP address to string.  */
    180   char orig_host[GDB_NI_MAX_ADDR], orig_port[GDB_NI_MAX_PORT];
    181 
    182   int r = getnameinfo ((struct sockaddr *) &sockaddr, len,
    183 		       orig_host, sizeof (orig_host),
    184 		       orig_port, sizeof (orig_port),
    185 		       NI_NUMERICHOST | NI_NUMERICSERV);
    186 
    187   if (r != 0)
    188     fprintf (stderr, _("Could not obtain remote address: %s\n"),
    189 	     gai_strerror (r));
    190   else
    191     fprintf (stderr, _("Remote debugging from host %s, port %s\n"),
    192 	     orig_host, orig_port);
    193 
    194   enable_async_notification (remote_desc);
    195 
    196   /* Register the event loop handler.  */
    197   add_file_handler (remote_desc, handle_serial_event, NULL);
    198 
    199   /* We have a new GDB connection now.  If we were disconnected
    200      tracing, there's a window where the target could report a stop
    201      event to the event loop, and since we have a connection now, we'd
    202      try to send vStopped notifications to GDB.  But, don't do that
    203      until GDB as selected all-stop/non-stop, and has queried the
    204      threads' status ('?').  */
    205   target_async (0);
    206 }
    207 
    208 /* Prepare for a later connection to a remote debugger.
    209    NAME is the filename used for communication.  */
    210 
    211 void
    212 remote_prepare (const char *name)
    213 {
    214   client_state &cs = get_client_state ();
    215 #ifdef USE_WIN32API
    216   static int winsock_initialized;
    217 #endif
    218   socklen_t tmp;
    219 
    220   remote_is_stdio = 0;
    221   if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
    222     {
    223       /* We need to record fact that we're using stdio sooner than the
    224 	 call to remote_open so start_inferior knows the connection is
    225 	 via stdio.  */
    226       remote_is_stdio = 1;
    227       cs.transport_is_reliable = 1;
    228       return;
    229     }
    230 
    231   struct addrinfo hint;
    232   struct addrinfo *ainfo;
    233 
    234   memset (&hint, 0, sizeof (hint));
    235   /* Assume no prefix will be passed, therefore we should use
    236      AF_UNSPEC.  */
    237   hint.ai_family = AF_UNSPEC;
    238   hint.ai_socktype = SOCK_STREAM;
    239   hint.ai_protocol = IPPROTO_TCP;
    240 
    241   parsed_connection_spec parsed
    242     = parse_connection_spec_without_prefix (name, &hint);
    243 
    244   if (parsed.port_str.empty ())
    245     {
    246       cs.transport_is_reliable = 0;
    247       return;
    248     }
    249 
    250 #ifdef USE_WIN32API
    251   if (!winsock_initialized)
    252     {
    253       WSADATA wsad;
    254 
    255       WSAStartup (MAKEWORD (1, 0), &wsad);
    256       winsock_initialized = 1;
    257     }
    258 #endif
    259 
    260   int r = getaddrinfo (parsed.host_str.c_str (), parsed.port_str.c_str (),
    261 		       &hint, &ainfo);
    262 
    263   if (r != 0)
    264     error (_("%s: cannot resolve name: %s"), name, gai_strerror (r));
    265 
    266   scoped_free_addrinfo freeaddrinfo (ainfo);
    267 
    268   struct addrinfo *iter;
    269 
    270   for (iter = ainfo; iter != NULL; iter = iter->ai_next)
    271     {
    272       listen_desc = gdb_socket_cloexec (iter->ai_family, iter->ai_socktype,
    273 					iter->ai_protocol);
    274 
    275       if (listen_desc >= 0)
    276 	break;
    277     }
    278 
    279   if (iter == NULL)
    280     perror_with_name ("Can't open socket");
    281 
    282   /* Allow rapid reuse of this port. */
    283   tmp = 1;
    284   setsockopt (listen_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp,
    285 	      sizeof (tmp));
    286 
    287   switch (iter->ai_family)
    288     {
    289     case AF_INET:
    290       ((struct sockaddr_in *) iter->ai_addr)->sin_addr.s_addr = INADDR_ANY;
    291       break;
    292     case AF_INET6:
    293       ((struct sockaddr_in6 *) iter->ai_addr)->sin6_addr = in6addr_any;
    294       break;
    295     default:
    296       internal_error (__FILE__, __LINE__,
    297 		      _("Invalid 'ai_family' %d\n"), iter->ai_family);
    298     }
    299 
    300   if (bind (listen_desc, iter->ai_addr, iter->ai_addrlen) != 0)
    301     perror_with_name ("Can't bind address");
    302 
    303   if (listen (listen_desc, 1) != 0)
    304     perror_with_name ("Can't listen on socket");
    305 
    306   cs.transport_is_reliable = 1;
    307 }
    308 
    309 /* Open a connection to a remote debugger.
    310    NAME is the filename used for communication.  */
    311 
    312 void
    313 remote_open (const char *name)
    314 {
    315   const char *port_str;
    316 
    317   port_str = strchr (name, ':');
    318 #ifdef USE_WIN32API
    319   if (port_str == NULL)
    320     error ("Only HOST:PORT is supported on this platform.");
    321 #endif
    322 
    323   if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
    324     {
    325       fprintf (stderr, "Remote debugging using stdio\n");
    326 
    327       /* Use stdin as the handle of the connection.
    328 	 We only select on reads, for example.  */
    329       remote_desc = fileno (stdin);
    330 
    331       enable_async_notification (remote_desc);
    332 
    333       /* Register the event loop handler.  */
    334       add_file_handler (remote_desc, handle_serial_event, NULL);
    335     }
    336 #ifndef USE_WIN32API
    337   else if (port_str == NULL)
    338     {
    339       struct stat statbuf;
    340 
    341       if (stat (name, &statbuf) == 0
    342 	  && (S_ISCHR (statbuf.st_mode) || S_ISFIFO (statbuf.st_mode)))
    343 	remote_desc = open (name, O_RDWR);
    344       else
    345 	{
    346 	  errno = EINVAL;
    347 	  remote_desc = -1;
    348 	}
    349 
    350       if (remote_desc < 0)
    351 	perror_with_name ("Could not open remote device");
    352 
    353 #if HAVE_TERMIOS_H
    354       {
    355 	struct termios termios;
    356 	tcgetattr (remote_desc, &termios);
    357 
    358 	termios.c_iflag = 0;
    359 	termios.c_oflag = 0;
    360 	termios.c_lflag = 0;
    361 	termios.c_cflag &= ~(CSIZE | PARENB);
    362 	termios.c_cflag |= CLOCAL | CS8;
    363 	termios.c_cc[VMIN] = 1;
    364 	termios.c_cc[VTIME] = 0;
    365 
    366 	tcsetattr (remote_desc, TCSANOW, &termios);
    367       }
    368 #endif
    369 
    370       fprintf (stderr, "Remote debugging using %s\n", name);
    371 
    372       enable_async_notification (remote_desc);
    373 
    374       /* Register the event loop handler.  */
    375       add_file_handler (remote_desc, handle_serial_event, NULL);
    376     }
    377 #endif /* USE_WIN32API */
    378   else
    379     {
    380       char listen_port[GDB_NI_MAX_PORT];
    381       struct sockaddr_storage sockaddr;
    382       socklen_t len = sizeof (sockaddr);
    383 
    384       if (getsockname (listen_desc, (struct sockaddr *) &sockaddr, &len) < 0)
    385 	perror_with_name ("Can't determine port");
    386 
    387       int r = getnameinfo ((struct sockaddr *) &sockaddr, len,
    388 			   NULL, 0,
    389 			   listen_port, sizeof (listen_port),
    390 			   NI_NUMERICSERV);
    391 
    392       if (r != 0)
    393 	fprintf (stderr, _("Can't obtain port where we are listening: %s"),
    394 		 gai_strerror (r));
    395       else
    396 	fprintf (stderr, _("Listening on port %s\n"), listen_port);
    397 
    398       fflush (stderr);
    399 
    400       /* Register the event loop handler.  */
    401       add_file_handler (listen_desc, handle_accept_event, NULL);
    402     }
    403 }
    404 
    405 void
    406 remote_close (void)
    407 {
    408   delete_file_handler (remote_desc);
    409 
    410   disable_async_io ();
    411 
    412 #ifdef USE_WIN32API
    413   closesocket (remote_desc);
    414 #else
    415   if (! remote_connection_is_stdio ())
    416     close (remote_desc);
    417 #endif
    418   remote_desc = -1;
    419 
    420   reset_readchar ();
    421 }
    422 
    423 #endif
    424 
    425 #ifndef IN_PROCESS_AGENT
    426 
    427 void
    428 decode_address (CORE_ADDR *addrp, const char *start, int len)
    429 {
    430   CORE_ADDR addr;
    431   char ch;
    432   int i;
    433 
    434   addr = 0;
    435   for (i = 0; i < len; i++)
    436     {
    437       ch = start[i];
    438       addr = addr << 4;
    439       addr = addr | (fromhex (ch) & 0x0f);
    440     }
    441   *addrp = addr;
    442 }
    443 
    444 const char *
    445 decode_address_to_semicolon (CORE_ADDR *addrp, const char *start)
    446 {
    447   const char *end;
    448 
    449   end = start;
    450   while (*end != '\0' && *end != ';')
    451     end++;
    452 
    453   decode_address (addrp, start, end - start);
    454 
    455   if (*end == ';')
    456     end++;
    457   return end;
    458 }
    459 
    460 #endif
    461 
    462 #ifndef IN_PROCESS_AGENT
    463 
    464 /* Look for a sequence of characters which can be run-length encoded.
    465    If there are any, update *CSUM and *P.  Otherwise, output the
    466    single character.  Return the number of characters consumed.  */
    467 
    468 static int
    469 try_rle (char *buf, int remaining, unsigned char *csum, char **p)
    470 {
    471   int n;
    472 
    473   /* Always output the character.  */
    474   *csum += buf[0];
    475   *(*p)++ = buf[0];
    476 
    477   /* Don't go past '~'.  */
    478   if (remaining > 97)
    479     remaining = 97;
    480 
    481   for (n = 1; n < remaining; n++)
    482     if (buf[n] != buf[0])
    483       break;
    484 
    485   /* N is the index of the first character not the same as buf[0].
    486      buf[0] is counted twice, so by decrementing N, we get the number
    487      of characters the RLE sequence will replace.  */
    488   n--;
    489 
    490   if (n < 3)
    491     return 1;
    492 
    493   /* Skip the frame characters.  The manual says to skip '+' and '-'
    494      also, but there's no reason to.  Unfortunately these two unusable
    495      characters double the encoded length of a four byte zero
    496      value.  */
    497   while (n + 29 == '$' || n + 29 == '#')
    498     n--;
    499 
    500   *csum += '*';
    501   *(*p)++ = '*';
    502   *csum += n + 29;
    503   *(*p)++ = n + 29;
    504 
    505   return n + 1;
    506 }
    507 
    508 #endif
    509 
    510 #ifndef IN_PROCESS_AGENT
    511 
    512 /* Write a PTID to BUF.  Returns BUF+CHARACTERS_WRITTEN.  */
    513 
    514 char *
    515 write_ptid (char *buf, ptid_t ptid)
    516 {
    517   client_state &cs = get_client_state ();
    518   int pid, tid;
    519 
    520   if (cs.multi_process)
    521     {
    522       pid = ptid.pid ();
    523       if (pid < 0)
    524 	buf += sprintf (buf, "p-%x.", -pid);
    525       else
    526 	buf += sprintf (buf, "p%x.", pid);
    527     }
    528   tid = ptid.lwp ();
    529   if (tid < 0)
    530     buf += sprintf (buf, "-%x", -tid);
    531   else
    532     buf += sprintf (buf, "%x", tid);
    533 
    534   return buf;
    535 }
    536 
    537 static ULONGEST
    538 hex_or_minus_one (const char *buf, const char **obuf)
    539 {
    540   ULONGEST ret;
    541 
    542   if (startswith (buf, "-1"))
    543     {
    544       ret = (ULONGEST) -1;
    545       buf += 2;
    546     }
    547   else
    548     buf = unpack_varlen_hex (buf, &ret);
    549 
    550   if (obuf)
    551     *obuf = buf;
    552 
    553   return ret;
    554 }
    555 
    556 /* Extract a PTID from BUF.  If non-null, OBUF is set to the to one
    557    passed the last parsed char.  Returns null_ptid on error.  */
    558 ptid_t
    559 read_ptid (const char *buf, const char **obuf)
    560 {
    561   const char *p = buf;
    562   const char *pp;
    563   ULONGEST pid = 0, tid = 0;
    564 
    565   if (*p == 'p')
    566     {
    567       /* Multi-process ptid.  */
    568       pp = unpack_varlen_hex (p + 1, &pid);
    569       if (*pp != '.')
    570 	error ("invalid remote ptid: %s\n", p);
    571 
    572       p = pp + 1;
    573 
    574       tid = hex_or_minus_one (p, &pp);
    575 
    576       if (obuf)
    577 	*obuf = pp;
    578       return ptid_t (pid, tid, 0);
    579     }
    580 
    581   /* No multi-process.  Just a tid.  */
    582   tid = hex_or_minus_one (p, &pp);
    583 
    584   /* Since GDB is not sending a process id (multi-process extensions
    585      are off), then there's only one process.  Default to the first in
    586      the list.  */
    587   pid = pid_of (get_first_process ());
    588 
    589   if (obuf)
    590     *obuf = pp;
    591   return ptid_t (pid, tid, 0);
    592 }
    593 
    594 /* Write COUNT bytes in BUF to the client.
    595    The result is the number of bytes written or -1 if error.
    596    This may return less than COUNT.  */
    597 
    598 static int
    599 write_prim (const void *buf, int count)
    600 {
    601   if (remote_connection_is_stdio ())
    602     return write (fileno (stdout), buf, count);
    603   else
    604     return write (remote_desc, buf, count);
    605 }
    606 
    607 /* Read COUNT bytes from the client and store in BUF.
    608    The result is the number of bytes read or -1 if error.
    609    This may return less than COUNT.  */
    610 
    611 static int
    612 read_prim (void *buf, int count)
    613 {
    614   if (remote_connection_is_stdio ())
    615     return read (fileno (stdin), buf, count);
    616   else
    617     return read (remote_desc, buf, count);
    618 }
    619 
    620 /* Send a packet to the remote machine, with error checking.
    621    The data of the packet is in BUF, and the length of the
    622    packet is in CNT.  Returns >= 0 on success, -1 otherwise.  */
    623 
    624 static int
    625 putpkt_binary_1 (char *buf, int cnt, int is_notif)
    626 {
    627   client_state &cs = get_client_state ();
    628   int i;
    629   unsigned char csum = 0;
    630   char *buf2;
    631   char *p;
    632   int cc;
    633 
    634   buf2 = (char *) xmalloc (strlen ("$") + cnt + strlen ("#nn") + 1);
    635 
    636   /* Copy the packet into buffer BUF2, encapsulating it
    637      and giving it a checksum.  */
    638 
    639   p = buf2;
    640   if (is_notif)
    641     *p++ = '%';
    642   else
    643     *p++ = '$';
    644 
    645   for (i = 0; i < cnt;)
    646     i += try_rle (buf + i, cnt - i, &csum, &p);
    647 
    648   *p++ = '#';
    649   *p++ = tohex ((csum >> 4) & 0xf);
    650   *p++ = tohex (csum & 0xf);
    651 
    652   *p = '\0';
    653 
    654   /* Send it over and over until we get a positive ack.  */
    655 
    656   do
    657     {
    658       if (write_prim (buf2, p - buf2) != p - buf2)
    659 	{
    660 	  perror ("putpkt(write)");
    661 	  free (buf2);
    662 	  return -1;
    663 	}
    664 
    665       if (cs.noack_mode || is_notif)
    666 	{
    667 	  /* Don't expect an ack then.  */
    668 	  if (remote_debug)
    669 	    {
    670 	      if (is_notif)
    671 		debug_printf ("putpkt (\"%s\"); [notif]\n", buf2);
    672 	      else
    673 		debug_printf ("putpkt (\"%s\"); [noack mode]\n", buf2);
    674 	      debug_flush ();
    675 	    }
    676 	  break;
    677 	}
    678 
    679       if (remote_debug)
    680 	{
    681 	  debug_printf ("putpkt (\"%s\"); [looking for ack]\n", buf2);
    682 	  debug_flush ();
    683 	}
    684 
    685       cc = readchar ();
    686 
    687       if (cc < 0)
    688 	{
    689 	  free (buf2);
    690 	  return -1;
    691 	}
    692 
    693       if (remote_debug)
    694 	{
    695 	  debug_printf ("[received '%c' (0x%x)]\n", cc, cc);
    696 	  debug_flush ();
    697 	}
    698 
    699       /* Check for an input interrupt while we're here.  */
    700       if (cc == '\003' && current_thread != NULL)
    701 	the_target->request_interrupt ();
    702     }
    703   while (cc != '+');
    704 
    705   free (buf2);
    706   return 1;			/* Success! */
    707 }
    708 
    709 int
    710 putpkt_binary (char *buf, int cnt)
    711 {
    712   return putpkt_binary_1 (buf, cnt, 0);
    713 }
    714 
    715 /* Send a packet to the remote machine, with error checking.  The data
    716    of the packet is in BUF, and the packet should be a NUL-terminated
    717    string.  Returns >= 0 on success, -1 otherwise.  */
    718 
    719 int
    720 putpkt (char *buf)
    721 {
    722   return putpkt_binary (buf, strlen (buf));
    723 }
    724 
    725 int
    726 putpkt_notif (char *buf)
    727 {
    728   return putpkt_binary_1 (buf, strlen (buf), 1);
    729 }
    730 
    731 /* Come here when we get an input interrupt from the remote side.  This
    732    interrupt should only be active while we are waiting for the child to do
    733    something.  Thus this assumes readchar:bufcnt is 0.
    734    About the only thing that should come through is a ^C, which
    735    will cause us to request child interruption.  */
    736 
    737 static void
    738 input_interrupt (int unused)
    739 {
    740   fd_set readset;
    741   struct timeval immediate = { 0, 0 };
    742 
    743   /* Protect against spurious interrupts.  This has been observed to
    744      be a problem under NetBSD 1.4 and 1.5.  */
    745 
    746   FD_ZERO (&readset);
    747   FD_SET (remote_desc, &readset);
    748   if (select (remote_desc + 1, &readset, 0, 0, &immediate) > 0)
    749     {
    750       int cc;
    751       char c = 0;
    752 
    753       cc = read_prim (&c, 1);
    754 
    755       if (cc == 0)
    756 	{
    757 	  fprintf (stderr, "client connection closed\n");
    758 	  return;
    759 	}
    760       else if (cc != 1 || c != '\003')
    761 	{
    762 	  fprintf (stderr, "input_interrupt, count = %d c = %d ", cc, c);
    763 	  if (isprint (c))
    764 	    fprintf (stderr, "('%c')\n", c);
    765 	  else
    766 	    fprintf (stderr, "('\\x%02x')\n", c & 0xff);
    767 	  return;
    768 	}
    769 
    770       the_target->request_interrupt ();
    771     }
    772 }
    773 
    774 /* Check if the remote side sent us an interrupt request (^C).  */
    775 void
    776 check_remote_input_interrupt_request (void)
    777 {
    778   /* This function may be called before establishing communications,
    779      therefore we need to validate the remote descriptor.  */
    780 
    781   if (remote_desc == -1)
    782     return;
    783 
    784   input_interrupt (0);
    785 }
    786 
    787 /* Asynchronous I/O support.  SIGIO must be unblocked when waiting,
    788    in order to accept Control-C from the client, and must be blocked
    789    when talking to the client.  */
    790 
    791 static void
    792 block_unblock_async_io (int block)
    793 {
    794 #ifndef USE_WIN32API
    795   sigset_t sigio_set;
    796 
    797   sigemptyset (&sigio_set);
    798   sigaddset (&sigio_set, SIGIO);
    799   gdb_sigmask (block ? SIG_BLOCK : SIG_UNBLOCK, &sigio_set, NULL);
    800 #endif
    801 }
    802 
    803 /* Current state of asynchronous I/O.  */
    804 static int async_io_enabled;
    805 
    806 /* Enable asynchronous I/O.  */
    807 void
    808 enable_async_io (void)
    809 {
    810   if (async_io_enabled)
    811     return;
    812 
    813   block_unblock_async_io (0);
    814 
    815   async_io_enabled = 1;
    816 }
    817 
    818 /* Disable asynchronous I/O.  */
    819 void
    820 disable_async_io (void)
    821 {
    822   if (!async_io_enabled)
    823     return;
    824 
    825   block_unblock_async_io (1);
    826 
    827   async_io_enabled = 0;
    828 }
    829 
    830 void
    831 initialize_async_io (void)
    832 {
    833   /* Make sure that async I/O starts blocked.  */
    834   async_io_enabled = 1;
    835   disable_async_io ();
    836 
    837   /* Install the signal handler.  */
    838 #ifndef USE_WIN32API
    839   signal (SIGIO, input_interrupt);
    840 #endif
    841 }
    842 
    843 /* Internal buffer used by readchar.
    844    These are global to readchar because reschedule_remote needs to be
    845    able to tell whether the buffer is empty.  */
    846 
    847 static unsigned char readchar_buf[BUFSIZ];
    848 static int readchar_bufcnt = 0;
    849 static unsigned char *readchar_bufp;
    850 
    851 /* Returns next char from remote GDB.  -1 if error.  */
    852 
    853 static int
    854 readchar (void)
    855 {
    856   int ch;
    857 
    858   if (readchar_bufcnt == 0)
    859     {
    860       readchar_bufcnt = read_prim (readchar_buf, sizeof (readchar_buf));
    861 
    862       if (readchar_bufcnt <= 0)
    863 	{
    864 	  if (readchar_bufcnt == 0)
    865 	    {
    866 	      if (remote_debug)
    867 		debug_printf ("readchar: Got EOF\n");
    868 	    }
    869 	  else
    870 	    perror ("readchar");
    871 
    872 	  return -1;
    873 	}
    874 
    875       readchar_bufp = readchar_buf;
    876     }
    877 
    878   readchar_bufcnt--;
    879   ch = *readchar_bufp++;
    880   reschedule ();
    881   return ch;
    882 }
    883 
    884 /* Reset the readchar state machine.  */
    885 
    886 static void
    887 reset_readchar (void)
    888 {
    889   readchar_bufcnt = 0;
    890   if (readchar_callback != NOT_SCHEDULED)
    891     {
    892       delete_timer (readchar_callback);
    893       readchar_callback = NOT_SCHEDULED;
    894     }
    895 }
    896 
    897 /* Process remaining data in readchar_buf.  */
    898 
    899 static void
    900 process_remaining (void *context)
    901 {
    902   /* This is a one-shot event.  */
    903   readchar_callback = NOT_SCHEDULED;
    904 
    905   if (readchar_bufcnt > 0)
    906     handle_serial_event (0, NULL);
    907 }
    908 
    909 /* If there is still data in the buffer, queue another event to process it,
    910    we can't sleep in select yet.  */
    911 
    912 static void
    913 reschedule (void)
    914 {
    915   if (readchar_bufcnt > 0 && readchar_callback == NOT_SCHEDULED)
    916     readchar_callback = create_timer (0, process_remaining, NULL);
    917 }
    918 
    919 /* Read a packet from the remote machine, with error checking,
    920    and store it in BUF.  Returns length of packet, or negative if error. */
    921 
    922 int
    923 getpkt (char *buf)
    924 {
    925   client_state &cs = get_client_state ();
    926   char *bp;
    927   unsigned char csum, c1, c2;
    928   int c;
    929 
    930   while (1)
    931     {
    932       csum = 0;
    933 
    934       while (1)
    935 	{
    936 	  c = readchar ();
    937 
    938 	  /* The '\003' may appear before or after each packet, so
    939 	     check for an input interrupt.  */
    940 	  if (c == '\003')
    941 	    {
    942 	      the_target->request_interrupt ();
    943 	      continue;
    944 	    }
    945 
    946 	  if (c == '$')
    947 	    break;
    948 	  if (remote_debug)
    949 	    {
    950 	      debug_printf ("[getpkt: discarding char '%c']\n", c);
    951 	      debug_flush ();
    952 	    }
    953 
    954 	  if (c < 0)
    955 	    return -1;
    956 	}
    957 
    958       bp = buf;
    959       while (1)
    960 	{
    961 	  c = readchar ();
    962 	  if (c < 0)
    963 	    return -1;
    964 	  if (c == '#')
    965 	    break;
    966 	  *bp++ = c;
    967 	  csum += c;
    968 	}
    969       *bp = 0;
    970 
    971       c1 = fromhex (readchar ());
    972       c2 = fromhex (readchar ());
    973 
    974       if (csum == (c1 << 4) + c2)
    975 	break;
    976 
    977       if (cs.noack_mode)
    978 	{
    979 	  fprintf (stderr,
    980 		   "Bad checksum, sentsum=0x%x, csum=0x%x, "
    981 		   "buf=%s [no-ack-mode, Bad medium?]\n",
    982 		   (c1 << 4) + c2, csum, buf);
    983 	  /* Not much we can do, GDB wasn't expecting an ack/nac.  */
    984 	  break;
    985 	}
    986 
    987       fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
    988 	       (c1 << 4) + c2, csum, buf);
    989       if (write_prim ("-", 1) != 1)
    990 	return -1;
    991     }
    992 
    993   if (!cs.noack_mode)
    994     {
    995       if (remote_debug)
    996 	{
    997 	  debug_printf ("getpkt (\"%s\");  [sending ack] \n", buf);
    998 	  debug_flush ();
    999 	}
   1000 
   1001       if (write_prim ("+", 1) != 1)
   1002 	return -1;
   1003 
   1004       if (remote_debug)
   1005 	{
   1006 	  debug_printf ("[sent ack]\n");
   1007 	  debug_flush ();
   1008 	}
   1009     }
   1010   else
   1011     {
   1012       if (remote_debug)
   1013 	{
   1014 	  debug_printf ("getpkt (\"%s\");  [no ack sent] \n", buf);
   1015 	  debug_flush ();
   1016 	}
   1017     }
   1018 
   1019   /* The readchar above may have already read a '\003' out of the socket
   1020      and moved it to the local buffer.  For example, when GDB sends
   1021      vCont;c immediately followed by interrupt (see
   1022      gdb.base/interrupt-noterm.exp).  As soon as we see the vCont;c, we'll
   1023      resume the inferior and wait.  Since we've already moved the '\003'
   1024      to the local buffer, SIGIO won't help.  In that case, if we don't
   1025      check for interrupt after the vCont;c packet, the interrupt character
   1026      would stay in the buffer unattended until after the next (unrelated)
   1027      stop.  */
   1028   while (readchar_bufcnt > 0 && *readchar_bufp == '\003')
   1029     {
   1030       /* Consume the interrupt character in the buffer.  */
   1031       readchar ();
   1032       the_target->request_interrupt ();
   1033     }
   1034 
   1035   return bp - buf;
   1036 }
   1037 
   1038 void
   1039 write_ok (char *buf)
   1040 {
   1041   buf[0] = 'O';
   1042   buf[1] = 'K';
   1043   buf[2] = '\0';
   1044 }
   1045 
   1046 void
   1047 write_enn (char *buf)
   1048 {
   1049   /* Some day, we should define the meanings of the error codes... */
   1050   buf[0] = 'E';
   1051   buf[1] = '0';
   1052   buf[2] = '1';
   1053   buf[3] = '\0';
   1054 }
   1055 
   1056 #endif
   1057 
   1058 #ifndef IN_PROCESS_AGENT
   1059 
   1060 static char *
   1061 outreg (struct regcache *regcache, int regno, char *buf)
   1062 {
   1063   if ((regno >> 12) != 0)
   1064     *buf++ = tohex ((regno >> 12) & 0xf);
   1065   if ((regno >> 8) != 0)
   1066     *buf++ = tohex ((regno >> 8) & 0xf);
   1067   *buf++ = tohex ((regno >> 4) & 0xf);
   1068   *buf++ = tohex (regno & 0xf);
   1069   *buf++ = ':';
   1070   collect_register_as_string (regcache, regno, buf);
   1071   buf += 2 * register_size (regcache->tdesc, regno);
   1072   *buf++ = ';';
   1073 
   1074   return buf;
   1075 }
   1076 
   1077 void
   1078 prepare_resume_reply (char *buf, ptid_t ptid,
   1079 		      struct target_waitstatus *status)
   1080 {
   1081   client_state &cs = get_client_state ();
   1082   if (debug_threads)
   1083     debug_printf ("Writing resume reply for %s:%d\n",
   1084 		  target_pid_to_str (ptid), status->kind);
   1085 
   1086   switch (status->kind)
   1087     {
   1088     case TARGET_WAITKIND_STOPPED:
   1089     case TARGET_WAITKIND_FORKED:
   1090     case TARGET_WAITKIND_VFORKED:
   1091     case TARGET_WAITKIND_VFORK_DONE:
   1092     case TARGET_WAITKIND_EXECD:
   1093     case TARGET_WAITKIND_THREAD_CREATED:
   1094     case TARGET_WAITKIND_SYSCALL_ENTRY:
   1095     case TARGET_WAITKIND_SYSCALL_RETURN:
   1096       {
   1097 	struct thread_info *saved_thread;
   1098 	const char **regp;
   1099 	struct regcache *regcache;
   1100 
   1101 	if ((status->kind == TARGET_WAITKIND_FORKED && cs.report_fork_events)
   1102 	    || (status->kind == TARGET_WAITKIND_VFORKED
   1103 		&& cs.report_vfork_events))
   1104 	  {
   1105 	    enum gdb_signal signal = GDB_SIGNAL_TRAP;
   1106 	    const char *event = (status->kind == TARGET_WAITKIND_FORKED
   1107 				 ? "fork" : "vfork");
   1108 
   1109 	    sprintf (buf, "T%02x%s:", signal, event);
   1110 	    buf += strlen (buf);
   1111 	    buf = write_ptid (buf, status->value.related_pid);
   1112 	    strcat (buf, ";");
   1113 	  }
   1114 	else if (status->kind == TARGET_WAITKIND_VFORK_DONE
   1115 		 && cs.report_vfork_events)
   1116 	  {
   1117 	    enum gdb_signal signal = GDB_SIGNAL_TRAP;
   1118 
   1119 	    sprintf (buf, "T%02xvforkdone:;", signal);
   1120 	  }
   1121 	else if (status->kind == TARGET_WAITKIND_EXECD && cs.report_exec_events)
   1122 	  {
   1123 	    enum gdb_signal signal = GDB_SIGNAL_TRAP;
   1124 	    const char *event = "exec";
   1125 	    char hexified_pathname[PATH_MAX * 2];
   1126 
   1127 	    sprintf (buf, "T%02x%s:", signal, event);
   1128 	    buf += strlen (buf);
   1129 
   1130 	    /* Encode pathname to hexified format.  */
   1131 	    bin2hex ((const gdb_byte *) status->value.execd_pathname,
   1132 		     hexified_pathname,
   1133 		     strlen (status->value.execd_pathname));
   1134 
   1135 	    sprintf (buf, "%s;", hexified_pathname);
   1136 	    xfree (status->value.execd_pathname);
   1137 	    status->value.execd_pathname = NULL;
   1138 	    buf += strlen (buf);
   1139 	  }
   1140 	else if (status->kind == TARGET_WAITKIND_THREAD_CREATED
   1141 		 && cs.report_thread_events)
   1142 	  {
   1143 	    enum gdb_signal signal = GDB_SIGNAL_TRAP;
   1144 
   1145 	    sprintf (buf, "T%02xcreate:;", signal);
   1146 	  }
   1147 	else if (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY
   1148 		 || status->kind == TARGET_WAITKIND_SYSCALL_RETURN)
   1149 	  {
   1150 	    enum gdb_signal signal = GDB_SIGNAL_TRAP;
   1151 	    const char *event = (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY
   1152 				 ? "syscall_entry" : "syscall_return");
   1153 
   1154 	    sprintf (buf, "T%02x%s:%x;", signal, event,
   1155 		     status->value.syscall_number);
   1156 	  }
   1157 	else
   1158 	  sprintf (buf, "T%02x", status->value.sig);
   1159 
   1160 	if (disable_packet_T)
   1161 	  {
   1162 	    /* This is a bit (OK, a lot) of a kludge, however, this isn't
   1163 	       really a user feature, but exists only so GDB can use the
   1164 	       gdbserver to test handling of the 'S' stop reply packet, so
   1165 	       we would rather this code be as simple as possible.
   1166 
   1167 	       By this point we've started to build the 'T' stop packet,
   1168 	       and it should look like 'Txx....' where 'x' is a hex digit.
   1169 	       An 'S' stop packet always looks like 'Sxx', so all we do
   1170 	       here is convert the buffer from a T packet to an S packet
   1171 	       and the avoid adding any extra content by breaking out.  */
   1172 	    gdb_assert (*buf == 'T');
   1173 	    gdb_assert (isxdigit (*(buf + 1)));
   1174 	    gdb_assert (isxdigit (*(buf + 2)));
   1175 	    *buf = 'S';
   1176 	    *(buf + 3) = '\0';
   1177 	    break;
   1178 	  }
   1179 
   1180 	buf += strlen (buf);
   1181 
   1182 	saved_thread = current_thread;
   1183 
   1184 	switch_to_thread (the_target, ptid);
   1185 
   1186 	regp = current_target_desc ()->expedite_regs;
   1187 
   1188 	regcache = get_thread_regcache (current_thread, 1);
   1189 
   1190 	if (the_target->stopped_by_watchpoint ())
   1191 	  {
   1192 	    CORE_ADDR addr;
   1193 	    int i;
   1194 
   1195 	    memcpy (buf, "watch:", 6);
   1196 	    buf += 6;
   1197 
   1198 	    addr = the_target->stopped_data_address ();
   1199 
   1200 	    /* Convert each byte of the address into two hexadecimal
   1201 	       chars.  Note that we take sizeof (void *) instead of
   1202 	       sizeof (addr); this is to avoid sending a 64-bit
   1203 	       address to a 32-bit GDB.  */
   1204 	    for (i = sizeof (void *) * 2; i > 0; i--)
   1205 	      *buf++ = tohex ((addr >> (i - 1) * 4) & 0xf);
   1206 	    *buf++ = ';';
   1207 	  }
   1208 	else if (cs.swbreak_feature && target_stopped_by_sw_breakpoint ())
   1209 	  {
   1210 	    sprintf (buf, "swbreak:;");
   1211 	    buf += strlen (buf);
   1212 	  }
   1213 	else if (cs.hwbreak_feature && target_stopped_by_hw_breakpoint ())
   1214 	  {
   1215 	    sprintf (buf, "hwbreak:;");
   1216 	    buf += strlen (buf);
   1217 	  }
   1218 
   1219 	while (*regp)
   1220 	  {
   1221 	    buf = outreg (regcache, find_regno (regcache->tdesc, *regp), buf);
   1222 	    regp ++;
   1223 	  }
   1224 	*buf = '\0';
   1225 
   1226 	/* Formerly, if the debugger had not used any thread features
   1227 	   we would not burden it with a thread status response.  This
   1228 	   was for the benefit of GDB 4.13 and older.  However, in
   1229 	   recent GDB versions the check (``if (cont_thread != 0)'')
   1230 	   does not have the desired effect because of sillyness in
   1231 	   the way that the remote protocol handles specifying a
   1232 	   thread.  Since thread support relies on qSymbol support
   1233 	   anyway, assume GDB can handle threads.  */
   1234 
   1235 	if (using_threads && !disable_packet_Tthread)
   1236 	  {
   1237 	    /* This if (1) ought to be unnecessary.  But remote_wait
   1238 	       in GDB will claim this event belongs to inferior_ptid
   1239 	       if we do not specify a thread, and there's no way for
   1240 	       gdbserver to know what inferior_ptid is.  */
   1241 	    if (1 || cs.general_thread != ptid)
   1242 	      {
   1243 		int core = -1;
   1244 		/* In non-stop, don't change the general thread behind
   1245 		   GDB's back.  */
   1246 		if (!non_stop)
   1247 		  cs.general_thread = ptid;
   1248 		sprintf (buf, "thread:");
   1249 		buf += strlen (buf);
   1250 		buf = write_ptid (buf, ptid);
   1251 		strcat (buf, ";");
   1252 		buf += strlen (buf);
   1253 
   1254 		core = target_core_of_thread (ptid);
   1255 
   1256 		if (core != -1)
   1257 		  {
   1258 		    sprintf (buf, "core:");
   1259 		    buf += strlen (buf);
   1260 		    sprintf (buf, "%x", core);
   1261 		    strcat (buf, ";");
   1262 		    buf += strlen (buf);
   1263 		  }
   1264 	      }
   1265 	  }
   1266 
   1267 	if (dlls_changed)
   1268 	  {
   1269 	    strcpy (buf, "library:;");
   1270 	    buf += strlen (buf);
   1271 	    dlls_changed = 0;
   1272 	  }
   1273 
   1274 	current_thread = saved_thread;
   1275       }
   1276       break;
   1277     case TARGET_WAITKIND_EXITED:
   1278       if (cs.multi_process)
   1279 	sprintf (buf, "W%x;process:%x",
   1280 		 status->value.integer, ptid.pid ());
   1281       else
   1282 	sprintf (buf, "W%02x", status->value.integer);
   1283       break;
   1284     case TARGET_WAITKIND_SIGNALLED:
   1285       if (cs.multi_process)
   1286 	sprintf (buf, "X%x;process:%x",
   1287 		 status->value.sig, ptid.pid ());
   1288       else
   1289 	sprintf (buf, "X%02x", status->value.sig);
   1290       break;
   1291     case TARGET_WAITKIND_THREAD_EXITED:
   1292       sprintf (buf, "w%x;", status->value.integer);
   1293       buf += strlen (buf);
   1294       buf = write_ptid (buf, ptid);
   1295       break;
   1296     case TARGET_WAITKIND_NO_RESUMED:
   1297       sprintf (buf, "N");
   1298       break;
   1299     default:
   1300       error ("unhandled waitkind");
   1301       break;
   1302     }
   1303 }
   1304 
   1305 void
   1306 decode_m_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr)
   1307 {
   1308   int i = 0, j = 0;
   1309   char ch;
   1310   *mem_addr_ptr = *len_ptr = 0;
   1311 
   1312   while ((ch = from[i++]) != ',')
   1313     {
   1314       *mem_addr_ptr = *mem_addr_ptr << 4;
   1315       *mem_addr_ptr |= fromhex (ch) & 0x0f;
   1316     }
   1317 
   1318   for (j = 0; j < 4; j++)
   1319     {
   1320       if ((ch = from[i++]) == 0)
   1321 	break;
   1322       *len_ptr = *len_ptr << 4;
   1323       *len_ptr |= fromhex (ch) & 0x0f;
   1324     }
   1325 }
   1326 
   1327 void
   1328 decode_M_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr,
   1329 		 unsigned char **to_p)
   1330 {
   1331   int i = 0;
   1332   char ch;
   1333   *mem_addr_ptr = *len_ptr = 0;
   1334 
   1335   while ((ch = from[i++]) != ',')
   1336     {
   1337       *mem_addr_ptr = *mem_addr_ptr << 4;
   1338       *mem_addr_ptr |= fromhex (ch) & 0x0f;
   1339     }
   1340 
   1341   while ((ch = from[i++]) != ':')
   1342     {
   1343       *len_ptr = *len_ptr << 4;
   1344       *len_ptr |= fromhex (ch) & 0x0f;
   1345     }
   1346 
   1347   if (*to_p == NULL)
   1348     *to_p = (unsigned char *) xmalloc (*len_ptr);
   1349 
   1350   hex2bin (&from[i++], *to_p, *len_ptr);
   1351 }
   1352 
   1353 int
   1354 decode_X_packet (char *from, int packet_len, CORE_ADDR *mem_addr_ptr,
   1355 		 unsigned int *len_ptr, unsigned char **to_p)
   1356 {
   1357   int i = 0;
   1358   char ch;
   1359   *mem_addr_ptr = *len_ptr = 0;
   1360 
   1361   while ((ch = from[i++]) != ',')
   1362     {
   1363       *mem_addr_ptr = *mem_addr_ptr << 4;
   1364       *mem_addr_ptr |= fromhex (ch) & 0x0f;
   1365     }
   1366 
   1367   while ((ch = from[i++]) != ':')
   1368     {
   1369       *len_ptr = *len_ptr << 4;
   1370       *len_ptr |= fromhex (ch) & 0x0f;
   1371     }
   1372 
   1373   if (*to_p == NULL)
   1374     *to_p = (unsigned char *) xmalloc (*len_ptr);
   1375 
   1376   if (remote_unescape_input ((const gdb_byte *) &from[i], packet_len - i,
   1377 			     *to_p, *len_ptr) != *len_ptr)
   1378     return -1;
   1379 
   1380   return 0;
   1381 }
   1382 
   1383 /* Decode a qXfer write request.  */
   1384 
   1385 int
   1386 decode_xfer_write (char *buf, int packet_len, CORE_ADDR *offset,
   1387 		   unsigned int *len, unsigned char *data)
   1388 {
   1389   char ch;
   1390   char *b = buf;
   1391 
   1392   /* Extract the offset.  */
   1393   *offset = 0;
   1394   while ((ch = *buf++) != ':')
   1395     {
   1396       *offset = *offset << 4;
   1397       *offset |= fromhex (ch) & 0x0f;
   1398     }
   1399 
   1400   /* Get encoded data.  */
   1401   packet_len -= buf - b;
   1402   *len = remote_unescape_input ((const gdb_byte *) buf, packet_len,
   1403 				data, packet_len);
   1404   return 0;
   1405 }
   1406 
   1407 /* Decode the parameters of a qSearch:memory packet.  */
   1408 
   1409 int
   1410 decode_search_memory_packet (const char *buf, int packet_len,
   1411 			     CORE_ADDR *start_addrp,
   1412 			     CORE_ADDR *search_space_lenp,
   1413 			     gdb_byte *pattern, unsigned int *pattern_lenp)
   1414 {
   1415   const char *p = buf;
   1416 
   1417   p = decode_address_to_semicolon (start_addrp, p);
   1418   p = decode_address_to_semicolon (search_space_lenp, p);
   1419   packet_len -= p - buf;
   1420   *pattern_lenp = remote_unescape_input ((const gdb_byte *) p, packet_len,
   1421 					 pattern, packet_len);
   1422   return 0;
   1423 }
   1424 
   1425 static void
   1426 free_sym_cache (struct sym_cache *sym)
   1427 {
   1428   if (sym != NULL)
   1429     {
   1430       free (sym->name);
   1431       free (sym);
   1432     }
   1433 }
   1434 
   1435 void
   1436 clear_symbol_cache (struct sym_cache **symcache_p)
   1437 {
   1438   struct sym_cache *sym, *next;
   1439 
   1440   /* Check the cache first.  */
   1441   for (sym = *symcache_p; sym; sym = next)
   1442     {
   1443       next = sym->next;
   1444       free_sym_cache (sym);
   1445     }
   1446 
   1447   *symcache_p = NULL;
   1448 }
   1449 
   1450 /* Get the address of NAME, and return it in ADDRP if found.  if
   1451    MAY_ASK_GDB is false, assume symbol cache misses are failures.
   1452    Returns 1 if the symbol is found, 0 if it is not, -1 on error.  */
   1453 
   1454 int
   1455 look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb)
   1456 {
   1457   client_state &cs = get_client_state ();
   1458   char *p, *q;
   1459   int len;
   1460   struct sym_cache *sym;
   1461   struct process_info *proc;
   1462 
   1463   proc = current_process ();
   1464 
   1465   /* Check the cache first.  */
   1466   for (sym = proc->symbol_cache; sym; sym = sym->next)
   1467     if (strcmp (name, sym->name) == 0)
   1468       {
   1469 	*addrp = sym->addr;
   1470 	return 1;
   1471       }
   1472 
   1473   /* It might not be an appropriate time to look up a symbol,
   1474      e.g. while we're trying to fetch registers.  */
   1475   if (!may_ask_gdb)
   1476     return 0;
   1477 
   1478   /* Send the request.  */
   1479   strcpy (cs.own_buf, "qSymbol:");
   1480   bin2hex ((const gdb_byte *) name, cs.own_buf + strlen ("qSymbol:"),
   1481 	  strlen (name));
   1482   if (putpkt (cs.own_buf) < 0)
   1483     return -1;
   1484 
   1485   /* FIXME:  Eventually add buffer overflow checking (to getpkt?)  */
   1486   len = getpkt (cs.own_buf);
   1487   if (len < 0)
   1488     return -1;
   1489 
   1490   /* We ought to handle pretty much any packet at this point while we
   1491      wait for the qSymbol "response".  That requires re-entering the
   1492      main loop.  For now, this is an adequate approximation; allow
   1493      GDB to read from memory and handle 'v' packets (for vFile transfers)
   1494      while it figures out the address of the symbol.  */
   1495   while (1)
   1496     {
   1497       if (cs.own_buf[0] == 'm')
   1498 	{
   1499 	  CORE_ADDR mem_addr;
   1500 	  unsigned char *mem_buf;
   1501 	  unsigned int mem_len;
   1502 
   1503 	  decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len);
   1504 	  mem_buf = (unsigned char *) xmalloc (mem_len);
   1505 	  if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
   1506 	    bin2hex (mem_buf, cs.own_buf, mem_len);
   1507 	  else
   1508 	    write_enn (cs.own_buf);
   1509 	  free (mem_buf);
   1510 	  if (putpkt (cs.own_buf) < 0)
   1511 	    return -1;
   1512 	}
   1513       else if (cs.own_buf[0] == 'v')
   1514 	{
   1515 	  int new_len = -1;
   1516 	  handle_v_requests (cs.own_buf, len, &new_len);
   1517 	  if (new_len != -1)
   1518 	    putpkt_binary (cs.own_buf, new_len);
   1519 	  else
   1520 	    putpkt (cs.own_buf);
   1521 	}
   1522       else
   1523 	break;
   1524       len = getpkt (cs.own_buf);
   1525       if (len < 0)
   1526 	return -1;
   1527     }
   1528 
   1529   if (!startswith (cs.own_buf, "qSymbol:"))
   1530     {
   1531       warning ("Malformed response to qSymbol, ignoring: %s", cs.own_buf);
   1532       return -1;
   1533     }
   1534 
   1535   p = cs.own_buf + strlen ("qSymbol:");
   1536   q = p;
   1537   while (*q && *q != ':')
   1538     q++;
   1539 
   1540   /* Make sure we found a value for the symbol.  */
   1541   if (p == q || *q == '\0')
   1542     return 0;
   1543 
   1544   decode_address (addrp, p, q - p);
   1545 
   1546   /* Save the symbol in our cache.  */
   1547   sym = XNEW (struct sym_cache);
   1548   sym->name = xstrdup (name);
   1549   sym->addr = *addrp;
   1550   sym->next = proc->symbol_cache;
   1551   proc->symbol_cache = sym;
   1552 
   1553   return 1;
   1554 }
   1555 
   1556 /* Relocate an instruction to execute at a different address.  OLDLOC
   1557    is the address in the inferior memory where the instruction to
   1558    relocate is currently at.  On input, TO points to the destination
   1559    where we want the instruction to be copied (and possibly adjusted)
   1560    to.  On output, it points to one past the end of the resulting
   1561    instruction(s).  The effect of executing the instruction at TO
   1562    shall be the same as if executing it at OLDLOC.  For example, call
   1563    instructions that implicitly push the return address on the stack
   1564    should be adjusted to return to the instruction after OLDLOC;
   1565    relative branches, and other PC-relative instructions need the
   1566    offset adjusted; etc.  Returns 0 on success, -1 on failure.  */
   1567 
   1568 int
   1569 relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc)
   1570 {
   1571   client_state &cs = get_client_state ();
   1572   int len;
   1573   ULONGEST written = 0;
   1574 
   1575   /* Send the request.  */
   1576   sprintf (cs.own_buf, "qRelocInsn:%s;%s", paddress (oldloc),
   1577 	   paddress (*to));
   1578   if (putpkt (cs.own_buf) < 0)
   1579     return -1;
   1580 
   1581   /* FIXME:  Eventually add buffer overflow checking (to getpkt?)  */
   1582   len = getpkt (cs.own_buf);
   1583   if (len < 0)
   1584     return -1;
   1585 
   1586   /* We ought to handle pretty much any packet at this point while we
   1587      wait for the qRelocInsn "response".  That requires re-entering
   1588      the main loop.  For now, this is an adequate approximation; allow
   1589      GDB to access memory.  */
   1590   while (cs.own_buf[0] == 'm' || cs.own_buf[0] == 'M' || cs.own_buf[0] == 'X')
   1591     {
   1592       CORE_ADDR mem_addr;
   1593       unsigned char *mem_buf = NULL;
   1594       unsigned int mem_len;
   1595 
   1596       if (cs.own_buf[0] == 'm')
   1597 	{
   1598 	  decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len);
   1599 	  mem_buf = (unsigned char *) xmalloc (mem_len);
   1600 	  if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
   1601 	    bin2hex (mem_buf, cs.own_buf, mem_len);
   1602 	  else
   1603 	    write_enn (cs.own_buf);
   1604 	}
   1605       else if (cs.own_buf[0] == 'X')
   1606 	{
   1607 	  if (decode_X_packet (&cs.own_buf[1], len - 1, &mem_addr,
   1608 			       &mem_len, &mem_buf) < 0
   1609 	      || target_write_memory (mem_addr, mem_buf, mem_len) != 0)
   1610 	    write_enn (cs.own_buf);
   1611 	  else
   1612 	    write_ok (cs.own_buf);
   1613 	}
   1614       else
   1615 	{
   1616 	  decode_M_packet (&cs.own_buf[1], &mem_addr, &mem_len, &mem_buf);
   1617 	  if (target_write_memory (mem_addr, mem_buf, mem_len) == 0)
   1618 	    write_ok (cs.own_buf);
   1619 	  else
   1620 	    write_enn (cs.own_buf);
   1621 	}
   1622       free (mem_buf);
   1623       if (putpkt (cs.own_buf) < 0)
   1624 	return -1;
   1625       len = getpkt (cs.own_buf);
   1626       if (len < 0)
   1627 	return -1;
   1628     }
   1629 
   1630   if (cs.own_buf[0] == 'E')
   1631     {
   1632       warning ("An error occurred while relocating an instruction: %s",
   1633 	       cs.own_buf);
   1634       return -1;
   1635     }
   1636 
   1637   if (!startswith (cs.own_buf, "qRelocInsn:"))
   1638     {
   1639       warning ("Malformed response to qRelocInsn, ignoring: %s",
   1640 	       cs.own_buf);
   1641       return -1;
   1642     }
   1643 
   1644   unpack_varlen_hex (cs.own_buf + strlen ("qRelocInsn:"), &written);
   1645 
   1646   *to += written;
   1647   return 0;
   1648 }
   1649 
   1650 void
   1651 monitor_output (const char *msg)
   1652 {
   1653   int len = strlen (msg);
   1654   char *buf = (char *) xmalloc (len * 2 + 2);
   1655 
   1656   buf[0] = 'O';
   1657   bin2hex ((const gdb_byte *) msg, buf + 1, len);
   1658 
   1659   putpkt (buf);
   1660   free (buf);
   1661 }
   1662 
   1663 #endif
   1664