Implement 'catch syscall' for gdbserver
[external/binutils.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