Remove Debian from SECURITY.txt
[binutils-gdb.git] / gdbserver / remote-utils.cc
blob42252bad78f0dec91f887102d8a3baebb952c5ae
1 /* Remote utility routines for the remote server for GDB.
2 Copyright (C) 1986-2024 Free Software Foundation, Inc.
4 This file is part of GDB.
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.
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.
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/>. */
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/common-gdbthread.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>
67 #if USE_WIN32API
68 #include <ws2tcpip.h>
69 #endif
71 #ifndef HAVE_SOCKLEN_T
72 typedef int socklen_t;
73 #endif
75 #ifndef IN_PROCESS_AGENT
77 /* Extra value for readchar_callback. */
78 enum {
79 /* The callback is currently not scheduled. */
80 NOT_SCHEDULED = -1
83 /* Status of the readchar callback.
84 Either NOT_SCHEDULED or the callback id. */
85 static int readchar_callback = NOT_SCHEDULED;
87 static int readchar (void);
88 static void reset_readchar (void);
89 static void reschedule (void);
91 /* A cache entry for a successfully looked-up symbol. */
92 struct sym_cache
94 char *name;
95 CORE_ADDR addr;
96 struct sym_cache *next;
99 static int remote_is_stdio = 0;
101 static int remote_desc = -1;
102 static int listen_desc = -1;
104 #ifdef USE_WIN32API
105 /* gnulib wraps these as macros, undo them. */
106 # undef read
107 # undef write
109 # define read(fd, buf, len) recv (fd, (char *) buf, len, 0)
110 # define write(fd, buf, len) send (fd, (char *) buf, len, 0)
111 #endif
114 gdb_connected (void)
116 return remote_desc != -1;
119 /* Return true if the remote connection is over stdio. */
122 remote_connection_is_stdio (void)
124 return remote_is_stdio;
127 static void
128 enable_async_notification (int fd)
130 #if defined(F_SETFL) && defined (FASYNC)
131 int save_fcntl_flags;
133 save_fcntl_flags = fcntl (fd, F_GETFL, 0);
134 fcntl (fd, F_SETFL, save_fcntl_flags | FASYNC);
135 #if defined (F_SETOWN)
136 fcntl (fd, F_SETOWN, getpid ());
137 #endif
138 #endif
141 static void
142 handle_accept_event (int err, gdb_client_data client_data)
144 struct sockaddr_storage sockaddr;
145 socklen_t len = sizeof (sockaddr);
147 threads_debug_printf ("handling possible accept event");
149 remote_desc = accept (listen_desc, (struct sockaddr *) &sockaddr, &len);
150 if (remote_desc == -1)
151 perror_with_name ("Accept failed");
153 /* Enable TCP keep alive process. */
154 socklen_t tmp = 1;
155 setsockopt (remote_desc, SOL_SOCKET, SO_KEEPALIVE,
156 (char *) &tmp, sizeof (tmp));
158 /* Tell TCP not to delay small packets. This greatly speeds up
159 interactive response. */
160 tmp = 1;
161 setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY,
162 (char *) &tmp, sizeof (tmp));
164 #ifndef USE_WIN32API
165 signal (SIGPIPE, SIG_IGN); /* If we don't do this, then gdbserver simply
166 exits when the remote side dies. */
167 #endif
169 if (run_once)
171 #ifndef USE_WIN32API
172 close (listen_desc); /* No longer need this */
173 #else
174 closesocket (listen_desc); /* No longer need this */
175 #endif
178 /* Even if !RUN_ONCE no longer notice new connections. Still keep the
179 descriptor open for add_file_handler to wait for a new connection. */
180 delete_file_handler (listen_desc);
182 /* Convert IP address to string. */
183 char orig_host[GDB_NI_MAX_ADDR], orig_port[GDB_NI_MAX_PORT];
185 int r = getnameinfo ((struct sockaddr *) &sockaddr, len,
186 orig_host, sizeof (orig_host),
187 orig_port, sizeof (orig_port),
188 NI_NUMERICHOST | NI_NUMERICSERV);
190 if (r != 0)
191 fprintf (stderr, _("Could not obtain remote address: %s\n"),
192 gai_strerror (r));
193 else
194 fprintf (stderr, _("Remote debugging from host %s, port %s\n"),
195 orig_host, orig_port);
197 enable_async_notification (remote_desc);
199 /* Register the event loop handler. */
200 add_file_handler (remote_desc, handle_serial_event, NULL, "remote-net");
202 /* We have a new GDB connection now. If we were disconnected
203 tracing, there's a window where the target could report a stop
204 event to the event loop, and since we have a connection now, we'd
205 try to send vStopped notifications to GDB. But, don't do that
206 until GDB as selected all-stop/non-stop, and has queried the
207 threads' status ('?'). */
208 target_async (0);
211 /* Prepare for a later connection to a remote debugger.
212 NAME is the filename used for communication. */
214 void
215 remote_prepare (const char *name)
217 client_state &cs = get_client_state ();
218 #ifdef USE_WIN32API
219 static int winsock_initialized;
220 #endif
221 socklen_t tmp;
223 remote_is_stdio = 0;
224 if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
226 /* We need to record fact that we're using stdio sooner than the
227 call to remote_open so start_inferior knows the connection is
228 via stdio. */
229 remote_is_stdio = 1;
230 cs.transport_is_reliable = 1;
231 return;
234 struct addrinfo hint;
235 struct addrinfo *ainfo;
237 memset (&hint, 0, sizeof (hint));
238 /* Assume no prefix will be passed, therefore we should use
239 AF_UNSPEC. */
240 hint.ai_family = AF_UNSPEC;
241 hint.ai_socktype = SOCK_STREAM;
242 hint.ai_protocol = IPPROTO_TCP;
244 parsed_connection_spec parsed
245 = parse_connection_spec_without_prefix (name, &hint);
247 if (parsed.port_str.empty ())
249 cs.transport_is_reliable = 0;
250 return;
253 #ifdef USE_WIN32API
254 if (!winsock_initialized)
256 WSADATA wsad;
258 WSAStartup (MAKEWORD (1, 0), &wsad);
259 winsock_initialized = 1;
261 #endif
263 int r = getaddrinfo (parsed.host_str.c_str (), parsed.port_str.c_str (),
264 &hint, &ainfo);
266 if (r != 0)
267 error (_("%s: cannot resolve name: %s"), name, gai_strerror (r));
269 scoped_free_addrinfo freeaddrinfo (ainfo);
271 struct addrinfo *iter;
273 for (iter = ainfo; iter != NULL; iter = iter->ai_next)
275 listen_desc = gdb_socket_cloexec (iter->ai_family, iter->ai_socktype,
276 iter->ai_protocol);
278 if (listen_desc >= 0)
279 break;
282 if (iter == NULL)
283 perror_with_name ("Can't open socket");
285 /* Allow rapid reuse of this port. */
286 tmp = 1;
287 setsockopt (listen_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp,
288 sizeof (tmp));
290 switch (iter->ai_family)
292 case AF_INET:
293 ((struct sockaddr_in *) iter->ai_addr)->sin_addr.s_addr = INADDR_ANY;
294 break;
295 case AF_INET6:
296 ((struct sockaddr_in6 *) iter->ai_addr)->sin6_addr = in6addr_any;
297 break;
298 default:
299 internal_error (_("Invalid 'ai_family' %d\n"), iter->ai_family);
302 if (bind (listen_desc, iter->ai_addr, iter->ai_addrlen) != 0)
303 perror_with_name ("Can't bind address");
305 if (listen (listen_desc, 1) != 0)
306 perror_with_name ("Can't listen on socket");
308 cs.transport_is_reliable = 1;
311 /* Open a connection to a remote debugger.
312 NAME is the filename used for communication. */
314 void
315 remote_open (const char *name)
317 const char *port_str;
319 port_str = strchr (name, ':');
320 #ifdef USE_WIN32API
321 if (port_str == NULL)
322 error ("Only HOST:PORT is supported on this platform.");
323 #endif
325 if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
327 fprintf (stderr, "Remote debugging using stdio\n");
329 /* Use stdin as the handle of the connection.
330 We only select on reads, for example. */
331 remote_desc = fileno (stdin);
333 enable_async_notification (remote_desc);
335 /* Register the event loop handler. */
336 add_file_handler (remote_desc, handle_serial_event, NULL, "remote-stdio");
338 #ifndef USE_WIN32API
339 else if (port_str == NULL)
341 struct stat statbuf;
343 if (stat (name, &statbuf) == 0
344 && (S_ISCHR (statbuf.st_mode) || S_ISFIFO (statbuf.st_mode)))
345 remote_desc = open (name, O_RDWR);
346 else
348 errno = EINVAL;
349 remote_desc = -1;
352 if (remote_desc < 0)
353 perror_with_name ("Could not open remote device");
355 #if HAVE_TERMIOS_H
357 struct termios termios;
358 tcgetattr (remote_desc, &termios);
360 termios.c_iflag = 0;
361 termios.c_oflag = 0;
362 termios.c_lflag = 0;
363 termios.c_cflag &= ~(CSIZE | PARENB);
364 termios.c_cflag |= CLOCAL | CS8;
365 termios.c_cc[VMIN] = 1;
366 termios.c_cc[VTIME] = 0;
368 tcsetattr (remote_desc, TCSANOW, &termios);
370 #endif
372 fprintf (stderr, "Remote debugging using %s\n", name);
374 enable_async_notification (remote_desc);
376 /* Register the event loop handler. */
377 add_file_handler (remote_desc, handle_serial_event, NULL,
378 "remote-device");
380 #endif /* USE_WIN32API */
381 else
383 char listen_port[GDB_NI_MAX_PORT];
384 struct sockaddr_storage sockaddr;
385 socklen_t len = sizeof (sockaddr);
387 if (getsockname (listen_desc, (struct sockaddr *) &sockaddr, &len) < 0)
388 perror_with_name ("Can't determine port");
390 int r = getnameinfo ((struct sockaddr *) &sockaddr, len,
391 NULL, 0,
392 listen_port, sizeof (listen_port),
393 NI_NUMERICSERV);
395 if (r != 0)
396 fprintf (stderr, _("Can't obtain port where we are listening: %s"),
397 gai_strerror (r));
398 else
399 fprintf (stderr, _("Listening on port %s\n"), listen_port);
401 fflush (stderr);
403 /* Register the event loop handler. */
404 add_file_handler (listen_desc, handle_accept_event, NULL,
405 "remote-listen");
409 void
410 remote_close (void)
412 delete_file_handler (remote_desc);
414 disable_async_io ();
416 #ifdef USE_WIN32API
417 closesocket (remote_desc);
418 #else
419 if (! remote_connection_is_stdio ())
420 close (remote_desc);
421 #endif
422 remote_desc = -1;
424 reset_readchar ();
427 #endif
429 #ifndef IN_PROCESS_AGENT
431 void
432 decode_address (CORE_ADDR *addrp, const char *start, int len)
434 CORE_ADDR addr;
435 char ch;
436 int i;
438 addr = 0;
439 for (i = 0; i < len; i++)
441 ch = start[i];
442 addr = addr << 4;
443 addr = addr | (fromhex (ch) & 0x0f);
445 *addrp = addr;
448 const char *
449 decode_address_to_semicolon (CORE_ADDR *addrp, const char *start)
451 const char *end;
453 end = start;
454 while (*end != '\0' && *end != ';')
455 end++;
457 decode_address (addrp, start, end - start);
459 if (*end == ';')
460 end++;
461 return end;
464 #endif
466 #ifndef IN_PROCESS_AGENT
468 /* Look for a sequence of characters which can be run-length encoded.
469 If there are any, update *CSUM and *P. Otherwise, output the
470 single character. Return the number of characters consumed. */
472 static int
473 try_rle (char *buf, int remaining, unsigned char *csum, char **p)
475 int n;
477 /* Always output the character. */
478 *csum += buf[0];
479 *(*p)++ = buf[0];
481 /* Don't go past '~'. */
482 if (remaining > 97)
483 remaining = 97;
485 for (n = 1; n < remaining; n++)
486 if (buf[n] != buf[0])
487 break;
489 /* N is the index of the first character not the same as buf[0].
490 buf[0] is counted twice, so by decrementing N, we get the number
491 of characters the RLE sequence will replace. */
492 n--;
494 if (n < 3)
495 return 1;
497 /* Skip the frame characters. The manual says to skip '+' and '-'
498 also, but there's no reason to. Unfortunately these two unusable
499 characters double the encoded length of a four byte zero
500 value. */
501 while (n + 29 == '$' || n + 29 == '#')
502 n--;
504 *csum += '*';
505 *(*p)++ = '*';
506 *csum += n + 29;
507 *(*p)++ = n + 29;
509 return n + 1;
512 #endif
514 #ifndef IN_PROCESS_AGENT
516 /* Write a PTID to BUF. Returns BUF+CHARACTERS_WRITTEN. */
518 char *
519 write_ptid (char *buf, ptid_t ptid)
521 client_state &cs = get_client_state ();
522 int pid, tid;
524 if (cs.multi_process)
526 pid = ptid.pid ();
527 if (pid < 0)
528 buf += sprintf (buf, "p-%x.", -pid);
529 else
530 buf += sprintf (buf, "p%x.", pid);
532 tid = ptid.lwp ();
533 if (tid < 0)
534 buf += sprintf (buf, "-%x", -tid);
535 else
536 buf += sprintf (buf, "%x", tid);
538 return buf;
541 static ULONGEST
542 hex_or_minus_one (const char *buf, const char **obuf)
544 ULONGEST ret;
546 if (startswith (buf, "-1"))
548 ret = (ULONGEST) -1;
549 buf += 2;
551 else
552 buf = unpack_varlen_hex (buf, &ret);
554 if (obuf)
555 *obuf = buf;
557 return ret;
560 /* Extract a PTID from BUF. If non-null, OBUF is set to the to one
561 passed the last parsed char. Returns null_ptid on error. */
562 ptid_t
563 read_ptid (const char *buf, const char **obuf)
565 const char *p = buf;
566 const char *pp;
568 if (*p == 'p')
570 ULONGEST pid;
572 /* Multi-process ptid. */
573 pp = unpack_varlen_hex (p + 1, &pid);
574 if (*pp != '.')
575 error ("invalid remote ptid: %s\n", p);
577 p = pp + 1;
579 ULONGEST tid = hex_or_minus_one (p, &pp);
581 if (obuf)
582 *obuf = pp;
584 return ptid_t (pid, tid);
587 /* No multi-process. Just a tid. */
588 ULONGEST tid = hex_or_minus_one (p, &pp);
590 /* Since GDB is not sending a process id (multi-process extensions
591 are off), then there's only one process. Default to the first in
592 the list. */
593 int pid = get_first_process ()->pid;
595 if (obuf)
596 *obuf = pp;
598 return ptid_t (pid, tid);
601 /* Write COUNT bytes in BUF to the client.
602 The result is the number of bytes written or -1 if error.
603 This may return less than COUNT. */
605 static int
606 write_prim (const void *buf, int count)
608 if (remote_connection_is_stdio ())
609 return write (fileno (stdout), buf, count);
610 else
611 return write (remote_desc, buf, count);
614 /* Read COUNT bytes from the client and store in BUF.
615 The result is the number of bytes read or -1 if error.
616 This may return less than COUNT. */
618 static int
619 read_prim (void *buf, int count)
621 if (remote_connection_is_stdio ())
622 return read (fileno (stdin), buf, count);
623 else
624 return read (remote_desc, buf, count);
627 /* Send a packet to the remote machine, with error checking.
628 The data of the packet is in BUF, and the length of the
629 packet is in CNT. Returns >= 0 on success, -1 otherwise. */
631 static int
632 putpkt_binary_1 (char *buf, int cnt, int is_notif)
634 client_state &cs = get_client_state ();
635 int i;
636 unsigned char csum = 0;
637 char *buf2;
638 char *p;
639 int cc;
641 buf2 = (char *) xmalloc (strlen ("$") + cnt + strlen ("#nn") + 1);
643 /* Copy the packet into buffer BUF2, encapsulating it
644 and giving it a checksum. */
646 p = buf2;
647 if (is_notif)
648 *p++ = '%';
649 else
650 *p++ = '$';
652 for (i = 0; i < cnt;)
653 i += try_rle (buf + i, cnt - i, &csum, &p);
655 *p++ = '#';
656 *p++ = tohex ((csum >> 4) & 0xf);
657 *p++ = tohex (csum & 0xf);
659 *p = '\0';
661 /* Send it over and over until we get a positive ack. */
665 if (write_prim (buf2, p - buf2) != p - buf2)
667 perror ("putpkt(write)");
668 free (buf2);
669 return -1;
672 if (cs.noack_mode || is_notif)
674 /* Don't expect an ack then. */
675 if (is_notif)
676 remote_debug_printf ("putpkt (\"%s\"); [notif]", buf2);
677 else
678 remote_debug_printf ("putpkt (\"%s\"); [noack mode]", buf2);
680 break;
683 remote_debug_printf ("putpkt (\"%s\"); [looking for ack]", buf2);
685 cc = readchar ();
687 if (cc < 0)
689 free (buf2);
690 return -1;
693 remote_debug_printf ("[received '%c' (0x%x)]", cc, cc);
695 /* Check for an input interrupt while we're here. */
696 if (cc == '\003' && current_thread != NULL)
697 the_target->request_interrupt ();
699 while (cc != '+');
701 free (buf2);
702 return 1; /* Success! */
706 putpkt_binary (char *buf, int cnt)
708 return putpkt_binary_1 (buf, cnt, 0);
711 /* Send a packet to the remote machine, with error checking. The data
712 of the packet is in BUF, and the packet should be a NUL-terminated
713 string. Returns >= 0 on success, -1 otherwise. */
716 putpkt (char *buf)
718 return putpkt_binary (buf, strlen (buf));
722 putpkt_notif (char *buf)
724 return putpkt_binary_1 (buf, strlen (buf), 1);
727 /* Come here when we get an input interrupt from the remote side. This
728 interrupt should only be active while we are waiting for the child to do
729 something. Thus this assumes readchar:bufcnt is 0.
730 About the only thing that should come through is a ^C, which
731 will cause us to request child interruption. */
733 static void
734 input_interrupt (int unused)
736 fd_set readset;
737 struct timeval immediate = { 0, 0 };
739 /* Protect against spurious interrupts. This has been observed to
740 be a problem under NetBSD 1.4 and 1.5. */
742 FD_ZERO (&readset);
743 FD_SET (remote_desc, &readset);
744 if (select (remote_desc + 1, &readset, 0, 0, &immediate) > 0)
746 int cc;
747 char c = 0;
749 cc = read_prim (&c, 1);
751 if (cc == 0)
753 fprintf (stderr, "client connection closed\n");
754 return;
756 else if (cc != 1 || c != '\003')
758 fprintf (stderr, "input_interrupt, count = %d c = %d ", cc, c);
759 if (isprint (c))
760 fprintf (stderr, "('%c')\n", c);
761 else
762 fprintf (stderr, "('\\x%02x')\n", c & 0xff);
763 return;
766 the_target->request_interrupt ();
770 /* Check if the remote side sent us an interrupt request (^C). */
771 void
772 check_remote_input_interrupt_request (void)
774 /* This function may be called before establishing communications,
775 therefore we need to validate the remote descriptor. */
777 if (remote_desc == -1)
778 return;
780 input_interrupt (0);
783 /* Asynchronous I/O support. SIGIO must be unblocked when waiting,
784 in order to accept Control-C from the client, and must be blocked
785 when talking to the client. */
787 static void
788 block_unblock_async_io (int block)
790 #ifndef USE_WIN32API
791 sigset_t sigio_set;
793 sigemptyset (&sigio_set);
794 sigaddset (&sigio_set, SIGIO);
795 gdb_sigmask (block ? SIG_BLOCK : SIG_UNBLOCK, &sigio_set, NULL);
796 #endif
799 /* Current state of asynchronous I/O. */
800 static int async_io_enabled;
802 /* Enable asynchronous I/O. */
803 void
804 enable_async_io (void)
806 if (async_io_enabled)
807 return;
809 block_unblock_async_io (0);
811 async_io_enabled = 1;
814 /* Disable asynchronous I/O. */
815 void
816 disable_async_io (void)
818 if (!async_io_enabled)
819 return;
821 block_unblock_async_io (1);
823 async_io_enabled = 0;
826 void
827 initialize_async_io (void)
829 /* Make sure that async I/O starts blocked. */
830 async_io_enabled = 1;
831 disable_async_io ();
833 /* Install the signal handler. */
834 #ifndef USE_WIN32API
835 signal (SIGIO, input_interrupt);
836 #endif
839 /* Internal buffer used by readchar.
840 These are global to readchar because reschedule_remote needs to be
841 able to tell whether the buffer is empty. */
843 static unsigned char readchar_buf[BUFSIZ];
844 static int readchar_bufcnt = 0;
845 static unsigned char *readchar_bufp;
847 /* Returns next char from remote GDB. -1 if error. */
849 static int
850 readchar (void)
852 int ch;
854 if (readchar_bufcnt == 0)
856 readchar_bufcnt = read_prim (readchar_buf, sizeof (readchar_buf));
858 if (readchar_bufcnt <= 0)
860 if (readchar_bufcnt == 0)
862 remote_debug_printf ("readchar: Got EOF");
864 else
865 perror ("readchar");
867 return -1;
870 readchar_bufp = readchar_buf;
873 readchar_bufcnt--;
874 ch = *readchar_bufp++;
875 reschedule ();
876 return ch;
879 /* Reset the readchar state machine. */
881 static void
882 reset_readchar (void)
884 readchar_bufcnt = 0;
885 if (readchar_callback != NOT_SCHEDULED)
887 delete_timer (readchar_callback);
888 readchar_callback = NOT_SCHEDULED;
892 /* Process remaining data in readchar_buf. */
894 static void
895 process_remaining (void *context)
897 /* This is a one-shot event. */
898 readchar_callback = NOT_SCHEDULED;
900 if (readchar_bufcnt > 0)
901 handle_serial_event (0, NULL);
904 /* If there is still data in the buffer, queue another event to process it,
905 we can't sleep in select yet. */
907 static void
908 reschedule (void)
910 if (readchar_bufcnt > 0 && readchar_callback == NOT_SCHEDULED)
911 readchar_callback = create_timer (0, process_remaining, NULL);
914 /* Read a packet from the remote machine, with error checking,
915 and store it in BUF. Returns length of packet, or negative if error. */
918 getpkt (char *buf)
920 client_state &cs = get_client_state ();
921 char *bp;
922 unsigned char csum, c1, c2;
923 int c;
925 while (1)
927 csum = 0;
929 while (1)
931 c = readchar ();
933 /* The '\003' may appear before or after each packet, so
934 check for an input interrupt. */
935 if (c == '\003')
937 the_target->request_interrupt ();
938 continue;
941 if (c == '$')
942 break;
944 remote_debug_printf ("[getpkt: discarding char '%c']", c);
946 if (c < 0)
947 return -1;
950 bp = buf;
951 while (1)
953 c = readchar ();
954 if (c < 0)
955 return -1;
956 if (c == '#')
957 break;
958 *bp++ = c;
959 csum += c;
961 *bp = 0;
963 c1 = fromhex (readchar ());
964 c2 = fromhex (readchar ());
966 if (csum == (c1 << 4) + c2)
967 break;
969 if (cs.noack_mode)
971 fprintf (stderr,
972 "Bad checksum, sentsum=0x%x, csum=0x%x, "
973 "buf=%s [no-ack-mode, Bad medium?]\n",
974 (c1 << 4) + c2, csum, buf);
975 /* Not much we can do, GDB wasn't expecting an ack/nac. */
976 break;
979 fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
980 (c1 << 4) + c2, csum, buf);
981 if (write_prim ("-", 1) != 1)
982 return -1;
985 if (!cs.noack_mode)
987 remote_debug_printf ("getpkt (\"%s\"); [sending ack]", buf);
989 if (write_prim ("+", 1) != 1)
990 return -1;
992 remote_debug_printf ("[sent ack]");
994 else
995 remote_debug_printf ("getpkt (\"%s\"); [no ack sent]", buf);
997 /* The readchar above may have already read a '\003' out of the socket
998 and moved it to the local buffer. For example, when GDB sends
999 vCont;c immediately followed by interrupt (see
1000 gdb.base/interrupt-noterm.exp). As soon as we see the vCont;c, we'll
1001 resume the inferior and wait. Since we've already moved the '\003'
1002 to the local buffer, SIGIO won't help. In that case, if we don't
1003 check for interrupt after the vCont;c packet, the interrupt character
1004 would stay in the buffer unattended until after the next (unrelated)
1005 stop. */
1006 while (readchar_bufcnt > 0 && *readchar_bufp == '\003')
1008 /* Consume the interrupt character in the buffer. */
1009 readchar ();
1010 the_target->request_interrupt ();
1013 return bp - buf;
1016 void
1017 write_ok (char *buf)
1019 buf[0] = 'O';
1020 buf[1] = 'K';
1021 buf[2] = '\0';
1024 void
1025 write_enn (char *buf)
1027 /* Some day, we should define the meanings of the error codes... */
1028 buf[0] = 'E';
1029 buf[1] = '0';
1030 buf[2] = '1';
1031 buf[3] = '\0';
1034 #endif
1036 #ifndef IN_PROCESS_AGENT
1038 static char *
1039 outreg (struct regcache *regcache, int regno, char *buf)
1041 if ((regno >> 12) != 0)
1042 *buf++ = tohex ((regno >> 12) & 0xf);
1043 if ((regno >> 8) != 0)
1044 *buf++ = tohex ((regno >> 8) & 0xf);
1045 *buf++ = tohex ((regno >> 4) & 0xf);
1046 *buf++ = tohex (regno & 0xf);
1047 *buf++ = ':';
1048 collect_register_as_string (regcache, regno, buf);
1049 buf += 2 * register_size (regcache->tdesc, regno);
1050 *buf++ = ';';
1052 return buf;
1055 void
1056 prepare_resume_reply (char *buf, ptid_t ptid, const target_waitstatus &status)
1058 client_state &cs = get_client_state ();
1059 threads_debug_printf ("Writing resume reply for %s: %s",
1060 target_pid_to_str (ptid).c_str (),
1061 status.to_string ().c_str ());
1063 switch (status.kind ())
1065 case TARGET_WAITKIND_STOPPED:
1066 case TARGET_WAITKIND_FORKED:
1067 case TARGET_WAITKIND_VFORKED:
1068 case TARGET_WAITKIND_VFORK_DONE:
1069 case TARGET_WAITKIND_THREAD_CLONED:
1070 case TARGET_WAITKIND_EXECD:
1071 case TARGET_WAITKIND_THREAD_CREATED:
1072 case TARGET_WAITKIND_SYSCALL_ENTRY:
1073 case TARGET_WAITKIND_SYSCALL_RETURN:
1075 struct regcache *regcache;
1076 char *buf_start = buf;
1078 if ((status.kind () == TARGET_WAITKIND_FORKED
1079 && cs.report_fork_events)
1080 || (status.kind () == TARGET_WAITKIND_VFORKED
1081 && cs.report_vfork_events)
1082 || status.kind () == TARGET_WAITKIND_THREAD_CLONED)
1084 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1086 auto kind_remote_str = [] (target_waitkind kind)
1088 switch (kind)
1090 case TARGET_WAITKIND_FORKED:
1091 return "fork";
1092 case TARGET_WAITKIND_VFORKED:
1093 return "vfork";
1094 case TARGET_WAITKIND_THREAD_CLONED:
1095 return "clone";
1096 default:
1097 gdb_assert_not_reached ("unhandled kind");
1101 const char *event = kind_remote_str (status.kind ());
1103 sprintf (buf, "T%02x%s:", signal, event);
1104 buf += strlen (buf);
1105 buf = write_ptid (buf, status.child_ptid ());
1106 strcat (buf, ";");
1108 else if (status.kind () == TARGET_WAITKIND_VFORK_DONE
1109 && cs.report_vfork_events)
1111 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1113 sprintf (buf, "T%02xvforkdone:;", signal);
1115 else if (status.kind () == TARGET_WAITKIND_EXECD && cs.report_exec_events)
1117 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1118 const char *event = "exec";
1119 char hexified_pathname[PATH_MAX * 2];
1121 sprintf (buf, "T%02x%s:", signal, event);
1122 buf += strlen (buf);
1124 /* Encode pathname to hexified format. */
1125 bin2hex ((const gdb_byte *) status.execd_pathname (),
1126 hexified_pathname,
1127 strlen (status.execd_pathname ()));
1129 sprintf (buf, "%s;", hexified_pathname);
1130 buf += strlen (buf);
1132 else if (status.kind () == TARGET_WAITKIND_THREAD_CREATED
1133 && cs.report_thread_events)
1135 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1137 sprintf (buf, "T%02xcreate:;", signal);
1139 else if (status.kind () == TARGET_WAITKIND_SYSCALL_ENTRY
1140 || status.kind () == TARGET_WAITKIND_SYSCALL_RETURN)
1142 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1143 const char *event = (status.kind () == TARGET_WAITKIND_SYSCALL_ENTRY
1144 ? "syscall_entry" : "syscall_return");
1146 sprintf (buf, "T%02x%s:%x;", signal, event,
1147 status.syscall_number ());
1149 else
1150 sprintf (buf, "T%02x", status.sig ());
1152 if (disable_packet_T)
1154 /* This is a bit (OK, a lot) of a kludge, however, this isn't
1155 really a user feature, but exists only so GDB can use the
1156 gdbserver to test handling of the 'S' stop reply packet, so
1157 we would rather this code be as simple as possible.
1159 By this point we've started to build the 'T' stop packet,
1160 and it should look like 'Txx....' where 'x' is a hex digit.
1161 An 'S' stop packet always looks like 'Sxx', so all we do
1162 here is convert the buffer from a T packet to an S packet
1163 and the avoid adding any extra content by breaking out. */
1164 gdb_assert (buf_start[0] == 'T');
1165 gdb_assert (isxdigit (buf_start[1]));
1166 gdb_assert (isxdigit (buf_start[2]));
1167 buf_start[0] = 'S';
1168 buf_start[3] = '\0';
1169 break;
1172 buf += strlen (buf);
1174 scoped_restore_current_thread restore_thread;
1176 switch_to_thread (the_target, ptid);
1178 regcache = get_thread_regcache (current_thread, 1);
1180 if (the_target->stopped_by_watchpoint ())
1182 CORE_ADDR addr;
1183 int i;
1185 memcpy (buf, "watch:", 6);
1186 buf += 6;
1188 addr = the_target->stopped_data_address ();
1190 /* Convert each byte of the address into two hexadecimal
1191 chars. Note that we take sizeof (void *) instead of
1192 sizeof (addr); this is to avoid sending a 64-bit
1193 address to a 32-bit GDB. */
1194 for (i = sizeof (void *) * 2; i > 0; i--)
1195 *buf++ = tohex ((addr >> (i - 1) * 4) & 0xf);
1196 *buf++ = ';';
1198 else if (cs.swbreak_feature && target_stopped_by_sw_breakpoint ())
1200 sprintf (buf, "swbreak:;");
1201 buf += strlen (buf);
1203 else if (cs.hwbreak_feature && target_stopped_by_hw_breakpoint ())
1205 sprintf (buf, "hwbreak:;");
1206 buf += strlen (buf);
1209 /* Handle the expedited registers. */
1210 for (const std::string &expedited_reg :
1211 current_target_desc ()->expedite_regs)
1212 buf = outreg (regcache, find_regno (regcache->tdesc,
1213 expedited_reg.c_str ()), buf);
1214 *buf = '\0';
1216 /* Formerly, if the debugger had not used any thread features
1217 we would not burden it with a thread status response. This
1218 was for the benefit of GDB 4.13 and older. However, in
1219 recent GDB versions the check (``if (cont_thread != 0)'')
1220 does not have the desired effect because of silliness in
1221 the way that the remote protocol handles specifying a
1222 thread. Since thread support relies on qSymbol support
1223 anyway, assume GDB can handle threads. */
1225 if (using_threads && !disable_packet_Tthread)
1227 /* This if (1) ought to be unnecessary. But remote_wait
1228 in GDB will claim this event belongs to inferior_ptid
1229 if we do not specify a thread, and there's no way for
1230 gdbserver to know what inferior_ptid is. */
1231 if (1 || cs.general_thread != ptid)
1233 int core = -1;
1234 /* In non-stop, don't change the general thread behind
1235 GDB's back. */
1236 if (!non_stop)
1237 cs.general_thread = ptid;
1238 sprintf (buf, "thread:");
1239 buf += strlen (buf);
1240 buf = write_ptid (buf, ptid);
1241 strcat (buf, ";");
1242 buf += strlen (buf);
1244 core = target_core_of_thread (ptid);
1246 if (core != -1)
1248 sprintf (buf, "core:");
1249 buf += strlen (buf);
1250 sprintf (buf, "%x", core);
1251 strcat (buf, ";");
1252 buf += strlen (buf);
1257 if (current_process ()->dlls_changed)
1259 strcpy (buf, "library:;");
1260 buf += strlen (buf);
1261 current_process ()->dlls_changed = false;
1264 break;
1265 case TARGET_WAITKIND_EXITED:
1266 if (cs.multi_process)
1267 sprintf (buf, "W%x;process:%x",
1268 status.exit_status (), ptid.pid ());
1269 else
1270 sprintf (buf, "W%02x", status.exit_status ());
1271 break;
1272 case TARGET_WAITKIND_SIGNALLED:
1273 if (cs.multi_process)
1274 sprintf (buf, "X%x;process:%x",
1275 status.sig (), ptid.pid ());
1276 else
1277 sprintf (buf, "X%02x", status.sig ());
1278 break;
1279 case TARGET_WAITKIND_THREAD_EXITED:
1280 sprintf (buf, "w%x;", status.exit_status ());
1281 buf += strlen (buf);
1282 buf = write_ptid (buf, ptid);
1283 break;
1284 case TARGET_WAITKIND_NO_RESUMED:
1285 sprintf (buf, "N");
1286 break;
1287 default:
1288 error ("unhandled waitkind");
1289 break;
1293 /* See remote-utils.h. */
1295 const char *
1296 decode_m_packet_params (const char *from, CORE_ADDR *mem_addr_ptr,
1297 unsigned int *len_ptr, const char end_marker)
1299 int i = 0;
1300 char ch;
1301 *mem_addr_ptr = *len_ptr = 0;
1303 while ((ch = from[i++]) != ',')
1305 *mem_addr_ptr = *mem_addr_ptr << 4;
1306 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1309 while ((ch = from[i++]) != end_marker)
1311 *len_ptr = *len_ptr << 4;
1312 *len_ptr |= fromhex (ch) & 0x0f;
1315 return from + i;
1318 void
1319 decode_m_packet (const char *from, CORE_ADDR *mem_addr_ptr,
1320 unsigned int *len_ptr)
1322 decode_m_packet_params (from, mem_addr_ptr, len_ptr, '\0');
1325 void
1326 decode_M_packet (const char *from, CORE_ADDR *mem_addr_ptr,
1327 unsigned int *len_ptr, unsigned char **to_p)
1329 from = decode_m_packet_params (from, mem_addr_ptr, len_ptr, ':');
1331 if (*to_p == NULL)
1332 *to_p = (unsigned char *) xmalloc (*len_ptr);
1334 hex2bin (from, *to_p, *len_ptr);
1338 decode_X_packet (char *from, int packet_len, CORE_ADDR *mem_addr_ptr,
1339 unsigned int *len_ptr, unsigned char **to_p)
1341 int i = 0;
1342 char ch;
1343 *mem_addr_ptr = *len_ptr = 0;
1345 while ((ch = from[i++]) != ',')
1347 *mem_addr_ptr = *mem_addr_ptr << 4;
1348 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1351 while ((ch = from[i++]) != ':')
1353 *len_ptr = *len_ptr << 4;
1354 *len_ptr |= fromhex (ch) & 0x0f;
1357 if (*to_p == NULL)
1358 *to_p = (unsigned char *) xmalloc (*len_ptr);
1360 if (remote_unescape_input ((const gdb_byte *) &from[i], packet_len - i,
1361 *to_p, *len_ptr) != *len_ptr)
1362 return -1;
1364 return 0;
1367 /* Decode a qXfer write request. */
1370 decode_xfer_write (char *buf, int packet_len, CORE_ADDR *offset,
1371 unsigned int *len, unsigned char *data)
1373 char ch;
1374 char *b = buf;
1376 /* Extract the offset. */
1377 *offset = 0;
1378 while ((ch = *buf++) != ':')
1380 *offset = *offset << 4;
1381 *offset |= fromhex (ch) & 0x0f;
1384 /* Get encoded data. */
1385 packet_len -= buf - b;
1386 *len = remote_unescape_input ((const gdb_byte *) buf, packet_len,
1387 data, packet_len);
1388 return 0;
1391 /* Decode the parameters of a qSearch:memory packet. */
1394 decode_search_memory_packet (const char *buf, int packet_len,
1395 CORE_ADDR *start_addrp,
1396 CORE_ADDR *search_space_lenp,
1397 gdb_byte *pattern, unsigned int *pattern_lenp)
1399 const char *p = buf;
1401 p = decode_address_to_semicolon (start_addrp, p);
1402 p = decode_address_to_semicolon (search_space_lenp, p);
1403 packet_len -= p - buf;
1404 *pattern_lenp = remote_unescape_input ((const gdb_byte *) p, packet_len,
1405 pattern, packet_len);
1406 return 0;
1409 static void
1410 free_sym_cache (struct sym_cache *sym)
1412 if (sym != NULL)
1414 free (sym->name);
1415 free (sym);
1419 void
1420 clear_symbol_cache (struct sym_cache **symcache_p)
1422 struct sym_cache *sym, *next;
1424 /* Check the cache first. */
1425 for (sym = *symcache_p; sym; sym = next)
1427 next = sym->next;
1428 free_sym_cache (sym);
1431 *symcache_p = NULL;
1434 /* Get the address of NAME, and return it in ADDRP if found. if
1435 MAY_ASK_GDB is false, assume symbol cache misses are failures.
1436 Returns 1 if the symbol is found, 0 if it is not, -1 on error. */
1439 look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb)
1441 client_state &cs = get_client_state ();
1442 char *p, *q;
1443 int len;
1444 struct sym_cache *sym;
1445 struct process_info *proc;
1447 proc = current_process ();
1449 /* Check the cache first. */
1450 for (sym = proc->symbol_cache; sym; sym = sym->next)
1451 if (strcmp (name, sym->name) == 0)
1453 *addrp = sym->addr;
1454 return 1;
1457 /* It might not be an appropriate time to look up a symbol,
1458 e.g. while we're trying to fetch registers. */
1459 if (!may_ask_gdb)
1460 return 0;
1462 /* Send the request. */
1463 strcpy (cs.own_buf, "qSymbol:");
1464 bin2hex ((const gdb_byte *) name, cs.own_buf + strlen ("qSymbol:"),
1465 strlen (name));
1466 if (putpkt (cs.own_buf) < 0)
1467 return -1;
1469 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
1470 len = getpkt (cs.own_buf);
1471 if (len < 0)
1472 return -1;
1474 /* We ought to handle pretty much any packet at this point while we
1475 wait for the qSymbol "response". That requires re-entering the
1476 main loop. For now, this is an adequate approximation; allow
1477 GDB to read from memory and handle 'v' packets (for vFile transfers)
1478 while it figures out the address of the symbol. */
1479 while (1)
1481 if (cs.own_buf[0] == 'm')
1483 CORE_ADDR mem_addr;
1484 unsigned char *mem_buf;
1485 unsigned int mem_len;
1487 decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len);
1488 mem_buf = (unsigned char *) xmalloc (mem_len);
1489 if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
1490 bin2hex (mem_buf, cs.own_buf, mem_len);
1491 else
1492 write_enn (cs.own_buf);
1493 free (mem_buf);
1494 if (putpkt (cs.own_buf) < 0)
1495 return -1;
1497 else if (cs.own_buf[0] == 'v')
1499 int new_len = -1;
1500 handle_v_requests (cs.own_buf, len, &new_len);
1501 if (new_len != -1)
1502 putpkt_binary (cs.own_buf, new_len);
1503 else
1504 putpkt (cs.own_buf);
1506 else
1507 break;
1508 len = getpkt (cs.own_buf);
1509 if (len < 0)
1510 return -1;
1513 if (!startswith (cs.own_buf, "qSymbol:"))
1515 warning ("Malformed response to qSymbol, ignoring: %s", cs.own_buf);
1516 return -1;
1519 p = cs.own_buf + strlen ("qSymbol:");
1520 q = p;
1521 while (*q && *q != ':')
1522 q++;
1524 /* Make sure we found a value for the symbol. */
1525 if (p == q || *q == '\0')
1526 return 0;
1528 decode_address (addrp, p, q - p);
1530 /* Save the symbol in our cache. */
1531 sym = XNEW (struct sym_cache);
1532 sym->name = xstrdup (name);
1533 sym->addr = *addrp;
1534 sym->next = proc->symbol_cache;
1535 proc->symbol_cache = sym;
1537 return 1;
1540 /* Relocate an instruction to execute at a different address. OLDLOC
1541 is the address in the inferior memory where the instruction to
1542 relocate is currently at. On input, TO points to the destination
1543 where we want the instruction to be copied (and possibly adjusted)
1544 to. On output, it points to one past the end of the resulting
1545 instruction(s). The effect of executing the instruction at TO
1546 shall be the same as if executing it at OLDLOC. For example, call
1547 instructions that implicitly push the return address on the stack
1548 should be adjusted to return to the instruction after OLDLOC;
1549 relative branches, and other PC-relative instructions need the
1550 offset adjusted; etc. Returns 0 on success, -1 on failure. */
1553 relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc)
1555 client_state &cs = get_client_state ();
1556 int len;
1557 ULONGEST written = 0;
1559 /* Send the request. */
1560 sprintf (cs.own_buf, "qRelocInsn:%s;%s", paddress (oldloc),
1561 paddress (*to));
1562 if (putpkt (cs.own_buf) < 0)
1563 return -1;
1565 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
1566 len = getpkt (cs.own_buf);
1567 if (len < 0)
1568 return -1;
1570 /* We ought to handle pretty much any packet at this point while we
1571 wait for the qRelocInsn "response". That requires re-entering
1572 the main loop. For now, this is an adequate approximation; allow
1573 GDB to access memory. */
1574 while (cs.own_buf[0] == 'm' || cs.own_buf[0] == 'M' || cs.own_buf[0] == 'X')
1576 CORE_ADDR mem_addr;
1577 unsigned char *mem_buf = NULL;
1578 unsigned int mem_len;
1580 if (cs.own_buf[0] == 'm')
1582 decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len);
1583 mem_buf = (unsigned char *) xmalloc (mem_len);
1584 if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
1585 bin2hex (mem_buf, cs.own_buf, mem_len);
1586 else
1587 write_enn (cs.own_buf);
1589 else if (cs.own_buf[0] == 'X')
1591 if (decode_X_packet (&cs.own_buf[1], len - 1, &mem_addr,
1592 &mem_len, &mem_buf) < 0
1593 || target_write_memory (mem_addr, mem_buf, mem_len) != 0)
1594 write_enn (cs.own_buf);
1595 else
1596 write_ok (cs.own_buf);
1598 else
1600 decode_M_packet (&cs.own_buf[1], &mem_addr, &mem_len, &mem_buf);
1601 if (target_write_memory (mem_addr, mem_buf, mem_len) == 0)
1602 write_ok (cs.own_buf);
1603 else
1604 write_enn (cs.own_buf);
1606 free (mem_buf);
1607 if (putpkt (cs.own_buf) < 0)
1608 return -1;
1609 len = getpkt (cs.own_buf);
1610 if (len < 0)
1611 return -1;
1614 if (cs.own_buf[0] == 'E')
1616 warning ("An error occurred while relocating an instruction: %s",
1617 cs.own_buf);
1618 return -1;
1621 if (!startswith (cs.own_buf, "qRelocInsn:"))
1623 warning ("Malformed response to qRelocInsn, ignoring: %s",
1624 cs.own_buf);
1625 return -1;
1628 unpack_varlen_hex (cs.own_buf + strlen ("qRelocInsn:"), &written);
1630 *to += written;
1631 return 0;
1634 void
1635 monitor_output (const char *msg)
1637 int len = strlen (msg);
1638 char *buf = (char *) xmalloc (len * 2 + 2);
1640 buf[0] = 'O';
1641 bin2hex ((const gdb_byte *) msg, buf + 1, len);
1643 putpkt (buf);
1644 free (buf);
1647 #endif