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