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