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