Multi-target support
[deliverable/binutils-gdb.git] / gdb / gdbserver / remote-utils.c
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)
ef57601b 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
ef57601b 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 {
989 (*the_target->request_interrupt) ();
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 ();
1079 (*the_target->request_interrupt) ();
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
5b1c542e 1207 buf += strlen (buf);
e013ee27 1208
0bfdf32f 1209 saved_thread = current_thread;
e013ee27 1210
5b6d1e4f 1211 switch_to_thread (the_target, ptid);
e013ee27 1212
3aee8918
PA
1213 regp = current_target_desc ()->expedite_regs;
1214
0bfdf32f 1215 regcache = get_thread_regcache (current_thread, 1);
442ea881 1216
5b1c542e
PA
1217 if (the_target->stopped_by_watchpoint != NULL
1218 && (*the_target->stopped_by_watchpoint) ())
1219 {
1220 CORE_ADDR addr;
1221 int i;
c906108c 1222
29f9a567 1223 memcpy (buf, "watch:", 6);
5b1c542e 1224 buf += 6;
0d62e5e8 1225
5b1c542e 1226 addr = (*the_target->stopped_data_address) ();
255e7678 1227
5b1c542e
PA
1228 /* Convert each byte of the address into two hexadecimal
1229 chars. Note that we take sizeof (void *) instead of
1230 sizeof (addr); this is to avoid sending a 64-bit
1231 address to a 32-bit GDB. */
1232 for (i = sizeof (void *) * 2; i > 0; i--)
1233 *buf++ = tohex ((addr >> (i - 1) * 4) & 0xf);
1234 *buf++ = ';';
1235 }
c12a5089 1236 else if (cs.swbreak_feature && target_stopped_by_sw_breakpoint ())
1ec68e26
PA
1237 {
1238 sprintf (buf, "swbreak:;");
1239 buf += strlen (buf);
1240 }
c12a5089 1241 else if (cs.hwbreak_feature && target_stopped_by_hw_breakpoint ())
1ec68e26
PA
1242 {
1243 sprintf (buf, "hwbreak:;");
1244 buf += strlen (buf);
1245 }
5b1c542e
PA
1246
1247 while (*regp)
1248 {
3aee8918 1249 buf = outreg (regcache, find_regno (regcache->tdesc, *regp), buf);
5b1c542e
PA
1250 regp ++;
1251 }
5472f405 1252 *buf = '\0';
5b1c542e
PA
1253
1254 /* Formerly, if the debugger had not used any thread features
1255 we would not burden it with a thread status response. This
1256 was for the benefit of GDB 4.13 and older. However, in
1257 recent GDB versions the check (``if (cont_thread != 0)'')
1258 does not have the desired effect because of sillyness in
1259 the way that the remote protocol handles specifying a
1260 thread. Since thread support relies on qSymbol support
1261 anyway, assume GDB can handle threads. */
1262
1263 if (using_threads && !disable_packet_Tthread)
1264 {
1265 /* This if (1) ought to be unnecessary. But remote_wait
1266 in GDB will claim this event belongs to inferior_ptid
1267 if we do not specify a thread, and there's no way for
1268 gdbserver to know what inferior_ptid is. */
d7e15655 1269 if (1 || cs.general_thread != ptid)
5b1c542e 1270 {
dc146f7c 1271 int core = -1;
bd99dc85
PA
1272 /* In non-stop, don't change the general thread behind
1273 GDB's back. */
1274 if (!non_stop)
c12a5089 1275 cs.general_thread = ptid;
95954743
PA
1276 sprintf (buf, "thread:");
1277 buf += strlen (buf);
1278 buf = write_ptid (buf, ptid);
1279 strcat (buf, ";");
5b1c542e 1280 buf += strlen (buf);
dc146f7c 1281
3e10640f
YQ
1282 core = target_core_of_thread (ptid);
1283
dc146f7c
VP
1284 if (core != -1)
1285 {
1286 sprintf (buf, "core:");
1287 buf += strlen (buf);
1288 sprintf (buf, "%x", core);
1289 strcat (buf, ";");
1290 buf += strlen (buf);
1291 }
5b1c542e
PA
1292 }
1293 }
1294
1295 if (dlls_changed)
1296 {
1297 strcpy (buf, "library:;");
1298 buf += strlen (buf);
1299 dlls_changed = 0;
1300 }
1301
0bfdf32f 1302 current_thread = saved_thread;
5b1c542e
PA
1303 }
1304 break;
1305 case TARGET_WAITKIND_EXITED:
c12a5089 1306 if (cs.multi_process)
95954743 1307 sprintf (buf, "W%x;process:%x",
e99b03dc 1308 status->value.integer, ptid.pid ());
95954743
PA
1309 else
1310 sprintf (buf, "W%02x", status->value.integer);
5b1c542e
PA
1311 break;
1312 case TARGET_WAITKIND_SIGNALLED:
c12a5089 1313 if (cs.multi_process)
95954743 1314 sprintf (buf, "X%x;process:%x",
e99b03dc 1315 status->value.sig, ptid.pid ());
95954743
PA
1316 else
1317 sprintf (buf, "X%02x", status->value.sig);
5b1c542e 1318 break;
65706a29
PA
1319 case TARGET_WAITKIND_THREAD_EXITED:
1320 sprintf (buf, "w%x;", status->value.integer);
1321 buf += strlen (buf);
1322 buf = write_ptid (buf, ptid);
1323 break;
f2faf941
PA
1324 case TARGET_WAITKIND_NO_RESUMED:
1325 sprintf (buf, "N");
1326 break;
5b1c542e
PA
1327 default:
1328 error ("unhandled waitkind");
1329 break;
c906108c 1330 }
c906108c
SS
1331}
1332
1333void
fba45db2 1334decode_m_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr)
c906108c
SS
1335{
1336 int i = 0, j = 0;
1337 char ch;
1338 *mem_addr_ptr = *len_ptr = 0;
1339
1340 while ((ch = from[i++]) != ',')
1341 {
1342 *mem_addr_ptr = *mem_addr_ptr << 4;
1343 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1344 }
1345
1346 for (j = 0; j < 4; j++)
1347 {
1348 if ((ch = from[i++]) == 0)
1349 break;
1350 *len_ptr = *len_ptr << 4;
1351 *len_ptr |= fromhex (ch) & 0x0f;
1352 }
1353}
1354
1355void
fba45db2 1356decode_M_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr,
fa593d66 1357 unsigned char **to_p)
c906108c
SS
1358{
1359 int i = 0;
1360 char ch;
1361 *mem_addr_ptr = *len_ptr = 0;
1362
1363 while ((ch = from[i++]) != ',')
1364 {
1365 *mem_addr_ptr = *mem_addr_ptr << 4;
1366 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1367 }
1368
1369 while ((ch = from[i++]) != ':')
1370 {
1371 *len_ptr = *len_ptr << 4;
1372 *len_ptr |= fromhex (ch) & 0x0f;
1373 }
1374
fa593d66 1375 if (*to_p == NULL)
224c3ddb 1376 *to_p = (unsigned char *) xmalloc (*len_ptr);
fa593d66 1377
a7191e8b 1378 hex2bin (&from[i++], *to_p, *len_ptr);
c906108c 1379}
2f2893d9 1380
01f9e8fa
DJ
1381int
1382decode_X_packet (char *from, int packet_len, CORE_ADDR *mem_addr_ptr,
fa593d66 1383 unsigned int *len_ptr, unsigned char **to_p)
01f9e8fa
DJ
1384{
1385 int i = 0;
1386 char ch;
1387 *mem_addr_ptr = *len_ptr = 0;
1388
1389 while ((ch = from[i++]) != ',')
1390 {
1391 *mem_addr_ptr = *mem_addr_ptr << 4;
1392 *mem_addr_ptr |= fromhex (ch) & 0x0f;
1393 }
1394
1395 while ((ch = from[i++]) != ':')
1396 {
1397 *len_ptr = *len_ptr << 4;
1398 *len_ptr |= fromhex (ch) & 0x0f;
1399 }
1400
fa593d66 1401 if (*to_p == NULL)
224c3ddb 1402 *to_p = (unsigned char *) xmalloc (*len_ptr);
fa593d66 1403
01f9e8fa 1404 if (remote_unescape_input ((const gdb_byte *) &from[i], packet_len - i,
fa593d66 1405 *to_p, *len_ptr) != *len_ptr)
01f9e8fa
DJ
1406 return -1;
1407
1408 return 0;
1409}
1410
0e7f50da 1411/* Decode a qXfer write request. */
d08aafef 1412
0e7f50da 1413int
d08aafef 1414decode_xfer_write (char *buf, int packet_len, CORE_ADDR *offset,
0e7f50da
UW
1415 unsigned int *len, unsigned char *data)
1416{
1417 char ch;
d08aafef 1418 char *b = buf;
0e7f50da
UW
1419
1420 /* Extract the offset. */
1421 *offset = 0;
1422 while ((ch = *buf++) != ':')
1423 {
1424 *offset = *offset << 4;
1425 *offset |= fromhex (ch) & 0x0f;
1426 }
1427
1428 /* Get encoded data. */
d08aafef 1429 packet_len -= buf - b;
0e7f50da
UW
1430 *len = remote_unescape_input ((const gdb_byte *) buf, packet_len,
1431 data, packet_len);
1432 return 0;
1433}
1434
08388c79
DE
1435/* Decode the parameters of a qSearch:memory packet. */
1436
1437int
1438decode_search_memory_packet (const char *buf, int packet_len,
1439 CORE_ADDR *start_addrp,
1440 CORE_ADDR *search_space_lenp,
1441 gdb_byte *pattern, unsigned int *pattern_lenp)
1442{
1443 const char *p = buf;
1444
1445 p = decode_address_to_semicolon (start_addrp, p);
1446 p = decode_address_to_semicolon (search_space_lenp, p);
1447 packet_len -= p - buf;
1448 *pattern_lenp = remote_unescape_input ((const gdb_byte *) p, packet_len,
1449 pattern, packet_len);
1450 return 0;
1451}
1452
95954743
PA
1453static void
1454free_sym_cache (struct sym_cache *sym)
1455{
1456 if (sym != NULL)
1457 {
1458 free (sym->name);
1459 free (sym);
1460 }
1461}
1462
1463void
1464clear_symbol_cache (struct sym_cache **symcache_p)
1465{
1466 struct sym_cache *sym, *next;
1467
1468 /* Check the cache first. */
1469 for (sym = *symcache_p; sym; sym = next)
1470 {
1471 next = sym->next;
1472 free_sym_cache (sym);
1473 }
1474
1475 *symcache_p = NULL;
1476}
1477
9836d6ea
PA
1478/* Get the address of NAME, and return it in ADDRP if found. if
1479 MAY_ASK_GDB is false, assume symbol cache misses are failures.
fd500816
DJ
1480 Returns 1 if the symbol is found, 0 if it is not, -1 on error. */
1481
2f2893d9 1482int
9836d6ea 1483look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb)
2f2893d9 1484{
c12a5089 1485 client_state &cs = get_client_state ();
28170b88 1486 char *p, *q;
2f2893d9 1487 int len;
fd500816 1488 struct sym_cache *sym;
95954743
PA
1489 struct process_info *proc;
1490
1491 proc = current_process ();
fd500816
DJ
1492
1493 /* Check the cache first. */
95954743 1494 for (sym = proc->symbol_cache; sym; sym = sym->next)
fd500816
DJ
1495 if (strcmp (name, sym->name) == 0)
1496 {
1497 *addrp = sym->addr;
1498 return 1;
1499 }
2f2893d9 1500
9836d6ea
PA
1501 /* It might not be an appropriate time to look up a symbol,
1502 e.g. while we're trying to fetch registers. */
1503 if (!may_ask_gdb)
ea025f5f
DJ
1504 return 0;
1505
2f2893d9 1506 /* Send the request. */
c12a5089
SC
1507 strcpy (cs.own_buf, "qSymbol:");
1508 bin2hex ((const gdb_byte *) name, cs.own_buf + strlen ("qSymbol:"),
971dc0b8 1509 strlen (name));
c12a5089 1510 if (putpkt (cs.own_buf) < 0)
2f2893d9
DJ
1511 return -1;
1512
1513 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
c12a5089 1514 len = getpkt (cs.own_buf);
2f2893d9
DJ
1515 if (len < 0)
1516 return -1;
1517
2bbe3cc1
DJ
1518 /* We ought to handle pretty much any packet at this point while we
1519 wait for the qSymbol "response". That requires re-entering the
1520 main loop. For now, this is an adequate approximation; allow
28170b88
MK
1521 GDB to read from memory and handle 'v' packets (for vFile transfers)
1522 while it figures out the address of the symbol. */
1523 while (1)
2bbe3cc1 1524 {
c12a5089 1525 if (cs.own_buf[0] == 'm')
28170b88
MK
1526 {
1527 CORE_ADDR mem_addr;
1528 unsigned char *mem_buf;
1529 unsigned int mem_len;
1530
c12a5089 1531 decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len);
28170b88
MK
1532 mem_buf = (unsigned char *) xmalloc (mem_len);
1533 if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
c12a5089 1534 bin2hex (mem_buf, cs.own_buf, mem_len);
28170b88 1535 else
c12a5089 1536 write_enn (cs.own_buf);
28170b88 1537 free (mem_buf);
c12a5089 1538 if (putpkt (cs.own_buf) < 0)
28170b88
MK
1539 return -1;
1540 }
c12a5089 1541 else if (cs.own_buf[0] == 'v')
28170b88
MK
1542 {
1543 int new_len = -1;
c12a5089 1544 handle_v_requests (cs.own_buf, len, &new_len);
28170b88 1545 if (new_len != -1)
c12a5089 1546 putpkt_binary (cs.own_buf, new_len);
28170b88 1547 else
c12a5089 1548 putpkt (cs.own_buf);
28170b88 1549 }
2bbe3cc1 1550 else
28170b88 1551 break;
c12a5089 1552 len = getpkt (cs.own_buf);
2bbe3cc1
DJ
1553 if (len < 0)
1554 return -1;
1555 }
1b3f6016 1556
c12a5089 1557 if (!startswith (cs.own_buf, "qSymbol:"))
2f2893d9 1558 {
422186a9 1559 warning ("Malformed response to qSymbol, ignoring: %s", cs.own_buf);
2f2893d9
DJ
1560 return -1;
1561 }
1562
c12a5089 1563 p = cs.own_buf + strlen ("qSymbol:");
2f2893d9
DJ
1564 q = p;
1565 while (*q && *q != ':')
1566 q++;
1567
1568 /* Make sure we found a value for the symbol. */
1569 if (p == q || *q == '\0')
1570 return 0;
1571
1572 decode_address (addrp, p, q - p);
fd500816
DJ
1573
1574 /* Save the symbol in our cache. */
8d749320 1575 sym = XNEW (struct sym_cache);
bca929d3 1576 sym->name = xstrdup (name);
fd500816 1577 sym->addr = *addrp;
95954743
PA
1578 sym->next = proc->symbol_cache;
1579 proc->symbol_cache = sym;
fd500816 1580
2f2893d9
DJ
1581 return 1;
1582}
c74d0ad8 1583
fa593d66
PA
1584/* Relocate an instruction to execute at a different address. OLDLOC
1585 is the address in the inferior memory where the instruction to
1586 relocate is currently at. On input, TO points to the destination
1587 where we want the instruction to be copied (and possibly adjusted)
1588 to. On output, it points to one past the end of the resulting
1589 instruction(s). The effect of executing the instruction at TO
86a30030 1590 shall be the same as if executing it at OLDLOC. For example, call
fa593d66
PA
1591 instructions that implicitly push the return address on the stack
1592 should be adjusted to return to the instruction after OLDLOC;
1593 relative branches, and other PC-relative instructions need the
1594 offset adjusted; etc. Returns 0 on success, -1 on failure. */
1595
1596int
1597relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc)
1598{
c12a5089 1599 client_state &cs = get_client_state ();
fa593d66
PA
1600 int len;
1601 ULONGEST written = 0;
1602
1603 /* Send the request. */
c12a5089 1604 sprintf (cs.own_buf, "qRelocInsn:%s;%s", paddress (oldloc),
fa593d66 1605 paddress (*to));
c12a5089 1606 if (putpkt (cs.own_buf) < 0)
fa593d66
PA
1607 return -1;
1608
1609 /* FIXME: Eventually add buffer overflow checking (to getpkt?) */
c12a5089 1610 len = getpkt (cs.own_buf);
fa593d66
PA
1611 if (len < 0)
1612 return -1;
1613
1614 /* We ought to handle pretty much any packet at this point while we
1615 wait for the qRelocInsn "response". That requires re-entering
1616 the main loop. For now, this is an adequate approximation; allow
1617 GDB to access memory. */
c12a5089 1618 while (cs.own_buf[0] == 'm' || cs.own_buf[0] == 'M' || cs.own_buf[0] == 'X')
fa593d66
PA
1619 {
1620 CORE_ADDR mem_addr;
1621 unsigned char *mem_buf = NULL;
1622 unsigned int mem_len;
1623
c12a5089 1624 if (cs.own_buf[0] == 'm')
fa593d66 1625 {
c12a5089 1626 decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len);
224c3ddb 1627 mem_buf = (unsigned char *) xmalloc (mem_len);
fa593d66 1628 if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
c12a5089 1629 bin2hex (mem_buf, cs.own_buf, mem_len);
fa593d66 1630 else
c12a5089 1631 write_enn (cs.own_buf);
fa593d66 1632 }
c12a5089 1633 else if (cs.own_buf[0] == 'X')
fa593d66 1634 {
c12a5089 1635 if (decode_X_packet (&cs.own_buf[1], len - 1, &mem_addr,
fa593d66 1636 &mem_len, &mem_buf) < 0
4196ab2a 1637 || target_write_memory (mem_addr, mem_buf, mem_len) != 0)
c12a5089 1638 write_enn (cs.own_buf);
fa593d66 1639 else
c12a5089 1640 write_ok (cs.own_buf);
fa593d66
PA
1641 }
1642 else
1643 {
c12a5089 1644 decode_M_packet (&cs.own_buf[1], &mem_addr, &mem_len, &mem_buf);
4196ab2a 1645 if (target_write_memory (mem_addr, mem_buf, mem_len) == 0)
c12a5089 1646 write_ok (cs.own_buf);
fa593d66 1647 else
c12a5089 1648 write_enn (cs.own_buf);
fa593d66
PA
1649 }
1650 free (mem_buf);
c12a5089 1651 if (putpkt (cs.own_buf) < 0)
fa593d66 1652 return -1;
c12a5089 1653 len = getpkt (cs.own_buf);
fa593d66
PA
1654 if (len < 0)
1655 return -1;
1656 }
1657
c12a5089 1658 if (cs.own_buf[0] == 'E')
fa593d66 1659 {
422186a9 1660 warning ("An error occurred while relocating an instruction: %s",
c12a5089 1661 cs.own_buf);
fa593d66
PA
1662 return -1;
1663 }
1664
c12a5089 1665 if (!startswith (cs.own_buf, "qRelocInsn:"))
fa593d66 1666 {
422186a9 1667 warning ("Malformed response to qRelocInsn, ignoring: %s",
c12a5089 1668 cs.own_buf);
fa593d66
PA
1669 return -1;
1670 }
1671
c12a5089 1672 unpack_varlen_hex (cs.own_buf + strlen ("qRelocInsn:"), &written);
fa593d66
PA
1673
1674 *to += written;
1675 return 0;
1676}
1677
c74d0ad8 1678void
bce7165d 1679monitor_output (const char *msg)
c74d0ad8 1680{
0a822afb 1681 int len = strlen (msg);
224c3ddb 1682 char *buf = (char *) xmalloc (len * 2 + 2);
c74d0ad8
DJ
1683
1684 buf[0] = 'O';
971dc0b8 1685 bin2hex ((const gdb_byte *) msg, buf + 1, len);
c74d0ad8
DJ
1686
1687 putpkt (buf);
1688 free (buf);
1689}
255e7678 1690
0fb4aa4b 1691#endif
This page took 1.625449 seconds and 4 git commands to generate.