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