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