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