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