Implement 'catch syscall' for gdbserver
[deliverable/binutils-gdb.git] / gdb / gdbserver / remote-utils.c
1 /* Remote utility routines for the remote server for GDB.
2 Copyright (C) 1986-2016 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 (char *name)
221 {
222 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 (char *name)
288 {
289 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 #ifdef USE_WIN32API
406 closesocket (remote_desc);
407 #else
408 if (! remote_connection_is_stdio ())
409 close (remote_desc);
410 #endif
411 remote_desc = INVALID_DESCRIPTOR;
412
413 reset_readchar ();
414 }
415
416 #endif
417
418 #ifndef IN_PROCESS_AGENT
419
420 void
421 decode_address (CORE_ADDR *addrp, const char *start, int len)
422 {
423 CORE_ADDR addr;
424 char ch;
425 int i;
426
427 addr = 0;
428 for (i = 0; i < len; i++)
429 {
430 ch = start[i];
431 addr = addr << 4;
432 addr = addr | (fromhex (ch) & 0x0f);
433 }
434 *addrp = addr;
435 }
436
437 const char *
438 decode_address_to_semicolon (CORE_ADDR *addrp, const char *start)
439 {
440 const char *end;
441
442 end = start;
443 while (*end != '\0' && *end != ';')
444 end++;
445
446 decode_address (addrp, start, end - start);
447
448 if (*end == ';')
449 end++;
450 return end;
451 }
452
453 #endif
454
455 #ifndef IN_PROCESS_AGENT
456
457 /* Look for a sequence of characters which can be run-length encoded.
458 If there are any, update *CSUM and *P. Otherwise, output the
459 single character. Return the number of characters consumed. */
460
461 static int
462 try_rle (char *buf, int remaining, unsigned char *csum, char **p)
463 {
464 int n;
465
466 /* Always output the character. */
467 *csum += buf[0];
468 *(*p)++ = buf[0];
469
470 /* Don't go past '~'. */
471 if (remaining > 97)
472 remaining = 97;
473
474 for (n = 1; n < remaining; n++)
475 if (buf[n] != buf[0])
476 break;
477
478 /* N is the index of the first character not the same as buf[0].
479 buf[0] is counted twice, so by decrementing N, we get the number
480 of characters the RLE sequence will replace. */
481 n--;
482
483 if (n < 3)
484 return 1;
485
486 /* Skip the frame characters. The manual says to skip '+' and '-'
487 also, but there's no reason to. Unfortunately these two unusable
488 characters double the encoded length of a four byte zero
489 value. */
490 while (n + 29 == '$' || n + 29 == '#')
491 n--;
492
493 *csum += '*';
494 *(*p)++ = '*';
495 *csum += n + 29;
496 *(*p)++ = n + 29;
497
498 return n + 1;
499 }
500
501 #endif
502
503 #ifndef IN_PROCESS_AGENT
504
505 /* Write a PTID to BUF. Returns BUF+CHARACTERS_WRITTEN. */
506
507 char *
508 write_ptid (char *buf, ptid_t ptid)
509 {
510 int pid, tid;
511
512 if (multi_process)
513 {
514 pid = ptid_get_pid (ptid);
515 if (pid < 0)
516 buf += sprintf (buf, "p-%x.", -pid);
517 else
518 buf += sprintf (buf, "p%x.", pid);
519 }
520 tid = ptid_get_lwp (ptid);
521 if (tid < 0)
522 buf += sprintf (buf, "-%x", -tid);
523 else
524 buf += sprintf (buf, "%x", tid);
525
526 return buf;
527 }
528
529 static ULONGEST
530 hex_or_minus_one (char *buf, char **obuf)
531 {
532 ULONGEST ret;
533
534 if (startswith (buf, "-1"))
535 {
536 ret = (ULONGEST) -1;
537 buf += 2;
538 }
539 else
540 buf = unpack_varlen_hex (buf, &ret);
541
542 if (obuf)
543 *obuf = buf;
544
545 return ret;
546 }
547
548 /* Extract a PTID from BUF. If non-null, OBUF is set to the to one
549 passed the last parsed char. Returns null_ptid on error. */
550 ptid_t
551 read_ptid (char *buf, char **obuf)
552 {
553 char *p = buf;
554 char *pp;
555 ULONGEST pid = 0, tid = 0;
556
557 if (*p == 'p')
558 {
559 /* Multi-process ptid. */
560 pp = unpack_varlen_hex (p + 1, &pid);
561 if (*pp != '.')
562 error ("invalid remote ptid: %s\n", p);
563
564 p = pp + 1;
565
566 tid = hex_or_minus_one (p, &pp);
567
568 if (obuf)
569 *obuf = pp;
570 return ptid_build (pid, tid, 0);
571 }
572
573 /* No multi-process. Just a tid. */
574 tid = hex_or_minus_one (p, &pp);
575
576 /* Since GDB is not sending a process id (multi-process extensions
577 are off), then there's only one process. Default to the first in
578 the list. */
579 pid = pid_of (get_first_process ());
580
581 if (obuf)
582 *obuf = pp;
583 return ptid_build (pid, tid, 0);
584 }
585
586 /* Write COUNT bytes in BUF to the client.
587 The result is the number of bytes written or -1 if error.
588 This may return less than COUNT. */
589
590 static int
591 write_prim (const void *buf, int count)
592 {
593 if (remote_connection_is_stdio ())
594 return write (fileno (stdout), buf, count);
595 else
596 return write (remote_desc, buf, count);
597 }
598
599 /* Read COUNT bytes from the client and store in BUF.
600 The result is the number of bytes read or -1 if error.
601 This may return less than COUNT. */
602
603 static int
604 read_prim (void *buf, int count)
605 {
606 if (remote_connection_is_stdio ())
607 return read (fileno (stdin), buf, count);
608 else
609 return read (remote_desc, buf, count);
610 }
611
612 /* Send a packet to the remote machine, with error checking.
613 The data of the packet is in BUF, and the length of the
614 packet is in CNT. Returns >= 0 on success, -1 otherwise. */
615
616 static int
617 putpkt_binary_1 (char *buf, int cnt, int is_notif)
618 {
619 int i;
620 unsigned char csum = 0;
621 char *buf2;
622 char *p;
623 int cc;
624
625 buf2 = (char *) xmalloc (strlen ("$") + cnt + strlen ("#nn") + 1);
626
627 /* Copy the packet into buffer BUF2, encapsulating it
628 and giving it a checksum. */
629
630 p = buf2;
631 if (is_notif)
632 *p++ = '%';
633 else
634 *p++ = '$';
635
636 for (i = 0; i < cnt;)
637 i += try_rle (buf + i, cnt - i, &csum, &p);
638
639 *p++ = '#';
640 *p++ = tohex ((csum >> 4) & 0xf);
641 *p++ = tohex (csum & 0xf);
642
643 *p = '\0';
644
645 /* Send it over and over until we get a positive ack. */
646
647 do
648 {
649 if (write_prim (buf2, p - buf2) != p - buf2)
650 {
651 perror ("putpkt(write)");
652 free (buf2);
653 return -1;
654 }
655
656 if (noack_mode || is_notif)
657 {
658 /* Don't expect an ack then. */
659 if (remote_debug)
660 {
661 if (is_notif)
662 fprintf (stderr, "putpkt (\"%s\"); [notif]\n", buf2);
663 else
664 fprintf (stderr, "putpkt (\"%s\"); [noack mode]\n", buf2);
665 fflush (stderr);
666 }
667 break;
668 }
669
670 if (remote_debug)
671 {
672 fprintf (stderr, "putpkt (\"%s\"); [looking for ack]\n", buf2);
673 fflush (stderr);
674 }
675
676 cc = readchar ();
677
678 if (cc < 0)
679 {
680 free (buf2);
681 return -1;
682 }
683
684 if (remote_debug)
685 {
686 fprintf (stderr, "[received '%c' (0x%x)]\n", cc, cc);
687 fflush (stderr);
688 }
689
690 /* Check for an input interrupt while we're here. */
691 if (cc == '\003' && current_thread != NULL)
692 (*the_target->request_interrupt) ();
693 }
694 while (cc != '+');
695
696 free (buf2);
697 return 1; /* Success! */
698 }
699
700 int
701 putpkt_binary (char *buf, int cnt)
702 {
703 return putpkt_binary_1 (buf, cnt, 0);
704 }
705
706 /* Send a packet to the remote machine, with error checking. The data
707 of the packet is in BUF, and the packet should be a NUL-terminated
708 string. Returns >= 0 on success, -1 otherwise. */
709
710 int
711 putpkt (char *buf)
712 {
713 return putpkt_binary (buf, strlen (buf));
714 }
715
716 int
717 putpkt_notif (char *buf)
718 {
719 return putpkt_binary_1 (buf, strlen (buf), 1);
720 }
721
722 /* Come here when we get an input interrupt from the remote side. This
723 interrupt should only be active while we are waiting for the child to do
724 something. Thus this assumes readchar:bufcnt is 0.
725 About the only thing that should come through is a ^C, which
726 will cause us to request child interruption. */
727
728 static void
729 input_interrupt (int unused)
730 {
731 fd_set readset;
732 struct timeval immediate = { 0, 0 };
733
734 /* Protect against spurious interrupts. This has been observed to
735 be a problem under NetBSD 1.4 and 1.5. */
736
737 FD_ZERO (&readset);
738 FD_SET (remote_desc, &readset);
739 if (select (remote_desc + 1, &readset, 0, 0, &immediate) > 0)
740 {
741 int cc;
742 char c = 0;
743
744 cc = read_prim (&c, 1);
745
746 if (cc == 0)
747 {
748 fprintf (stderr, "client connection closed\n");
749 return;
750 }
751 else if (cc != 1 || c != '\003')
752 {
753 fprintf (stderr, "input_interrupt, count = %d c = %d ", cc, c);
754 if (isprint (c))
755 fprintf (stderr, "('%c')\n", c);
756 else
757 fprintf (stderr, "('\\x%02x')\n", c & 0xff);
758 return;
759 }
760
761 (*the_target->request_interrupt) ();
762 }
763 }
764
765 /* Check if the remote side sent us an interrupt request (^C). */
766 void
767 check_remote_input_interrupt_request (void)
768 {
769 /* This function may be called before establishing communications,
770 therefore we need to validate the remote descriptor. */
771
772 if (remote_desc == INVALID_DESCRIPTOR)
773 return;
774
775 input_interrupt (0);
776 }
777
778 /* Asynchronous I/O support. SIGIO must be enabled when waiting, in order to
779 accept Control-C from the client, and must be disabled when talking to
780 the client. */
781
782 static void
783 unblock_async_io (void)
784 {
785 #ifndef USE_WIN32API
786 sigset_t sigio_set;
787
788 sigemptyset (&sigio_set);
789 sigaddset (&sigio_set, SIGIO);
790 sigprocmask (SIG_UNBLOCK, &sigio_set, NULL);
791 #endif
792 }
793
794 #ifdef __QNX__
795 static void
796 nto_comctrl (int enable)
797 {
798 struct sigevent event;
799
800 if (enable)
801 {
802 event.sigev_notify = SIGEV_SIGNAL_THREAD;
803 event.sigev_signo = SIGIO;
804 event.sigev_code = 0;
805 event.sigev_value.sival_ptr = NULL;
806 event.sigev_priority = -1;
807 ionotify (remote_desc, _NOTIFY_ACTION_POLLARM, _NOTIFY_COND_INPUT,
808 &event);
809 }
810 else
811 ionotify (remote_desc, _NOTIFY_ACTION_POLL, _NOTIFY_COND_INPUT, NULL);
812 }
813 #endif /* __QNX__ */
814
815
816 /* Current state of asynchronous I/O. */
817 static int async_io_enabled;
818
819 /* Enable asynchronous I/O. */
820 void
821 enable_async_io (void)
822 {
823 if (async_io_enabled)
824 return;
825
826 #ifndef USE_WIN32API
827 signal (SIGIO, input_interrupt);
828 #endif
829 async_io_enabled = 1;
830 #ifdef __QNX__
831 nto_comctrl (1);
832 #endif /* __QNX__ */
833 }
834
835 /* Disable asynchronous I/O. */
836 void
837 disable_async_io (void)
838 {
839 if (!async_io_enabled)
840 return;
841
842 #ifndef USE_WIN32API
843 signal (SIGIO, SIG_IGN);
844 #endif
845 async_io_enabled = 0;
846 #ifdef __QNX__
847 nto_comctrl (0);
848 #endif /* __QNX__ */
849
850 }
851
852 void
853 initialize_async_io (void)
854 {
855 /* Make sure that async I/O starts disabled. */
856 async_io_enabled = 1;
857 disable_async_io ();
858
859 /* Make sure the signal is unblocked. */
860 unblock_async_io ();
861 }
862
863 /* Internal buffer used by readchar.
864 These are global to readchar because reschedule_remote needs to be
865 able to tell whether the buffer is empty. */
866
867 static unsigned char readchar_buf[BUFSIZ];
868 static int readchar_bufcnt = 0;
869 static unsigned char *readchar_bufp;
870
871 /* Returns next char from remote GDB. -1 if error. */
872
873 static int
874 readchar (void)
875 {
876 int ch;
877
878 if (readchar_bufcnt == 0)
879 {
880 readchar_bufcnt = read_prim (readchar_buf, sizeof (readchar_buf));
881
882 if (readchar_bufcnt <= 0)
883 {
884 if (readchar_bufcnt == 0)
885 {
886 if (remote_debug)
887 fprintf (stderr, "readchar: Got EOF\n");
888 }
889 else
890 perror ("readchar");
891
892 return -1;
893 }
894
895 readchar_bufp = readchar_buf;
896 }
897
898 readchar_bufcnt--;
899 ch = *readchar_bufp++;
900 reschedule ();
901 return ch;
902 }
903
904 /* Reset the readchar state machine. */
905
906 static void
907 reset_readchar (void)
908 {
909 readchar_bufcnt = 0;
910 if (readchar_callback != NOT_SCHEDULED)
911 {
912 delete_callback_event (readchar_callback);
913 readchar_callback = NOT_SCHEDULED;
914 }
915 }
916
917 /* Process remaining data in readchar_buf. */
918
919 static int
920 process_remaining (void *context)
921 {
922 int res;
923
924 /* This is a one-shot event. */
925 readchar_callback = NOT_SCHEDULED;
926
927 if (readchar_bufcnt > 0)
928 res = handle_serial_event (0, NULL);
929 else
930 res = 0;
931
932 return res;
933 }
934
935 /* If there is still data in the buffer, queue another event to process it,
936 we can't sleep in select yet. */
937
938 static void
939 reschedule (void)
940 {
941 if (readchar_bufcnt > 0 && readchar_callback == NOT_SCHEDULED)
942 readchar_callback = append_callback_event (process_remaining, NULL);
943 }
944
945 /* Read a packet from the remote machine, with error checking,
946 and store it in BUF. Returns length of packet, or negative if error. */
947
948 int
949 getpkt (char *buf)
950 {
951 char *bp;
952 unsigned char csum, c1, c2;
953 int c;
954
955 while (1)
956 {
957 csum = 0;
958
959 while (1)
960 {
961 c = readchar ();
962
963 /* The '\003' may appear before or after each packet, so
964 check for an input interrupt. */
965 if (c == '\003')
966 {
967 (*the_target->request_interrupt) ();
968 continue;
969 }
970
971 if (c == '$')
972 break;
973 if (remote_debug)
974 {
975 fprintf (stderr, "[getpkt: discarding char '%c']\n", c);
976 fflush (stderr);
977 }
978
979 if (c < 0)
980 return -1;
981 }
982
983 bp = buf;
984 while (1)
985 {
986 c = readchar ();
987 if (c < 0)
988 return -1;
989 if (c == '#')
990 break;
991 *bp++ = c;
992 csum += c;
993 }
994 *bp = 0;
995
996 c1 = fromhex (readchar ());
997 c2 = fromhex (readchar ());
998
999 if (csum == (c1 << 4) + c2)
1000 break;
1001
1002 if (noack_mode)
1003 {
1004 fprintf (stderr,
1005 "Bad checksum, sentsum=0x%x, csum=0x%x, "
1006 "buf=%s [no-ack-mode, Bad medium?]\n",
1007 (c1 << 4) + c2, csum, buf);
1008 /* Not much we can do, GDB wasn't expecting an ack/nac. */
1009 break;
1010 }
1011
1012 fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
1013 (c1 << 4) + c2, csum, buf);
1014 if (write_prim ("-", 1) != 1)
1015 return -1;
1016 }
1017
1018 if (!noack_mode)
1019 {
1020 if (remote_debug)
1021 {
1022 fprintf (stderr, "getpkt (\"%s\"); [sending ack] \n", buf);
1023 fflush (stderr);
1024 }
1025
1026 if (write_prim ("+", 1) != 1)
1027 return -1;
1028
1029 if (remote_debug)
1030 {
1031 fprintf (stderr, "[sent ack]\n");
1032 fflush (stderr);
1033 }
1034 }
1035 else
1036 {
1037 if (remote_debug)
1038 {
1039 fprintf (stderr, "getpkt (\"%s\"); [no ack sent] \n", buf);
1040 fflush (stderr);
1041 }
1042 }
1043
1044 return bp - buf;
1045 }
1046
1047 void
1048 write_ok (char *buf)
1049 {
1050 buf[0] = 'O';
1051 buf[1] = 'K';
1052 buf[2] = '\0';
1053 }
1054
1055 void
1056 write_enn (char *buf)
1057 {
1058 /* Some day, we should define the meanings of the error codes... */
1059 buf[0] = 'E';
1060 buf[1] = '0';
1061 buf[2] = '1';
1062 buf[3] = '\0';
1063 }
1064
1065 #endif
1066
1067 #ifndef IN_PROCESS_AGENT
1068
1069 static char *
1070 outreg (struct regcache *regcache, int regno, char *buf)
1071 {
1072 if ((regno >> 12) != 0)
1073 *buf++ = tohex ((regno >> 12) & 0xf);
1074 if ((regno >> 8) != 0)
1075 *buf++ = tohex ((regno >> 8) & 0xf);
1076 *buf++ = tohex ((regno >> 4) & 0xf);
1077 *buf++ = tohex (regno & 0xf);
1078 *buf++ = ':';
1079 collect_register_as_string (regcache, regno, buf);
1080 buf += 2 * register_size (regcache->tdesc, regno);
1081 *buf++ = ';';
1082
1083 return buf;
1084 }
1085
1086 void
1087 new_thread_notify (int id)
1088 {
1089 char own_buf[256];
1090
1091 /* The `n' response is not yet part of the remote protocol. Do nothing. */
1092 if (1)
1093 return;
1094
1095 if (server_waiting == 0)
1096 return;
1097
1098 sprintf (own_buf, "n%x", id);
1099 disable_async_io ();
1100 putpkt (own_buf);
1101 enable_async_io ();
1102 }
1103
1104 void
1105 dead_thread_notify (int id)
1106 {
1107 char own_buf[256];
1108
1109 /* The `x' response is not yet part of the remote protocol. Do nothing. */
1110 if (1)
1111 return;
1112
1113 sprintf (own_buf, "x%x", id);
1114 disable_async_io ();
1115 putpkt (own_buf);
1116 enable_async_io ();
1117 }
1118
1119 void
1120 prepare_resume_reply (char *buf, ptid_t ptid,
1121 struct target_waitstatus *status)
1122 {
1123 if (debug_threads)
1124 debug_printf ("Writing resume reply for %s:%d\n",
1125 target_pid_to_str (ptid), status->kind);
1126
1127 switch (status->kind)
1128 {
1129 case TARGET_WAITKIND_STOPPED:
1130 case TARGET_WAITKIND_FORKED:
1131 case TARGET_WAITKIND_VFORKED:
1132 case TARGET_WAITKIND_VFORK_DONE:
1133 case TARGET_WAITKIND_EXECD:
1134 case TARGET_WAITKIND_THREAD_CREATED:
1135 case TARGET_WAITKIND_SYSCALL_ENTRY:
1136 case TARGET_WAITKIND_SYSCALL_RETURN:
1137 {
1138 struct thread_info *saved_thread;
1139 const char **regp;
1140 struct regcache *regcache;
1141
1142 if ((status->kind == TARGET_WAITKIND_FORKED && report_fork_events)
1143 || (status->kind == TARGET_WAITKIND_VFORKED && report_vfork_events))
1144 {
1145 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1146 const char *event = (status->kind == TARGET_WAITKIND_FORKED
1147 ? "fork" : "vfork");
1148
1149 sprintf (buf, "T%02x%s:", signal, event);
1150 buf += strlen (buf);
1151 buf = write_ptid (buf, status->value.related_pid);
1152 strcat (buf, ";");
1153 }
1154 else if (status->kind == TARGET_WAITKIND_VFORK_DONE && report_vfork_events)
1155 {
1156 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1157
1158 sprintf (buf, "T%02xvforkdone:;", signal);
1159 }
1160 else if (status->kind == TARGET_WAITKIND_EXECD && report_exec_events)
1161 {
1162 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1163 const char *event = "exec";
1164 char hexified_pathname[PATH_MAX * 2];
1165
1166 sprintf (buf, "T%02x%s:", signal, event);
1167 buf += strlen (buf);
1168
1169 /* Encode pathname to hexified format. */
1170 bin2hex ((const gdb_byte *) status->value.execd_pathname,
1171 hexified_pathname,
1172 strlen (status->value.execd_pathname));
1173
1174 sprintf (buf, "%s;", hexified_pathname);
1175 xfree (status->value.execd_pathname);
1176 status->value.execd_pathname = NULL;
1177 buf += strlen (buf);
1178 }
1179 else if (status->kind == TARGET_WAITKIND_THREAD_CREATED
1180 && report_thread_events)
1181 {
1182 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1183
1184 sprintf (buf, "T%02xcreate:;", signal);
1185 }
1186 else if (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY
1187 || status->kind == TARGET_WAITKIND_SYSCALL_RETURN)
1188 {
1189 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1190 const char *event = (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY
1191 ? "syscall_entry" : "syscall_return");
1192
1193 sprintf (buf, "T%02x%s:%x;", signal, event,
1194 status->value.syscall_number);
1195 }
1196 else
1197 sprintf (buf, "T%02x", status->value.sig);
1198
1199 buf += strlen (buf);
1200
1201 saved_thread = current_thread;
1202
1203 current_thread = find_thread_ptid (ptid);
1204
1205 regp = current_target_desc ()->expedite_regs;
1206
1207 regcache = get_thread_regcache (current_thread, 1);
1208
1209 if (the_target->stopped_by_watchpoint != NULL
1210 && (*the_target->stopped_by_watchpoint) ())
1211 {
1212 CORE_ADDR addr;
1213 int i;
1214
1215 strncpy (buf, "watch:", 6);
1216 buf += 6;
1217
1218 addr = (*the_target->stopped_data_address) ();
1219
1220 /* Convert each byte of the address into two hexadecimal
1221 chars. Note that we take sizeof (void *) instead of
1222 sizeof (addr); this is to avoid sending a 64-bit
1223 address to a 32-bit GDB. */
1224 for (i = sizeof (void *) * 2; i > 0; i--)
1225 *buf++ = tohex ((addr >> (i - 1) * 4) & 0xf);
1226 *buf++ = ';';
1227 }
1228 else if (swbreak_feature && target_stopped_by_sw_breakpoint ())
1229 {
1230 sprintf (buf, "swbreak:;");
1231 buf += strlen (buf);
1232 }
1233 else if (hwbreak_feature && target_stopped_by_hw_breakpoint ())
1234 {
1235 sprintf (buf, "hwbreak:;");
1236 buf += strlen (buf);
1237 }
1238
1239 while (*regp)
1240 {
1241 buf = outreg (regcache, find_regno (regcache->tdesc, *regp), buf);
1242 regp ++;
1243 }
1244 *buf = '\0';
1245
1246 /* Formerly, if the debugger had not used any thread features
1247 we would not burden it with a thread status response. This
1248 was for the benefit of GDB 4.13 and older. However, in
1249 recent GDB versions the check (``if (cont_thread != 0)'')
1250 does not have the desired effect because of sillyness in
1251 the way that the remote protocol handles specifying a
1252 thread. Since thread support relies on qSymbol support
1253 anyway, assume GDB can handle threads. */
1254
1255 if (using_threads && !disable_packet_Tthread)
1256 {
1257 /* This if (1) ought to be unnecessary. But remote_wait
1258 in GDB will claim this event belongs to inferior_ptid
1259 if we do not specify a thread, and there's no way for
1260 gdbserver to know what inferior_ptid is. */
1261 if (1 || !ptid_equal (general_thread, ptid))
1262 {
1263 int core = -1;
1264 /* In non-stop, don't change the general thread behind
1265 GDB's back. */
1266 if (!non_stop)
1267 general_thread = ptid;
1268 sprintf (buf, "thread:");
1269 buf += strlen (buf);
1270 buf = write_ptid (buf, ptid);
1271 strcat (buf, ";");
1272 buf += strlen (buf);
1273
1274 core = target_core_of_thread (ptid);
1275
1276 if (core != -1)
1277 {
1278 sprintf (buf, "core:");
1279 buf += strlen (buf);
1280 sprintf (buf, "%x", core);
1281 strcat (buf, ";");
1282 buf += strlen (buf);
1283 }
1284 }
1285 }
1286
1287 if (dlls_changed)
1288 {
1289 strcpy (buf, "library:;");
1290 buf += strlen (buf);
1291 dlls_changed = 0;
1292 }
1293
1294 current_thread = saved_thread;
1295 }
1296 break;
1297 case TARGET_WAITKIND_EXITED:
1298 if (multi_process)
1299 sprintf (buf, "W%x;process:%x",
1300 status->value.integer, ptid_get_pid (ptid));
1301 else
1302 sprintf (buf, "W%02x", status->value.integer);
1303 break;
1304 case TARGET_WAITKIND_SIGNALLED:
1305 if (multi_process)
1306 sprintf (buf, "X%x;process:%x",
1307 status->value.sig, ptid_get_pid (ptid));
1308 else
1309 sprintf (buf, "X%02x", status->value.sig);
1310 break;
1311 case TARGET_WAITKIND_THREAD_EXITED:
1312 sprintf (buf, "w%x;", status->value.integer);
1313 buf += strlen (buf);
1314 buf = write_ptid (buf, ptid);
1315 break;
1316 case TARGET_WAITKIND_NO_RESUMED:
1317 sprintf (buf, "N");
1318 break;
1319 default:
1320 error ("unhandled waitkind");
1321 break;
1322 }
1323 }
1324
1325 void
1326 decode_m_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr)
1327 {
1328 int i = 0, j = 0;
1329 char ch;
1330 *mem_addr_ptr = *len_ptr = 0;
1331
1332 while ((ch = from[i++]) != ',')
1333 {
1334 *mem_addr_ptr = *mem_addr_ptr << 4;
1335 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1336 }
1337
1338 for (j = 0; j < 4; j++)
1339 {
1340 if ((ch = from[i++]) == 0)
1341 break;
1342 *len_ptr = *len_ptr << 4;
1343 *len_ptr |= fromhex (ch) & 0x0f;
1344 }
1345 }
1346
1347 void
1348 decode_M_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr,
1349 unsigned char **to_p)
1350 {
1351 int i = 0;
1352 char ch;
1353 *mem_addr_ptr = *len_ptr = 0;
1354
1355 while ((ch = from[i++]) != ',')
1356 {
1357 *mem_addr_ptr = *mem_addr_ptr << 4;
1358 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1359 }
1360
1361 while ((ch = from[i++]) != ':')
1362 {
1363 *len_ptr = *len_ptr << 4;
1364 *len_ptr |= fromhex (ch) & 0x0f;
1365 }
1366
1367 if (*to_p == NULL)
1368 *to_p = (unsigned char *) xmalloc (*len_ptr);
1369
1370 hex2bin (&from[i++], *to_p, *len_ptr);
1371 }
1372
1373 int
1374 decode_X_packet (char *from, int packet_len, CORE_ADDR *mem_addr_ptr,
1375 unsigned int *len_ptr, unsigned char **to_p)
1376 {
1377 int i = 0;
1378 char ch;
1379 *mem_addr_ptr = *len_ptr = 0;
1380
1381 while ((ch = from[i++]) != ',')
1382 {
1383 *mem_addr_ptr = *mem_addr_ptr << 4;
1384 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1385 }
1386
1387 while ((ch = from[i++]) != ':')
1388 {
1389 *len_ptr = *len_ptr << 4;
1390 *len_ptr |= fromhex (ch) & 0x0f;
1391 }
1392
1393 if (*to_p == NULL)
1394 *to_p = (unsigned char *) xmalloc (*len_ptr);
1395
1396 if (remote_unescape_input ((const gdb_byte *) &from[i], packet_len - i,
1397 *to_p, *len_ptr) != *len_ptr)
1398 return -1;
1399
1400 return 0;
1401 }
1402
1403 /* Decode a qXfer write request. */
1404
1405 int
1406 decode_xfer_write (char *buf, int packet_len, CORE_ADDR *offset,
1407 unsigned int *len, unsigned char *data)
1408 {
1409 char ch;
1410 char *b = buf;
1411
1412 /* Extract the offset. */
1413 *offset = 0;
1414 while ((ch = *buf++) != ':')
1415 {
1416 *offset = *offset << 4;
1417 *offset |= fromhex (ch) & 0x0f;
1418 }
1419
1420 /* Get encoded data. */
1421 packet_len -= buf - b;
1422 *len = remote_unescape_input ((const gdb_byte *) buf, packet_len,
1423 data, packet_len);
1424 return 0;
1425 }
1426
1427 /* Decode the parameters of a qSearch:memory packet. */
1428
1429 int
1430 decode_search_memory_packet (const char *buf, int packet_len,
1431 CORE_ADDR *start_addrp,
1432 CORE_ADDR *search_space_lenp,
1433 gdb_byte *pattern, unsigned int *pattern_lenp)
1434 {
1435 const char *p = buf;
1436
1437 p = decode_address_to_semicolon (start_addrp, p);
1438 p = decode_address_to_semicolon (search_space_lenp, p);
1439 packet_len -= p - buf;
1440 *pattern_lenp = remote_unescape_input ((const gdb_byte *) p, packet_len,
1441 pattern, packet_len);
1442 return 0;
1443 }
1444
1445 static void
1446 free_sym_cache (struct sym_cache *sym)
1447 {
1448 if (sym != NULL)
1449 {
1450 free (sym->name);
1451 free (sym);
1452 }
1453 }
1454
1455 void
1456 clear_symbol_cache (struct sym_cache **symcache_p)
1457 {
1458 struct sym_cache *sym, *next;
1459
1460 /* Check the cache first. */
1461 for (sym = *symcache_p; sym; sym = next)
1462 {
1463 next = sym->next;
1464 free_sym_cache (sym);
1465 }
1466
1467 *symcache_p = NULL;
1468 }
1469
1470 /* Get the address of NAME, and return it in ADDRP if found. if
1471 MAY_ASK_GDB is false, assume symbol cache misses are failures.
1472 Returns 1 if the symbol is found, 0 if it is not, -1 on error. */
1473
1474 int
1475 look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb)
1476 {
1477 char own_buf[266], *p, *q;
1478 int len;
1479 struct sym_cache *sym;
1480 struct process_info *proc;
1481
1482 proc = current_process ();
1483
1484 /* Check the cache first. */
1485 for (sym = proc->symbol_cache; sym; sym = sym->next)
1486 if (strcmp (name, sym->name) == 0)
1487 {
1488 *addrp = sym->addr;
1489 return 1;
1490 }
1491
1492 /* It might not be an appropriate time to look up a symbol,
1493 e.g. while we're trying to fetch registers. */
1494 if (!may_ask_gdb)
1495 return 0;
1496
1497 /* Send the request. */
1498 strcpy (own_buf, "qSymbol:");
1499 bin2hex ((const gdb_byte *) name, own_buf + strlen ("qSymbol:"),
1500 strlen (name));
1501 if (putpkt (own_buf) < 0)
1502 return -1;
1503
1504 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
1505 len = getpkt (own_buf);
1506 if (len < 0)
1507 return -1;
1508
1509 /* We ought to handle pretty much any packet at this point while we
1510 wait for the qSymbol "response". That requires re-entering the
1511 main loop. For now, this is an adequate approximation; allow
1512 GDB to read from memory while it figures out the address of the
1513 symbol. */
1514 while (own_buf[0] == 'm')
1515 {
1516 CORE_ADDR mem_addr;
1517 unsigned char *mem_buf;
1518 unsigned int mem_len;
1519
1520 decode_m_packet (&own_buf[1], &mem_addr, &mem_len);
1521 mem_buf = (unsigned char *) xmalloc (mem_len);
1522 if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
1523 bin2hex (mem_buf, own_buf, mem_len);
1524 else
1525 write_enn (own_buf);
1526 free (mem_buf);
1527 if (putpkt (own_buf) < 0)
1528 return -1;
1529 len = getpkt (own_buf);
1530 if (len < 0)
1531 return -1;
1532 }
1533
1534 if (!startswith (own_buf, "qSymbol:"))
1535 {
1536 warning ("Malformed response to qSymbol, ignoring: %s\n", own_buf);
1537 return -1;
1538 }
1539
1540 p = own_buf + strlen ("qSymbol:");
1541 q = p;
1542 while (*q && *q != ':')
1543 q++;
1544
1545 /* Make sure we found a value for the symbol. */
1546 if (p == q || *q == '\0')
1547 return 0;
1548
1549 decode_address (addrp, p, q - p);
1550
1551 /* Save the symbol in our cache. */
1552 sym = XNEW (struct sym_cache);
1553 sym->name = xstrdup (name);
1554 sym->addr = *addrp;
1555 sym->next = proc->symbol_cache;
1556 proc->symbol_cache = sym;
1557
1558 return 1;
1559 }
1560
1561 /* Relocate an instruction to execute at a different address. OLDLOC
1562 is the address in the inferior memory where the instruction to
1563 relocate is currently at. On input, TO points to the destination
1564 where we want the instruction to be copied (and possibly adjusted)
1565 to. On output, it points to one past the end of the resulting
1566 instruction(s). The effect of executing the instruction at TO
1567 shall be the same as if executing it at OLDLOC. For example, call
1568 instructions that implicitly push the return address on the stack
1569 should be adjusted to return to the instruction after OLDLOC;
1570 relative branches, and other PC-relative instructions need the
1571 offset adjusted; etc. Returns 0 on success, -1 on failure. */
1572
1573 int
1574 relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc)
1575 {
1576 char own_buf[266];
1577 int len;
1578 ULONGEST written = 0;
1579
1580 /* Send the request. */
1581 strcpy (own_buf, "qRelocInsn:");
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.067391 seconds and 4 git commands to generate.