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