Add configure check for std::thread
[deliverable/binutils-gdb.git] / gdb / gdbserver / remote-utils.c
CommitLineData
c906108c 1/* Remote utility routines for the remote server for GDB.
42a4f53d 2 Copyright (C) 1986-2019 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"
fafcc06a 31#include <ctype.h>
b80864fb 32#if HAVE_SYS_IOCTL_H
c906108c 33#include <sys/ioctl.h>
b80864fb 34#endif
68070c10 35#if HAVE_SYS_FILE_H
c906108c 36#include <sys/file.h>
68070c10 37#endif
9eb1356e
PA
38#if HAVE_NETINET_IN_H
39#include <netinet/in.h>
40#endif
41#if HAVE_SYS_SOCKET_H
42#include <sys/socket.h>
43#endif
b80864fb 44#if HAVE_NETDB_H
c906108c 45#include <netdb.h>
b80864fb
DJ
46#endif
47#if HAVE_NETINET_TCP_H
c906108c 48#include <netinet/tcp.h>
b80864fb
DJ
49#endif
50#if HAVE_SYS_IOCTL_H
c906108c 51#include <sys/ioctl.h>
b80864fb 52#endif
68070c10 53#if HAVE_SIGNAL_H
c906108c 54#include <signal.h>
68070c10
PA
55#endif
56#if HAVE_FCNTL_H
c906108c 57#include <fcntl.h>
68070c10 58#endif
268a13a5 59#include "gdbsupport/gdb_sys_time.h"
cf30a8e1 60#include <unistd.h>
b80864fb 61#if HAVE_ARPA_INET_H
0729219d 62#include <arpa/inet.h>
b80864fb 63#endif
53ce3c39 64#include <sys/stat.h>
9eb1356e
PA
65
66#if USE_WIN32API
41fa577f 67#include <ws2tcpip.h>
9eb1356e 68#endif
c906108c 69
ac8c974e
AR
70#if __QNX__
71#include <sys/iomgr.h>
72#endif /* __QNX__ */
73
f450004a
DJ
74#ifndef HAVE_SOCKLEN_T
75typedef int socklen_t;
76#endif
77
0fb4aa4b
PA
78#ifndef IN_PROCESS_AGENT
79
7390519e
PA
80#if USE_WIN32API
81# define INVALID_DESCRIPTOR INVALID_SOCKET
82#else
83# define INVALID_DESCRIPTOR -1
84#endif
85
24b066ba
DE
86/* Extra value for readchar_callback. */
87enum {
88 /* The callback is currently not scheduled. */
89 NOT_SCHEDULED = -1
90};
91
92/* Status of the readchar callback.
93 Either NOT_SCHEDULED or the callback id. */
94static int readchar_callback = NOT_SCHEDULED;
95
bc3b5632 96static int readchar (void);
24b066ba
DE
97static void reset_readchar (void);
98static void reschedule (void);
bc3b5632 99
fd500816
DJ
100/* A cache entry for a successfully looked-up symbol. */
101struct sym_cache
102{
95954743 103 char *name;
fd500816
DJ
104 CORE_ADDR addr;
105 struct sym_cache *next;
106};
107
e0f9f062
DE
108static int remote_is_stdio = 0;
109
ec48365d
PA
110static gdb_fildes_t remote_desc = INVALID_DESCRIPTOR;
111static gdb_fildes_t listen_desc = INVALID_DESCRIPTOR;
c906108c 112
0f48aa01 113#ifdef USE_WIN32API
68070c10
PA
114# define read(fd, buf, len) recv (fd, (char *) buf, len, 0)
115# define write(fd, buf, len) send (fd, (char *) buf, len, 0)
0f48aa01
DJ
116#endif
117
8336d594
PA
118int
119gdb_connected (void)
120{
121 return remote_desc != INVALID_DESCRIPTOR;
122}
123
e0f9f062
DE
124/* Return true if the remote connection is over stdio. */
125
126int
127remote_connection_is_stdio (void)
128{
129 return remote_is_stdio;
130}
131
8336d594
PA
132static void
133enable_async_notification (int fd)
134{
135#if defined(F_SETFL) && defined (FASYNC)
136 int save_fcntl_flags;
137
138 save_fcntl_flags = fcntl (fd, F_GETFL, 0);
139 fcntl (fd, F_SETFL, save_fcntl_flags | FASYNC);
140#if defined (F_SETOWN)
141 fcntl (fd, F_SETOWN, getpid ());
142#endif
143#endif
144}
145
146static int
147handle_accept_event (int err, gdb_client_data client_data)
148{
c7ab0aef
SDJ
149 struct sockaddr_storage sockaddr;
150 socklen_t len = sizeof (sockaddr);
8336d594
PA
151
152 if (debug_threads)
87ce2a04 153 debug_printf ("handling possible accept event\n");
8336d594 154
c7ab0aef 155 remote_desc = accept (listen_desc, (struct sockaddr *) &sockaddr, &len);
8336d594
PA
156 if (remote_desc == -1)
157 perror_with_name ("Accept failed");
158
159 /* Enable TCP keep alive process. */
c7ab0aef 160 socklen_t tmp = 1;
8336d594
PA
161 setsockopt (remote_desc, SOL_SOCKET, SO_KEEPALIVE,
162 (char *) &tmp, sizeof (tmp));
163
164 /* Tell TCP not to delay small packets. This greatly speeds up
165 interactive response. */
166 tmp = 1;
167 setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY,
168 (char *) &tmp, sizeof (tmp));
169
170#ifndef USE_WIN32API
8336d594
PA
171 signal (SIGPIPE, SIG_IGN); /* If we don't do this, then gdbserver simply
172 exits when the remote side dies. */
03f2bd59
JK
173#endif
174
175 if (run_once)
176 {
177#ifndef USE_WIN32API
178 close (listen_desc); /* No longer need this */
8336d594 179#else
03f2bd59 180 closesocket (listen_desc); /* No longer need this */
8336d594 181#endif
03f2bd59 182 }
8336d594 183
03f2bd59
JK
184 /* Even if !RUN_ONCE no longer notice new connections. Still keep the
185 descriptor open for add_file_handler to wait for a new connection. */
8336d594
PA
186 delete_file_handler (listen_desc);
187
80e24d09
SM
188 /* Convert IP address to string. */
189 char orig_host[GDB_NI_MAX_ADDR], orig_port[GDB_NI_MAX_PORT];
c7ab0aef 190
80e24d09
SM
191 int r = getnameinfo ((struct sockaddr *) &sockaddr, len,
192 orig_host, sizeof (orig_host),
193 orig_port, sizeof (orig_port),
194 NI_NUMERICHOST | NI_NUMERICSERV);
c7ab0aef 195
80e24d09
SM
196 if (r != 0)
197 fprintf (stderr, _("Could not obtain remote address: %s\n"),
198 gai_strerror (r));
c7ab0aef 199 else
80e24d09
SM
200 fprintf (stderr, _("Remote debugging from host %s, port %s\n"),
201 orig_host, orig_port);
8336d594
PA
202
203 enable_async_notification (remote_desc);
204
205 /* Register the event loop handler. */
206 add_file_handler (remote_desc, handle_serial_event, NULL);
207
208 /* We have a new GDB connection now. If we were disconnected
209 tracing, there's a window where the target could report a stop
210 event to the event loop, and since we have a connection now, we'd
211 try to send vStopped notifications to GDB. But, don't do that
212 until GDB as selected all-stop/non-stop, and has queried the
213 threads' status ('?'). */
214 target_async (0);
215
216 return 0;
217}
218
03f2bd59
JK
219/* Prepare for a later connection to a remote debugger.
220 NAME is the filename used for communication. */
221
222void
fb32b4f7 223remote_prepare (const char *name)
03f2bd59 224{
c12a5089 225 client_state &cs = get_client_state ();
03f2bd59
JK
226#ifdef USE_WIN32API
227 static int winsock_initialized;
228#endif
03f2bd59 229 socklen_t tmp;
03f2bd59 230
e0f9f062
DE
231 remote_is_stdio = 0;
232 if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
233 {
234 /* We need to record fact that we're using stdio sooner than the
235 call to remote_open so start_inferior knows the connection is
236 via stdio. */
237 remote_is_stdio = 1;
c12a5089 238 cs.transport_is_reliable = 1;
e0f9f062
DE
239 return;
240 }
241
c7ab0aef
SDJ
242 struct addrinfo hint;
243 struct addrinfo *ainfo;
244
245 memset (&hint, 0, sizeof (hint));
246 /* Assume no prefix will be passed, therefore we should use
247 AF_UNSPEC. */
248 hint.ai_family = AF_UNSPEC;
249 hint.ai_socktype = SOCK_STREAM;
250 hint.ai_protocol = IPPROTO_TCP;
251
252 parsed_connection_spec parsed
80e24d09 253 = parse_connection_spec_without_prefix (name, &hint);
c7ab0aef
SDJ
254
255 if (parsed.port_str.empty ())
03f2bd59 256 {
c12a5089 257 cs.transport_is_reliable = 0;
03f2bd59
JK
258 return;
259 }
260
03f2bd59
JK
261#ifdef USE_WIN32API
262 if (!winsock_initialized)
263 {
264 WSADATA wsad;
265
266 WSAStartup (MAKEWORD (1, 0), &wsad);
267 winsock_initialized = 1;
268 }
269#endif
270
80e24d09
SM
271 int r = getaddrinfo (parsed.host_str.c_str (), parsed.port_str.c_str (),
272 &hint, &ainfo);
c7ab0aef 273
80e24d09
SM
274 if (r != 0)
275 error (_("%s: cannot resolve name: %s"), name, gai_strerror (r));
c7ab0aef 276
80e24d09 277 scoped_free_addrinfo freeaddrinfo (ainfo);
c7ab0aef 278
80e24d09 279 struct addrinfo *iter;
c7ab0aef 280
80e24d09 281 for (iter = ainfo; iter != NULL; iter = iter->ai_next)
f19c7ff8 282 {
80e24d09
SM
283 listen_desc = gdb_socket_cloexec (iter->ai_family, iter->ai_socktype,
284 iter->ai_protocol);
f19c7ff8 285
80e24d09
SM
286 if (listen_desc >= 0)
287 break;
288 }
f19c7ff8 289
80e24d09
SM
290 if (iter == NULL)
291 perror_with_name ("Can't open socket");
f19c7ff8 292
80e24d09
SM
293 /* Allow rapid reuse of this port. */
294 tmp = 1;
295 setsockopt (listen_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp,
296 sizeof (tmp));
f19c7ff8 297
80e24d09
SM
298 switch (iter->ai_family)
299 {
300 case AF_INET:
301 ((struct sockaddr_in *) iter->ai_addr)->sin_addr.s_addr = INADDR_ANY;
302 break;
303 case AF_INET6:
304 ((struct sockaddr_in6 *) iter->ai_addr)->sin6_addr = in6addr_any;
305 break;
306 default:
307 internal_error (__FILE__, __LINE__,
308 _("Invalid 'ai_family' %d\n"), iter->ai_family);
c7ab0aef 309 }
03f2bd59 310
80e24d09 311 if (bind (listen_desc, iter->ai_addr, iter->ai_addrlen) != 0)
03f2bd59
JK
312 perror_with_name ("Can't bind address");
313
c7ab0aef
SDJ
314 if (listen (listen_desc, 1) != 0)
315 perror_with_name ("Can't listen on socket");
316
c12a5089 317 cs.transport_is_reliable = 1;
03f2bd59
JK
318}
319
c906108c
SS
320/* Open a connection to a remote debugger.
321 NAME is the filename used for communication. */
322
323void
fb32b4f7 324remote_open (const char *name)
c906108c 325{
fb32b4f7 326 const char *port_str;
8264bb58
DJ
327
328 port_str = strchr (name, ':');
e0f9f062 329#ifdef USE_WIN32API
8264bb58 330 if (port_str == NULL)
752312ba 331 error ("Only HOST:PORT is supported on this platform.");
e0f9f062
DE
332#endif
333
334 if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
335 {
336 fprintf (stderr, "Remote debugging using stdio\n");
337
338 /* Use stdin as the handle of the connection.
339 We only select on reads, for example. */
340 remote_desc = fileno (stdin);
341
342 enable_async_notification (remote_desc);
343
344 /* Register the event loop handler. */
345 add_file_handler (remote_desc, handle_serial_event, NULL);
346 }
347#ifndef USE_WIN32API
348 else if (port_str == NULL)
80e24d09 349 {
8264bb58
DJ
350 struct stat statbuf;
351
352 if (stat (name, &statbuf) == 0
80e24d09 353 && (S_ISCHR (statbuf.st_mode) || S_ISFIFO (statbuf.st_mode)))
8264bb58
DJ
354 remote_desc = open (name, O_RDWR);
355 else
356 {
357 errno = EINVAL;
358 remote_desc = -1;
359 }
360
c906108c
SS
361 if (remote_desc < 0)
362 perror_with_name ("Could not open remote device");
363
726e1356 364#if HAVE_TERMIOS_H
c906108c
SS
365 {
366 struct termios termios;
c5aa993b 367 tcgetattr (remote_desc, &termios);
c906108c
SS
368
369 termios.c_iflag = 0;
370 termios.c_oflag = 0;
371 termios.c_lflag = 0;
c5aa993b 372 termios.c_cflag &= ~(CSIZE | PARENB);
c906108c 373 termios.c_cflag |= CLOCAL | CS8;
d0608e50 374 termios.c_cc[VMIN] = 1;
c906108c
SS
375 termios.c_cc[VTIME] = 0;
376
c5aa993b 377 tcsetattr (remote_desc, TCSANOW, &termios);
c906108c
SS
378 }
379#endif
380
e641a1ca 381 fprintf (stderr, "Remote debugging using %s\n", name);
a6f3e723 382
8336d594
PA
383 enable_async_notification (remote_desc);
384
385 /* Register the event loop handler. */
386 add_file_handler (remote_desc, handle_serial_event, NULL);
c906108c 387 }
e0f9f062 388#endif /* USE_WIN32API */
c906108c
SS
389 else
390 {
c7ab0aef
SDJ
391 char listen_port[GDB_NI_MAX_PORT];
392 struct sockaddr_storage sockaddr;
393 socklen_t len = sizeof (sockaddr);
394
395 if (getsockname (listen_desc, (struct sockaddr *) &sockaddr, &len) < 0)
03f2bd59 396 perror_with_name ("Can't determine port");
6f8486da 397
c7ab0aef
SDJ
398 int r = getnameinfo ((struct sockaddr *) &sockaddr, len,
399 NULL, 0,
400 listen_port, sizeof (listen_port),
401 NI_NUMERICSERV);
402
403 if (r != 0)
404 fprintf (stderr, _("Can't obtain port where we are listening: %s"),
405 gai_strerror (r));
406 else
407 fprintf (stderr, _("Listening on port %s\n"), listen_port);
408
b80864fb 409 fflush (stderr);
6910d122 410
8336d594
PA
411 /* Register the event loop handler. */
412 add_file_handler (listen_desc, handle_accept_event, NULL);
c906108c 413 }
c906108c
SS
414}
415
416void
fba45db2 417remote_close (void)
c906108c 418{
bd99dc85
PA
419 delete_file_handler (remote_desc);
420
e849ea89 421 disable_async_io ();
8b207339 422
b80864fb
DJ
423#ifdef USE_WIN32API
424 closesocket (remote_desc);
425#else
e0f9f062
DE
426 if (! remote_connection_is_stdio ())
427 close (remote_desc);
b80864fb 428#endif
8336d594 429 remote_desc = INVALID_DESCRIPTOR;
24b066ba
DE
430
431 reset_readchar ();
c906108c
SS
432}
433
0fb4aa4b
PA
434#endif
435
0fb4aa4b
PA
436#ifndef IN_PROCESS_AGENT
437
dae5f5cf 438void
2f2893d9
DJ
439decode_address (CORE_ADDR *addrp, const char *start, int len)
440{
441 CORE_ADDR addr;
442 char ch;
443 int i;
444
445 addr = 0;
446 for (i = 0; i < len; i++)
447 {
448 ch = start[i];
449 addr = addr << 4;
450 addr = addr | (fromhex (ch) & 0x0f);
451 }
452 *addrp = addr;
453}
454
89be2091
DJ
455const char *
456decode_address_to_semicolon (CORE_ADDR *addrp, const char *start)
457{
458 const char *end;
459
460 end = start;
461 while (*end != '\0' && *end != ';')
462 end++;
463
464 decode_address (addrp, start, end - start);
465
466 if (*end == ';')
467 end++;
468 return end;
469}
470
0fb4aa4b
PA
471#endif
472
0fb4aa4b
PA
473#ifndef IN_PROCESS_AGENT
474
5ffff7c1
DJ
475/* Look for a sequence of characters which can be run-length encoded.
476 If there are any, update *CSUM and *P. Otherwise, output the
477 single character. Return the number of characters consumed. */
478
479static int
480try_rle (char *buf, int remaining, unsigned char *csum, char **p)
481{
482 int n;
483
484 /* Always output the character. */
485 *csum += buf[0];
486 *(*p)++ = buf[0];
487
488 /* Don't go past '~'. */
489 if (remaining > 97)
490 remaining = 97;
491
492 for (n = 1; n < remaining; n++)
493 if (buf[n] != buf[0])
494 break;
495
496 /* N is the index of the first character not the same as buf[0].
497 buf[0] is counted twice, so by decrementing N, we get the number
498 of characters the RLE sequence will replace. */
499 n--;
500
501 if (n < 3)
502 return 1;
503
504 /* Skip the frame characters. The manual says to skip '+' and '-'
505 also, but there's no reason to. Unfortunately these two unusable
506 characters double the encoded length of a four byte zero
507 value. */
508 while (n + 29 == '$' || n + 29 == '#')
509 n--;
510
511 *csum += '*';
512 *(*p)++ = '*';
513 *csum += n + 29;
514 *(*p)++ = n + 29;
515
516 return n + 1;
517}
518
0fb4aa4b
PA
519#endif
520
0fb4aa4b
PA
521#ifndef IN_PROCESS_AGENT
522
95954743
PA
523/* Write a PTID to BUF. Returns BUF+CHARACTERS_WRITTEN. */
524
525char *
526write_ptid (char *buf, ptid_t ptid)
527{
c12a5089 528 client_state &cs = get_client_state ();
95954743
PA
529 int pid, tid;
530
c12a5089 531 if (cs.multi_process)
95954743 532 {
e99b03dc 533 pid = ptid.pid ();
95954743
PA
534 if (pid < 0)
535 buf += sprintf (buf, "p-%x.", -pid);
536 else
537 buf += sprintf (buf, "p%x.", pid);
538 }
e38504b3 539 tid = ptid.lwp ();
95954743
PA
540 if (tid < 0)
541 buf += sprintf (buf, "-%x", -tid);
542 else
543 buf += sprintf (buf, "%x", tid);
544
545 return buf;
546}
547
5b3da067 548static ULONGEST
256642e8 549hex_or_minus_one (const char *buf, const char **obuf)
95954743
PA
550{
551 ULONGEST ret;
552
61012eef 553 if (startswith (buf, "-1"))
95954743
PA
554 {
555 ret = (ULONGEST) -1;
556 buf += 2;
557 }
558 else
559 buf = unpack_varlen_hex (buf, &ret);
560
561 if (obuf)
562 *obuf = buf;
563
564 return ret;
565}
566
567/* Extract a PTID from BUF. If non-null, OBUF is set to the to one
568 passed the last parsed char. Returns null_ptid on error. */
569ptid_t
256642e8 570read_ptid (const char *buf, const char **obuf)
95954743 571{
256642e8
PA
572 const char *p = buf;
573 const char *pp;
95954743
PA
574 ULONGEST pid = 0, tid = 0;
575
576 if (*p == 'p')
577 {
578 /* Multi-process ptid. */
579 pp = unpack_varlen_hex (p + 1, &pid);
580 if (*pp != '.')
581 error ("invalid remote ptid: %s\n", p);
582
583 p = pp + 1;
584
585 tid = hex_or_minus_one (p, &pp);
586
587 if (obuf)
588 *obuf = pp;
fd79271b 589 return ptid_t (pid, tid, 0);
95954743
PA
590 }
591
592 /* No multi-process. Just a tid. */
593 tid = hex_or_minus_one (p, &pp);
594
3d40fbb5
PA
595 /* Since GDB is not sending a process id (multi-process extensions
596 are off), then there's only one process. Default to the first in
597 the list. */
598 pid = pid_of (get_first_process ());
95954743
PA
599
600 if (obuf)
601 *obuf = pp;
fd79271b 602 return ptid_t (pid, tid, 0);
95954743
PA
603}
604
e0f9f062
DE
605/* Write COUNT bytes in BUF to the client.
606 The result is the number of bytes written or -1 if error.
607 This may return less than COUNT. */
608
609static int
610write_prim (const void *buf, int count)
611{
612 if (remote_connection_is_stdio ())
613 return write (fileno (stdout), buf, count);
614 else
615 return write (remote_desc, buf, count);
616}
617
618/* Read COUNT bytes from the client and store in BUF.
619 The result is the number of bytes read or -1 if error.
620 This may return less than COUNT. */
621
622static int
623read_prim (void *buf, int count)
624{
625 if (remote_connection_is_stdio ())
626 return read (fileno (stdin), buf, count);
627 else
628 return read (remote_desc, buf, count);
629}
630
c906108c 631/* Send a packet to the remote machine, with error checking.
01f9e8fa
DJ
632 The data of the packet is in BUF, and the length of the
633 packet is in CNT. Returns >= 0 on success, -1 otherwise. */
c906108c 634
bd99dc85
PA
635static int
636putpkt_binary_1 (char *buf, int cnt, int is_notif)
c906108c 637{
c12a5089 638 client_state &cs = get_client_state ();
c906108c
SS
639 int i;
640 unsigned char csum = 0;
0a30fbc4 641 char *buf2;
c906108c 642 char *p;
bc3b5632 643 int cc;
c906108c 644
224c3ddb 645 buf2 = (char *) xmalloc (strlen ("$") + cnt + strlen ("#nn") + 1);
0a30fbc4 646
c906108c
SS
647 /* Copy the packet into buffer BUF2, encapsulating it
648 and giving it a checksum. */
649
650 p = buf2;
bd99dc85
PA
651 if (is_notif)
652 *p++ = '%';
653 else
654 *p++ = '$';
c906108c 655
5ffff7c1
DJ
656 for (i = 0; i < cnt;)
657 i += try_rle (buf + i, cnt - i, &csum, &p);
658
c906108c
SS
659 *p++ = '#';
660 *p++ = tohex ((csum >> 4) & 0xf);
661 *p++ = tohex (csum & 0xf);
662
663 *p = '\0';
664
665 /* Send it over and over until we get a positive ack. */
666
667 do
668 {
e0f9f062 669 if (write_prim (buf2, p - buf2) != p - buf2)
c906108c
SS
670 {
671 perror ("putpkt(write)");
f88c79e6 672 free (buf2);
c906108c
SS
673 return -1;
674 }
675
c12a5089 676 if (cs.noack_mode || is_notif)
a6f3e723
SL
677 {
678 /* Don't expect an ack then. */
679 if (remote_debug)
680 {
bd99dc85 681 if (is_notif)
4eefa7bc 682 debug_printf ("putpkt (\"%s\"); [notif]\n", buf2);
bd99dc85 683 else
4eefa7bc
PA
684 debug_printf ("putpkt (\"%s\"); [noack mode]\n", buf2);
685 debug_flush ();
a6f3e723
SL
686 }
687 break;
688 }
689
c906108c 690 if (remote_debug)
0d62e5e8 691 {
4eefa7bc
PA
692 debug_printf ("putpkt (\"%s\"); [looking for ack]\n", buf2);
693 debug_flush ();
0d62e5e8 694 }
0d62e5e8 695
bc3b5632 696 cc = readchar ();
c906108c 697
bc3b5632
DE
698 if (cc < 0)
699 {
0a30fbc4 700 free (buf2);
c906108c
SS
701 return -1;
702 }
0d62e5e8 703
bc3b5632
DE
704 if (remote_debug)
705 {
4eefa7bc
PA
706 debug_printf ("[received '%c' (0x%x)]\n", cc, cc);
707 debug_flush ();
bc3b5632
DE
708 }
709
0d62e5e8 710 /* Check for an input interrupt while we're here. */
0bfdf32f 711 if (cc == '\003' && current_thread != NULL)
ef57601b 712 (*the_target->request_interrupt) ();
c906108c 713 }
bc3b5632 714 while (cc != '+');
c906108c 715
0a30fbc4 716 free (buf2);
c906108c
SS
717 return 1; /* Success! */
718}
719
bd99dc85
PA
720int
721putpkt_binary (char *buf, int cnt)
722{
723 return putpkt_binary_1 (buf, cnt, 0);
724}
725
01f9e8fa
DJ
726/* Send a packet to the remote machine, with error checking. The data
727 of the packet is in BUF, and the packet should be a NUL-terminated
728 string. Returns >= 0 on success, -1 otherwise. */
729
730int
731putpkt (char *buf)
732{
733 return putpkt_binary (buf, strlen (buf));
734}
735
bd99dc85
PA
736int
737putpkt_notif (char *buf)
738{
739 return putpkt_binary_1 (buf, strlen (buf), 1);
740}
741
c906108c
SS
742/* Come here when we get an input interrupt from the remote side. This
743 interrupt should only be active while we are waiting for the child to do
bc3b5632
DE
744 something. Thus this assumes readchar:bufcnt is 0.
745 About the only thing that should come through is a ^C, which
ef57601b 746 will cause us to request child interruption. */
c906108c
SS
747
748static void
0a30fbc4 749input_interrupt (int unused)
c906108c 750{
cf30a8e1
C
751 fd_set readset;
752 struct timeval immediate = { 0, 0 };
c906108c 753
cf30a8e1
C
754 /* Protect against spurious interrupts. This has been observed to
755 be a problem under NetBSD 1.4 and 1.5. */
c906108c 756
cf30a8e1
C
757 FD_ZERO (&readset);
758 FD_SET (remote_desc, &readset);
759 if (select (remote_desc + 1, &readset, 0, 0, &immediate) > 0)
c906108c 760 {
cf30a8e1 761 int cc;
fd500816 762 char c = 0;
7390519e 763
e0f9f062 764 cc = read_prim (&c, 1);
c906108c 765
fafcc06a 766 if (cc == 0)
cf30a8e1 767 {
fafcc06a
SDJ
768 fprintf (stderr, "client connection closed\n");
769 return;
770 }
f0db101d 771 else if (cc != 1 || c != '\003')
fafcc06a
SDJ
772 {
773 fprintf (stderr, "input_interrupt, count = %d c = %d ", cc, c);
774 if (isprint (c))
775 fprintf (stderr, "('%c')\n", c);
776 else
777 fprintf (stderr, "('\\x%02x')\n", c & 0xff);
cf30a8e1
C
778 return;
779 }
7390519e 780
ef57601b 781 (*the_target->request_interrupt) ();
cf30a8e1 782 }
c906108c 783}
7390519e
PA
784
785/* Check if the remote side sent us an interrupt request (^C). */
786void
787check_remote_input_interrupt_request (void)
788{
789 /* This function may be called before establishing communications,
790 therefore we need to validate the remote descriptor. */
791
792 if (remote_desc == INVALID_DESCRIPTOR)
793 return;
794
795 input_interrupt (0);
796}
b80864fb 797
8b207339
YQ
798/* Asynchronous I/O support. SIGIO must be unblocked when waiting,
799 in order to accept Control-C from the client, and must be blocked
800 when talking to the client. */
c906108c 801
a20d5e98 802static void
8b207339 803block_unblock_async_io (int block)
62ea82f5 804{
b80864fb 805#ifndef USE_WIN32API
62ea82f5 806 sigset_t sigio_set;
a20d5e98 807
62ea82f5
DJ
808 sigemptyset (&sigio_set);
809 sigaddset (&sigio_set, SIGIO);
8b207339 810 sigprocmask (block ? SIG_BLOCK : SIG_UNBLOCK, &sigio_set, NULL);
b80864fb 811#endif
62ea82f5
DJ
812}
813
ac8c974e
AR
814#ifdef __QNX__
815static void
816nto_comctrl (int enable)
817{
818 struct sigevent event;
819
820 if (enable)
821 {
822 event.sigev_notify = SIGEV_SIGNAL_THREAD;
823 event.sigev_signo = SIGIO;
824 event.sigev_code = 0;
825 event.sigev_value.sival_ptr = NULL;
826 event.sigev_priority = -1;
827 ionotify (remote_desc, _NOTIFY_ACTION_POLLARM, _NOTIFY_COND_INPUT,
828 &event);
829 }
830 else
831 ionotify (remote_desc, _NOTIFY_ACTION_POLL, _NOTIFY_COND_INPUT, NULL);
832}
833#endif /* __QNX__ */
834
835
fd500816
DJ
836/* Current state of asynchronous I/O. */
837static int async_io_enabled;
838
839/* Enable asynchronous I/O. */
c906108c 840void
fba45db2 841enable_async_io (void)
c906108c 842{
fd500816
DJ
843 if (async_io_enabled)
844 return;
845
8b207339
YQ
846 block_unblock_async_io (0);
847
fd500816 848 async_io_enabled = 1;
ac8c974e
AR
849#ifdef __QNX__
850 nto_comctrl (1);
851#endif /* __QNX__ */
c906108c
SS
852}
853
fd500816 854/* Disable asynchronous I/O. */
c906108c 855void
fba45db2 856disable_async_io (void)
c906108c 857{
fd500816
DJ
858 if (!async_io_enabled)
859 return;
860
8b207339
YQ
861 block_unblock_async_io (1);
862
fd500816 863 async_io_enabled = 0;
ac8c974e
AR
864#ifdef __QNX__
865 nto_comctrl (0);
866#endif /* __QNX__ */
867
c906108c
SS
868}
869
a20d5e98
DJ
870void
871initialize_async_io (void)
872{
8b207339 873 /* Make sure that async I/O starts blocked. */
a20d5e98
DJ
874 async_io_enabled = 1;
875 disable_async_io ();
876
8b207339
YQ
877 /* Install the signal handler. */
878#ifndef USE_WIN32API
879 signal (SIGIO, input_interrupt);
880#endif
a20d5e98
DJ
881}
882
24b066ba
DE
883/* Internal buffer used by readchar.
884 These are global to readchar because reschedule_remote needs to be
885 able to tell whether the buffer is empty. */
886
887static unsigned char readchar_buf[BUFSIZ];
888static int readchar_bufcnt = 0;
889static unsigned char *readchar_bufp;
890
c906108c
SS
891/* Returns next char from remote GDB. -1 if error. */
892
893static int
fba45db2 894readchar (void)
c906108c 895{
24b066ba 896 int ch;
c906108c 897
24b066ba
DE
898 if (readchar_bufcnt == 0)
899 {
e0f9f062 900 readchar_bufcnt = read_prim (readchar_buf, sizeof (readchar_buf));
c906108c 901
24b066ba
DE
902 if (readchar_bufcnt <= 0)
903 {
904 if (readchar_bufcnt == 0)
fddedbe6
PA
905 {
906 if (remote_debug)
4eefa7bc 907 debug_printf ("readchar: Got EOF\n");
fddedbe6 908 }
24b066ba
DE
909 else
910 perror ("readchar");
c906108c 911
24b066ba
DE
912 return -1;
913 }
c906108c 914
24b066ba 915 readchar_bufp = readchar_buf;
c906108c
SS
916 }
917
24b066ba
DE
918 readchar_bufcnt--;
919 ch = *readchar_bufp++;
920 reschedule ();
921 return ch;
922}
923
924/* Reset the readchar state machine. */
925
926static void
927reset_readchar (void)
928{
929 readchar_bufcnt = 0;
930 if (readchar_callback != NOT_SCHEDULED)
931 {
932 delete_callback_event (readchar_callback);
933 readchar_callback = NOT_SCHEDULED;
934 }
935}
936
937/* Process remaining data in readchar_buf. */
938
939static int
940process_remaining (void *context)
941{
942 int res;
943
944 /* This is a one-shot event. */
945 readchar_callback = NOT_SCHEDULED;
946
947 if (readchar_bufcnt > 0)
948 res = handle_serial_event (0, NULL);
949 else
950 res = 0;
951
952 return res;
953}
954
955/* If there is still data in the buffer, queue another event to process it,
956 we can't sleep in select yet. */
957
958static void
959reschedule (void)
960{
961 if (readchar_bufcnt > 0 && readchar_callback == NOT_SCHEDULED)
962 readchar_callback = append_callback_event (process_remaining, NULL);
c906108c
SS
963}
964
965/* Read a packet from the remote machine, with error checking,
966 and store it in BUF. Returns length of packet, or negative if error. */
967
968int
fba45db2 969getpkt (char *buf)
c906108c 970{
c12a5089 971 client_state &cs = get_client_state ();
c906108c
SS
972 char *bp;
973 unsigned char csum, c1, c2;
974 int c;
975
976 while (1)
977 {
978 csum = 0;
979
980 while (1)
981 {
982 c = readchar ();
5a0dd67a
YQ
983
984 /* The '\003' may appear before or after each packet, so
985 check for an input interrupt. */
986 if (c == '\003')
987 {
988 (*the_target->request_interrupt) ();
989 continue;
990 }
991
c906108c
SS
992 if (c == '$')
993 break;
994 if (remote_debug)
0d62e5e8 995 {
4eefa7bc
PA
996 debug_printf ("[getpkt: discarding char '%c']\n", c);
997 debug_flush ();
0d62e5e8
DJ
998 }
999
c906108c
SS
1000 if (c < 0)
1001 return -1;
1002 }
1003
1004 bp = buf;
1005 while (1)
1006 {
1007 c = readchar ();
1008 if (c < 0)
1009 return -1;
1010 if (c == '#')
1011 break;
1012 *bp++ = c;
1013 csum += c;
1014 }
1015 *bp = 0;
1016
1017 c1 = fromhex (readchar ());
1018 c2 = fromhex (readchar ());
c5aa993b 1019
c906108c
SS
1020 if (csum == (c1 << 4) + c2)
1021 break;
1022
c12a5089 1023 if (cs.noack_mode)
a6f3e723 1024 {
493e2a69
MS
1025 fprintf (stderr,
1026 "Bad checksum, sentsum=0x%x, csum=0x%x, "
1027 "buf=%s [no-ack-mode, Bad medium?]\n",
a6f3e723
SL
1028 (c1 << 4) + c2, csum, buf);
1029 /* Not much we can do, GDB wasn't expecting an ack/nac. */
1030 break;
1031 }
1032
c906108c
SS
1033 fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
1034 (c1 << 4) + c2, csum, buf);
e0f9f062 1035 if (write_prim ("-", 1) != 1)
e581f2b4 1036 return -1;
c906108c
SS
1037 }
1038
c12a5089 1039 if (!cs.noack_mode)
0d62e5e8 1040 {
a6f3e723
SL
1041 if (remote_debug)
1042 {
4eefa7bc
PA
1043 debug_printf ("getpkt (\"%s\"); [sending ack] \n", buf);
1044 debug_flush ();
a6f3e723 1045 }
c906108c 1046
e0f9f062 1047 if (write_prim ("+", 1) != 1)
e581f2b4 1048 return -1;
c906108c 1049
a6f3e723
SL
1050 if (remote_debug)
1051 {
4eefa7bc
PA
1052 debug_printf ("[sent ack]\n");
1053 debug_flush ();
a6f3e723 1054 }
0d62e5e8 1055 }
86b1f9c5
PM
1056 else
1057 {
1058 if (remote_debug)
1059 {
4eefa7bc
PA
1060 debug_printf ("getpkt (\"%s\"); [no ack sent] \n", buf);
1061 debug_flush ();
86b1f9c5
PM
1062 }
1063 }
0d62e5e8 1064
18879fef
YQ
1065 /* The readchar above may have already read a '\003' out of the socket
1066 and moved it to the local buffer. For example, when GDB sends
1067 vCont;c immediately followed by interrupt (see
1068 gdb.base/interrupt-noterm.exp). As soon as we see the vCont;c, we'll
1069 resume the inferior and wait. Since we've already moved the '\003'
1070 to the local buffer, SIGIO won't help. In that case, if we don't
1071 check for interrupt after the vCont;c packet, the interrupt character
1072 would stay in the buffer unattended until after the next (unrelated)
1073 stop. */
1074 while (readchar_bufcnt > 0 && *readchar_bufp == '\003')
1075 {
1076 /* Consume the interrupt character in the buffer. */
1077 readchar ();
1078 (*the_target->request_interrupt) ();
1079 }
1080
c906108c
SS
1081 return bp - buf;
1082}
1083
1084void
fba45db2 1085write_ok (char *buf)
c906108c
SS
1086{
1087 buf[0] = 'O';
1088 buf[1] = 'K';
1089 buf[2] = '\0';
1090}
1091
1092void
fba45db2 1093write_enn (char *buf)
c906108c 1094{
c89dc5d4 1095 /* Some day, we should define the meanings of the error codes... */
c906108c 1096 buf[0] = 'E';
c89dc5d4
DJ
1097 buf[1] = '0';
1098 buf[2] = '1';
c906108c
SS
1099 buf[3] = '\0';
1100}
1101
0fb4aa4b
PA
1102#endif
1103
0fb4aa4b 1104#ifndef IN_PROCESS_AGENT
c906108c 1105
c906108c 1106static char *
442ea881 1107outreg (struct regcache *regcache, int regno, char *buf)
c906108c 1108{
5c44784c
JM
1109 if ((regno >> 12) != 0)
1110 *buf++ = tohex ((regno >> 12) & 0xf);
1111 if ((regno >> 8) != 0)
1112 *buf++ = tohex ((regno >> 8) & 0xf);
1113 *buf++ = tohex ((regno >> 4) & 0xf);
c906108c
SS
1114 *buf++ = tohex (regno & 0xf);
1115 *buf++ = ':';
442ea881 1116 collect_register_as_string (regcache, regno, buf);
3aee8918 1117 buf += 2 * register_size (regcache->tdesc, regno);
c906108c
SS
1118 *buf++ = ';';
1119
1120 return buf;
1121}
1122
1123void
95954743 1124prepare_resume_reply (char *buf, ptid_t ptid,
5b1c542e 1125 struct target_waitstatus *status)
c906108c 1126{
c12a5089 1127 client_state &cs = get_client_state ();
5b1c542e 1128 if (debug_threads)
87ce2a04
DE
1129 debug_printf ("Writing resume reply for %s:%d\n",
1130 target_pid_to_str (ptid), status->kind);
c906108c 1131
5b1c542e 1132 switch (status->kind)
c906108c 1133 {
5b1c542e 1134 case TARGET_WAITKIND_STOPPED:
de0d863e 1135 case TARGET_WAITKIND_FORKED:
c269dbdb 1136 case TARGET_WAITKIND_VFORKED:
8228463c 1137 case TARGET_WAITKIND_VFORK_DONE:
94585166 1138 case TARGET_WAITKIND_EXECD:
65706a29 1139 case TARGET_WAITKIND_THREAD_CREATED:
82075af2
JS
1140 case TARGET_WAITKIND_SYSCALL_ENTRY:
1141 case TARGET_WAITKIND_SYSCALL_RETURN:
5b1c542e 1142 {
0bfdf32f 1143 struct thread_info *saved_thread;
5b1c542e 1144 const char **regp;
442ea881 1145 struct regcache *regcache;
e013ee27 1146
c12a5089 1147 if ((status->kind == TARGET_WAITKIND_FORKED && cs.report_fork_events)
80e24d09 1148 || (status->kind == TARGET_WAITKIND_VFORKED
c12a5089 1149 && cs.report_vfork_events))
de0d863e
DB
1150 {
1151 enum gdb_signal signal = GDB_SIGNAL_TRAP;
c269dbdb
DB
1152 const char *event = (status->kind == TARGET_WAITKIND_FORKED
1153 ? "fork" : "vfork");
de0d863e 1154
c269dbdb 1155 sprintf (buf, "T%02x%s:", signal, event);
de0d863e
DB
1156 buf += strlen (buf);
1157 buf = write_ptid (buf, status->value.related_pid);
1158 strcat (buf, ";");
1159 }
80e24d09 1160 else if (status->kind == TARGET_WAITKIND_VFORK_DONE
c12a5089 1161 && cs.report_vfork_events)
8228463c
PA
1162 {
1163 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1164
1165 sprintf (buf, "T%02xvforkdone:;", signal);
1166 }
c12a5089 1167 else if (status->kind == TARGET_WAITKIND_EXECD && cs.report_exec_events)
94585166
DB
1168 {
1169 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1170 const char *event = "exec";
1171 char hexified_pathname[PATH_MAX * 2];
1172
1173 sprintf (buf, "T%02x%s:", signal, event);
1174 buf += strlen (buf);
1175
1176 /* Encode pathname to hexified format. */
1177 bin2hex ((const gdb_byte *) status->value.execd_pathname,
1178 hexified_pathname,
1179 strlen (status->value.execd_pathname));
1180
1181 sprintf (buf, "%s;", hexified_pathname);
1182 xfree (status->value.execd_pathname);
1183 status->value.execd_pathname = NULL;
1184 buf += strlen (buf);
1185 }
65706a29 1186 else if (status->kind == TARGET_WAITKIND_THREAD_CREATED
c12a5089 1187 && cs.report_thread_events)
65706a29
PA
1188 {
1189 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1190
1191 sprintf (buf, "T%02xcreate:;", signal);
1192 }
82075af2
JS
1193 else if (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY
1194 || status->kind == TARGET_WAITKIND_SYSCALL_RETURN)
1195 {
1196 enum gdb_signal signal = GDB_SIGNAL_TRAP;
1197 const char *event = (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY
1198 ? "syscall_entry" : "syscall_return");
1199
1200 sprintf (buf, "T%02x%s:%x;", signal, event,
1201 status->value.syscall_number);
1202 }
de0d863e
DB
1203 else
1204 sprintf (buf, "T%02x", status->value.sig);
1205
5b1c542e 1206 buf += strlen (buf);
e013ee27 1207
0bfdf32f 1208 saved_thread = current_thread;
e013ee27 1209
75352e28 1210 switch_to_thread (ptid);
e013ee27 1211
3aee8918
PA
1212 regp = current_target_desc ()->expedite_regs;
1213
0bfdf32f 1214 regcache = get_thread_regcache (current_thread, 1);
442ea881 1215
5b1c542e
PA
1216 if (the_target->stopped_by_watchpoint != NULL
1217 && (*the_target->stopped_by_watchpoint) ())
1218 {
1219 CORE_ADDR addr;
1220 int i;
c906108c 1221
29f9a567 1222 memcpy (buf, "watch:", 6);
5b1c542e 1223 buf += 6;
0d62e5e8 1224
5b1c542e 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 2.110046 seconds and 4 git commands to generate.