]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdbserver/remote-utils.cc
gdbsupport: constify some return values in print-utils.{h,cc}
[thirdparty/binutils-gdb.git] / gdbserver / remote-utils.cc
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