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