gdb/
[deliverable/binutils-gdb.git] / gdb / gdbserver / server.c
CommitLineData
c906108c 1/* Main code for remote server for GDB.
0b302171
JB
2 Copyright (C) 1989, 1993-1995, 1997-2000, 2002-2012 Free Software
3 Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
19
20#include "server.h"
d1feda86 21#include "agent.h"
c906108c 22
68070c10 23#if HAVE_UNISTD_H
a9fa9f7d 24#include <unistd.h>
68070c10
PA
25#endif
26#if HAVE_SIGNAL_H
a9fa9f7d 27#include <signal.h>
68070c10 28#endif
b80864fb 29#if HAVE_SYS_WAIT_H
a9fa9f7d 30#include <sys/wait.h>
b80864fb 31#endif
a9fa9f7d 32
122f36ef
PA
33/* The thread set with an `Hc' packet. `Hc' is deprecated in favor of
34 `vCont'. Note the multi-process extensions made `vCont' a
35 requirement, so `Hc pPID.TID' is pretty much undefined. So
36 CONT_THREAD can be null_ptid for no `Hc' thread, minus_one_ptid for
37 resuming all threads of the process (again, `Hc' isn't used for
38 multi-process), or a specific thread ptid_t.
39
40 We also set this when handling a single-thread `vCont' resume, as
41 some places in the backends check it to know when (and for which
42 thread) single-thread scheduler-locking is in effect. */
95954743 43ptid_t cont_thread;
122f36ef
PA
44
45/* The thread set with an `Hg' packet. */
95954743 46ptid_t general_thread;
5b1c542e 47
0d62e5e8
DJ
48int server_waiting;
49
2d717e4f 50static int extended_protocol;
2d717e4f
DJ
51static int response_needed;
52static int exit_requested;
53
03f2bd59
JK
54/* --once: Exit after the first connection has closed. */
55int run_once;
56
95954743 57int multi_process;
bd99dc85
PA
58int non_stop;
59
03583c20
UW
60/* Whether we should attempt to disable the operating system's address
61 space randomization feature before starting an inferior. */
62int disable_randomization = 1;
63
ccd213ac 64static char **program_argv, **wrapper_argv;
2d717e4f 65
c74d0ad8
DJ
66/* Enable miscellaneous debugging output. The name is historical - it
67 was originally used to debug LinuxThreads support. */
68int debug_threads;
69
aa5ca48f
DE
70/* Enable debugging of h/w breakpoint/watchpoint support. */
71int debug_hw_points;
72
89be2091 73int pass_signals[TARGET_SIGNAL_LAST];
9b224c5e
PA
74int program_signals[TARGET_SIGNAL_LAST];
75int program_signals_p;
89be2091 76
c906108c 77jmp_buf toplevel;
c906108c 78
9b4b61c8
UW
79const char *gdbserver_xmltarget;
80
a9fa9f7d
DJ
81/* The PID of the originally created or attached inferior. Used to
82 send signals to the process when GDB sends us an asynchronous interrupt
83 (user hitting Control-C in the client), and to wait for the child to exit
84 when no longer debugging it. */
85
a1928bad 86unsigned long signal_pid;
a9fa9f7d 87
290fadea
RS
88#ifdef SIGTTOU
89/* A file descriptor for the controlling terminal. */
90int terminal_fd;
91
92/* TERMINAL_FD's original foreground group. */
93pid_t old_foreground_pgrp;
94
95/* Hand back terminal ownership to the original foreground group. */
96
97static void
98restore_old_foreground_pgrp (void)
99{
100 tcsetpgrp (terminal_fd, old_foreground_pgrp);
101}
102#endif
103
ec56be1b
PA
104/* Set if you want to disable optional thread related packets support
105 in gdbserver, for the sake of testing GDB against stubs that don't
106 support them. */
107int disable_packet_vCont;
108int disable_packet_Tthread;
109int disable_packet_qC;
110int disable_packet_qfThreadInfo;
111
5b1c542e
PA
112/* Last status reported to GDB. */
113static struct target_waitstatus last_status;
95954743 114static ptid_t last_ptid;
5b1c542e 115
bd99dc85
PA
116static char *own_buf;
117static unsigned char *mem_buf;
118
119/* Structure holding information relative to a single stop reply. We
120 keep a queue of these (really a singly-linked list) to push to GDB
121 in non-stop mode. */
122struct vstop_notif
123{
124 /* Pointer to next in list. */
125 struct vstop_notif *next;
126
127 /* Thread or process that got the event. */
95954743 128 ptid_t ptid;
bd99dc85
PA
129
130 /* Event info. */
131 struct target_waitstatus status;
132};
133
134/* The pending stop replies list head. */
135static struct vstop_notif *notif_queue = NULL;
136
137/* Put a stop reply to the stop reply queue. */
138
139static void
95954743 140queue_stop_reply (ptid_t ptid, struct target_waitstatus *status)
bd99dc85
PA
141{
142 struct vstop_notif *new_notif;
143
cfdee94a 144 new_notif = xmalloc (sizeof (*new_notif));
bd99dc85
PA
145 new_notif->next = NULL;
146 new_notif->ptid = ptid;
147 new_notif->status = *status;
148
149 if (notif_queue)
150 {
151 struct vstop_notif *tail;
152 for (tail = notif_queue;
153 tail && tail->next;
154 tail = tail->next)
155 ;
156 tail->next = new_notif;
157 }
158 else
159 notif_queue = new_notif;
160
161 if (remote_debug)
162 {
163 int i = 0;
164 struct vstop_notif *n;
165
166 for (n = notif_queue; n; n = n->next)
167 i++;
168
169 fprintf (stderr, "pending stop replies: %d\n", i);
170 }
171}
172
173/* Place an event in the stop reply queue, and push a notification if
174 we aren't sending one yet. */
175
176void
95954743 177push_event (ptid_t ptid, struct target_waitstatus *status)
bd99dc85 178{
d20a8ad9
PA
179 gdb_assert (status->kind != TARGET_WAITKIND_IGNORE);
180
bd99dc85
PA
181 queue_stop_reply (ptid, status);
182
183 /* If this is the first stop reply in the queue, then inform GDB
184 about it, by sending a Stop notification. */
185 if (notif_queue->next == NULL)
186 {
187 char *p = own_buf;
188 strcpy (p, "Stop:");
189 p += strlen (p);
190 prepare_resume_reply (p,
191 notif_queue->ptid, &notif_queue->status);
192 putpkt_notif (own_buf);
193 }
194}
195
95954743
PA
196/* Get rid of the currently pending stop replies for PID. If PID is
197 -1, then apply to all processes. */
bd99dc85
PA
198
199static void
95954743 200discard_queued_stop_replies (int pid)
bd99dc85 201{
95954743 202 struct vstop_notif *prev = NULL, *reply, *next;
bd99dc85 203
95954743 204 for (reply = notif_queue; reply; reply = next)
bd99dc85 205 {
95954743
PA
206 next = reply->next;
207
208 if (pid == -1
209 || ptid_get_pid (reply->ptid) == pid)
210 {
211 if (reply == notif_queue)
212 notif_queue = next;
213 else
214 prev->next = reply->next;
bd99dc85 215
95954743
PA
216 free (reply);
217 }
218 else
219 prev = reply;
bd99dc85
PA
220 }
221}
222
223/* If there are more stop replies to push, push one now. */
224
225static void
226send_next_stop_reply (char *own_buf)
227{
228 if (notif_queue)
229 prepare_resume_reply (own_buf,
230 notif_queue->ptid,
231 &notif_queue->status);
232 else
233 write_ok (own_buf);
234}
235
2d717e4f
DJ
236static int
237target_running (void)
238{
239 return all_threads.head != NULL;
240}
241
fc620387 242static int
5b1c542e 243start_inferior (char **argv)
c906108c 244{
ccd213ac 245 char **new_argv = argv;
2d717e4f 246
ccd213ac
DJ
247 if (wrapper_argv != NULL)
248 {
249 int i, count = 1;
250
251 for (i = 0; wrapper_argv[i] != NULL; i++)
252 count++;
253 for (i = 0; argv[i] != NULL; i++)
254 count++;
255 new_argv = alloca (sizeof (char *) * count);
256 count = 0;
257 for (i = 0; wrapper_argv[i] != NULL; i++)
258 new_argv[count++] = wrapper_argv[i];
259 for (i = 0; argv[i] != NULL; i++)
260 new_argv[count++] = argv[i];
261 new_argv[count] = NULL;
262 }
263
65730243
DE
264 if (debug_threads)
265 {
266 int i;
267 for (i = 0; new_argv[i]; ++i)
268 fprintf (stderr, "new_argv[%d] = \"%s\"\n", i, new_argv[i]);
269 fflush (stderr);
270 }
271
b80864fb 272#ifdef SIGTTOU
a9fa9f7d
DJ
273 signal (SIGTTOU, SIG_DFL);
274 signal (SIGTTIN, SIG_DFL);
b80864fb 275#endif
a9fa9f7d 276
122f36ef
PA
277 /* Clear this so the backend doesn't get confused, thinking
278 CONT_THREAD died, and it needs to resume all threads. */
279 cont_thread = null_ptid;
280
ccd213ac 281 signal_pid = create_inferior (new_argv[0], new_argv);
0d62e5e8 282
c588c53c
MS
283 /* FIXME: we don't actually know at this point that the create
284 actually succeeded. We won't know that until we wait. */
a1928bad 285 fprintf (stderr, "Process %s created; pid = %ld\n", argv[0],
a9fa9f7d 286 signal_pid);
b80864fb 287 fflush (stderr);
a9fa9f7d 288
b80864fb 289#ifdef SIGTTOU
a9fa9f7d
DJ
290 signal (SIGTTOU, SIG_IGN);
291 signal (SIGTTIN, SIG_IGN);
290fadea
RS
292 terminal_fd = fileno (stderr);
293 old_foreground_pgrp = tcgetpgrp (terminal_fd);
294 tcsetpgrp (terminal_fd, signal_pid);
295 atexit (restore_old_foreground_pgrp);
b80864fb 296#endif
c906108c 297
ccd213ac
DJ
298 if (wrapper_argv != NULL)
299 {
300 struct thread_resume resume_info;
ccd213ac 301
95954743 302 resume_info.thread = pid_to_ptid (signal_pid);
bd99dc85 303 resume_info.kind = resume_continue;
ccd213ac 304 resume_info.sig = 0;
ccd213ac 305
06db92f0 306 last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
bd99dc85 307
5b1c542e
PA
308 if (last_status.kind != TARGET_WAITKIND_STOPPED)
309 return signal_pid;
ccd213ac
DJ
310
311 do
312 {
2bd7c093 313 (*the_target->resume) (&resume_info, 1);
ccd213ac 314
06db92f0 315 last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
5b1c542e
PA
316 if (last_status.kind != TARGET_WAITKIND_STOPPED)
317 return signal_pid;
d20a8ad9
PA
318
319 current_inferior->last_resume_kind = resume_stop;
320 current_inferior->last_status = last_status;
ccd213ac 321 }
5b1c542e 322 while (last_status.value.sig != TARGET_SIGNAL_TRAP);
ccd213ac 323
d20a8ad9
PA
324 current_inferior->last_resume_kind = resume_stop;
325 current_inferior->last_status = last_status;
5b1c542e 326 return signal_pid;
ccd213ac
DJ
327 }
328
5b1c542e
PA
329 /* Wait till we are at 1st instruction in program, return new pid
330 (assuming success). */
95954743 331 last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
5b1c542e 332
d20a8ad9
PA
333 if (last_status.kind != TARGET_WAITKIND_EXITED
334 && last_status.kind != TARGET_WAITKIND_SIGNALLED)
335 {
336 current_inferior->last_resume_kind = resume_stop;
337 current_inferior->last_status = last_status;
338 }
339
5b1c542e 340 return signal_pid;
c906108c
SS
341}
342
45b7b345 343static int
5b1c542e 344attach_inferior (int pid)
45b7b345
DJ
345{
346 /* myattach should return -1 if attaching is unsupported,
347 0 if it succeeded, and call error() otherwise. */
a9fa9f7d 348
45b7b345
DJ
349 if (myattach (pid) != 0)
350 return -1;
351
6910d122 352 fprintf (stderr, "Attached; pid = %d\n", pid);
b80864fb 353 fflush (stderr);
6910d122 354
a9fa9f7d
DJ
355 /* FIXME - It may be that we should get the SIGNAL_PID from the
356 attach function, so that it can be the main thread instead of
357 whichever we were told to attach to. */
358 signal_pid = pid;
359
7d5d4e98
PA
360 /* Clear this so the backend doesn't get confused, thinking
361 CONT_THREAD died, and it needs to resume all threads. */
362 cont_thread = null_ptid;
363
bd99dc85
PA
364 if (!non_stop)
365 {
95954743 366 last_ptid = mywait (pid_to_ptid (pid), &last_status, 0, 0);
bd99dc85
PA
367
368 /* GDB knows to ignore the first SIGSTOP after attaching to a running
369 process using the "attach" command, but this is different; it's
370 just using "target remote". Pretend it's just starting up. */
371 if (last_status.kind == TARGET_WAITKIND_STOPPED
372 && last_status.value.sig == TARGET_SIGNAL_STOP)
373 last_status.value.sig = TARGET_SIGNAL_TRAP;
d20a8ad9
PA
374
375 current_inferior->last_resume_kind = resume_stop;
376 current_inferior->last_status = last_status;
bd99dc85 377 }
9db87ebd 378
45b7b345
DJ
379 return 0;
380}
381
c906108c 382extern int remote_debug;
ce3a066d 383
0876f84a
DJ
384/* Decode a qXfer read request. Return 0 if everything looks OK,
385 or -1 otherwise. */
386
387static int
d08aafef 388decode_xfer_read (char *buf, CORE_ADDR *ofs, unsigned int *len)
0876f84a 389{
d08aafef
PA
390 /* After the read marker and annex, qXfer looks like a
391 traditional 'm' packet. */
392 decode_m_packet (buf, ofs, len);
393
394 return 0;
395}
396
397static int
398decode_xfer (char *buf, char **object, char **rw, char **annex, char **offset)
399{
400 /* Extract and NUL-terminate the object. */
401 *object = buf;
402 while (*buf && *buf != ':')
403 buf++;
404 if (*buf == '\0')
405 return -1;
406 *buf++ = 0;
407
408 /* Extract and NUL-terminate the read/write action. */
409 *rw = buf;
410 while (*buf && *buf != ':')
411 buf++;
412 if (*buf == '\0')
413 return -1;
414 *buf++ = 0;
415
0876f84a
DJ
416 /* Extract and NUL-terminate the annex. */
417 *annex = buf;
418 while (*buf && *buf != ':')
419 buf++;
420 if (*buf == '\0')
421 return -1;
422 *buf++ = 0;
423
d08aafef 424 *offset = buf;
0876f84a
DJ
425 return 0;
426}
427
428/* Write the response to a successful qXfer read. Returns the
429 length of the (binary) data stored in BUF, corresponding
430 to as much of DATA/LEN as we could fit. IS_MORE controls
431 the first character of the response. */
432static int
23181151 433write_qxfer_response (char *buf, const void *data, int len, int is_more)
0876f84a
DJ
434{
435 int out_len;
436
437 if (is_more)
438 buf[0] = 'm';
439 else
440 buf[0] = 'l';
441
442 return remote_escape_output (data, len, (unsigned char *) buf + 1, &out_len,
443 PBUFSIZ - 2) + 1;
444}
445
89be2091 446/* Handle all of the extended 'Q' packets. */
ae1ada35
DE
447
448static void
89be2091
DJ
449handle_general_set (char *own_buf)
450{
451 if (strncmp ("QPassSignals:", own_buf, strlen ("QPassSignals:")) == 0)
452 {
453 int numsigs = (int) TARGET_SIGNAL_LAST, i;
454 const char *p = own_buf + strlen ("QPassSignals:");
455 CORE_ADDR cursig;
456
457 p = decode_address_to_semicolon (&cursig, p);
458 for (i = 0; i < numsigs; i++)
459 {
460 if (i == cursig)
461 {
462 pass_signals[i] = 1;
463 if (*p == '\0')
464 /* Keep looping, to clear the remaining signals. */
465 cursig = -1;
466 else
467 p = decode_address_to_semicolon (&cursig, p);
468 }
469 else
470 pass_signals[i] = 0;
471 }
472 strcpy (own_buf, "OK");
473 return;
474 }
475
9b224c5e
PA
476 if (strncmp ("QProgramSignals:", own_buf, strlen ("QProgramSignals:")) == 0)
477 {
478 int numsigs = (int) TARGET_SIGNAL_LAST, i;
479 const char *p = own_buf + strlen ("QProgramSignals:");
480 CORE_ADDR cursig;
481
482 program_signals_p = 1;
483
484 p = decode_address_to_semicolon (&cursig, p);
485 for (i = 0; i < numsigs; i++)
486 {
487 if (i == cursig)
488 {
489 program_signals[i] = 1;
490 if (*p == '\0')
491 /* Keep looping, to clear the remaining signals. */
492 cursig = -1;
493 else
494 p = decode_address_to_semicolon (&cursig, p);
495 }
496 else
497 program_signals[i] = 0;
498 }
499 strcpy (own_buf, "OK");
500 return;
501 }
502
a6f3e723
SL
503 if (strcmp (own_buf, "QStartNoAckMode") == 0)
504 {
505 if (remote_debug)
506 {
507 fprintf (stderr, "[noack mode enabled]\n");
508 fflush (stderr);
509 }
510
511 noack_mode = 1;
512 write_ok (own_buf);
513 return;
514 }
515
bd99dc85
PA
516 if (strncmp (own_buf, "QNonStop:", 9) == 0)
517 {
518 char *mode = own_buf + 9;
519 int req = -1;
520 char *req_str;
521
522 if (strcmp (mode, "0") == 0)
523 req = 0;
524 else if (strcmp (mode, "1") == 0)
525 req = 1;
526 else
527 {
528 /* We don't know what this mode is, so complain to
529 GDB. */
530 fprintf (stderr, "Unknown non-stop mode requested: %s\n",
531 own_buf);
532 write_enn (own_buf);
533 return;
534 }
535
536 req_str = req ? "non-stop" : "all-stop";
537 if (start_non_stop (req) != 0)
538 {
539 fprintf (stderr, "Setting %s mode failed\n", req_str);
540 write_enn (own_buf);
541 return;
542 }
543
544 non_stop = req;
545
546 if (remote_debug)
547 fprintf (stderr, "[%s mode enabled]\n", req_str);
548
549 write_ok (own_buf);
550 return;
551 }
552
03583c20
UW
553 if (strncmp ("QDisableRandomization:", own_buf,
554 strlen ("QDisableRandomization:")) == 0)
555 {
556 char *packet = own_buf + strlen ("QDisableRandomization:");
557 ULONGEST setting;
558
559 unpack_varlen_hex (packet, &setting);
560 disable_randomization = setting;
561
562 if (remote_debug)
563 {
564 if (disable_randomization)
565 fprintf (stderr, "[address space randomization disabled]\n");
566 else
567 fprintf (stderr, "[address space randomization enabled]\n");
568 }
569
570 write_ok (own_buf);
571 return;
572 }
573
219f2f23
PA
574 if (target_supports_tracepoints ()
575 && handle_tracepoint_general_set (own_buf))
576 return;
577
d1feda86
YQ
578 if (strncmp ("QAgent:", own_buf, strlen ("QAgent:")) == 0)
579 {
580 char *mode = own_buf + strlen ("QAgent:");
581 int req = 0;
582
583 if (strcmp (mode, "0") == 0)
584 req = 0;
585 else if (strcmp (mode, "1") == 0)
586 req = 1;
587 else
588 {
589 /* We don't know what this value is, so complain to GDB. */
590 sprintf (own_buf, "E.Unknown QAgent value");
591 return;
592 }
593
594 /* Update the flag. */
595 use_agent = req;
596 if (remote_debug)
597 fprintf (stderr, "[%s agent]\n", req ? "Enable" : "Disable");
598 write_ok (own_buf);
599 return;
600 }
601
89be2091
DJ
602 /* Otherwise we didn't know what packet it was. Say we didn't
603 understand it. */
604 own_buf[0] = 0;
605}
606
23181151 607static const char *
fb1e4ffc 608get_features_xml (const char *annex)
23181151 609{
9b4b61c8
UW
610 /* gdbserver_xmltarget defines what to return when looking
611 for the "target.xml" file. Its contents can either be
612 verbatim XML code (prefixed with a '@') or else the name
613 of the actual XML file to be used in place of "target.xml".
fb1e4ffc 614
9b4b61c8
UW
615 This variable is set up from the auto-generated
616 init_registers_... routine for the current target. */
fb1e4ffc 617
9b4b61c8 618 if (gdbserver_xmltarget
221c031f 619 && strcmp (annex, "target.xml") == 0)
23181151 620 {
9b4b61c8
UW
621 if (*gdbserver_xmltarget == '@')
622 return gdbserver_xmltarget + 1;
23181151 623 else
9b4b61c8 624 annex = gdbserver_xmltarget;
23181151
DJ
625 }
626
9b4b61c8
UW
627#ifdef USE_XML
628 {
629 extern const char *const xml_builtin[][2];
630 int i;
631
632 /* Look for the annex. */
633 for (i = 0; xml_builtin[i][0] != NULL; i++)
634 if (strcmp (annex, xml_builtin[i][0]) == 0)
635 break;
636
637 if (xml_builtin[i][0] != NULL)
638 return xml_builtin[i][1];
639 }
640#endif
641
642 return NULL;
23181151
DJ
643}
644
c74d0ad8
DJ
645void
646monitor_show_help (void)
647{
648 monitor_output ("The following monitor commands are supported:\n");
649 monitor_output (" set debug <0|1>\n");
1b3f6016 650 monitor_output (" Enable general debugging messages\n");
aa5ca48f
DE
651 monitor_output (" set debug-hw-points <0|1>\n");
652 monitor_output (" Enable h/w breakpoint/watchpoint debugging messages\n");
c74d0ad8
DJ
653 monitor_output (" set remote-debug <0|1>\n");
654 monitor_output (" Enable remote protocol debugging messages\n");
ecd7ecbc
DJ
655 monitor_output (" exit\n");
656 monitor_output (" Quit GDBserver\n");
c74d0ad8
DJ
657}
658
764880b7
PA
659/* Read trace frame or inferior memory. Returns the number of bytes
660 actually read, zero when no further transfer is possible, and -1 on
661 error. Return of a positive value smaller than LEN does not
662 indicate there's no more to be read, only the end of the transfer.
663 E.g., when GDB reads memory from a traceframe, a first request may
664 be served from a memory block that does not cover the whole request
665 length. A following request gets the rest served from either
666 another block (of the same traceframe) or from the read-only
667 regions. */
219f2f23
PA
668
669static int
90d74c30 670gdb_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
219f2f23 671{
764880b7 672 int res;
90d74c30 673
219f2f23
PA
674 if (current_traceframe >= 0)
675 {
676 ULONGEST nbytes;
677 ULONGEST length = len;
678
679 if (traceframe_read_mem (current_traceframe,
680 memaddr, myaddr, len, &nbytes))
681 return EIO;
682 /* Data read from trace buffer, we're done. */
764880b7
PA
683 if (nbytes > 0)
684 return nbytes;
219f2f23 685 if (!in_readonly_region (memaddr, length))
764880b7 686 return -1;
219f2f23
PA
687 /* Otherwise we have a valid readonly case, fall through. */
688 /* (assume no half-trace half-real blocks for now) */
689 }
690
764880b7
PA
691 res = prepare_to_access_memory ();
692 if (res == 0)
90d74c30 693 {
764880b7 694 res = read_inferior_memory (memaddr, myaddr, len);
0146f85b 695 done_accessing_memory ();
90d74c30 696
764880b7
PA
697 return res == 0 ? len : -1;
698 }
699 else
700 return -1;
219f2f23
PA
701}
702
703/* Write trace frame or inferior memory. Actually, writing to trace
704 frames is forbidden. */
705
706static int
90d74c30 707gdb_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
219f2f23
PA
708{
709 if (current_traceframe >= 0)
710 return EIO;
711 else
90d74c30
PA
712 {
713 int ret;
714
715 ret = prepare_to_access_memory ();
716 if (ret == 0)
717 {
718 ret = write_inferior_memory (memaddr, myaddr, len);
0146f85b 719 done_accessing_memory ();
90d74c30
PA
720 }
721 return ret;
722 }
219f2f23
PA
723}
724
08388c79
DE
725/* Subroutine of handle_search_memory to simplify it. */
726
727static int
728handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len,
729 gdb_byte *pattern, unsigned pattern_len,
730 gdb_byte *search_buf,
731 unsigned chunk_size, unsigned search_buf_size,
732 CORE_ADDR *found_addrp)
733{
734 /* Prime the search buffer. */
735
764880b7
PA
736 if (gdb_read_memory (start_addr, search_buf, search_buf_size)
737 != search_buf_size)
08388c79 738 {
5e1471f5 739 warning ("Unable to access target memory at 0x%lx, halting search.",
08388c79
DE
740 (long) start_addr);
741 return -1;
742 }
743
744 /* Perform the search.
745
746 The loop is kept simple by allocating [N + pattern-length - 1] bytes.
747 When we've scanned N bytes we copy the trailing bytes to the start and
748 read in another N bytes. */
749
750 while (search_space_len >= pattern_len)
751 {
752 gdb_byte *found_ptr;
753 unsigned nr_search_bytes = (search_space_len < search_buf_size
754 ? search_space_len
755 : search_buf_size);
756
757 found_ptr = memmem (search_buf, nr_search_bytes, pattern, pattern_len);
758
759 if (found_ptr != NULL)
760 {
761 CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
762 *found_addrp = found_addr;
763 return 1;
764 }
765
766 /* Not found in this chunk, skip to next chunk. */
767
768 /* Don't let search_space_len wrap here, it's unsigned. */
769 if (search_space_len >= chunk_size)
770 search_space_len -= chunk_size;
771 else
772 search_space_len = 0;
773
774 if (search_space_len >= pattern_len)
775 {
776 unsigned keep_len = search_buf_size - chunk_size;
8a35fb51 777 CORE_ADDR read_addr = start_addr + chunk_size + keep_len;
08388c79
DE
778 int nr_to_read;
779
780 /* Copy the trailing part of the previous iteration to the front
781 of the buffer for the next iteration. */
782 memcpy (search_buf, search_buf + chunk_size, keep_len);
783
784 nr_to_read = (search_space_len - keep_len < chunk_size
785 ? search_space_len - keep_len
786 : chunk_size);
787
90d74c30 788 if (gdb_read_memory (read_addr, search_buf + keep_len,
764880b7 789 nr_to_read) != search_buf_size)
08388c79 790 {
493e2a69
MS
791 warning ("Unable to access target memory "
792 "at 0x%lx, halting search.",
08388c79
DE
793 (long) read_addr);
794 return -1;
795 }
796
797 start_addr += chunk_size;
798 }
799 }
800
801 /* Not found. */
802
803 return 0;
804}
805
806/* Handle qSearch:memory packets. */
807
808static void
809handle_search_memory (char *own_buf, int packet_len)
810{
811 CORE_ADDR start_addr;
812 CORE_ADDR search_space_len;
813 gdb_byte *pattern;
814 unsigned int pattern_len;
815 /* NOTE: also defined in find.c testcase. */
816#define SEARCH_CHUNK_SIZE 16000
817 const unsigned chunk_size = SEARCH_CHUNK_SIZE;
818 /* Buffer to hold memory contents for searching. */
819 gdb_byte *search_buf;
820 unsigned search_buf_size;
821 int found;
822 CORE_ADDR found_addr;
823 int cmd_name_len = sizeof ("qSearch:memory:") - 1;
824
aef93bd7 825 pattern = malloc (packet_len);
08388c79
DE
826 if (pattern == NULL)
827 {
5e1471f5 828 error ("Unable to allocate memory to perform the search");
08388c79
DE
829 strcpy (own_buf, "E00");
830 return;
831 }
832 if (decode_search_memory_packet (own_buf + cmd_name_len,
833 packet_len - cmd_name_len,
834 &start_addr, &search_space_len,
835 pattern, &pattern_len) < 0)
836 {
837 free (pattern);
5e1471f5 838 error ("Error in parsing qSearch:memory packet");
08388c79
DE
839 strcpy (own_buf, "E00");
840 return;
841 }
842
843 search_buf_size = chunk_size + pattern_len - 1;
844
845 /* No point in trying to allocate a buffer larger than the search space. */
846 if (search_space_len < search_buf_size)
847 search_buf_size = search_space_len;
848
aef93bd7 849 search_buf = malloc (search_buf_size);
08388c79
DE
850 if (search_buf == NULL)
851 {
852 free (pattern);
5e1471f5 853 error ("Unable to allocate memory to perform the search");
08388c79
DE
854 strcpy (own_buf, "E00");
855 return;
856 }
857
858 found = handle_search_memory_1 (start_addr, search_space_len,
859 pattern, pattern_len,
860 search_buf, chunk_size, search_buf_size,
861 &found_addr);
862
863 if (found > 0)
864 sprintf (own_buf, "1,%lx", (long) found_addr);
865 else if (found == 0)
866 strcpy (own_buf, "0");
867 else
868 strcpy (own_buf, "E00");
869
870 free (search_buf);
871 free (pattern);
872}
873
2d717e4f
DJ
874#define require_running(BUF) \
875 if (!target_running ()) \
876 { \
877 write_enn (BUF); \
878 return; \
879 }
880
cdbfd419
PP
881/* Handle monitor commands not handled by target-specific handlers. */
882
883static void
d73f2619 884handle_monitor_command (char *mon, char *own_buf)
cdbfd419
PP
885{
886 if (strcmp (mon, "set debug 1") == 0)
887 {
888 debug_threads = 1;
889 monitor_output ("Debug output enabled.\n");
890 }
891 else if (strcmp (mon, "set debug 0") == 0)
892 {
893 debug_threads = 0;
894 monitor_output ("Debug output disabled.\n");
895 }
896 else if (strcmp (mon, "set debug-hw-points 1") == 0)
897 {
898 debug_hw_points = 1;
899 monitor_output ("H/W point debugging output enabled.\n");
900 }
901 else if (strcmp (mon, "set debug-hw-points 0") == 0)
902 {
903 debug_hw_points = 0;
904 monitor_output ("H/W point debugging output disabled.\n");
905 }
906 else if (strcmp (mon, "set remote-debug 1") == 0)
907 {
908 remote_debug = 1;
909 monitor_output ("Protocol debug output enabled.\n");
910 }
911 else if (strcmp (mon, "set remote-debug 0") == 0)
912 {
913 remote_debug = 0;
914 monitor_output ("Protocol debug output disabled.\n");
915 }
916 else if (strcmp (mon, "help") == 0)
917 monitor_show_help ();
918 else if (strcmp (mon, "exit") == 0)
919 exit_requested = 1;
920 else
921 {
922 monitor_output ("Unknown monitor command.\n\n");
923 monitor_show_help ();
924 write_enn (own_buf);
925 }
926}
927
d08aafef
PA
928/* Associates a callback with each supported qXfer'able object. */
929
930struct qxfer
931{
932 /* The object this handler handles. */
933 const char *object;
934
935 /* Request that the target transfer up to LEN 8-bit bytes of the
936 target's OBJECT. The OFFSET, for a seekable object, specifies
937 the starting point. The ANNEX can be used to provide additional
938 data-specific information to the target.
939
940 Return the number of bytes actually transfered, zero when no
941 further transfer is possible, -1 on error, and -2 when the
942 transfer is not supported. Return of a positive value smaller
943 than LEN does not indicate the end of the object, only the end of
944 the transfer.
945
946 One, and only one, of readbuf or writebuf must be non-NULL. */
947 int (*xfer) (const char *annex,
948 gdb_byte *readbuf, const gdb_byte *writebuf,
949 ULONGEST offset, LONGEST len);
950};
951
952/* Handle qXfer:auxv:read. */
953
954static int
955handle_qxfer_auxv (const char *annex,
956 gdb_byte *readbuf, const gdb_byte *writebuf,
957 ULONGEST offset, LONGEST len)
958{
959 if (the_target->read_auxv == NULL || writebuf != NULL)
960 return -2;
961
962 if (annex[0] != '\0' || !target_running ())
963 return -1;
964
965 return (*the_target->read_auxv) (offset, readbuf, len);
966}
967
968/* Handle qXfer:features:read. */
969
970static int
971handle_qxfer_features (const char *annex,
972 gdb_byte *readbuf, const gdb_byte *writebuf,
973 ULONGEST offset, LONGEST len)
974{
975 const char *document;
976 size_t total_len;
977
978 if (writebuf != NULL)
979 return -2;
980
981 if (!target_running ())
982 return -1;
983
984 /* Grab the correct annex. */
985 document = get_features_xml (annex);
986 if (document == NULL)
987 return -1;
988
989 total_len = strlen (document);
990
991 if (offset > total_len)
992 return -1;
993
994 if (offset + len > total_len)
995 len = total_len - offset;
996
997 memcpy (readbuf, document + offset, len);
998 return len;
999}
1000
1001/* Handle qXfer:libraries:read. */
1002
1003static int
1004handle_qxfer_libraries (const char *annex,
1005 gdb_byte *readbuf, const gdb_byte *writebuf,
1006 ULONGEST offset, LONGEST len)
1007{
1008 unsigned int total_len;
1009 char *document, *p;
1010 struct inferior_list_entry *dll_ptr;
1011
1012 if (writebuf != NULL)
1013 return -2;
1014
1015 if (annex[0] != '\0' || !target_running ())
1016 return -1;
1017
1018 /* Over-estimate the necessary memory. Assume that every character
1019 in the library name must be escaped. */
1020 total_len = 64;
1021 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
1022 total_len += 128 + 6 * strlen (((struct dll_info *) dll_ptr)->name);
1023
1024 document = malloc (total_len);
1025 if (document == NULL)
1026 return -1;
1027
1028 strcpy (document, "<library-list>\n");
1029 p = document + strlen (document);
1030
1031 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
1032 {
1033 struct dll_info *dll = (struct dll_info *) dll_ptr;
1034 char *name;
1035
1036 strcpy (p, " <library name=\"");
1037 p = p + strlen (p);
1038 name = xml_escape_text (dll->name);
1039 strcpy (p, name);
1040 free (name);
1041 p = p + strlen (p);
1042 strcpy (p, "\"><segment address=\"");
1043 p = p + strlen (p);
1044 sprintf (p, "0x%lx", (long) dll->base_addr);
1045 p = p + strlen (p);
1046 strcpy (p, "\"/></library>\n");
1047 p = p + strlen (p);
1048 }
1049
1050 strcpy (p, "</library-list>\n");
1051
1052 total_len = strlen (document);
1053
1054 if (offset > total_len)
1055 {
1056 free (document);
1057 return -1;
1058 }
1059
1060 if (offset + len > total_len)
1061 len = total_len - offset;
1062
1063 memcpy (readbuf, document + offset, len);
1064 free (document);
1065 return len;
1066}
1067
2268b414
JK
1068/* Handle qXfer:libraries-svr4:read. */
1069
1070static int
1071handle_qxfer_libraries_svr4 (const char *annex,
1072 gdb_byte *readbuf, const gdb_byte *writebuf,
1073 ULONGEST offset, LONGEST len)
1074{
1075 if (writebuf != NULL)
1076 return -2;
1077
1078 if (annex[0] != '\0' || !target_running ()
1079 || the_target->qxfer_libraries_svr4 == NULL)
1080 return -1;
1081
1082 return the_target->qxfer_libraries_svr4 (annex, readbuf, writebuf, offset, len);
1083}
1084
d08aafef
PA
1085/* Handle qXfer:osadata:read. */
1086
1087static int
1088handle_qxfer_osdata (const char *annex,
1089 gdb_byte *readbuf, const gdb_byte *writebuf,
1090 ULONGEST offset, LONGEST len)
1091{
1092 if (the_target->qxfer_osdata == NULL || writebuf != NULL)
1093 return -2;
1094
1095 return (*the_target->qxfer_osdata) (annex, readbuf, NULL, offset, len);
1096}
1097
1098/* Handle qXfer:siginfo:read and qXfer:siginfo:write. */
1099
1100static int
1101handle_qxfer_siginfo (const char *annex,
1102 gdb_byte *readbuf, const gdb_byte *writebuf,
1103 ULONGEST offset, LONGEST len)
1104{
1105 if (the_target->qxfer_siginfo == NULL)
1106 return -2;
1107
1108 if (annex[0] != '\0' || !target_running ())
1109 return -1;
1110
1111 return (*the_target->qxfer_siginfo) (annex, readbuf, writebuf, offset, len);
1112}
1113
1114/* Handle qXfer:spu:read and qXfer:spu:write. */
1115
1116static int
1117handle_qxfer_spu (const char *annex,
1118 gdb_byte *readbuf, const gdb_byte *writebuf,
1119 ULONGEST offset, LONGEST len)
1120{
1121 if (the_target->qxfer_spu == NULL)
1122 return -2;
1123
1124 if (!target_running ())
1125 return -1;
1126
1127 return (*the_target->qxfer_spu) (annex, readbuf, writebuf, offset, len);
1128}
1129
1130/* Handle qXfer:statictrace:read. */
1131
1132static int
1133handle_qxfer_statictrace (const char *annex,
1134 gdb_byte *readbuf, const gdb_byte *writebuf,
1135 ULONGEST offset, LONGEST len)
1136{
1137 ULONGEST nbytes;
1138
1139 if (writebuf != NULL)
1140 return -2;
1141
1142 if (annex[0] != '\0' || !target_running () || current_traceframe == -1)
1143 return -1;
1144
1145 if (traceframe_read_sdata (current_traceframe, offset,
1146 readbuf, len, &nbytes))
1147 return -1;
1148 return nbytes;
1149}
1150
1151/* Helper for handle_qxfer_threads. */
1152
dc146f7c 1153static void
d08aafef 1154handle_qxfer_threads_proper (struct buffer *buffer)
dc146f7c
VP
1155{
1156 struct inferior_list_entry *thread;
1157
1158 buffer_grow_str (buffer, "<threads>\n");
1159
1160 for (thread = all_threads.head; thread; thread = thread->next)
1161 {
1162 ptid_t ptid = thread_to_gdb_id ((struct thread_info *)thread);
1163 char ptid_s[100];
1164 int core = -1;
1165 char core_s[21];
1166
1167 write_ptid (ptid_s, ptid);
1168
1169 if (the_target->core_of_thread)
1170 core = (*the_target->core_of_thread) (ptid);
1171
1172 if (core != -1)
1173 {
1174 sprintf (core_s, "%d", core);
1175 buffer_xml_printf (buffer, "<thread id=\"%s\" core=\"%s\"/>\n",
1176 ptid_s, core_s);
1177 }
1178 else
1179 {
1180 buffer_xml_printf (buffer, "<thread id=\"%s\"/>\n",
1181 ptid_s);
1182 }
1183 }
1184
1185 buffer_grow_str0 (buffer, "</threads>\n");
1186}
1187
d08aafef
PA
1188/* Handle qXfer:threads:read. */
1189
dc146f7c 1190static int
d08aafef
PA
1191handle_qxfer_threads (const char *annex,
1192 gdb_byte *readbuf, const gdb_byte *writebuf,
1193 ULONGEST offset, LONGEST len)
dc146f7c
VP
1194{
1195 static char *result = 0;
1196 static unsigned int result_length = 0;
1197
d08aafef
PA
1198 if (writebuf != NULL)
1199 return -2;
1200
1201 if (!target_running () || annex[0] != '\0')
1202 return -1;
dc146f7c
VP
1203
1204 if (offset == 0)
1205 {
1206 struct buffer buffer;
1207 /* When asked for data at offset 0, generate everything and store into
1208 'result'. Successive reads will be served off 'result'. */
1209 if (result)
1210 free (result);
1211
1212 buffer_init (&buffer);
1213
d08aafef 1214 handle_qxfer_threads_proper (&buffer);
dc146f7c
VP
1215
1216 result = buffer_finish (&buffer);
1217 result_length = strlen (result);
1218 buffer_free (&buffer);
1219 }
1220
1221 if (offset >= result_length)
1222 {
1223 /* We're out of data. */
1224 free (result);
1225 result = NULL;
1226 result_length = 0;
1227 return 0;
1228 }
1229
d08aafef
PA
1230 if (len > result_length - offset)
1231 len = result_length - offset;
1232
1233 memcpy (readbuf, result + offset, len);
1234
1235 return len;
1236}
1237
b3b9301e
PA
1238/* Handle qXfer:traceframe-info:read. */
1239
1240static int
1241handle_qxfer_traceframe_info (const char *annex,
1242 gdb_byte *readbuf, const gdb_byte *writebuf,
1243 ULONGEST offset, LONGEST len)
1244{
1245 static char *result = 0;
1246 static unsigned int result_length = 0;
1247
1248 if (writebuf != NULL)
1249 return -2;
1250
1251 if (!target_running () || annex[0] != '\0' || current_traceframe == -1)
1252 return -1;
1253
1254 if (offset == 0)
1255 {
1256 struct buffer buffer;
1257
1258 /* When asked for data at offset 0, generate everything and
1259 store into 'result'. Successive reads will be served off
1260 'result'. */
1261 free (result);
1262
1263 buffer_init (&buffer);
1264
1265 traceframe_read_info (current_traceframe, &buffer);
1266
1267 result = buffer_finish (&buffer);
1268 result_length = strlen (result);
1269 buffer_free (&buffer);
1270 }
1271
1272 if (offset >= result_length)
1273 {
1274 /* We're out of data. */
1275 free (result);
1276 result = NULL;
1277 result_length = 0;
1278 return 0;
1279 }
1280
1281 if (len > result_length - offset)
1282 len = result_length - offset;
1283
1284 memcpy (readbuf, result + offset, len);
1285 return len;
1286}
1287
78d85199
YQ
1288/* Handle qXfer:fdpic:read. */
1289
1290static int
1291handle_qxfer_fdpic (const char *annex, gdb_byte *readbuf,
1292 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
1293{
1294 if (the_target->read_loadmap == NULL)
1295 return -2;
1296
1297 if (!target_running ())
1298 return -1;
1299
1300 return (*the_target->read_loadmap) (annex, offset, readbuf, len);
1301}
1302
d08aafef
PA
1303static const struct qxfer qxfer_packets[] =
1304 {
1305 { "auxv", handle_qxfer_auxv },
78d85199 1306 { "fdpic", handle_qxfer_fdpic},
d08aafef
PA
1307 { "features", handle_qxfer_features },
1308 { "libraries", handle_qxfer_libraries },
2268b414 1309 { "libraries-svr4", handle_qxfer_libraries_svr4 },
d08aafef
PA
1310 { "osdata", handle_qxfer_osdata },
1311 { "siginfo", handle_qxfer_siginfo },
1312 { "spu", handle_qxfer_spu },
1313 { "statictrace", handle_qxfer_statictrace },
1314 { "threads", handle_qxfer_threads },
b3b9301e 1315 { "traceframe-info", handle_qxfer_traceframe_info },
d08aafef
PA
1316 };
1317
1318static int
1319handle_qxfer (char *own_buf, int packet_len, int *new_packet_len_p)
1320{
1321 int i;
1322 char *object;
1323 char *rw;
1324 char *annex;
1325 char *offset;
1326
1327 if (strncmp (own_buf, "qXfer:", 6) != 0)
1328 return 0;
1329
1330 /* Grab the object, r/w and annex. */
1331 if (decode_xfer (own_buf + 6, &object, &rw, &annex, &offset) < 0)
1332 {
1333 write_enn (own_buf);
1334 return 1;
1335 }
1336
1337 for (i = 0;
1338 i < sizeof (qxfer_packets) / sizeof (qxfer_packets[0]);
1339 i++)
1340 {
1341 const struct qxfer *q = &qxfer_packets[i];
1342
1343 if (strcmp (object, q->object) == 0)
1344 {
1345 if (strcmp (rw, "read") == 0)
1346 {
1347 unsigned char *data;
1348 int n;
1349 CORE_ADDR ofs;
1350 unsigned int len;
1351
1352 /* Grab the offset and length. */
1353 if (decode_xfer_read (offset, &ofs, &len) < 0)
1354 {
1355 write_enn (own_buf);
1356 return 1;
1357 }
1358
1359 /* Read one extra byte, as an indicator of whether there is
1360 more. */
1361 if (len > PBUFSIZ - 2)
1362 len = PBUFSIZ - 2;
1363 data = malloc (len + 1);
1364 if (data == NULL)
1365 {
1366 write_enn (own_buf);
1367 return 1;
1368 }
1369 n = (*q->xfer) (annex, data, NULL, ofs, len + 1);
1370 if (n == -2)
1371 {
1372 free (data);
1373 return 0;
1374 }
1375 else if (n < 0)
1376 write_enn (own_buf);
1377 else if (n > len)
1378 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1379 else
1380 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
1381
1382 free (data);
1383 return 1;
1384 }
1385 else if (strcmp (rw, "write") == 0)
1386 {
1387 int n;
1388 unsigned int len;
1389 CORE_ADDR ofs;
1390 unsigned char *data;
1391
1392 strcpy (own_buf, "E00");
1393 data = malloc (packet_len - (offset - own_buf));
1394 if (data == NULL)
1395 {
1396 write_enn (own_buf);
1397 return 1;
1398 }
1399 if (decode_xfer_write (offset, packet_len - (offset - own_buf),
1400 &ofs, &len, data) < 0)
1401 {
1402 free (data);
1403 write_enn (own_buf);
1404 return 1;
1405 }
1406
1407 n = (*q->xfer) (annex, NULL, data, ofs, len);
1408 if (n == -2)
1409 {
1410 free (data);
1411 return 0;
1412 }
1413 else if (n < 0)
1414 write_enn (own_buf);
1415 else
1416 sprintf (own_buf, "%x", n);
dc146f7c 1417
d08aafef
PA
1418 free (data);
1419 return 1;
1420 }
dc146f7c 1421
d08aafef
PA
1422 return 0;
1423 }
1424 }
dc146f7c 1425
d08aafef 1426 return 0;
dc146f7c
VP
1427}
1428
30ba68cb
MS
1429/* Table used by the crc32 function to calcuate the checksum. */
1430
1431static unsigned int crc32_table[256] =
1432{0, 0};
1433
1434/* Compute 32 bit CRC from inferior memory.
1435
1436 On success, return 32 bit CRC.
1437 On failure, return (unsigned long long) -1. */
1438
1439static unsigned long long
1440crc32 (CORE_ADDR base, int len, unsigned int crc)
1441{
1442 if (!crc32_table[1])
1443 {
1444 /* Initialize the CRC table and the decoding table. */
1445 int i, j;
1446 unsigned int c;
1447
1448 for (i = 0; i < 256; i++)
1449 {
1450 for (c = i << 24, j = 8; j > 0; --j)
1451 c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
1452 crc32_table[i] = c;
1453 }
1454 }
1455
1456 while (len--)
1457 {
1458 unsigned char byte = 0;
1459
1460 /* Return failure if memory read fails. */
1461 if (read_inferior_memory (base, &byte, 1) != 0)
1462 return (unsigned long long) -1;
1463
1464 crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ byte) & 255];
1465 base++;
1466 }
1467 return (unsigned long long) crc;
1468}
1469
ce3a066d 1470/* Handle all of the extended 'q' packets. */
d08aafef 1471
ce3a066d 1472void
0e7f50da 1473handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
ce3a066d 1474{
0d62e5e8
DJ
1475 static struct inferior_list_entry *thread_ptr;
1476
bb63802a 1477 /* Reply the current thread id. */
db42f210 1478 if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC)
bb63802a 1479 {
95954743 1480 ptid_t gdb_id;
2d717e4f 1481 require_running (own_buf);
bd99dc85 1482
95954743
PA
1483 if (!ptid_equal (general_thread, null_ptid)
1484 && !ptid_equal (general_thread, minus_one_ptid))
bd99dc85
PA
1485 gdb_id = general_thread;
1486 else
1487 {
1488 thread_ptr = all_threads.head;
1489 gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
1490 }
1491
95954743
PA
1492 sprintf (own_buf, "QC");
1493 own_buf += 2;
4b812f4e 1494 write_ptid (own_buf, gdb_id);
bb63802a
UW
1495 return;
1496 }
1497
ce3a066d
DJ
1498 if (strcmp ("qSymbol::", own_buf) == 0)
1499 {
d3bbe7a0
PA
1500 /* GDB is suggesting new symbols have been loaded. This may
1501 mean a new shared library has been detected as loaded, so
1502 take the opportunity to check if breakpoints we think are
1503 inserted, still are. Note that it isn't guaranteed that
1504 we'll see this when a shared library is loaded, and nor will
1505 we see this for unloads (although breakpoints in unloaded
1506 libraries shouldn't trigger), as GDB may not find symbols for
1507 the library at all. We also re-validate breakpoints when we
1508 see a second GDB breakpoint for the same address, and or when
1509 we access breakpoint shadows. */
1510 validate_breakpoints ();
1511
fa593d66
PA
1512 if (target_supports_tracepoints ())
1513 tracepoint_look_up_symbols ();
1514
2d717e4f 1515 if (target_running () && the_target->look_up_symbols != NULL)
2f2893d9
DJ
1516 (*the_target->look_up_symbols) ();
1517
ce3a066d
DJ
1518 strcpy (own_buf, "OK");
1519 return;
1520 }
1521
db42f210 1522 if (!disable_packet_qfThreadInfo)
0d62e5e8 1523 {
db42f210 1524 if (strcmp ("qfThreadInfo", own_buf) == 0)
0d62e5e8 1525 {
95954743
PA
1526 ptid_t gdb_id;
1527
db42f210
PA
1528 require_running (own_buf);
1529 thread_ptr = all_threads.head;
95954743
PA
1530
1531 *own_buf++ = 'm';
1532 gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
1533 write_ptid (own_buf, gdb_id);
0d62e5e8
DJ
1534 thread_ptr = thread_ptr->next;
1535 return;
1536 }
db42f210
PA
1537
1538 if (strcmp ("qsThreadInfo", own_buf) == 0)
0d62e5e8 1539 {
95954743
PA
1540 ptid_t gdb_id;
1541
db42f210
PA
1542 require_running (own_buf);
1543 if (thread_ptr != NULL)
1544 {
95954743
PA
1545 *own_buf++ = 'm';
1546 gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
1547 write_ptid (own_buf, gdb_id);
db42f210
PA
1548 thread_ptr = thread_ptr->next;
1549 return;
1550 }
1551 else
1552 {
1553 sprintf (own_buf, "l");
1554 return;
1555 }
0d62e5e8
DJ
1556 }
1557 }
aa691b87 1558
52fb6437
NS
1559 if (the_target->read_offsets != NULL
1560 && strcmp ("qOffsets", own_buf) == 0)
1561 {
1562 CORE_ADDR text, data;
2d717e4f
DJ
1563
1564 require_running (own_buf);
52fb6437
NS
1565 if (the_target->read_offsets (&text, &data))
1566 sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
1567 (long)text, (long)data, (long)data);
1568 else
1569 write_enn (own_buf);
1b3f6016 1570
52fb6437
NS
1571 return;
1572 }
1573
be2a5f71
DJ
1574 /* Protocol features query. */
1575 if (strncmp ("qSupported", own_buf, 10) == 0
1576 && (own_buf[10] == ':' || own_buf[10] == '\0'))
1577 {
95954743 1578 char *p = &own_buf[10];
fa593d66 1579 int gdb_supports_qRelocInsn = 0;
95954743 1580
1570b33e
L
1581 /* Start processing qSupported packet. */
1582 target_process_qsupported (NULL);
1583
95954743
PA
1584 /* Process each feature being provided by GDB. The first
1585 feature will follow a ':', and latter features will follow
1586 ';'. */
1587 if (*p == ':')
d149dd1d
PA
1588 {
1589 char **qsupported = NULL;
1590 int count = 0;
1591 int i;
1592
1593 /* Two passes, to avoid nested strtok calls in
1594 target_process_qsupported. */
1595 for (p = strtok (p + 1, ";");
1596 p != NULL;
1597 p = strtok (NULL, ";"))
1598 {
1599 count++;
1600 qsupported = xrealloc (qsupported, count * sizeof (char *));
1601 qsupported[count - 1] = xstrdup (p);
1602 }
1603
1604 for (i = 0; i < count; i++)
1605 {
1606 p = qsupported[i];
1607 if (strcmp (p, "multiprocess+") == 0)
1608 {
1609 /* GDB supports and wants multi-process support if
1610 possible. */
1611 if (target_supports_multi_process ())
1612 multi_process = 1;
1613 }
fa593d66
PA
1614 else if (strcmp (p, "qRelocInsn+") == 0)
1615 {
1616 /* GDB supports relocate instruction requests. */
1617 gdb_supports_qRelocInsn = 1;
1618 }
d149dd1d
PA
1619 else
1620 target_process_qsupported (p);
1621
1622 free (p);
1623 }
1624
1625 free (qsupported);
1626 }
95954743 1627
9b224c5e
PA
1628 sprintf (own_buf,
1629 "PacketSize=%x;QPassSignals+;QProgramSignals+",
1630 PBUFSIZ - 1);
0876f84a 1631
2268b414
JK
1632 if (the_target->qxfer_libraries_svr4 != NULL)
1633 strcat (own_buf, ";qXfer:libraries-svr4:read+");
1634 else
1635 {
1636 /* We do not have any hook to indicate whether the non-SVR4 target
1637 backend supports qXfer:libraries:read, so always report it. */
1638 strcat (own_buf, ";qXfer:libraries:read+");
1639 }
255e7678 1640
0876f84a 1641 if (the_target->read_auxv != NULL)
9f2e1e63 1642 strcat (own_buf, ";qXfer:auxv:read+");
2d717e4f 1643
0e7f50da
UW
1644 if (the_target->qxfer_spu != NULL)
1645 strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
0876f84a 1646
4aa995e1
PA
1647 if (the_target->qxfer_siginfo != NULL)
1648 strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
1649
78d85199
YQ
1650 if (the_target->read_loadmap != NULL)
1651 strcat (own_buf, ";qXfer:fdpic:read+");
1652
221c031f
UW
1653 /* We always report qXfer:features:read, as targets may
1654 install XML files on a subsequent call to arch_setup.
1655 If we reported to GDB on startup that we don't support
1656 qXfer:feature:read at all, we will never be re-queried. */
1657 strcat (own_buf, ";qXfer:features:read+");
23181151 1658
a6f3e723
SL
1659 if (transport_is_reliable)
1660 strcat (own_buf, ";QStartNoAckMode+");
07e059b5
VP
1661
1662 if (the_target->qxfer_osdata != NULL)
1b3f6016 1663 strcat (own_buf, ";qXfer:osdata:read+");
07e059b5 1664
cf8fd78b
PA
1665 if (target_supports_multi_process ())
1666 strcat (own_buf, ";multiprocess+");
95954743 1667
bd99dc85
PA
1668 if (target_supports_non_stop ())
1669 strcat (own_buf, ";QNonStop+");
1670
03583c20
UW
1671 if (target_supports_disable_randomization ())
1672 strcat (own_buf, ";QDisableRandomization+");
1673
dc146f7c
VP
1674 strcat (own_buf, ";qXfer:threads:read+");
1675
219f2f23
PA
1676 if (target_supports_tracepoints ())
1677 {
1678 strcat (own_buf, ";ConditionalTracepoints+");
1679 strcat (own_buf, ";TraceStateVariables+");
1680 strcat (own_buf, ";TracepointSource+");
8336d594 1681 strcat (own_buf, ";DisconnectedTracing+");
fa593d66
PA
1682 if (gdb_supports_qRelocInsn && target_supports_fast_tracepoints ())
1683 strcat (own_buf, ";FastTracepoints+");
0fb4aa4b 1684 strcat (own_buf, ";StaticTracepoints+");
1e4d1764 1685 strcat (own_buf, ";InstallInTrace+");
0fb4aa4b 1686 strcat (own_buf, ";qXfer:statictrace:read+");
b3b9301e 1687 strcat (own_buf, ";qXfer:traceframe-info:read+");
d248b706 1688 strcat (own_buf, ";EnableDisableTracepoints+");
3065dfb6 1689 strcat (own_buf, ";tracenz+");
219f2f23
PA
1690 }
1691
9f3a5c85
LM
1692 /* Support target-side breakpoint conditions. */
1693 strcat (own_buf, ";ConditionalBreakpoints+");
1694
d1feda86
YQ
1695 if (target_supports_agent ())
1696 strcat (own_buf, ";QAgent+");
1697
be2a5f71
DJ
1698 return;
1699 }
1700
dae5f5cf
DJ
1701 /* Thread-local storage support. */
1702 if (the_target->get_tls_address != NULL
1703 && strncmp ("qGetTLSAddr:", own_buf, 12) == 0)
1704 {
1705 char *p = own_buf + 12;
5b1c542e 1706 CORE_ADDR parts[2], address = 0;
dae5f5cf 1707 int i, err;
95954743 1708 ptid_t ptid = null_ptid;
dae5f5cf 1709
2d717e4f
DJ
1710 require_running (own_buf);
1711
dae5f5cf
DJ
1712 for (i = 0; i < 3; i++)
1713 {
1714 char *p2;
1715 int len;
1716
1717 if (p == NULL)
1718 break;
1719
1720 p2 = strchr (p, ',');
1721 if (p2)
1722 {
1723 len = p2 - p;
1724 p2++;
1725 }
1726 else
1727 {
1728 len = strlen (p);
1729 p2 = NULL;
1730 }
1731
5b1c542e 1732 if (i == 0)
95954743 1733 ptid = read_ptid (p, NULL);
5b1c542e
PA
1734 else
1735 decode_address (&parts[i - 1], p, len);
dae5f5cf
DJ
1736 p = p2;
1737 }
1738
1739 if (p != NULL || i < 3)
1740 err = 1;
1741 else
1742 {
e09875d4 1743 struct thread_info *thread = find_thread_ptid (ptid);
dae5f5cf
DJ
1744
1745 if (thread == NULL)
1746 err = 2;
1747 else
5b1c542e 1748 err = the_target->get_tls_address (thread, parts[0], parts[1],
dae5f5cf
DJ
1749 &address);
1750 }
1751
1752 if (err == 0)
1753 {
c6f46ca0 1754 strcpy (own_buf, paddress(address));
dae5f5cf
DJ
1755 return;
1756 }
1757 else if (err > 0)
1758 {
1759 write_enn (own_buf);
1760 return;
1761 }
1762
1763 /* Otherwise, pretend we do not understand this packet. */
1764 }
1765
711e434b
PM
1766 /* Windows OS Thread Information Block address support. */
1767 if (the_target->get_tib_address != NULL
1768 && strncmp ("qGetTIBAddr:", own_buf, 12) == 0)
1769 {
1770 char *annex;
1771 int n;
1772 CORE_ADDR tlb;
1773 ptid_t ptid = read_ptid (own_buf + 12, &annex);
1774
1775 n = (*the_target->get_tib_address) (ptid, &tlb);
1776 if (n == 1)
1777 {
c6f46ca0 1778 strcpy (own_buf, paddress(tlb));
711e434b
PM
1779 return;
1780 }
1781 else if (n == 0)
1782 {
1783 write_enn (own_buf);
1784 return;
1785 }
1786 return;
1787 }
1788
c74d0ad8
DJ
1789 /* Handle "monitor" commands. */
1790 if (strncmp ("qRcmd,", own_buf, 6) == 0)
1791 {
aef93bd7 1792 char *mon = malloc (PBUFSIZ);
c74d0ad8
DJ
1793 int len = strlen (own_buf + 6);
1794
aef93bd7
DE
1795 if (mon == NULL)
1796 {
1797 write_enn (own_buf);
1798 return;
1799 }
1800
d41b6bb4 1801 if ((len % 2) != 0 || unhexify (mon, own_buf + 6, len / 2) != len / 2)
c74d0ad8
DJ
1802 {
1803 write_enn (own_buf);
1804 free (mon);
1805 return;
1806 }
1807 mon[len / 2] = '\0';
1808
1809 write_ok (own_buf);
1810
cdbfd419
PP
1811 if (the_target->handle_monitor_command == NULL
1812 || (*the_target->handle_monitor_command) (mon) == 0)
1813 /* Default processing. */
d73f2619 1814 handle_monitor_command (mon, own_buf);
c74d0ad8
DJ
1815
1816 free (mon);
1817 return;
1818 }
1819
493e2a69
MS
1820 if (strncmp ("qSearch:memory:", own_buf,
1821 sizeof ("qSearch:memory:") - 1) == 0)
08388c79
DE
1822 {
1823 require_running (own_buf);
1824 handle_search_memory (own_buf, packet_len);
1825 return;
1826 }
1827
95954743
PA
1828 if (strcmp (own_buf, "qAttached") == 0
1829 || strncmp (own_buf, "qAttached:", sizeof ("qAttached:") - 1) == 0)
0b16c5cf 1830 {
95954743
PA
1831 struct process_info *process;
1832
1833 if (own_buf[sizeof ("qAttached") - 1])
1834 {
1835 int pid = strtoul (own_buf + sizeof ("qAttached:") - 1, NULL, 16);
1836 process = (struct process_info *)
1837 find_inferior_id (&all_processes, pid_to_ptid (pid));
1838 }
1839 else
1840 {
1841 require_running (own_buf);
1842 process = current_process ();
1843 }
1844
1845 if (process == NULL)
1846 {
1847 write_enn (own_buf);
1848 return;
1849 }
1850
1851 strcpy (own_buf, process->attached ? "1" : "0");
0b16c5cf
PA
1852 return;
1853 }
1854
30ba68cb
MS
1855 if (strncmp ("qCRC:", own_buf, 5) == 0)
1856 {
1857 /* CRC check (compare-section). */
1858 char *comma;
1859 CORE_ADDR base;
1860 int len;
1861 unsigned long long crc;
1862
1863 require_running (own_buf);
2280c721 1864 base = strtoul (own_buf + 5, &comma, 16);
30ba68cb
MS
1865 if (*comma++ != ',')
1866 {
1867 write_enn (own_buf);
1868 return;
1869 }
1870 len = strtoul (comma, NULL, 16);
1871 crc = crc32 (base, len, 0xffffffff);
1872 /* Check for memory failure. */
1873 if (crc == (unsigned long long) -1)
1874 {
1875 write_enn (own_buf);
1876 return;
1877 }
1878 sprintf (own_buf, "C%lx", (unsigned long) crc);
1879 return;
1880 }
1881
d08aafef
PA
1882 if (handle_qxfer (own_buf, packet_len, new_packet_len_p))
1883 return;
1884
219f2f23
PA
1885 if (target_supports_tracepoints () && handle_tracepoint_query (own_buf))
1886 return;
1887
ce3a066d
DJ
1888 /* Otherwise we didn't know what packet it was. Say we didn't
1889 understand it. */
1890 own_buf[0] = 0;
1891}
1892
ce1a5b52
PA
1893static void gdb_wants_all_threads_stopped (void);
1894
64386c31
DJ
1895/* Parse vCont packets. */
1896void
5b1c542e 1897handle_v_cont (char *own_buf)
64386c31
DJ
1898{
1899 char *p, *q;
1900 int n = 0, i = 0;
2bd7c093 1901 struct thread_resume *resume_info;
95954743 1902 struct thread_resume default_action = {{0}};
64386c31
DJ
1903
1904 /* Count the number of semicolons in the packet. There should be one
1905 for every action. */
1906 p = &own_buf[5];
1907 while (p)
1908 {
1909 n++;
1910 p++;
1911 p = strchr (p, ';');
1912 }
2bd7c093
PA
1913
1914 resume_info = malloc (n * sizeof (resume_info[0]));
aef93bd7
DE
1915 if (resume_info == NULL)
1916 goto err;
64386c31 1917
64386c31 1918 p = &own_buf[5];
64386c31
DJ
1919 while (*p)
1920 {
1921 p++;
1922
64386c31 1923 if (p[0] == 's' || p[0] == 'S')
bd99dc85 1924 resume_info[i].kind = resume_step;
64386c31 1925 else if (p[0] == 'c' || p[0] == 'C')
bd99dc85
PA
1926 resume_info[i].kind = resume_continue;
1927 else if (p[0] == 't')
1928 resume_info[i].kind = resume_stop;
64386c31
DJ
1929 else
1930 goto err;
1931
1932 if (p[0] == 'S' || p[0] == 'C')
1933 {
1934 int sig;
1935 sig = strtol (p + 1, &q, 16);
1936 if (p == q)
1937 goto err;
1938 p = q;
1939
1940 if (!target_signal_to_host_p (sig))
1941 goto err;
1942 resume_info[i].sig = target_signal_to_host (sig);
1943 }
1944 else
1945 {
1946 resume_info[i].sig = 0;
1947 p = p + 1;
1948 }
1949
1950 if (p[0] == 0)
1951 {
95954743 1952 resume_info[i].thread = minus_one_ptid;
64386c31
DJ
1953 default_action = resume_info[i];
1954
1955 /* Note: we don't increment i here, we'll overwrite this entry
1956 the next time through. */
1957 }
1958 else if (p[0] == ':')
1959 {
95954743 1960 ptid_t ptid = read_ptid (p + 1, &q);
a06660f7 1961
64386c31
DJ
1962 if (p == q)
1963 goto err;
1964 p = q;
1965 if (p[0] != ';' && p[0] != 0)
1966 goto err;
1967
95954743 1968 resume_info[i].thread = ptid;
a06660f7 1969
64386c31
DJ
1970 i++;
1971 }
1972 }
1973
2bd7c093
PA
1974 if (i < n)
1975 resume_info[i] = default_action;
64386c31 1976
122f36ef
PA
1977 /* `cont_thread' is still used in occasional places in the backend,
1978 to implement single-thread scheduler-locking. Doesn't make sense
1979 to set it if we see a stop request, or any form of wildcard
1980 vCont. */
bd99dc85 1981 if (n == 1
122f36ef
PA
1982 && !(ptid_equal (resume_info[0].thread, minus_one_ptid)
1983 || ptid_get_lwp (resume_info[0].thread) == -1)
bd99dc85 1984 && resume_info[0].kind != resume_stop)
64386c31
DJ
1985 cont_thread = resume_info[0].thread;
1986 else
95954743 1987 cont_thread = minus_one_ptid;
dc3f8883 1988 set_desired_inferior (0);
64386c31 1989
bd99dc85
PA
1990 if (!non_stop)
1991 enable_async_io ();
1992
2bd7c093 1993 (*the_target->resume) (resume_info, n);
64386c31
DJ
1994
1995 free (resume_info);
1996
bd99dc85
PA
1997 if (non_stop)
1998 write_ok (own_buf);
1999 else
2000 {
95954743 2001 last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
ce1a5b52 2002
d20a8ad9
PA
2003 if (last_status.kind != TARGET_WAITKIND_EXITED
2004 && last_status.kind != TARGET_WAITKIND_SIGNALLED)
2005 current_inferior->last_status = last_status;
2006
ce1a5b52
PA
2007 /* From the client's perspective, all-stop mode always stops all
2008 threads implicitly (and the target backend has already done
2009 so by now). Tag all threads as "want-stopped", so we don't
2010 resume them implicitly without the client telling us to. */
2011 gdb_wants_all_threads_stopped ();
bd99dc85
PA
2012 prepare_resume_reply (own_buf, last_ptid, &last_status);
2013 disable_async_io ();
6bd31874
JB
2014
2015 if (last_status.kind == TARGET_WAITKIND_EXITED
2016 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
2017 mourn_inferior (find_process_pid (ptid_get_pid (last_ptid)));
bd99dc85 2018 }
64386c31
DJ
2019 return;
2020
2021err:
255e7678 2022 write_enn (own_buf);
64386c31
DJ
2023 free (resume_info);
2024 return;
2025}
2026
2d717e4f
DJ
2027/* Attach to a new program. Return 1 if successful, 0 if failure. */
2028int
5b1c542e 2029handle_v_attach (char *own_buf)
2d717e4f
DJ
2030{
2031 int pid;
2032
2033 pid = strtol (own_buf + 8, NULL, 16);
5b1c542e 2034 if (pid != 0 && attach_inferior (pid) == 0)
2d717e4f 2035 {
aeba519e
PA
2036 /* Don't report shared library events after attaching, even if
2037 some libraries are preloaded. GDB will always poll the
2038 library list. Avoids the "stopped by shared library event"
2039 notice on the GDB side. */
2040 dlls_changed = 0;
bd99dc85
PA
2041
2042 if (non_stop)
2043 {
2044 /* In non-stop, we don't send a resume reply. Stop events
2045 will follow up using the normal notification
2046 mechanism. */
2047 write_ok (own_buf);
2048 }
2049 else
2050 prepare_resume_reply (own_buf, last_ptid, &last_status);
2051
2d717e4f
DJ
2052 return 1;
2053 }
2054 else
2055 {
2056 write_enn (own_buf);
2057 return 0;
2058 }
2059}
2060
2061/* Run a new program. Return 1 if successful, 0 if failure. */
2062static int
5b1c542e 2063handle_v_run (char *own_buf)
2d717e4f 2064{
aef93bd7 2065 char *p, *next_p, **new_argv;
2d717e4f
DJ
2066 int i, new_argc;
2067
2068 new_argc = 0;
2069 for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
2070 {
2071 p++;
2072 new_argc++;
2073 }
2074
aef93bd7
DE
2075 new_argv = calloc (new_argc + 2, sizeof (char *));
2076 if (new_argv == NULL)
2077 {
2078 write_enn (own_buf);
2079 return 0;
2080 }
2081
2d717e4f
DJ
2082 i = 0;
2083 for (p = own_buf + strlen ("vRun;"); *p; p = next_p)
2084 {
2085 next_p = strchr (p, ';');
2086 if (next_p == NULL)
2087 next_p = p + strlen (p);
2088
2089 if (i == 0 && p == next_p)
2090 new_argv[i] = NULL;
2091 else
2092 {
aef93bd7 2093 /* FIXME: Fail request if out of memory instead of dying. */
bca929d3 2094 new_argv[i] = xmalloc (1 + (next_p - p) / 2);
2d717e4f
DJ
2095 unhexify (new_argv[i], p, (next_p - p) / 2);
2096 new_argv[i][(next_p - p) / 2] = '\0';
2097 }
2098
2099 if (*next_p)
2100 next_p++;
2101 i++;
2102 }
2103 new_argv[i] = NULL;
2104
2105 if (new_argv[0] == NULL)
2106 {
f142445f
DJ
2107 /* GDB didn't specify a program to run. Use the program from the
2108 last run with the new argument list. */
9b710a42 2109
2d717e4f
DJ
2110 if (program_argv == NULL)
2111 {
2112 write_enn (own_buf);
b2c04452 2113 freeargv (new_argv);
2d717e4f
DJ
2114 return 0;
2115 }
2116
aef93bd7
DE
2117 new_argv[0] = strdup (program_argv[0]);
2118 if (new_argv[0] == NULL)
2119 {
aef93bd7 2120 write_enn (own_buf);
b2c04452 2121 freeargv (new_argv);
aef93bd7 2122 return 0;
1b3f6016 2123 }
2d717e4f 2124 }
f142445f 2125
aef93bd7
DE
2126 /* Free the old argv and install the new one. */
2127 freeargv (program_argv);
f142445f 2128 program_argv = new_argv;
2d717e4f 2129
5b1c542e
PA
2130 start_inferior (program_argv);
2131 if (last_status.kind == TARGET_WAITKIND_STOPPED)
2d717e4f 2132 {
5b1c542e 2133 prepare_resume_reply (own_buf, last_ptid, &last_status);
bd99dc85
PA
2134
2135 /* In non-stop, sending a resume reply doesn't set the general
2136 thread, but GDB assumes a vRun sets it (this is so GDB can
2137 query which is the main thread of the new inferior. */
2138 if (non_stop)
2139 general_thread = last_ptid;
2140
2d717e4f
DJ
2141 return 1;
2142 }
2143 else
2144 {
2145 write_enn (own_buf);
2146 return 0;
2147 }
2148}
2149
95954743
PA
2150/* Kill process. Return 1 if successful, 0 if failure. */
2151int
2152handle_v_kill (char *own_buf)
2153{
2154 int pid;
2155 char *p = &own_buf[6];
0f54c268
PM
2156 if (multi_process)
2157 pid = strtol (p, NULL, 16);
2158 else
2159 pid = signal_pid;
95954743
PA
2160 if (pid != 0 && kill_inferior (pid) == 0)
2161 {
2162 last_status.kind = TARGET_WAITKIND_SIGNALLED;
2163 last_status.value.sig = TARGET_SIGNAL_KILL;
2164 last_ptid = pid_to_ptid (pid);
2165 discard_queued_stop_replies (pid);
2166 write_ok (own_buf);
2167 return 1;
2168 }
2169 else
2170 {
2171 write_enn (own_buf);
2172 return 0;
2173 }
2174}
2175
bd99dc85
PA
2176/* Handle a 'vStopped' packet. */
2177static void
2178handle_v_stopped (char *own_buf)
2179{
2180 /* If we're waiting for GDB to acknowledge a pending stop reply,
2181 consider that done. */
2182 if (notif_queue)
2183 {
2184 struct vstop_notif *head;
2185
2186 if (remote_debug)
95954743
PA
2187 fprintf (stderr, "vStopped: acking %s\n",
2188 target_pid_to_str (notif_queue->ptid));
bd99dc85
PA
2189
2190 head = notif_queue;
2191 notif_queue = notif_queue->next;
2192 free (head);
2193 }
2194
2195 /* Push another stop reply, or if there are no more left, an OK. */
2196 send_next_stop_reply (own_buf);
2197}
2198
64386c31
DJ
2199/* Handle all of the extended 'v' packets. */
2200void
5b1c542e 2201handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
64386c31 2202{
db42f210 2203 if (!disable_packet_vCont)
64386c31 2204 {
db42f210
PA
2205 if (strncmp (own_buf, "vCont;", 6) == 0)
2206 {
2207 require_running (own_buf);
5b1c542e 2208 handle_v_cont (own_buf);
db42f210
PA
2209 return;
2210 }
64386c31 2211
db42f210
PA
2212 if (strncmp (own_buf, "vCont?", 6) == 0)
2213 {
bd99dc85 2214 strcpy (own_buf, "vCont;c;C;s;S;t");
db42f210
PA
2215 return;
2216 }
64386c31
DJ
2217 }
2218
a6b151f1
DJ
2219 if (strncmp (own_buf, "vFile:", 6) == 0
2220 && handle_vFile (own_buf, packet_len, new_packet_len))
2221 return;
2222
2d717e4f
DJ
2223 if (strncmp (own_buf, "vAttach;", 8) == 0)
2224 {
901f9912 2225 if ((!extended_protocol || !multi_process) && target_running ())
2d717e4f 2226 {
fd96d250
PA
2227 fprintf (stderr, "Already debugging a process\n");
2228 write_enn (own_buf);
2229 return;
2d717e4f 2230 }
5b1c542e 2231 handle_v_attach (own_buf);
2d717e4f
DJ
2232 return;
2233 }
2234
2235 if (strncmp (own_buf, "vRun;", 5) == 0)
2236 {
901f9912 2237 if ((!extended_protocol || !multi_process) && target_running ())
2d717e4f 2238 {
fd96d250
PA
2239 fprintf (stderr, "Already debugging a process\n");
2240 write_enn (own_buf);
2241 return;
2d717e4f 2242 }
5b1c542e 2243 handle_v_run (own_buf);
2d717e4f
DJ
2244 return;
2245 }
2246
95954743
PA
2247 if (strncmp (own_buf, "vKill;", 6) == 0)
2248 {
2249 if (!target_running ())
2250 {
2251 fprintf (stderr, "No process to kill\n");
2252 write_enn (own_buf);
2253 return;
2254 }
2255 handle_v_kill (own_buf);
2256 return;
2257 }
2258
bd99dc85
PA
2259 if (strncmp (own_buf, "vStopped", 8) == 0)
2260 {
2261 handle_v_stopped (own_buf);
2262 return;
2263 }
2264
64386c31
DJ
2265 /* Otherwise we didn't know what packet it was. Say we didn't
2266 understand it. */
2267 own_buf[0] = 0;
2268 return;
2269}
2270
bd99dc85
PA
2271/* Resume inferior and wait for another event. In non-stop mode,
2272 don't really wait here, but return immediatelly to the event
2273 loop. */
1fd7cdc2 2274static void
5b1c542e 2275myresume (char *own_buf, int step, int sig)
64386c31
DJ
2276{
2277 struct thread_resume resume_info[2];
2278 int n = 0;
2bd7c093 2279 int valid_cont_thread;
a20d5e98
DJ
2280
2281 set_desired_inferior (0);
64386c31 2282
95954743
PA
2283 valid_cont_thread = (!ptid_equal (cont_thread, null_ptid)
2284 && !ptid_equal (cont_thread, minus_one_ptid));
2bd7c093
PA
2285
2286 if (step || sig || valid_cont_thread)
64386c31
DJ
2287 {
2288 resume_info[0].thread
2289 = ((struct inferior_list_entry *) current_inferior)->id;
bd99dc85
PA
2290 if (step)
2291 resume_info[0].kind = resume_step;
2292 else
2293 resume_info[0].kind = resume_continue;
64386c31 2294 resume_info[0].sig = sig;
64386c31
DJ
2295 n++;
2296 }
2bd7c093
PA
2297
2298 if (!valid_cont_thread)
2299 {
95954743 2300 resume_info[n].thread = minus_one_ptid;
bd99dc85 2301 resume_info[n].kind = resume_continue;
2bd7c093
PA
2302 resume_info[n].sig = 0;
2303 n++;
2304 }
64386c31 2305
bd99dc85
PA
2306 if (!non_stop)
2307 enable_async_io ();
2308
2bd7c093 2309 (*the_target->resume) (resume_info, n);
bd99dc85
PA
2310
2311 if (non_stop)
2312 write_ok (own_buf);
2313 else
2314 {
95954743 2315 last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
d20a8ad9
PA
2316
2317 if (last_status.kind != TARGET_WAITKIND_EXITED
2318 && last_status.kind != TARGET_WAITKIND_SIGNALLED)
2319 {
2320 current_inferior->last_resume_kind = resume_stop;
2321 current_inferior->last_status = last_status;
2322 }
2323
bd99dc85
PA
2324 prepare_resume_reply (own_buf, last_ptid, &last_status);
2325 disable_async_io ();
6bd31874
JB
2326
2327 if (last_status.kind == TARGET_WAITKIND_EXITED
2328 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
2329 mourn_inferior (find_process_pid (ptid_get_pid (last_ptid)));
bd99dc85
PA
2330 }
2331}
2332
2333/* Callback for for_each_inferior. Make a new stop reply for each
2334 stopped thread. */
2335
95954743
PA
2336static int
2337queue_stop_reply_callback (struct inferior_list_entry *entry, void *arg)
bd99dc85 2338{
8336d594 2339 struct thread_info *thread = (struct thread_info *) entry;
bd99dc85 2340
8336d594
PA
2341 /* For now, assume targets that don't have this callback also don't
2342 manage the thread's last_status field. */
2343 if (the_target->thread_stopped == NULL)
95954743 2344 {
8336d594
PA
2345 /* Pass the last stop reply back to GDB, but don't notify
2346 yet. */
2347 queue_stop_reply (entry->id, &thread->last_status);
2348 }
2349 else
2350 {
2351 if (thread_stopped (thread))
2352 {
2353 if (debug_threads)
493e2a69
MS
2354 fprintf (stderr,
2355 "Reporting thread %s as already stopped with %s\n",
8336d594
PA
2356 target_pid_to_str (entry->id),
2357 target_waitstatus_to_string (&thread->last_status));
2358
d20a8ad9
PA
2359 gdb_assert (thread->last_status.kind != TARGET_WAITKIND_IGNORE);
2360
8336d594
PA
2361 /* Pass the last stop reply back to GDB, but don't notify
2362 yet. */
2363 queue_stop_reply (entry->id, &thread->last_status);
2364 }
95954743
PA
2365 }
2366
2367 return 0;
64386c31
DJ
2368}
2369
ce1a5b52
PA
2370/* Set this inferior threads's state as "want-stopped". We won't
2371 resume this thread until the client gives us another action for
2372 it. */
8336d594
PA
2373
2374static void
2375gdb_wants_thread_stopped (struct inferior_list_entry *entry)
2376{
2377 struct thread_info *thread = (struct thread_info *) entry;
2378
2379 thread->last_resume_kind = resume_stop;
2380
2381 if (thread->last_status.kind == TARGET_WAITKIND_IGNORE)
2382 {
ce1a5b52
PA
2383 /* Most threads are stopped implicitly (all-stop); tag that with
2384 signal 0. */
8336d594
PA
2385 thread->last_status.kind = TARGET_WAITKIND_STOPPED;
2386 thread->last_status.value.sig = TARGET_SIGNAL_0;
2387 }
2388}
2389
2390/* Set all threads' states as "want-stopped". */
2391
2392static void
2393gdb_wants_all_threads_stopped (void)
2394{
2395 for_each_inferior (&all_threads, gdb_wants_thread_stopped);
2396}
2397
2398/* Clear the gdb_detached flag of every process. */
2399
2400static void
2401gdb_reattached_process (struct inferior_list_entry *entry)
2402{
2403 struct process_info *process = (struct process_info *) entry;
2404
2405 process->gdb_detached = 0;
2406}
2407
5b1c542e
PA
2408/* Status handler for the '?' packet. */
2409
2410static void
2411handle_status (char *own_buf)
2412{
8336d594
PA
2413 /* GDB is connected, don't forward events to the target anymore. */
2414 for_each_inferior (&all_processes, gdb_reattached_process);
bd99dc85
PA
2415
2416 /* In non-stop mode, we must send a stop reply for each stopped
2417 thread. In all-stop mode, just send one for the first stopped
2418 thread we find. */
2419
2420 if (non_stop)
2421 {
8336d594
PA
2422 discard_queued_stop_replies (-1);
2423 find_inferior (&all_threads, queue_stop_reply_callback, NULL);
bd99dc85
PA
2424
2425 /* The first is sent immediatly. OK is sent if there is no
2426 stopped thread, which is the same handling of the vStopped
2427 packet (by design). */
2428 send_next_stop_reply (own_buf);
2429 }
5b1c542e 2430 else
bd99dc85 2431 {
7984d532 2432 pause_all (0);
fa593d66 2433 stabilize_threads ();
8336d594
PA
2434 gdb_wants_all_threads_stopped ();
2435
bd99dc85 2436 if (all_threads.head)
8336d594
PA
2437 {
2438 struct target_waitstatus status;
2439
2440 status.kind = TARGET_WAITKIND_STOPPED;
2441 status.value.sig = TARGET_SIGNAL_TRAP;
2442 prepare_resume_reply (own_buf,
2443 all_threads.head->id, &status);
2444 }
bd99dc85
PA
2445 else
2446 strcpy (own_buf, "W00");
2447 }
5b1c542e
PA
2448}
2449
dd24457d
DJ
2450static void
2451gdbserver_version (void)
2452{
c16158bc 2453 printf ("GNU gdbserver %s%s\n"
67827812 2454 "Copyright (C) 2012 Free Software Foundation, Inc.\n"
493e2a69
MS
2455 "gdbserver is free software, covered by the "
2456 "GNU General Public License.\n"
dd24457d 2457 "This gdbserver was configured as \"%s\"\n",
c16158bc 2458 PKGVERSION, version, host_name);
dd24457d
DJ
2459}
2460
0bc68c49 2461static void
c16158bc 2462gdbserver_usage (FILE *stream)
0bc68c49 2463{
c16158bc
JM
2464 fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
2465 "\tgdbserver [OPTIONS] --attach COMM PID\n"
2466 "\tgdbserver [OPTIONS] --multi COMM\n"
2467 "\n"
2468 "COMM may either be a tty device (for serial debugging), or \n"
2469 "HOST:PORT to listen for a TCP connection.\n"
2470 "\n"
2471 "Options:\n"
62709adf
PA
2472 " --debug Enable general debugging output.\n"
2473 " --remote-debug Enable remote protocol debugging output.\n"
2474 " --version Display version information and exit.\n"
03f2bd59
JK
2475 " --wrapper WRAPPER -- Run WRAPPER to start new programs.\n"
2476 " --once Exit after the first connection has "
2477 "closed.\n");
c16158bc
JM
2478 if (REPORT_BUGS_TO[0] && stream == stdout)
2479 fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
0bc68c49
DJ
2480}
2481
db42f210
PA
2482static void
2483gdbserver_show_disableable (FILE *stream)
2484{
2485 fprintf (stream, "Disableable packets:\n"
2486 " vCont \tAll vCont packets\n"
2487 " qC \tQuerying the current thread\n"
2488 " qfThreadInfo\tThread listing\n"
493e2a69
MS
2489 " Tthread \tPassing the thread specifier in the "
2490 "T stop reply packet\n"
db42f210
PA
2491 " threads \tAll of the above\n");
2492}
2493
2494
2d717e4f
DJ
2495#undef require_running
2496#define require_running(BUF) \
2497 if (!target_running ()) \
2498 { \
2499 write_enn (BUF); \
2500 break; \
2501 }
2502
95954743
PA
2503static int
2504first_thread_of (struct inferior_list_entry *entry, void *args)
2505{
2506 int pid = * (int *) args;
2507
2508 if (ptid_get_pid (entry->id) == pid)
2509 return 1;
2510
2511 return 0;
2512}
2513
2514static void
2515kill_inferior_callback (struct inferior_list_entry *entry)
2516{
2517 struct process_info *process = (struct process_info *) entry;
2518 int pid = ptid_get_pid (process->head.id);
2519
2520 kill_inferior (pid);
2521 discard_queued_stop_replies (pid);
2522}
2523
9f767825
DE
2524/* Callback for for_each_inferior to detach or kill the inferior,
2525 depending on whether we attached to it or not.
2526 We inform the user whether we're detaching or killing the process
2527 as this is only called when gdbserver is about to exit. */
2528
95954743
PA
2529static void
2530detach_or_kill_inferior_callback (struct inferior_list_entry *entry)
2531{
2532 struct process_info *process = (struct process_info *) entry;
2533 int pid = ptid_get_pid (process->head.id);
2534
2535 if (process->attached)
2536 detach_inferior (pid);
2537 else
2538 kill_inferior (pid);
2539
2540 discard_queued_stop_replies (pid);
2541}
2542
9f767825
DE
2543/* for_each_inferior callback for detach_or_kill_for_exit to print
2544 the pids of started inferiors. */
2545
2546static void
2547print_started_pid (struct inferior_list_entry *entry)
2548{
2549 struct process_info *process = (struct process_info *) entry;
2550
2551 if (! process->attached)
2552 {
2553 int pid = ptid_get_pid (process->head.id);
2554 fprintf (stderr, " %d", pid);
2555 }
2556}
2557
2558/* for_each_inferior callback for detach_or_kill_for_exit to print
2559 the pids of attached inferiors. */
2560
2561static void
2562print_attached_pid (struct inferior_list_entry *entry)
2563{
2564 struct process_info *process = (struct process_info *) entry;
2565
2566 if (process->attached)
2567 {
2568 int pid = ptid_get_pid (process->head.id);
2569 fprintf (stderr, " %d", pid);
2570 }
2571}
2572
2573/* Call this when exiting gdbserver with possible inferiors that need
2574 to be killed or detached from. */
2575
2576static void
2577detach_or_kill_for_exit (void)
2578{
2579 /* First print a list of the inferiors we will be killing/detaching.
2580 This is to assist the user, for example, in case the inferior unexpectedly
2581 dies after we exit: did we screw up or did the inferior exit on its own?
2582 Having this info will save some head-scratching. */
2583
2584 if (have_started_inferiors_p ())
2585 {
2586 fprintf (stderr, "Killing process(es):");
2587 for_each_inferior (&all_processes, print_started_pid);
2588 fprintf (stderr, "\n");
2589 }
2590 if (have_attached_inferiors_p ())
2591 {
2592 fprintf (stderr, "Detaching process(es):");
2593 for_each_inferior (&all_processes, print_attached_pid);
2594 fprintf (stderr, "\n");
2595 }
2596
2597 /* Now we can kill or detach the inferiors. */
2598
2599 for_each_inferior (&all_processes, detach_or_kill_inferior_callback);
2600}
2601
c906108c 2602int
da85418c 2603main (int argc, char *argv[])
c906108c 2604{
0729219d
DJ
2605 int bad_attach;
2606 int pid;
2d717e4f
DJ
2607 char *arg_end, *port;
2608 char **next_arg = &argv[1];
2609 int multi_mode = 0;
2610 int attach = 0;
2611 int was_running;
c906108c 2612
2d717e4f 2613 while (*next_arg != NULL && **next_arg == '-')
dd24457d 2614 {
2d717e4f
DJ
2615 if (strcmp (*next_arg, "--version") == 0)
2616 {
2617 gdbserver_version ();
2618 exit (0);
2619 }
2620 else if (strcmp (*next_arg, "--help") == 0)
2621 {
c16158bc 2622 gdbserver_usage (stdout);
2d717e4f
DJ
2623 exit (0);
2624 }
2625 else if (strcmp (*next_arg, "--attach") == 0)
2626 attach = 1;
2627 else if (strcmp (*next_arg, "--multi") == 0)
2628 multi_mode = 1;
ccd213ac
DJ
2629 else if (strcmp (*next_arg, "--wrapper") == 0)
2630 {
2631 next_arg++;
2632
2633 wrapper_argv = next_arg;
2634 while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
2635 next_arg++;
2636
2637 if (next_arg == wrapper_argv || *next_arg == NULL)
2638 {
c16158bc 2639 gdbserver_usage (stderr);
ccd213ac
DJ
2640 exit (1);
2641 }
2642
2643 /* Consume the "--". */
2644 *next_arg = NULL;
2645 }
2d717e4f
DJ
2646 else if (strcmp (*next_arg, "--debug") == 0)
2647 debug_threads = 1;
62709adf
PA
2648 else if (strcmp (*next_arg, "--remote-debug") == 0)
2649 remote_debug = 1;
db42f210
PA
2650 else if (strcmp (*next_arg, "--disable-packet") == 0)
2651 {
2652 gdbserver_show_disableable (stdout);
2653 exit (0);
2654 }
2655 else if (strncmp (*next_arg,
2656 "--disable-packet=",
2657 sizeof ("--disable-packet=") - 1) == 0)
2658 {
2659 char *packets, *tok;
2660
2661 packets = *next_arg += sizeof ("--disable-packet=") - 1;
2662 for (tok = strtok (packets, ",");
2663 tok != NULL;
2664 tok = strtok (NULL, ","))
2665 {
2666 if (strcmp ("vCont", tok) == 0)
2667 disable_packet_vCont = 1;
2668 else if (strcmp ("Tthread", tok) == 0)
2669 disable_packet_Tthread = 1;
2670 else if (strcmp ("qC", tok) == 0)
2671 disable_packet_qC = 1;
2672 else if (strcmp ("qfThreadInfo", tok) == 0)
2673 disable_packet_qfThreadInfo = 1;
2674 else if (strcmp ("threads", tok) == 0)
2675 {
2676 disable_packet_vCont = 1;
2677 disable_packet_Tthread = 1;
2678 disable_packet_qC = 1;
2679 disable_packet_qfThreadInfo = 1;
2680 }
2681 else
2682 {
2683 fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
2684 tok);
2685 gdbserver_show_disableable (stderr);
2686 exit (1);
2687 }
2688 }
2689 }
e0f9f062
DE
2690 else if (strcmp (*next_arg, "-") == 0)
2691 {
2692 /* "-" specifies a stdio connection and is a form of port
2693 specification. */
2694 *next_arg = STDIO_CONNECTION_NAME;
2695 break;
2696 }
03583c20
UW
2697 else if (strcmp (*next_arg, "--disable-randomization") == 0)
2698 disable_randomization = 1;
2699 else if (strcmp (*next_arg, "--no-disable-randomization") == 0)
2700 disable_randomization = 0;
03f2bd59
JK
2701 else if (strcmp (*next_arg, "--once") == 0)
2702 run_once = 1;
2d717e4f
DJ
2703 else
2704 {
2705 fprintf (stderr, "Unknown argument: %s\n", *next_arg);
2706 exit (1);
2707 }
dd24457d 2708
2d717e4f
DJ
2709 next_arg++;
2710 continue;
dd24457d
DJ
2711 }
2712
c5aa993b 2713 if (setjmp (toplevel))
c906108c 2714 {
c5aa993b
JM
2715 fprintf (stderr, "Exiting\n");
2716 exit (1);
c906108c
SS
2717 }
2718
2d717e4f
DJ
2719 port = *next_arg;
2720 next_arg++;
2721 if (port == NULL || (!attach && !multi_mode && *next_arg == NULL))
2722 {
c16158bc 2723 gdbserver_usage (stderr);
2d717e4f
DJ
2724 exit (1);
2725 }
2726
e0f9f062
DE
2727 /* We need to know whether the remote connection is stdio before
2728 starting the inferior. Inferiors created in this scenario have
2729 stdin,stdout redirected. So do this here before we call
2730 start_inferior. */
2731 remote_prepare (port);
2732
0729219d
DJ
2733 bad_attach = 0;
2734 pid = 0;
2d717e4f
DJ
2735
2736 /* --attach used to come after PORT, so allow it there for
2737 compatibility. */
2738 if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
45b7b345 2739 {
2d717e4f
DJ
2740 attach = 1;
2741 next_arg++;
45b7b345
DJ
2742 }
2743
2d717e4f
DJ
2744 if (attach
2745 && (*next_arg == NULL
2746 || (*next_arg)[0] == '\0'
2747 || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
2748 || *arg_end != '\0'
2749 || next_arg[1] != NULL))
2750 bad_attach = 1;
2751
2752 if (bad_attach)
dd24457d 2753 {
c16158bc 2754 gdbserver_usage (stderr);
dd24457d
DJ
2755 exit (1);
2756 }
c906108c 2757
a20d5e98 2758 initialize_async_io ();
4ce44c66 2759 initialize_low ();
219f2f23
PA
2760 if (target_supports_tracepoints ())
2761 initialize_tracepoint ();
4ce44c66 2762
bca929d3
DE
2763 own_buf = xmalloc (PBUFSIZ + 1);
2764 mem_buf = xmalloc (PBUFSIZ);
0a30fbc4 2765
2d717e4f 2766 if (pid == 0 && *next_arg != NULL)
45b7b345 2767 {
2d717e4f
DJ
2768 int i, n;
2769
2770 n = argc - (next_arg - argv);
bca929d3 2771 program_argv = xmalloc (sizeof (char *) * (n + 1));
2d717e4f 2772 for (i = 0; i < n; i++)
bca929d3 2773 program_argv[i] = xstrdup (next_arg[i]);
2d717e4f
DJ
2774 program_argv[i] = NULL;
2775
45b7b345 2776 /* Wait till we are at first instruction in program. */
5b1c542e 2777 start_inferior (program_argv);
c906108c 2778
c588c53c
MS
2779 /* We are now (hopefully) stopped at the first instruction of
2780 the target process. This assumes that the target process was
2781 successfully created. */
45b7b345 2782 }
2d717e4f
DJ
2783 else if (pid != 0)
2784 {
5b1c542e 2785 if (attach_inferior (pid) == -1)
2d717e4f
DJ
2786 error ("Attaching not supported on this target");
2787
2788 /* Otherwise succeeded. */
2789 }
45b7b345
DJ
2790 else
2791 {
5b1c542e
PA
2792 last_status.kind = TARGET_WAITKIND_EXITED;
2793 last_status.value.integer = 0;
95954743 2794 last_ptid = minus_one_ptid;
45b7b345 2795 }
c906108c 2796
311de423
PA
2797 /* Don't report shared library events on the initial connection,
2798 even if some libraries are preloaded. Avoids the "stopped by
2799 shared library event" notice on gdb side. */
2800 dlls_changed = 0;
2801
8264bb58
DJ
2802 if (setjmp (toplevel))
2803 {
f128d5e9
PA
2804 /* If something fails and longjmps while detaching or killing
2805 inferiors, we'd end up here again, stuck in an infinite loop
2806 trap. Be sure that if that happens, we exit immediately
2807 instead. */
01b17894
PA
2808 if (setjmp (toplevel) == 0)
2809 detach_or_kill_for_exit ();
2810 else
2811 fprintf (stderr, "Detach or kill failed. Exiting\n");
8264bb58
DJ
2812 exit (1);
2813 }
2814
5b1c542e
PA
2815 if (last_status.kind == TARGET_WAITKIND_EXITED
2816 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
2d717e4f
DJ
2817 was_running = 0;
2818 else
2819 was_running = 1;
2820
2821 if (!was_running && !multi_mode)
c588c53c 2822 {
2d717e4f 2823 fprintf (stderr, "No program to debug. GDBserver exiting.\n");
c588c53c
MS
2824 exit (1);
2825 }
2826
c906108c
SS
2827 while (1)
2828 {
a6f3e723 2829 noack_mode = 0;
95954743 2830 multi_process = 0;
8336d594
PA
2831 /* Be sure we're out of tfind mode. */
2832 current_traceframe = -1;
bd99dc85 2833
2d717e4f 2834 remote_open (port);
c906108c 2835
2d717e4f
DJ
2836 if (setjmp (toplevel) != 0)
2837 {
2838 /* An error occurred. */
2839 if (response_needed)
2840 {
2841 write_enn (own_buf);
2842 putpkt (own_buf);
2843 }
2844 }
2845
bd99dc85 2846 /* Wait for events. This will return when all event sources are
8336d594 2847 removed from the event loop. */
bd99dc85
PA
2848 start_event_loop ();
2849
2850 /* If an exit was requested (using the "monitor exit" command),
2851 terminate now. The only other way to get here is for
2852 getpkt to fail; close the connection and reopen it at the
2853 top of the loop. */
2854
03f2bd59 2855 if (exit_requested || run_once)
c906108c 2856 {
01b17894
PA
2857 /* If something fails and longjmps while detaching or
2858 killing inferiors, we'd end up here again, stuck in an
2859 infinite loop trap. Be sure that if that happens, we
2860 exit immediately instead. */
2861 if (setjmp (toplevel) == 0)
2862 {
2863 detach_or_kill_for_exit ();
2864 exit (0);
2865 }
2866 else
2867 {
2868 fprintf (stderr, "Detach or kill failed. Exiting\n");
2869 exit (1);
2870 }
bd99dc85 2871 }
8336d594
PA
2872
2873 fprintf (stderr,
2874 "Remote side has terminated connection. "
2875 "GDBserver will reopen the connection.\n");
2876
2877 if (tracing)
2878 {
2879 if (disconnected_tracing)
2880 {
2881 /* Try to enable non-stop/async mode, so we we can both
2882 wait for an async socket accept, and handle async
2883 target events simultaneously. There's also no point
2884 either in having the target always stop all threads,
2885 when we're going to pass signals down without
2886 informing GDB. */
2887 if (!non_stop)
2888 {
2889 if (start_non_stop (1))
2890 non_stop = 1;
2891
2892 /* Detaching implicitly resumes all threads; simply
2893 disconnecting does not. */
2894 }
2895 }
2896 else
2897 {
2898 fprintf (stderr,
2899 "Disconnected tracing disabled; stopping trace run.\n");
2900 stop_tracing ();
2901 }
2902 }
bd99dc85
PA
2903 }
2904}
01f9e8fa 2905
9f3a5c85
LM
2906/* Process options coming from Z packets for *point at address
2907 POINT_ADDR. PACKET is the packet buffer. *PACKET is updated
2908 to point to the first char after the last processed option. */
2909
2910static void
2911process_point_options (CORE_ADDR point_addr, char **packet)
2912{
2913 char *dataptr = *packet;
2914
2915 /* Check if data has the correct format. */
2916 if (*dataptr != ';')
2917 return;
2918
2919 dataptr++;
2920
2921 while (*dataptr)
2922 {
2923 switch (*dataptr)
2924 {
2925 case 'X':
2926 /* Conditional expression. */
c6030312
JB
2927 if (remote_debug)
2928 fprintf (stderr, "Found breakpoint condition.\n");
9f3a5c85
LM
2929 add_breakpoint_condition (point_addr, &dataptr);
2930 break;
2931 default:
2932 /* Unrecognized token, just skip it. */
2933 fprintf (stderr, "Unknown token %c, ignoring.\n",
2934 *dataptr);
2935 }
2936
2937 /* Skip tokens until we find one that we recognize. */
2938 while (*dataptr && *dataptr != 'X' && *dataptr != ';')
2939 dataptr++;
2940 }
2941 *packet = dataptr;
2942}
2943
bd99dc85
PA
2944/* Event loop callback that handles a serial event. The first byte in
2945 the serial buffer gets us here. We expect characters to arrive at
2946 a brisk pace, so we read the rest of the packet with a blocking
2947 getpkt call. */
01f9e8fa 2948
8336d594 2949static int
bd99dc85
PA
2950process_serial_event (void)
2951{
2952 char ch;
2953 int i = 0;
2954 int signal;
2955 unsigned int len;
764880b7 2956 int res;
bd99dc85 2957 CORE_ADDR mem_addr;
95954743 2958 int pid;
bd99dc85
PA
2959 unsigned char sig;
2960 int packet_len;
2961 int new_packet_len = -1;
2962
2963 /* Used to decide when gdbserver should exit in
2964 multi-mode/remote. */
2965 static int have_ran = 0;
2966
2967 if (!have_ran)
2968 have_ran = target_running ();
2969
2970 disable_async_io ();
2971
2972 response_needed = 0;
2973 packet_len = getpkt (own_buf);
2974 if (packet_len <= 0)
2975 {
bd99dc85 2976 remote_close ();
8336d594
PA
2977 /* Force an event loop break. */
2978 return -1;
bd99dc85
PA
2979 }
2980 response_needed = 1;
2981
2982 i = 0;
2983 ch = own_buf[i++];
2984 switch (ch)
2985 {
2986 case 'q':
2987 handle_query (own_buf, packet_len, &new_packet_len);
2988 break;
2989 case 'Q':
2990 handle_general_set (own_buf);
2991 break;
2992 case 'D':
2993 require_running (own_buf);
95954743
PA
2994
2995 if (multi_process)
2996 {
2997 i++; /* skip ';' */
2998 pid = strtol (&own_buf[i], NULL, 16);
2999 }
3000 else
3001 pid =
3002 ptid_get_pid (((struct inferior_list_entry *) current_inferior)->id);
3003
8336d594
PA
3004 if (tracing && disconnected_tracing)
3005 {
3006 struct thread_resume resume_info;
3007 struct process_info *process = find_process_pid (pid);
3008
3009 if (process == NULL)
3010 {
3011 write_enn (own_buf);
3012 break;
3013 }
3014
3015 fprintf (stderr,
3016 "Disconnected tracing in effect, "
3017 "leaving gdbserver attached to the process\n");
3018
3019 /* Make sure we're in non-stop/async mode, so we we can both
3020 wait for an async socket accept, and handle async target
3021 events simultaneously. There's also no point either in
3022 having the target stop all threads, when we're going to
3023 pass signals down without informing GDB. */
3024 if (!non_stop)
3025 {
3026 if (debug_threads)
3027 fprintf (stderr, "Forcing non-stop mode\n");
3028
3029 non_stop = 1;
3030 start_non_stop (1);
3031 }
3032
3033 process->gdb_detached = 1;
3034
3035 /* Detaching implicitly resumes all threads. */
3036 resume_info.thread = minus_one_ptid;
3037 resume_info.kind = resume_continue;
3038 resume_info.sig = 0;
3039 (*the_target->resume) (&resume_info, 1);
3040
3041 write_ok (own_buf);
3042 break; /* from switch/case */
3043 }
3044
95954743 3045 fprintf (stderr, "Detaching from process %d\n", pid);
8336d594 3046 stop_tracing ();
95954743 3047 if (detach_inferior (pid) != 0)
bd99dc85
PA
3048 write_enn (own_buf);
3049 else
3050 {
95954743 3051 discard_queued_stop_replies (pid);
bd99dc85
PA
3052 write_ok (own_buf);
3053
3054 if (extended_protocol)
c906108c 3055 {
bd99dc85
PA
3056 /* Treat this like a normal program exit. */
3057 last_status.kind = TARGET_WAITKIND_EXITED;
3058 last_status.value.integer = 0;
95954743 3059 last_ptid = pid_to_ptid (pid);
2d717e4f 3060
bd99dc85
PA
3061 current_inferior = NULL;
3062 }
3063 else
3064 {
3065 putpkt (own_buf);
3066 remote_close ();
3067
3068 /* If we are attached, then we can exit. Otherwise, we
3069 need to hang around doing nothing, until the child is
3070 gone. */
71f55dd8 3071 join_inferior (pid);
bd99dc85
PA
3072 exit (0);
3073 }
3074 }
3075 break;
3076 case '!':
3077 extended_protocol = 1;
3078 write_ok (own_buf);
3079 break;
3080 case '?':
3081 handle_status (own_buf);
3082 break;
3083 case 'H':
3084 if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
3085 {
95954743
PA
3086 ptid_t gdb_id, thread_id;
3087 int pid;
bd99dc85
PA
3088
3089 require_running (own_buf);
95954743
PA
3090
3091 gdb_id = read_ptid (&own_buf[2], NULL);
3092
3093 pid = ptid_get_pid (gdb_id);
3094
3095 if (ptid_equal (gdb_id, null_ptid)
3096 || ptid_equal (gdb_id, minus_one_ptid))
3097 thread_id = null_ptid;
3098 else if (pid != 0
3099 && ptid_equal (pid_to_ptid (pid),
3100 gdb_id))
3101 {
3102 struct thread_info *thread =
3103 (struct thread_info *) find_inferior (&all_threads,
3104 first_thread_of,
3105 &pid);
3106 if (!thread)
3107 {
3108 write_enn (own_buf);
3109 break;
3110 }
3111
3112 thread_id = ((struct inferior_list_entry *)thread)->id;
3113 }
bd99dc85
PA
3114 else
3115 {
3116 thread_id = gdb_id_to_thread_id (gdb_id);
95954743 3117 if (ptid_equal (thread_id, null_ptid))
c906108c 3118 {
a06660f7 3119 write_enn (own_buf);
c906108c
SS
3120 break;
3121 }
c906108c
SS
3122 }
3123
bd99dc85 3124 if (own_buf[1] == 'g')
c906108c 3125 {
95954743 3126 if (ptid_equal (thread_id, null_ptid))
c906108c 3127 {
bd99dc85
PA
3128 /* GDB is telling us to choose any thread. Check if
3129 the currently selected thread is still valid. If
3130 it is not, select the first available. */
3131 struct thread_info *thread =
3132 (struct thread_info *) find_inferior_id (&all_threads,
3133 general_thread);
3134 if (thread == NULL)
3135 thread_id = all_threads.head->id;
c906108c 3136 }
bd99dc85
PA
3137
3138 general_thread = thread_id;
3139 set_desired_inferior (1);
c906108c 3140 }
bd99dc85
PA
3141 else if (own_buf[1] == 'c')
3142 cont_thread = thread_id;
c906108c 3143
bd99dc85
PA
3144 write_ok (own_buf);
3145 }
3146 else
3147 {
3148 /* Silently ignore it so that gdb can extend the protocol
3149 without compatibility headaches. */
3150 own_buf[0] = '\0';
2d717e4f 3151 }
bd99dc85
PA
3152 break;
3153 case 'g':
219f2f23
PA
3154 require_running (own_buf);
3155 if (current_traceframe >= 0)
3156 {
3157 struct regcache *regcache = new_register_cache ();
3158
3159 if (fetch_traceframe_registers (current_traceframe,
3160 regcache, -1) == 0)
3161 registers_to_string (regcache, own_buf);
3162 else
3163 write_enn (own_buf);
3164 free_register_cache (regcache);
3165 }
3166 else
3167 {
3168 struct regcache *regcache;
3169
3170 set_desired_inferior (1);
3171 regcache = get_thread_regcache (current_inferior, 1);
3172 registers_to_string (regcache, own_buf);
3173 }
bd99dc85
PA
3174 break;
3175 case 'G':
219f2f23
PA
3176 require_running (own_buf);
3177 if (current_traceframe >= 0)
3178 write_enn (own_buf);
3179 else
3180 {
442ea881
PA
3181 struct regcache *regcache;
3182
442ea881
PA
3183 set_desired_inferior (1);
3184 regcache = get_thread_regcache (current_inferior, 1);
3185 registers_from_string (regcache, &own_buf[1]);
3186 write_ok (own_buf);
3187 }
bd99dc85
PA
3188 break;
3189 case 'm':
3190 require_running (own_buf);
3191 decode_m_packet (&own_buf[1], &mem_addr, &len);
764880b7
PA
3192 res = gdb_read_memory (mem_addr, mem_buf, len);
3193 if (res < 0)
bd99dc85 3194 write_enn (own_buf);
764880b7
PA
3195 else
3196 convert_int_to_ascii (mem_buf, own_buf, res);
bd99dc85
PA
3197 break;
3198 case 'M':
3199 require_running (own_buf);
fa593d66 3200 decode_M_packet (&own_buf[1], &mem_addr, &len, &mem_buf);
90d74c30 3201 if (gdb_write_memory (mem_addr, mem_buf, len) == 0)
bd99dc85
PA
3202 write_ok (own_buf);
3203 else
3204 write_enn (own_buf);
3205 break;
3206 case 'X':
3207 require_running (own_buf);
3208 if (decode_X_packet (&own_buf[1], packet_len - 1,
fa593d66 3209 &mem_addr, &len, &mem_buf) < 0
90d74c30 3210 || gdb_write_memory (mem_addr, mem_buf, len) != 0)
bd99dc85
PA
3211 write_enn (own_buf);
3212 else
3213 write_ok (own_buf);
3214 break;
3215 case 'C':
3216 require_running (own_buf);
3217 convert_ascii_to_int (own_buf + 1, &sig, 1);
3218 if (target_signal_to_host_p (sig))
3219 signal = target_signal_to_host (sig);
3220 else
3221 signal = 0;
3222 myresume (own_buf, 0, signal);
3223 break;
3224 case 'S':
3225 require_running (own_buf);
3226 convert_ascii_to_int (own_buf + 1, &sig, 1);
3227 if (target_signal_to_host_p (sig))
3228 signal = target_signal_to_host (sig);
3229 else
3230 signal = 0;
3231 myresume (own_buf, 1, signal);
3232 break;
3233 case 'c':
3234 require_running (own_buf);
3235 signal = 0;
3236 myresume (own_buf, 0, signal);
3237 break;
3238 case 's':
3239 require_running (own_buf);
3240 signal = 0;
3241 myresume (own_buf, 1, signal);
3242 break;
c6314022
AR
3243 case 'Z': /* insert_ ... */
3244 /* Fallthrough. */
3245 case 'z': /* remove_ ... */
bd99dc85
PA
3246 {
3247 char *lenptr;
3248 char *dataptr;
3249 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
3250 int len = strtol (lenptr + 1, &dataptr, 16);
3251 char type = own_buf[1];
c6314022 3252 int res;
d993e290 3253 const int insert = ch == 'Z';
c6314022 3254
d993e290
PA
3255 /* Default to unrecognized/unsupported. */
3256 res = 1;
3257 switch (type)
3258 {
3259 case '0': /* software-breakpoint */
3260 case '1': /* hardware-breakpoint */
3261 case '2': /* write watchpoint */
3262 case '3': /* read watchpoint */
3263 case '4': /* access watchpoint */
3264 require_running (own_buf);
3265 if (insert && the_target->insert_point != NULL)
9f3a5c85
LM
3266 {
3267 /* Insert the breakpoint. If it is already inserted, nothing
3268 will take place. */
3269 res = (*the_target->insert_point) (type, addr, len);
3270
3271 /* GDB may have sent us a list of *point parameters to be
3272 evaluated on the target's side. Read such list here. If we
3273 already have a list of parameters, GDB is telling us to drop
3274 that list and use this one instead. */
3275 if (!res && (type == '0' || type == '1'))
3276 {
3277 /* Remove previous conditions. */
3278 clear_gdb_breakpoint_conditions (addr);
3279 process_point_options (addr, &dataptr);
3280 }
3281 }
d993e290
PA
3282 else if (!insert && the_target->remove_point != NULL)
3283 res = (*the_target->remove_point) (type, addr, len);
3284 break;
3285 default:
3286 break;
3287 }
bd99dc85 3288
c6314022
AR
3289 if (res == 0)
3290 write_ok (own_buf);
3291 else if (res == 1)
3292 /* Unsupported. */
3293 own_buf[0] = '\0';
bd99dc85 3294 else
c6314022 3295 write_enn (own_buf);
bd99dc85
PA
3296 break;
3297 }
3298 case 'k':
3299 response_needed = 0;
3300 if (!target_running ())
95954743
PA
3301 /* The packet we received doesn't make sense - but we can't
3302 reply to it, either. */
8336d594 3303 return 0;
c906108c 3304
95954743
PA
3305 fprintf (stderr, "Killing all inferiors\n");
3306 for_each_inferior (&all_processes, kill_inferior_callback);
c906108c 3307
bd99dc85
PA
3308 /* When using the extended protocol, we wait with no program
3309 running. The traditional protocol will exit instead. */
3310 if (extended_protocol)
3311 {
3312 last_status.kind = TARGET_WAITKIND_EXITED;
3313 last_status.value.sig = TARGET_SIGNAL_KILL;
8336d594 3314 return 0;
bd99dc85
PA
3315 }
3316 else
8336d594
PA
3317 exit (0);
3318
bd99dc85
PA
3319 case 'T':
3320 {
95954743 3321 ptid_t gdb_id, thread_id;
bd99dc85
PA
3322
3323 require_running (own_buf);
95954743
PA
3324
3325 gdb_id = read_ptid (&own_buf[1], NULL);
bd99dc85 3326 thread_id = gdb_id_to_thread_id (gdb_id);
95954743 3327 if (ptid_equal (thread_id, null_ptid))
bd99dc85
PA
3328 {
3329 write_enn (own_buf);
3330 break;
3331 }
3332
3333 if (mythread_alive (thread_id))
3334 write_ok (own_buf);
3335 else
3336 write_enn (own_buf);
3337 }
3338 break;
3339 case 'R':
3340 response_needed = 0;
3341
3342 /* Restarting the inferior is only supported in the extended
3343 protocol. */
3344 if (extended_protocol)
3345 {
3346 if (target_running ())
95954743
PA
3347 for_each_inferior (&all_processes,
3348 kill_inferior_callback);
bd99dc85
PA
3349 fprintf (stderr, "GDBserver restarting\n");
3350
3351 /* Wait till we are at 1st instruction in prog. */
3352 if (program_argv != NULL)
3353 start_inferior (program_argv);
3354 else
3355 {
3356 last_status.kind = TARGET_WAITKIND_EXITED;
3357 last_status.value.sig = TARGET_SIGNAL_KILL;
3358 }
8336d594 3359 return 0;
c906108c
SS
3360 }
3361 else
3362 {
bd99dc85
PA
3363 /* It is a request we don't understand. Respond with an
3364 empty packet so that gdb knows that we don't support this
3365 request. */
3366 own_buf[0] = '\0';
3367 break;
3368 }
3369 case 'v':
3370 /* Extended (long) request. */
3371 handle_v_requests (own_buf, packet_len, &new_packet_len);
3372 break;
3373
3374 default:
3375 /* It is a request we don't understand. Respond with an empty
3376 packet so that gdb knows that we don't support this
3377 request. */
3378 own_buf[0] = '\0';
3379 break;
3380 }
3381
3382 if (new_packet_len != -1)
3383 putpkt_binary (own_buf, new_packet_len);
3384 else
3385 putpkt (own_buf);
3386
3387 response_needed = 0;
3388
3389 if (!extended_protocol && have_ran && !target_running ())
3390 {
3391 /* In non-stop, defer exiting until GDB had a chance to query
3392 the whole vStopped list (until it gets an OK). */
3393 if (!notif_queue)
3394 {
3395 fprintf (stderr, "GDBserver exiting\n");
c906108c 3396 remote_close ();
bd99dc85 3397 exit (0);
c906108c
SS
3398 }
3399 }
8336d594
PA
3400
3401 if (exit_requested)
3402 return -1;
3403
3404 return 0;
c906108c 3405}
bd99dc85
PA
3406
3407/* Event-loop callback for serial events. */
3408
8336d594 3409int
bd99dc85
PA
3410handle_serial_event (int err, gdb_client_data client_data)
3411{
3412 if (debug_threads)
3413 fprintf (stderr, "handling possible serial event\n");
3414
3415 /* Really handle it. */
8336d594
PA
3416 if (process_serial_event () < 0)
3417 return -1;
bd99dc85
PA
3418
3419 /* Be sure to not change the selected inferior behind GDB's back.
3420 Important in the non-stop mode asynchronous protocol. */
3421 set_desired_inferior (1);
8336d594
PA
3422
3423 return 0;
bd99dc85
PA
3424}
3425
3426/* Event-loop callback for target events. */
3427
8336d594 3428int
bd99dc85
PA
3429handle_target_event (int err, gdb_client_data client_data)
3430{
3431 if (debug_threads)
3432 fprintf (stderr, "handling possible target event\n");
3433
95954743
PA
3434 last_ptid = mywait (minus_one_ptid, &last_status,
3435 TARGET_WNOHANG, 1);
bd99dc85
PA
3436
3437 if (last_status.kind != TARGET_WAITKIND_IGNORE)
3438 {
8336d594
PA
3439 int pid = ptid_get_pid (last_ptid);
3440 struct process_info *process = find_process_pid (pid);
3441 int forward_event = !gdb_connected () || process->gdb_detached;
3442
3443 if (last_status.kind == TARGET_WAITKIND_EXITED
3444 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
f9e39928
PA
3445 {
3446 mark_breakpoints_out (process);
3447 mourn_inferior (process);
3448 }
ce1a5b52 3449 else
d20a8ad9
PA
3450 {
3451 /* We're reporting this thread as stopped. Update its
3452 "want-stopped" state to what the client wants, until it
3453 gets a new resume action. */
3454 current_inferior->last_resume_kind = resume_stop;
3455 current_inferior->last_status = last_status;
3456 }
8336d594
PA
3457
3458 if (forward_event)
3459 {
3460 if (!target_running ())
3461 {
3462 /* The last process exited. We're done. */
3463 exit (0);
3464 }
3465
3466 if (last_status.kind == TARGET_WAITKIND_STOPPED)
3467 {
3468 /* A thread stopped with a signal, but gdb isn't
3469 connected to handle it. Pass it down to the
3470 inferior, as if it wasn't being traced. */
3471 struct thread_resume resume_info;
3472
3473 if (debug_threads)
3474 fprintf (stderr,
3475 "GDB not connected; forwarding event %d for [%s]\n",
3476 (int) last_status.kind,
3477 target_pid_to_str (last_ptid));
3478
3479 resume_info.thread = last_ptid;
3480 resume_info.kind = resume_continue;
30d50328 3481 resume_info.sig = target_signal_to_host (last_status.value.sig);
8336d594
PA
3482 (*the_target->resume) (&resume_info, 1);
3483 }
3484 else if (debug_threads)
3485 fprintf (stderr, "GDB not connected; ignoring event %d for [%s]\n",
3486 (int) last_status.kind,
3487 target_pid_to_str (last_ptid));
3488 }
3489 else
3490 {
3491 /* Something interesting. Tell GDB about it. */
3492 push_event (last_ptid, &last_status);
3493 }
bd99dc85
PA
3494 }
3495
3496 /* Be sure to not change the selected inferior behind GDB's back.
3497 Important in the non-stop mode asynchronous protocol. */
3498 set_desired_inferior (1);
8336d594
PA
3499
3500 return 0;
bd99dc85 3501}
This page took 1.157182 seconds and 4 git commands to generate.