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