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