Automatic date update in version.in
[deliverable/binutils-gdb.git] / gdbserver / remote-utils.cc
CommitLineData
c906108c 1/* Remote utility routines for the remote server for GDB.
3666a048 2 Copyright (C) 1986-2021 Free Software Foundation, Inc.
c906108c 3
c5aa993b 4 This file is part of GDB.
c906108c 5
c5aa993b
JM
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
a9762ec7 8 the Free Software Foundation; either version 3 of the License, or
c5aa993b 9 (at your option) any later version.
c906108c 10
c5aa993b
JM
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.
c906108c 15
c5aa993b 16 You should have received a copy of the GNU General Public License
a9762ec7 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
18
19#include "server.h"
726e1356
PA
20#if HAVE_TERMIOS_H
21#include <termios.h>
22#endif
5b1c542e 23#include "target.h"
623b6bdf 24#include "gdbthread.h"
3aee8918 25#include "tdesc.h"
f9d949fb 26#include "debug.h"
799cdc37 27#include "dll.h"
268a13a5
TT
28#include "gdbsupport/rsp-low.h"
29#include "gdbsupport/netstuff.h"
30#include "gdbsupport/filestuff.h"
21987b9c 31#include "gdbsupport/gdb-sigmask.h"
fafcc06a 32#include <ctype.h>
b80864fb 33#if HAVE_SYS_IOCTL_H
c906108c 34#include <sys/ioctl.h>
b80864fb 35#endif
68070c10 36#if HAVE_SYS_FILE_H
c906108c 37#include <sys/file.h>
68070c10 38#endif
9eb1356e
PA
39#if HAVE_NETINET_IN_H
40#include <netinet/in.h>
41#endif
42#if HAVE_SYS_SOCKET_H
43#include <sys/socket.h>
44#endif
b80864fb 45#if HAVE_NETDB_H
c906108c 46#include <netdb.h>
b80864fb
DJ
47#endif
48#if HAVE_NETINET_TCP_H
c906108c 49#include <netinet/tcp.h>
b80864fb
DJ
50#endif
51#if HAVE_SYS_IOCTL_H
c906108c 52#include <sys/ioctl.h>
b80864fb 53#endif
68070c10 54#if HAVE_SIGNAL_H
c906108c 55#include <signal.h>
68070c10
PA
56#endif
57#if HAVE_FCNTL_H
c906108c 58#include <fcntl.h>
68070c10 59#endif
268a13a5 60#include "gdbsupport/gdb_sys_time.h"
cf30a8e1 61#include <unistd.h>
b80864fb 62#if HAVE_ARPA_INET_H
0729219d 63#include <arpa/inet.h>
b80864fb 64#endif
53ce3c39 65#include <sys/stat.h>
9eb1356e
PA
66
67#if USE_WIN32API
41fa577f 68#include <ws2tcpip.h>
9eb1356e 69#endif
c906108c 70
f450004a
DJ
71#ifndef HAVE_SOCKLEN_T
72typedef int socklen_t;
73#endif
74
0fb4aa4b
PA
75#ifndef IN_PROCESS_AGENT
76
24b066ba
DE
77/* Extra value for readchar_callback. */
78enum {
79 /* The callback is currently not scheduled. */
80 NOT_SCHEDULED = -1
81};
82
83/* Status of the readchar callback.
84 Either NOT_SCHEDULED or the callback id. */
85static int readchar_callback = NOT_SCHEDULED;
86
bc3b5632 87static int readchar (void);
24b066ba
DE
88static void reset_readchar (void);
89static void reschedule (void);
bc3b5632 90
fd500816
DJ
91/* A cache entry for a successfully looked-up symbol. */
92struct sym_cache
93{
95954743 94 char *name;
fd500816
DJ
95 CORE_ADDR addr;
96 struct sym_cache *next;
97};
98
e0f9f062
DE
99static int remote_is_stdio = 0;
100
73944e9f
TT
101static int remote_desc = -1;
102static int listen_desc = -1;
c906108c 103
0f48aa01 104#ifdef USE_WIN32API
9c9d63b1
PM
105/* gnulib wraps these as macros, undo them. */
106# undef read
107# undef write
108
68070c10
PA
109# define read(fd, buf, len) recv (fd, (char *) buf, len, 0)
110# define write(fd, buf, len) send (fd, (char *) buf, len, 0)
0f48aa01
DJ
111#endif
112
8336d594
PA
113int
114gdb_connected (void)
115{
73944e9f 116 return remote_desc != -1;
8336d594
PA
117}
118
e0f9f062
DE
119/* Return true if the remote connection is over stdio. */
120
121int
122remote_connection_is_stdio (void)
123{
124 return remote_is_stdio;
125}
126
8336d594
PA
127static void
128enable_async_notification (int fd)
129{
130#if defined(F_SETFL) && defined (FASYNC)
131 int save_fcntl_flags;
132
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 ());
137#endif
138#endif
139}
140
55d7aec8 141static void
8336d594
PA
142handle_accept_event (int err, gdb_client_data client_data)
143{
c7ab0aef
SDJ
144 struct sockaddr_storage sockaddr;
145 socklen_t len = sizeof (sockaddr);
8336d594
PA
146
147 if (debug_threads)
87ce2a04 148 debug_printf ("handling possible accept event\n");
8336d594 149
c7ab0aef 150 remote_desc = accept (listen_desc, (struct sockaddr *) &sockaddr, &len);
8336d594
PA
151 if (remote_desc == -1)
152 perror_with_name ("Accept failed");
153
154 /* Enable TCP keep alive process. */
c7ab0aef 155 socklen_t tmp = 1;
8336d594
PA
156 setsockopt (remote_desc, SOL_SOCKET, SO_KEEPALIVE,
157 (char *) &tmp, sizeof (tmp));
158
159 /* Tell TCP not to delay small packets. This greatly speeds up
160 interactive response. */
161 tmp = 1;
162 setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY,
163 (char *) &tmp, sizeof (tmp));
164
165#ifndef USE_WIN32API
8336d594
PA
166 signal (SIGPIPE, SIG_IGN); /* If we don't do this, then gdbserver simply
167 exits when the remote side dies. */
03f2bd59
JK
168#endif
169
170 if (run_once)
171 {
172#ifndef USE_WIN32API
173 close (listen_desc); /* No longer need this */
8336d594 174#else
03f2bd59 175 closesocket (listen_desc); /* No longer need this */
8336d594 176#endif
03f2bd59 177 }
8336d594 178
03f2bd59
JK
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. */
8336d594
PA
181 delete_file_handler (listen_desc);
182
80e24d09
SM
183 /* Convert IP address to string. */
184 char orig_host[GDB_NI_MAX_ADDR], orig_port[GDB_NI_MAX_PORT];
c7ab0aef 185
80e24d09
SM
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);
c7ab0aef 190
80e24d09
SM
191 if (r != 0)
192 fprintf (stderr, _("Could not obtain remote address: %s\n"),
193 gai_strerror (r));
c7ab0aef 194 else
80e24d09
SM
195 fprintf (stderr, _("Remote debugging from host %s, port %s\n"),
196 orig_host, orig_port);
8336d594
PA
197
198 enable_async_notification (remote_desc);
199
200 /* Register the event loop handler. */
2554f6f5 201 add_file_handler (remote_desc, handle_serial_event, NULL, "remote-net");
8336d594
PA
202
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 ('?'). */
209 target_async (0);
8336d594
PA
210}
211
03f2bd59
JK
212/* Prepare for a later connection to a remote debugger.
213 NAME is the filename used for communication. */
214
215void
fb32b4f7 216remote_prepare (const char *name)
03f2bd59 217{
c12a5089 218 client_state &cs = get_client_state ();
03f2bd59
JK
219#ifdef USE_WIN32API
220 static int winsock_initialized;
221#endif
03f2bd59 222 socklen_t tmp;
03f2bd59 223
e0f9f062
DE
224 remote_is_stdio = 0;
225 if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
226 {
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
229 via stdio. */
230 remote_is_stdio = 1;
c12a5089 231 cs.transport_is_reliable = 1;
e0f9f062
DE
232 return;
233 }
234
c7ab0aef
SDJ
235 struct addrinfo hint;
236 struct addrinfo *ainfo;
237
238 memset (&hint, 0, sizeof (hint));
239 /* Assume no prefix will be passed, therefore we should use
240 AF_UNSPEC. */
241 hint.ai_family = AF_UNSPEC;
242 hint.ai_socktype = SOCK_STREAM;
243 hint.ai_protocol = IPPROTO_TCP;
244
245 parsed_connection_spec parsed
80e24d09 246 = parse_connection_spec_without_prefix (name, &hint);
c7ab0aef
SDJ
247
248 if (parsed.port_str.empty ())
03f2bd59 249 {
c12a5089 250 cs.transport_is_reliable = 0;
03f2bd59
JK
251 return;
252 }
253
03f2bd59
JK
254#ifdef USE_WIN32API
255 if (!winsock_initialized)
256 {
257 WSADATA wsad;
258
259 WSAStartup (MAKEWORD (1, 0), &wsad);
260 winsock_initialized = 1;
261 }
262#endif
263
80e24d09
SM
264 int r = getaddrinfo (parsed.host_str.c_str (), parsed.port_str.c_str (),
265 &hint, &ainfo);
c7ab0aef 266
80e24d09
SM
267 if (r != 0)
268 error (_("%s: cannot resolve name: %s"), name, gai_strerror (r));
c7ab0aef 269
80e24d09 270 scoped_free_addrinfo freeaddrinfo (ainfo);
c7ab0aef 271
80e24d09 272 struct addrinfo *iter;
c7ab0aef 273
80e24d09 274 for (iter = ainfo; iter != NULL; iter = iter->ai_next)
f19c7ff8 275 {
80e24d09
SM
276 listen_desc = gdb_socket_cloexec (iter->ai_family, iter->ai_socktype,
277 iter->ai_protocol);
f19c7ff8 278
80e24d09
SM
279 if (listen_desc >= 0)
280 break;
281 }
f19c7ff8 282
80e24d09
SM
283 if (iter == NULL)
284 perror_with_name ("Can't open socket");
f19c7ff8 285
80e24d09
SM
286 /* Allow rapid reuse of this port. */
287 tmp = 1;
288 setsockopt (listen_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp,
289 sizeof (tmp));
f19c7ff8 290
80e24d09
SM
291 switch (iter->ai_family)
292 {
293 case AF_INET:
294 ((struct sockaddr_in *) iter->ai_addr)->sin_addr.s_addr = INADDR_ANY;
295 break;
296 case AF_INET6:
297 ((struct sockaddr_in6 *) iter->ai_addr)->sin6_addr = in6addr_any;
298 break;
299 default:
300 internal_error (__FILE__, __LINE__,
301 _("Invalid 'ai_family' %d\n"), iter->ai_family);
c7ab0aef 302 }
03f2bd59 303
80e24d09 304 if (bind (listen_desc, iter->ai_addr, iter->ai_addrlen) != 0)
03f2bd59
JK
305 perror_with_name ("Can't bind address");
306
c7ab0aef
SDJ
307 if (listen (listen_desc, 1) != 0)
308 perror_with_name ("Can't listen on socket");
309
c12a5089 310 cs.transport_is_reliable = 1;
03f2bd59
JK
311}
312
c906108c
SS
313/* Open a connection to a remote debugger.
314 NAME is the filename used for communication. */
315
316void
fb32b4f7 317remote_open (const char *name)
c906108c 318{
fb32b4f7 319 const char *port_str;
8264bb58
DJ
320
321 port_str = strchr (name, ':');
e0f9f062 322#ifdef USE_WIN32API
8264bb58 323 if (port_str == NULL)
752312ba 324 error ("Only HOST:PORT is supported on this platform.");
e0f9f062
DE
325#endif
326
327 if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
328 {
329 fprintf (stderr, "Remote debugging using stdio\n");
330
331 /* Use stdin as the handle of the connection.
332 We only select on reads, for example. */
333 remote_desc = fileno (stdin);
334
335 enable_async_notification (remote_desc);
336
337 /* Register the event loop handler. */
2554f6f5 338 add_file_handler (remote_desc, handle_serial_event, NULL, "remote-stdio");
e0f9f062
DE
339 }
340#ifndef USE_WIN32API
341 else if (port_str == NULL)
80e24d09 342 {
8264bb58
DJ
343 struct stat statbuf;
344
345 if (stat (name, &statbuf) == 0
80e24d09 346 && (S_ISCHR (statbuf.st_mode) || S_ISFIFO (statbuf.st_mode)))
8264bb58
DJ
347 remote_desc = open (name, O_RDWR);
348 else
349 {
350 errno = EINVAL;
351 remote_desc = -1;
352 }
353
c906108c
SS
354 if (remote_desc < 0)
355 perror_with_name ("Could not open remote device");
356
726e1356 357#if HAVE_TERMIOS_H
c906108c
SS
358 {
359 struct termios termios;
c5aa993b 360 tcgetattr (remote_desc, &termios);
c906108c
SS
361
362 termios.c_iflag = 0;
363 termios.c_oflag = 0;
364 termios.c_lflag = 0;
c5aa993b 365 termios.c_cflag &= ~(CSIZE | PARENB);
c906108c 366 termios.c_cflag |= CLOCAL | CS8;
d0608e50 367 termios.c_cc[VMIN] = 1;
c906108c
SS
368 termios.c_cc[VTIME] = 0;
369
c5aa993b 370 tcsetattr (remote_desc, TCSANOW, &termios);
c906108c
SS
371 }
372#endif
373
e641a1ca 374 fprintf (stderr, "Remote debugging using %s\n", name);
a6f3e723 375
8336d594
PA
376 enable_async_notification (remote_desc);
377
378 /* Register the event loop handler. */
2554f6f5
SM
379 add_file_handler (remote_desc, handle_serial_event, NULL,
380 "remote-device");
c906108c 381 }
e0f9f062 382#endif /* USE_WIN32API */
c906108c
SS
383 else
384 {
c7ab0aef
SDJ
385 char listen_port[GDB_NI_MAX_PORT];
386 struct sockaddr_storage sockaddr;
387 socklen_t len = sizeof (sockaddr);
388
389 if (getsockname (listen_desc, (struct sockaddr *) &sockaddr, &len) < 0)
03f2bd59 390 perror_with_name ("Can't determine port");
6f8486da 391
c7ab0aef
SDJ
392 int r = getnameinfo ((struct sockaddr *) &sockaddr, len,
393 NULL, 0,
394 listen_port, sizeof (listen_port),
395 NI_NUMERICSERV);
396
397 if (r != 0)
398 fprintf (stderr, _("Can't obtain port where we are listening: %s"),
399 gai_strerror (r));
400 else
401 fprintf (stderr, _("Listening on port %s\n"), listen_port);
402
b80864fb 403 fflush (stderr);
6910d122 404
8336d594 405 /* Register the event loop handler. */
2554f6f5
SM
406 add_file_handler (listen_desc, handle_accept_event, NULL,
407 "remote-listen");
c906108c 408 }
c906108c
SS
409}
410
411void
fba45db2 412remote_close (void)
c906108c 413{
bd99dc85
PA
414 delete_file_handler (remote_desc);
415
e849ea89 416 disable_async_io ();
8b207339 417
b80864fb
DJ
418#ifdef USE_WIN32API
419 closesocket (remote_desc);
420#else
e0f9f062
DE
421 if (! remote_connection_is_stdio ())
422 close (remote_desc);
b80864fb 423#endif
73944e9f 424 remote_desc = -1;
24b066ba
DE
425
426 reset_readchar ();
c906108c
SS
427}
428
0fb4aa4b
PA
429#endif
430
0fb4aa4b
PA
431#ifndef IN_PROCESS_AGENT
432
dae5f5cf 433void
2f2893d9
DJ
434decode_address (CORE_ADDR *addrp, const char *start, int len)
435{
436 CORE_ADDR addr;
437 char ch;
438 int i;
439
440 addr = 0;
441 for (i = 0; i < len; i++)
442 {
443 ch = start[i];
444 addr = addr << 4;
445 addr = addr | (fromhex (ch) & 0x0f);
446 }
447 *addrp = addr;
448}
449
89be2091
DJ
450const char *
451decode_address_to_semicolon (CORE_ADDR *addrp, const char *start)
452{
453 const char *end;
454
455 end = start;
456 while (*end != '\0' && *end != ';')
457 end++;
458
459 decode_address (addrp, start, end - start);
460
461 if (*end == ';')
462 end++;
463 return end;
464}
465
0fb4aa4b
PA
466#endif
467
0fb4aa4b
PA
468#ifndef IN_PROCESS_AGENT
469
5ffff7c1
DJ
470/* Look for a sequence of characters which can be run-length encoded.
471 If there are any, update *CSUM and *P. Otherwise, output the
472 single character. Return the number of characters consumed. */
473
474static int
475try_rle (char *buf, int remaining, unsigned char *csum, char **p)
476{
477 int n;
478
479 /* Always output the character. */
480 *csum += buf[0];
481 *(*p)++ = buf[0];
482
483 /* Don't go past '~'. */
484 if (remaining > 97)
485 remaining = 97;
486
487 for (n = 1; n < remaining; n++)
488 if (buf[n] != buf[0])
489 break;
490
491 /* N is the index of the first character not the same as buf[0].
492 buf[0] is counted twice, so by decrementing N, we get the number
493 of characters the RLE sequence will replace. */
494 n--;
495
496 if (n < 3)
497 return 1;
498
499 /* Skip the frame characters. The manual says to skip '+' and '-'
500 also, but there's no reason to. Unfortunately these two unusable
501 characters double the encoded length of a four byte zero
502 value. */
503 while (n + 29 == '$' || n + 29 == '#')
504 n--;
505
506 *csum += '*';
507 *(*p)++ = '*';
508 *csum += n + 29;
509 *(*p)++ = n + 29;
510
511 return n + 1;
512}
513
0fb4aa4b
PA
514#endif
515
0fb4aa4b
PA
516#ifndef IN_PROCESS_AGENT
517
95954743
PA
518/* Write a PTID to BUF. Returns BUF+CHARACTERS_WRITTEN. */
519
520char *
521write_ptid (char *buf, ptid_t ptid)
522{
c12a5089 523 client_state &cs = get_client_state ();
95954743
PA
524 int pid, tid;
525
c12a5089 526 if (cs.multi_process)
95954743 527 {
e99b03dc 528 pid = ptid.pid ();
95954743
PA
529 if (pid < 0)
530 buf += sprintf (buf, "p-%x.", -pid);
531 else
532 buf += sprintf (buf, "p%x.", pid);
533 }
e38504b3 534 tid = ptid.lwp ();
95954743
PA
535 if (tid < 0)
536 buf += sprintf (buf, "-%x", -tid);
537 else
538 buf += sprintf (buf, "%x", tid);
539
540 return buf;
541}
542
5b3da067 543static ULONGEST
256642e8 544hex_or_minus_one (const char *buf, const char **obuf)
95954743
PA
545{
546 ULONGEST ret;
547
61012eef 548 if (startswith (buf, "-1"))
95954743
PA
549 {
550 ret = (ULONGEST) -1;
551 buf += 2;
552 }
553 else
554 buf = unpack_varlen_hex (buf, &ret);
555
556 if (obuf)
557 *obuf = buf;
558
559 return ret;
560}
561
562/* Extract a PTID from BUF. If non-null, OBUF is set to the to one
563 passed the last parsed char. Returns null_ptid on error. */
564ptid_t
256642e8 565read_ptid (const char *buf, const char **obuf)
95954743 566{
256642e8
PA
567 const char *p = buf;
568 const char *pp;
95954743
PA
569 ULONGEST pid = 0, tid = 0;
570
571 if (*p == 'p')
572 {
573 /* Multi-process ptid. */
574 pp = unpack_varlen_hex (p + 1, &pid);
575 if (*pp != '.')
576 error ("invalid remote ptid: %s\n", p);
577
578 p = pp + 1;
579
580 tid = hex_or_minus_one (p, &pp);
581
582 if (obuf)
583 *obuf = pp;
fd79271b 584 return ptid_t (pid, tid, 0);
95954743
PA
585 }
586
587 /* No multi-process. Just a tid. */
588 tid = hex_or_minus_one (p, &pp);
589
3d40fbb5
PA
590 /* Since GDB is not sending a process id (multi-process extensions
591 are off), then there's only one process. Default to the first in
592 the list. */
593 pid = pid_of (get_first_process ());
95954743
PA
594
595 if (obuf)
596 *obuf = pp;
fd79271b 597 return ptid_t (pid, tid, 0);
95954743
PA
598}
599
e0f9f062
DE
600/* Write COUNT bytes in BUF to the client.
601 The result is the number of bytes written or -1 if error.
602 This may return less than COUNT. */
603
604static int
605write_prim (const void *buf, int count)
606{
607 if (remote_connection_is_stdio ())
608 return write (fileno (stdout), buf, count);
609 else
610 return write (remote_desc, buf, count);
611}
612
613/* Read COUNT bytes from the client and store in BUF.
614 The result is the number of bytes read or -1 if error.
615 This may return less than COUNT. */
616
617static int
618read_prim (void *buf, int count)
619{
620 if (remote_connection_is_stdio ())
621 return read (fileno (stdin), buf, count);
622 else
623 return read (remote_desc, buf, count);
624}
625
c906108c 626/* Send a packet to the remote machine, with error checking.
01f9e8fa
DJ
627 The data of the packet is in BUF, and the length of the
628 packet is in CNT. Returns >= 0 on success, -1 otherwise. */
c906108c 629
bd99dc85
PA
630static int
631putpkt_binary_1 (char *buf, int cnt, int is_notif)
c906108c 632{
c12a5089 633 client_state &cs = get_client_state ();
c906108c
SS
634 int i;
635 unsigned char csum = 0;
0a30fbc4 636 char *buf2;
c906108c 637 char *p;
bc3b5632 638 int cc;
c906108c 639
224c3ddb 640 buf2 = (char *) xmalloc (strlen ("$") + cnt + strlen ("#nn") + 1);
0a30fbc4 641
c906108c
SS
642 /* Copy the packet into buffer BUF2, encapsulating it
643 and giving it a checksum. */
644
645 p = buf2;
bd99dc85
PA
646 if (is_notif)
647 *p++ = '%';
648 else
649 *p++ = '$';
c906108c 650
5ffff7c1
DJ
651 for (i = 0; i < cnt;)
652 i += try_rle (buf + i, cnt - i, &csum, &p);
653
c906108c
SS
654 *p++ = '#';
655 *p++ = tohex ((csum >> 4) & 0xf);
656 *p++ = tohex (csum & 0xf);
657
658 *p = '\0';
659
660 /* Send it over and over until we get a positive ack. */
661
662 do
663 {
e0f9f062 664 if (write_prim (buf2, p - buf2) != p - buf2)
c906108c
SS
665 {
666 perror ("putpkt(write)");
f88c79e6 667 free (buf2);
c906108c
SS
668 return -1;
669 }
670
c12a5089 671 if (cs.noack_mode || is_notif)
a6f3e723
SL
672 {
673 /* Don't expect an ack then. */
674 if (remote_debug)
675 {
bd99dc85 676 if (is_notif)
4eefa7bc 677 debug_printf ("putpkt (\"%s\"); [notif]\n", buf2);
bd99dc85 678 else
4eefa7bc
PA
679 debug_printf ("putpkt (\"%s\"); [noack mode]\n", buf2);
680 debug_flush ();
a6f3e723
SL
681 }
682 break;
683 }
684
c906108c 685 if (remote_debug)
0d62e5e8 686 {
4eefa7bc
PA
687 debug_printf ("putpkt (\"%s\"); [looking for ack]\n", buf2);
688 debug_flush ();
0d62e5e8 689 }
0d62e5e8 690
bc3b5632 691 cc = readchar ();
c906108c 692
bc3b5632
DE
693 if (cc < 0)
694 {
0a30fbc4 695 free (buf2);
c906108c
SS
696 return -1;
697 }
0d62e5e8 698
bc3b5632
DE
699 if (remote_debug)
700 {
4eefa7bc
PA
701 debug_printf ("[received '%c' (0x%x)]\n", cc, cc);
702 debug_flush ();
bc3b5632
DE
703 }
704
0d62e5e8 705 /* Check for an input interrupt while we're here. */
0bfdf32f 706 if (cc == '\003' && current_thread != NULL)
52405d85 707 the_target->request_interrupt ();
c906108c 708 }
bc3b5632 709 while (cc != '+');
c906108c 710
0a30fbc4 711 free (buf2);
c906108c
SS
712 return 1; /* Success! */
713}
714
bd99dc85
PA
715int
716putpkt_binary (char *buf, int cnt)
717{
718 return putpkt_binary_1 (buf, cnt, 0);
719}
720
01f9e8fa
DJ
721/* Send a packet to the remote machine, with error checking. The data
722 of the packet is in BUF, and the packet should be a NUL-terminated
723 string. Returns >= 0 on success, -1 otherwise. */
724
725int
726putpkt (char *buf)
727{
728 return putpkt_binary (buf, strlen (buf));
729}
730
bd99dc85
PA
731int
732putpkt_notif (char *buf)
733{
734 return putpkt_binary_1 (buf, strlen (buf), 1);
735}
736
c906108c
SS
737/* Come here when we get an input interrupt from the remote side. This
738 interrupt should only be active while we are waiting for the child to do
bc3b5632
DE
739 something. Thus this assumes readchar:bufcnt is 0.
740 About the only thing that should come through is a ^C, which
ef57601b 741 will cause us to request child interruption. */
c906108c
SS
742
743static void
0a30fbc4 744input_interrupt (int unused)
c906108c 745{
cf30a8e1
C
746 fd_set readset;
747 struct timeval immediate = { 0, 0 };
c906108c 748
cf30a8e1
C
749 /* Protect against spurious interrupts. This has been observed to
750 be a problem under NetBSD 1.4 and 1.5. */
c906108c 751
cf30a8e1
C
752 FD_ZERO (&readset);
753 FD_SET (remote_desc, &readset);
754 if (select (remote_desc + 1, &readset, 0, 0, &immediate) > 0)
c906108c 755 {
cf30a8e1 756 int cc;
fd500816 757 char c = 0;
7390519e 758
e0f9f062 759 cc = read_prim (&c, 1);
c906108c 760
fafcc06a 761 if (cc == 0)
cf30a8e1 762 {
fafcc06a
SDJ
763 fprintf (stderr, "client connection closed\n");
764 return;
765 }
f0db101d 766 else if (cc != 1 || c != '\003')
fafcc06a
SDJ
767 {
768 fprintf (stderr, "input_interrupt, count = %d c = %d ", cc, c);
769 if (isprint (c))
770 fprintf (stderr, "('%c')\n", c);
771 else
772 fprintf (stderr, "('\\x%02x')\n", c & 0xff);
cf30a8e1
C
773 return;
774 }
7390519e 775
52405d85 776 the_target->request_interrupt ();
cf30a8e1 777 }
c906108c 778}
7390519e
PA
779
780/* Check if the remote side sent us an interrupt request (^C). */
781void
782check_remote_input_interrupt_request (void)
783{
784 /* This function may be called before establishing communications,
785 therefore we need to validate the remote descriptor. */
786
73944e9f 787 if (remote_desc == -1)
7390519e
PA
788 return;
789
790 input_interrupt (0);
791}
b80864fb 792
8b207339
YQ
793/* Asynchronous I/O support. SIGIO must be unblocked when waiting,
794 in order to accept Control-C from the client, and must be blocked
795 when talking to the client. */
c906108c 796
a20d5e98 797static void
8b207339 798block_unblock_async_io (int block)
62ea82f5 799{
b80864fb 800#ifndef USE_WIN32API
62ea82f5 801 sigset_t sigio_set;
a20d5e98 802
62ea82f5
DJ
803 sigemptyset (&sigio_set);
804 sigaddset (&sigio_set, SIGIO);
21987b9c 805 gdb_sigmask (block ? SIG_BLOCK : SIG_UNBLOCK, &sigio_set, NULL);
b80864fb 806#endif
62ea82f5
DJ
807}
808
fd500816
DJ
809/* Current state of asynchronous I/O. */
810static int async_io_enabled;
811
812/* Enable asynchronous I/O. */
c906108c 813void
fba45db2 814enable_async_io (void)
c906108c 815{
fd500816
DJ
816 if (async_io_enabled)
817 return;
818
8b207339
YQ
819 block_unblock_async_io (0);
820
fd500816 821 async_io_enabled = 1;
c906108c
SS
822}
823
fd500816 824/* Disable asynchronous I/O. */
c906108c 825void
fba45db2 826disable_async_io (void)
c906108c 827{
fd500816
DJ
828 if (!async_io_enabled)
829 return;
830
8b207339
YQ
831 block_unblock_async_io (1);
832
fd500816 833 async_io_enabled = 0;
c906108c
SS
834}
835
a20d5e98
DJ
836void
837initialize_async_io (void)
838{
8b207339 839 /* Make sure that async I/O starts blocked. */
a20d5e98
DJ
840 async_io_enabled = 1;
841 disable_async_io ();
842
8b207339
YQ
843 /* Install the signal handler. */
844#ifndef USE_WIN32API
845 signal (SIGIO, input_interrupt);
846#endif
a20d5e98
DJ
847}
848
24b066ba
DE
849/* Internal buffer used by readchar.
850 These are global to readchar because reschedule_remote needs to be
851 able to tell whether the buffer is empty. */
852
853static unsigned char readchar_buf[BUFSIZ];
854static int readchar_bufcnt = 0;
855static unsigned char *readchar_bufp;
856
c906108c
SS
857/* Returns next char from remote GDB. -1 if error. */
858
859static int
fba45db2 860readchar (void)
c906108c 861{
24b066ba 862 int ch;
c906108c 863
24b066ba
DE
864 if (readchar_bufcnt == 0)
865 {
e0f9f062 866 readchar_bufcnt = read_prim (readchar_buf, sizeof (readchar_buf));
c906108c 867
24b066ba
DE
868 if (readchar_bufcnt <= 0)
869 {
870 if (readchar_bufcnt == 0)
fddedbe6
PA
871 {
872 if (remote_debug)
4eefa7bc 873 debug_printf ("readchar: Got EOF\n");
fddedbe6 874 }
24b066ba
DE
875 else
876 perror ("readchar");
c906108c 877
24b066ba
DE
878 return -1;
879 }
c906108c 880
24b066ba 881 readchar_bufp = readchar_buf;
c906108c
SS
882 }
883
24b066ba
DE
884 readchar_bufcnt--;
885 ch = *readchar_bufp++;
886 reschedule ();
887 return ch;
888}
889
890/* Reset the readchar state machine. */
891
892static void
893reset_readchar (void)
894{
895 readchar_bufcnt = 0;
896 if (readchar_callback != NOT_SCHEDULED)
897 {
55d7aec8 898 delete_timer (readchar_callback);
24b066ba
DE
899 readchar_callback = NOT_SCHEDULED;
900 }
901}
902
903/* Process remaining data in readchar_buf. */
904
55d7aec8 905static void
24b066ba
DE
906process_remaining (void *context)
907{
24b066ba
DE
908 /* This is a one-shot event. */
909 readchar_callback = NOT_SCHEDULED;
910
911 if (readchar_bufcnt > 0)
55d7aec8 912 handle_serial_event (0, NULL);
24b066ba
DE
913}
914
915/* If there is still data in the buffer, queue another event to process it,
916 we can't sleep in select yet. */
917
918static void
919reschedule (void)
920{
921 if (readchar_bufcnt > 0 && readchar_callback == NOT_SCHEDULED)
55d7aec8 922 readchar_callback = create_timer (0, process_remaining, NULL);
c906108c
SS
923}
924
925/* Read a packet from the remote machine, with error checking,
926 and store it in BUF. Returns length of packet, or negative if error. */
927
928int
fba45db2 929getpkt (char *buf)
c906108c 930{
c12a5089 931 client_state &cs = get_client_state ();
c906108c
SS
932 char *bp;
933 unsigned char csum, c1, c2;
934 int c;
935
936 while (1)
937 {
938 csum = 0;
939
940 while (1)
941 {
942 c = readchar ();
5a0dd67a
YQ
943
944 /* The '\003' may appear before or after each packet, so
945 check for an input interrupt. */
946 if (c == '\003')
947 {
52405d85 948 the_target->request_interrupt ();
5a0dd67a
YQ
949 continue;
950 }
951
c906108c
SS
952 if (c == '$')
953 break;
954 if (remote_debug)
0d62e5e8 955 {
4eefa7bc
PA
956 debug_printf ("[getpkt: discarding char '%c']\n", c);
957 debug_flush ();
0d62e5e8
DJ
958 }
959
c906108c
SS
960 if (c < 0)
961 return -1;
962 }
963
964 bp = buf;
965 while (1)
966 {
967 c = readchar ();
968 if (c < 0)
969 return -1;
970 if (c == '#')
971 break;
972 *bp++ = c;
973 csum += c;
974 }
975 *bp = 0;
976
977 c1 = fromhex (readchar ());
978 c2 = fromhex (readchar ());
c5aa993b 979
c906108c
SS
980 if (csum == (c1 << 4) + c2)
981 break;
982
c12a5089 983 if (cs.noack_mode)
a6f3e723 984 {
493e2a69
MS
985 fprintf (stderr,
986 "Bad checksum, sentsum=0x%x, csum=0x%x, "
987 "buf=%s [no-ack-mode, Bad medium?]\n",
a6f3e723
SL
988 (c1 << 4) + c2, csum, buf);
989 /* Not much we can do, GDB wasn't expecting an ack/nac. */
990 break;
991 }
992
c906108c
SS
993 fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
994 (c1 << 4) + c2, csum, buf);
e0f9f062 995 if (write_prim ("-", 1) != 1)
e581f2b4 996 return -1;
c906108c
SS
997 }
998
c12a5089 999 if (!cs.noack_mode)
0d62e5e8 1000 {
a6f3e723
SL
1001 if (remote_debug)
1002 {
4eefa7bc
PA
1003 debug_printf ("getpkt (\"%s\"); [sending ack] \n", buf);
1004 debug_flush ();
a6f3e723 1005 }
c906108c 1006
e0f9f062 1007 if (write_prim ("+", 1) != 1)
e581f2b4 1008 return -1;
c906108c 1009
a6f3e723
SL
1010 if (remote_debug)
1011 {
4eefa7bc
PA
1012 debug_printf ("[sent ack]\n");
1013 debug_flush ();
a6f3e723 1014 }
0d62e5e8 1015 }
86b1f9c5
PM
1016 else
1017 {
1018 if (remote_debug)
1019 {
4eefa7bc
PA
1020 debug_printf ("getpkt (\"%s\"); [no ack sent] \n", buf);
1021 debug_flush ();
86b1f9c5
PM
1022 }
1023 }
0d62e5e8 1024
18879fef
YQ
1025 /* The readchar above may have already read a '\003' out of the socket
1026 and moved it to the local buffer. For example, when GDB sends
1027 vCont;c immediately followed by interrupt (see
1028 gdb.base/interrupt-noterm.exp). As soon as we see the vCont;c, we'll
1029 resume the inferior and wait. Since we've already moved the '\003'
1030 to the local buffer, SIGIO won't help. In that case, if we don't
1031 check for interrupt after the vCont;c packet, the interrupt character
1032 would stay in the buffer unattended until after the next (unrelated)
1033 stop. */
1034 while (readchar_bufcnt > 0 && *readchar_bufp == '\003')
1035 {
1036 /* Consume the interrupt character in the buffer. */
1037 readchar ();
52405d85 1038 the_target->request_interrupt ();
18879fef
YQ
1039 }
1040
c906108c
SS
1041 return bp - buf;
1042}
1043
1044void
fba45db2 1045write_ok (char *buf)
c906108c
SS
1046{
1047 buf[0] = 'O';
1048 buf[1] = 'K';
1049 buf[2] = '\0';
1050}
1051
1052void
fba45db2 1053write_enn (char *buf)
c906108c 1054{
c89dc5d4 1055 /* Some day, we should define the meanings of the error codes... */
c906108c 1056 buf[0] = 'E';
c89dc5d4
DJ
1057 buf[1] = '0';
1058 buf[2] = '1';
c906108c
SS
1059 buf[3] = '\0';
1060}
1061
0fb4aa4b
PA
1062#endif
1063
0fb4aa4b 1064#ifndef IN_PROCESS_AGENT
c906108c 1065
c906108c 1066static char *
442ea881 1067outreg (struct regcache *regcache, int regno, char *buf)
c906108c 1068{
5c44784c
JM
1069 if ((regno >> 12) != 0)
1070 *buf++ = tohex ((regno >> 12) & 0xf);
1071 if ((regno >> 8) != 0)
1072 *buf++ = tohex ((regno >> 8) & 0xf);
1073 *buf++ = tohex ((regno >> 4) & 0xf);
c906108c
SS
1074 *buf++ = tohex (regno & 0xf);
1075 *buf++ = ':';
442ea881 1076 collect_register_as_string (regcache, regno, buf);
3aee8918 1077 buf += 2 * register_size (regcache->tdesc, regno);
c906108c
SS
1078 *buf++ = ';';
1079
1080 return buf;
1081}
1082
1083void
95954743 1084prepare_resume_reply (char *buf, ptid_t ptid,
5b1c542e 1085 struct target_waitstatus *status)
c906108c 1086{
c12a5089 1087 client_state &cs = get_client_state ();
5b1c542e 1088 if (debug_threads)
87ce2a04
DE
1089 debug_printf ("Writing resume reply for %s:%d\n",
1090 target_pid_to_str (ptid), status->kind);
c906108c 1091
5b1c542e 1092 switch (status->kind)
c906108c 1093 {
5b1c542e 1094 case TARGET_WAITKIND_STOPPED:
de0d863e 1095 case TARGET_WAITKIND_FORKED:
c269dbdb 1096 case TARGET_WAITKIND_VFORKED:
8228463c 1097 case TARGET_WAITKIND_VFORK_DONE:
94585166 1098 case TARGET_WAITKIND_EXECD:
65706a29 1099 case TARGET_WAITKIND_THREAD_CREATED:
82075af2
JS
1100 case TARGET_WAITKIND_SYSCALL_ENTRY:
1101 case TARGET_WAITKIND_SYSCALL_RETURN:
5b1c542e 1102 {
0bfdf32f 1103 struct thread_info *saved_thread;
5b1c542e 1104 const char **regp;
442ea881 1105 struct regcache *regcache;
e013ee27 1106
c12a5089 1107 if ((status->kind == TARGET_WAITKIND_FORKED && cs.report_fork_events)
80e24d09 1108 || (status->kind == TARGET_WAITKIND_VFORKED
c12a5089 1109 && cs.report_vfork_events))
de0d863e
DB
1110 {
1111 enum gdb_signal signal = GDB_SIGNAL_TRAP;
c269dbdb
DB
1112 const char *event = (status->kind == TARGET_WAITKIND_FORKED
1113 ? "fork" : "vfork");
de0d863e 1114
c269dbdb 1115 sprintf (buf, "T%02x%s:", signal, event);
de0d863e
DB
1116 buf += strlen (buf);
1117 buf = write_ptid (buf, status->value.related_pid);
1118 strcat (buf, ";");
1119 }
80e24d09 1120 else if (status->kind == TARGET_WAITKIND_VFORK_DONE
c12a5089 1121 && cs.report_vfork_events)
8228463c
PA
1122 {
1123 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1124
1125 sprintf (buf, "T%02xvforkdone:;", signal);
1126 }
c12a5089 1127 else if (status->kind == TARGET_WAITKIND_EXECD && cs.report_exec_events)
94585166
DB
1128 {
1129 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1130 const char *event = "exec";
1131 char hexified_pathname[PATH_MAX * 2];
1132
1133 sprintf (buf, "T%02x%s:", signal, event);
1134 buf += strlen (buf);
1135
1136 /* Encode pathname to hexified format. */
1137 bin2hex ((const gdb_byte *) status->value.execd_pathname,
1138 hexified_pathname,
1139 strlen (status->value.execd_pathname));
1140
1141 sprintf (buf, "%s;", hexified_pathname);
1142 xfree (status->value.execd_pathname);
1143 status->value.execd_pathname = NULL;
1144 buf += strlen (buf);
1145 }
65706a29 1146 else if (status->kind == TARGET_WAITKIND_THREAD_CREATED
c12a5089 1147 && cs.report_thread_events)
65706a29
PA
1148 {
1149 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1150
1151 sprintf (buf, "T%02xcreate:;", signal);
1152 }
82075af2
JS
1153 else if (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY
1154 || status->kind == TARGET_WAITKIND_SYSCALL_RETURN)
1155 {
1156 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1157 const char *event = (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY
1158 ? "syscall_entry" : "syscall_return");
1159
1160 sprintf (buf, "T%02x%s:%x;", signal, event,
1161 status->value.syscall_number);
1162 }
de0d863e
DB
1163 else
1164 sprintf (buf, "T%02x", status->value.sig);
1165
442131c1
AB
1166 if (disable_packet_T)
1167 {
1168 /* This is a bit (OK, a lot) of a kludge, however, this isn't
1169 really a user feature, but exists only so GDB can use the
1170 gdbserver to test handling of the 'S' stop reply packet, so
1171 we would rather this code be as simple as possible.
1172
1173 By this point we've started to build the 'T' stop packet,
1174 and it should look like 'Txx....' where 'x' is a hex digit.
1175 An 'S' stop packet always looks like 'Sxx', so all we do
1176 here is convert the buffer from a T packet to an S packet
1177 and the avoid adding any extra content by breaking out. */
1178 gdb_assert (*buf == 'T');
1179 gdb_assert (isxdigit (*(buf + 1)));
1180 gdb_assert (isxdigit (*(buf + 2)));
1181 *buf = 'S';
1182 *(buf + 3) = '\0';
1183 break;
1184 }
1185
5b1c542e 1186 buf += strlen (buf);
e013ee27 1187
0bfdf32f 1188 saved_thread = current_thread;
e013ee27 1189
5b6d1e4f 1190 switch_to_thread (the_target, ptid);
e013ee27 1191
3aee8918
PA
1192 regp = current_target_desc ()->expedite_regs;
1193
0bfdf32f 1194 regcache = get_thread_regcache (current_thread, 1);
442ea881 1195
52405d85 1196 if (the_target->stopped_by_watchpoint ())
5b1c542e
PA
1197 {
1198 CORE_ADDR addr;
1199 int i;
c906108c 1200
29f9a567 1201 memcpy (buf, "watch:", 6);
5b1c542e 1202 buf += 6;
0d62e5e8 1203
52405d85 1204 addr = the_target->stopped_data_address ();
255e7678 1205
5b1c542e
PA
1206 /* Convert each byte of the address into two hexadecimal
1207 chars. Note that we take sizeof (void *) instead of
1208 sizeof (addr); this is to avoid sending a 64-bit
1209 address to a 32-bit GDB. */
1210 for (i = sizeof (void *) * 2; i > 0; i--)
1211 *buf++ = tohex ((addr >> (i - 1) * 4) & 0xf);
1212 *buf++ = ';';
1213 }
c12a5089 1214 else if (cs.swbreak_feature && target_stopped_by_sw_breakpoint ())
1ec68e26
PA
1215 {
1216 sprintf (buf, "swbreak:;");
1217 buf += strlen (buf);
1218 }
c12a5089 1219 else if (cs.hwbreak_feature && target_stopped_by_hw_breakpoint ())
1ec68e26
PA
1220 {
1221 sprintf (buf, "hwbreak:;");
1222 buf += strlen (buf);
1223 }
5b1c542e
PA
1224
1225 while (*regp)
1226 {
3aee8918 1227 buf = outreg (regcache, find_regno (regcache->tdesc, *regp), buf);
5b1c542e
PA
1228 regp ++;
1229 }
5472f405 1230 *buf = '\0';
5b1c542e
PA
1231
1232 /* Formerly, if the debugger had not used any thread features
1233 we would not burden it with a thread status response. This
1234 was for the benefit of GDB 4.13 and older. However, in
1235 recent GDB versions the check (``if (cont_thread != 0)'')
1236 does not have the desired effect because of sillyness in
1237 the way that the remote protocol handles specifying a
1238 thread. Since thread support relies on qSymbol support
1239 anyway, assume GDB can handle threads. */
1240
1241 if (using_threads && !disable_packet_Tthread)
1242 {
1243 /* This if (1) ought to be unnecessary. But remote_wait
1244 in GDB will claim this event belongs to inferior_ptid
1245 if we do not specify a thread, and there's no way for
1246 gdbserver to know what inferior_ptid is. */
d7e15655 1247 if (1 || cs.general_thread != ptid)
5b1c542e 1248 {
dc146f7c 1249 int core = -1;
bd99dc85
PA
1250 /* In non-stop, don't change the general thread behind
1251 GDB's back. */
1252 if (!non_stop)
c12a5089 1253 cs.general_thread = ptid;
95954743
PA
1254 sprintf (buf, "thread:");
1255 buf += strlen (buf);
1256 buf = write_ptid (buf, ptid);
1257 strcat (buf, ";");
5b1c542e 1258 buf += strlen (buf);
dc146f7c 1259
3e10640f
YQ
1260 core = target_core_of_thread (ptid);
1261
dc146f7c
VP
1262 if (core != -1)
1263 {
1264 sprintf (buf, "core:");
1265 buf += strlen (buf);
1266 sprintf (buf, "%x", core);
1267 strcat (buf, ";");
1268 buf += strlen (buf);
1269 }
5b1c542e
PA
1270 }
1271 }
1272
d171632f 1273 if (current_process ()->dlls_changed)
5b1c542e
PA
1274 {
1275 strcpy (buf, "library:;");
1276 buf += strlen (buf);
d171632f 1277 current_process ()->dlls_changed = false;
5b1c542e
PA
1278 }
1279
0bfdf32f 1280 current_thread = saved_thread;
5b1c542e
PA
1281 }
1282 break;
1283 case TARGET_WAITKIND_EXITED:
c12a5089 1284 if (cs.multi_process)
95954743 1285 sprintf (buf, "W%x;process:%x",
e99b03dc 1286 status->value.integer, ptid.pid ());
95954743
PA
1287 else
1288 sprintf (buf, "W%02x", status->value.integer);
5b1c542e
PA
1289 break;
1290 case TARGET_WAITKIND_SIGNALLED:
c12a5089 1291 if (cs.multi_process)
95954743 1292 sprintf (buf, "X%x;process:%x",
e99b03dc 1293 status->value.sig, ptid.pid ());
95954743
PA
1294 else
1295 sprintf (buf, "X%02x", status->value.sig);
5b1c542e 1296 break;
65706a29
PA
1297 case TARGET_WAITKIND_THREAD_EXITED:
1298 sprintf (buf, "w%x;", status->value.integer);
1299 buf += strlen (buf);
1300 buf = write_ptid (buf, ptid);
1301 break;
f2faf941
PA
1302 case TARGET_WAITKIND_NO_RESUMED:
1303 sprintf (buf, "N");
1304 break;
5b1c542e
PA
1305 default:
1306 error ("unhandled waitkind");
1307 break;
c906108c 1308 }
c906108c
SS
1309}
1310
546b77fe
LM
1311/* See remote-utils.h. */
1312
1313const char *
1314decode_m_packet_params (const char *from, CORE_ADDR *mem_addr_ptr,
1315 unsigned int *len_ptr, const char end_marker)
c906108c 1316{
546b77fe 1317 int i = 0;
c906108c
SS
1318 char ch;
1319 *mem_addr_ptr = *len_ptr = 0;
1320
1321 while ((ch = from[i++]) != ',')
1322 {
1323 *mem_addr_ptr = *mem_addr_ptr << 4;
1324 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1325 }
1326
546b77fe 1327 while ((ch = from[i++]) != end_marker)
c906108c 1328 {
c906108c
SS
1329 *len_ptr = *len_ptr << 4;
1330 *len_ptr |= fromhex (ch) & 0x0f;
1331 }
546b77fe
LM
1332
1333 return from + i;
c906108c
SS
1334}
1335
1336void
546b77fe
LM
1337decode_m_packet (const char *from, CORE_ADDR *mem_addr_ptr,
1338 unsigned int *len_ptr)
c906108c 1339{
546b77fe
LM
1340 decode_m_packet_params (from, mem_addr_ptr, len_ptr, '\0');
1341}
c906108c 1342
546b77fe
LM
1343void
1344decode_M_packet (const char *from, CORE_ADDR *mem_addr_ptr,
1345 unsigned int *len_ptr, unsigned char **to_p)
1346{
1347 from = decode_m_packet_params (from, mem_addr_ptr, len_ptr, ':');
c906108c 1348
fa593d66 1349 if (*to_p == NULL)
224c3ddb 1350 *to_p = (unsigned char *) xmalloc (*len_ptr);
fa593d66 1351
546b77fe 1352 hex2bin (from, *to_p, *len_ptr);
c906108c 1353}
2f2893d9 1354
01f9e8fa
DJ
1355int
1356decode_X_packet (char *from, int packet_len, CORE_ADDR *mem_addr_ptr,
fa593d66 1357 unsigned int *len_ptr, unsigned char **to_p)
01f9e8fa
DJ
1358{
1359 int i = 0;
1360 char ch;
1361 *mem_addr_ptr = *len_ptr = 0;
1362
1363 while ((ch = from[i++]) != ',')
1364 {
1365 *mem_addr_ptr = *mem_addr_ptr << 4;
1366 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1367 }
1368
1369 while ((ch = from[i++]) != ':')
1370 {
1371 *len_ptr = *len_ptr << 4;
1372 *len_ptr |= fromhex (ch) & 0x0f;
1373 }
1374
fa593d66 1375 if (*to_p == NULL)
224c3ddb 1376 *to_p = (unsigned char *) xmalloc (*len_ptr);
fa593d66 1377
01f9e8fa 1378 if (remote_unescape_input ((const gdb_byte *) &from[i], packet_len - i,
fa593d66 1379 *to_p, *len_ptr) != *len_ptr)
01f9e8fa
DJ
1380 return -1;
1381
1382 return 0;
1383}
1384
0e7f50da 1385/* Decode a qXfer write request. */
d08aafef 1386
0e7f50da 1387int
d08aafef 1388decode_xfer_write (char *buf, int packet_len, CORE_ADDR *offset,
0e7f50da
UW
1389 unsigned int *len, unsigned char *data)
1390{
1391 char ch;
d08aafef 1392 char *b = buf;
0e7f50da
UW
1393
1394 /* Extract the offset. */
1395 *offset = 0;
1396 while ((ch = *buf++) != ':')
1397 {
1398 *offset = *offset << 4;
1399 *offset |= fromhex (ch) & 0x0f;
1400 }
1401
1402 /* Get encoded data. */
d08aafef 1403 packet_len -= buf - b;
0e7f50da
UW
1404 *len = remote_unescape_input ((const gdb_byte *) buf, packet_len,
1405 data, packet_len);
1406 return 0;
1407}
1408
08388c79
DE
1409/* Decode the parameters of a qSearch:memory packet. */
1410
1411int
1412decode_search_memory_packet (const char *buf, int packet_len,
1413 CORE_ADDR *start_addrp,
1414 CORE_ADDR *search_space_lenp,
1415 gdb_byte *pattern, unsigned int *pattern_lenp)
1416{
1417 const char *p = buf;
1418
1419 p = decode_address_to_semicolon (start_addrp, p);
1420 p = decode_address_to_semicolon (search_space_lenp, p);
1421 packet_len -= p - buf;
1422 *pattern_lenp = remote_unescape_input ((const gdb_byte *) p, packet_len,
1423 pattern, packet_len);
1424 return 0;
1425}
1426
95954743
PA
1427static void
1428free_sym_cache (struct sym_cache *sym)
1429{
1430 if (sym != NULL)
1431 {
1432 free (sym->name);
1433 free (sym);
1434 }
1435}
1436
1437void
1438clear_symbol_cache (struct sym_cache **symcache_p)
1439{
1440 struct sym_cache *sym, *next;
1441
1442 /* Check the cache first. */
1443 for (sym = *symcache_p; sym; sym = next)
1444 {
1445 next = sym->next;
1446 free_sym_cache (sym);
1447 }
1448
1449 *symcache_p = NULL;
1450}
1451
9836d6ea
PA
1452/* Get the address of NAME, and return it in ADDRP if found. if
1453 MAY_ASK_GDB is false, assume symbol cache misses are failures.
fd500816
DJ
1454 Returns 1 if the symbol is found, 0 if it is not, -1 on error. */
1455
2f2893d9 1456int
9836d6ea 1457look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb)
2f2893d9 1458{
c12a5089 1459 client_state &cs = get_client_state ();
28170b88 1460 char *p, *q;
2f2893d9 1461 int len;
fd500816 1462 struct sym_cache *sym;
95954743
PA
1463 struct process_info *proc;
1464
1465 proc = current_process ();
fd500816
DJ
1466
1467 /* Check the cache first. */
95954743 1468 for (sym = proc->symbol_cache; sym; sym = sym->next)
fd500816
DJ
1469 if (strcmp (name, sym->name) == 0)
1470 {
1471 *addrp = sym->addr;
1472 return 1;
1473 }
2f2893d9 1474
9836d6ea
PA
1475 /* It might not be an appropriate time to look up a symbol,
1476 e.g. while we're trying to fetch registers. */
1477 if (!may_ask_gdb)
ea025f5f
DJ
1478 return 0;
1479
2f2893d9 1480 /* Send the request. */
c12a5089
SC
1481 strcpy (cs.own_buf, "qSymbol:");
1482 bin2hex ((const gdb_byte *) name, cs.own_buf + strlen ("qSymbol:"),
971dc0b8 1483 strlen (name));
c12a5089 1484 if (putpkt (cs.own_buf) < 0)
2f2893d9
DJ
1485 return -1;
1486
1487 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
c12a5089 1488 len = getpkt (cs.own_buf);
2f2893d9
DJ
1489 if (len < 0)
1490 return -1;
1491
2bbe3cc1
DJ
1492 /* We ought to handle pretty much any packet at this point while we
1493 wait for the qSymbol "response". That requires re-entering the
1494 main loop. For now, this is an adequate approximation; allow
28170b88
MK
1495 GDB to read from memory and handle 'v' packets (for vFile transfers)
1496 while it figures out the address of the symbol. */
1497 while (1)
2bbe3cc1 1498 {
c12a5089 1499 if (cs.own_buf[0] == 'm')
28170b88
MK
1500 {
1501 CORE_ADDR mem_addr;
1502 unsigned char *mem_buf;
1503 unsigned int mem_len;
1504
c12a5089 1505 decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len);
28170b88
MK
1506 mem_buf = (unsigned char *) xmalloc (mem_len);
1507 if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
c12a5089 1508 bin2hex (mem_buf, cs.own_buf, mem_len);
28170b88 1509 else
c12a5089 1510 write_enn (cs.own_buf);
28170b88 1511 free (mem_buf);
c12a5089 1512 if (putpkt (cs.own_buf) < 0)
28170b88
MK
1513 return -1;
1514 }
c12a5089 1515 else if (cs.own_buf[0] == 'v')
28170b88
MK
1516 {
1517 int new_len = -1;
c12a5089 1518 handle_v_requests (cs.own_buf, len, &new_len);
28170b88 1519 if (new_len != -1)
c12a5089 1520 putpkt_binary (cs.own_buf, new_len);
28170b88 1521 else
c12a5089 1522 putpkt (cs.own_buf);
28170b88 1523 }
2bbe3cc1 1524 else
28170b88 1525 break;
c12a5089 1526 len = getpkt (cs.own_buf);
2bbe3cc1
DJ
1527 if (len < 0)
1528 return -1;
1529 }
1b3f6016 1530
c12a5089 1531 if (!startswith (cs.own_buf, "qSymbol:"))
2f2893d9 1532 {
422186a9 1533 warning ("Malformed response to qSymbol, ignoring: %s", cs.own_buf);
2f2893d9
DJ
1534 return -1;
1535 }
1536
c12a5089 1537 p = cs.own_buf + strlen ("qSymbol:");
2f2893d9
DJ
1538 q = p;
1539 while (*q && *q != ':')
1540 q++;
1541
1542 /* Make sure we found a value for the symbol. */
1543 if (p == q || *q == '\0')
1544 return 0;
1545
1546 decode_address (addrp, p, q - p);
fd500816
DJ
1547
1548 /* Save the symbol in our cache. */
8d749320 1549 sym = XNEW (struct sym_cache);
bca929d3 1550 sym->name = xstrdup (name);
fd500816 1551 sym->addr = *addrp;
95954743
PA
1552 sym->next = proc->symbol_cache;
1553 proc->symbol_cache = sym;
fd500816 1554
2f2893d9
DJ
1555 return 1;
1556}
c74d0ad8 1557
fa593d66
PA
1558/* Relocate an instruction to execute at a different address. OLDLOC
1559 is the address in the inferior memory where the instruction to
1560 relocate is currently at. On input, TO points to the destination
1561 where we want the instruction to be copied (and possibly adjusted)
1562 to. On output, it points to one past the end of the resulting
1563 instruction(s). The effect of executing the instruction at TO
86a30030 1564 shall be the same as if executing it at OLDLOC. For example, call
fa593d66
PA
1565 instructions that implicitly push the return address on the stack
1566 should be adjusted to return to the instruction after OLDLOC;
1567 relative branches, and other PC-relative instructions need the
1568 offset adjusted; etc. Returns 0 on success, -1 on failure. */
1569
1570int
1571relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc)
1572{
c12a5089 1573 client_state &cs = get_client_state ();
fa593d66
PA
1574 int len;
1575 ULONGEST written = 0;
1576
1577 /* Send the request. */
c12a5089 1578 sprintf (cs.own_buf, "qRelocInsn:%s;%s", paddress (oldloc),
fa593d66 1579 paddress (*to));
c12a5089 1580 if (putpkt (cs.own_buf) < 0)
fa593d66
PA
1581 return -1;
1582
1583 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
c12a5089 1584 len = getpkt (cs.own_buf);
fa593d66
PA
1585 if (len < 0)
1586 return -1;
1587
1588 /* We ought to handle pretty much any packet at this point while we
1589 wait for the qRelocInsn "response". That requires re-entering
1590 the main loop. For now, this is an adequate approximation; allow
1591 GDB to access memory. */
c12a5089 1592 while (cs.own_buf[0] == 'm' || cs.own_buf[0] == 'M' || cs.own_buf[0] == 'X')
fa593d66
PA
1593 {
1594 CORE_ADDR mem_addr;
1595 unsigned char *mem_buf = NULL;
1596 unsigned int mem_len;
1597
c12a5089 1598 if (cs.own_buf[0] == 'm')
fa593d66 1599 {
c12a5089 1600 decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len);
224c3ddb 1601 mem_buf = (unsigned char *) xmalloc (mem_len);
fa593d66 1602 if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
c12a5089 1603 bin2hex (mem_buf, cs.own_buf, mem_len);
fa593d66 1604 else
c12a5089 1605 write_enn (cs.own_buf);
fa593d66 1606 }
c12a5089 1607 else if (cs.own_buf[0] == 'X')
fa593d66 1608 {
c12a5089 1609 if (decode_X_packet (&cs.own_buf[1], len - 1, &mem_addr,
fa593d66 1610 &mem_len, &mem_buf) < 0
4196ab2a 1611 || target_write_memory (mem_addr, mem_buf, mem_len) != 0)
c12a5089 1612 write_enn (cs.own_buf);
fa593d66 1613 else
c12a5089 1614 write_ok (cs.own_buf);
fa593d66
PA
1615 }
1616 else
1617 {
c12a5089 1618 decode_M_packet (&cs.own_buf[1], &mem_addr, &mem_len, &mem_buf);
4196ab2a 1619 if (target_write_memory (mem_addr, mem_buf, mem_len) == 0)
c12a5089 1620 write_ok (cs.own_buf);
fa593d66 1621 else
c12a5089 1622 write_enn (cs.own_buf);
fa593d66
PA
1623 }
1624 free (mem_buf);
c12a5089 1625 if (putpkt (cs.own_buf) < 0)
fa593d66 1626 return -1;
c12a5089 1627 len = getpkt (cs.own_buf);
fa593d66
PA
1628 if (len < 0)
1629 return -1;
1630 }
1631
c12a5089 1632 if (cs.own_buf[0] == 'E')
fa593d66 1633 {
422186a9 1634 warning ("An error occurred while relocating an instruction: %s",
c12a5089 1635 cs.own_buf);
fa593d66
PA
1636 return -1;
1637 }
1638
c12a5089 1639 if (!startswith (cs.own_buf, "qRelocInsn:"))
fa593d66 1640 {
422186a9 1641 warning ("Malformed response to qRelocInsn, ignoring: %s",
c12a5089 1642 cs.own_buf);
fa593d66
PA
1643 return -1;
1644 }
1645
c12a5089 1646 unpack_varlen_hex (cs.own_buf + strlen ("qRelocInsn:"), &written);
fa593d66
PA
1647
1648 *to += written;
1649 return 0;
1650}
1651
c74d0ad8 1652void
bce7165d 1653monitor_output (const char *msg)
c74d0ad8 1654{
0a822afb 1655 int len = strlen (msg);
224c3ddb 1656 char *buf = (char *) xmalloc (len * 2 + 2);
c74d0ad8
DJ
1657
1658 buf[0] = 'O';
971dc0b8 1659 bin2hex ((const gdb_byte *) msg, buf + 1, len);
c74d0ad8
DJ
1660
1661 putpkt (buf);
1662 free (buf);
1663}
255e7678 1664
0fb4aa4b 1665#endif
This page took 1.665905 seconds and 4 git commands to generate.