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