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