1 /* Remote utility routines for the remote server for GDB.
2 Copyright (C) 1986-2022 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/>. */
24 #include "gdbthread.h"
28 #include "gdbsupport/rsp-low.h"
29 #include "gdbsupport/netstuff.h"
30 #include "gdbsupport/filestuff.h"
31 #include "gdbsupport/gdb-sigmask.h"
34 #include <sys/ioctl.h>
40 #include <netinet/in.h>
43 #include <sys/socket.h>
48 #if HAVE_NETINET_TCP_H
49 #include <netinet/tcp.h>
52 #include <sys/ioctl.h>
60 #include "gdbsupport/gdb_sys_time.h"
63 #include <arpa/inet.h>
71 #ifndef HAVE_SOCKLEN_T
72 typedef int socklen_t
;
75 #ifndef IN_PROCESS_AGENT
77 /* Extra value for readchar_callback. */
79 /* The callback is currently not scheduled. */
83 /* Status of the readchar callback.
84 Either NOT_SCHEDULED or the callback id. */
85 static int readchar_callback
= NOT_SCHEDULED
;
87 static int readchar (void);
88 static void reset_readchar (void);
89 static void reschedule (void);
91 /* A cache entry for a successfully looked-up symbol. */
96 struct sym_cache
*next
;
99 static int remote_is_stdio
= 0;
101 static int remote_desc
= -1;
102 static int listen_desc
= -1;
105 /* gnulib wraps these as macros, undo them. */
109 # define read(fd, buf, len) recv (fd, (char *) buf, len, 0)
110 # define write(fd, buf, len) send (fd, (char *) buf, len, 0)
116 return remote_desc
!= -1;
119 /* Return true if the remote connection is over stdio. */
122 remote_connection_is_stdio (void)
124 return remote_is_stdio
;
128 enable_async_notification (int fd
)
130 #if defined(F_SETFL) && defined (FASYNC)
131 int save_fcntl_flags
;
133 save_fcntl_flags
= fcntl (fd
, F_GETFL
, 0);
134 fcntl (fd
, F_SETFL
, save_fcntl_flags
| FASYNC
);
135 #if defined (F_SETOWN)
136 fcntl (fd
, F_SETOWN
, getpid ());
142 handle_accept_event (int err
, gdb_client_data client_data
)
144 struct sockaddr_storage sockaddr
;
145 socklen_t len
= sizeof (sockaddr
);
147 threads_debug_printf ("handling possible accept event");
149 remote_desc
= accept (listen_desc
, (struct sockaddr
*) &sockaddr
, &len
);
150 if (remote_desc
== -1)
151 perror_with_name ("Accept failed");
153 /* Enable TCP keep alive process. */
155 setsockopt (remote_desc
, SOL_SOCKET
, SO_KEEPALIVE
,
156 (char *) &tmp
, sizeof (tmp
));
158 /* Tell TCP not to delay small packets. This greatly speeds up
159 interactive response. */
161 setsockopt (remote_desc
, IPPROTO_TCP
, TCP_NODELAY
,
162 (char *) &tmp
, sizeof (tmp
));
165 signal (SIGPIPE
, SIG_IGN
); /* If we don't do this, then gdbserver simply
166 exits when the remote side dies. */
172 close (listen_desc
); /* No longer need this */
174 closesocket (listen_desc
); /* No longer need this */
178 /* Even if !RUN_ONCE no longer notice new connections. Still keep the
179 descriptor open for add_file_handler to wait for a new connection. */
180 delete_file_handler (listen_desc
);
182 /* Convert IP address to string. */
183 char orig_host
[GDB_NI_MAX_ADDR
], orig_port
[GDB_NI_MAX_PORT
];
185 int r
= getnameinfo ((struct sockaddr
*) &sockaddr
, len
,
186 orig_host
, sizeof (orig_host
),
187 orig_port
, sizeof (orig_port
),
188 NI_NUMERICHOST
| NI_NUMERICSERV
);
191 fprintf (stderr
, _("Could not obtain remote address: %s\n"),
194 fprintf (stderr
, _("Remote debugging from host %s, port %s\n"),
195 orig_host
, orig_port
);
197 enable_async_notification (remote_desc
);
199 /* Register the event loop handler. */
200 add_file_handler (remote_desc
, handle_serial_event
, NULL
, "remote-net");
202 /* We have a new GDB connection now. If we were disconnected
203 tracing, there's a window where the target could report a stop
204 event to the event loop, and since we have a connection now, we'd
205 try to send vStopped notifications to GDB. But, don't do that
206 until GDB as selected all-stop/non-stop, and has queried the
207 threads' status ('?'). */
211 /* Prepare for a later connection to a remote debugger.
212 NAME is the filename used for communication. */
215 remote_prepare (const char *name
)
217 client_state
&cs
= get_client_state ();
219 static int winsock_initialized
;
224 if (strcmp (name
, STDIO_CONNECTION_NAME
) == 0)
226 /* We need to record fact that we're using stdio sooner than the
227 call to remote_open so start_inferior knows the connection is
230 cs
.transport_is_reliable
= 1;
234 struct addrinfo hint
;
235 struct addrinfo
*ainfo
;
237 memset (&hint
, 0, sizeof (hint
));
238 /* Assume no prefix will be passed, therefore we should use
240 hint
.ai_family
= AF_UNSPEC
;
241 hint
.ai_socktype
= SOCK_STREAM
;
242 hint
.ai_protocol
= IPPROTO_TCP
;
244 parsed_connection_spec parsed
245 = parse_connection_spec_without_prefix (name
, &hint
);
247 if (parsed
.port_str
.empty ())
249 cs
.transport_is_reliable
= 0;
254 if (!winsock_initialized
)
258 WSAStartup (MAKEWORD (1, 0), &wsad
);
259 winsock_initialized
= 1;
263 int r
= getaddrinfo (parsed
.host_str
.c_str (), parsed
.port_str
.c_str (),
267 error (_("%s: cannot resolve name: %s"), name
, gai_strerror (r
));
269 scoped_free_addrinfo
freeaddrinfo (ainfo
);
271 struct addrinfo
*iter
;
273 for (iter
= ainfo
; iter
!= NULL
; iter
= iter
->ai_next
)
275 listen_desc
= gdb_socket_cloexec (iter
->ai_family
, iter
->ai_socktype
,
278 if (listen_desc
>= 0)
283 perror_with_name ("Can't open socket");
285 /* Allow rapid reuse of this port. */
287 setsockopt (listen_desc
, SOL_SOCKET
, SO_REUSEADDR
, (char *) &tmp
,
290 switch (iter
->ai_family
)
293 ((struct sockaddr_in
*) iter
->ai_addr
)->sin_addr
.s_addr
= INADDR_ANY
;
296 ((struct sockaddr_in6
*) iter
->ai_addr
)->sin6_addr
= in6addr_any
;
299 internal_error (__FILE__
, __LINE__
,
300 _("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
)
568 ULONGEST pid
= 0, tid
= 0;
572 /* Multi-process ptid. */
573 pp
= unpack_varlen_hex (p
+ 1, &pid
);
575 error ("invalid remote ptid: %s\n", p
);
579 tid
= hex_or_minus_one (p
, &pp
);
583 return ptid_t (pid
, tid
);
586 /* No multi-process. Just a tid. */
587 tid
= hex_or_minus_one (p
, &pp
);
589 /* Since GDB is not sending a process id (multi-process extensions
590 are off), then there's only one process. Default to the first in
592 pid
= pid_of (get_first_process ());
596 return ptid_t (pid
, tid
);
599 /* Write COUNT bytes in BUF to the client.
600 The result is the number of bytes written or -1 if error.
601 This may return less than COUNT. */
604 write_prim (const void *buf
, int count
)
606 if (remote_connection_is_stdio ())
607 return write (fileno (stdout
), buf
, count
);
609 return write (remote_desc
, buf
, count
);
612 /* Read COUNT bytes from the client and store in BUF.
613 The result is the number of bytes read or -1 if error.
614 This may return less than COUNT. */
617 read_prim (void *buf
, int count
)
619 if (remote_connection_is_stdio ())
620 return read (fileno (stdin
), buf
, count
);
622 return read (remote_desc
, buf
, count
);
625 /* Send a packet to the remote machine, with error checking.
626 The data of the packet is in BUF, and the length of the
627 packet is in CNT. Returns >= 0 on success, -1 otherwise. */
630 putpkt_binary_1 (char *buf
, int cnt
, int is_notif
)
632 client_state
&cs
= get_client_state ();
634 unsigned char csum
= 0;
639 buf2
= (char *) xmalloc (strlen ("$") + cnt
+ strlen ("#nn") + 1);
641 /* Copy the packet into buffer BUF2, encapsulating it
642 and giving it a checksum. */
650 for (i
= 0; i
< cnt
;)
651 i
+= try_rle (buf
+ i
, cnt
- i
, &csum
, &p
);
654 *p
++ = tohex ((csum
>> 4) & 0xf);
655 *p
++ = tohex (csum
& 0xf);
659 /* Send it over and over until we get a positive ack. */
663 if (write_prim (buf2
, p
- buf2
) != p
- buf2
)
665 perror ("putpkt(write)");
670 if (cs
.noack_mode
|| is_notif
)
672 /* Don't expect an ack then. */
674 remote_debug_printf ("putpkt (\"%s\"); [notif]", buf2
);
676 remote_debug_printf ("putpkt (\"%s\"); [noack mode]", buf2
);
681 remote_debug_printf ("putpkt (\"%s\"); [looking for ack]", buf2
);
691 remote_debug_printf ("[received '%c' (0x%x)]", cc
, cc
);
693 /* Check for an input interrupt while we're here. */
694 if (cc
== '\003' && current_thread
!= NULL
)
695 the_target
->request_interrupt ();
700 return 1; /* Success! */
704 putpkt_binary (char *buf
, int cnt
)
706 return putpkt_binary_1 (buf
, cnt
, 0);
709 /* Send a packet to the remote machine, with error checking. The data
710 of the packet is in BUF, and the packet should be a NUL-terminated
711 string. Returns >= 0 on success, -1 otherwise. */
716 return putpkt_binary (buf
, strlen (buf
));
720 putpkt_notif (char *buf
)
722 return putpkt_binary_1 (buf
, strlen (buf
), 1);
725 /* Come here when we get an input interrupt from the remote side. This
726 interrupt should only be active while we are waiting for the child to do
727 something. Thus this assumes readchar:bufcnt is 0.
728 About the only thing that should come through is a ^C, which
729 will cause us to request child interruption. */
732 input_interrupt (int unused
)
735 struct timeval immediate
= { 0, 0 };
737 /* Protect against spurious interrupts. This has been observed to
738 be a problem under NetBSD 1.4 and 1.5. */
741 FD_SET (remote_desc
, &readset
);
742 if (select (remote_desc
+ 1, &readset
, 0, 0, &immediate
) > 0)
747 cc
= read_prim (&c
, 1);
751 fprintf (stderr
, "client connection closed\n");
754 else if (cc
!= 1 || c
!= '\003')
756 fprintf (stderr
, "input_interrupt, count = %d c = %d ", cc
, c
);
758 fprintf (stderr
, "('%c')\n", c
);
760 fprintf (stderr
, "('\\x%02x')\n", c
& 0xff);
764 the_target
->request_interrupt ();
768 /* Check if the remote side sent us an interrupt request (^C). */
770 check_remote_input_interrupt_request (void)
772 /* This function may be called before establishing communications,
773 therefore we need to validate the remote descriptor. */
775 if (remote_desc
== -1)
781 /* Asynchronous I/O support. SIGIO must be unblocked when waiting,
782 in order to accept Control-C from the client, and must be blocked
783 when talking to the client. */
786 block_unblock_async_io (int block
)
791 sigemptyset (&sigio_set
);
792 sigaddset (&sigio_set
, SIGIO
);
793 gdb_sigmask (block
? SIG_BLOCK
: SIG_UNBLOCK
, &sigio_set
, NULL
);
797 /* Current state of asynchronous I/O. */
798 static int async_io_enabled
;
800 /* Enable asynchronous I/O. */
802 enable_async_io (void)
804 if (async_io_enabled
)
807 block_unblock_async_io (0);
809 async_io_enabled
= 1;
812 /* Disable asynchronous I/O. */
814 disable_async_io (void)
816 if (!async_io_enabled
)
819 block_unblock_async_io (1);
821 async_io_enabled
= 0;
825 initialize_async_io (void)
827 /* Make sure that async I/O starts blocked. */
828 async_io_enabled
= 1;
831 /* Install the signal handler. */
833 signal (SIGIO
, input_interrupt
);
837 /* Internal buffer used by readchar.
838 These are global to readchar because reschedule_remote needs to be
839 able to tell whether the buffer is empty. */
841 static unsigned char readchar_buf
[BUFSIZ
];
842 static int readchar_bufcnt
= 0;
843 static unsigned char *readchar_bufp
;
845 /* Returns next char from remote GDB. -1 if error. */
852 if (readchar_bufcnt
== 0)
854 readchar_bufcnt
= read_prim (readchar_buf
, sizeof (readchar_buf
));
856 if (readchar_bufcnt
<= 0)
858 if (readchar_bufcnt
== 0)
860 remote_debug_printf ("readchar: Got EOF");
868 readchar_bufp
= readchar_buf
;
872 ch
= *readchar_bufp
++;
877 /* Reset the readchar state machine. */
880 reset_readchar (void)
883 if (readchar_callback
!= NOT_SCHEDULED
)
885 delete_timer (readchar_callback
);
886 readchar_callback
= NOT_SCHEDULED
;
890 /* Process remaining data in readchar_buf. */
893 process_remaining (void *context
)
895 /* This is a one-shot event. */
896 readchar_callback
= NOT_SCHEDULED
;
898 if (readchar_bufcnt
> 0)
899 handle_serial_event (0, NULL
);
902 /* If there is still data in the buffer, queue another event to process it,
903 we can't sleep in select yet. */
908 if (readchar_bufcnt
> 0 && readchar_callback
== NOT_SCHEDULED
)
909 readchar_callback
= create_timer (0, process_remaining
, NULL
);
912 /* Read a packet from the remote machine, with error checking,
913 and store it in BUF. Returns length of packet, or negative if error. */
918 client_state
&cs
= get_client_state ();
920 unsigned char csum
, c1
, c2
;
931 /* The '\003' may appear before or after each packet, so
932 check for an input interrupt. */
935 the_target
->request_interrupt ();
942 remote_debug_printf ("[getpkt: discarding char '%c']", c
);
961 c1
= fromhex (readchar ());
962 c2
= fromhex (readchar ());
964 if (csum
== (c1
<< 4) + c2
)
970 "Bad checksum, sentsum=0x%x, csum=0x%x, "
971 "buf=%s [no-ack-mode, Bad medium?]\n",
972 (c1
<< 4) + c2
, csum
, buf
);
973 /* Not much we can do, GDB wasn't expecting an ack/nac. */
977 fprintf (stderr
, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
978 (c1
<< 4) + c2
, csum
, buf
);
979 if (write_prim ("-", 1) != 1)
985 remote_debug_printf ("getpkt (\"%s\"); [sending ack]", buf
);
987 if (write_prim ("+", 1) != 1)
990 remote_debug_printf ("[sent ack]");
993 remote_debug_printf ("getpkt (\"%s\"); [no ack sent]", buf
);
995 /* The readchar above may have already read a '\003' out of the socket
996 and moved it to the local buffer. For example, when GDB sends
997 vCont;c immediately followed by interrupt (see
998 gdb.base/interrupt-noterm.exp). As soon as we see the vCont;c, we'll
999 resume the inferior and wait. Since we've already moved the '\003'
1000 to the local buffer, SIGIO won't help. In that case, if we don't
1001 check for interrupt after the vCont;c packet, the interrupt character
1002 would stay in the buffer unattended until after the next (unrelated)
1004 while (readchar_bufcnt
> 0 && *readchar_bufp
== '\003')
1006 /* Consume the interrupt character in the buffer. */
1008 the_target
->request_interrupt ();
1015 write_ok (char *buf
)
1023 write_enn (char *buf
)
1025 /* Some day, we should define the meanings of the error codes... */
1034 #ifndef IN_PROCESS_AGENT
1037 outreg (struct regcache
*regcache
, int regno
, char *buf
)
1039 if ((regno
>> 12) != 0)
1040 *buf
++ = tohex ((regno
>> 12) & 0xf);
1041 if ((regno
>> 8) != 0)
1042 *buf
++ = tohex ((regno
>> 8) & 0xf);
1043 *buf
++ = tohex ((regno
>> 4) & 0xf);
1044 *buf
++ = tohex (regno
& 0xf);
1046 collect_register_as_string (regcache
, regno
, buf
);
1047 buf
+= 2 * register_size (regcache
->tdesc
, regno
);
1054 prepare_resume_reply (char *buf
, ptid_t ptid
, const target_waitstatus
&status
)
1056 client_state
&cs
= get_client_state ();
1057 threads_debug_printf ("Writing resume reply for %s:%d",
1058 target_pid_to_str (ptid
).c_str (), status
.kind ());
1060 switch (status
.kind ())
1062 case TARGET_WAITKIND_STOPPED
:
1063 case TARGET_WAITKIND_FORKED
:
1064 case TARGET_WAITKIND_VFORKED
:
1065 case TARGET_WAITKIND_VFORK_DONE
:
1066 case TARGET_WAITKIND_EXECD
:
1067 case TARGET_WAITKIND_THREAD_CREATED
:
1068 case TARGET_WAITKIND_SYSCALL_ENTRY
:
1069 case TARGET_WAITKIND_SYSCALL_RETURN
:
1072 struct regcache
*regcache
;
1073 char *buf_start
= buf
;
1075 if ((status
.kind () == TARGET_WAITKIND_FORKED
&& cs
.report_fork_events
)
1076 || (status
.kind () == TARGET_WAITKIND_VFORKED
1077 && cs
.report_vfork_events
))
1079 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1080 const char *event
= (status
.kind () == TARGET_WAITKIND_FORKED
1081 ? "fork" : "vfork");
1083 sprintf (buf
, "T%02x%s:", signal
, event
);
1084 buf
+= strlen (buf
);
1085 buf
= write_ptid (buf
, status
.child_ptid ());
1088 else if (status
.kind () == TARGET_WAITKIND_VFORK_DONE
1089 && cs
.report_vfork_events
)
1091 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1093 sprintf (buf
, "T%02xvforkdone:;", signal
);
1095 else if (status
.kind () == TARGET_WAITKIND_EXECD
&& cs
.report_exec_events
)
1097 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1098 const char *event
= "exec";
1099 char hexified_pathname
[PATH_MAX
* 2];
1101 sprintf (buf
, "T%02x%s:", signal
, event
);
1102 buf
+= strlen (buf
);
1104 /* Encode pathname to hexified format. */
1105 bin2hex ((const gdb_byte
*) status
.execd_pathname (),
1107 strlen (status
.execd_pathname ()));
1109 sprintf (buf
, "%s;", hexified_pathname
);
1110 buf
+= strlen (buf
);
1112 else if (status
.kind () == TARGET_WAITKIND_THREAD_CREATED
1113 && cs
.report_thread_events
)
1115 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1117 sprintf (buf
, "T%02xcreate:;", signal
);
1119 else if (status
.kind () == TARGET_WAITKIND_SYSCALL_ENTRY
1120 || status
.kind () == TARGET_WAITKIND_SYSCALL_RETURN
)
1122 enum gdb_signal signal
= GDB_SIGNAL_TRAP
;
1123 const char *event
= (status
.kind () == TARGET_WAITKIND_SYSCALL_ENTRY
1124 ? "syscall_entry" : "syscall_return");
1126 sprintf (buf
, "T%02x%s:%x;", signal
, event
,
1127 status
.syscall_number ());
1130 sprintf (buf
, "T%02x", status
.sig ());
1132 if (disable_packet_T
)
1134 /* This is a bit (OK, a lot) of a kludge, however, this isn't
1135 really a user feature, but exists only so GDB can use the
1136 gdbserver to test handling of the 'S' stop reply packet, so
1137 we would rather this code be as simple as possible.
1139 By this point we've started to build the 'T' stop packet,
1140 and it should look like 'Txx....' where 'x' is a hex digit.
1141 An 'S' stop packet always looks like 'Sxx', so all we do
1142 here is convert the buffer from a T packet to an S packet
1143 and the avoid adding any extra content by breaking out. */
1144 gdb_assert (buf_start
[0] == 'T');
1145 gdb_assert (isxdigit (buf_start
[1]));
1146 gdb_assert (isxdigit (buf_start
[2]));
1148 buf_start
[3] = '\0';
1152 buf
+= strlen (buf
);
1154 scoped_restore_current_thread restore_thread
;
1156 switch_to_thread (the_target
, ptid
);
1158 regp
= current_target_desc ()->expedite_regs
;
1160 regcache
= get_thread_regcache (current_thread
, 1);
1162 if (the_target
->stopped_by_watchpoint ())
1167 memcpy (buf
, "watch:", 6);
1170 addr
= the_target
->stopped_data_address ();
1172 /* Convert each byte of the address into two hexadecimal
1173 chars. Note that we take sizeof (void *) instead of
1174 sizeof (addr); this is to avoid sending a 64-bit
1175 address to a 32-bit GDB. */
1176 for (i
= sizeof (void *) * 2; i
> 0; i
--)
1177 *buf
++ = tohex ((addr
>> (i
- 1) * 4) & 0xf);
1180 else if (cs
.swbreak_feature
&& target_stopped_by_sw_breakpoint ())
1182 sprintf (buf
, "swbreak:;");
1183 buf
+= strlen (buf
);
1185 else if (cs
.hwbreak_feature
&& target_stopped_by_hw_breakpoint ())
1187 sprintf (buf
, "hwbreak:;");
1188 buf
+= strlen (buf
);
1193 buf
= outreg (regcache
, find_regno (regcache
->tdesc
, *regp
), buf
);
1198 /* Formerly, if the debugger had not used any thread features
1199 we would not burden it with a thread status response. This
1200 was for the benefit of GDB 4.13 and older. However, in
1201 recent GDB versions the check (``if (cont_thread != 0)'')
1202 does not have the desired effect because of sillyness in
1203 the way that the remote protocol handles specifying a
1204 thread. Since thread support relies on qSymbol support
1205 anyway, assume GDB can handle threads. */
1207 if (using_threads
&& !disable_packet_Tthread
)
1209 /* This if (1) ought to be unnecessary. But remote_wait
1210 in GDB will claim this event belongs to inferior_ptid
1211 if we do not specify a thread, and there's no way for
1212 gdbserver to know what inferior_ptid is. */
1213 if (1 || cs
.general_thread
!= ptid
)
1216 /* In non-stop, don't change the general thread behind
1219 cs
.general_thread
= ptid
;
1220 sprintf (buf
, "thread:");
1221 buf
+= strlen (buf
);
1222 buf
= write_ptid (buf
, ptid
);
1224 buf
+= strlen (buf
);
1226 core
= target_core_of_thread (ptid
);
1230 sprintf (buf
, "core:");
1231 buf
+= strlen (buf
);
1232 sprintf (buf
, "%x", core
);
1234 buf
+= strlen (buf
);
1239 if (current_process ()->dlls_changed
)
1241 strcpy (buf
, "library:;");
1242 buf
+= strlen (buf
);
1243 current_process ()->dlls_changed
= false;
1247 case TARGET_WAITKIND_EXITED
:
1248 if (cs
.multi_process
)
1249 sprintf (buf
, "W%x;process:%x",
1250 status
.exit_status (), ptid
.pid ());
1252 sprintf (buf
, "W%02x", status
.exit_status ());
1254 case TARGET_WAITKIND_SIGNALLED
:
1255 if (cs
.multi_process
)
1256 sprintf (buf
, "X%x;process:%x",
1257 status
.sig (), ptid
.pid ());
1259 sprintf (buf
, "X%02x", status
.sig ());
1261 case TARGET_WAITKIND_THREAD_EXITED
:
1262 sprintf (buf
, "w%x;", status
.exit_status ());
1263 buf
+= strlen (buf
);
1264 buf
= write_ptid (buf
, ptid
);
1266 case TARGET_WAITKIND_NO_RESUMED
:
1270 error ("unhandled waitkind");
1275 /* See remote-utils.h. */
1278 decode_m_packet_params (const char *from
, CORE_ADDR
*mem_addr_ptr
,
1279 unsigned int *len_ptr
, const char end_marker
)
1283 *mem_addr_ptr
= *len_ptr
= 0;
1285 while ((ch
= from
[i
++]) != ',')
1287 *mem_addr_ptr
= *mem_addr_ptr
<< 4;
1288 *mem_addr_ptr
|= fromhex (ch
) & 0x0f;
1291 while ((ch
= from
[i
++]) != end_marker
)
1293 *len_ptr
= *len_ptr
<< 4;
1294 *len_ptr
|= fromhex (ch
) & 0x0f;
1301 decode_m_packet (const char *from
, CORE_ADDR
*mem_addr_ptr
,
1302 unsigned int *len_ptr
)
1304 decode_m_packet_params (from
, mem_addr_ptr
, len_ptr
, '\0');
1308 decode_M_packet (const char *from
, CORE_ADDR
*mem_addr_ptr
,
1309 unsigned int *len_ptr
, unsigned char **to_p
)
1311 from
= decode_m_packet_params (from
, mem_addr_ptr
, len_ptr
, ':');
1314 *to_p
= (unsigned char *) xmalloc (*len_ptr
);
1316 hex2bin (from
, *to_p
, *len_ptr
);
1320 decode_X_packet (char *from
, int packet_len
, CORE_ADDR
*mem_addr_ptr
,
1321 unsigned int *len_ptr
, unsigned char **to_p
)
1325 *mem_addr_ptr
= *len_ptr
= 0;
1327 while ((ch
= from
[i
++]) != ',')
1329 *mem_addr_ptr
= *mem_addr_ptr
<< 4;
1330 *mem_addr_ptr
|= fromhex (ch
) & 0x0f;
1333 while ((ch
= from
[i
++]) != ':')
1335 *len_ptr
= *len_ptr
<< 4;
1336 *len_ptr
|= fromhex (ch
) & 0x0f;
1340 *to_p
= (unsigned char *) xmalloc (*len_ptr
);
1342 if (remote_unescape_input ((const gdb_byte
*) &from
[i
], packet_len
- i
,
1343 *to_p
, *len_ptr
) != *len_ptr
)
1349 /* Decode a qXfer write request. */
1352 decode_xfer_write (char *buf
, int packet_len
, CORE_ADDR
*offset
,
1353 unsigned int *len
, unsigned char *data
)
1358 /* Extract the offset. */
1360 while ((ch
= *buf
++) != ':')
1362 *offset
= *offset
<< 4;
1363 *offset
|= fromhex (ch
) & 0x0f;
1366 /* Get encoded data. */
1367 packet_len
-= buf
- b
;
1368 *len
= remote_unescape_input ((const gdb_byte
*) buf
, packet_len
,
1373 /* Decode the parameters of a qSearch:memory packet. */
1376 decode_search_memory_packet (const char *buf
, int packet_len
,
1377 CORE_ADDR
*start_addrp
,
1378 CORE_ADDR
*search_space_lenp
,
1379 gdb_byte
*pattern
, unsigned int *pattern_lenp
)
1381 const char *p
= buf
;
1383 p
= decode_address_to_semicolon (start_addrp
, p
);
1384 p
= decode_address_to_semicolon (search_space_lenp
, p
);
1385 packet_len
-= p
- buf
;
1386 *pattern_lenp
= remote_unescape_input ((const gdb_byte
*) p
, packet_len
,
1387 pattern
, packet_len
);
1392 free_sym_cache (struct sym_cache
*sym
)
1402 clear_symbol_cache (struct sym_cache
**symcache_p
)
1404 struct sym_cache
*sym
, *next
;
1406 /* Check the cache first. */
1407 for (sym
= *symcache_p
; sym
; sym
= next
)
1410 free_sym_cache (sym
);
1416 /* Get the address of NAME, and return it in ADDRP if found. if
1417 MAY_ASK_GDB is false, assume symbol cache misses are failures.
1418 Returns 1 if the symbol is found, 0 if it is not, -1 on error. */
1421 look_up_one_symbol (const char *name
, CORE_ADDR
*addrp
, int may_ask_gdb
)
1423 client_state
&cs
= get_client_state ();
1426 struct sym_cache
*sym
;
1427 struct process_info
*proc
;
1429 proc
= current_process ();
1431 /* Check the cache first. */
1432 for (sym
= proc
->symbol_cache
; sym
; sym
= sym
->next
)
1433 if (strcmp (name
, sym
->name
) == 0)
1439 /* It might not be an appropriate time to look up a symbol,
1440 e.g. while we're trying to fetch registers. */
1444 /* Send the request. */
1445 strcpy (cs
.own_buf
, "qSymbol:");
1446 bin2hex ((const gdb_byte
*) name
, cs
.own_buf
+ strlen ("qSymbol:"),
1448 if (putpkt (cs
.own_buf
) < 0)
1451 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
1452 len
= getpkt (cs
.own_buf
);
1456 /* We ought to handle pretty much any packet at this point while we
1457 wait for the qSymbol "response". That requires re-entering the
1458 main loop. For now, this is an adequate approximation; allow
1459 GDB to read from memory and handle 'v' packets (for vFile transfers)
1460 while it figures out the address of the symbol. */
1463 if (cs
.own_buf
[0] == 'm')
1466 unsigned char *mem_buf
;
1467 unsigned int mem_len
;
1469 decode_m_packet (&cs
.own_buf
[1], &mem_addr
, &mem_len
);
1470 mem_buf
= (unsigned char *) xmalloc (mem_len
);
1471 if (read_inferior_memory (mem_addr
, mem_buf
, mem_len
) == 0)
1472 bin2hex (mem_buf
, cs
.own_buf
, mem_len
);
1474 write_enn (cs
.own_buf
);
1476 if (putpkt (cs
.own_buf
) < 0)
1479 else if (cs
.own_buf
[0] == 'v')
1482 handle_v_requests (cs
.own_buf
, len
, &new_len
);
1484 putpkt_binary (cs
.own_buf
, new_len
);
1486 putpkt (cs
.own_buf
);
1490 len
= getpkt (cs
.own_buf
);
1495 if (!startswith (cs
.own_buf
, "qSymbol:"))
1497 warning ("Malformed response to qSymbol, ignoring: %s", cs
.own_buf
);
1501 p
= cs
.own_buf
+ strlen ("qSymbol:");
1503 while (*q
&& *q
!= ':')
1506 /* Make sure we found a value for the symbol. */
1507 if (p
== q
|| *q
== '\0')
1510 decode_address (addrp
, p
, q
- p
);
1512 /* Save the symbol in our cache. */
1513 sym
= XNEW (struct sym_cache
);
1514 sym
->name
= xstrdup (name
);
1516 sym
->next
= proc
->symbol_cache
;
1517 proc
->symbol_cache
= sym
;
1522 /* Relocate an instruction to execute at a different address. OLDLOC
1523 is the address in the inferior memory where the instruction to
1524 relocate is currently at. On input, TO points to the destination
1525 where we want the instruction to be copied (and possibly adjusted)
1526 to. On output, it points to one past the end of the resulting
1527 instruction(s). The effect of executing the instruction at TO
1528 shall be the same as if executing it at OLDLOC. For example, call
1529 instructions that implicitly push the return address on the stack
1530 should be adjusted to return to the instruction after OLDLOC;
1531 relative branches, and other PC-relative instructions need the
1532 offset adjusted; etc. Returns 0 on success, -1 on failure. */
1535 relocate_instruction (CORE_ADDR
*to
, CORE_ADDR oldloc
)
1537 client_state
&cs
= get_client_state ();
1539 ULONGEST written
= 0;
1541 /* Send the request. */
1542 sprintf (cs
.own_buf
, "qRelocInsn:%s;%s", paddress (oldloc
),
1544 if (putpkt (cs
.own_buf
) < 0)
1547 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
1548 len
= getpkt (cs
.own_buf
);
1552 /* We ought to handle pretty much any packet at this point while we
1553 wait for the qRelocInsn "response". That requires re-entering
1554 the main loop. For now, this is an adequate approximation; allow
1555 GDB to access memory. */
1556 while (cs
.own_buf
[0] == 'm' || cs
.own_buf
[0] == 'M' || cs
.own_buf
[0] == 'X')
1559 unsigned char *mem_buf
= NULL
;
1560 unsigned int mem_len
;
1562 if (cs
.own_buf
[0] == 'm')
1564 decode_m_packet (&cs
.own_buf
[1], &mem_addr
, &mem_len
);
1565 mem_buf
= (unsigned char *) xmalloc (mem_len
);
1566 if (read_inferior_memory (mem_addr
, mem_buf
, mem_len
) == 0)
1567 bin2hex (mem_buf
, cs
.own_buf
, mem_len
);
1569 write_enn (cs
.own_buf
);
1571 else if (cs
.own_buf
[0] == 'X')
1573 if (decode_X_packet (&cs
.own_buf
[1], len
- 1, &mem_addr
,
1574 &mem_len
, &mem_buf
) < 0
1575 || target_write_memory (mem_addr
, mem_buf
, mem_len
) != 0)
1576 write_enn (cs
.own_buf
);
1578 write_ok (cs
.own_buf
);
1582 decode_M_packet (&cs
.own_buf
[1], &mem_addr
, &mem_len
, &mem_buf
);
1583 if (target_write_memory (mem_addr
, mem_buf
, mem_len
) == 0)
1584 write_ok (cs
.own_buf
);
1586 write_enn (cs
.own_buf
);
1589 if (putpkt (cs
.own_buf
) < 0)
1591 len
= getpkt (cs
.own_buf
);
1596 if (cs
.own_buf
[0] == 'E')
1598 warning ("An error occurred while relocating an instruction: %s",
1603 if (!startswith (cs
.own_buf
, "qRelocInsn:"))
1605 warning ("Malformed response to qRelocInsn, ignoring: %s",
1610 unpack_varlen_hex (cs
.own_buf
+ strlen ("qRelocInsn:"), &written
);
1617 monitor_output (const char *msg
)
1619 int len
= strlen (msg
);
1620 char *buf
= (char *) xmalloc (len
* 2 + 2);
1623 bin2hex ((const gdb_byte
*) msg
, buf
+ 1, len
);