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