xref: /netbsd-src/external/gpl3/gdb/dist/gdbserver/remote-utils.cc (revision 7d62b00eb9ad855ffcd7da46b41e23feb5476fac)
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