gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdbserver / remote-utils.cc
1 /* Remote utility routines for the remote server for GDB.
2 Copyright (C) 1986-2020 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 #if __QNX__
72 #include <sys/iomgr.h>
73 #endif /* __QNX__ */
74
75 #ifndef HAVE_SOCKLEN_T
76 typedef int socklen_t;
77 #endif
78
79 #ifndef IN_PROCESS_AGENT
80
81 /* Extra value for readchar_callback. */
82 enum {
83 /* The callback is currently not scheduled. */
84 NOT_SCHEDULED = -1
85 };
86
87 /* Status of the readchar callback.
88 Either NOT_SCHEDULED or the callback id. */
89 static int readchar_callback = NOT_SCHEDULED;
90
91 static int readchar (void);
92 static void reset_readchar (void);
93 static void reschedule (void);
94
95 /* A cache entry for a successfully looked-up symbol. */
96 struct sym_cache
97 {
98 char *name;
99 CORE_ADDR addr;
100 struct sym_cache *next;
101 };
102
103 static int remote_is_stdio = 0;
104
105 static int remote_desc = -1;
106 static int listen_desc = -1;
107
108 #ifdef USE_WIN32API
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);
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);
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 }
381 #endif /* USE_WIN32API */
382 else
383 {
384 char listen_port[GDB_NI_MAX_PORT];
385 struct sockaddr_storage sockaddr;
386 socklen_t len = sizeof (sockaddr);
387
388 if (getsockname (listen_desc, (struct sockaddr *) &sockaddr, &len) < 0)
389 perror_with_name ("Can't determine port");
390
391 int r = getnameinfo ((struct sockaddr *) &sockaddr, len,
392 NULL, 0,
393 listen_port, sizeof (listen_port),
394 NI_NUMERICSERV);
395
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);
401
402 fflush (stderr);
403
404 /* Register the event loop handler. */
405 add_file_handler (listen_desc, handle_accept_event, NULL);
406 }
407 }
408
409 void
410 remote_close (void)
411 {
412 delete_file_handler (remote_desc);
413
414 disable_async_io ();
415
416 #ifdef USE_WIN32API
417 closesocket (remote_desc);
418 #else
419 if (! remote_connection_is_stdio ())
420 close (remote_desc);
421 #endif
422 remote_desc = -1;
423
424 reset_readchar ();
425 }
426
427 #endif
428
429 #ifndef IN_PROCESS_AGENT
430
431 void
432 decode_address (CORE_ADDR *addrp, const char *start, int len)
433 {
434 CORE_ADDR addr;
435 char ch;
436 int i;
437
438 addr = 0;
439 for (i = 0; i < len; i++)
440 {
441 ch = start[i];
442 addr = addr << 4;
443 addr = addr | (fromhex (ch) & 0x0f);
444 }
445 *addrp = addr;
446 }
447
448 const char *
449 decode_address_to_semicolon (CORE_ADDR *addrp, const char *start)
450 {
451 const char *end;
452
453 end = start;
454 while (*end != '\0' && *end != ';')
455 end++;
456
457 decode_address (addrp, start, end - start);
458
459 if (*end == ';')
460 end++;
461 return end;
462 }
463
464 #endif
465
466 #ifndef IN_PROCESS_AGENT
467
468 /* Look for a sequence of characters which can be run-length encoded.
469 If there are any, update *CSUM and *P. Otherwise, output the
470 single character. Return the number of characters consumed. */
471
472 static int
473 try_rle (char *buf, int remaining, unsigned char *csum, char **p)
474 {
475 int n;
476
477 /* Always output the character. */
478 *csum += buf[0];
479 *(*p)++ = buf[0];
480
481 /* Don't go past '~'. */
482 if (remaining > 97)
483 remaining = 97;
484
485 for (n = 1; n < remaining; n++)
486 if (buf[n] != buf[0])
487 break;
488
489 /* N is the index of the first character not the same as buf[0].
490 buf[0] is counted twice, so by decrementing N, we get the number
491 of characters the RLE sequence will replace. */
492 n--;
493
494 if (n < 3)
495 return 1;
496
497 /* Skip the frame characters. The manual says to skip '+' and '-'
498 also, but there's no reason to. Unfortunately these two unusable
499 characters double the encoded length of a four byte zero
500 value. */
501 while (n + 29 == '$' || n + 29 == '#')
502 n--;
503
504 *csum += '*';
505 *(*p)++ = '*';
506 *csum += n + 29;
507 *(*p)++ = n + 29;
508
509 return n + 1;
510 }
511
512 #endif
513
514 #ifndef IN_PROCESS_AGENT
515
516 /* Write a PTID to BUF. Returns BUF+CHARACTERS_WRITTEN. */
517
518 char *
519 write_ptid (char *buf, ptid_t ptid)
520 {
521 client_state &cs = get_client_state ();
522 int pid, tid;
523
524 if (cs.multi_process)
525 {
526 pid = ptid.pid ();
527 if (pid < 0)
528 buf += sprintf (buf, "p-%x.", -pid);
529 else
530 buf += sprintf (buf, "p%x.", pid);
531 }
532 tid = ptid.lwp ();
533 if (tid < 0)
534 buf += sprintf (buf, "-%x", -tid);
535 else
536 buf += sprintf (buf, "%x", tid);
537
538 return buf;
539 }
540
541 static ULONGEST
542 hex_or_minus_one (const char *buf, const char **obuf)
543 {
544 ULONGEST ret;
545
546 if (startswith (buf, "-1"))
547 {
548 ret = (ULONGEST) -1;
549 buf += 2;
550 }
551 else
552 buf = unpack_varlen_hex (buf, &ret);
553
554 if (obuf)
555 *obuf = buf;
556
557 return ret;
558 }
559
560 /* Extract a PTID from BUF. If non-null, OBUF is set to the to one
561 passed the last parsed char. Returns null_ptid on error. */
562 ptid_t
563 read_ptid (const char *buf, const char **obuf)
564 {
565 const char *p = buf;
566 const char *pp;
567 ULONGEST pid = 0, tid = 0;
568
569 if (*p == 'p')
570 {
571 /* Multi-process ptid. */
572 pp = unpack_varlen_hex (p + 1, &pid);
573 if (*pp != '.')
574 error ("invalid remote ptid: %s\n", p);
575
576 p = pp + 1;
577
578 tid = hex_or_minus_one (p, &pp);
579
580 if (obuf)
581 *obuf = pp;
582 return ptid_t (pid, tid, 0);
583 }
584
585 /* No multi-process. Just a tid. */
586 tid = hex_or_minus_one (p, &pp);
587
588 /* Since GDB is not sending a process id (multi-process extensions
589 are off), then there's only one process. Default to the first in
590 the list. */
591 pid = pid_of (get_first_process ());
592
593 if (obuf)
594 *obuf = pp;
595 return ptid_t (pid, tid, 0);
596 }
597
598 /* Write COUNT bytes in BUF to the client.
599 The result is the number of bytes written or -1 if error.
600 This may return less than COUNT. */
601
602 static int
603 write_prim (const void *buf, int count)
604 {
605 if (remote_connection_is_stdio ())
606 return write (fileno (stdout), buf, count);
607 else
608 return write (remote_desc, buf, count);
609 }
610
611 /* Read COUNT bytes from the client and store in BUF.
612 The result is the number of bytes read or -1 if error.
613 This may return less than COUNT. */
614
615 static int
616 read_prim (void *buf, int count)
617 {
618 if (remote_connection_is_stdio ())
619 return read (fileno (stdin), buf, count);
620 else
621 return read (remote_desc, buf, count);
622 }
623
624 /* Send a packet to the remote machine, with error checking.
625 The data of the packet is in BUF, and the length of the
626 packet is in CNT. Returns >= 0 on success, -1 otherwise. */
627
628 static int
629 putpkt_binary_1 (char *buf, int cnt, int is_notif)
630 {
631 client_state &cs = get_client_state ();
632 int i;
633 unsigned char csum = 0;
634 char *buf2;
635 char *p;
636 int cc;
637
638 buf2 = (char *) xmalloc (strlen ("$") + cnt + strlen ("#nn") + 1);
639
640 /* Copy the packet into buffer BUF2, encapsulating it
641 and giving it a checksum. */
642
643 p = buf2;
644 if (is_notif)
645 *p++ = '%';
646 else
647 *p++ = '$';
648
649 for (i = 0; i < cnt;)
650 i += try_rle (buf + i, cnt - i, &csum, &p);
651
652 *p++ = '#';
653 *p++ = tohex ((csum >> 4) & 0xf);
654 *p++ = tohex (csum & 0xf);
655
656 *p = '\0';
657
658 /* Send it over and over until we get a positive ack. */
659
660 do
661 {
662 if (write_prim (buf2, p - buf2) != p - buf2)
663 {
664 perror ("putpkt(write)");
665 free (buf2);
666 return -1;
667 }
668
669 if (cs.noack_mode || is_notif)
670 {
671 /* Don't expect an ack then. */
672 if (remote_debug)
673 {
674 if (is_notif)
675 debug_printf ("putpkt (\"%s\"); [notif]\n", buf2);
676 else
677 debug_printf ("putpkt (\"%s\"); [noack mode]\n", buf2);
678 debug_flush ();
679 }
680 break;
681 }
682
683 if (remote_debug)
684 {
685 debug_printf ("putpkt (\"%s\"); [looking for ack]\n", buf2);
686 debug_flush ();
687 }
688
689 cc = readchar ();
690
691 if (cc < 0)
692 {
693 free (buf2);
694 return -1;
695 }
696
697 if (remote_debug)
698 {
699 debug_printf ("[received '%c' (0x%x)]\n", cc, cc);
700 debug_flush ();
701 }
702
703 /* Check for an input interrupt while we're here. */
704 if (cc == '\003' && current_thread != NULL)
705 the_target->request_interrupt ();
706 }
707 while (cc != '+');
708
709 free (buf2);
710 return 1; /* Success! */
711 }
712
713 int
714 putpkt_binary (char *buf, int cnt)
715 {
716 return putpkt_binary_1 (buf, cnt, 0);
717 }
718
719 /* Send a packet to the remote machine, with error checking. The data
720 of the packet is in BUF, and the packet should be a NUL-terminated
721 string. Returns >= 0 on success, -1 otherwise. */
722
723 int
724 putpkt (char *buf)
725 {
726 return putpkt_binary (buf, strlen (buf));
727 }
728
729 int
730 putpkt_notif (char *buf)
731 {
732 return putpkt_binary_1 (buf, strlen (buf), 1);
733 }
734
735 /* Come here when we get an input interrupt from the remote side. This
736 interrupt should only be active while we are waiting for the child to do
737 something. Thus this assumes readchar:bufcnt is 0.
738 About the only thing that should come through is a ^C, which
739 will cause us to request child interruption. */
740
741 static void
742 input_interrupt (int unused)
743 {
744 fd_set readset;
745 struct timeval immediate = { 0, 0 };
746
747 /* Protect against spurious interrupts. This has been observed to
748 be a problem under NetBSD 1.4 and 1.5. */
749
750 FD_ZERO (&readset);
751 FD_SET (remote_desc, &readset);
752 if (select (remote_desc + 1, &readset, 0, 0, &immediate) > 0)
753 {
754 int cc;
755 char c = 0;
756
757 cc = read_prim (&c, 1);
758
759 if (cc == 0)
760 {
761 fprintf (stderr, "client connection closed\n");
762 return;
763 }
764 else if (cc != 1 || c != '\003')
765 {
766 fprintf (stderr, "input_interrupt, count = %d c = %d ", cc, c);
767 if (isprint (c))
768 fprintf (stderr, "('%c')\n", c);
769 else
770 fprintf (stderr, "('\\x%02x')\n", c & 0xff);
771 return;
772 }
773
774 the_target->request_interrupt ();
775 }
776 }
777
778 /* Check if the remote side sent us an interrupt request (^C). */
779 void
780 check_remote_input_interrupt_request (void)
781 {
782 /* This function may be called before establishing communications,
783 therefore we need to validate the remote descriptor. */
784
785 if (remote_desc == -1)
786 return;
787
788 input_interrupt (0);
789 }
790
791 /* Asynchronous I/O support. SIGIO must be unblocked when waiting,
792 in order to accept Control-C from the client, and must be blocked
793 when talking to the client. */
794
795 static void
796 block_unblock_async_io (int block)
797 {
798 #ifndef USE_WIN32API
799 sigset_t sigio_set;
800
801 sigemptyset (&sigio_set);
802 sigaddset (&sigio_set, SIGIO);
803 gdb_sigmask (block ? SIG_BLOCK : SIG_UNBLOCK, &sigio_set, NULL);
804 #endif
805 }
806
807 #ifdef __QNX__
808 static void
809 nto_comctrl (int enable)
810 {
811 struct sigevent event;
812
813 if (enable)
814 {
815 event.sigev_notify = SIGEV_SIGNAL_THREAD;
816 event.sigev_signo = SIGIO;
817 event.sigev_code = 0;
818 event.sigev_value.sival_ptr = NULL;
819 event.sigev_priority = -1;
820 ionotify (remote_desc, _NOTIFY_ACTION_POLLARM, _NOTIFY_COND_INPUT,
821 &event);
822 }
823 else
824 ionotify (remote_desc, _NOTIFY_ACTION_POLL, _NOTIFY_COND_INPUT, NULL);
825 }
826 #endif /* __QNX__ */
827
828
829 /* Current state of asynchronous I/O. */
830 static int async_io_enabled;
831
832 /* Enable asynchronous I/O. */
833 void
834 enable_async_io (void)
835 {
836 if (async_io_enabled)
837 return;
838
839 block_unblock_async_io (0);
840
841 async_io_enabled = 1;
842 #ifdef __QNX__
843 nto_comctrl (1);
844 #endif /* __QNX__ */
845 }
846
847 /* Disable asynchronous I/O. */
848 void
849 disable_async_io (void)
850 {
851 if (!async_io_enabled)
852 return;
853
854 block_unblock_async_io (1);
855
856 async_io_enabled = 0;
857 #ifdef __QNX__
858 nto_comctrl (0);
859 #endif /* __QNX__ */
860
861 }
862
863 void
864 initialize_async_io (void)
865 {
866 /* Make sure that async I/O starts blocked. */
867 async_io_enabled = 1;
868 disable_async_io ();
869
870 /* Install the signal handler. */
871 #ifndef USE_WIN32API
872 signal (SIGIO, input_interrupt);
873 #endif
874 }
875
876 /* Internal buffer used by readchar.
877 These are global to readchar because reschedule_remote needs to be
878 able to tell whether the buffer is empty. */
879
880 static unsigned char readchar_buf[BUFSIZ];
881 static int readchar_bufcnt = 0;
882 static unsigned char *readchar_bufp;
883
884 /* Returns next char from remote GDB. -1 if error. */
885
886 static int
887 readchar (void)
888 {
889 int ch;
890
891 if (readchar_bufcnt == 0)
892 {
893 readchar_bufcnt = read_prim (readchar_buf, sizeof (readchar_buf));
894
895 if (readchar_bufcnt <= 0)
896 {
897 if (readchar_bufcnt == 0)
898 {
899 if (remote_debug)
900 debug_printf ("readchar: Got EOF\n");
901 }
902 else
903 perror ("readchar");
904
905 return -1;
906 }
907
908 readchar_bufp = readchar_buf;
909 }
910
911 readchar_bufcnt--;
912 ch = *readchar_bufp++;
913 reschedule ();
914 return ch;
915 }
916
917 /* Reset the readchar state machine. */
918
919 static void
920 reset_readchar (void)
921 {
922 readchar_bufcnt = 0;
923 if (readchar_callback != NOT_SCHEDULED)
924 {
925 delete_timer (readchar_callback);
926 readchar_callback = NOT_SCHEDULED;
927 }
928 }
929
930 /* Process remaining data in readchar_buf. */
931
932 static void
933 process_remaining (void *context)
934 {
935 /* This is a one-shot event. */
936 readchar_callback = NOT_SCHEDULED;
937
938 if (readchar_bufcnt > 0)
939 handle_serial_event (0, NULL);
940 }
941
942 /* If there is still data in the buffer, queue another event to process it,
943 we can't sleep in select yet. */
944
945 static void
946 reschedule (void)
947 {
948 if (readchar_bufcnt > 0 && readchar_callback == NOT_SCHEDULED)
949 readchar_callback = create_timer (0, process_remaining, NULL);
950 }
951
952 /* Read a packet from the remote machine, with error checking,
953 and store it in BUF. Returns length of packet, or negative if error. */
954
955 int
956 getpkt (char *buf)
957 {
958 client_state &cs = get_client_state ();
959 char *bp;
960 unsigned char csum, c1, c2;
961 int c;
962
963 while (1)
964 {
965 csum = 0;
966
967 while (1)
968 {
969 c = readchar ();
970
971 /* The '\003' may appear before or after each packet, so
972 check for an input interrupt. */
973 if (c == '\003')
974 {
975 the_target->request_interrupt ();
976 continue;
977 }
978
979 if (c == '$')
980 break;
981 if (remote_debug)
982 {
983 debug_printf ("[getpkt: discarding char '%c']\n", c);
984 debug_flush ();
985 }
986
987 if (c < 0)
988 return -1;
989 }
990
991 bp = buf;
992 while (1)
993 {
994 c = readchar ();
995 if (c < 0)
996 return -1;
997 if (c == '#')
998 break;
999 *bp++ = c;
1000 csum += c;
1001 }
1002 *bp = 0;
1003
1004 c1 = fromhex (readchar ());
1005 c2 = fromhex (readchar ());
1006
1007 if (csum == (c1 << 4) + c2)
1008 break;
1009
1010 if (cs.noack_mode)
1011 {
1012 fprintf (stderr,
1013 "Bad checksum, sentsum=0x%x, csum=0x%x, "
1014 "buf=%s [no-ack-mode, Bad medium?]\n",
1015 (c1 << 4) + c2, csum, buf);
1016 /* Not much we can do, GDB wasn't expecting an ack/nac. */
1017 break;
1018 }
1019
1020 fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
1021 (c1 << 4) + c2, csum, buf);
1022 if (write_prim ("-", 1) != 1)
1023 return -1;
1024 }
1025
1026 if (!cs.noack_mode)
1027 {
1028 if (remote_debug)
1029 {
1030 debug_printf ("getpkt (\"%s\"); [sending ack] \n", buf);
1031 debug_flush ();
1032 }
1033
1034 if (write_prim ("+", 1) != 1)
1035 return -1;
1036
1037 if (remote_debug)
1038 {
1039 debug_printf ("[sent ack]\n");
1040 debug_flush ();
1041 }
1042 }
1043 else
1044 {
1045 if (remote_debug)
1046 {
1047 debug_printf ("getpkt (\"%s\"); [no ack sent] \n", buf);
1048 debug_flush ();
1049 }
1050 }
1051
1052 /* The readchar above may have already read a '\003' out of the socket
1053 and moved it to the local buffer. For example, when GDB sends
1054 vCont;c immediately followed by interrupt (see
1055 gdb.base/interrupt-noterm.exp). As soon as we see the vCont;c, we'll
1056 resume the inferior and wait. Since we've already moved the '\003'
1057 to the local buffer, SIGIO won't help. In that case, if we don't
1058 check for interrupt after the vCont;c packet, the interrupt character
1059 would stay in the buffer unattended until after the next (unrelated)
1060 stop. */
1061 while (readchar_bufcnt > 0 && *readchar_bufp == '\003')
1062 {
1063 /* Consume the interrupt character in the buffer. */
1064 readchar ();
1065 the_target->request_interrupt ();
1066 }
1067
1068 return bp - buf;
1069 }
1070
1071 void
1072 write_ok (char *buf)
1073 {
1074 buf[0] = 'O';
1075 buf[1] = 'K';
1076 buf[2] = '\0';
1077 }
1078
1079 void
1080 write_enn (char *buf)
1081 {
1082 /* Some day, we should define the meanings of the error codes... */
1083 buf[0] = 'E';
1084 buf[1] = '0';
1085 buf[2] = '1';
1086 buf[3] = '\0';
1087 }
1088
1089 #endif
1090
1091 #ifndef IN_PROCESS_AGENT
1092
1093 static char *
1094 outreg (struct regcache *regcache, int regno, char *buf)
1095 {
1096 if ((regno >> 12) != 0)
1097 *buf++ = tohex ((regno >> 12) & 0xf);
1098 if ((regno >> 8) != 0)
1099 *buf++ = tohex ((regno >> 8) & 0xf);
1100 *buf++ = tohex ((regno >> 4) & 0xf);
1101 *buf++ = tohex (regno & 0xf);
1102 *buf++ = ':';
1103 collect_register_as_string (regcache, regno, buf);
1104 buf += 2 * register_size (regcache->tdesc, regno);
1105 *buf++ = ';';
1106
1107 return buf;
1108 }
1109
1110 void
1111 prepare_resume_reply (char *buf, ptid_t ptid,
1112 struct target_waitstatus *status)
1113 {
1114 client_state &cs = get_client_state ();
1115 if (debug_threads)
1116 debug_printf ("Writing resume reply for %s:%d\n",
1117 target_pid_to_str (ptid), status->kind);
1118
1119 switch (status->kind)
1120 {
1121 case TARGET_WAITKIND_STOPPED:
1122 case TARGET_WAITKIND_FORKED:
1123 case TARGET_WAITKIND_VFORKED:
1124 case TARGET_WAITKIND_VFORK_DONE:
1125 case TARGET_WAITKIND_EXECD:
1126 case TARGET_WAITKIND_THREAD_CREATED:
1127 case TARGET_WAITKIND_SYSCALL_ENTRY:
1128 case TARGET_WAITKIND_SYSCALL_RETURN:
1129 {
1130 struct thread_info *saved_thread;
1131 const char **regp;
1132 struct regcache *regcache;
1133
1134 if ((status->kind == TARGET_WAITKIND_FORKED && cs.report_fork_events)
1135 || (status->kind == TARGET_WAITKIND_VFORKED
1136 && cs.report_vfork_events))
1137 {
1138 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1139 const char *event = (status->kind == TARGET_WAITKIND_FORKED
1140 ? "fork" : "vfork");
1141
1142 sprintf (buf, "T%02x%s:", signal, event);
1143 buf += strlen (buf);
1144 buf = write_ptid (buf, status->value.related_pid);
1145 strcat (buf, ";");
1146 }
1147 else if (status->kind == TARGET_WAITKIND_VFORK_DONE
1148 && cs.report_vfork_events)
1149 {
1150 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1151
1152 sprintf (buf, "T%02xvforkdone:;", signal);
1153 }
1154 else if (status->kind == TARGET_WAITKIND_EXECD && cs.report_exec_events)
1155 {
1156 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1157 const char *event = "exec";
1158 char hexified_pathname[PATH_MAX * 2];
1159
1160 sprintf (buf, "T%02x%s:", signal, event);
1161 buf += strlen (buf);
1162
1163 /* Encode pathname to hexified format. */
1164 bin2hex ((const gdb_byte *) status->value.execd_pathname,
1165 hexified_pathname,
1166 strlen (status->value.execd_pathname));
1167
1168 sprintf (buf, "%s;", hexified_pathname);
1169 xfree (status->value.execd_pathname);
1170 status->value.execd_pathname = NULL;
1171 buf += strlen (buf);
1172 }
1173 else if (status->kind == TARGET_WAITKIND_THREAD_CREATED
1174 && cs.report_thread_events)
1175 {
1176 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1177
1178 sprintf (buf, "T%02xcreate:;", signal);
1179 }
1180 else if (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY
1181 || status->kind == TARGET_WAITKIND_SYSCALL_RETURN)
1182 {
1183 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1184 const char *event = (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY
1185 ? "syscall_entry" : "syscall_return");
1186
1187 sprintf (buf, "T%02x%s:%x;", signal, event,
1188 status->value.syscall_number);
1189 }
1190 else
1191 sprintf (buf, "T%02x", status->value.sig);
1192
1193 if (disable_packet_T)
1194 {
1195 /* This is a bit (OK, a lot) of a kludge, however, this isn't
1196 really a user feature, but exists only so GDB can use the
1197 gdbserver to test handling of the 'S' stop reply packet, so
1198 we would rather this code be as simple as possible.
1199
1200 By this point we've started to build the 'T' stop packet,
1201 and it should look like 'Txx....' where 'x' is a hex digit.
1202 An 'S' stop packet always looks like 'Sxx', so all we do
1203 here is convert the buffer from a T packet to an S packet
1204 and the avoid adding any extra content by breaking out. */
1205 gdb_assert (*buf == 'T');
1206 gdb_assert (isxdigit (*(buf + 1)));
1207 gdb_assert (isxdigit (*(buf + 2)));
1208 *buf = 'S';
1209 *(buf + 3) = '\0';
1210 break;
1211 }
1212
1213 buf += strlen (buf);
1214
1215 saved_thread = current_thread;
1216
1217 switch_to_thread (the_target, ptid);
1218
1219 regp = current_target_desc ()->expedite_regs;
1220
1221 regcache = get_thread_regcache (current_thread, 1);
1222
1223 if (the_target->stopped_by_watchpoint ())
1224 {
1225 CORE_ADDR addr;
1226 int i;
1227
1228 memcpy (buf, "watch:", 6);
1229 buf += 6;
1230
1231 addr = the_target->stopped_data_address ();
1232
1233 /* Convert each byte of the address into two hexadecimal
1234 chars. Note that we take sizeof (void *) instead of
1235 sizeof (addr); this is to avoid sending a 64-bit
1236 address to a 32-bit GDB. */
1237 for (i = sizeof (void *) * 2; i > 0; i--)
1238 *buf++ = tohex ((addr >> (i - 1) * 4) & 0xf);
1239 *buf++ = ';';
1240 }
1241 else if (cs.swbreak_feature && target_stopped_by_sw_breakpoint ())
1242 {
1243 sprintf (buf, "swbreak:;");
1244 buf += strlen (buf);
1245 }
1246 else if (cs.hwbreak_feature && target_stopped_by_hw_breakpoint ())
1247 {
1248 sprintf (buf, "hwbreak:;");
1249 buf += strlen (buf);
1250 }
1251
1252 while (*regp)
1253 {
1254 buf = outreg (regcache, find_regno (regcache->tdesc, *regp), buf);
1255 regp ++;
1256 }
1257 *buf = '\0';
1258
1259 /* Formerly, if the debugger had not used any thread features
1260 we would not burden it with a thread status response. This
1261 was for the benefit of GDB 4.13 and older. However, in
1262 recent GDB versions the check (``if (cont_thread != 0)'')
1263 does not have the desired effect because of sillyness in
1264 the way that the remote protocol handles specifying a
1265 thread. Since thread support relies on qSymbol support
1266 anyway, assume GDB can handle threads. */
1267
1268 if (using_threads && !disable_packet_Tthread)
1269 {
1270 /* This if (1) ought to be unnecessary. But remote_wait
1271 in GDB will claim this event belongs to inferior_ptid
1272 if we do not specify a thread, and there's no way for
1273 gdbserver to know what inferior_ptid is. */
1274 if (1 || cs.general_thread != ptid)
1275 {
1276 int core = -1;
1277 /* In non-stop, don't change the general thread behind
1278 GDB's back. */
1279 if (!non_stop)
1280 cs.general_thread = ptid;
1281 sprintf (buf, "thread:");
1282 buf += strlen (buf);
1283 buf = write_ptid (buf, ptid);
1284 strcat (buf, ";");
1285 buf += strlen (buf);
1286
1287 core = target_core_of_thread (ptid);
1288
1289 if (core != -1)
1290 {
1291 sprintf (buf, "core:");
1292 buf += strlen (buf);
1293 sprintf (buf, "%x", core);
1294 strcat (buf, ";");
1295 buf += strlen (buf);
1296 }
1297 }
1298 }
1299
1300 if (dlls_changed)
1301 {
1302 strcpy (buf, "library:;");
1303 buf += strlen (buf);
1304 dlls_changed = 0;
1305 }
1306
1307 current_thread = saved_thread;
1308 }
1309 break;
1310 case TARGET_WAITKIND_EXITED:
1311 if (cs.multi_process)
1312 sprintf (buf, "W%x;process:%x",
1313 status->value.integer, ptid.pid ());
1314 else
1315 sprintf (buf, "W%02x", status->value.integer);
1316 break;
1317 case TARGET_WAITKIND_SIGNALLED:
1318 if (cs.multi_process)
1319 sprintf (buf, "X%x;process:%x",
1320 status->value.sig, ptid.pid ());
1321 else
1322 sprintf (buf, "X%02x", status->value.sig);
1323 break;
1324 case TARGET_WAITKIND_THREAD_EXITED:
1325 sprintf (buf, "w%x;", status->value.integer);
1326 buf += strlen (buf);
1327 buf = write_ptid (buf, ptid);
1328 break;
1329 case TARGET_WAITKIND_NO_RESUMED:
1330 sprintf (buf, "N");
1331 break;
1332 default:
1333 error ("unhandled waitkind");
1334 break;
1335 }
1336 }
1337
1338 void
1339 decode_m_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr)
1340 {
1341 int i = 0, j = 0;
1342 char ch;
1343 *mem_addr_ptr = *len_ptr = 0;
1344
1345 while ((ch = from[i++]) != ',')
1346 {
1347 *mem_addr_ptr = *mem_addr_ptr << 4;
1348 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1349 }
1350
1351 for (j = 0; j < 4; j++)
1352 {
1353 if ((ch = from[i++]) == 0)
1354 break;
1355 *len_ptr = *len_ptr << 4;
1356 *len_ptr |= fromhex (ch) & 0x0f;
1357 }
1358 }
1359
1360 void
1361 decode_M_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr,
1362 unsigned char **to_p)
1363 {
1364 int i = 0;
1365 char ch;
1366 *mem_addr_ptr = *len_ptr = 0;
1367
1368 while ((ch = from[i++]) != ',')
1369 {
1370 *mem_addr_ptr = *mem_addr_ptr << 4;
1371 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1372 }
1373
1374 while ((ch = from[i++]) != ':')
1375 {
1376 *len_ptr = *len_ptr << 4;
1377 *len_ptr |= fromhex (ch) & 0x0f;
1378 }
1379
1380 if (*to_p == NULL)
1381 *to_p = (unsigned char *) xmalloc (*len_ptr);
1382
1383 hex2bin (&from[i++], *to_p, *len_ptr);
1384 }
1385
1386 int
1387 decode_X_packet (char *from, int packet_len, CORE_ADDR *mem_addr_ptr,
1388 unsigned int *len_ptr, unsigned char **to_p)
1389 {
1390 int i = 0;
1391 char ch;
1392 *mem_addr_ptr = *len_ptr = 0;
1393
1394 while ((ch = from[i++]) != ',')
1395 {
1396 *mem_addr_ptr = *mem_addr_ptr << 4;
1397 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1398 }
1399
1400 while ((ch = from[i++]) != ':')
1401 {
1402 *len_ptr = *len_ptr << 4;
1403 *len_ptr |= fromhex (ch) & 0x0f;
1404 }
1405
1406 if (*to_p == NULL)
1407 *to_p = (unsigned char *) xmalloc (*len_ptr);
1408
1409 if (remote_unescape_input ((const gdb_byte *) &from[i], packet_len - i,
1410 *to_p, *len_ptr) != *len_ptr)
1411 return -1;
1412
1413 return 0;
1414 }
1415
1416 /* Decode a qXfer write request. */
1417
1418 int
1419 decode_xfer_write (char *buf, int packet_len, CORE_ADDR *offset,
1420 unsigned int *len, unsigned char *data)
1421 {
1422 char ch;
1423 char *b = buf;
1424
1425 /* Extract the offset. */
1426 *offset = 0;
1427 while ((ch = *buf++) != ':')
1428 {
1429 *offset = *offset << 4;
1430 *offset |= fromhex (ch) & 0x0f;
1431 }
1432
1433 /* Get encoded data. */
1434 packet_len -= buf - b;
1435 *len = remote_unescape_input ((const gdb_byte *) buf, packet_len,
1436 data, packet_len);
1437 return 0;
1438 }
1439
1440 /* Decode the parameters of a qSearch:memory packet. */
1441
1442 int
1443 decode_search_memory_packet (const char *buf, int packet_len,
1444 CORE_ADDR *start_addrp,
1445 CORE_ADDR *search_space_lenp,
1446 gdb_byte *pattern, unsigned int *pattern_lenp)
1447 {
1448 const char *p = buf;
1449
1450 p = decode_address_to_semicolon (start_addrp, p);
1451 p = decode_address_to_semicolon (search_space_lenp, p);
1452 packet_len -= p - buf;
1453 *pattern_lenp = remote_unescape_input ((const gdb_byte *) p, packet_len,
1454 pattern, packet_len);
1455 return 0;
1456 }
1457
1458 static void
1459 free_sym_cache (struct sym_cache *sym)
1460 {
1461 if (sym != NULL)
1462 {
1463 free (sym->name);
1464 free (sym);
1465 }
1466 }
1467
1468 void
1469 clear_symbol_cache (struct sym_cache **symcache_p)
1470 {
1471 struct sym_cache *sym, *next;
1472
1473 /* Check the cache first. */
1474 for (sym = *symcache_p; sym; sym = next)
1475 {
1476 next = sym->next;
1477 free_sym_cache (sym);
1478 }
1479
1480 *symcache_p = NULL;
1481 }
1482
1483 /* Get the address of NAME, and return it in ADDRP if found. if
1484 MAY_ASK_GDB is false, assume symbol cache misses are failures.
1485 Returns 1 if the symbol is found, 0 if it is not, -1 on error. */
1486
1487 int
1488 look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb)
1489 {
1490 client_state &cs = get_client_state ();
1491 char *p, *q;
1492 int len;
1493 struct sym_cache *sym;
1494 struct process_info *proc;
1495
1496 proc = current_process ();
1497
1498 /* Check the cache first. */
1499 for (sym = proc->symbol_cache; sym; sym = sym->next)
1500 if (strcmp (name, sym->name) == 0)
1501 {
1502 *addrp = sym->addr;
1503 return 1;
1504 }
1505
1506 /* It might not be an appropriate time to look up a symbol,
1507 e.g. while we're trying to fetch registers. */
1508 if (!may_ask_gdb)
1509 return 0;
1510
1511 /* Send the request. */
1512 strcpy (cs.own_buf, "qSymbol:");
1513 bin2hex ((const gdb_byte *) name, cs.own_buf + strlen ("qSymbol:"),
1514 strlen (name));
1515 if (putpkt (cs.own_buf) < 0)
1516 return -1;
1517
1518 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
1519 len = getpkt (cs.own_buf);
1520 if (len < 0)
1521 return -1;
1522
1523 /* We ought to handle pretty much any packet at this point while we
1524 wait for the qSymbol "response". That requires re-entering the
1525 main loop. For now, this is an adequate approximation; allow
1526 GDB to read from memory and handle 'v' packets (for vFile transfers)
1527 while it figures out the address of the symbol. */
1528 while (1)
1529 {
1530 if (cs.own_buf[0] == 'm')
1531 {
1532 CORE_ADDR mem_addr;
1533 unsigned char *mem_buf;
1534 unsigned int mem_len;
1535
1536 decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len);
1537 mem_buf = (unsigned char *) xmalloc (mem_len);
1538 if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
1539 bin2hex (mem_buf, cs.own_buf, mem_len);
1540 else
1541 write_enn (cs.own_buf);
1542 free (mem_buf);
1543 if (putpkt (cs.own_buf) < 0)
1544 return -1;
1545 }
1546 else if (cs.own_buf[0] == 'v')
1547 {
1548 int new_len = -1;
1549 handle_v_requests (cs.own_buf, len, &new_len);
1550 if (new_len != -1)
1551 putpkt_binary (cs.own_buf, new_len);
1552 else
1553 putpkt (cs.own_buf);
1554 }
1555 else
1556 break;
1557 len = getpkt (cs.own_buf);
1558 if (len < 0)
1559 return -1;
1560 }
1561
1562 if (!startswith (cs.own_buf, "qSymbol:"))
1563 {
1564 warning ("Malformed response to qSymbol, ignoring: %s", cs.own_buf);
1565 return -1;
1566 }
1567
1568 p = cs.own_buf + strlen ("qSymbol:");
1569 q = p;
1570 while (*q && *q != ':')
1571 q++;
1572
1573 /* Make sure we found a value for the symbol. */
1574 if (p == q || *q == '\0')
1575 return 0;
1576
1577 decode_address (addrp, p, q - p);
1578
1579 /* Save the symbol in our cache. */
1580 sym = XNEW (struct sym_cache);
1581 sym->name = xstrdup (name);
1582 sym->addr = *addrp;
1583 sym->next = proc->symbol_cache;
1584 proc->symbol_cache = sym;
1585
1586 return 1;
1587 }
1588
1589 /* Relocate an instruction to execute at a different address. OLDLOC
1590 is the address in the inferior memory where the instruction to
1591 relocate is currently at. On input, TO points to the destination
1592 where we want the instruction to be copied (and possibly adjusted)
1593 to. On output, it points to one past the end of the resulting
1594 instruction(s). The effect of executing the instruction at TO
1595 shall be the same as if executing it at OLDLOC. For example, call
1596 instructions that implicitly push the return address on the stack
1597 should be adjusted to return to the instruction after OLDLOC;
1598 relative branches, and other PC-relative instructions need the
1599 offset adjusted; etc. Returns 0 on success, -1 on failure. */
1600
1601 int
1602 relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc)
1603 {
1604 client_state &cs = get_client_state ();
1605 int len;
1606 ULONGEST written = 0;
1607
1608 /* Send the request. */
1609 sprintf (cs.own_buf, "qRelocInsn:%s;%s", paddress (oldloc),
1610 paddress (*to));
1611 if (putpkt (cs.own_buf) < 0)
1612 return -1;
1613
1614 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
1615 len = getpkt (cs.own_buf);
1616 if (len < 0)
1617 return -1;
1618
1619 /* We ought to handle pretty much any packet at this point while we
1620 wait for the qRelocInsn "response". That requires re-entering
1621 the main loop. For now, this is an adequate approximation; allow
1622 GDB to access memory. */
1623 while (cs.own_buf[0] == 'm' || cs.own_buf[0] == 'M' || cs.own_buf[0] == 'X')
1624 {
1625 CORE_ADDR mem_addr;
1626 unsigned char *mem_buf = NULL;
1627 unsigned int mem_len;
1628
1629 if (cs.own_buf[0] == 'm')
1630 {
1631 decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len);
1632 mem_buf = (unsigned char *) xmalloc (mem_len);
1633 if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
1634 bin2hex (mem_buf, cs.own_buf, mem_len);
1635 else
1636 write_enn (cs.own_buf);
1637 }
1638 else if (cs.own_buf[0] == 'X')
1639 {
1640 if (decode_X_packet (&cs.own_buf[1], len - 1, &mem_addr,
1641 &mem_len, &mem_buf) < 0
1642 || target_write_memory (mem_addr, mem_buf, mem_len) != 0)
1643 write_enn (cs.own_buf);
1644 else
1645 write_ok (cs.own_buf);
1646 }
1647 else
1648 {
1649 decode_M_packet (&cs.own_buf[1], &mem_addr, &mem_len, &mem_buf);
1650 if (target_write_memory (mem_addr, mem_buf, mem_len) == 0)
1651 write_ok (cs.own_buf);
1652 else
1653 write_enn (cs.own_buf);
1654 }
1655 free (mem_buf);
1656 if (putpkt (cs.own_buf) < 0)
1657 return -1;
1658 len = getpkt (cs.own_buf);
1659 if (len < 0)
1660 return -1;
1661 }
1662
1663 if (cs.own_buf[0] == 'E')
1664 {
1665 warning ("An error occurred while relocating an instruction: %s",
1666 cs.own_buf);
1667 return -1;
1668 }
1669
1670 if (!startswith (cs.own_buf, "qRelocInsn:"))
1671 {
1672 warning ("Malformed response to qRelocInsn, ignoring: %s",
1673 cs.own_buf);
1674 return -1;
1675 }
1676
1677 unpack_varlen_hex (cs.own_buf + strlen ("qRelocInsn:"), &written);
1678
1679 *to += written;
1680 return 0;
1681 }
1682
1683 void
1684 monitor_output (const char *msg)
1685 {
1686 int len = strlen (msg);
1687 char *buf = (char *) xmalloc (len * 2 + 2);
1688
1689 buf[0] = 'O';
1690 bin2hex ((const gdb_byte *) msg, buf + 1, len);
1691
1692 putpkt (buf);
1693 free (buf);
1694 }
1695
1696 #endif
This page took 0.065253 seconds and 4 git commands to generate.