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