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