1 /* Remote utility routines for the remote server for GDB.
2 Copyright (C) 1986, 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
3 2002, 2003, 2004, 2005, 2006
4 Free Software Foundation, Inc.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
27 #include <sys/ioctl.h>
29 #include <netinet/in.h>
30 #include <sys/socket.h>
32 #include <netinet/tcp.h>
33 #include <sys/ioctl.h>
38 #include <arpa/inet.h>
40 #ifndef HAVE_SOCKLEN_T
41 typedef int socklen_t
;
44 /* A cache entry for a successfully looked-up symbol. */
49 struct sym_cache
*next
;
52 /* The symbol cache. */
53 static struct sym_cache
*symbol_cache
;
55 /* If this flag has been set, assume cache misses are
57 int all_symbols_looked_up
;
60 struct ui_file
*gdb_stdlog
;
62 static int remote_desc
;
64 /* FIXME headerize? */
65 extern int using_threads
;
66 extern int debug_threads
;
68 /* Open a connection to a remote debugger.
69 NAME is the filename used for communication. */
72 remote_open (char *name
)
76 if (!strchr (name
, ':'))
78 remote_desc
= open (name
, O_RDWR
);
80 perror_with_name ("Could not open remote device");
84 struct termios termios
;
85 tcgetattr (remote_desc
, &termios
);
90 termios
.c_cflag
&= ~(CSIZE
| PARENB
);
91 termios
.c_cflag
|= CLOCAL
| CS8
;
92 termios
.c_cc
[VMIN
] = 1;
93 termios
.c_cc
[VTIME
] = 0;
95 tcsetattr (remote_desc
, TCSANOW
, &termios
);
101 struct termio termio
;
102 ioctl (remote_desc
, TCGETA
, &termio
);
107 termio
.c_cflag
&= ~(CSIZE
| PARENB
);
108 termio
.c_cflag
|= CLOCAL
| CS8
;
109 termio
.c_cc
[VMIN
] = 1;
110 termio
.c_cc
[VTIME
] = 0;
112 ioctl (remote_desc
, TCSETA
, &termio
);
120 ioctl (remote_desc
, TIOCGETP
, &sg
);
122 ioctl (remote_desc
, TIOCSETP
, &sg
);
126 fprintf (stderr
, "Remote debugging using %s\n", name
);
132 struct sockaddr_in sockaddr
;
136 port_str
= strchr (name
, ':');
138 port
= atoi (port_str
+ 1);
140 tmp_desc
= socket (PF_INET
, SOCK_STREAM
, 0);
142 perror_with_name ("Can't open socket");
144 /* Allow rapid reuse of this port. */
146 setsockopt (tmp_desc
, SOL_SOCKET
, SO_REUSEADDR
, (char *) &tmp
,
149 sockaddr
.sin_family
= PF_INET
;
150 sockaddr
.sin_port
= htons (port
);
151 sockaddr
.sin_addr
.s_addr
= INADDR_ANY
;
153 if (bind (tmp_desc
, (struct sockaddr
*) &sockaddr
, sizeof (sockaddr
))
154 || listen (tmp_desc
, 1))
155 perror_with_name ("Can't bind address");
157 fprintf (stderr
, "Listening on port %d\n", port
);
159 tmp
= sizeof (sockaddr
);
160 remote_desc
= accept (tmp_desc
, (struct sockaddr
*) &sockaddr
, &tmp
);
161 if (remote_desc
== -1)
162 perror_with_name ("Accept failed");
164 /* Enable TCP keep alive process. */
166 setsockopt (tmp_desc
, SOL_SOCKET
, SO_KEEPALIVE
, (char *) &tmp
, sizeof (tmp
));
168 /* Tell TCP not to delay small packets. This greatly speeds up
169 interactive response. */
171 setsockopt (remote_desc
, IPPROTO_TCP
, TCP_NODELAY
,
172 (char *) &tmp
, sizeof (tmp
));
174 close (tmp_desc
); /* No longer need this */
176 signal (SIGPIPE
, SIG_IGN
); /* If we don't do this, then gdbserver simply
177 exits when the remote side dies. */
179 /* Convert IP address to string. */
180 fprintf (stderr
, "Remote debugging from host %s\n",
181 inet_ntoa (sockaddr
.sin_addr
));
184 #if defined(F_SETFL) && defined (FASYNC)
185 save_fcntl_flags
= fcntl (remote_desc
, F_GETFL
, 0);
186 fcntl (remote_desc
, F_SETFL
, save_fcntl_flags
| FASYNC
);
187 #if defined (F_SETOWN)
188 fcntl (remote_desc
, F_SETOWN
, getpid ());
200 /* Convert hex digit A to a number. */
205 if (a
>= '0' && a
<= '9')
207 else if (a
>= 'a' && a
<= 'f')
210 error ("Reply contains invalid hex digit");
215 unhexify (char *bin
, const char *hex
, int count
)
219 for (i
= 0; i
< count
; i
++)
221 if (hex
[0] == 0 || hex
[1] == 0)
223 /* Hex string is short, or of uneven length.
224 Return the count that has been converted so far. */
227 *bin
++ = fromhex (hex
[0]) * 16 + fromhex (hex
[1]);
234 decode_address (CORE_ADDR
*addrp
, const char *start
, int len
)
241 for (i
= 0; i
< len
; i
++)
245 addr
= addr
| (fromhex (ch
) & 0x0f);
250 /* Convert number NIB to a hex digit. */
258 return 'a' + nib
- 10;
262 hexify (char *hex
, const char *bin
, int count
)
266 /* May use a length, or a nul-terminated string as input. */
268 count
= strlen (bin
);
270 for (i
= 0; i
< count
; i
++)
272 *hex
++ = tohex ((*bin
>> 4) & 0xf);
273 *hex
++ = tohex (*bin
++ & 0xf);
279 /* Convert BUFFER, binary data at least LEN bytes long, into escaped
280 binary data in OUT_BUF. Set *OUT_LEN to the length of the data
281 encoded in OUT_BUF, and return the number of bytes in OUT_BUF
282 (which may be more than *OUT_LEN due to escape characters). The
283 total number of bytes in the output buffer will be at most
287 remote_escape_output (const gdb_byte
*buffer
, int len
,
288 gdb_byte
*out_buf
, int *out_len
,
291 int input_index
, output_index
;
294 for (input_index
= 0; input_index
< len
; input_index
++)
296 gdb_byte b
= buffer
[input_index
];
298 if (b
== '$' || b
== '#' || b
== '}' || b
== '*')
300 /* These must be escaped. */
301 if (output_index
+ 2 > out_maxlen
)
303 out_buf
[output_index
++] = '}';
304 out_buf
[output_index
++] = b
^ 0x20;
308 if (output_index
+ 1 > out_maxlen
)
310 out_buf
[output_index
++] = b
;
314 *out_len
= input_index
;
318 /* Convert BUFFER, escaped data LEN bytes long, into binary data
319 in OUT_BUF. Return the number of bytes written to OUT_BUF.
320 Raise an error if the total number of bytes exceeds OUT_MAXLEN.
322 This function reverses remote_escape_output. It allows more
323 escaped characters than that function does, in particular because
324 '*' must be escaped to avoid the run-length encoding processing
325 in reading packets. */
328 remote_unescape_input (const gdb_byte
*buffer
, int len
,
329 gdb_byte
*out_buf
, int out_maxlen
)
331 int input_index
, output_index
;
336 for (input_index
= 0; input_index
< len
; input_index
++)
338 gdb_byte b
= buffer
[input_index
];
340 if (output_index
+ 1 > out_maxlen
)
341 error ("Received too much data from the target.");
345 out_buf
[output_index
++] = b
^ 0x20;
351 out_buf
[output_index
++] = b
;
355 error ("Unmatched escape character in target response.");
360 /* Send a packet to the remote machine, with error checking.
361 The data of the packet is in BUF, and the length of the
362 packet is in CNT. Returns >= 0 on success, -1 otherwise. */
365 putpkt_binary (char *buf
, int cnt
)
368 unsigned char csum
= 0;
373 buf2
= malloc (PBUFSIZ
);
375 /* Copy the packet into buffer BUF2, encapsulating it
376 and giving it a checksum. */
381 for (i
= 0; i
< cnt
; i
++)
387 *p
++ = tohex ((csum
>> 4) & 0xf);
388 *p
++ = tohex (csum
& 0xf);
392 /* Send it over and over until we get a positive ack. */
398 if (write (remote_desc
, buf2
, p
- buf2
) != p
- buf2
)
400 perror ("putpkt(write)");
406 fprintf (stderr
, "putpkt (\"%s\"); [looking for ack]\n", buf2
);
409 cc
= read (remote_desc
, buf3
, 1);
412 fprintf (stderr
, "[received '%c' (0x%x)]\n", buf3
[0], buf3
[0]);
419 fprintf (stderr
, "putpkt(read): Got EOF\n");
421 perror ("putpkt(read)");
427 /* Check for an input interrupt while we're here. */
428 if (buf3
[0] == '\003')
429 (*the_target
->send_signal
) (SIGINT
);
431 while (buf3
[0] != '+');
434 return 1; /* Success! */
437 /* Send a packet to the remote machine, with error checking. The data
438 of the packet is in BUF, and the packet should be a NUL-terminated
439 string. Returns >= 0 on success, -1 otherwise. */
444 return putpkt_binary (buf
, strlen (buf
));
448 /* Come here when we get an input interrupt from the remote side. This
449 interrupt should only be active while we are waiting for the child to do
450 something. About the only thing that should come through is a ^C, which
451 will cause us to send a SIGINT to the child. */
454 input_interrupt (int unused
)
457 struct timeval immediate
= { 0, 0 };
459 /* Protect against spurious interrupts. This has been observed to
460 be a problem under NetBSD 1.4 and 1.5. */
463 FD_SET (remote_desc
, &readset
);
464 if (select (remote_desc
+ 1, &readset
, 0, 0, &immediate
) > 0)
469 cc
= read (remote_desc
, &c
, 1);
471 if (cc
!= 1 || c
!= '\003')
473 fprintf (stderr
, "input_interrupt, count = %d c = %d ('%c')\n",
478 (*the_target
->send_signal
) (SIGINT
);
483 block_async_io (void)
486 sigemptyset (&sigio_set
);
487 sigaddset (&sigio_set
, SIGIO
);
488 sigprocmask (SIG_BLOCK
, &sigio_set
, NULL
);
492 unblock_async_io (void)
495 sigemptyset (&sigio_set
);
496 sigaddset (&sigio_set
, SIGIO
);
497 sigprocmask (SIG_UNBLOCK
, &sigio_set
, NULL
);
500 /* Asynchronous I/O support. SIGIO must be enabled when waiting, in order to
501 accept Control-C from the client, and must be disabled when talking to
504 /* Current state of asynchronous I/O. */
505 static int async_io_enabled
;
507 /* Enable asynchronous I/O. */
509 enable_async_io (void)
511 if (async_io_enabled
)
514 signal (SIGIO
, input_interrupt
);
515 async_io_enabled
= 1;
518 /* Disable asynchronous I/O. */
520 disable_async_io (void)
522 if (!async_io_enabled
)
525 signal (SIGIO
, SIG_IGN
);
526 async_io_enabled
= 0;
529 /* Returns next char from remote GDB. -1 if error. */
534 static unsigned char buf
[BUFSIZ
];
535 static int bufcnt
= 0;
536 static unsigned char *bufp
;
541 bufcnt
= read (remote_desc
, buf
, sizeof (buf
));
546 fprintf (stderr
, "readchar: Got EOF\n");
555 return *bufp
++ & 0x7f;
558 /* Read a packet from the remote machine, with error checking,
559 and store it in BUF. Returns length of packet, or negative if error. */
565 unsigned char csum
, c1
, c2
;
579 fprintf (stderr
, "[getpkt: discarding char '%c']\n", c
);
600 c1
= fromhex (readchar ());
601 c2
= fromhex (readchar ());
603 if (csum
== (c1
<< 4) + c2
)
606 fprintf (stderr
, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
607 (c1
<< 4) + c2
, csum
, buf
);
608 write (remote_desc
, "-", 1);
613 fprintf (stderr
, "getpkt (\"%s\"); [sending ack] \n", buf
);
617 write (remote_desc
, "+", 1);
621 fprintf (stderr
, "[sent ack]\n");
637 write_enn (char *buf
)
639 /* Some day, we should define the meanings of the error codes... */
647 convert_int_to_ascii (unsigned char *from
, char *to
, int n
)
654 nib
= ((ch
& 0xf0) >> 4) & 0x0f;
664 convert_ascii_to_int (char *from
, unsigned char *to
, int n
)
669 nib1
= fromhex (*from
++);
670 nib2
= fromhex (*from
++);
671 *to
++ = (((nib1
& 0x0f) << 4) & 0xf0) | (nib2
& 0x0f);
676 outreg (int regno
, char *buf
)
678 if ((regno
>> 12) != 0)
679 *buf
++ = tohex ((regno
>> 12) & 0xf);
680 if ((regno
>> 8) != 0)
681 *buf
++ = tohex ((regno
>> 8) & 0xf);
682 *buf
++ = tohex ((regno
>> 4) & 0xf);
683 *buf
++ = tohex (regno
& 0xf);
685 collect_register_as_string (regno
, buf
);
686 buf
+= 2 * register_size (regno
);
693 new_thread_notify (int id
)
697 /* The `n' response is not yet part of the remote protocol. Do nothing. */
701 if (server_waiting
== 0)
704 sprintf (own_buf
, "n%x", id
);
711 dead_thread_notify (int id
)
715 /* The `x' response is not yet part of the remote protocol. Do nothing. */
719 sprintf (own_buf
, "x%x", id
);
726 prepare_resume_reply (char *buf
, char status
, unsigned char signo
)
732 sig
= (int)target_signal_from_host (signo
);
734 nib
= ((sig
& 0xf0) >> 4);
735 *buf
++ = tohex (nib
);
737 *buf
++ = tohex (nib
);
741 const char **regp
= gdbserver_expedite_regs
;
743 if (the_target
->stopped_by_watchpoint
!= NULL
744 && (*the_target
->stopped_by_watchpoint
) ())
749 strncpy (buf
, "watch:", 6);
752 addr
= (*the_target
->stopped_data_address
) ();
754 /* Convert each byte of the address into two hexadecimal chars.
755 Note that we take sizeof (void *) instead of sizeof (addr);
756 this is to avoid sending a 64-bit address to a 32-bit GDB. */
757 for (i
= sizeof (void *) * 2; i
> 0; i
--)
759 *buf
++ = tohex ((addr
>> (i
- 1) * 4) & 0xf);
766 buf
= outreg (find_regno (*regp
), buf
);
770 /* Formerly, if the debugger had not used any thread features we would not
771 burden it with a thread status response. This was for the benefit of
772 GDB 4.13 and older. However, in recent GDB versions the check
773 (``if (cont_thread != 0)'') does not have the desired effect because of
774 sillyness in the way that the remote protocol handles specifying a thread.
775 Since thread support relies on qSymbol support anyway, assume GDB can handle
780 unsigned int gdb_id_from_wait
;
782 /* FIXME right place to set this? */
783 thread_from_wait
= ((struct inferior_list_entry
*)current_inferior
)->id
;
784 gdb_id_from_wait
= thread_to_gdb_id (current_inferior
);
787 fprintf (stderr
, "Writing resume reply for %ld\n\n", thread_from_wait
);
788 /* This if (1) ought to be unnecessary. But remote_wait in GDB
789 will claim this event belongs to inferior_ptid if we do not
790 specify a thread, and there's no way for gdbserver to know
791 what inferior_ptid is. */
792 if (1 || old_thread_from_wait
!= thread_from_wait
)
794 general_thread
= thread_from_wait
;
795 sprintf (buf
, "thread:%x;", gdb_id_from_wait
);
797 old_thread_from_wait
= thread_from_wait
;
801 /* For W and X, we're done. */
806 decode_m_packet (char *from
, CORE_ADDR
*mem_addr_ptr
, unsigned int *len_ptr
)
810 *mem_addr_ptr
= *len_ptr
= 0;
812 while ((ch
= from
[i
++]) != ',')
814 *mem_addr_ptr
= *mem_addr_ptr
<< 4;
815 *mem_addr_ptr
|= fromhex (ch
) & 0x0f;
818 for (j
= 0; j
< 4; j
++)
820 if ((ch
= from
[i
++]) == 0)
822 *len_ptr
= *len_ptr
<< 4;
823 *len_ptr
|= fromhex (ch
) & 0x0f;
828 decode_M_packet (char *from
, CORE_ADDR
*mem_addr_ptr
, unsigned int *len_ptr
,
833 *mem_addr_ptr
= *len_ptr
= 0;
835 while ((ch
= from
[i
++]) != ',')
837 *mem_addr_ptr
= *mem_addr_ptr
<< 4;
838 *mem_addr_ptr
|= fromhex (ch
) & 0x0f;
841 while ((ch
= from
[i
++]) != ':')
843 *len_ptr
= *len_ptr
<< 4;
844 *len_ptr
|= fromhex (ch
) & 0x0f;
847 convert_ascii_to_int (&from
[i
++], to
, *len_ptr
);
851 decode_X_packet (char *from
, int packet_len
, CORE_ADDR
*mem_addr_ptr
,
852 unsigned int *len_ptr
, unsigned char *to
)
856 *mem_addr_ptr
= *len_ptr
= 0;
858 while ((ch
= from
[i
++]) != ',')
860 *mem_addr_ptr
= *mem_addr_ptr
<< 4;
861 *mem_addr_ptr
|= fromhex (ch
) & 0x0f;
864 while ((ch
= from
[i
++]) != ':')
866 *len_ptr
= *len_ptr
<< 4;
867 *len_ptr
|= fromhex (ch
) & 0x0f;
870 if (remote_unescape_input ((const gdb_byte
*) &from
[i
], packet_len
- i
,
871 to
, *len_ptr
) != *len_ptr
)
877 /* Ask GDB for the address of NAME, and return it in ADDRP if found.
878 Returns 1 if the symbol is found, 0 if it is not, -1 on error. */
881 look_up_one_symbol (const char *name
, CORE_ADDR
*addrp
)
883 char own_buf
[266], *p
, *q
;
885 struct sym_cache
*sym
;
887 /* Check the cache first. */
888 for (sym
= symbol_cache
; sym
; sym
= sym
->next
)
889 if (strcmp (name
, sym
->name
) == 0)
895 /* If we've passed the call to thread_db_look_up_symbols, then
896 anything not in the cache must not exist; we're not interested
897 in any libraries loaded after that point, only in symbols in
898 libpthread.so. It might not be an appropriate time to look
899 up a symbol, e.g. while we're trying to fetch registers. */
900 if (all_symbols_looked_up
)
903 /* Send the request. */
904 strcpy (own_buf
, "qSymbol:");
905 hexify (own_buf
+ strlen ("qSymbol:"), name
, strlen (name
));
906 if (putpkt (own_buf
) < 0)
909 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
910 len
= getpkt (own_buf
);
914 if (strncmp (own_buf
, "qSymbol:", strlen ("qSymbol:")) != 0)
916 /* Malformed response. */
919 fprintf (stderr
, "Malformed response to qSymbol, ignoring.\n");
926 p
= own_buf
+ strlen ("qSymbol:");
928 while (*q
&& *q
!= ':')
931 /* Make sure we found a value for the symbol. */
932 if (p
== q
|| *q
== '\0')
935 decode_address (addrp
, p
, q
- p
);
937 /* Save the symbol in our cache. */
938 sym
= malloc (sizeof (*sym
));
939 sym
->name
= strdup (name
);
941 sym
->next
= symbol_cache
;