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