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. */
30 #include <sys/ioctl.h>
34 #include <netinet/in.h>
37 #include <sys/socket.h>
42 #if HAVE_NETINET_TCP_H
43 #include <netinet/tcp.h>
46 #include <sys/ioctl.h>
53 #include <arpa/inet.h>
60 #ifndef HAVE_SOCKLEN_T
61 typedef int socklen_t
;
64 /* A cache entry for a successfully looked-up symbol. */
69 struct sym_cache
*next
;
72 /* The symbol cache. */
73 static struct sym_cache
*symbol_cache
;
75 /* If this flag has been set, assume cache misses are
77 int all_symbols_looked_up
;
80 struct ui_file
*gdb_stdlog
;
82 static int remote_desc
;
84 /* FIXME headerize? */
85 extern int using_threads
;
86 extern int debug_threads
;
88 /* Open a connection to a remote debugger.
89 NAME is the filename used for communication. */
92 remote_open (char *name
)
94 #if defined(F_SETFL) && defined (FASYNC)
98 if (!strchr (name
, ':'))
101 error ("Only <host>:<port> is supported on this platform.");
103 remote_desc
= open (name
, O_RDWR
);
105 perror_with_name ("Could not open remote device");
109 struct termios termios
;
110 tcgetattr (remote_desc
, &termios
);
115 termios
.c_cflag
&= ~(CSIZE
| PARENB
);
116 termios
.c_cflag
|= CLOCAL
| CS8
;
117 termios
.c_cc
[VMIN
] = 1;
118 termios
.c_cc
[VTIME
] = 0;
120 tcsetattr (remote_desc
, TCSANOW
, &termios
);
126 struct termio termio
;
127 ioctl (remote_desc
, TCGETA
, &termio
);
132 termio
.c_cflag
&= ~(CSIZE
| PARENB
);
133 termio
.c_cflag
|= CLOCAL
| CS8
;
134 termio
.c_cc
[VMIN
] = 1;
135 termio
.c_cc
[VTIME
] = 0;
137 ioctl (remote_desc
, TCSETA
, &termio
);
145 ioctl (remote_desc
, TIOCGETP
, &sg
);
147 ioctl (remote_desc
, TIOCSETP
, &sg
);
151 fprintf (stderr
, "Remote debugging using %s\n", name
);
152 #endif /* USE_WIN32API */
157 static int winsock_initialized
;
161 struct sockaddr_in sockaddr
;
165 port_str
= strchr (name
, ':');
167 port
= atoi (port_str
+ 1);
170 if (!winsock_initialized
)
174 WSAStartup (MAKEWORD (1, 0), &wsad
);
175 winsock_initialized
= 1;
179 tmp_desc
= socket (PF_INET
, SOCK_STREAM
, IPPROTO_TCP
);
181 perror_with_name ("Can't open socket");
183 /* Allow rapid reuse of this port. */
185 setsockopt (tmp_desc
, SOL_SOCKET
, SO_REUSEADDR
, (char *) &tmp
,
188 sockaddr
.sin_family
= PF_INET
;
189 sockaddr
.sin_port
= htons (port
);
190 sockaddr
.sin_addr
.s_addr
= INADDR_ANY
;
192 if (bind (tmp_desc
, (struct sockaddr
*) &sockaddr
, sizeof (sockaddr
))
193 || listen (tmp_desc
, 1))
194 perror_with_name ("Can't bind address");
196 fprintf (stderr
, "Listening on port %d\n", port
);
199 tmp
= sizeof (sockaddr
);
200 remote_desc
= accept (tmp_desc
, (struct sockaddr
*) &sockaddr
, &tmp
);
201 if (remote_desc
== -1)
202 perror_with_name ("Accept failed");
204 /* Enable TCP keep alive process. */
206 setsockopt (tmp_desc
, SOL_SOCKET
, SO_KEEPALIVE
, (char *) &tmp
, sizeof (tmp
));
208 /* Tell TCP not to delay small packets. This greatly speeds up
209 interactive response. */
211 setsockopt (remote_desc
, IPPROTO_TCP
, TCP_NODELAY
,
212 (char *) &tmp
, sizeof (tmp
));
216 close (tmp_desc
); /* No longer need this */
218 signal (SIGPIPE
, SIG_IGN
); /* If we don't do this, then gdbserver simply
219 exits when the remote side dies. */
221 closesocket (tmp_desc
); /* No longer need this */
224 /* Convert IP address to string. */
225 fprintf (stderr
, "Remote debugging from host %s\n",
226 inet_ntoa (sockaddr
.sin_addr
));
229 #if defined(F_SETFL) && defined (FASYNC)
230 save_fcntl_flags
= fcntl (remote_desc
, F_GETFL
, 0);
231 fcntl (remote_desc
, F_SETFL
, save_fcntl_flags
| FASYNC
);
232 #if defined (F_SETOWN)
233 fcntl (remote_desc
, F_SETOWN
, getpid ());
243 closesocket (remote_desc
);
249 /* Convert hex digit A to a number. */
254 if (a
>= '0' && a
<= '9')
256 else if (a
>= 'a' && a
<= 'f')
259 error ("Reply contains invalid hex digit");
264 unhexify (char *bin
, const char *hex
, int count
)
268 for (i
= 0; i
< count
; i
++)
270 if (hex
[0] == 0 || hex
[1] == 0)
272 /* Hex string is short, or of uneven length.
273 Return the count that has been converted so far. */
276 *bin
++ = fromhex (hex
[0]) * 16 + fromhex (hex
[1]);
283 decode_address (CORE_ADDR
*addrp
, const char *start
, int len
)
290 for (i
= 0; i
< len
; i
++)
294 addr
= addr
| (fromhex (ch
) & 0x0f);
299 /* Convert number NIB to a hex digit. */
307 return 'a' + nib
- 10;
311 hexify (char *hex
, const char *bin
, int count
)
315 /* May use a length, or a nul-terminated string as input. */
317 count
= strlen (bin
);
319 for (i
= 0; i
< count
; i
++)
321 *hex
++ = tohex ((*bin
>> 4) & 0xf);
322 *hex
++ = tohex (*bin
++ & 0xf);
328 /* Convert BUFFER, binary data at least LEN bytes long, into escaped
329 binary data in OUT_BUF. Set *OUT_LEN to the length of the data
330 encoded in OUT_BUF, and return the number of bytes in OUT_BUF
331 (which may be more than *OUT_LEN due to escape characters). The
332 total number of bytes in the output buffer will be at most
336 remote_escape_output (const gdb_byte
*buffer
, int len
,
337 gdb_byte
*out_buf
, int *out_len
,
340 int input_index
, output_index
;
343 for (input_index
= 0; input_index
< len
; input_index
++)
345 gdb_byte b
= buffer
[input_index
];
347 if (b
== '$' || b
== '#' || b
== '}' || b
== '*')
349 /* These must be escaped. */
350 if (output_index
+ 2 > out_maxlen
)
352 out_buf
[output_index
++] = '}';
353 out_buf
[output_index
++] = b
^ 0x20;
357 if (output_index
+ 1 > out_maxlen
)
359 out_buf
[output_index
++] = b
;
363 *out_len
= input_index
;
367 /* Convert BUFFER, escaped data LEN bytes long, into binary data
368 in OUT_BUF. Return the number of bytes written to OUT_BUF.
369 Raise an error if the total number of bytes exceeds OUT_MAXLEN.
371 This function reverses remote_escape_output. It allows more
372 escaped characters than that function does, in particular because
373 '*' must be escaped to avoid the run-length encoding processing
374 in reading packets. */
377 remote_unescape_input (const gdb_byte
*buffer
, int len
,
378 gdb_byte
*out_buf
, int out_maxlen
)
380 int input_index
, output_index
;
385 for (input_index
= 0; input_index
< len
; input_index
++)
387 gdb_byte b
= buffer
[input_index
];
389 if (output_index
+ 1 > out_maxlen
)
390 error ("Received too much data from the target.");
394 out_buf
[output_index
++] = b
^ 0x20;
400 out_buf
[output_index
++] = b
;
404 error ("Unmatched escape character in target response.");
409 /* Send a packet to the remote machine, with error checking.
410 The data of the packet is in BUF, and the length of the
411 packet is in CNT. Returns >= 0 on success, -1 otherwise. */
414 putpkt_binary (char *buf
, int cnt
)
417 unsigned char csum
= 0;
422 buf2
= malloc (PBUFSIZ
);
424 /* Copy the packet into buffer BUF2, encapsulating it
425 and giving it a checksum. */
430 for (i
= 0; i
< cnt
; i
++)
436 *p
++ = tohex ((csum
>> 4) & 0xf);
437 *p
++ = tohex (csum
& 0xf);
441 /* Send it over and over until we get a positive ack. */
447 if (send (remote_desc
, buf2
, p
- buf2
, 0) != p
- buf2
)
449 perror ("putpkt(write)");
455 fprintf (stderr
, "putpkt (\"%s\"); [looking for ack]\n", buf2
);
458 cc
= recv (remote_desc
, buf3
, 1, 0);
461 fprintf (stderr
, "[received '%c' (0x%x)]\n", buf3
[0], buf3
[0]);
468 fprintf (stderr
, "putpkt(read): Got EOF\n");
470 perror ("putpkt(read)");
476 /* Check for an input interrupt while we're here. */
477 if (buf3
[0] == '\003')
478 (*the_target
->send_signal
) (SIGINT
);
480 while (buf3
[0] != '+');
483 return 1; /* Success! */
486 /* Send a packet to the remote machine, with error checking. The data
487 of the packet is in BUF, and the packet should be a NUL-terminated
488 string. Returns >= 0 on success, -1 otherwise. */
493 return putpkt_binary (buf
, strlen (buf
));
498 /* Come here when we get an input interrupt from the remote side. This
499 interrupt should only be active while we are waiting for the child to do
500 something. About the only thing that should come through is a ^C, which
501 will cause us to send a SIGINT to the child. */
504 input_interrupt (int unused
)
507 struct timeval immediate
= { 0, 0 };
509 /* Protect against spurious interrupts. This has been observed to
510 be a problem under NetBSD 1.4 and 1.5. */
513 FD_SET (remote_desc
, &readset
);
514 if (select (remote_desc
+ 1, &readset
, 0, 0, &immediate
) > 0)
519 cc
= recv (remote_desc
, &c
, 1, 0);
521 if (cc
!= 1 || c
!= '\003')
523 fprintf (stderr
, "input_interrupt, count = %d c = %d ('%c')\n",
528 (*the_target
->send_signal
) (SIGINT
);
533 /* Asynchronous I/O support. SIGIO must be enabled when waiting, in order to
534 accept Control-C from the client, and must be disabled when talking to
538 block_async_io (void)
542 sigemptyset (&sigio_set
);
543 sigaddset (&sigio_set
, SIGIO
);
544 sigprocmask (SIG_BLOCK
, &sigio_set
, NULL
);
549 unblock_async_io (void)
553 sigemptyset (&sigio_set
);
554 sigaddset (&sigio_set
, SIGIO
);
555 sigprocmask (SIG_UNBLOCK
, &sigio_set
, NULL
);
559 /* Current state of asynchronous I/O. */
560 static int async_io_enabled
;
562 /* Enable asynchronous I/O. */
564 enable_async_io (void)
566 if (async_io_enabled
)
570 signal (SIGIO
, input_interrupt
);
572 async_io_enabled
= 1;
575 /* Disable asynchronous I/O. */
577 disable_async_io (void)
579 if (!async_io_enabled
)
583 signal (SIGIO
, SIG_IGN
);
585 async_io_enabled
= 0;
588 /* Returns next char from remote GDB. -1 if error. */
593 static unsigned char buf
[BUFSIZ
];
594 static int bufcnt
= 0;
595 static unsigned char *bufp
;
600 bufcnt
= recv (remote_desc
, buf
, sizeof (buf
), 0);
605 fprintf (stderr
, "readchar: Got EOF\n");
614 return *bufp
++ & 0x7f;
617 /* Read a packet from the remote machine, with error checking,
618 and store it in BUF. Returns length of packet, or negative if error. */
624 unsigned char csum
, c1
, c2
;
638 fprintf (stderr
, "[getpkt: discarding char '%c']\n", c
);
659 c1
= fromhex (readchar ());
660 c2
= fromhex (readchar ());
662 if (csum
== (c1
<< 4) + c2
)
665 fprintf (stderr
, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
666 (c1
<< 4) + c2
, csum
, buf
);
667 send (remote_desc
, "-", 1, 0);
672 fprintf (stderr
, "getpkt (\"%s\"); [sending ack] \n", buf
);
676 send (remote_desc
, "+", 1, 0);
680 fprintf (stderr
, "[sent ack]\n");
696 write_enn (char *buf
)
698 /* Some day, we should define the meanings of the error codes... */
706 convert_int_to_ascii (unsigned char *from
, char *to
, int n
)
713 nib
= ((ch
& 0xf0) >> 4) & 0x0f;
723 convert_ascii_to_int (char *from
, unsigned char *to
, int n
)
728 nib1
= fromhex (*from
++);
729 nib2
= fromhex (*from
++);
730 *to
++ = (((nib1
& 0x0f) << 4) & 0xf0) | (nib2
& 0x0f);
735 outreg (int regno
, char *buf
)
737 if ((regno
>> 12) != 0)
738 *buf
++ = tohex ((regno
>> 12) & 0xf);
739 if ((regno
>> 8) != 0)
740 *buf
++ = tohex ((regno
>> 8) & 0xf);
741 *buf
++ = tohex ((regno
>> 4) & 0xf);
742 *buf
++ = tohex (regno
& 0xf);
744 collect_register_as_string (regno
, buf
);
745 buf
+= 2 * register_size (regno
);
752 new_thread_notify (int id
)
756 /* The `n' response is not yet part of the remote protocol. Do nothing. */
760 if (server_waiting
== 0)
763 sprintf (own_buf
, "n%x", id
);
770 dead_thread_notify (int id
)
774 /* The `x' response is not yet part of the remote protocol. Do nothing. */
778 sprintf (own_buf
, "x%x", id
);
785 prepare_resume_reply (char *buf
, char status
, unsigned char sig
)
791 nib
= ((sig
& 0xf0) >> 4);
792 *buf
++ = tohex (nib
);
794 *buf
++ = tohex (nib
);
798 const char **regp
= gdbserver_expedite_regs
;
800 if (the_target
->stopped_by_watchpoint
!= NULL
801 && (*the_target
->stopped_by_watchpoint
) ())
806 strncpy (buf
, "watch:", 6);
809 addr
= (*the_target
->stopped_data_address
) ();
811 /* Convert each byte of the address into two hexadecimal chars.
812 Note that we take sizeof (void *) instead of sizeof (addr);
813 this is to avoid sending a 64-bit address to a 32-bit GDB. */
814 for (i
= sizeof (void *) * 2; i
> 0; i
--)
816 *buf
++ = tohex ((addr
>> (i
- 1) * 4) & 0xf);
823 buf
= outreg (find_regno (*regp
), buf
);
827 /* Formerly, if the debugger had not used any thread features we would not
828 burden it with a thread status response. This was for the benefit of
829 GDB 4.13 and older. However, in recent GDB versions the check
830 (``if (cont_thread != 0)'') does not have the desired effect because of
831 sillyness in the way that the remote protocol handles specifying a thread.
832 Since thread support relies on qSymbol support anyway, assume GDB can handle
837 unsigned int gdb_id_from_wait
;
839 /* FIXME right place to set this? */
840 thread_from_wait
= ((struct inferior_list_entry
*)current_inferior
)->id
;
841 gdb_id_from_wait
= thread_to_gdb_id (current_inferior
);
844 fprintf (stderr
, "Writing resume reply for %ld\n\n", thread_from_wait
);
845 /* This if (1) ought to be unnecessary. But remote_wait in GDB
846 will claim this event belongs to inferior_ptid if we do not
847 specify a thread, and there's no way for gdbserver to know
848 what inferior_ptid is. */
849 if (1 || old_thread_from_wait
!= thread_from_wait
)
851 general_thread
= thread_from_wait
;
852 sprintf (buf
, "thread:%x;", gdb_id_from_wait
);
854 old_thread_from_wait
= thread_from_wait
;
858 /* For W and X, we're done. */
863 decode_m_packet (char *from
, CORE_ADDR
*mem_addr_ptr
, unsigned int *len_ptr
)
867 *mem_addr_ptr
= *len_ptr
= 0;
869 while ((ch
= from
[i
++]) != ',')
871 *mem_addr_ptr
= *mem_addr_ptr
<< 4;
872 *mem_addr_ptr
|= fromhex (ch
) & 0x0f;
875 for (j
= 0; j
< 4; j
++)
877 if ((ch
= from
[i
++]) == 0)
879 *len_ptr
= *len_ptr
<< 4;
880 *len_ptr
|= fromhex (ch
) & 0x0f;
885 decode_M_packet (char *from
, CORE_ADDR
*mem_addr_ptr
, unsigned int *len_ptr
,
890 *mem_addr_ptr
= *len_ptr
= 0;
892 while ((ch
= from
[i
++]) != ',')
894 *mem_addr_ptr
= *mem_addr_ptr
<< 4;
895 *mem_addr_ptr
|= fromhex (ch
) & 0x0f;
898 while ((ch
= from
[i
++]) != ':')
900 *len_ptr
= *len_ptr
<< 4;
901 *len_ptr
|= fromhex (ch
) & 0x0f;
904 convert_ascii_to_int (&from
[i
++], to
, *len_ptr
);
908 decode_X_packet (char *from
, int packet_len
, CORE_ADDR
*mem_addr_ptr
,
909 unsigned int *len_ptr
, unsigned char *to
)
913 *mem_addr_ptr
= *len_ptr
= 0;
915 while ((ch
= from
[i
++]) != ',')
917 *mem_addr_ptr
= *mem_addr_ptr
<< 4;
918 *mem_addr_ptr
|= fromhex (ch
) & 0x0f;
921 while ((ch
= from
[i
++]) != ':')
923 *len_ptr
= *len_ptr
<< 4;
924 *len_ptr
|= fromhex (ch
) & 0x0f;
927 if (remote_unescape_input ((const gdb_byte
*) &from
[i
], packet_len
- i
,
928 to
, *len_ptr
) != *len_ptr
)
934 /* Ask GDB for the address of NAME, and return it in ADDRP if found.
935 Returns 1 if the symbol is found, 0 if it is not, -1 on error. */
938 look_up_one_symbol (const char *name
, CORE_ADDR
*addrp
)
940 char own_buf
[266], *p
, *q
;
942 struct sym_cache
*sym
;
944 /* Check the cache first. */
945 for (sym
= symbol_cache
; sym
; sym
= sym
->next
)
946 if (strcmp (name
, sym
->name
) == 0)
952 /* If we've passed the call to thread_db_look_up_symbols, then
953 anything not in the cache must not exist; we're not interested
954 in any libraries loaded after that point, only in symbols in
955 libpthread.so. It might not be an appropriate time to look
956 up a symbol, e.g. while we're trying to fetch registers. */
957 if (all_symbols_looked_up
)
960 /* Send the request. */
961 strcpy (own_buf
, "qSymbol:");
962 hexify (own_buf
+ strlen ("qSymbol:"), name
, strlen (name
));
963 if (putpkt (own_buf
) < 0)
966 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
967 len
= getpkt (own_buf
);
971 if (strncmp (own_buf
, "qSymbol:", strlen ("qSymbol:")) != 0)
973 /* Malformed response. */
976 fprintf (stderr
, "Malformed response to qSymbol, ignoring.\n");
983 p
= own_buf
+ strlen ("qSymbol:");
985 while (*q
&& *q
!= ':')
988 /* Make sure we found a value for the symbol. */
989 if (p
== q
|| *q
== '\0')
992 decode_address (addrp
, p
, q
- p
);
994 /* Save the symbol in our cache. */
995 sym
= malloc (sizeof (*sym
));
996 sym
->name
= strdup (name
);
998 sym
->next
= symbol_cache
;