Add translations for various sub-directories
[binutils-gdb.git] / gdbserver / remote-utils.cc
blob67225c50f81bbd6c198dea9b5a6af9189bbbaa84
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/scope-exit.h"
30 #include "gdbsupport/netstuff.h"
31 #include "gdbsupport/filestuff.h"
32 #include "gdbsupport/gdb-sigmask.h"
33 #include <ctype.h>
34 #if HAVE_SYS_IOCTL_H
35 #include <sys/ioctl.h>
36 #endif
37 #if HAVE_SYS_FILE_H
38 #include <sys/file.h>
39 #endif
40 #if HAVE_NETINET_IN_H
41 #include <netinet/in.h>
42 #endif
43 #if HAVE_SYS_SOCKET_H
44 #include <sys/socket.h>
45 #endif
46 #if HAVE_NETDB_H
47 #include <netdb.h>
48 #endif
49 #if HAVE_NETINET_TCP_H
50 #include <netinet/tcp.h>
51 #endif
52 #if HAVE_SYS_IOCTL_H
53 #include <sys/ioctl.h>
54 #endif
55 #if HAVE_SIGNAL_H
56 #include <signal.h>
57 #endif
58 #if HAVE_FCNTL_H
59 #include <fcntl.h>
60 #endif
61 #include "gdbsupport/gdb_sys_time.h"
62 #include <unistd.h>
63 #if HAVE_ARPA_INET_H
64 #include <arpa/inet.h>
65 #endif
66 #include <sys/stat.h>
68 #if USE_WIN32API
69 #include <ws2tcpip.h>
70 #endif
72 #ifndef HAVE_SOCKLEN_T
73 typedef int socklen_t;
74 #endif
76 #ifndef IN_PROCESS_AGENT
78 /* Extra value for readchar_callback. */
79 enum {
80 /* The callback is currently not scheduled. */
81 NOT_SCHEDULED = -1
84 /* Status of the readchar callback.
85 Either NOT_SCHEDULED or the callback id. */
86 static int readchar_callback = NOT_SCHEDULED;
88 static int readchar (void);
89 static void reset_readchar (void);
90 static void reschedule (void);
92 /* A cache entry for a successfully looked-up symbol. */
93 struct sym_cache
95 char *name;
96 CORE_ADDR addr;
97 struct sym_cache *next;
100 static int remote_is_stdio = 0;
102 static int remote_desc = -1;
103 static int listen_desc = -1;
105 #ifdef USE_WIN32API
106 /* gnulib wraps these as macros, undo them. */
107 # undef read
108 # undef write
110 # define read(fd, buf, len) recv (fd, (char *) buf, len, 0)
111 # define write(fd, buf, len) send (fd, (char *) buf, len, 0)
112 #endif
115 gdb_connected (void)
117 return remote_desc != -1;
120 /* Return true if the remote connection is over stdio. */
123 remote_connection_is_stdio (void)
125 return remote_is_stdio;
128 static void
129 enable_async_notification (int fd)
131 #if defined(F_SETFL) && defined (FASYNC)
132 int save_fcntl_flags;
134 save_fcntl_flags = fcntl (fd, F_GETFL, 0);
135 fcntl (fd, F_SETFL, save_fcntl_flags | FASYNC);
136 #if defined (F_SETOWN)
137 fcntl (fd, F_SETOWN, getpid ());
138 #endif
139 #endif
142 static void
143 handle_accept_event (int err, gdb_client_data client_data)
145 struct sockaddr_storage sockaddr;
146 socklen_t len = sizeof (sockaddr);
148 threads_debug_printf ("handling possible accept event");
150 remote_desc = accept (listen_desc, (struct sockaddr *) &sockaddr, &len);
151 if (remote_desc == -1)
152 perror_with_name ("Accept failed");
154 /* Enable TCP keep alive process. */
155 socklen_t tmp = 1;
156 setsockopt (remote_desc, SOL_SOCKET, SO_KEEPALIVE,
157 (char *) &tmp, sizeof (tmp));
159 /* Tell TCP not to delay small packets. This greatly speeds up
160 interactive response. */
161 tmp = 1;
162 setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY,
163 (char *) &tmp, sizeof (tmp));
165 #ifndef USE_WIN32API
166 signal (SIGPIPE, SIG_IGN); /* If we don't do this, then gdbserver simply
167 exits when the remote side dies. */
168 #endif
170 if (run_once)
172 #ifndef USE_WIN32API
173 close (listen_desc); /* No longer need this */
174 #else
175 closesocket (listen_desc); /* No longer need this */
176 #endif
179 /* Even if !RUN_ONCE no longer notice new connections. Still keep the
180 descriptor open for add_file_handler to wait for a new connection. */
181 delete_file_handler (listen_desc);
183 /* Convert IP address to string. */
184 char orig_host[GDB_NI_MAX_ADDR], orig_port[GDB_NI_MAX_PORT];
186 int r = getnameinfo ((struct sockaddr *) &sockaddr, len,
187 orig_host, sizeof (orig_host),
188 orig_port, sizeof (orig_port),
189 NI_NUMERICHOST | NI_NUMERICSERV);
191 if (r != 0)
192 fprintf (stderr, _("Could not obtain remote address: %s\n"),
193 gai_strerror (r));
194 else
195 fprintf (stderr, _("Remote debugging from host %s, port %s\n"),
196 orig_host, orig_port);
198 enable_async_notification (remote_desc);
200 /* Register the event loop handler. */
201 add_file_handler (remote_desc, handle_serial_event, NULL, "remote-net");
203 /* We have a new GDB connection now. If we were disconnected
204 tracing, there's a window where the target could report a stop
205 event to the event loop, and since we have a connection now, we'd
206 try to send vStopped notifications to GDB. But, don't do that
207 until GDB as selected all-stop/non-stop, and has queried the
208 threads' status ('?'). */
209 target_async (0);
212 /* Prepare for a later connection to a remote debugger.
213 NAME is the filename used for communication. */
215 void
216 remote_prepare (const char *name)
218 client_state &cs = get_client_state ();
219 #ifdef USE_WIN32API
220 static int winsock_initialized;
221 #endif
222 socklen_t tmp;
224 remote_is_stdio = 0;
225 if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
227 /* We need to record fact that we're using stdio sooner than the
228 call to remote_open so start_inferior knows the connection is
229 via stdio. */
230 remote_is_stdio = 1;
231 cs.transport_is_reliable = 1;
232 return;
235 struct addrinfo hint;
236 struct addrinfo *ainfo;
238 memset (&hint, 0, sizeof (hint));
239 /* Assume no prefix will be passed, therefore we should use
240 AF_UNSPEC. */
241 hint.ai_family = AF_UNSPEC;
242 hint.ai_socktype = SOCK_STREAM;
243 hint.ai_protocol = IPPROTO_TCP;
245 parsed_connection_spec parsed
246 = parse_connection_spec_without_prefix (name, &hint);
248 if (parsed.port_str.empty ())
250 cs.transport_is_reliable = 0;
251 return;
254 #ifdef USE_WIN32API
255 if (!winsock_initialized)
257 WSADATA wsad;
259 WSAStartup (MAKEWORD (1, 0), &wsad);
260 winsock_initialized = 1;
262 #endif
264 int r = getaddrinfo (parsed.host_str.c_str (), parsed.port_str.c_str (),
265 &hint, &ainfo);
267 if (r != 0)
268 error (_("%s: cannot resolve name: %s"), name, gai_strerror (r));
270 scoped_free_addrinfo freeaddrinfo (ainfo);
272 struct addrinfo *iter;
274 for (iter = ainfo; iter != NULL; iter = iter->ai_next)
276 listen_desc = gdb_socket_cloexec (iter->ai_family, iter->ai_socktype,
277 iter->ai_protocol);
279 if (listen_desc >= 0)
280 break;
283 if (iter == NULL)
284 perror_with_name ("Can't open socket");
286 /* Allow rapid reuse of this port. */
287 tmp = 1;
288 setsockopt (listen_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp,
289 sizeof (tmp));
291 switch (iter->ai_family)
293 case AF_INET:
294 ((struct sockaddr_in *) iter->ai_addr)->sin_addr.s_addr = INADDR_ANY;
295 break;
296 case AF_INET6:
297 ((struct sockaddr_in6 *) iter->ai_addr)->sin6_addr = in6addr_any;
298 break;
299 default:
300 internal_error (_("Invalid 'ai_family' %d\n"), iter->ai_family);
303 if (bind (listen_desc, iter->ai_addr, iter->ai_addrlen) != 0)
304 perror_with_name ("Can't bind address");
306 if (listen (listen_desc, 1) != 0)
307 perror_with_name ("Can't listen on socket");
309 cs.transport_is_reliable = 1;
312 /* Open a connection to a remote debugger.
313 NAME is the filename used for communication. */
315 void
316 remote_open (const char *name)
318 const char *port_str;
320 port_str = strchr (name, ':');
321 #ifdef USE_WIN32API
322 if (port_str == NULL)
323 error ("Only HOST:PORT is supported on this platform.");
324 #endif
326 if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
328 fprintf (stderr, "Remote debugging using stdio\n");
330 /* Use stdin as the handle of the connection.
331 We only select on reads, for example. */
332 remote_desc = fileno (stdin);
334 enable_async_notification (remote_desc);
336 /* Register the event loop handler. */
337 add_file_handler (remote_desc, handle_serial_event, NULL, "remote-stdio");
339 #ifndef USE_WIN32API
340 else if (port_str == NULL)
342 struct stat statbuf;
344 if (stat (name, &statbuf) == 0
345 && (S_ISCHR (statbuf.st_mode) || S_ISFIFO (statbuf.st_mode)))
346 remote_desc = open (name, O_RDWR);
347 else
349 errno = EINVAL;
350 remote_desc = -1;
353 if (remote_desc < 0)
354 perror_with_name ("Could not open remote device");
356 #if HAVE_TERMIOS_H
358 struct termios termios;
359 tcgetattr (remote_desc, &termios);
361 termios.c_iflag = 0;
362 termios.c_oflag = 0;
363 termios.c_lflag = 0;
364 termios.c_cflag &= ~(CSIZE | PARENB);
365 termios.c_cflag |= CLOCAL | CS8;
366 termios.c_cc[VMIN] = 1;
367 termios.c_cc[VTIME] = 0;
369 tcsetattr (remote_desc, TCSANOW, &termios);
371 #endif
373 fprintf (stderr, "Remote debugging using %s\n", name);
375 enable_async_notification (remote_desc);
377 /* Register the event loop handler. */
378 add_file_handler (remote_desc, handle_serial_event, NULL,
379 "remote-device");
381 #endif /* USE_WIN32API */
382 else
384 char listen_port[GDB_NI_MAX_PORT];
385 struct sockaddr_storage sockaddr;
386 socklen_t len = sizeof (sockaddr);
388 if (getsockname (listen_desc, (struct sockaddr *) &sockaddr, &len) < 0)
389 perror_with_name ("Can't determine port");
391 int r = getnameinfo ((struct sockaddr *) &sockaddr, len,
392 NULL, 0,
393 listen_port, sizeof (listen_port),
394 NI_NUMERICSERV);
396 if (r != 0)
397 fprintf (stderr, _("Can't obtain port where we are listening: %s"),
398 gai_strerror (r));
399 else
400 fprintf (stderr, _("Listening on port %s\n"), listen_port);
402 fflush (stderr);
404 /* Register the event loop handler. */
405 add_file_handler (listen_desc, handle_accept_event, NULL,
406 "remote-listen");
410 void
411 remote_close (void)
413 delete_file_handler (remote_desc);
415 disable_async_io ();
417 #ifdef USE_WIN32API
418 closesocket (remote_desc);
419 #else
420 if (! remote_connection_is_stdio ())
421 close (remote_desc);
422 #endif
423 remote_desc = -1;
425 reset_readchar ();
428 #endif
430 #ifndef IN_PROCESS_AGENT
432 void
433 decode_address (CORE_ADDR *addrp, const char *start, int len)
435 CORE_ADDR addr;
436 char ch;
437 int i;
439 addr = 0;
440 for (i = 0; i < len; i++)
442 ch = start[i];
443 addr = addr << 4;
444 addr = addr | (fromhex (ch) & 0x0f);
446 *addrp = addr;
449 const char *
450 decode_address_to_semicolon (CORE_ADDR *addrp, const char *start)
452 const char *end;
454 end = start;
455 while (*end != '\0' && *end != ';')
456 end++;
458 decode_address (addrp, start, end - start);
460 if (*end == ';')
461 end++;
462 return end;
465 #endif
467 #ifndef IN_PROCESS_AGENT
469 /* Look for a sequence of characters which can be run-length encoded.
470 If there are any, update *CSUM and *P. Otherwise, output the
471 single character. Return the number of characters consumed. */
473 static int
474 try_rle (char *buf, int remaining, unsigned char *csum, char **p)
476 int n;
478 /* Always output the character. */
479 *csum += buf[0];
480 *(*p)++ = buf[0];
482 /* Don't go past '~'. */
483 if (remaining > 97)
484 remaining = 97;
486 for (n = 1; n < remaining; n++)
487 if (buf[n] != buf[0])
488 break;
490 /* N is the index of the first character not the same as buf[0].
491 buf[0] is counted twice, so by decrementing N, we get the number
492 of characters the RLE sequence will replace. */
493 n--;
495 if (n < 3)
496 return 1;
498 /* Skip the frame characters. The manual says to skip '+' and '-'
499 also, but there's no reason to. Unfortunately these two unusable
500 characters double the encoded length of a four byte zero
501 value. */
502 while (n + 29 == '$' || n + 29 == '#')
503 n--;
505 *csum += '*';
506 *(*p)++ = '*';
507 *csum += n + 29;
508 *(*p)++ = n + 29;
510 return n + 1;
513 #endif
515 #ifndef IN_PROCESS_AGENT
517 /* Write a PTID to BUF. Returns BUF+CHARACTERS_WRITTEN. */
519 char *
520 write_ptid (char *buf, ptid_t ptid)
522 client_state &cs = get_client_state ();
523 int pid, tid;
525 if (cs.multi_process)
527 pid = ptid.pid ();
528 if (pid < 0)
529 buf += sprintf (buf, "p-%x.", -pid);
530 else
531 buf += sprintf (buf, "p%x.", pid);
533 tid = ptid.lwp ();
534 if (tid < 0)
535 buf += sprintf (buf, "-%x", -tid);
536 else
537 buf += sprintf (buf, "%x", tid);
539 return buf;
542 static ULONGEST
543 hex_or_minus_one (const char *buf, const char **obuf)
545 ULONGEST ret;
547 if (startswith (buf, "-1"))
549 ret = (ULONGEST) -1;
550 buf += 2;
552 else
553 buf = unpack_varlen_hex (buf, &ret);
555 if (obuf)
556 *obuf = buf;
558 return ret;
561 /* Extract a PTID from BUF. If non-null, OBUF is set to the to one
562 passed the last parsed char. Returns null_ptid on error. */
563 ptid_t
564 read_ptid (const char *buf, const char **obuf)
566 const char *p = buf;
567 const char *pp;
569 if (*p == 'p')
571 ULONGEST pid;
573 /* Multi-process ptid. */
574 pp = unpack_varlen_hex (p + 1, &pid);
575 if (*pp != '.')
576 error ("invalid remote ptid: %s\n", p);
578 p = pp + 1;
580 ULONGEST tid = hex_or_minus_one (p, &pp);
582 if (obuf)
583 *obuf = pp;
585 return ptid_t (pid, tid);
588 /* No multi-process. Just a tid. */
589 ULONGEST tid = hex_or_minus_one (p, &pp);
591 /* Since GDB is not sending a process id (multi-process extensions
592 are off), then there's only one process. Default to the first in
593 the list. */
594 int pid = get_first_process ()->pid;
596 if (obuf)
597 *obuf = pp;
599 return ptid_t (pid, tid);
602 /* Write COUNT bytes in BUF to the client.
603 The result is the number of bytes written or -1 if error.
604 This may return less than COUNT. */
606 static int
607 write_prim (const void *buf, int count)
609 if (remote_connection_is_stdio ())
610 return write (fileno (stdout), buf, count);
611 else
612 return write (remote_desc, buf, count);
615 /* Read COUNT bytes from the client and store in BUF.
616 The result is the number of bytes read or -1 if error.
617 This may return less than COUNT. */
619 static int
620 read_prim (void *buf, int count)
622 if (remote_connection_is_stdio ())
623 return read (fileno (stdin), buf, count);
624 else
625 return read (remote_desc, buf, count);
628 /* Send a packet to the remote machine, with error checking.
629 The data of the packet is in BUF, and the length of the
630 packet is in CNT. Returns >= 0 on success, -1 otherwise. */
632 static int
633 putpkt_binary_1 (char *buf, int cnt, int is_notif)
635 client_state &cs = get_client_state ();
636 int i;
637 unsigned char csum = 0;
638 char *buf2;
639 char *p;
640 int cc;
642 SCOPE_EXIT { suppressed_remote_debug = false; };
644 buf2 = (char *) xmalloc (strlen ("$") + cnt + strlen ("#nn") + 1);
646 /* Copy the packet into buffer BUF2, encapsulating it
647 and giving it a checksum. */
649 p = buf2;
650 if (is_notif)
651 *p++ = '%';
652 else
653 *p++ = '$';
655 for (i = 0; i < cnt;)
656 i += try_rle (buf + i, cnt - i, &csum, &p);
658 *p++ = '#';
659 *p++ = tohex ((csum >> 4) & 0xf);
660 *p++ = tohex (csum & 0xf);
662 *p = '\0';
664 /* Send it over and over until we get a positive ack. */
668 if (write_prim (buf2, p - buf2) != p - buf2)
670 perror ("putpkt(write)");
671 free (buf2);
672 return -1;
675 if (cs.noack_mode || is_notif)
677 /* Don't expect an ack then. */
678 remote_debug_printf ("putpkt (\"%s\"); [%s]",
679 (suppressed_remote_debug ? "..." : buf2),
680 (is_notif ? "notif" : "noack mode"));
682 break;
685 remote_debug_printf ("putpkt (\"%s\"); [looking for ack]",
686 (suppressed_remote_debug ? "..." : buf2));
688 cc = readchar ();
690 if (cc < 0)
692 free (buf2);
693 return -1;
696 remote_debug_printf ("[received '%c' (0x%x)]", cc, cc);
698 /* Check for an input interrupt while we're here. */
699 if (cc == '\003' && current_thread != NULL)
700 the_target->request_interrupt ();
702 while (cc != '+');
704 free (buf2);
705 return 1; /* Success! */
709 putpkt_binary (char *buf, int cnt)
711 return putpkt_binary_1 (buf, cnt, 0);
714 /* Send a packet to the remote machine, with error checking. The data
715 of the packet is in BUF, and the packet should be a NUL-terminated
716 string. Returns >= 0 on success, -1 otherwise. */
719 putpkt (char *buf)
721 return putpkt_binary (buf, strlen (buf));
725 putpkt_notif (char *buf)
727 return putpkt_binary_1 (buf, strlen (buf), 1);
730 /* Come here when we get an input interrupt from the remote side. This
731 interrupt should only be active while we are waiting for the child to do
732 something. Thus this assumes readchar:bufcnt is 0.
733 About the only thing that should come through is a ^C, which
734 will cause us to request child interruption. */
736 static void
737 input_interrupt (int unused)
739 fd_set readset;
740 struct timeval immediate = { 0, 0 };
742 /* Protect against spurious interrupts. This has been observed to
743 be a problem under NetBSD 1.4 and 1.5. */
745 FD_ZERO (&readset);
746 FD_SET (remote_desc, &readset);
747 if (select (remote_desc + 1, &readset, 0, 0, &immediate) > 0)
749 int cc;
750 char c = 0;
752 cc = read_prim (&c, 1);
754 if (cc == 0)
756 fprintf (stderr, "client connection closed\n");
757 return;
759 else if (cc != 1 || c != '\003')
761 fprintf (stderr, "input_interrupt, count = %d c = %d ", cc, c);
762 if (isprint (c))
763 fprintf (stderr, "('%c')\n", c);
764 else
765 fprintf (stderr, "('\\x%02x')\n", c & 0xff);
766 return;
769 the_target->request_interrupt ();
773 /* Check if the remote side sent us an interrupt request (^C). */
774 void
775 check_remote_input_interrupt_request (void)
777 /* This function may be called before establishing communications,
778 therefore we need to validate the remote descriptor. */
780 if (remote_desc == -1)
781 return;
783 input_interrupt (0);
786 /* Asynchronous I/O support. SIGIO must be unblocked when waiting,
787 in order to accept Control-C from the client, and must be blocked
788 when talking to the client. */
790 static void
791 block_unblock_async_io (int block)
793 #ifndef USE_WIN32API
794 sigset_t sigio_set;
796 sigemptyset (&sigio_set);
797 sigaddset (&sigio_set, SIGIO);
798 gdb_sigmask (block ? SIG_BLOCK : SIG_UNBLOCK, &sigio_set, NULL);
799 #endif
802 /* Current state of asynchronous I/O. */
803 static int async_io_enabled;
805 /* Enable asynchronous I/O. */
806 void
807 enable_async_io (void)
809 if (async_io_enabled)
810 return;
812 block_unblock_async_io (0);
814 async_io_enabled = 1;
817 /* Disable asynchronous I/O. */
818 void
819 disable_async_io (void)
821 if (!async_io_enabled)
822 return;
824 block_unblock_async_io (1);
826 async_io_enabled = 0;
829 void
830 initialize_async_io (void)
832 /* Make sure that async I/O starts blocked. */
833 async_io_enabled = 1;
834 disable_async_io ();
836 /* Install the signal handler. */
837 #ifndef USE_WIN32API
838 signal (SIGIO, input_interrupt);
839 #endif
842 /* Internal buffer used by readchar.
843 These are global to readchar because reschedule_remote needs to be
844 able to tell whether the buffer is empty. */
846 static unsigned char readchar_buf[BUFSIZ];
847 static int readchar_bufcnt = 0;
848 static unsigned char *readchar_bufp;
850 /* Returns next char from remote GDB. -1 if error. */
852 static int
853 readchar (void)
855 int ch;
857 if (readchar_bufcnt == 0)
859 readchar_bufcnt = read_prim (readchar_buf, sizeof (readchar_buf));
861 if (readchar_bufcnt <= 0)
863 if (readchar_bufcnt == 0)
865 remote_debug_printf ("readchar: Got EOF");
867 else
868 perror ("readchar");
870 return -1;
873 readchar_bufp = readchar_buf;
876 readchar_bufcnt--;
877 ch = *readchar_bufp++;
878 reschedule ();
879 return ch;
882 /* Reset the readchar state machine. */
884 static void
885 reset_readchar (void)
887 readchar_bufcnt = 0;
888 if (readchar_callback != NOT_SCHEDULED)
890 delete_timer (readchar_callback);
891 readchar_callback = NOT_SCHEDULED;
895 /* Process remaining data in readchar_buf. */
897 static void
898 process_remaining (void *context)
900 /* This is a one-shot event. */
901 readchar_callback = NOT_SCHEDULED;
903 if (readchar_bufcnt > 0)
904 handle_serial_event (0, NULL);
907 /* If there is still data in the buffer, queue another event to process it,
908 we can't sleep in select yet. */
910 static void
911 reschedule (void)
913 if (readchar_bufcnt > 0 && readchar_callback == NOT_SCHEDULED)
914 readchar_callback = create_timer (0, process_remaining, NULL);
917 /* Read a packet from the remote machine, with error checking,
918 and store it in BUF. Returns length of packet, or negative if error. */
921 getpkt (char *buf)
923 client_state &cs = get_client_state ();
924 char *bp;
925 unsigned char csum, c1, c2;
926 int c;
928 while (1)
930 csum = 0;
932 while (1)
934 c = readchar ();
936 /* The '\003' may appear before or after each packet, so
937 check for an input interrupt. */
938 if (c == '\003')
940 the_target->request_interrupt ();
941 continue;
944 if (c == '$')
945 break;
947 remote_debug_printf ("[getpkt: discarding char '%c']", c);
949 if (c < 0)
950 return -1;
953 bp = buf;
954 while (1)
956 c = readchar ();
957 if (c < 0)
958 return -1;
959 if (c == '#')
960 break;
961 *bp++ = c;
962 csum += c;
964 *bp = 0;
966 c1 = fromhex (readchar ());
967 c2 = fromhex (readchar ());
969 if (csum == (c1 << 4) + c2)
970 break;
972 if (cs.noack_mode)
974 fprintf (stderr,
975 "Bad checksum, sentsum=0x%x, csum=0x%x, "
976 "buf=%s [no-ack-mode, Bad medium?]\n",
977 (c1 << 4) + c2, csum, buf);
978 /* Not much we can do, GDB wasn't expecting an ack/nac. */
979 break;
982 fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
983 (c1 << 4) + c2, csum, buf);
984 if (write_prim ("-", 1) != 1)
985 return -1;
988 if (!cs.noack_mode)
990 remote_debug_printf ("getpkt (\"%s\"); [sending ack]", buf);
992 if (write_prim ("+", 1) != 1)
993 return -1;
995 remote_debug_printf ("[sent ack]");
997 else
998 remote_debug_printf ("getpkt (\"%s\"); [no ack sent]", buf);
1000 /* The readchar above may have already read a '\003' out of the socket
1001 and moved it to the local buffer. For example, when GDB sends
1002 vCont;c immediately followed by interrupt (see
1003 gdb.base/interrupt-noterm.exp). As soon as we see the vCont;c, we'll
1004 resume the inferior and wait. Since we've already moved the '\003'
1005 to the local buffer, SIGIO won't help. In that case, if we don't
1006 check for interrupt after the vCont;c packet, the interrupt character
1007 would stay in the buffer unattended until after the next (unrelated)
1008 stop. */
1009 while (readchar_bufcnt > 0 && *readchar_bufp == '\003')
1011 /* Consume the interrupt character in the buffer. */
1012 readchar ();
1013 the_target->request_interrupt ();
1016 return bp - buf;
1019 void
1020 write_ok (char *buf)
1022 buf[0] = 'O';
1023 buf[1] = 'K';
1024 buf[2] = '\0';
1027 void
1028 write_enn (char *buf)
1030 /* Some day, we should define the meanings of the error codes... */
1031 buf[0] = 'E';
1032 buf[1] = '0';
1033 buf[2] = '1';
1034 buf[3] = '\0';
1037 #endif
1039 #ifndef IN_PROCESS_AGENT
1041 static char *
1042 outreg (struct regcache *regcache, int regno, char *buf)
1044 if ((regno >> 12) != 0)
1045 *buf++ = tohex ((regno >> 12) & 0xf);
1046 if ((regno >> 8) != 0)
1047 *buf++ = tohex ((regno >> 8) & 0xf);
1048 *buf++ = tohex ((regno >> 4) & 0xf);
1049 *buf++ = tohex (regno & 0xf);
1050 *buf++ = ':';
1051 collect_register_as_string (regcache, regno, buf);
1052 buf += 2 * register_size (regcache->tdesc, regno);
1053 *buf++ = ';';
1055 return buf;
1058 void
1059 prepare_resume_reply (char *buf, ptid_t ptid, const target_waitstatus &status)
1061 client_state &cs = get_client_state ();
1062 threads_debug_printf ("Writing resume reply for %s: %s",
1063 target_pid_to_str (ptid).c_str (),
1064 status.to_string ().c_str ());
1066 switch (status.kind ())
1068 case TARGET_WAITKIND_STOPPED:
1069 case TARGET_WAITKIND_FORKED:
1070 case TARGET_WAITKIND_VFORKED:
1071 case TARGET_WAITKIND_VFORK_DONE:
1072 case TARGET_WAITKIND_THREAD_CLONED:
1073 case TARGET_WAITKIND_EXECD:
1074 case TARGET_WAITKIND_THREAD_CREATED:
1075 case TARGET_WAITKIND_SYSCALL_ENTRY:
1076 case TARGET_WAITKIND_SYSCALL_RETURN:
1078 struct regcache *regcache;
1079 char *buf_start = buf;
1081 if ((status.kind () == TARGET_WAITKIND_FORKED
1082 && cs.report_fork_events)
1083 || (status.kind () == TARGET_WAITKIND_VFORKED
1084 && cs.report_vfork_events)
1085 || status.kind () == TARGET_WAITKIND_THREAD_CLONED)
1087 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1089 auto kind_remote_str = [] (target_waitkind kind)
1091 switch (kind)
1093 case TARGET_WAITKIND_FORKED:
1094 return "fork";
1095 case TARGET_WAITKIND_VFORKED:
1096 return "vfork";
1097 case TARGET_WAITKIND_THREAD_CLONED:
1098 return "clone";
1099 default:
1100 gdb_assert_not_reached ("unhandled kind");
1104 const char *event = kind_remote_str (status.kind ());
1106 sprintf (buf, "T%02x%s:", signal, event);
1107 buf += strlen (buf);
1108 buf = write_ptid (buf, status.child_ptid ());
1109 strcat (buf, ";");
1111 else if (status.kind () == TARGET_WAITKIND_VFORK_DONE
1112 && cs.report_vfork_events)
1114 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1116 sprintf (buf, "T%02xvforkdone:;", signal);
1118 else if (status.kind () == TARGET_WAITKIND_EXECD && cs.report_exec_events)
1120 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1121 const char *event = "exec";
1122 char hexified_pathname[PATH_MAX * 2];
1124 sprintf (buf, "T%02x%s:", signal, event);
1125 buf += strlen (buf);
1127 /* Encode pathname to hexified format. */
1128 bin2hex ((const gdb_byte *) status.execd_pathname (),
1129 hexified_pathname,
1130 strlen (status.execd_pathname ()));
1132 sprintf (buf, "%s;", hexified_pathname);
1133 buf += strlen (buf);
1135 else if (status.kind () == TARGET_WAITKIND_THREAD_CREATED
1136 && cs.report_thread_events)
1138 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1140 sprintf (buf, "T%02xcreate:;", signal);
1142 else if (status.kind () == TARGET_WAITKIND_SYSCALL_ENTRY
1143 || status.kind () == TARGET_WAITKIND_SYSCALL_RETURN)
1145 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1146 const char *event = (status.kind () == TARGET_WAITKIND_SYSCALL_ENTRY
1147 ? "syscall_entry" : "syscall_return");
1149 sprintf (buf, "T%02x%s:%x;", signal, event,
1150 status.syscall_number ());
1152 else
1153 sprintf (buf, "T%02x", status.sig ());
1155 if (disable_packet_T)
1157 /* This is a bit (OK, a lot) of a kludge, however, this isn't
1158 really a user feature, but exists only so GDB can use the
1159 gdbserver to test handling of the 'S' stop reply packet, so
1160 we would rather this code be as simple as possible.
1162 By this point we've started to build the 'T' stop packet,
1163 and it should look like 'Txx....' where 'x' is a hex digit.
1164 An 'S' stop packet always looks like 'Sxx', so all we do
1165 here is convert the buffer from a T packet to an S packet
1166 and the avoid adding any extra content by breaking out. */
1167 gdb_assert (buf_start[0] == 'T');
1168 gdb_assert (isxdigit (buf_start[1]));
1169 gdb_assert (isxdigit (buf_start[2]));
1170 buf_start[0] = 'S';
1171 buf_start[3] = '\0';
1172 break;
1175 buf += strlen (buf);
1177 scoped_restore_current_thread restore_thread;
1179 switch_to_thread (the_target, ptid);
1181 regcache = get_thread_regcache (current_thread);
1183 if (the_target->stopped_by_watchpoint ())
1185 CORE_ADDR addr;
1186 int i;
1188 memcpy (buf, "watch:", 6);
1189 buf += 6;
1191 addr = the_target->stopped_data_address ();
1193 /* Convert each byte of the address into two hexadecimal
1194 chars. Note that we take sizeof (void *) instead of
1195 sizeof (addr); this is to avoid sending a 64-bit
1196 address to a 32-bit GDB. */
1197 for (i = sizeof (void *) * 2; i > 0; i--)
1198 *buf++ = tohex ((addr >> (i - 1) * 4) & 0xf);
1199 *buf++ = ';';
1201 else if (cs.swbreak_feature && target_stopped_by_sw_breakpoint ())
1203 sprintf (buf, "swbreak:;");
1204 buf += strlen (buf);
1206 else if (cs.hwbreak_feature && target_stopped_by_hw_breakpoint ())
1208 sprintf (buf, "hwbreak:;");
1209 buf += strlen (buf);
1212 /* Handle the expedited registers. */
1213 for (const std::string &expedited_reg :
1214 current_target_desc ()->expedite_regs)
1215 buf = outreg (regcache, find_regno (regcache->tdesc,
1216 expedited_reg.c_str ()), buf);
1217 *buf = '\0';
1219 /* Formerly, if the debugger had not used any thread features
1220 we would not burden it with a thread status response. This
1221 was for the benefit of GDB 4.13 and older. However, in
1222 recent GDB versions the check (``if (cont_thread != 0)'')
1223 does not have the desired effect because of silliness in
1224 the way that the remote protocol handles specifying a
1225 thread. Since thread support relies on qSymbol support
1226 anyway, assume GDB can handle threads. */
1228 if (using_threads && !disable_packet_Tthread)
1230 /* This if (1) ought to be unnecessary. But remote_wait
1231 in GDB will claim this event belongs to inferior_ptid
1232 if we do not specify a thread, and there's no way for
1233 gdbserver to know what inferior_ptid is. */
1234 if (1 || cs.general_thread != ptid)
1236 int core = -1;
1237 /* In non-stop, don't change the general thread behind
1238 GDB's back. */
1239 if (!non_stop)
1240 cs.general_thread = ptid;
1241 sprintf (buf, "thread:");
1242 buf += strlen (buf);
1243 buf = write_ptid (buf, ptid);
1244 strcat (buf, ";");
1245 buf += strlen (buf);
1247 core = target_core_of_thread (ptid);
1249 if (core != -1)
1251 sprintf (buf, "core:");
1252 buf += strlen (buf);
1253 sprintf (buf, "%x", core);
1254 strcat (buf, ";");
1255 buf += strlen (buf);
1260 if (current_process ()->dlls_changed)
1262 strcpy (buf, "library:;");
1263 buf += strlen (buf);
1264 current_process ()->dlls_changed = false;
1267 break;
1268 case TARGET_WAITKIND_EXITED:
1269 if (cs.multi_process)
1270 sprintf (buf, "W%x;process:%x",
1271 status.exit_status (), ptid.pid ());
1272 else
1273 sprintf (buf, "W%02x", status.exit_status ());
1274 break;
1275 case TARGET_WAITKIND_SIGNALLED:
1276 if (cs.multi_process)
1277 sprintf (buf, "X%x;process:%x",
1278 status.sig (), ptid.pid ());
1279 else
1280 sprintf (buf, "X%02x", status.sig ());
1281 break;
1282 case TARGET_WAITKIND_THREAD_EXITED:
1283 sprintf (buf, "w%x;", status.exit_status ());
1284 buf += strlen (buf);
1285 buf = write_ptid (buf, ptid);
1286 break;
1287 case TARGET_WAITKIND_NO_RESUMED:
1288 sprintf (buf, "N");
1289 break;
1290 default:
1291 error ("unhandled waitkind");
1292 break;
1296 /* See remote-utils.h. */
1298 const char *
1299 decode_m_packet_params (const char *from, CORE_ADDR *mem_addr_ptr,
1300 unsigned int *len_ptr, const char end_marker)
1302 int i = 0;
1303 char ch;
1304 *mem_addr_ptr = *len_ptr = 0;
1306 while ((ch = from[i++]) != ',')
1308 *mem_addr_ptr = *mem_addr_ptr << 4;
1309 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1312 while ((ch = from[i++]) != end_marker)
1314 *len_ptr = *len_ptr << 4;
1315 *len_ptr |= fromhex (ch) & 0x0f;
1318 return from + i;
1321 void
1322 decode_m_packet (const char *from, CORE_ADDR *mem_addr_ptr,
1323 unsigned int *len_ptr)
1325 decode_m_packet_params (from, mem_addr_ptr, len_ptr, '\0');
1328 void
1329 decode_M_packet (const char *from, CORE_ADDR *mem_addr_ptr,
1330 unsigned int *len_ptr, unsigned char **to_p)
1332 from = decode_m_packet_params (from, mem_addr_ptr, len_ptr, ':');
1334 if (*to_p == NULL)
1335 *to_p = (unsigned char *) xmalloc (*len_ptr);
1337 hex2bin (from, *to_p, *len_ptr);
1340 void
1341 decode_x_packet (const char *from, CORE_ADDR *mem_addr_ptr,
1342 unsigned int *len_ptr)
1344 decode_m_packet_params (from, mem_addr_ptr, len_ptr, '\0');
1348 decode_X_packet (char *from, int packet_len, CORE_ADDR *mem_addr_ptr,
1349 unsigned int *len_ptr, unsigned char **to_p)
1351 int i = 0;
1352 char ch;
1353 *mem_addr_ptr = *len_ptr = 0;
1355 while ((ch = from[i++]) != ',')
1357 *mem_addr_ptr = *mem_addr_ptr << 4;
1358 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1361 while ((ch = from[i++]) != ':')
1363 *len_ptr = *len_ptr << 4;
1364 *len_ptr |= fromhex (ch) & 0x0f;
1367 if (*to_p == NULL)
1368 *to_p = (unsigned char *) xmalloc (*len_ptr);
1370 if (remote_unescape_input ((const gdb_byte *) &from[i], packet_len - i,
1371 *to_p, *len_ptr) != *len_ptr)
1372 return -1;
1374 return 0;
1377 /* Decode a qXfer write request. */
1380 decode_xfer_write (char *buf, int packet_len, CORE_ADDR *offset,
1381 unsigned int *len, unsigned char *data)
1383 char ch;
1384 char *b = buf;
1386 /* Extract the offset. */
1387 *offset = 0;
1388 while ((ch = *buf++) != ':')
1390 *offset = *offset << 4;
1391 *offset |= fromhex (ch) & 0x0f;
1394 /* Get encoded data. */
1395 packet_len -= buf - b;
1396 *len = remote_unescape_input ((const gdb_byte *) buf, packet_len,
1397 data, packet_len);
1398 return 0;
1401 /* Decode the parameters of a qSearch:memory packet. */
1404 decode_search_memory_packet (const char *buf, int packet_len,
1405 CORE_ADDR *start_addrp,
1406 CORE_ADDR *search_space_lenp,
1407 gdb_byte *pattern, unsigned int *pattern_lenp)
1409 const char *p = buf;
1411 p = decode_address_to_semicolon (start_addrp, p);
1412 p = decode_address_to_semicolon (search_space_lenp, p);
1413 packet_len -= p - buf;
1414 *pattern_lenp = remote_unescape_input ((const gdb_byte *) p, packet_len,
1415 pattern, packet_len);
1416 return 0;
1419 static void
1420 free_sym_cache (struct sym_cache *sym)
1422 if (sym != NULL)
1424 free (sym->name);
1425 free (sym);
1429 void
1430 clear_symbol_cache (struct sym_cache **symcache_p)
1432 struct sym_cache *sym, *next;
1434 /* Check the cache first. */
1435 for (sym = *symcache_p; sym; sym = next)
1437 next = sym->next;
1438 free_sym_cache (sym);
1441 *symcache_p = NULL;
1444 /* Get the address of NAME, and return it in ADDRP if found. if
1445 MAY_ASK_GDB is false, assume symbol cache misses are failures.
1446 Returns 1 if the symbol is found, 0 if it is not, -1 on error. */
1449 look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb)
1451 client_state &cs = get_client_state ();
1452 char *p, *q;
1453 int len;
1454 struct sym_cache *sym;
1455 struct process_info *proc;
1457 proc = current_process ();
1459 /* Check the cache first. */
1460 for (sym = proc->symbol_cache; sym; sym = sym->next)
1461 if (strcmp (name, sym->name) == 0)
1463 *addrp = sym->addr;
1464 return 1;
1467 /* It might not be an appropriate time to look up a symbol,
1468 e.g. while we're trying to fetch registers. */
1469 if (!may_ask_gdb)
1470 return 0;
1472 /* Send the request. */
1473 strcpy (cs.own_buf, "qSymbol:");
1474 bin2hex ((const gdb_byte *) name, cs.own_buf + strlen ("qSymbol:"),
1475 strlen (name));
1476 if (putpkt (cs.own_buf) < 0)
1477 return -1;
1479 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
1480 len = getpkt (cs.own_buf);
1481 if (len < 0)
1482 return -1;
1484 /* We ought to handle pretty much any packet at this point while we
1485 wait for the qSymbol "response". That requires re-entering the
1486 main loop. For now, this is an adequate approximation; allow
1487 GDB to read from memory and handle 'v' packets (for vFile transfers)
1488 while it figures out the address of the symbol. */
1489 while (1)
1491 CORE_ADDR mem_addr;
1492 unsigned char *mem_buf;
1493 unsigned int mem_len;
1494 int new_len = -1;
1496 if (cs.own_buf[0] == 'm')
1498 decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len);
1499 mem_buf = (unsigned char *) xmalloc (mem_len);
1500 if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
1501 bin2hex (mem_buf, cs.own_buf, mem_len);
1502 else
1503 write_enn (cs.own_buf);
1504 free (mem_buf);
1505 if (putpkt (cs.own_buf) < 0)
1506 return -1;
1508 else if (cs.own_buf[0] == 'x')
1510 decode_x_packet (&cs.own_buf[1], &mem_addr, &mem_len);
1511 mem_buf = (unsigned char *) xmalloc (mem_len);
1512 if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
1514 gdb_byte *buffer = (gdb_byte *) cs.own_buf;
1515 *buffer++ = 'b';
1517 int out_len_units;
1518 new_len = remote_escape_output (mem_buf, mem_len, 1,
1519 buffer,
1520 &out_len_units,
1521 PBUFSIZ);
1522 new_len++; /* For the 'b' marker. */
1524 if (out_len_units != mem_len)
1526 write_enn (cs.own_buf);
1527 new_len = -1;
1529 else
1530 suppress_next_putpkt_log ();
1532 else
1533 write_enn (cs.own_buf);
1535 free (mem_buf);
1536 int res = ((new_len == -1)
1537 ? putpkt (cs.own_buf)
1538 : putpkt_binary (cs.own_buf, new_len));
1539 if (res < 0)
1540 return -1;
1542 else if (cs.own_buf[0] == 'v')
1544 handle_v_requests (cs.own_buf, len, &new_len);
1545 if (new_len != -1)
1546 putpkt_binary (cs.own_buf, new_len);
1547 else
1548 putpkt (cs.own_buf);
1550 else
1551 break;
1552 len = getpkt (cs.own_buf);
1553 if (len < 0)
1554 return -1;
1557 if (!startswith (cs.own_buf, "qSymbol:"))
1559 warning ("Malformed response to qSymbol, ignoring: %s", cs.own_buf);
1560 return -1;
1563 p = cs.own_buf + strlen ("qSymbol:");
1564 q = p;
1565 while (*q && *q != ':')
1566 q++;
1568 /* Make sure we found a value for the symbol. */
1569 if (p == q || *q == '\0')
1570 return 0;
1572 decode_address (addrp, p, q - p);
1574 /* Save the symbol in our cache. */
1575 sym = XNEW (struct sym_cache);
1576 sym->name = xstrdup (name);
1577 sym->addr = *addrp;
1578 sym->next = proc->symbol_cache;
1579 proc->symbol_cache = sym;
1581 return 1;
1584 /* Relocate an instruction to execute at a different address. OLDLOC
1585 is the address in the inferior memory where the instruction to
1586 relocate is currently at. On input, TO points to the destination
1587 where we want the instruction to be copied (and possibly adjusted)
1588 to. On output, it points to one past the end of the resulting
1589 instruction(s). The effect of executing the instruction at TO
1590 shall be the same as if executing it at OLDLOC. For example, call
1591 instructions that implicitly push the return address on the stack
1592 should be adjusted to return to the instruction after OLDLOC;
1593 relative branches, and other PC-relative instructions need the
1594 offset adjusted; etc. Returns 0 on success, -1 on failure. */
1597 relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc)
1599 client_state &cs = get_client_state ();
1600 int len;
1601 ULONGEST written = 0;
1603 /* Send the request. */
1604 sprintf (cs.own_buf, "qRelocInsn:%s;%s", paddress (oldloc),
1605 paddress (*to));
1606 if (putpkt (cs.own_buf) < 0)
1607 return -1;
1609 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
1610 len = getpkt (cs.own_buf);
1611 if (len < 0)
1612 return -1;
1614 /* We ought to handle pretty much any packet at this point while we
1615 wait for the qRelocInsn "response". That requires re-entering
1616 the main loop. For now, this is an adequate approximation; allow
1617 GDB to access memory. */
1618 while (cs.own_buf[0] == 'm' || cs.own_buf[0] == 'M'
1619 || cs.own_buf[0] == 'X' || cs.own_buf[0] == 'x')
1621 CORE_ADDR mem_addr;
1622 unsigned char *mem_buf = NULL;
1623 unsigned int mem_len;
1624 int new_len = -1;
1626 if (cs.own_buf[0] == 'm')
1628 decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len);
1629 mem_buf = (unsigned char *) xmalloc (mem_len);
1630 if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
1631 bin2hex (mem_buf, cs.own_buf, mem_len);
1632 else
1633 write_enn (cs.own_buf);
1635 else if (cs.own_buf[0] == 'x')
1637 decode_x_packet (&cs.own_buf[1], &mem_addr, &mem_len);
1638 mem_buf = (unsigned char *) xmalloc (mem_len);
1639 if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
1641 gdb_byte *buffer = (gdb_byte *) cs.own_buf;
1642 *buffer++ = 'b';
1644 int out_len_units;
1645 new_len = remote_escape_output (mem_buf, mem_len, 1,
1646 buffer,
1647 &out_len_units,
1648 PBUFSIZ);
1649 new_len++; /* For the 'b' marker. */
1651 if (out_len_units != mem_len)
1653 write_enn (cs.own_buf);
1654 new_len = -1;
1656 else
1657 suppress_next_putpkt_log ();
1659 else
1660 write_enn (cs.own_buf);
1662 else if (cs.own_buf[0] == 'X')
1664 if (decode_X_packet (&cs.own_buf[1], len - 1, &mem_addr,
1665 &mem_len, &mem_buf) < 0
1666 || target_write_memory (mem_addr, mem_buf, mem_len) != 0)
1667 write_enn (cs.own_buf);
1668 else
1669 write_ok (cs.own_buf);
1671 else
1673 decode_M_packet (&cs.own_buf[1], &mem_addr, &mem_len, &mem_buf);
1674 if (target_write_memory (mem_addr, mem_buf, mem_len) == 0)
1675 write_ok (cs.own_buf);
1676 else
1677 write_enn (cs.own_buf);
1679 free (mem_buf);
1681 int res = ((new_len == -1)
1682 ? putpkt (cs.own_buf)
1683 : putpkt_binary (cs.own_buf, new_len));
1684 if (res < 0)
1685 return -1;
1686 len = getpkt (cs.own_buf);
1687 if (len < 0)
1688 return -1;
1691 if (cs.own_buf[0] == 'E')
1693 warning ("An error occurred while relocating an instruction: %s",
1694 cs.own_buf);
1695 return -1;
1698 if (!startswith (cs.own_buf, "qRelocInsn:"))
1700 warning ("Malformed response to qRelocInsn, ignoring: %s",
1701 cs.own_buf);
1702 return -1;
1705 unpack_varlen_hex (cs.own_buf + strlen ("qRelocInsn:"), &written);
1707 *to += written;
1708 return 0;
1711 void
1712 monitor_output (const char *msg)
1714 int len = strlen (msg);
1715 char *buf = (char *) xmalloc (len * 2 + 2);
1717 buf[0] = 'O';
1718 bin2hex ((const gdb_byte *) msg, buf + 1, len);
1720 putpkt (buf);
1721 free (buf);
1724 #endif