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/rsp-low.h"
28 #include "gdbsupport/netstuff.h"
29 #include "gdbsupport/filestuff.h"
30 #include "gdbsupport/gdb-sigmask.h"
33 #include <sys/ioctl.h>
39 #include <netinet/in.h>
42 #include <sys/socket.h>
47 #if HAVE_NETINET_TCP_H
48 #include <netinet/tcp.h>
51 #include <sys/ioctl.h>
59 #include "gdbsupport/gdb_sys_time.h"
62 #include <arpa/inet.h>
70 #ifndef HAVE_SOCKLEN_T
71 typedef int socklen_t
;
74 #ifndef IN_PROCESS_AGENT
76 /* Extra value for readchar_callback. */
78 /* The callback is currently not scheduled. */
82 /* Status of the readchar callback.
83 Either NOT_SCHEDULED or the callback id. */
84 static int readchar_callback
= NOT_SCHEDULED
;
86 static int readchar (void);
87 static void reset_readchar (void);
88 static void reschedule (void);
90 /* A cache entry for a successfully looked-up symbol. */
95 struct sym_cache
*next
;
98 static int remote_is_stdio
= 0;
100 static int remote_desc
= -1;
101 static int listen_desc
= -1;
104 /* gnulib wraps these as macros, undo them. */
108 # define read(fd, buf, len) recv (fd, (char *) buf, len, 0)
109 # define write(fd, buf, len) send (fd, (char *) buf, len, 0)
115 return remote_desc
!= -1;
118 /* Return true if the remote connection is over stdio. */
121 remote_connection_is_stdio (void)
123 return remote_is_stdio
;
127 enable_async_notification (int fd
)
129 #if defined(F_SETFL) && defined (FASYNC)
130 int save_fcntl_flags
;
132 save_fcntl_flags
= fcntl (fd
, F_GETFL
, 0);
133 fcntl (fd
, F_SETFL
, save_fcntl_flags
| FASYNC
);
134 #if defined (F_SETOWN)
135 fcntl (fd
, F_SETOWN
, getpid ());
141 handle_accept_event (int err
, gdb_client_data client_data
)
143 struct sockaddr_storage sockaddr
;
144 socklen_t len
= sizeof (sockaddr
);
146 threads_debug_printf ("handling possible accept event");
148 remote_desc
= accept (listen_desc
, (struct sockaddr
*) &sockaddr
, &len
);
149 if (remote_desc
== -1)
150 perror_with_name ("Accept failed");
152 /* Enable TCP keep alive process. */
154 setsockopt (remote_desc
, SOL_SOCKET
, SO_KEEPALIVE
,
155 (char *) &tmp
, sizeof (tmp
));
157 /* Tell TCP not to delay small packets. This greatly speeds up
158 interactive response. */
160 setsockopt (remote_desc
, IPPROTO_TCP
, TCP_NODELAY
,
161 (char *) &tmp
, sizeof (tmp
));
164 signal (SIGPIPE
, SIG_IGN
); /* If we don't do this, then gdbserver simply
165 exits when the remote side dies. */
171 close (listen_desc
); /* No longer need this */
173 closesocket (listen_desc
); /* No longer need this */
177 /* Even if !RUN_ONCE no longer notice new connections. Still keep the
178 descriptor open for add_file_handler to wait for a new connection. */
179 delete_file_handler (listen_desc
);
181 /* Convert IP address to string. */
182 char orig_host
[GDB_NI_MAX_ADDR
], orig_port
[GDB_NI_MAX_PORT
];
184 int r
= getnameinfo ((struct sockaddr
*) &sockaddr
, len
,
185 orig_host
, sizeof (orig_host
),
186 orig_port
, sizeof (orig_port
),
187 NI_NUMERICHOST
| NI_NUMERICSERV
);
190 fprintf (stderr
, _("Could not obtain remote address: %s\n"),
193 fprintf (stderr
, _("Remote debugging from host %s, port %s\n"),
194 orig_host
, orig_port
);
196 enable_async_notification (remote_desc
);
198 /* Register the event loop handler. */
199 add_file_handler (remote_desc
, handle_serial_event
, NULL
, "remote-net");
201 /* We have a new GDB connection now. If we were disconnected
202 tracing, there's a window where the target could report a stop
203 event to the event loop, and since we have a connection now, we'd
204 try to send vStopped notifications to GDB. But, don't do that
205 until GDB as selected all-stop/non-stop, and has queried the
206 threads' status ('?'). */
210 /* Prepare for a later connection to a remote debugger.
211 NAME is the filename used for communication. */
214 remote_prepare (const char *name
)
216 client_state
&cs
= get_client_state ();
218 static int winsock_initialized
;
223 if (strcmp (name
, STDIO_CONNECTION_NAME
) == 0)
225 /* We need to record fact that we're using stdio sooner than the
226 call to remote_open so start_inferior knows the connection is
229 cs
.transport_is_reliable
= 1;
233 struct addrinfo hint
;
234 struct addrinfo
*ainfo
;
236 memset (&hint
, 0, sizeof (hint
));
237 /* Assume no prefix will be passed, therefore we should use
239 hint
.ai_family
= AF_UNSPEC
;
240 hint
.ai_socktype
= SOCK_STREAM
;
241 hint
.ai_protocol
= IPPROTO_TCP
;
243 parsed_connection_spec parsed
244 = parse_connection_spec_without_prefix (name
, &hint
);
246 if (parsed
.port_str
.empty ())
248 cs
.transport_is_reliable
= 0;
253 if (!winsock_initialized
)
257 WSAStartup (MAKEWORD (1, 0), &wsad
);
258 winsock_initialized
= 1;
262 int r
= getaddrinfo (parsed
.host_str
.c_str (), parsed
.port_str
.c_str (),
266 error (_("%s: cannot resolve name: %s"), name
, gai_strerror (r
));
268 scoped_free_addrinfo
freeaddrinfo (ainfo
);
270 struct addrinfo
*iter
;
272 for (iter
= ainfo
; iter
!= NULL
; iter
= iter
->ai_next
)
274 listen_desc
= gdb_socket_cloexec (iter
->ai_family
, iter
->ai_socktype
,
277 if (listen_desc
>= 0)
282 perror_with_name ("Can't open socket");
284 /* Allow rapid reuse of this port. */
286 setsockopt (listen_desc
, SOL_SOCKET
, SO_REUSEADDR
, (char *) &tmp
,
289 switch (iter
->ai_family
)
292 ((struct sockaddr_in
*) iter
->ai_addr
)->sin_addr
.s_addr
= INADDR_ANY
;
295 ((struct sockaddr_in6
*) iter
->ai_addr
)->sin6_addr
= in6addr_any
;
298 internal_error (_("Invalid 'ai_family' %d\n"), iter
->ai_family
);
301 if (bind (listen_desc
, iter
->ai_addr
, iter
->ai_addrlen
) != 0)
302 perror_with_name ("Can't bind address");
304 if (listen (listen_desc
, 1) != 0)
305 perror_with_name ("Can't listen on socket");
307 cs
.transport_is_reliable
= 1;
310 /* Open a connection to a remote debugger.
311 NAME is the filename used for communication. */
314 remote_open (const char *name
)
316 const char *port_str
;
318 port_str
= strchr (name
, ':');
320 if (port_str
== NULL
)
321 error ("Only HOST:PORT is supported on this platform.");
324 if (strcmp (name
, STDIO_CONNECTION_NAME
) == 0)
326 fprintf (stderr
, "Remote debugging using stdio\n");
328 /* Use stdin as the handle of the connection.
329 We only select on reads, for example. */
330 remote_desc
= fileno (stdin
);
332 enable_async_notification (remote_desc
);
334 /* Register the event loop handler. */
335 add_file_handler (remote_desc
, handle_serial_event
, NULL
, "remote-stdio");
338 else if (port_str
== NULL
)
342 if (stat (name
, &statbuf
) == 0
343 && (S_ISCHR (statbuf
.st_mode
) || S_ISFIFO (statbuf
.st_mode
)))
344 remote_desc
= open (name
, O_RDWR
);
352 perror_with_name ("Could not open remote device");
356 struct termios termios
;
357 tcgetattr (remote_desc
, &termios
);
362 termios
.c_cflag
&= ~(CSIZE
| PARENB
);
363 termios
.c_cflag
|= CLOCAL
| CS8
;
364 termios
.c_cc
[VMIN
] = 1;
365 termios
.c_cc
[VTIME
] = 0;
367 tcsetattr (remote_desc
, TCSANOW
, &termios
);
371 fprintf (stderr
, "Remote debugging using %s\n", name
);
373 enable_async_notification (remote_desc
);
375 /* Register the event loop handler. */
376 add_file_handler (remote_desc
, handle_serial_event
, NULL
,
379 #endif /* USE_WIN32API */
382 char listen_port
[GDB_NI_MAX_PORT
];
383 struct sockaddr_storage sockaddr
;
384 socklen_t len
= sizeof (sockaddr
);
386 if (getsockname (listen_desc
, (struct sockaddr
*) &sockaddr
, &len
) < 0)
387 perror_with_name ("Can't determine port");
389 int r
= getnameinfo ((struct sockaddr
*) &sockaddr
, len
,
391 listen_port
, sizeof (listen_port
),
395 fprintf (stderr
, _("Can't obtain port where we are listening: %s"),
398 fprintf (stderr
, _("Listening on port %s\n"), listen_port
);
402 /* Register the event loop handler. */
403 add_file_handler (listen_desc
, handle_accept_event
, NULL
,
411 delete_file_handler (remote_desc
);
416 closesocket (remote_desc
);
418 if (! remote_connection_is_stdio ())
428 #ifndef IN_PROCESS_AGENT
431 decode_address (CORE_ADDR
*addrp
, const char *start
, int len
)
438 for (i
= 0; i
< len
; i
++)
442 addr
= addr
| (fromhex (ch
) & 0x0f);
448 decode_address_to_semicolon (CORE_ADDR
*addrp
, const char *start
)
453 while (*end
!= '\0' && *end
!= ';')
456 decode_address (addrp
, start
, end
- start
);
465 #ifndef IN_PROCESS_AGENT
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. */
472 try_rle (char *buf
, int remaining
, unsigned char *csum
, char **p
)
476 /* Always output the character. */
480 /* Don't go past '~'. */
484 for (n
= 1; n
< remaining
; n
++)
485 if (buf
[n
] != buf
[0])
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. */
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
500 while (n
+ 29 == '$' || n
+ 29 == '#')
513 #ifndef IN_PROCESS_AGENT
515 /* Write a PTID to BUF. Returns BUF+CHARACTERS_WRITTEN. */
518 write_ptid (char *buf
, ptid_t ptid
)
520 client_state
&cs
= get_client_state ();
523 if (cs
.multi_process
)
527 buf
+= sprintf (buf
, "p-%x.", -pid
);
529 buf
+= sprintf (buf
, "p%x.", pid
);
533 buf
+= sprintf (buf
, "-%x", -tid
);
535 buf
+= sprintf (buf
, "%x", tid
);
541 hex_or_minus_one (const char *buf
, const char **obuf
)
545 if (startswith (buf
, "-1"))
551 buf
= unpack_varlen_hex (buf
, &ret
);
559 /* Extract a PTID from BUF. If non-null, OBUF is set to the to one
560 passed the last parsed char. Returns null_ptid on error. */
562 read_ptid (const char *buf
, const char **obuf
)
566 ULONGEST pid
= 0, tid
= 0;
570 /* Multi-process ptid. */
571 pp
= unpack_varlen_hex (p
+ 1, &pid
);
573 error ("invalid remote ptid: %s\n", p
);
577 tid
= hex_or_minus_one (p
, &pp
);
581 return ptid_t (pid
, tid
);
584 /* No multi-process. Just a tid. */
585 tid
= hex_or_minus_one (p
, &pp
);
587 /* Since GDB is not sending a process id (multi-process extensions
588 are off), then there's only one process. Default to the first in
590 pid
= pid_of (get_first_process ());
594 return ptid_t (pid
, tid
);
597 /* Write COUNT bytes in BUF to the client.
598 The result is the number of bytes written or -1 if error.
599 This may return less than COUNT. */
602 write_prim (const void *buf
, int count
)
604 if (remote_connection_is_stdio ())
605 return write (fileno (stdout
), buf
, count
);
607 return write (remote_desc
, buf
, count
);
610 /* Read COUNT bytes from the client and store in BUF.
611 The result is the number of bytes read or -1 if error.
612 This may return less than COUNT. */
615 read_prim (void *buf
, int count
)
617 if (remote_connection_is_stdio ())
618 return read (fileno (stdin
), buf
, count
);
620 return read (remote_desc
, buf
, count
);
623 /* Send a packet to the remote machine, with error checking.
624 The data of the packet is in BUF, and the length of the
625 packet is in CNT. Returns >= 0 on success, -1 otherwise. */
628 putpkt_binary_1 (char *buf
, int cnt
, int is_notif
)
630 client_state
&cs
= get_client_state ();
632 unsigned char csum
= 0;
637 buf2
= (char *) xmalloc (strlen ("$") + cnt
+ strlen ("#nn") + 1);
639 /* Copy the packet into buffer BUF2, encapsulating it
640 and giving it a checksum. */
648 for (i
= 0; i
< cnt
;)
649 i
+= try_rle (buf
+ i
, cnt
- i
, &csum
, &p
);
652 *p
++ = tohex ((csum
>> 4) & 0xf);
653 *p
++ = tohex (csum
& 0xf);
657 /* Send it over and over until we get a positive ack. */
661 if (write_prim (buf2
, p
- buf2
) != p
- buf2
)
663 perror ("putpkt(write)");
668 if (cs
.noack_mode
|| is_notif
)
670 /* Don't expect an ack then. */
672 remote_debug_printf ("putpkt (\"%s\"); [notif]", buf2
);
674 remote_debug_printf ("putpkt (\"%s\"); [noack mode]", buf2
);
679 remote_debug_printf ("putpkt (\"%s\"); [looking for ack]", buf2
);
689 remote_debug_printf ("[received '%c' (0x%x)]", cc
, cc
);
691 /* Check for an input interrupt while we're here. */
692 if (cc
== '\003' && current_thread
!= NULL
)
693 the_target
->request_interrupt ();
698 return 1; /* Success! */
702 putpkt_binary (char *buf
, int cnt
)
704 return putpkt_binary_1 (buf
, cnt
, 0);
707 /* Send a packet to the remote machine, with error checking. The data
708 of the packet is in BUF, and the packet should be a NUL-terminated
709 string. Returns >= 0 on success, -1 otherwise. */
714 return putpkt_binary (buf
, strlen (buf
));
718 putpkt_notif (char *buf
)
720 return putpkt_binary_1 (buf
, strlen (buf
), 1);
723 /* Come here when we get an input interrupt from the remote side. This
724 interrupt should only be active while we are waiting for the child to do
725 something. Thus this assumes readchar:bufcnt is 0.
726 About the only thing that should come through is a ^C, which
727 will cause us to request child interruption. */
730 input_interrupt (int unused
)
733 struct timeval immediate
= { 0, 0 };
735 /* Protect against spurious interrupts. This has been observed to
736 be a problem under NetBSD 1.4 and 1.5. */
739 FD_SET (remote_desc
, &readset
);
740 if (select (remote_desc
+ 1, &readset
, 0, 0, &immediate
) > 0)
745 cc
= read_prim (&c
, 1);
749 fprintf (stderr
, "client connection closed\n");
752 else if (cc
!= 1 || c
!= '\003')
754 fprintf (stderr
, "input_interrupt, count = %d c = %d ", cc
, c
);
756 fprintf (stderr
, "('%c')\n", c
);
758 fprintf (stderr
, "('\\x%02x')\n", c
& 0xff);
762 the_target
->request_interrupt ();
766 /* Check if the remote side sent us an interrupt request (^C). */
768 check_remote_input_interrupt_request (void)
770 /* This function may be called before establishing communications,
771 therefore we need to validate the remote descriptor. */
773 if (remote_desc
== -1)
779 /* Asynchronous I/O support. SIGIO must be unblocked when waiting,
780 in order to accept Control-C from the client, and must be blocked
781 when talking to the client. */
784 block_unblock_async_io (int block
)
789 sigemptyset (&sigio_set
);
790 sigaddset (&sigio_set
, SIGIO
);
791 gdb_sigmask (block
? SIG_BLOCK
: SIG_UNBLOCK
, &sigio_set
, NULL
);
795 /* Current state of asynchronous I/O. */
796 static int async_io_enabled
;
798 /* Enable asynchronous I/O. */
800 enable_async_io (void)
802 if (async_io_enabled
)
805 block_unblock_async_io (0);
807 async_io_enabled
= 1;
810 /* Disable asynchronous I/O. */
812 disable_async_io (void)
814 if (!async_io_enabled
)
817 block_unblock_async_io (1);
819 async_io_enabled
= 0;
823 initialize_async_io (void)
825 /* Make sure that async I/O starts blocked. */
826 async_io_enabled
= 1;
829 /* Install the signal handler. */
831 signal (SIGIO
, input_interrupt
);
835 /* Internal buffer used by readchar.
836 These are global to readchar because reschedule_remote needs to be
837 able to tell whether the buffer is empty. */
839 static unsigned char readchar_buf
[BUFSIZ
];
840 static int readchar_bufcnt
= 0;
841 static unsigned char *readchar_bufp
;
843 /* Returns next char from remote GDB. -1 if error. */
850 if (readchar_bufcnt
== 0)
852 readchar_bufcnt
= read_prim (readchar_buf
, sizeof (readchar_buf
));
854 if (readchar_bufcnt
<= 0)
856 if (readchar_bufcnt
== 0)
858 remote_debug_printf ("readchar: Got EOF");
866 readchar_bufp
= readchar_buf
;
870 ch
= *readchar_bufp
++;
875 /* Reset the readchar state machine. */
878 reset_readchar (void)
881 if (readchar_callback
!= NOT_SCHEDULED
)
883 delete_timer (readchar_callback
);
884 readchar_callback
= NOT_SCHEDULED
;
888 /* Process remaining data in readchar_buf. */
891 process_remaining (void *context
)
893 /* This is a one-shot event. */
894 readchar_callback
= NOT_SCHEDULED
;
896 if (readchar_bufcnt
> 0)
897 handle_serial_event (0, NULL
);
900 /* If there is still data in the buffer, queue another event to process it,
901 we can't sleep in select yet. */
906 if (readchar_bufcnt
> 0 && readchar_callback
== NOT_SCHEDULED
)
907 readchar_callback
= create_timer (0, process_remaining
, NULL
);
910 /* Read a packet from the remote machine, with error checking,
911 and store it in BUF. Returns length of packet, or negative if error. */
916 client_state
&cs
= get_client_state ();
918 unsigned char csum
, c1
, c2
;
929 /* The '\003' may appear before or after each packet, so
930 check for an input interrupt. */
933 the_target
->request_interrupt ();
940 remote_debug_printf ("[getpkt: discarding char '%c']", c
);
959 c1
= fromhex (readchar ());
960 c2
= fromhex (readchar ());
962 if (csum
== (c1
<< 4) + c2
)
968 "Bad checksum, sentsum=0x%x, csum=0x%x, "
969 "buf=%s [no-ack-mode, Bad medium?]\n",
970 (c1
<< 4) + c2
, csum
, buf
);
971 /* Not much we can do, GDB wasn't expecting an ack/nac. */
975 fprintf (stderr
, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
976 (c1
<< 4) + c2
, csum
, buf
);
977 if (write_prim ("-", 1) != 1)
983 remote_debug_printf ("getpkt (\"%s\"); [sending ack]", buf
);
985 if (write_prim ("+", 1) != 1)
988 remote_debug_printf ("[sent ack]");
991 remote_debug_printf ("getpkt (\"%s\"); [no ack sent]", buf
);
993 /* The readchar above may have already read a '\003' out of the socket
994 and moved it to the local buffer. For example, when GDB sends
995 vCont;c immediately followed by interrupt (see
996 gdb.base/interrupt-noterm.exp). As soon as we see the vCont;c, we'll
997 resume the inferior and wait. Since we've already moved the '\003'
998 to the local buffer, SIGIO won't help. In that case, if we don't
999 check for interrupt after the vCont;c packet, the interrupt character
1000 would stay in the buffer unattended until after the next (unrelated)
1002 while (readchar_bufcnt
> 0 && *readchar_bufp
== '\003')
1004 /* Consume the interrupt character in the buffer. */
1006 the_target
->request_interrupt ();
1013 write_ok (char *buf
)
1021 write_enn (char *buf
)
1023 /* Some day, we should define the meanings of the error codes... */
1032 #ifndef IN_PROCESS_AGENT
1035 outreg (struct regcache
*regcache
, int regno
, char *buf
)
1037 if ((regno
>> 12) != 0)
1038 *buf
++ = tohex ((regno
>> 12) & 0xf);
1039 if ((regno
>> 8) != 0)
1040 *buf
++ = tohex ((regno
>> 8) & 0xf);
1041 *buf
++ = tohex ((regno
>> 4) & 0xf);
1042 *buf
++ = tohex (regno
& 0xf);
1044 collect_register_as_string (regcache
, regno
, buf
);
1045 buf
+= 2 * register_size (regcache
->tdesc
, regno
);
1052 prepare_resume_reply (char *buf
, ptid_t ptid
, const target_waitstatus
&status
)
1054 client_state
&cs
= get_client_state ();
1055 threads_debug_printf ("Writing resume reply for %s: %s",
1056 target_pid_to_str (ptid
).c_str (),
1057 status
.to_string ().c_str ());
1059 switch (status
.kind ())
1061 case TARGET_WAITKIND_STOPPED
:
1062 case TARGET_WAITKIND_FORKED
:
1063 case TARGET_WAITKIND_VFORKED
:
1064 case TARGET_WAITKIND_VFORK_DONE
:
1065 case TARGET_WAITKIND_THREAD_CLONED
:
1066 case TARGET_WAITKIND_EXECD
:
1067 case TARGET_WAITKIND_THREAD_CREATED
:
1068 case TARGET_WAITKIND_SYSCALL_ENTRY
:
1069 case TARGET_WAITKIND_SYSCALL_RETURN
:
1071 struct regcache
*regcache
;
1072 char *buf_start
= buf
;
1074 if ((status
.kind () == TARGET_WAITKIND_FORKED
1075 && cs
.report_fork_events
)
1076 || (status
.kind () == TARGET_WAITKIND_VFORKED
1077 && cs
.report_vfork_events
)
1078 || status
.kind () == TARGET_WAITKIND_THREAD_CLONED
)
1080 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1082 auto kind_remote_str
= [] (target_waitkind kind
)
1086 case TARGET_WAITKIND_FORKED
:
1088 case TARGET_WAITKIND_VFORKED
:
1090 case TARGET_WAITKIND_THREAD_CLONED
:
1093 gdb_assert_not_reached ("unhandled kind");
1097 const char *event
= kind_remote_str (status
.kind ());
1099 sprintf (buf
, "T%02x%s:", signal
, event
);
1100 buf
+= strlen (buf
);
1101 buf
= write_ptid (buf
, status
.child_ptid ());
1104 else if (status
.kind () == TARGET_WAITKIND_VFORK_DONE
1105 && cs
.report_vfork_events
)
1107 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1109 sprintf (buf
, "T%02xvforkdone:;", signal
);
1111 else if (status
.kind () == TARGET_WAITKIND_EXECD
&& cs
.report_exec_events
)
1113 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1114 const char *event
= "exec";
1115 char hexified_pathname
[PATH_MAX
* 2];
1117 sprintf (buf
, "T%02x%s:", signal
, event
);
1118 buf
+= strlen (buf
);
1120 /* Encode pathname to hexified format. */
1121 bin2hex ((const gdb_byte
*) status
.execd_pathname (),
1123 strlen (status
.execd_pathname ()));
1125 sprintf (buf
, "%s;", hexified_pathname
);
1126 buf
+= strlen (buf
);
1128 else if (status
.kind () == TARGET_WAITKIND_THREAD_CREATED
1129 && cs
.report_thread_events
)
1131 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1133 sprintf (buf
, "T%02xcreate:;", signal
);
1135 else if (status
.kind () == TARGET_WAITKIND_SYSCALL_ENTRY
1136 || status
.kind () == TARGET_WAITKIND_SYSCALL_RETURN
)
1138 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1139 const char *event
= (status
.kind () == TARGET_WAITKIND_SYSCALL_ENTRY
1140 ? "syscall_entry" : "syscall_return");
1142 sprintf (buf
, "T%02x%s:%x;", signal
, event
,
1143 status
.syscall_number ());
1146 sprintf (buf
, "T%02x", status
.sig ());
1148 if (disable_packet_T
)
1150 /* This is a bit (OK, a lot) of a kludge, however, this isn't
1151 really a user feature, but exists only so GDB can use the
1152 gdbserver to test handling of the 'S' stop reply packet, so
1153 we would rather this code be as simple as possible.
1155 By this point we've started to build the 'T' stop packet,
1156 and it should look like 'Txx....' where 'x' is a hex digit.
1157 An 'S' stop packet always looks like 'Sxx', so all we do
1158 here is convert the buffer from a T packet to an S packet
1159 and the avoid adding any extra content by breaking out. */
1160 gdb_assert (buf_start
[0] == 'T');
1161 gdb_assert (isxdigit (buf_start
[1]));
1162 gdb_assert (isxdigit (buf_start
[2]));
1164 buf_start
[3] = '\0';
1168 buf
+= strlen (buf
);
1170 scoped_restore_current_thread restore_thread
;
1172 switch_to_thread (the_target
, ptid
);
1174 regcache
= get_thread_regcache (current_thread
, 1);
1176 if (the_target
->stopped_by_watchpoint ())
1181 memcpy (buf
, "watch:", 6);
1184 addr
= the_target
->stopped_data_address ();
1186 /* Convert each byte of the address into two hexadecimal
1187 chars. Note that we take sizeof (void *) instead of
1188 sizeof (addr); this is to avoid sending a 64-bit
1189 address to a 32-bit GDB. */
1190 for (i
= sizeof (void *) * 2; i
> 0; i
--)
1191 *buf
++ = tohex ((addr
>> (i
- 1) * 4) & 0xf);
1194 else if (cs
.swbreak_feature
&& target_stopped_by_sw_breakpoint ())
1196 sprintf (buf
, "swbreak:;");
1197 buf
+= strlen (buf
);
1199 else if (cs
.hwbreak_feature
&& target_stopped_by_hw_breakpoint ())
1201 sprintf (buf
, "hwbreak:;");
1202 buf
+= strlen (buf
);
1205 /* Handle the expedited registers. */
1206 for (const std::string
&expedited_reg
:
1207 current_target_desc ()->expedite_regs
)
1208 buf
= outreg (regcache
, find_regno (regcache
->tdesc
,
1209 expedited_reg
.c_str ()), buf
);
1212 /* Formerly, if the debugger had not used any thread features
1213 we would not burden it with a thread status response. This
1214 was for the benefit of GDB 4.13 and older. However, in
1215 recent GDB versions the check (``if (cont_thread != 0)'')
1216 does not have the desired effect because of silliness in
1217 the way that the remote protocol handles specifying a
1218 thread. Since thread support relies on qSymbol support
1219 anyway, assume GDB can handle threads. */
1221 if (using_threads
&& !disable_packet_Tthread
)
1223 /* This if (1) ought to be unnecessary. But remote_wait
1224 in GDB will claim this event belongs to inferior_ptid
1225 if we do not specify a thread, and there's no way for
1226 gdbserver to know what inferior_ptid is. */
1227 if (1 || cs
.general_thread
!= ptid
)
1230 /* In non-stop, don't change the general thread behind
1233 cs
.general_thread
= ptid
;
1234 sprintf (buf
, "thread:");
1235 buf
+= strlen (buf
);
1236 buf
= write_ptid (buf
, ptid
);
1238 buf
+= strlen (buf
);
1240 core
= target_core_of_thread (ptid
);
1244 sprintf (buf
, "core:");
1245 buf
+= strlen (buf
);
1246 sprintf (buf
, "%x", core
);
1248 buf
+= strlen (buf
);
1253 if (current_process ()->dlls_changed
)
1255 strcpy (buf
, "library:;");
1256 buf
+= strlen (buf
);
1257 current_process ()->dlls_changed
= false;
1261 case TARGET_WAITKIND_EXITED
:
1262 if (cs
.multi_process
)
1263 sprintf (buf
, "W%x;process:%x",
1264 status
.exit_status (), ptid
.pid ());
1266 sprintf (buf
, "W%02x", status
.exit_status ());
1268 case TARGET_WAITKIND_SIGNALLED
:
1269 if (cs
.multi_process
)
1270 sprintf (buf
, "X%x;process:%x",
1271 status
.sig (), ptid
.pid ());
1273 sprintf (buf
, "X%02x", status
.sig ());
1275 case TARGET_WAITKIND_THREAD_EXITED
:
1276 sprintf (buf
, "w%x;", status
.exit_status ());
1277 buf
+= strlen (buf
);
1278 buf
= write_ptid (buf
, ptid
);
1280 case TARGET_WAITKIND_NO_RESUMED
:
1284 error ("unhandled waitkind");
1289 /* See remote-utils.h. */
1292 decode_m_packet_params (const char *from
, CORE_ADDR
*mem_addr_ptr
,
1293 unsigned int *len_ptr
, const char end_marker
)
1297 *mem_addr_ptr
= *len_ptr
= 0;
1299 while ((ch
= from
[i
++]) != ',')
1301 *mem_addr_ptr
= *mem_addr_ptr
<< 4;
1302 *mem_addr_ptr
|= fromhex (ch
) & 0x0f;
1305 while ((ch
= from
[i
++]) != end_marker
)
1307 *len_ptr
= *len_ptr
<< 4;
1308 *len_ptr
|= fromhex (ch
) & 0x0f;
1315 decode_m_packet (const char *from
, CORE_ADDR
*mem_addr_ptr
,
1316 unsigned int *len_ptr
)
1318 decode_m_packet_params (from
, mem_addr_ptr
, len_ptr
, '\0');
1322 decode_M_packet (const char *from
, CORE_ADDR
*mem_addr_ptr
,
1323 unsigned int *len_ptr
, unsigned char **to_p
)
1325 from
= decode_m_packet_params (from
, mem_addr_ptr
, len_ptr
, ':');
1328 *to_p
= (unsigned char *) xmalloc (*len_ptr
);
1330 hex2bin (from
, *to_p
, *len_ptr
);
1334 decode_X_packet (char *from
, int packet_len
, CORE_ADDR
*mem_addr_ptr
,
1335 unsigned int *len_ptr
, unsigned char **to_p
)
1339 *mem_addr_ptr
= *len_ptr
= 0;
1341 while ((ch
= from
[i
++]) != ',')
1343 *mem_addr_ptr
= *mem_addr_ptr
<< 4;
1344 *mem_addr_ptr
|= fromhex (ch
) & 0x0f;
1347 while ((ch
= from
[i
++]) != ':')
1349 *len_ptr
= *len_ptr
<< 4;
1350 *len_ptr
|= fromhex (ch
) & 0x0f;
1354 *to_p
= (unsigned char *) xmalloc (*len_ptr
);
1356 if (remote_unescape_input ((const gdb_byte
*) &from
[i
], packet_len
- i
,
1357 *to_p
, *len_ptr
) != *len_ptr
)
1363 /* Decode a qXfer write request. */
1366 decode_xfer_write (char *buf
, int packet_len
, CORE_ADDR
*offset
,
1367 unsigned int *len
, unsigned char *data
)
1372 /* Extract the offset. */
1374 while ((ch
= *buf
++) != ':')
1376 *offset
= *offset
<< 4;
1377 *offset
|= fromhex (ch
) & 0x0f;
1380 /* Get encoded data. */
1381 packet_len
-= buf
- b
;
1382 *len
= remote_unescape_input ((const gdb_byte
*) buf
, packet_len
,
1387 /* Decode the parameters of a qSearch:memory packet. */
1390 decode_search_memory_packet (const char *buf
, int packet_len
,
1391 CORE_ADDR
*start_addrp
,
1392 CORE_ADDR
*search_space_lenp
,
1393 gdb_byte
*pattern
, unsigned int *pattern_lenp
)
1395 const char *p
= buf
;
1397 p
= decode_address_to_semicolon (start_addrp
, p
);
1398 p
= decode_address_to_semicolon (search_space_lenp
, p
);
1399 packet_len
-= p
- buf
;
1400 *pattern_lenp
= remote_unescape_input ((const gdb_byte
*) p
, packet_len
,
1401 pattern
, packet_len
);
1406 free_sym_cache (struct sym_cache
*sym
)
1416 clear_symbol_cache (struct sym_cache
**symcache_p
)
1418 struct sym_cache
*sym
, *next
;
1420 /* Check the cache first. */
1421 for (sym
= *symcache_p
; sym
; sym
= next
)
1424 free_sym_cache (sym
);
1430 /* Get the address of NAME, and return it in ADDRP if found. if
1431 MAY_ASK_GDB is false, assume symbol cache misses are failures.
1432 Returns 1 if the symbol is found, 0 if it is not, -1 on error. */
1435 look_up_one_symbol (const char *name
, CORE_ADDR
*addrp
, int may_ask_gdb
)
1437 client_state
&cs
= get_client_state ();
1440 struct sym_cache
*sym
;
1441 struct process_info
*proc
;
1443 proc
= current_process ();
1445 /* Check the cache first. */
1446 for (sym
= proc
->symbol_cache
; sym
; sym
= sym
->next
)
1447 if (strcmp (name
, sym
->name
) == 0)
1453 /* It might not be an appropriate time to look up a symbol,
1454 e.g. while we're trying to fetch registers. */
1458 /* Send the request. */
1459 strcpy (cs
.own_buf
, "qSymbol:");
1460 bin2hex ((const gdb_byte
*) name
, cs
.own_buf
+ strlen ("qSymbol:"),
1462 if (putpkt (cs
.own_buf
) < 0)
1465 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
1466 len
= getpkt (cs
.own_buf
);
1470 /* We ought to handle pretty much any packet at this point while we
1471 wait for the qSymbol "response". That requires re-entering the
1472 main loop. For now, this is an adequate approximation; allow
1473 GDB to read from memory and handle 'v' packets (for vFile transfers)
1474 while it figures out the address of the symbol. */
1477 if (cs
.own_buf
[0] == 'm')
1480 unsigned char *mem_buf
;
1481 unsigned int mem_len
;
1483 decode_m_packet (&cs
.own_buf
[1], &mem_addr
, &mem_len
);
1484 mem_buf
= (unsigned char *) xmalloc (mem_len
);
1485 if (read_inferior_memory (mem_addr
, mem_buf
, mem_len
) == 0)
1486 bin2hex (mem_buf
, cs
.own_buf
, mem_len
);
1488 write_enn (cs
.own_buf
);
1490 if (putpkt (cs
.own_buf
) < 0)
1493 else if (cs
.own_buf
[0] == 'v')
1496 handle_v_requests (cs
.own_buf
, len
, &new_len
);
1498 putpkt_binary (cs
.own_buf
, new_len
);
1500 putpkt (cs
.own_buf
);
1504 len
= getpkt (cs
.own_buf
);
1509 if (!startswith (cs
.own_buf
, "qSymbol:"))
1511 warning ("Malformed response to qSymbol, ignoring: %s", cs
.own_buf
);
1515 p
= cs
.own_buf
+ strlen ("qSymbol:");
1517 while (*q
&& *q
!= ':')
1520 /* Make sure we found a value for the symbol. */
1521 if (p
== q
|| *q
== '\0')
1524 decode_address (addrp
, p
, q
- p
);
1526 /* Save the symbol in our cache. */
1527 sym
= XNEW (struct sym_cache
);
1528 sym
->name
= xstrdup (name
);
1530 sym
->next
= proc
->symbol_cache
;
1531 proc
->symbol_cache
= sym
;
1536 /* Relocate an instruction to execute at a different address. OLDLOC
1537 is the address in the inferior memory where the instruction to
1538 relocate is currently at. On input, TO points to the destination
1539 where we want the instruction to be copied (and possibly adjusted)
1540 to. On output, it points to one past the end of the resulting
1541 instruction(s). The effect of executing the instruction at TO
1542 shall be the same as if executing it at OLDLOC. For example, call
1543 instructions that implicitly push the return address on the stack
1544 should be adjusted to return to the instruction after OLDLOC;
1545 relative branches, and other PC-relative instructions need the
1546 offset adjusted; etc. Returns 0 on success, -1 on failure. */
1549 relocate_instruction (CORE_ADDR
*to
, CORE_ADDR oldloc
)
1551 client_state
&cs
= get_client_state ();
1553 ULONGEST written
= 0;
1555 /* Send the request. */
1556 sprintf (cs
.own_buf
, "qRelocInsn:%s;%s", paddress (oldloc
),
1558 if (putpkt (cs
.own_buf
) < 0)
1561 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
1562 len
= getpkt (cs
.own_buf
);
1566 /* We ought to handle pretty much any packet at this point while we
1567 wait for the qRelocInsn "response". That requires re-entering
1568 the main loop. For now, this is an adequate approximation; allow
1569 GDB to access memory. */
1570 while (cs
.own_buf
[0] == 'm' || cs
.own_buf
[0] == 'M' || cs
.own_buf
[0] == 'X')
1573 unsigned char *mem_buf
= NULL
;
1574 unsigned int mem_len
;
1576 if (cs
.own_buf
[0] == 'm')
1578 decode_m_packet (&cs
.own_buf
[1], &mem_addr
, &mem_len
);
1579 mem_buf
= (unsigned char *) xmalloc (mem_len
);
1580 if (read_inferior_memory (mem_addr
, mem_buf
, mem_len
) == 0)
1581 bin2hex (mem_buf
, cs
.own_buf
, mem_len
);
1583 write_enn (cs
.own_buf
);
1585 else if (cs
.own_buf
[0] == 'X')
1587 if (decode_X_packet (&cs
.own_buf
[1], len
- 1, &mem_addr
,
1588 &mem_len
, &mem_buf
) < 0
1589 || target_write_memory (mem_addr
, mem_buf
, mem_len
) != 0)
1590 write_enn (cs
.own_buf
);
1592 write_ok (cs
.own_buf
);
1596 decode_M_packet (&cs
.own_buf
[1], &mem_addr
, &mem_len
, &mem_buf
);
1597 if (target_write_memory (mem_addr
, mem_buf
, mem_len
) == 0)
1598 write_ok (cs
.own_buf
);
1600 write_enn (cs
.own_buf
);
1603 if (putpkt (cs
.own_buf
) < 0)
1605 len
= getpkt (cs
.own_buf
);
1610 if (cs
.own_buf
[0] == 'E')
1612 warning ("An error occurred while relocating an instruction: %s",
1617 if (!startswith (cs
.own_buf
, "qRelocInsn:"))
1619 warning ("Malformed response to qRelocInsn, ignoring: %s",
1624 unpack_varlen_hex (cs
.own_buf
+ strlen ("qRelocInsn:"), &written
);
1631 monitor_output (const char *msg
)
1633 int len
= strlen (msg
);
1634 char *buf
= (char *) xmalloc (len
* 2 + 2);
1637 bin2hex ((const gdb_byte
*) msg
, buf
+ 1, len
);