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