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