*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / gdbserver / remote-utils.c
1 /* Remote utility routines for the remote server for GDB.
2 Copyright (C) 1986, 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "server.h"
21 #include "terminal.h"
22 #include <stdio.h>
23 #include <string.h>
24 #if HAVE_SYS_IOCTL_H
25 #include <sys/ioctl.h>
26 #endif
27 #if HAVE_SYS_FILE_H
28 #include <sys/file.h>
29 #endif
30 #if HAVE_NETINET_IN_H
31 #include <netinet/in.h>
32 #endif
33 #if HAVE_SYS_SOCKET_H
34 #include <sys/socket.h>
35 #endif
36 #if HAVE_NETDB_H
37 #include <netdb.h>
38 #endif
39 #if HAVE_NETINET_TCP_H
40 #include <netinet/tcp.h>
41 #endif
42 #if HAVE_SYS_IOCTL_H
43 #include <sys/ioctl.h>
44 #endif
45 #if HAVE_SIGNAL_H
46 #include <signal.h>
47 #endif
48 #if HAVE_FCNTL_H
49 #include <fcntl.h>
50 #endif
51 #include <sys/time.h>
52 #if HAVE_UNISTD_H
53 #include <unistd.h>
54 #endif
55 #if HAVE_ARPA_INET_H
56 #include <arpa/inet.h>
57 #endif
58 #include <sys/stat.h>
59 #if HAVE_ERRNO_H
60 #include <errno.h>
61 #endif
62
63 #if USE_WIN32API
64 #include <winsock.h>
65 #endif
66
67 #ifndef HAVE_SOCKLEN_T
68 typedef int socklen_t;
69 #endif
70
71 #if USE_WIN32API
72 # define INVALID_DESCRIPTOR INVALID_SOCKET
73 #else
74 # define INVALID_DESCRIPTOR -1
75 #endif
76
77 /* A cache entry for a successfully looked-up symbol. */
78 struct sym_cache
79 {
80 const char *name;
81 CORE_ADDR addr;
82 struct sym_cache *next;
83 };
84
85 /* The symbol cache. */
86 static struct sym_cache *symbol_cache;
87
88 /* If this flag has been set, assume cache misses are
89 failures. */
90 int all_symbols_looked_up;
91
92 int remote_debug = 0;
93 struct ui_file *gdb_stdlog;
94
95 static int remote_desc = INVALID_DESCRIPTOR;
96
97 /* FIXME headerize? */
98 extern int using_threads;
99 extern int debug_threads;
100
101 #ifdef USE_WIN32API
102 # define read(fd, buf, len) recv (fd, (char *) buf, len, 0)
103 # define write(fd, buf, len) send (fd, (char *) buf, len, 0)
104 #endif
105
106 /* Open a connection to a remote debugger.
107 NAME is the filename used for communication. */
108
109 void
110 remote_open (char *name)
111 {
112 #if defined(F_SETFL) && defined (FASYNC)
113 int save_fcntl_flags;
114 #endif
115 char *port_str;
116
117 port_str = strchr (name, ':');
118 if (port_str == NULL)
119 {
120 #ifdef USE_WIN32API
121 error ("Only <host>:<port> is supported on this platform.");
122 #else
123 struct stat statbuf;
124
125 if (stat (name, &statbuf) == 0
126 && (S_ISCHR (statbuf.st_mode) || S_ISFIFO (statbuf.st_mode)))
127 remote_desc = open (name, O_RDWR);
128 else
129 {
130 errno = EINVAL;
131 remote_desc = -1;
132 }
133
134 if (remote_desc < 0)
135 perror_with_name ("Could not open remote device");
136
137 #ifdef HAVE_TERMIOS
138 {
139 struct termios termios;
140 tcgetattr (remote_desc, &termios);
141
142 termios.c_iflag = 0;
143 termios.c_oflag = 0;
144 termios.c_lflag = 0;
145 termios.c_cflag &= ~(CSIZE | PARENB);
146 termios.c_cflag |= CLOCAL | CS8;
147 termios.c_cc[VMIN] = 1;
148 termios.c_cc[VTIME] = 0;
149
150 tcsetattr (remote_desc, TCSANOW, &termios);
151 }
152 #endif
153
154 #ifdef HAVE_TERMIO
155 {
156 struct termio termio;
157 ioctl (remote_desc, TCGETA, &termio);
158
159 termio.c_iflag = 0;
160 termio.c_oflag = 0;
161 termio.c_lflag = 0;
162 termio.c_cflag &= ~(CSIZE | PARENB);
163 termio.c_cflag |= CLOCAL | CS8;
164 termio.c_cc[VMIN] = 1;
165 termio.c_cc[VTIME] = 0;
166
167 ioctl (remote_desc, TCSETA, &termio);
168 }
169 #endif
170
171 #ifdef HAVE_SGTTY
172 {
173 struct sgttyb sg;
174
175 ioctl (remote_desc, TIOCGETP, &sg);
176 sg.sg_flags = RAW;
177 ioctl (remote_desc, TIOCSETP, &sg);
178 }
179 #endif
180
181 fprintf (stderr, "Remote debugging using %s\n", name);
182 #endif /* USE_WIN32API */
183 }
184 else
185 {
186 #ifdef USE_WIN32API
187 static int winsock_initialized;
188 #endif
189 char *port_str;
190 int port;
191 struct sockaddr_in sockaddr;
192 socklen_t tmp;
193 int tmp_desc;
194
195 port_str = strchr (name, ':');
196
197 port = atoi (port_str + 1);
198
199 #ifdef USE_WIN32API
200 if (!winsock_initialized)
201 {
202 WSADATA wsad;
203
204 WSAStartup (MAKEWORD (1, 0), &wsad);
205 winsock_initialized = 1;
206 }
207 #endif
208
209 tmp_desc = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);
210 if (tmp_desc < 0)
211 perror_with_name ("Can't open socket");
212
213 /* Allow rapid reuse of this port. */
214 tmp = 1;
215 setsockopt (tmp_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp,
216 sizeof (tmp));
217
218 sockaddr.sin_family = PF_INET;
219 sockaddr.sin_port = htons (port);
220 sockaddr.sin_addr.s_addr = INADDR_ANY;
221
222 if (bind (tmp_desc, (struct sockaddr *) &sockaddr, sizeof (sockaddr))
223 || listen (tmp_desc, 1))
224 perror_with_name ("Can't bind address");
225
226 /* If port is zero, a random port will be selected, and the
227 fprintf below needs to know what port was selected. */
228 if (port == 0)
229 {
230 socklen_t len = sizeof (sockaddr);
231 if (getsockname (tmp_desc, (struct sockaddr *) &sockaddr, &len) < 0
232 || len < sizeof (sockaddr))
233 perror_with_name ("Can't determine port");
234 port = ntohs (sockaddr.sin_port);
235 }
236
237 fprintf (stderr, "Listening on port %d\n", port);
238 fflush (stderr);
239
240 tmp = sizeof (sockaddr);
241 remote_desc = accept (tmp_desc, (struct sockaddr *) &sockaddr, &tmp);
242 if (remote_desc == -1)
243 perror_with_name ("Accept failed");
244
245 /* Enable TCP keep alive process. */
246 tmp = 1;
247 setsockopt (remote_desc, SOL_SOCKET, SO_KEEPALIVE,
248 (char *) &tmp, sizeof (tmp));
249
250 /* Tell TCP not to delay small packets. This greatly speeds up
251 interactive response. */
252 tmp = 1;
253 setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY,
254 (char *) &tmp, sizeof (tmp));
255
256
257 #ifndef USE_WIN32API
258 close (tmp_desc); /* No longer need this */
259
260 signal (SIGPIPE, SIG_IGN); /* If we don't do this, then gdbserver simply
261 exits when the remote side dies. */
262 #else
263 closesocket (tmp_desc); /* No longer need this */
264 #endif
265
266 /* Convert IP address to string. */
267 fprintf (stderr, "Remote debugging from host %s\n",
268 inet_ntoa (sockaddr.sin_addr));
269 }
270
271 #if defined(F_SETFL) && defined (FASYNC)
272 save_fcntl_flags = fcntl (remote_desc, F_GETFL, 0);
273 fcntl (remote_desc, F_SETFL, save_fcntl_flags | FASYNC);
274 #if defined (F_SETOWN)
275 fcntl (remote_desc, F_SETOWN, getpid ());
276 #endif
277 #endif
278 disable_async_io ();
279 }
280
281 void
282 remote_close (void)
283 {
284 #ifdef USE_WIN32API
285 closesocket (remote_desc);
286 #else
287 close (remote_desc);
288 #endif
289 }
290
291 /* Convert hex digit A to a number. */
292
293 static int
294 fromhex (int a)
295 {
296 if (a >= '0' && a <= '9')
297 return a - '0';
298 else if (a >= 'a' && a <= 'f')
299 return a - 'a' + 10;
300 else
301 error ("Reply contains invalid hex digit");
302 return 0;
303 }
304
305 int
306 unhexify (char *bin, const char *hex, int count)
307 {
308 int i;
309
310 for (i = 0; i < count; i++)
311 {
312 if (hex[0] == 0 || hex[1] == 0)
313 {
314 /* Hex string is short, or of uneven length.
315 Return the count that has been converted so far. */
316 return i;
317 }
318 *bin++ = fromhex (hex[0]) * 16 + fromhex (hex[1]);
319 hex += 2;
320 }
321 return i;
322 }
323
324 void
325 decode_address (CORE_ADDR *addrp, const char *start, int len)
326 {
327 CORE_ADDR addr;
328 char ch;
329 int i;
330
331 addr = 0;
332 for (i = 0; i < len; i++)
333 {
334 ch = start[i];
335 addr = addr << 4;
336 addr = addr | (fromhex (ch) & 0x0f);
337 }
338 *addrp = addr;
339 }
340
341 const char *
342 decode_address_to_semicolon (CORE_ADDR *addrp, const char *start)
343 {
344 const char *end;
345
346 end = start;
347 while (*end != '\0' && *end != ';')
348 end++;
349
350 decode_address (addrp, start, end - start);
351
352 if (*end == ';')
353 end++;
354 return end;
355 }
356
357 /* Convert number NIB to a hex digit. */
358
359 static int
360 tohex (int nib)
361 {
362 if (nib < 10)
363 return '0' + nib;
364 else
365 return 'a' + nib - 10;
366 }
367
368 int
369 hexify (char *hex, const char *bin, int count)
370 {
371 int i;
372
373 /* May use a length, or a nul-terminated string as input. */
374 if (count == 0)
375 count = strlen (bin);
376
377 for (i = 0; i < count; i++)
378 {
379 *hex++ = tohex ((*bin >> 4) & 0xf);
380 *hex++ = tohex (*bin++ & 0xf);
381 }
382 *hex = 0;
383 return i;
384 }
385
386 /* Convert BUFFER, binary data at least LEN bytes long, into escaped
387 binary data in OUT_BUF. Set *OUT_LEN to the length of the data
388 encoded in OUT_BUF, and return the number of bytes in OUT_BUF
389 (which may be more than *OUT_LEN due to escape characters). The
390 total number of bytes in the output buffer will be at most
391 OUT_MAXLEN. */
392
393 int
394 remote_escape_output (const gdb_byte *buffer, int len,
395 gdb_byte *out_buf, int *out_len,
396 int out_maxlen)
397 {
398 int input_index, output_index;
399
400 output_index = 0;
401 for (input_index = 0; input_index < len; input_index++)
402 {
403 gdb_byte b = buffer[input_index];
404
405 if (b == '$' || b == '#' || b == '}' || b == '*')
406 {
407 /* These must be escaped. */
408 if (output_index + 2 > out_maxlen)
409 break;
410 out_buf[output_index++] = '}';
411 out_buf[output_index++] = b ^ 0x20;
412 }
413 else
414 {
415 if (output_index + 1 > out_maxlen)
416 break;
417 out_buf[output_index++] = b;
418 }
419 }
420
421 *out_len = input_index;
422 return output_index;
423 }
424
425 /* Convert BUFFER, escaped data LEN bytes long, into binary data
426 in OUT_BUF. Return the number of bytes written to OUT_BUF.
427 Raise an error if the total number of bytes exceeds OUT_MAXLEN.
428
429 This function reverses remote_escape_output. It allows more
430 escaped characters than that function does, in particular because
431 '*' must be escaped to avoid the run-length encoding processing
432 in reading packets. */
433
434 static int
435 remote_unescape_input (const gdb_byte *buffer, int len,
436 gdb_byte *out_buf, int out_maxlen)
437 {
438 int input_index, output_index;
439 int escaped;
440
441 output_index = 0;
442 escaped = 0;
443 for (input_index = 0; input_index < len; input_index++)
444 {
445 gdb_byte b = buffer[input_index];
446
447 if (output_index + 1 > out_maxlen)
448 error ("Received too much data from the target.");
449
450 if (escaped)
451 {
452 out_buf[output_index++] = b ^ 0x20;
453 escaped = 0;
454 }
455 else if (b == '}')
456 escaped = 1;
457 else
458 out_buf[output_index++] = b;
459 }
460
461 if (escaped)
462 error ("Unmatched escape character in target response.");
463
464 return output_index;
465 }
466
467 /* Look for a sequence of characters which can be run-length encoded.
468 If there are any, update *CSUM and *P. Otherwise, output the
469 single character. Return the number of characters consumed. */
470
471 static int
472 try_rle (char *buf, int remaining, unsigned char *csum, char **p)
473 {
474 int n;
475
476 /* Always output the character. */
477 *csum += buf[0];
478 *(*p)++ = buf[0];
479
480 /* Don't go past '~'. */
481 if (remaining > 97)
482 remaining = 97;
483
484 for (n = 1; n < remaining; n++)
485 if (buf[n] != buf[0])
486 break;
487
488 /* N is the index of the first character not the same as buf[0].
489 buf[0] is counted twice, so by decrementing N, we get the number
490 of characters the RLE sequence will replace. */
491 n--;
492
493 if (n < 3)
494 return 1;
495
496 /* Skip the frame characters. The manual says to skip '+' and '-'
497 also, but there's no reason to. Unfortunately these two unusable
498 characters double the encoded length of a four byte zero
499 value. */
500 while (n + 29 == '$' || n + 29 == '#')
501 n--;
502
503 *csum += '*';
504 *(*p)++ = '*';
505 *csum += n + 29;
506 *(*p)++ = n + 29;
507
508 return n + 1;
509 }
510
511 /* Send a packet to the remote machine, with error checking.
512 The data of the packet is in BUF, and the length of the
513 packet is in CNT. Returns >= 0 on success, -1 otherwise. */
514
515 int
516 putpkt_binary (char *buf, int cnt)
517 {
518 int i;
519 unsigned char csum = 0;
520 char *buf2;
521 char buf3[1];
522 char *p;
523
524 buf2 = malloc (PBUFSIZ);
525
526 /* Copy the packet into buffer BUF2, encapsulating it
527 and giving it a checksum. */
528
529 p = buf2;
530 *p++ = '$';
531
532 for (i = 0; i < cnt;)
533 i += try_rle (buf + i, cnt - i, &csum, &p);
534
535 *p++ = '#';
536 *p++ = tohex ((csum >> 4) & 0xf);
537 *p++ = tohex (csum & 0xf);
538
539 *p = '\0';
540
541 /* Send it over and over until we get a positive ack. */
542
543 do
544 {
545 int cc;
546
547 if (write (remote_desc, buf2, p - buf2) != p - buf2)
548 {
549 perror ("putpkt(write)");
550 free (buf2);
551 return -1;
552 }
553
554 if (remote_debug)
555 {
556 fprintf (stderr, "putpkt (\"%s\"); [looking for ack]\n", buf2);
557 fflush (stderr);
558 }
559 cc = read (remote_desc, buf3, 1);
560 if (remote_debug)
561 {
562 fprintf (stderr, "[received '%c' (0x%x)]\n", buf3[0], buf3[0]);
563 fflush (stderr);
564 }
565
566 if (cc <= 0)
567 {
568 if (cc == 0)
569 fprintf (stderr, "putpkt(read): Got EOF\n");
570 else
571 perror ("putpkt(read)");
572
573 free (buf2);
574 return -1;
575 }
576
577 /* Check for an input interrupt while we're here. */
578 if (buf3[0] == '\003')
579 (*the_target->request_interrupt) ();
580 }
581 while (buf3[0] != '+');
582
583 free (buf2);
584 return 1; /* Success! */
585 }
586
587 /* Send a packet to the remote machine, with error checking. The data
588 of the packet is in BUF, and the packet should be a NUL-terminated
589 string. Returns >= 0 on success, -1 otherwise. */
590
591 int
592 putpkt (char *buf)
593 {
594 return putpkt_binary (buf, strlen (buf));
595 }
596
597 /* Come here when we get an input interrupt from the remote side. This
598 interrupt should only be active while we are waiting for the child to do
599 something. About the only thing that should come through is a ^C, which
600 will cause us to request child interruption. */
601
602 static void
603 input_interrupt (int unused)
604 {
605 fd_set readset;
606 struct timeval immediate = { 0, 0 };
607
608 /* Protect against spurious interrupts. This has been observed to
609 be a problem under NetBSD 1.4 and 1.5. */
610
611 FD_ZERO (&readset);
612 FD_SET (remote_desc, &readset);
613 if (select (remote_desc + 1, &readset, 0, 0, &immediate) > 0)
614 {
615 int cc;
616 char c = 0;
617
618 cc = read (remote_desc, &c, 1);
619
620 if (cc != 1 || c != '\003')
621 {
622 fprintf (stderr, "input_interrupt, count = %d c = %d ('%c')\n",
623 cc, c, c);
624 return;
625 }
626
627 (*the_target->request_interrupt) ();
628 }
629 }
630
631 /* Check if the remote side sent us an interrupt request (^C). */
632 void
633 check_remote_input_interrupt_request (void)
634 {
635 /* This function may be called before establishing communications,
636 therefore we need to validate the remote descriptor. */
637
638 if (remote_desc == INVALID_DESCRIPTOR)
639 return;
640
641 input_interrupt (0);
642 }
643
644 /* Asynchronous I/O support. SIGIO must be enabled when waiting, in order to
645 accept Control-C from the client, and must be disabled when talking to
646 the client. */
647
648 void
649 block_async_io (void)
650 {
651 #ifndef USE_WIN32API
652 sigset_t sigio_set;
653 sigemptyset (&sigio_set);
654 sigaddset (&sigio_set, SIGIO);
655 sigprocmask (SIG_BLOCK, &sigio_set, NULL);
656 #endif
657 }
658
659 void
660 unblock_async_io (void)
661 {
662 #ifndef USE_WIN32API
663 sigset_t sigio_set;
664 sigemptyset (&sigio_set);
665 sigaddset (&sigio_set, SIGIO);
666 sigprocmask (SIG_UNBLOCK, &sigio_set, NULL);
667 #endif
668 }
669
670 /* Current state of asynchronous I/O. */
671 static int async_io_enabled;
672
673 /* Enable asynchronous I/O. */
674 void
675 enable_async_io (void)
676 {
677 if (async_io_enabled)
678 return;
679
680 #ifndef USE_WIN32API
681 signal (SIGIO, input_interrupt);
682 #endif
683 async_io_enabled = 1;
684 }
685
686 /* Disable asynchronous I/O. */
687 void
688 disable_async_io (void)
689 {
690 if (!async_io_enabled)
691 return;
692
693 #ifndef USE_WIN32API
694 signal (SIGIO, SIG_IGN);
695 #endif
696 async_io_enabled = 0;
697 }
698
699 /* Returns next char from remote GDB. -1 if error. */
700
701 static int
702 readchar (void)
703 {
704 static unsigned char buf[BUFSIZ];
705 static int bufcnt = 0;
706 static unsigned char *bufp;
707
708 if (bufcnt-- > 0)
709 return *bufp++;
710
711 bufcnt = read (remote_desc, buf, sizeof (buf));
712
713 if (bufcnt <= 0)
714 {
715 if (bufcnt == 0)
716 fprintf (stderr, "readchar: Got EOF\n");
717 else
718 perror ("readchar");
719
720 return -1;
721 }
722
723 bufp = buf;
724 bufcnt--;
725 return *bufp++ & 0x7f;
726 }
727
728 /* Read a packet from the remote machine, with error checking,
729 and store it in BUF. Returns length of packet, or negative if error. */
730
731 int
732 getpkt (char *buf)
733 {
734 char *bp;
735 unsigned char csum, c1, c2;
736 int c;
737
738 while (1)
739 {
740 csum = 0;
741
742 while (1)
743 {
744 c = readchar ();
745 if (c == '$')
746 break;
747 if (remote_debug)
748 {
749 fprintf (stderr, "[getpkt: discarding char '%c']\n", c);
750 fflush (stderr);
751 }
752
753 if (c < 0)
754 return -1;
755 }
756
757 bp = buf;
758 while (1)
759 {
760 c = readchar ();
761 if (c < 0)
762 return -1;
763 if (c == '#')
764 break;
765 *bp++ = c;
766 csum += c;
767 }
768 *bp = 0;
769
770 c1 = fromhex (readchar ());
771 c2 = fromhex (readchar ());
772
773 if (csum == (c1 << 4) + c2)
774 break;
775
776 fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
777 (c1 << 4) + c2, csum, buf);
778 write (remote_desc, "-", 1);
779 }
780
781 if (remote_debug)
782 {
783 fprintf (stderr, "getpkt (\"%s\"); [sending ack] \n", buf);
784 fflush (stderr);
785 }
786
787 write (remote_desc, "+", 1);
788
789 if (remote_debug)
790 {
791 fprintf (stderr, "[sent ack]\n");
792 fflush (stderr);
793 }
794
795 return bp - buf;
796 }
797
798 void
799 write_ok (char *buf)
800 {
801 buf[0] = 'O';
802 buf[1] = 'K';
803 buf[2] = '\0';
804 }
805
806 void
807 write_enn (char *buf)
808 {
809 /* Some day, we should define the meanings of the error codes... */
810 buf[0] = 'E';
811 buf[1] = '0';
812 buf[2] = '1';
813 buf[3] = '\0';
814 }
815
816 void
817 convert_int_to_ascii (unsigned char *from, char *to, int n)
818 {
819 int nib;
820 int ch;
821 while (n--)
822 {
823 ch = *from++;
824 nib = ((ch & 0xf0) >> 4) & 0x0f;
825 *to++ = tohex (nib);
826 nib = ch & 0x0f;
827 *to++ = tohex (nib);
828 }
829 *to++ = 0;
830 }
831
832
833 void
834 convert_ascii_to_int (char *from, unsigned char *to, int n)
835 {
836 int nib1, nib2;
837 while (n--)
838 {
839 nib1 = fromhex (*from++);
840 nib2 = fromhex (*from++);
841 *to++ = (((nib1 & 0x0f) << 4) & 0xf0) | (nib2 & 0x0f);
842 }
843 }
844
845 static char *
846 outreg (int regno, char *buf)
847 {
848 if ((regno >> 12) != 0)
849 *buf++ = tohex ((regno >> 12) & 0xf);
850 if ((regno >> 8) != 0)
851 *buf++ = tohex ((regno >> 8) & 0xf);
852 *buf++ = tohex ((regno >> 4) & 0xf);
853 *buf++ = tohex (regno & 0xf);
854 *buf++ = ':';
855 collect_register_as_string (regno, buf);
856 buf += 2 * register_size (regno);
857 *buf++ = ';';
858
859 return buf;
860 }
861
862 void
863 new_thread_notify (int id)
864 {
865 char own_buf[256];
866
867 /* The `n' response is not yet part of the remote protocol. Do nothing. */
868 if (1)
869 return;
870
871 if (server_waiting == 0)
872 return;
873
874 sprintf (own_buf, "n%x", id);
875 disable_async_io ();
876 putpkt (own_buf);
877 enable_async_io ();
878 }
879
880 void
881 dead_thread_notify (int id)
882 {
883 char own_buf[256];
884
885 /* The `x' response is not yet part of the remote protocol. Do nothing. */
886 if (1)
887 return;
888
889 sprintf (own_buf, "x%x", id);
890 disable_async_io ();
891 putpkt (own_buf);
892 enable_async_io ();
893 }
894
895 void
896 prepare_resume_reply (char *buf, char status, unsigned char sig)
897 {
898 int nib;
899
900 *buf++ = status;
901
902 nib = ((sig & 0xf0) >> 4);
903 *buf++ = tohex (nib);
904 nib = sig & 0x0f;
905 *buf++ = tohex (nib);
906
907 if (status == 'T')
908 {
909 const char **regp = gdbserver_expedite_regs;
910
911 if (the_target->stopped_by_watchpoint != NULL
912 && (*the_target->stopped_by_watchpoint) ())
913 {
914 CORE_ADDR addr;
915 int i;
916
917 strncpy (buf, "watch:", 6);
918 buf += 6;
919
920 addr = (*the_target->stopped_data_address) ();
921
922 /* Convert each byte of the address into two hexadecimal chars.
923 Note that we take sizeof (void *) instead of sizeof (addr);
924 this is to avoid sending a 64-bit address to a 32-bit GDB. */
925 for (i = sizeof (void *) * 2; i > 0; i--)
926 {
927 *buf++ = tohex ((addr >> (i - 1) * 4) & 0xf);
928 }
929 *buf++ = ';';
930 }
931
932 while (*regp)
933 {
934 buf = outreg (find_regno (*regp), buf);
935 regp ++;
936 }
937
938 /* Formerly, if the debugger had not used any thread features we would not
939 burden it with a thread status response. This was for the benefit of
940 GDB 4.13 and older. However, in recent GDB versions the check
941 (``if (cont_thread != 0)'') does not have the desired effect because of
942 sillyness in the way that the remote protocol handles specifying a thread.
943 Since thread support relies on qSymbol support anyway, assume GDB can handle
944 threads. */
945
946 if (using_threads)
947 {
948 unsigned int gdb_id_from_wait;
949
950 /* FIXME right place to set this? */
951 thread_from_wait = ((struct inferior_list_entry *)current_inferior)->id;
952 gdb_id_from_wait = thread_to_gdb_id (current_inferior);
953
954 if (debug_threads)
955 fprintf (stderr, "Writing resume reply for %ld\n\n", thread_from_wait);
956 /* This if (1) ought to be unnecessary. But remote_wait in GDB
957 will claim this event belongs to inferior_ptid if we do not
958 specify a thread, and there's no way for gdbserver to know
959 what inferior_ptid is. */
960 if (1 || old_thread_from_wait != thread_from_wait)
961 {
962 general_thread = thread_from_wait;
963 sprintf (buf, "thread:%x;", gdb_id_from_wait);
964 buf += strlen (buf);
965 old_thread_from_wait = thread_from_wait;
966 }
967 }
968
969 if (dlls_changed)
970 {
971 strcpy (buf, "library:;");
972 buf += strlen (buf);
973 dlls_changed = 0;
974 }
975 }
976 /* For W and X, we're done. */
977 *buf++ = 0;
978 }
979
980 void
981 decode_m_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr)
982 {
983 int i = 0, j = 0;
984 char ch;
985 *mem_addr_ptr = *len_ptr = 0;
986
987 while ((ch = from[i++]) != ',')
988 {
989 *mem_addr_ptr = *mem_addr_ptr << 4;
990 *mem_addr_ptr |= fromhex (ch) & 0x0f;
991 }
992
993 for (j = 0; j < 4; j++)
994 {
995 if ((ch = from[i++]) == 0)
996 break;
997 *len_ptr = *len_ptr << 4;
998 *len_ptr |= fromhex (ch) & 0x0f;
999 }
1000 }
1001
1002 void
1003 decode_M_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr,
1004 unsigned char *to)
1005 {
1006 int i = 0;
1007 char ch;
1008 *mem_addr_ptr = *len_ptr = 0;
1009
1010 while ((ch = from[i++]) != ',')
1011 {
1012 *mem_addr_ptr = *mem_addr_ptr << 4;
1013 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1014 }
1015
1016 while ((ch = from[i++]) != ':')
1017 {
1018 *len_ptr = *len_ptr << 4;
1019 *len_ptr |= fromhex (ch) & 0x0f;
1020 }
1021
1022 convert_ascii_to_int (&from[i++], to, *len_ptr);
1023 }
1024
1025 int
1026 decode_X_packet (char *from, int packet_len, CORE_ADDR *mem_addr_ptr,
1027 unsigned int *len_ptr, unsigned char *to)
1028 {
1029 int i = 0;
1030 char ch;
1031 *mem_addr_ptr = *len_ptr = 0;
1032
1033 while ((ch = from[i++]) != ',')
1034 {
1035 *mem_addr_ptr = *mem_addr_ptr << 4;
1036 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1037 }
1038
1039 while ((ch = from[i++]) != ':')
1040 {
1041 *len_ptr = *len_ptr << 4;
1042 *len_ptr |= fromhex (ch) & 0x0f;
1043 }
1044
1045 if (remote_unescape_input ((const gdb_byte *) &from[i], packet_len - i,
1046 to, *len_ptr) != *len_ptr)
1047 return -1;
1048
1049 return 0;
1050 }
1051
1052 /* Decode a qXfer write request. */
1053 int
1054 decode_xfer_write (char *buf, int packet_len, char **annex, CORE_ADDR *offset,
1055 unsigned int *len, unsigned char *data)
1056 {
1057 char ch;
1058
1059 /* Extract and NUL-terminate the annex. */
1060 *annex = buf;
1061 while (*buf && *buf != ':')
1062 buf++;
1063 if (*buf == '\0')
1064 return -1;
1065 *buf++ = 0;
1066
1067 /* Extract the offset. */
1068 *offset = 0;
1069 while ((ch = *buf++) != ':')
1070 {
1071 *offset = *offset << 4;
1072 *offset |= fromhex (ch) & 0x0f;
1073 }
1074
1075 /* Get encoded data. */
1076 packet_len -= buf - *annex;
1077 *len = remote_unescape_input ((const gdb_byte *) buf, packet_len,
1078 data, packet_len);
1079 return 0;
1080 }
1081
1082 /* Ask GDB for the address of NAME, and return it in ADDRP if found.
1083 Returns 1 if the symbol is found, 0 if it is not, -1 on error. */
1084
1085 int
1086 look_up_one_symbol (const char *name, CORE_ADDR *addrp)
1087 {
1088 char own_buf[266], *p, *q;
1089 int len;
1090 struct sym_cache *sym;
1091
1092 /* Check the cache first. */
1093 for (sym = symbol_cache; sym; sym = sym->next)
1094 if (strcmp (name, sym->name) == 0)
1095 {
1096 *addrp = sym->addr;
1097 return 1;
1098 }
1099
1100 /* If we've passed the call to thread_db_look_up_symbols, then
1101 anything not in the cache must not exist; we're not interested
1102 in any libraries loaded after that point, only in symbols in
1103 libpthread.so. It might not be an appropriate time to look
1104 up a symbol, e.g. while we're trying to fetch registers. */
1105 if (all_symbols_looked_up)
1106 return 0;
1107
1108 /* Send the request. */
1109 strcpy (own_buf, "qSymbol:");
1110 hexify (own_buf + strlen ("qSymbol:"), name, strlen (name));
1111 if (putpkt (own_buf) < 0)
1112 return -1;
1113
1114 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
1115 len = getpkt (own_buf);
1116 if (len < 0)
1117 return -1;
1118
1119 /* We ought to handle pretty much any packet at this point while we
1120 wait for the qSymbol "response". That requires re-entering the
1121 main loop. For now, this is an adequate approximation; allow
1122 GDB to read from memory while it figures out the address of the
1123 symbol. */
1124 while (own_buf[0] == 'm')
1125 {
1126 CORE_ADDR mem_addr;
1127 unsigned char *mem_buf;
1128 unsigned int mem_len;
1129
1130 decode_m_packet (&own_buf[1], &mem_addr, &mem_len);
1131 mem_buf = malloc (mem_len);
1132 if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
1133 convert_int_to_ascii (mem_buf, own_buf, mem_len);
1134 else
1135 write_enn (own_buf);
1136 free (mem_buf);
1137 if (putpkt (own_buf) < 0)
1138 return -1;
1139 len = getpkt (own_buf);
1140 if (len < 0)
1141 return -1;
1142 }
1143
1144 if (strncmp (own_buf, "qSymbol:", strlen ("qSymbol:")) != 0)
1145 {
1146 warning ("Malformed response to qSymbol, ignoring: %s\n", own_buf);
1147 return -1;
1148 }
1149
1150 p = own_buf + strlen ("qSymbol:");
1151 q = p;
1152 while (*q && *q != ':')
1153 q++;
1154
1155 /* Make sure we found a value for the symbol. */
1156 if (p == q || *q == '\0')
1157 return 0;
1158
1159 decode_address (addrp, p, q - p);
1160
1161 /* Save the symbol in our cache. */
1162 sym = malloc (sizeof (*sym));
1163 sym->name = strdup (name);
1164 sym->addr = *addrp;
1165 sym->next = symbol_cache;
1166 symbol_cache = sym;
1167
1168 return 1;
1169 }
1170
1171 void
1172 monitor_output (const char *msg)
1173 {
1174 char *buf = malloc (strlen (msg) * 2 + 2);
1175
1176 buf[0] = 'O';
1177 hexify (buf + 1, msg, 0);
1178
1179 putpkt (buf);
1180 free (buf);
1181 }
1182
1183 /* Return a malloc allocated string with special characters from TEXT
1184 replaced by entity references. */
1185
1186 char *
1187 xml_escape_text (const char *text)
1188 {
1189 char *result;
1190 int i, special;
1191
1192 /* Compute the length of the result. */
1193 for (i = 0, special = 0; text[i] != '\0'; i++)
1194 switch (text[i])
1195 {
1196 case '\'':
1197 case '\"':
1198 special += 5;
1199 break;
1200 case '&':
1201 special += 4;
1202 break;
1203 case '<':
1204 case '>':
1205 special += 3;
1206 break;
1207 default:
1208 break;
1209 }
1210
1211 /* Expand the result. */
1212 result = malloc (i + special + 1);
1213 for (i = 0, special = 0; text[i] != '\0'; i++)
1214 switch (text[i])
1215 {
1216 case '\'':
1217 strcpy (result + i + special, "&apos;");
1218 special += 5;
1219 break;
1220 case '\"':
1221 strcpy (result + i + special, "&quot;");
1222 special += 5;
1223 break;
1224 case '&':
1225 strcpy (result + i + special, "&amp;");
1226 special += 4;
1227 break;
1228 case '<':
1229 strcpy (result + i + special, "&lt;");
1230 special += 3;
1231 break;
1232 case '>':
1233 strcpy (result + i + special, "&gt;");
1234 special += 3;
1235 break;
1236 default:
1237 result[i + special] = text[i];
1238 break;
1239 }
1240 result[i + special] = '\0';
1241
1242 return result;
1243 }
This page took 0.063723 seconds and 4 git commands to generate.