1 /* Remote utility routines for the remote server for GDB.
2 Copyright (C) 1986-2024 Free Software Foundation, Inc.
4 This file is part of GDB.
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.
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.
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/>. */
23 #include "gdbthread.h"
27 #include "gdbsupport/common-gdbthread.h"
28 #include "gdbsupport/rsp-low.h"
29 #include "gdbsupport/scope-exit.h"
30 #include "gdbsupport/netstuff.h"
31 #include "gdbsupport/filestuff.h"
32 #include "gdbsupport/gdb-sigmask.h"
35 #include <sys/ioctl.h>
41 #include <netinet/in.h>
44 #include <sys/socket.h>
49 #if HAVE_NETINET_TCP_H
50 #include <netinet/tcp.h>
53 #include <sys/ioctl.h>
61 #include "gdbsupport/gdb_sys_time.h"
64 #include <arpa/inet.h>
72 #ifndef HAVE_SOCKLEN_T
73 typedef int socklen_t
;
76 #ifndef IN_PROCESS_AGENT
78 /* Extra value for readchar_callback. */
80 /* The callback is currently not scheduled. */
84 /* Status of the readchar callback.
85 Either NOT_SCHEDULED or the callback id. */
86 static int readchar_callback
= NOT_SCHEDULED
;
88 static int readchar (void);
89 static void reset_readchar (void);
90 static void reschedule (void);
92 /* A cache entry for a successfully looked-up symbol. */
97 struct sym_cache
*next
;
100 static int remote_is_stdio
= 0;
102 static int remote_desc
= -1;
103 static int listen_desc
= -1;
106 /* gnulib wraps these as macros, undo them. */
110 # define read(fd, buf, len) recv (fd, (char *) buf, len, 0)
111 # define write(fd, buf, len) send (fd, (char *) buf, len, 0)
117 return remote_desc
!= -1;
120 /* Return true if the remote connection is over stdio. */
123 remote_connection_is_stdio (void)
125 return remote_is_stdio
;
129 enable_async_notification (int fd
)
131 #if defined(F_SETFL) && defined (FASYNC)
132 int save_fcntl_flags
;
134 save_fcntl_flags
= fcntl (fd
, F_GETFL
, 0);
135 fcntl (fd
, F_SETFL
, save_fcntl_flags
| FASYNC
);
136 #if defined (F_SETOWN)
137 fcntl (fd
, F_SETOWN
, getpid ());
143 handle_accept_event (int err
, gdb_client_data client_data
)
145 struct sockaddr_storage sockaddr
;
146 socklen_t len
= sizeof (sockaddr
);
148 threads_debug_printf ("handling possible accept event");
150 remote_desc
= accept (listen_desc
, (struct sockaddr
*) &sockaddr
, &len
);
151 if (remote_desc
== -1)
152 perror_with_name ("Accept failed");
154 /* Enable TCP keep alive process. */
156 setsockopt (remote_desc
, SOL_SOCKET
, SO_KEEPALIVE
,
157 (char *) &tmp
, sizeof (tmp
));
159 /* Tell TCP not to delay small packets. This greatly speeds up
160 interactive response. */
162 setsockopt (remote_desc
, IPPROTO_TCP
, TCP_NODELAY
,
163 (char *) &tmp
, sizeof (tmp
));
166 signal (SIGPIPE
, SIG_IGN
); /* If we don't do this, then gdbserver simply
167 exits when the remote side dies. */
173 close (listen_desc
); /* No longer need this */
175 closesocket (listen_desc
); /* No longer need this */
179 /* Even if !RUN_ONCE no longer notice new connections. Still keep the
180 descriptor open for add_file_handler to wait for a new connection. */
181 delete_file_handler (listen_desc
);
183 /* Convert IP address to string. */
184 char orig_host
[GDB_NI_MAX_ADDR
], orig_port
[GDB_NI_MAX_PORT
];
186 int r
= getnameinfo ((struct sockaddr
*) &sockaddr
, len
,
187 orig_host
, sizeof (orig_host
),
188 orig_port
, sizeof (orig_port
),
189 NI_NUMERICHOST
| NI_NUMERICSERV
);
192 fprintf (stderr
, _("Could not obtain remote address: %s\n"),
195 fprintf (stderr
, _("Remote debugging from host %s, port %s\n"),
196 orig_host
, orig_port
);
198 enable_async_notification (remote_desc
);
200 /* Register the event loop handler. */
201 add_file_handler (remote_desc
, handle_serial_event
, NULL
, "remote-net");
203 /* We have a new GDB connection now. If we were disconnected
204 tracing, there's a window where the target could report a stop
205 event to the event loop, and since we have a connection now, we'd
206 try to send vStopped notifications to GDB. But, don't do that
207 until GDB as selected all-stop/non-stop, and has queried the
208 threads' status ('?'). */
212 /* Prepare for a later connection to a remote debugger.
213 NAME is the filename used for communication. */
216 remote_prepare (const char *name
)
218 client_state
&cs
= get_client_state ();
220 static int winsock_initialized
;
225 if (strcmp (name
, STDIO_CONNECTION_NAME
) == 0)
227 /* We need to record fact that we're using stdio sooner than the
228 call to remote_open so start_inferior knows the connection is
231 cs
.transport_is_reliable
= 1;
235 struct addrinfo hint
;
236 struct addrinfo
*ainfo
;
238 memset (&hint
, 0, sizeof (hint
));
239 /* Assume no prefix will be passed, therefore we should use
241 hint
.ai_family
= AF_UNSPEC
;
242 hint
.ai_socktype
= SOCK_STREAM
;
243 hint
.ai_protocol
= IPPROTO_TCP
;
245 parsed_connection_spec parsed
246 = parse_connection_spec_without_prefix (name
, &hint
);
248 if (parsed
.port_str
.empty ())
250 cs
.transport_is_reliable
= 0;
255 if (!winsock_initialized
)
259 WSAStartup (MAKEWORD (1, 0), &wsad
);
260 winsock_initialized
= 1;
264 int r
= getaddrinfo (parsed
.host_str
.c_str (), parsed
.port_str
.c_str (),
268 error (_("%s: cannot resolve name: %s"), name
, gai_strerror (r
));
270 scoped_free_addrinfo
freeaddrinfo (ainfo
);
272 struct addrinfo
*iter
;
274 for (iter
= ainfo
; iter
!= NULL
; iter
= iter
->ai_next
)
276 listen_desc
= gdb_socket_cloexec (iter
->ai_family
, iter
->ai_socktype
,
279 if (listen_desc
>= 0)
284 perror_with_name ("Can't open socket");
286 /* Allow rapid reuse of this port. */
288 setsockopt (listen_desc
, SOL_SOCKET
, SO_REUSEADDR
, (char *) &tmp
,
291 switch (iter
->ai_family
)
294 ((struct sockaddr_in
*) iter
->ai_addr
)->sin_addr
.s_addr
= INADDR_ANY
;
297 ((struct sockaddr_in6
*) iter
->ai_addr
)->sin6_addr
= in6addr_any
;
300 internal_error (_("Invalid 'ai_family' %d\n"), iter
->ai_family
);
303 if (bind (listen_desc
, iter
->ai_addr
, iter
->ai_addrlen
) != 0)
304 perror_with_name ("Can't bind address");
306 if (listen (listen_desc
, 1) != 0)
307 perror_with_name ("Can't listen on socket");
309 cs
.transport_is_reliable
= 1;
312 /* Open a connection to a remote debugger.
313 NAME is the filename used for communication. */
316 remote_open (const char *name
)
318 const char *port_str
;
320 port_str
= strchr (name
, ':');
322 if (port_str
== NULL
)
323 error ("Only HOST:PORT is supported on this platform.");
326 if (strcmp (name
, STDIO_CONNECTION_NAME
) == 0)
328 fprintf (stderr
, "Remote debugging using stdio\n");
330 /* Use stdin as the handle of the connection.
331 We only select on reads, for example. */
332 remote_desc
= fileno (stdin
);
334 enable_async_notification (remote_desc
);
336 /* Register the event loop handler. */
337 add_file_handler (remote_desc
, handle_serial_event
, NULL
, "remote-stdio");
340 else if (port_str
== NULL
)
344 if (stat (name
, &statbuf
) == 0
345 && (S_ISCHR (statbuf
.st_mode
) || S_ISFIFO (statbuf
.st_mode
)))
346 remote_desc
= open (name
, O_RDWR
);
354 perror_with_name ("Could not open remote device");
358 struct termios termios
;
359 tcgetattr (remote_desc
, &termios
);
364 termios
.c_cflag
&= ~(CSIZE
| PARENB
);
365 termios
.c_cflag
|= CLOCAL
| CS8
;
366 termios
.c_cc
[VMIN
] = 1;
367 termios
.c_cc
[VTIME
] = 0;
369 tcsetattr (remote_desc
, TCSANOW
, &termios
);
373 fprintf (stderr
, "Remote debugging using %s\n", name
);
375 enable_async_notification (remote_desc
);
377 /* Register the event loop handler. */
378 add_file_handler (remote_desc
, handle_serial_event
, NULL
,
381 #endif /* USE_WIN32API */
384 char listen_port
[GDB_NI_MAX_PORT
];
385 struct sockaddr_storage sockaddr
;
386 socklen_t len
= sizeof (sockaddr
);
388 if (getsockname (listen_desc
, (struct sockaddr
*) &sockaddr
, &len
) < 0)
389 perror_with_name ("Can't determine port");
391 int r
= getnameinfo ((struct sockaddr
*) &sockaddr
, len
,
393 listen_port
, sizeof (listen_port
),
397 fprintf (stderr
, _("Can't obtain port where we are listening: %s"),
400 fprintf (stderr
, _("Listening on port %s\n"), listen_port
);
404 /* Register the event loop handler. */
405 add_file_handler (listen_desc
, handle_accept_event
, NULL
,
413 delete_file_handler (remote_desc
);
418 closesocket (remote_desc
);
420 if (! remote_connection_is_stdio ())
430 #ifndef IN_PROCESS_AGENT
433 decode_address (CORE_ADDR
*addrp
, const char *start
, int len
)
440 for (i
= 0; i
< len
; i
++)
444 addr
= addr
| (fromhex (ch
) & 0x0f);
450 decode_address_to_semicolon (CORE_ADDR
*addrp
, const char *start
)
455 while (*end
!= '\0' && *end
!= ';')
458 decode_address (addrp
, start
, end
- start
);
467 #ifndef IN_PROCESS_AGENT
469 /* Look for a sequence of characters which can be run-length encoded.
470 If there are any, update *CSUM and *P. Otherwise, output the
471 single character. Return the number of characters consumed. */
474 try_rle (char *buf
, int remaining
, unsigned char *csum
, char **p
)
478 /* Always output the character. */
482 /* Don't go past '~'. */
486 for (n
= 1; n
< remaining
; n
++)
487 if (buf
[n
] != buf
[0])
490 /* N is the index of the first character not the same as buf[0].
491 buf[0] is counted twice, so by decrementing N, we get the number
492 of characters the RLE sequence will replace. */
498 /* Skip the frame characters. The manual says to skip '+' and '-'
499 also, but there's no reason to. Unfortunately these two unusable
500 characters double the encoded length of a four byte zero
502 while (n
+ 29 == '$' || n
+ 29 == '#')
515 #ifndef IN_PROCESS_AGENT
517 /* Write a PTID to BUF. Returns BUF+CHARACTERS_WRITTEN. */
520 write_ptid (char *buf
, ptid_t ptid
)
522 client_state
&cs
= get_client_state ();
525 if (cs
.multi_process
)
529 buf
+= sprintf (buf
, "p-%x.", -pid
);
531 buf
+= sprintf (buf
, "p%x.", pid
);
535 buf
+= sprintf (buf
, "-%x", -tid
);
537 buf
+= sprintf (buf
, "%x", tid
);
543 hex_or_minus_one (const char *buf
, const char **obuf
)
547 if (startswith (buf
, "-1"))
553 buf
= unpack_varlen_hex (buf
, &ret
);
561 /* Extract a PTID from BUF. If non-null, OBUF is set to the to one
562 passed the last parsed char. Returns null_ptid on error. */
564 read_ptid (const char *buf
, const char **obuf
)
573 /* Multi-process ptid. */
574 pp
= unpack_varlen_hex (p
+ 1, &pid
);
576 error ("invalid remote ptid: %s\n", p
);
580 ULONGEST tid
= hex_or_minus_one (p
, &pp
);
585 return ptid_t (pid
, tid
);
588 /* No multi-process. Just a tid. */
589 ULONGEST tid
= hex_or_minus_one (p
, &pp
);
591 /* Since GDB is not sending a process id (multi-process extensions
592 are off), then there's only one process. Default to the first in
594 int pid
= get_first_process ()->pid
;
599 return ptid_t (pid
, tid
);
602 /* Write COUNT bytes in BUF to the client.
603 The result is the number of bytes written or -1 if error.
604 This may return less than COUNT. */
607 write_prim (const void *buf
, int count
)
609 if (remote_connection_is_stdio ())
610 return write (fileno (stdout
), buf
, count
);
612 return write (remote_desc
, buf
, count
);
615 /* Read COUNT bytes from the client and store in BUF.
616 The result is the number of bytes read or -1 if error.
617 This may return less than COUNT. */
620 read_prim (void *buf
, int count
)
622 if (remote_connection_is_stdio ())
623 return read (fileno (stdin
), buf
, count
);
625 return read (remote_desc
, buf
, count
);
628 /* Send a packet to the remote machine, with error checking.
629 The data of the packet is in BUF, and the length of the
630 packet is in CNT. Returns >= 0 on success, -1 otherwise. */
633 putpkt_binary_1 (char *buf
, int cnt
, int is_notif
)
635 client_state
&cs
= get_client_state ();
637 unsigned char csum
= 0;
642 SCOPE_EXIT
{ suppressed_remote_debug
= false; };
644 buf2
= (char *) xmalloc (strlen ("$") + cnt
+ strlen ("#nn") + 1);
646 /* Copy the packet into buffer BUF2, encapsulating it
647 and giving it a checksum. */
655 for (i
= 0; i
< cnt
;)
656 i
+= try_rle (buf
+ i
, cnt
- i
, &csum
, &p
);
659 *p
++ = tohex ((csum
>> 4) & 0xf);
660 *p
++ = tohex (csum
& 0xf);
664 /* Send it over and over until we get a positive ack. */
668 if (write_prim (buf2
, p
- buf2
) != p
- buf2
)
670 perror ("putpkt(write)");
675 if (cs
.noack_mode
|| is_notif
)
677 /* Don't expect an ack then. */
678 remote_debug_printf ("putpkt (\"%s\"); [%s]",
679 (suppressed_remote_debug
? "..." : buf2
),
680 (is_notif
? "notif" : "noack mode"));
685 remote_debug_printf ("putpkt (\"%s\"); [looking for ack]",
686 (suppressed_remote_debug
? "..." : buf2
));
696 remote_debug_printf ("[received '%c' (0x%x)]", cc
, cc
);
698 /* Check for an input interrupt while we're here. */
699 if (cc
== '\003' && current_thread
!= NULL
)
700 the_target
->request_interrupt ();
705 return 1; /* Success! */
709 putpkt_binary (char *buf
, int cnt
)
711 return putpkt_binary_1 (buf
, cnt
, 0);
714 /* Send a packet to the remote machine, with error checking. The data
715 of the packet is in BUF, and the packet should be a NUL-terminated
716 string. Returns >= 0 on success, -1 otherwise. */
721 return putpkt_binary (buf
, strlen (buf
));
725 putpkt_notif (char *buf
)
727 return putpkt_binary_1 (buf
, strlen (buf
), 1);
730 /* Come here when we get an input interrupt from the remote side. This
731 interrupt should only be active while we are waiting for the child to do
732 something. Thus this assumes readchar:bufcnt is 0.
733 About the only thing that should come through is a ^C, which
734 will cause us to request child interruption. */
737 input_interrupt (int unused
)
740 struct timeval immediate
= { 0, 0 };
742 /* Protect against spurious interrupts. This has been observed to
743 be a problem under NetBSD 1.4 and 1.5. */
746 FD_SET (remote_desc
, &readset
);
747 if (select (remote_desc
+ 1, &readset
, 0, 0, &immediate
) > 0)
752 cc
= read_prim (&c
, 1);
756 fprintf (stderr
, "client connection closed\n");
759 else if (cc
!= 1 || c
!= '\003')
761 fprintf (stderr
, "input_interrupt, count = %d c = %d ", cc
, c
);
763 fprintf (stderr
, "('%c')\n", c
);
765 fprintf (stderr
, "('\\x%02x')\n", c
& 0xff);
769 the_target
->request_interrupt ();
773 /* Check if the remote side sent us an interrupt request (^C). */
775 check_remote_input_interrupt_request (void)
777 /* This function may be called before establishing communications,
778 therefore we need to validate the remote descriptor. */
780 if (remote_desc
== -1)
786 /* Asynchronous I/O support. SIGIO must be unblocked when waiting,
787 in order to accept Control-C from the client, and must be blocked
788 when talking to the client. */
791 block_unblock_async_io (int block
)
796 sigemptyset (&sigio_set
);
797 sigaddset (&sigio_set
, SIGIO
);
798 gdb_sigmask (block
? SIG_BLOCK
: SIG_UNBLOCK
, &sigio_set
, NULL
);
802 /* Current state of asynchronous I/O. */
803 static int async_io_enabled
;
805 /* Enable asynchronous I/O. */
807 enable_async_io (void)
809 if (async_io_enabled
)
812 block_unblock_async_io (0);
814 async_io_enabled
= 1;
817 /* Disable asynchronous I/O. */
819 disable_async_io (void)
821 if (!async_io_enabled
)
824 block_unblock_async_io (1);
826 async_io_enabled
= 0;
830 initialize_async_io (void)
832 /* Make sure that async I/O starts blocked. */
833 async_io_enabled
= 1;
836 /* Install the signal handler. */
838 signal (SIGIO
, input_interrupt
);
842 /* Internal buffer used by readchar.
843 These are global to readchar because reschedule_remote needs to be
844 able to tell whether the buffer is empty. */
846 static unsigned char readchar_buf
[BUFSIZ
];
847 static int readchar_bufcnt
= 0;
848 static unsigned char *readchar_bufp
;
850 /* Returns next char from remote GDB. -1 if error. */
857 if (readchar_bufcnt
== 0)
859 readchar_bufcnt
= read_prim (readchar_buf
, sizeof (readchar_buf
));
861 if (readchar_bufcnt
<= 0)
863 if (readchar_bufcnt
== 0)
865 remote_debug_printf ("readchar: Got EOF");
873 readchar_bufp
= readchar_buf
;
877 ch
= *readchar_bufp
++;
882 /* Reset the readchar state machine. */
885 reset_readchar (void)
888 if (readchar_callback
!= NOT_SCHEDULED
)
890 delete_timer (readchar_callback
);
891 readchar_callback
= NOT_SCHEDULED
;
895 /* Process remaining data in readchar_buf. */
898 process_remaining (void *context
)
900 /* This is a one-shot event. */
901 readchar_callback
= NOT_SCHEDULED
;
903 if (readchar_bufcnt
> 0)
904 handle_serial_event (0, NULL
);
907 /* If there is still data in the buffer, queue another event to process it,
908 we can't sleep in select yet. */
913 if (readchar_bufcnt
> 0 && readchar_callback
== NOT_SCHEDULED
)
914 readchar_callback
= create_timer (0, process_remaining
, NULL
);
917 /* Read a packet from the remote machine, with error checking,
918 and store it in BUF. Returns length of packet, or negative if error. */
923 client_state
&cs
= get_client_state ();
925 unsigned char csum
, c1
, c2
;
936 /* The '\003' may appear before or after each packet, so
937 check for an input interrupt. */
940 the_target
->request_interrupt ();
947 remote_debug_printf ("[getpkt: discarding char '%c']", c
);
966 c1
= fromhex (readchar ());
967 c2
= fromhex (readchar ());
969 if (csum
== (c1
<< 4) + c2
)
975 "Bad checksum, sentsum=0x%x, csum=0x%x, "
976 "buf=%s [no-ack-mode, Bad medium?]\n",
977 (c1
<< 4) + c2
, csum
, buf
);
978 /* Not much we can do, GDB wasn't expecting an ack/nac. */
982 fprintf (stderr
, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
983 (c1
<< 4) + c2
, csum
, buf
);
984 if (write_prim ("-", 1) != 1)
990 remote_debug_printf ("getpkt (\"%s\"); [sending ack]", buf
);
992 if (write_prim ("+", 1) != 1)
995 remote_debug_printf ("[sent ack]");
998 remote_debug_printf ("getpkt (\"%s\"); [no ack sent]", buf
);
1000 /* The readchar above may have already read a '\003' out of the socket
1001 and moved it to the local buffer. For example, when GDB sends
1002 vCont;c immediately followed by interrupt (see
1003 gdb.base/interrupt-noterm.exp). As soon as we see the vCont;c, we'll
1004 resume the inferior and wait. Since we've already moved the '\003'
1005 to the local buffer, SIGIO won't help. In that case, if we don't
1006 check for interrupt after the vCont;c packet, the interrupt character
1007 would stay in the buffer unattended until after the next (unrelated)
1009 while (readchar_bufcnt
> 0 && *readchar_bufp
== '\003')
1011 /* Consume the interrupt character in the buffer. */
1013 the_target
->request_interrupt ();
1020 write_ok (char *buf
)
1028 write_enn (char *buf
)
1030 /* Some day, we should define the meanings of the error codes... */
1039 #ifndef IN_PROCESS_AGENT
1042 outreg (struct regcache
*regcache
, int regno
, char *buf
)
1044 if ((regno
>> 12) != 0)
1045 *buf
++ = tohex ((regno
>> 12) & 0xf);
1046 if ((regno
>> 8) != 0)
1047 *buf
++ = tohex ((regno
>> 8) & 0xf);
1048 *buf
++ = tohex ((regno
>> 4) & 0xf);
1049 *buf
++ = tohex (regno
& 0xf);
1051 collect_register_as_string (regcache
, regno
, buf
);
1052 buf
+= 2 * register_size (regcache
->tdesc
, regno
);
1059 prepare_resume_reply (char *buf
, ptid_t ptid
, const target_waitstatus
&status
)
1061 client_state
&cs
= get_client_state ();
1062 threads_debug_printf ("Writing resume reply for %s: %s",
1063 target_pid_to_str (ptid
).c_str (),
1064 status
.to_string ().c_str ());
1066 switch (status
.kind ())
1068 case TARGET_WAITKIND_STOPPED
:
1069 case TARGET_WAITKIND_FORKED
:
1070 case TARGET_WAITKIND_VFORKED
:
1071 case TARGET_WAITKIND_VFORK_DONE
:
1072 case TARGET_WAITKIND_THREAD_CLONED
:
1073 case TARGET_WAITKIND_EXECD
:
1074 case TARGET_WAITKIND_THREAD_CREATED
:
1075 case TARGET_WAITKIND_SYSCALL_ENTRY
:
1076 case TARGET_WAITKIND_SYSCALL_RETURN
:
1078 struct regcache
*regcache
;
1079 char *buf_start
= buf
;
1081 if ((status
.kind () == TARGET_WAITKIND_FORKED
1082 && cs
.report_fork_events
)
1083 || (status
.kind () == TARGET_WAITKIND_VFORKED
1084 && cs
.report_vfork_events
)
1085 || status
.kind () == TARGET_WAITKIND_THREAD_CLONED
)
1087 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1089 auto kind_remote_str
= [] (target_waitkind kind
)
1093 case TARGET_WAITKIND_FORKED
:
1095 case TARGET_WAITKIND_VFORKED
:
1097 case TARGET_WAITKIND_THREAD_CLONED
:
1100 gdb_assert_not_reached ("unhandled kind");
1104 const char *event
= kind_remote_str (status
.kind ());
1106 sprintf (buf
, "T%02x%s:", signal
, event
);
1107 buf
+= strlen (buf
);
1108 buf
= write_ptid (buf
, status
.child_ptid ());
1111 else if (status
.kind () == TARGET_WAITKIND_VFORK_DONE
1112 && cs
.report_vfork_events
)
1114 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1116 sprintf (buf
, "T%02xvforkdone:;", signal
);
1118 else if (status
.kind () == TARGET_WAITKIND_EXECD
&& cs
.report_exec_events
)
1120 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1121 const char *event
= "exec";
1122 char hexified_pathname
[PATH_MAX
* 2];
1124 sprintf (buf
, "T%02x%s:", signal
, event
);
1125 buf
+= strlen (buf
);
1127 /* Encode pathname to hexified format. */
1128 bin2hex ((const gdb_byte
*) status
.execd_pathname (),
1130 strlen (status
.execd_pathname ()));
1132 sprintf (buf
, "%s;", hexified_pathname
);
1133 buf
+= strlen (buf
);
1135 else if (status
.kind () == TARGET_WAITKIND_THREAD_CREATED
1136 && cs
.report_thread_events
)
1138 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1140 sprintf (buf
, "T%02xcreate:;", signal
);
1142 else if (status
.kind () == TARGET_WAITKIND_SYSCALL_ENTRY
1143 || status
.kind () == TARGET_WAITKIND_SYSCALL_RETURN
)
1145 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1146 const char *event
= (status
.kind () == TARGET_WAITKIND_SYSCALL_ENTRY
1147 ? "syscall_entry" : "syscall_return");
1149 sprintf (buf
, "T%02x%s:%x;", signal
, event
,
1150 status
.syscall_number ());
1153 sprintf (buf
, "T%02x", status
.sig ());
1155 if (disable_packet_T
)
1157 /* This is a bit (OK, a lot) of a kludge, however, this isn't
1158 really a user feature, but exists only so GDB can use the
1159 gdbserver to test handling of the 'S' stop reply packet, so
1160 we would rather this code be as simple as possible.
1162 By this point we've started to build the 'T' stop packet,
1163 and it should look like 'Txx....' where 'x' is a hex digit.
1164 An 'S' stop packet always looks like 'Sxx', so all we do
1165 here is convert the buffer from a T packet to an S packet
1166 and the avoid adding any extra content by breaking out. */
1167 gdb_assert (buf_start
[0] == 'T');
1168 gdb_assert (isxdigit (buf_start
[1]));
1169 gdb_assert (isxdigit (buf_start
[2]));
1171 buf_start
[3] = '\0';
1175 buf
+= strlen (buf
);
1177 scoped_restore_current_thread restore_thread
;
1179 switch_to_thread (the_target
, ptid
);
1181 regcache
= get_thread_regcache (current_thread
);
1183 if (the_target
->stopped_by_watchpoint ())
1188 memcpy (buf
, "watch:", 6);
1191 addr
= the_target
->stopped_data_address ();
1193 /* Convert each byte of the address into two hexadecimal
1194 chars. Note that we take sizeof (void *) instead of
1195 sizeof (addr); this is to avoid sending a 64-bit
1196 address to a 32-bit GDB. */
1197 for (i
= sizeof (void *) * 2; i
> 0; i
--)
1198 *buf
++ = tohex ((addr
>> (i
- 1) * 4) & 0xf);
1201 else if (cs
.swbreak_feature
&& target_stopped_by_sw_breakpoint ())
1203 sprintf (buf
, "swbreak:;");
1204 buf
+= strlen (buf
);
1206 else if (cs
.hwbreak_feature
&& target_stopped_by_hw_breakpoint ())
1208 sprintf (buf
, "hwbreak:;");
1209 buf
+= strlen (buf
);
1212 /* Handle the expedited registers. */
1213 for (const std::string
&expedited_reg
:
1214 current_target_desc ()->expedite_regs
)
1215 buf
= outreg (regcache
, find_regno (regcache
->tdesc
,
1216 expedited_reg
.c_str ()), buf
);
1219 /* Formerly, if the debugger had not used any thread features
1220 we would not burden it with a thread status response. This
1221 was for the benefit of GDB 4.13 and older. However, in
1222 recent GDB versions the check (``if (cont_thread != 0)'')
1223 does not have the desired effect because of silliness in
1224 the way that the remote protocol handles specifying a
1225 thread. Since thread support relies on qSymbol support
1226 anyway, assume GDB can handle threads. */
1228 if (using_threads
&& !disable_packet_Tthread
)
1230 /* This if (1) ought to be unnecessary. But remote_wait
1231 in GDB will claim this event belongs to inferior_ptid
1232 if we do not specify a thread, and there's no way for
1233 gdbserver to know what inferior_ptid is. */
1234 if (1 || cs
.general_thread
!= ptid
)
1237 /* In non-stop, don't change the general thread behind
1240 cs
.general_thread
= ptid
;
1241 sprintf (buf
, "thread:");
1242 buf
+= strlen (buf
);
1243 buf
= write_ptid (buf
, ptid
);
1245 buf
+= strlen (buf
);
1247 core
= target_core_of_thread (ptid
);
1251 sprintf (buf
, "core:");
1252 buf
+= strlen (buf
);
1253 sprintf (buf
, "%x", core
);
1255 buf
+= strlen (buf
);
1260 if (current_process ()->dlls_changed
)
1262 strcpy (buf
, "library:;");
1263 buf
+= strlen (buf
);
1264 current_process ()->dlls_changed
= false;
1268 case TARGET_WAITKIND_EXITED
:
1269 if (cs
.multi_process
)
1270 sprintf (buf
, "W%x;process:%x",
1271 status
.exit_status (), ptid
.pid ());
1273 sprintf (buf
, "W%02x", status
.exit_status ());
1275 case TARGET_WAITKIND_SIGNALLED
:
1276 if (cs
.multi_process
)
1277 sprintf (buf
, "X%x;process:%x",
1278 status
.sig (), ptid
.pid ());
1280 sprintf (buf
, "X%02x", status
.sig ());
1282 case TARGET_WAITKIND_THREAD_EXITED
:
1283 sprintf (buf
, "w%x;", status
.exit_status ());
1284 buf
+= strlen (buf
);
1285 buf
= write_ptid (buf
, ptid
);
1287 case TARGET_WAITKIND_NO_RESUMED
:
1291 error ("unhandled waitkind");
1296 /* See remote-utils.h. */
1299 decode_m_packet_params (const char *from
, CORE_ADDR
*mem_addr_ptr
,
1300 unsigned int *len_ptr
, const char end_marker
)
1304 *mem_addr_ptr
= *len_ptr
= 0;
1306 while ((ch
= from
[i
++]) != ',')
1308 *mem_addr_ptr
= *mem_addr_ptr
<< 4;
1309 *mem_addr_ptr
|= fromhex (ch
) & 0x0f;
1312 while ((ch
= from
[i
++]) != end_marker
)
1314 *len_ptr
= *len_ptr
<< 4;
1315 *len_ptr
|= fromhex (ch
) & 0x0f;
1322 decode_m_packet (const char *from
, CORE_ADDR
*mem_addr_ptr
,
1323 unsigned int *len_ptr
)
1325 decode_m_packet_params (from
, mem_addr_ptr
, len_ptr
, '\0');
1329 decode_M_packet (const char *from
, CORE_ADDR
*mem_addr_ptr
,
1330 unsigned int *len_ptr
, unsigned char **to_p
)
1332 from
= decode_m_packet_params (from
, mem_addr_ptr
, len_ptr
, ':');
1335 *to_p
= (unsigned char *) xmalloc (*len_ptr
);
1337 hex2bin (from
, *to_p
, *len_ptr
);
1341 decode_x_packet (const char *from
, CORE_ADDR
*mem_addr_ptr
,
1342 unsigned int *len_ptr
)
1344 decode_m_packet_params (from
, mem_addr_ptr
, len_ptr
, '\0');
1348 decode_X_packet (char *from
, int packet_len
, CORE_ADDR
*mem_addr_ptr
,
1349 unsigned int *len_ptr
, unsigned char **to_p
)
1353 *mem_addr_ptr
= *len_ptr
= 0;
1355 while ((ch
= from
[i
++]) != ',')
1357 *mem_addr_ptr
= *mem_addr_ptr
<< 4;
1358 *mem_addr_ptr
|= fromhex (ch
) & 0x0f;
1361 while ((ch
= from
[i
++]) != ':')
1363 *len_ptr
= *len_ptr
<< 4;
1364 *len_ptr
|= fromhex (ch
) & 0x0f;
1368 *to_p
= (unsigned char *) xmalloc (*len_ptr
);
1370 if (remote_unescape_input ((const gdb_byte
*) &from
[i
], packet_len
- i
,
1371 *to_p
, *len_ptr
) != *len_ptr
)
1377 /* Decode a qXfer write request. */
1380 decode_xfer_write (char *buf
, int packet_len
, CORE_ADDR
*offset
,
1381 unsigned int *len
, unsigned char *data
)
1386 /* Extract the offset. */
1388 while ((ch
= *buf
++) != ':')
1390 *offset
= *offset
<< 4;
1391 *offset
|= fromhex (ch
) & 0x0f;
1394 /* Get encoded data. */
1395 packet_len
-= buf
- b
;
1396 *len
= remote_unescape_input ((const gdb_byte
*) buf
, packet_len
,
1401 /* Decode the parameters of a qSearch:memory packet. */
1404 decode_search_memory_packet (const char *buf
, int packet_len
,
1405 CORE_ADDR
*start_addrp
,
1406 CORE_ADDR
*search_space_lenp
,
1407 gdb_byte
*pattern
, unsigned int *pattern_lenp
)
1409 const char *p
= buf
;
1411 p
= decode_address_to_semicolon (start_addrp
, p
);
1412 p
= decode_address_to_semicolon (search_space_lenp
, p
);
1413 packet_len
-= p
- buf
;
1414 *pattern_lenp
= remote_unescape_input ((const gdb_byte
*) p
, packet_len
,
1415 pattern
, packet_len
);
1420 free_sym_cache (struct sym_cache
*sym
)
1430 clear_symbol_cache (struct sym_cache
**symcache_p
)
1432 struct sym_cache
*sym
, *next
;
1434 /* Check the cache first. */
1435 for (sym
= *symcache_p
; sym
; sym
= next
)
1438 free_sym_cache (sym
);
1444 /* Get the address of NAME, and return it in ADDRP if found. if
1445 MAY_ASK_GDB is false, assume symbol cache misses are failures.
1446 Returns 1 if the symbol is found, 0 if it is not, -1 on error. */
1449 look_up_one_symbol (const char *name
, CORE_ADDR
*addrp
, int may_ask_gdb
)
1451 client_state
&cs
= get_client_state ();
1454 struct sym_cache
*sym
;
1455 struct process_info
*proc
;
1457 proc
= current_process ();
1459 /* Check the cache first. */
1460 for (sym
= proc
->symbol_cache
; sym
; sym
= sym
->next
)
1461 if (strcmp (name
, sym
->name
) == 0)
1467 /* It might not be an appropriate time to look up a symbol,
1468 e.g. while we're trying to fetch registers. */
1472 /* Send the request. */
1473 strcpy (cs
.own_buf
, "qSymbol:");
1474 bin2hex ((const gdb_byte
*) name
, cs
.own_buf
+ strlen ("qSymbol:"),
1476 if (putpkt (cs
.own_buf
) < 0)
1479 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
1480 len
= getpkt (cs
.own_buf
);
1484 /* We ought to handle pretty much any packet at this point while we
1485 wait for the qSymbol "response". That requires re-entering the
1486 main loop. For now, this is an adequate approximation; allow
1487 GDB to read from memory and handle 'v' packets (for vFile transfers)
1488 while it figures out the address of the symbol. */
1492 unsigned char *mem_buf
;
1493 unsigned int mem_len
;
1496 if (cs
.own_buf
[0] == 'm')
1498 decode_m_packet (&cs
.own_buf
[1], &mem_addr
, &mem_len
);
1499 mem_buf
= (unsigned char *) xmalloc (mem_len
);
1500 if (read_inferior_memory (mem_addr
, mem_buf
, mem_len
) == 0)
1501 bin2hex (mem_buf
, cs
.own_buf
, mem_len
);
1503 write_enn (cs
.own_buf
);
1505 if (putpkt (cs
.own_buf
) < 0)
1508 else if (cs
.own_buf
[0] == 'x')
1510 decode_x_packet (&cs
.own_buf
[1], &mem_addr
, &mem_len
);
1511 mem_buf
= (unsigned char *) xmalloc (mem_len
);
1512 if (read_inferior_memory (mem_addr
, mem_buf
, mem_len
) == 0)
1514 gdb_byte
*buffer
= (gdb_byte
*) cs
.own_buf
;
1518 new_len
= remote_escape_output (mem_buf
, mem_len
, 1,
1522 new_len
++; /* For the 'b' marker. */
1524 if (out_len_units
!= mem_len
)
1526 write_enn (cs
.own_buf
);
1530 suppress_next_putpkt_log ();
1533 write_enn (cs
.own_buf
);
1536 int res
= ((new_len
== -1)
1537 ? putpkt (cs
.own_buf
)
1538 : putpkt_binary (cs
.own_buf
, new_len
));
1542 else if (cs
.own_buf
[0] == 'v')
1544 handle_v_requests (cs
.own_buf
, len
, &new_len
);
1546 putpkt_binary (cs
.own_buf
, new_len
);
1548 putpkt (cs
.own_buf
);
1552 len
= getpkt (cs
.own_buf
);
1557 if (!startswith (cs
.own_buf
, "qSymbol:"))
1559 warning ("Malformed response to qSymbol, ignoring: %s", cs
.own_buf
);
1563 p
= cs
.own_buf
+ strlen ("qSymbol:");
1565 while (*q
&& *q
!= ':')
1568 /* Make sure we found a value for the symbol. */
1569 if (p
== q
|| *q
== '\0')
1572 decode_address (addrp
, p
, q
- p
);
1574 /* Save the symbol in our cache. */
1575 sym
= XNEW (struct sym_cache
);
1576 sym
->name
= xstrdup (name
);
1578 sym
->next
= proc
->symbol_cache
;
1579 proc
->symbol_cache
= sym
;
1584 /* Relocate an instruction to execute at a different address. OLDLOC
1585 is the address in the inferior memory where the instruction to
1586 relocate is currently at. On input, TO points to the destination
1587 where we want the instruction to be copied (and possibly adjusted)
1588 to. On output, it points to one past the end of the resulting
1589 instruction(s). The effect of executing the instruction at TO
1590 shall be the same as if executing it at OLDLOC. For example, call
1591 instructions that implicitly push the return address on the stack
1592 should be adjusted to return to the instruction after OLDLOC;
1593 relative branches, and other PC-relative instructions need the
1594 offset adjusted; etc. Returns 0 on success, -1 on failure. */
1597 relocate_instruction (CORE_ADDR
*to
, CORE_ADDR oldloc
)
1599 client_state
&cs
= get_client_state ();
1601 ULONGEST written
= 0;
1603 /* Send the request. */
1604 sprintf (cs
.own_buf
, "qRelocInsn:%s;%s", paddress (oldloc
),
1606 if (putpkt (cs
.own_buf
) < 0)
1609 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
1610 len
= getpkt (cs
.own_buf
);
1614 /* We ought to handle pretty much any packet at this point while we
1615 wait for the qRelocInsn "response". That requires re-entering
1616 the main loop. For now, this is an adequate approximation; allow
1617 GDB to access memory. */
1618 while (cs
.own_buf
[0] == 'm' || cs
.own_buf
[0] == 'M'
1619 || cs
.own_buf
[0] == 'X' || cs
.own_buf
[0] == 'x')
1622 unsigned char *mem_buf
= NULL
;
1623 unsigned int mem_len
;
1626 if (cs
.own_buf
[0] == 'm')
1628 decode_m_packet (&cs
.own_buf
[1], &mem_addr
, &mem_len
);
1629 mem_buf
= (unsigned char *) xmalloc (mem_len
);
1630 if (read_inferior_memory (mem_addr
, mem_buf
, mem_len
) == 0)
1631 bin2hex (mem_buf
, cs
.own_buf
, mem_len
);
1633 write_enn (cs
.own_buf
);
1635 else if (cs
.own_buf
[0] == 'x')
1637 decode_x_packet (&cs
.own_buf
[1], &mem_addr
, &mem_len
);
1638 mem_buf
= (unsigned char *) xmalloc (mem_len
);
1639 if (read_inferior_memory (mem_addr
, mem_buf
, mem_len
) == 0)
1641 gdb_byte
*buffer
= (gdb_byte
*) cs
.own_buf
;
1645 new_len
= remote_escape_output (mem_buf
, mem_len
, 1,
1649 new_len
++; /* For the 'b' marker. */
1651 if (out_len_units
!= mem_len
)
1653 write_enn (cs
.own_buf
);
1657 suppress_next_putpkt_log ();
1660 write_enn (cs
.own_buf
);
1662 else if (cs
.own_buf
[0] == 'X')
1664 if (decode_X_packet (&cs
.own_buf
[1], len
- 1, &mem_addr
,
1665 &mem_len
, &mem_buf
) < 0
1666 || target_write_memory (mem_addr
, mem_buf
, mem_len
) != 0)
1667 write_enn (cs
.own_buf
);
1669 write_ok (cs
.own_buf
);
1673 decode_M_packet (&cs
.own_buf
[1], &mem_addr
, &mem_len
, &mem_buf
);
1674 if (target_write_memory (mem_addr
, mem_buf
, mem_len
) == 0)
1675 write_ok (cs
.own_buf
);
1677 write_enn (cs
.own_buf
);
1681 int res
= ((new_len
== -1)
1682 ? putpkt (cs
.own_buf
)
1683 : putpkt_binary (cs
.own_buf
, new_len
));
1686 len
= getpkt (cs
.own_buf
);
1691 if (cs
.own_buf
[0] == 'E')
1693 warning ("An error occurred while relocating an instruction: %s",
1698 if (!startswith (cs
.own_buf
, "qRelocInsn:"))
1700 warning ("Malformed response to qRelocInsn, ignoring: %s",
1705 unpack_varlen_hex (cs
.own_buf
+ strlen ("qRelocInsn:"), &written
);
1712 monitor_output (const char *msg
)
1714 int len
= strlen (msg
);
1715 char *buf
= (char *) xmalloc (len
* 2 + 2);
1718 bin2hex ((const gdb_byte
*) msg
, buf
+ 1, len
);