* linespec.c (find_method): Add new not_found_ptr parameter to
[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,
0fb0cc75 3 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
19
20#include "server.h"
21
68070c10 22#if HAVE_UNISTD_H
a9fa9f7d 23#include <unistd.h>
68070c10
PA
24#endif
25#if HAVE_SIGNAL_H
a9fa9f7d 26#include <signal.h>
68070c10 27#endif
b80864fb 28#if HAVE_SYS_WAIT_H
a9fa9f7d 29#include <sys/wait.h>
b80864fb 30#endif
ec56be1b
PA
31#if HAVE_MALLOC_H
32#include <malloc.h>
33#endif
a9fa9f7d 34
95954743
PA
35ptid_t cont_thread;
36ptid_t general_thread;
37ptid_t step_thread;
5b1c542e 38
0d62e5e8
DJ
39int server_waiting;
40
2d717e4f 41static int extended_protocol;
2d717e4f
DJ
42static int response_needed;
43static int exit_requested;
44
95954743 45int multi_process;
bd99dc85
PA
46int non_stop;
47
ccd213ac 48static char **program_argv, **wrapper_argv;
2d717e4f 49
c74d0ad8
DJ
50/* Enable miscellaneous debugging output. The name is historical - it
51 was originally used to debug LinuxThreads support. */
52int debug_threads;
53
89be2091
DJ
54int pass_signals[TARGET_SIGNAL_LAST];
55
c906108c 56jmp_buf toplevel;
c906108c 57
9b4b61c8
UW
58const char *gdbserver_xmltarget;
59
a9fa9f7d
DJ
60/* The PID of the originally created or attached inferior. Used to
61 send signals to the process when GDB sends us an asynchronous interrupt
62 (user hitting Control-C in the client), and to wait for the child to exit
63 when no longer debugging it. */
64
a1928bad 65unsigned long signal_pid;
a9fa9f7d 66
290fadea
RS
67#ifdef SIGTTOU
68/* A file descriptor for the controlling terminal. */
69int terminal_fd;
70
71/* TERMINAL_FD's original foreground group. */
72pid_t old_foreground_pgrp;
73
74/* Hand back terminal ownership to the original foreground group. */
75
76static void
77restore_old_foreground_pgrp (void)
78{
79 tcsetpgrp (terminal_fd, old_foreground_pgrp);
80}
81#endif
82
ec56be1b
PA
83/* Set if you want to disable optional thread related packets support
84 in gdbserver, for the sake of testing GDB against stubs that don't
85 support them. */
86int disable_packet_vCont;
87int disable_packet_Tthread;
88int disable_packet_qC;
89int disable_packet_qfThreadInfo;
90
5b1c542e
PA
91/* Last status reported to GDB. */
92static struct target_waitstatus last_status;
95954743 93static ptid_t last_ptid;
5b1c542e 94
bd99dc85
PA
95static char *own_buf;
96static unsigned char *mem_buf;
97
98/* Structure holding information relative to a single stop reply. We
99 keep a queue of these (really a singly-linked list) to push to GDB
100 in non-stop mode. */
101struct vstop_notif
102{
103 /* Pointer to next in list. */
104 struct vstop_notif *next;
105
106 /* Thread or process that got the event. */
95954743 107 ptid_t ptid;
bd99dc85
PA
108
109 /* Event info. */
110 struct target_waitstatus status;
111};
112
113/* The pending stop replies list head. */
114static struct vstop_notif *notif_queue = NULL;
115
116/* Put a stop reply to the stop reply queue. */
117
118static void
95954743 119queue_stop_reply (ptid_t ptid, struct target_waitstatus *status)
bd99dc85
PA
120{
121 struct vstop_notif *new_notif;
122
123 new_notif = malloc (sizeof (*new_notif));
124 new_notif->next = NULL;
125 new_notif->ptid = ptid;
126 new_notif->status = *status;
127
128 if (notif_queue)
129 {
130 struct vstop_notif *tail;
131 for (tail = notif_queue;
132 tail && tail->next;
133 tail = tail->next)
134 ;
135 tail->next = new_notif;
136 }
137 else
138 notif_queue = new_notif;
139
140 if (remote_debug)
141 {
142 int i = 0;
143 struct vstop_notif *n;
144
145 for (n = notif_queue; n; n = n->next)
146 i++;
147
148 fprintf (stderr, "pending stop replies: %d\n", i);
149 }
150}
151
152/* Place an event in the stop reply queue, and push a notification if
153 we aren't sending one yet. */
154
155void
95954743 156push_event (ptid_t ptid, struct target_waitstatus *status)
bd99dc85
PA
157{
158 queue_stop_reply (ptid, status);
159
160 /* If this is the first stop reply in the queue, then inform GDB
161 about it, by sending a Stop notification. */
162 if (notif_queue->next == NULL)
163 {
164 char *p = own_buf;
165 strcpy (p, "Stop:");
166 p += strlen (p);
167 prepare_resume_reply (p,
168 notif_queue->ptid, &notif_queue->status);
169 putpkt_notif (own_buf);
170 }
171}
172
95954743
PA
173/* Get rid of the currently pending stop replies for PID. If PID is
174 -1, then apply to all processes. */
bd99dc85
PA
175
176static void
95954743 177discard_queued_stop_replies (int pid)
bd99dc85 178{
95954743 179 struct vstop_notif *prev = NULL, *reply, *next;
bd99dc85 180
95954743 181 for (reply = notif_queue; reply; reply = next)
bd99dc85 182 {
95954743
PA
183 next = reply->next;
184
185 if (pid == -1
186 || ptid_get_pid (reply->ptid) == pid)
187 {
188 if (reply == notif_queue)
189 notif_queue = next;
190 else
191 prev->next = reply->next;
bd99dc85 192
95954743
PA
193 free (reply);
194 }
195 else
196 prev = reply;
bd99dc85
PA
197 }
198}
199
200/* If there are more stop replies to push, push one now. */
201
202static void
203send_next_stop_reply (char *own_buf)
204{
205 if (notif_queue)
206 prepare_resume_reply (own_buf,
207 notif_queue->ptid,
208 &notif_queue->status);
209 else
210 write_ok (own_buf);
211}
212
2d717e4f
DJ
213static int
214target_running (void)
215{
216 return all_threads.head != NULL;
217}
218
fc620387 219static int
5b1c542e 220start_inferior (char **argv)
c906108c 221{
ccd213ac 222 char **new_argv = argv;
2d717e4f 223
ccd213ac
DJ
224 if (wrapper_argv != NULL)
225 {
226 int i, count = 1;
227
228 for (i = 0; wrapper_argv[i] != NULL; i++)
229 count++;
230 for (i = 0; argv[i] != NULL; i++)
231 count++;
232 new_argv = alloca (sizeof (char *) * count);
233 count = 0;
234 for (i = 0; wrapper_argv[i] != NULL; i++)
235 new_argv[count++] = wrapper_argv[i];
236 for (i = 0; argv[i] != NULL; i++)
237 new_argv[count++] = argv[i];
238 new_argv[count] = NULL;
239 }
240
b80864fb 241#ifdef SIGTTOU
a9fa9f7d
DJ
242 signal (SIGTTOU, SIG_DFL);
243 signal (SIGTTIN, SIG_DFL);
b80864fb 244#endif
a9fa9f7d 245
ccd213ac 246 signal_pid = create_inferior (new_argv[0], new_argv);
0d62e5e8 247
c588c53c
MS
248 /* FIXME: we don't actually know at this point that the create
249 actually succeeded. We won't know that until we wait. */
a1928bad 250 fprintf (stderr, "Process %s created; pid = %ld\n", argv[0],
a9fa9f7d 251 signal_pid);
b80864fb 252 fflush (stderr);
a9fa9f7d 253
b80864fb 254#ifdef SIGTTOU
a9fa9f7d
DJ
255 signal (SIGTTOU, SIG_IGN);
256 signal (SIGTTIN, SIG_IGN);
290fadea
RS
257 terminal_fd = fileno (stderr);
258 old_foreground_pgrp = tcgetpgrp (terminal_fd);
259 tcsetpgrp (terminal_fd, signal_pid);
260 atexit (restore_old_foreground_pgrp);
b80864fb 261#endif
c906108c 262
ccd213ac
DJ
263 if (wrapper_argv != NULL)
264 {
265 struct thread_resume resume_info;
95954743 266 ptid_t ptid;
ccd213ac 267
95954743 268 resume_info.thread = pid_to_ptid (signal_pid);
bd99dc85 269 resume_info.kind = resume_continue;
ccd213ac 270 resume_info.sig = 0;
ccd213ac 271
95954743 272 ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
bd99dc85 273
5b1c542e
PA
274 if (last_status.kind != TARGET_WAITKIND_STOPPED)
275 return signal_pid;
ccd213ac
DJ
276
277 do
278 {
2bd7c093 279 (*the_target->resume) (&resume_info, 1);
ccd213ac 280
95954743 281 mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
5b1c542e
PA
282 if (last_status.kind != TARGET_WAITKIND_STOPPED)
283 return signal_pid;
ccd213ac 284 }
5b1c542e 285 while (last_status.value.sig != TARGET_SIGNAL_TRAP);
ccd213ac 286
5b1c542e 287 return signal_pid;
ccd213ac
DJ
288 }
289
5b1c542e
PA
290 /* Wait till we are at 1st instruction in program, return new pid
291 (assuming success). */
95954743 292 last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
5b1c542e
PA
293
294 return signal_pid;
c906108c
SS
295}
296
45b7b345 297static int
5b1c542e 298attach_inferior (int pid)
45b7b345
DJ
299{
300 /* myattach should return -1 if attaching is unsupported,
301 0 if it succeeded, and call error() otherwise. */
a9fa9f7d 302
45b7b345
DJ
303 if (myattach (pid) != 0)
304 return -1;
305
6910d122 306 fprintf (stderr, "Attached; pid = %d\n", pid);
b80864fb 307 fflush (stderr);
6910d122 308
a9fa9f7d
DJ
309 /* FIXME - It may be that we should get the SIGNAL_PID from the
310 attach function, so that it can be the main thread instead of
311 whichever we were told to attach to. */
312 signal_pid = pid;
313
bd99dc85
PA
314 if (!non_stop)
315 {
95954743 316 last_ptid = mywait (pid_to_ptid (pid), &last_status, 0, 0);
bd99dc85
PA
317
318 /* GDB knows to ignore the first SIGSTOP after attaching to a running
319 process using the "attach" command, but this is different; it's
320 just using "target remote". Pretend it's just starting up. */
321 if (last_status.kind == TARGET_WAITKIND_STOPPED
322 && last_status.value.sig == TARGET_SIGNAL_STOP)
323 last_status.value.sig = TARGET_SIGNAL_TRAP;
324 }
9db87ebd 325
45b7b345
DJ
326 return 0;
327}
328
c906108c 329extern int remote_debug;
ce3a066d 330
0876f84a
DJ
331/* Decode a qXfer read request. Return 0 if everything looks OK,
332 or -1 otherwise. */
333
334static int
335decode_xfer_read (char *buf, char **annex, CORE_ADDR *ofs, unsigned int *len)
336{
337 /* Extract and NUL-terminate the annex. */
338 *annex = buf;
339 while (*buf && *buf != ':')
340 buf++;
341 if (*buf == '\0')
342 return -1;
343 *buf++ = 0;
344
0e7f50da 345 /* After the read marker and annex, qXfer looks like a
0876f84a
DJ
346 traditional 'm' packet. */
347 decode_m_packet (buf, ofs, len);
348
349 return 0;
350}
351
352/* Write the response to a successful qXfer read. Returns the
353 length of the (binary) data stored in BUF, corresponding
354 to as much of DATA/LEN as we could fit. IS_MORE controls
355 the first character of the response. */
356static int
23181151 357write_qxfer_response (char *buf, const void *data, int len, int is_more)
0876f84a
DJ
358{
359 int out_len;
360
361 if (is_more)
362 buf[0] = 'm';
363 else
364 buf[0] = 'l';
365
366 return remote_escape_output (data, len, (unsigned char *) buf + 1, &out_len,
367 PBUFSIZ - 2) + 1;
368}
369
89be2091
DJ
370/* Handle all of the extended 'Q' packets. */
371void
372handle_general_set (char *own_buf)
373{
374 if (strncmp ("QPassSignals:", own_buf, strlen ("QPassSignals:")) == 0)
375 {
376 int numsigs = (int) TARGET_SIGNAL_LAST, i;
377 const char *p = own_buf + strlen ("QPassSignals:");
378 CORE_ADDR cursig;
379
380 p = decode_address_to_semicolon (&cursig, p);
381 for (i = 0; i < numsigs; i++)
382 {
383 if (i == cursig)
384 {
385 pass_signals[i] = 1;
386 if (*p == '\0')
387 /* Keep looping, to clear the remaining signals. */
388 cursig = -1;
389 else
390 p = decode_address_to_semicolon (&cursig, p);
391 }
392 else
393 pass_signals[i] = 0;
394 }
395 strcpy (own_buf, "OK");
396 return;
397 }
398
a6f3e723
SL
399 if (strcmp (own_buf, "QStartNoAckMode") == 0)
400 {
401 if (remote_debug)
402 {
403 fprintf (stderr, "[noack mode enabled]\n");
404 fflush (stderr);
405 }
406
407 noack_mode = 1;
408 write_ok (own_buf);
409 return;
410 }
411
bd99dc85
PA
412 if (strncmp (own_buf, "QNonStop:", 9) == 0)
413 {
414 char *mode = own_buf + 9;
415 int req = -1;
416 char *req_str;
417
418 if (strcmp (mode, "0") == 0)
419 req = 0;
420 else if (strcmp (mode, "1") == 0)
421 req = 1;
422 else
423 {
424 /* We don't know what this mode is, so complain to
425 GDB. */
426 fprintf (stderr, "Unknown non-stop mode requested: %s\n",
427 own_buf);
428 write_enn (own_buf);
429 return;
430 }
431
432 req_str = req ? "non-stop" : "all-stop";
433 if (start_non_stop (req) != 0)
434 {
435 fprintf (stderr, "Setting %s mode failed\n", req_str);
436 write_enn (own_buf);
437 return;
438 }
439
440 non_stop = req;
441
442 if (remote_debug)
443 fprintf (stderr, "[%s mode enabled]\n", req_str);
444
445 write_ok (own_buf);
446 return;
447 }
448
89be2091
DJ
449 /* Otherwise we didn't know what packet it was. Say we didn't
450 understand it. */
451 own_buf[0] = 0;
452}
453
23181151 454static const char *
fb1e4ffc 455get_features_xml (const char *annex)
23181151 456{
9b4b61c8
UW
457 /* gdbserver_xmltarget defines what to return when looking
458 for the "target.xml" file. Its contents can either be
459 verbatim XML code (prefixed with a '@') or else the name
460 of the actual XML file to be used in place of "target.xml".
fb1e4ffc 461
9b4b61c8
UW
462 This variable is set up from the auto-generated
463 init_registers_... routine for the current target. */
fb1e4ffc 464
9b4b61c8 465 if (gdbserver_xmltarget
221c031f 466 && strcmp (annex, "target.xml") == 0)
23181151 467 {
9b4b61c8
UW
468 if (*gdbserver_xmltarget == '@')
469 return gdbserver_xmltarget + 1;
23181151 470 else
9b4b61c8 471 annex = gdbserver_xmltarget;
23181151
DJ
472 }
473
9b4b61c8
UW
474#ifdef USE_XML
475 {
476 extern const char *const xml_builtin[][2];
477 int i;
478
479 /* Look for the annex. */
480 for (i = 0; xml_builtin[i][0] != NULL; i++)
481 if (strcmp (annex, xml_builtin[i][0]) == 0)
482 break;
483
484 if (xml_builtin[i][0] != NULL)
485 return xml_builtin[i][1];
486 }
487#endif
488
489 return NULL;
23181151
DJ
490}
491
c74d0ad8
DJ
492void
493monitor_show_help (void)
494{
495 monitor_output ("The following monitor commands are supported:\n");
496 monitor_output (" set debug <0|1>\n");
1b3f6016 497 monitor_output (" Enable general debugging messages\n");
c74d0ad8
DJ
498 monitor_output (" set remote-debug <0|1>\n");
499 monitor_output (" Enable remote protocol debugging messages\n");
ecd7ecbc
DJ
500 monitor_output (" exit\n");
501 monitor_output (" Quit GDBserver\n");
c74d0ad8
DJ
502}
503
08388c79
DE
504/* Subroutine of handle_search_memory to simplify it. */
505
506static int
507handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len,
508 gdb_byte *pattern, unsigned pattern_len,
509 gdb_byte *search_buf,
510 unsigned chunk_size, unsigned search_buf_size,
511 CORE_ADDR *found_addrp)
512{
513 /* Prime the search buffer. */
514
515 if (read_inferior_memory (start_addr, search_buf, search_buf_size) != 0)
516 {
5e1471f5 517 warning ("Unable to access target memory at 0x%lx, halting search.",
08388c79
DE
518 (long) start_addr);
519 return -1;
520 }
521
522 /* Perform the search.
523
524 The loop is kept simple by allocating [N + pattern-length - 1] bytes.
525 When we've scanned N bytes we copy the trailing bytes to the start and
526 read in another N bytes. */
527
528 while (search_space_len >= pattern_len)
529 {
530 gdb_byte *found_ptr;
531 unsigned nr_search_bytes = (search_space_len < search_buf_size
532 ? search_space_len
533 : search_buf_size);
534
535 found_ptr = memmem (search_buf, nr_search_bytes, pattern, pattern_len);
536
537 if (found_ptr != NULL)
538 {
539 CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
540 *found_addrp = found_addr;
541 return 1;
542 }
543
544 /* Not found in this chunk, skip to next chunk. */
545
546 /* Don't let search_space_len wrap here, it's unsigned. */
547 if (search_space_len >= chunk_size)
548 search_space_len -= chunk_size;
549 else
550 search_space_len = 0;
551
552 if (search_space_len >= pattern_len)
553 {
554 unsigned keep_len = search_buf_size - chunk_size;
555 CORE_ADDR read_addr = start_addr + keep_len;
556 int nr_to_read;
557
558 /* Copy the trailing part of the previous iteration to the front
559 of the buffer for the next iteration. */
560 memcpy (search_buf, search_buf + chunk_size, keep_len);
561
562 nr_to_read = (search_space_len - keep_len < chunk_size
563 ? search_space_len - keep_len
564 : chunk_size);
565
566 if (read_inferior_memory (read_addr, search_buf + keep_len,
567 nr_to_read) != 0)
568 {
5e1471f5 569 warning ("Unable to access target memory at 0x%lx, halting search.",
08388c79
DE
570 (long) read_addr);
571 return -1;
572 }
573
574 start_addr += chunk_size;
575 }
576 }
577
578 /* Not found. */
579
580 return 0;
581}
582
583/* Handle qSearch:memory packets. */
584
585static void
586handle_search_memory (char *own_buf, int packet_len)
587{
588 CORE_ADDR start_addr;
589 CORE_ADDR search_space_len;
590 gdb_byte *pattern;
591 unsigned int pattern_len;
592 /* NOTE: also defined in find.c testcase. */
593#define SEARCH_CHUNK_SIZE 16000
594 const unsigned chunk_size = SEARCH_CHUNK_SIZE;
595 /* Buffer to hold memory contents for searching. */
596 gdb_byte *search_buf;
597 unsigned search_buf_size;
598 int found;
599 CORE_ADDR found_addr;
600 int cmd_name_len = sizeof ("qSearch:memory:") - 1;
601
aef93bd7 602 pattern = malloc (packet_len);
08388c79
DE
603 if (pattern == NULL)
604 {
5e1471f5 605 error ("Unable to allocate memory to perform the search");
08388c79
DE
606 strcpy (own_buf, "E00");
607 return;
608 }
609 if (decode_search_memory_packet (own_buf + cmd_name_len,
610 packet_len - cmd_name_len,
611 &start_addr, &search_space_len,
612 pattern, &pattern_len) < 0)
613 {
614 free (pattern);
5e1471f5 615 error ("Error in parsing qSearch:memory packet");
08388c79
DE
616 strcpy (own_buf, "E00");
617 return;
618 }
619
620 search_buf_size = chunk_size + pattern_len - 1;
621
622 /* No point in trying to allocate a buffer larger than the search space. */
623 if (search_space_len < search_buf_size)
624 search_buf_size = search_space_len;
625
aef93bd7 626 search_buf = malloc (search_buf_size);
08388c79
DE
627 if (search_buf == NULL)
628 {
629 free (pattern);
5e1471f5 630 error ("Unable to allocate memory to perform the search");
08388c79
DE
631 strcpy (own_buf, "E00");
632 return;
633 }
634
635 found = handle_search_memory_1 (start_addr, search_space_len,
636 pattern, pattern_len,
637 search_buf, chunk_size, search_buf_size,
638 &found_addr);
639
640 if (found > 0)
641 sprintf (own_buf, "1,%lx", (long) found_addr);
642 else if (found == 0)
643 strcpy (own_buf, "0");
644 else
645 strcpy (own_buf, "E00");
646
647 free (search_buf);
648 free (pattern);
649}
650
2d717e4f
DJ
651#define require_running(BUF) \
652 if (!target_running ()) \
653 { \
654 write_enn (BUF); \
655 return; \
656 }
657
ce3a066d
DJ
658/* Handle all of the extended 'q' packets. */
659void
0e7f50da 660handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
ce3a066d 661{
0d62e5e8
DJ
662 static struct inferior_list_entry *thread_ptr;
663
bb63802a 664 /* Reply the current thread id. */
db42f210 665 if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC)
bb63802a 666 {
95954743 667 ptid_t gdb_id;
2d717e4f 668 require_running (own_buf);
bd99dc85 669
95954743
PA
670 if (!ptid_equal (general_thread, null_ptid)
671 && !ptid_equal (general_thread, minus_one_ptid))
bd99dc85
PA
672 gdb_id = general_thread;
673 else
674 {
675 thread_ptr = all_threads.head;
676 gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
677 }
678
95954743
PA
679 sprintf (own_buf, "QC");
680 own_buf += 2;
681 own_buf = write_ptid (own_buf, gdb_id);
bb63802a
UW
682 return;
683 }
684
ce3a066d
DJ
685 if (strcmp ("qSymbol::", own_buf) == 0)
686 {
2d717e4f 687 if (target_running () && the_target->look_up_symbols != NULL)
2f2893d9
DJ
688 (*the_target->look_up_symbols) ();
689
ce3a066d
DJ
690 strcpy (own_buf, "OK");
691 return;
692 }
693
db42f210 694 if (!disable_packet_qfThreadInfo)
0d62e5e8 695 {
db42f210 696 if (strcmp ("qfThreadInfo", own_buf) == 0)
0d62e5e8 697 {
95954743
PA
698 ptid_t gdb_id;
699
db42f210
PA
700 require_running (own_buf);
701 thread_ptr = all_threads.head;
95954743
PA
702
703 *own_buf++ = 'm';
704 gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
705 write_ptid (own_buf, gdb_id);
0d62e5e8
DJ
706 thread_ptr = thread_ptr->next;
707 return;
708 }
db42f210
PA
709
710 if (strcmp ("qsThreadInfo", own_buf) == 0)
0d62e5e8 711 {
95954743
PA
712 ptid_t gdb_id;
713
db42f210
PA
714 require_running (own_buf);
715 if (thread_ptr != NULL)
716 {
95954743
PA
717 *own_buf++ = 'm';
718 gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
719 write_ptid (own_buf, gdb_id);
db42f210
PA
720 thread_ptr = thread_ptr->next;
721 return;
722 }
723 else
724 {
725 sprintf (own_buf, "l");
726 return;
727 }
0d62e5e8
DJ
728 }
729 }
aa691b87 730
52fb6437
NS
731 if (the_target->read_offsets != NULL
732 && strcmp ("qOffsets", own_buf) == 0)
733 {
734 CORE_ADDR text, data;
2d717e4f
DJ
735
736 require_running (own_buf);
52fb6437
NS
737 if (the_target->read_offsets (&text, &data))
738 sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
739 (long)text, (long)data, (long)data);
740 else
741 write_enn (own_buf);
1b3f6016 742
52fb6437
NS
743 return;
744 }
745
0e7f50da
UW
746 if (the_target->qxfer_spu != NULL
747 && strncmp ("qXfer:spu:read:", own_buf, 15) == 0)
748 {
749 char *annex;
750 int n;
751 unsigned int len;
752 CORE_ADDR ofs;
753 unsigned char *spu_buf;
754
2d717e4f 755 require_running (own_buf);
0e7f50da
UW
756 strcpy (own_buf, "E00");
757 if (decode_xfer_read (own_buf + 15, &annex, &ofs, &len) < 0)
78e5cee6 758 return;
0e7f50da
UW
759 if (len > PBUFSIZ - 2)
760 len = PBUFSIZ - 2;
aef93bd7 761 spu_buf = malloc (len + 1);
0e7f50da 762 if (!spu_buf)
1b3f6016 763 return;
0e7f50da
UW
764
765 n = (*the_target->qxfer_spu) (annex, spu_buf, NULL, ofs, len + 1);
1b3f6016 766 if (n < 0)
0e7f50da
UW
767 write_enn (own_buf);
768 else if (n > len)
78e5cee6 769 *new_packet_len_p = write_qxfer_response (own_buf, spu_buf, len, 1);
1b3f6016 770 else
78e5cee6 771 *new_packet_len_p = write_qxfer_response (own_buf, spu_buf, n, 0);
0e7f50da
UW
772
773 free (spu_buf);
774 return;
775 }
776
777 if (the_target->qxfer_spu != NULL
778 && strncmp ("qXfer:spu:write:", own_buf, 16) == 0)
779 {
780 char *annex;
781 int n;
782 unsigned int len;
783 CORE_ADDR ofs;
784 unsigned char *spu_buf;
785
2d717e4f 786 require_running (own_buf);
0e7f50da 787 strcpy (own_buf, "E00");
aef93bd7 788 spu_buf = malloc (packet_len - 15);
0e7f50da 789 if (!spu_buf)
1b3f6016 790 return;
0e7f50da
UW
791 if (decode_xfer_write (own_buf + 16, packet_len - 16, &annex,
792 &ofs, &len, spu_buf) < 0)
793 {
794 free (spu_buf);
795 return;
796 }
797
1b3f6016 798 n = (*the_target->qxfer_spu)
0e7f50da
UW
799 (annex, NULL, (unsigned const char *)spu_buf, ofs, len);
800 if (n < 0)
801 write_enn (own_buf);
802 else
803 sprintf (own_buf, "%x", n);
804
805 free (spu_buf);
806 return;
807 }
808
aa691b87 809 if (the_target->read_auxv != NULL
0876f84a 810 && strncmp ("qXfer:auxv:read:", own_buf, 16) == 0)
aa691b87 811 {
0876f84a
DJ
812 unsigned char *data;
813 int n;
aa691b87
RM
814 CORE_ADDR ofs;
815 unsigned int len;
0876f84a
DJ
816 char *annex;
817
2d717e4f
DJ
818 require_running (own_buf);
819
0876f84a
DJ
820 /* Reject any annex; grab the offset and length. */
821 if (decode_xfer_read (own_buf + 16, &annex, &ofs, &len) < 0
822 || annex[0] != '\0')
823 {
824 strcpy (own_buf, "E00");
825 return;
826 }
827
828 /* Read one extra byte, as an indicator of whether there is
829 more. */
830 if (len > PBUFSIZ - 2)
831 len = PBUFSIZ - 2;
aef93bd7
DE
832 data = malloc (len + 1);
833 if (data == NULL)
834 {
835 write_enn (own_buf);
836 return;
837 }
0876f84a 838 n = (*the_target->read_auxv) (ofs, data, len + 1);
000ef4f0
DJ
839 if (n < 0)
840 write_enn (own_buf);
841 else if (n > len)
0876f84a 842 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
aa691b87 843 else
0876f84a
DJ
844 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
845
846 free (data);
847
aa691b87
RM
848 return;
849 }
850
23181151
DJ
851 if (strncmp ("qXfer:features:read:", own_buf, 20) == 0)
852 {
853 CORE_ADDR ofs;
854 unsigned int len, total_len;
855 const char *document;
856 char *annex;
857
2d717e4f
DJ
858 require_running (own_buf);
859
fb1e4ffc
DJ
860 /* Grab the annex, offset, and length. */
861 if (decode_xfer_read (own_buf + 20, &annex, &ofs, &len) < 0)
862 {
863 strcpy (own_buf, "E00");
864 return;
865 }
866
867 /* Now grab the correct annex. */
868 document = get_features_xml (annex);
869 if (document == NULL)
23181151
DJ
870 {
871 strcpy (own_buf, "E00");
872 return;
873 }
874
875 total_len = strlen (document);
876 if (len > PBUFSIZ - 2)
877 len = PBUFSIZ - 2;
878
879 if (ofs > total_len)
880 write_enn (own_buf);
881 else if (len < total_len - ofs)
882 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
883 len, 1);
884 else
885 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
886 total_len - ofs, 0);
887
888 return;
889 }
890
255e7678
DJ
891 if (strncmp ("qXfer:libraries:read:", own_buf, 21) == 0)
892 {
893 CORE_ADDR ofs;
894 unsigned int len, total_len;
895 char *document, *p;
896 struct inferior_list_entry *dll_ptr;
897 char *annex;
898
2d717e4f
DJ
899 require_running (own_buf);
900
255e7678
DJ
901 /* Reject any annex; grab the offset and length. */
902 if (decode_xfer_read (own_buf + 21, &annex, &ofs, &len) < 0
903 || annex[0] != '\0')
904 {
905 strcpy (own_buf, "E00");
906 return;
907 }
908
909 /* Over-estimate the necessary memory. Assume that every character
910 in the library name must be escaped. */
911 total_len = 64;
912 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
913 total_len += 128 + 6 * strlen (((struct dll_info *) dll_ptr)->name);
914
aef93bd7
DE
915 document = malloc (total_len);
916 if (document == NULL)
917 {
918 write_enn (own_buf);
919 return;
920 }
255e7678
DJ
921 strcpy (document, "<library-list>\n");
922 p = document + strlen (document);
923
924 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
925 {
926 struct dll_info *dll = (struct dll_info *) dll_ptr;
927 char *name;
928
929 strcpy (p, " <library name=\"");
930 p = p + strlen (p);
931 name = xml_escape_text (dll->name);
932 strcpy (p, name);
933 free (name);
934 p = p + strlen (p);
935 strcpy (p, "\"><segment address=\"");
936 p = p + strlen (p);
937 sprintf (p, "0x%lx", (long) dll->base_addr);
938 p = p + strlen (p);
939 strcpy (p, "\"/></library>\n");
940 p = p + strlen (p);
941 }
942
943 strcpy (p, "</library-list>\n");
944
945 total_len = strlen (document);
946 if (len > PBUFSIZ - 2)
947 len = PBUFSIZ - 2;
948
949 if (ofs > total_len)
950 write_enn (own_buf);
951 else if (len < total_len - ofs)
952 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
953 len, 1);
954 else
955 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
956 total_len - ofs, 0);
957
958 free (document);
959 return;
960 }
961
07e059b5
VP
962 if (the_target->qxfer_osdata != NULL
963 && strncmp ("qXfer:osdata:read:", own_buf, 18) == 0)
964 {
965 char *annex;
966 int n;
967 unsigned int len;
968 CORE_ADDR ofs;
969 unsigned char *workbuf;
970
971 strcpy (own_buf, "E00");
972 if (decode_xfer_read (own_buf + 18, &annex, &ofs, &len) < 0)
78e5cee6 973 return;
07e059b5 974 if (len > PBUFSIZ - 2)
78e5cee6 975 len = PBUFSIZ - 2;
aef93bd7 976 workbuf = malloc (len + 1);
07e059b5 977 if (!workbuf)
1b3f6016 978 return;
07e059b5
VP
979
980 n = (*the_target->qxfer_osdata) (annex, workbuf, NULL, ofs, len + 1);
981 if (n < 0)
78e5cee6 982 write_enn (own_buf);
07e059b5 983 else if (n > len)
78e5cee6 984 *new_packet_len_p = write_qxfer_response (own_buf, workbuf, len, 1);
07e059b5 985 else
78e5cee6 986 *new_packet_len_p = write_qxfer_response (own_buf, workbuf, n, 0);
07e059b5
VP
987
988 free (workbuf);
989 return;
990 }
991
4aa995e1
PA
992 if (the_target->qxfer_siginfo != NULL
993 && strncmp ("qXfer:siginfo:read:", own_buf, 19) == 0)
994 {
995 unsigned char *data;
996 int n;
997 CORE_ADDR ofs;
998 unsigned int len;
999 char *annex;
1000
1001 require_running (own_buf);
1002
1003 /* Reject any annex; grab the offset and length. */
1004 if (decode_xfer_read (own_buf + 19, &annex, &ofs, &len) < 0
1005 || annex[0] != '\0')
1006 {
1007 strcpy (own_buf, "E00");
1008 return;
1009 }
1010
1011 /* Read one extra byte, as an indicator of whether there is
1012 more. */
1013 if (len > PBUFSIZ - 2)
1014 len = PBUFSIZ - 2;
1015 data = malloc (len + 1);
1016 if (!data)
1b3f6016 1017 return;
4aa995e1
PA
1018 n = (*the_target->qxfer_siginfo) (annex, data, NULL, ofs, len + 1);
1019 if (n < 0)
1020 write_enn (own_buf);
1021 else if (n > len)
1022 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1023 else
1024 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
1025
1026 free (data);
1027 return;
1028 }
1029
1030 if (the_target->qxfer_siginfo != NULL
1031 && strncmp ("qXfer:siginfo:write:", own_buf, 20) == 0)
1032 {
1033 char *annex;
1034 int n;
1035 unsigned int len;
1036 CORE_ADDR ofs;
1037 unsigned char *data;
1038
1039 require_running (own_buf);
1040
1041 strcpy (own_buf, "E00");
1042 data = malloc (packet_len - 19);
1043 if (!data)
1b3f6016 1044 return;
4aa995e1
PA
1045 if (decode_xfer_write (own_buf + 20, packet_len - 20, &annex,
1046 &ofs, &len, data) < 0)
1047 {
1048 free (data);
1049 return;
1050 }
1051
1052 n = (*the_target->qxfer_siginfo)
1053 (annex, NULL, (unsigned const char *)data, ofs, len);
1054 if (n < 0)
1055 write_enn (own_buf);
1056 else
1057 sprintf (own_buf, "%x", n);
1058
1059 free (data);
1060 return;
1061 }
1062
be2a5f71
DJ
1063 /* Protocol features query. */
1064 if (strncmp ("qSupported", own_buf, 10) == 0
1065 && (own_buf[10] == ':' || own_buf[10] == '\0'))
1066 {
95954743
PA
1067 char *p = &own_buf[10];
1068
1069 /* Process each feature being provided by GDB. The first
1070 feature will follow a ':', and latter features will follow
1071 ';'. */
1072 if (*p == ':')
1073 for (p = strtok (p + 1, ";");
1074 p != NULL;
1075 p = strtok (NULL, ";"))
1076 {
95954743 1077 if (strcmp (p, "multiprocess+") == 0)
cf8fd78b
PA
1078 {
1079 /* GDB supports and wants multi-process support if
1080 possible. */
1081 if (target_supports_multi_process ())
1082 multi_process = 1;
1083 }
95954743
PA
1084 }
1085
89be2091 1086 sprintf (own_buf, "PacketSize=%x;QPassSignals+", PBUFSIZ - 1);
0876f84a 1087
255e7678
DJ
1088 /* We do not have any hook to indicate whether the target backend
1089 supports qXfer:libraries:read, so always report it. */
1090 strcat (own_buf, ";qXfer:libraries:read+");
1091
0876f84a 1092 if (the_target->read_auxv != NULL)
9f2e1e63 1093 strcat (own_buf, ";qXfer:auxv:read+");
2d717e4f 1094
0e7f50da
UW
1095 if (the_target->qxfer_spu != NULL)
1096 strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
0876f84a 1097
4aa995e1
PA
1098 if (the_target->qxfer_siginfo != NULL)
1099 strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
1100
221c031f
UW
1101 /* We always report qXfer:features:read, as targets may
1102 install XML files on a subsequent call to arch_setup.
1103 If we reported to GDB on startup that we don't support
1104 qXfer:feature:read at all, we will never be re-queried. */
1105 strcat (own_buf, ";qXfer:features:read+");
23181151 1106
a6f3e723
SL
1107 if (transport_is_reliable)
1108 strcat (own_buf, ";QStartNoAckMode+");
07e059b5
VP
1109
1110 if (the_target->qxfer_osdata != NULL)
1b3f6016 1111 strcat (own_buf, ";qXfer:osdata:read+");
07e059b5 1112
cf8fd78b
PA
1113 if (target_supports_multi_process ())
1114 strcat (own_buf, ";multiprocess+");
95954743 1115
bd99dc85
PA
1116 if (target_supports_non_stop ())
1117 strcat (own_buf, ";QNonStop+");
1118
be2a5f71
DJ
1119 return;
1120 }
1121
dae5f5cf
DJ
1122 /* Thread-local storage support. */
1123 if (the_target->get_tls_address != NULL
1124 && strncmp ("qGetTLSAddr:", own_buf, 12) == 0)
1125 {
1126 char *p = own_buf + 12;
5b1c542e 1127 CORE_ADDR parts[2], address = 0;
dae5f5cf 1128 int i, err;
95954743 1129 ptid_t ptid = null_ptid;
dae5f5cf 1130
2d717e4f
DJ
1131 require_running (own_buf);
1132
dae5f5cf
DJ
1133 for (i = 0; i < 3; i++)
1134 {
1135 char *p2;
1136 int len;
1137
1138 if (p == NULL)
1139 break;
1140
1141 p2 = strchr (p, ',');
1142 if (p2)
1143 {
1144 len = p2 - p;
1145 p2++;
1146 }
1147 else
1148 {
1149 len = strlen (p);
1150 p2 = NULL;
1151 }
1152
5b1c542e 1153 if (i == 0)
95954743 1154 ptid = read_ptid (p, NULL);
5b1c542e
PA
1155 else
1156 decode_address (&parts[i - 1], p, len);
dae5f5cf
DJ
1157 p = p2;
1158 }
1159
1160 if (p != NULL || i < 3)
1161 err = 1;
1162 else
1163 {
e09875d4 1164 struct thread_info *thread = find_thread_ptid (ptid);
dae5f5cf
DJ
1165
1166 if (thread == NULL)
1167 err = 2;
1168 else
5b1c542e 1169 err = the_target->get_tls_address (thread, parts[0], parts[1],
dae5f5cf
DJ
1170 &address);
1171 }
1172
1173 if (err == 0)
1174 {
1175 sprintf (own_buf, "%llx", address);
1176 return;
1177 }
1178 else if (err > 0)
1179 {
1180 write_enn (own_buf);
1181 return;
1182 }
1183
1184 /* Otherwise, pretend we do not understand this packet. */
1185 }
1186
c74d0ad8
DJ
1187 /* Handle "monitor" commands. */
1188 if (strncmp ("qRcmd,", own_buf, 6) == 0)
1189 {
aef93bd7 1190 char *mon = malloc (PBUFSIZ);
c74d0ad8
DJ
1191 int len = strlen (own_buf + 6);
1192
aef93bd7
DE
1193 if (mon == NULL)
1194 {
1195 write_enn (own_buf);
1196 return;
1197 }
1198
d41b6bb4 1199 if ((len % 2) != 0 || unhexify (mon, own_buf + 6, len / 2) != len / 2)
c74d0ad8
DJ
1200 {
1201 write_enn (own_buf);
1202 free (mon);
1203 return;
1204 }
1205 mon[len / 2] = '\0';
1206
1207 write_ok (own_buf);
1208
1209 if (strcmp (mon, "set debug 1") == 0)
1210 {
1211 debug_threads = 1;
1212 monitor_output ("Debug output enabled.\n");
1213 }
1214 else if (strcmp (mon, "set debug 0") == 0)
1215 {
1216 debug_threads = 0;
1217 monitor_output ("Debug output disabled.\n");
1218 }
1219 else if (strcmp (mon, "set remote-debug 1") == 0)
1220 {
1221 remote_debug = 1;
1222 monitor_output ("Protocol debug output enabled.\n");
1223 }
1224 else if (strcmp (mon, "set remote-debug 0") == 0)
1225 {
1226 remote_debug = 0;
1227 monitor_output ("Protocol debug output disabled.\n");
1228 }
1229 else if (strcmp (mon, "help") == 0)
1230 monitor_show_help ();
2d717e4f
DJ
1231 else if (strcmp (mon, "exit") == 0)
1232 exit_requested = 1;
c74d0ad8
DJ
1233 else
1234 {
1235 monitor_output ("Unknown monitor command.\n\n");
1236 monitor_show_help ();
1237 write_enn (own_buf);
1238 }
1239
1240 free (mon);
1241 return;
1242 }
1243
08388c79
DE
1244 if (strncmp ("qSearch:memory:", own_buf, sizeof ("qSearch:memory:") - 1) == 0)
1245 {
1246 require_running (own_buf);
1247 handle_search_memory (own_buf, packet_len);
1248 return;
1249 }
1250
95954743
PA
1251 if (strcmp (own_buf, "qAttached") == 0
1252 || strncmp (own_buf, "qAttached:", sizeof ("qAttached:") - 1) == 0)
0b16c5cf 1253 {
95954743
PA
1254 struct process_info *process;
1255
1256 if (own_buf[sizeof ("qAttached") - 1])
1257 {
1258 int pid = strtoul (own_buf + sizeof ("qAttached:") - 1, NULL, 16);
1259 process = (struct process_info *)
1260 find_inferior_id (&all_processes, pid_to_ptid (pid));
1261 }
1262 else
1263 {
1264 require_running (own_buf);
1265 process = current_process ();
1266 }
1267
1268 if (process == NULL)
1269 {
1270 write_enn (own_buf);
1271 return;
1272 }
1273
1274 strcpy (own_buf, process->attached ? "1" : "0");
0b16c5cf
PA
1275 return;
1276 }
1277
ce3a066d
DJ
1278 /* Otherwise we didn't know what packet it was. Say we didn't
1279 understand it. */
1280 own_buf[0] = 0;
1281}
1282
64386c31
DJ
1283/* Parse vCont packets. */
1284void
5b1c542e 1285handle_v_cont (char *own_buf)
64386c31
DJ
1286{
1287 char *p, *q;
1288 int n = 0, i = 0;
2bd7c093 1289 struct thread_resume *resume_info;
95954743 1290 struct thread_resume default_action = {{0}};
64386c31
DJ
1291
1292 /* Count the number of semicolons in the packet. There should be one
1293 for every action. */
1294 p = &own_buf[5];
1295 while (p)
1296 {
1297 n++;
1298 p++;
1299 p = strchr (p, ';');
1300 }
2bd7c093
PA
1301
1302 resume_info = malloc (n * sizeof (resume_info[0]));
aef93bd7
DE
1303 if (resume_info == NULL)
1304 goto err;
64386c31 1305
64386c31 1306 p = &own_buf[5];
64386c31
DJ
1307 while (*p)
1308 {
1309 p++;
1310
64386c31 1311 if (p[0] == 's' || p[0] == 'S')
bd99dc85 1312 resume_info[i].kind = resume_step;
64386c31 1313 else if (p[0] == 'c' || p[0] == 'C')
bd99dc85
PA
1314 resume_info[i].kind = resume_continue;
1315 else if (p[0] == 't')
1316 resume_info[i].kind = resume_stop;
64386c31
DJ
1317 else
1318 goto err;
1319
1320 if (p[0] == 'S' || p[0] == 'C')
1321 {
1322 int sig;
1323 sig = strtol (p + 1, &q, 16);
1324 if (p == q)
1325 goto err;
1326 p = q;
1327
1328 if (!target_signal_to_host_p (sig))
1329 goto err;
1330 resume_info[i].sig = target_signal_to_host (sig);
1331 }
1332 else
1333 {
1334 resume_info[i].sig = 0;
1335 p = p + 1;
1336 }
1337
1338 if (p[0] == 0)
1339 {
95954743 1340 resume_info[i].thread = minus_one_ptid;
64386c31
DJ
1341 default_action = resume_info[i];
1342
1343 /* Note: we don't increment i here, we'll overwrite this entry
1344 the next time through. */
1345 }
1346 else if (p[0] == ':')
1347 {
95954743 1348 ptid_t ptid = read_ptid (p + 1, &q);
a06660f7 1349
64386c31
DJ
1350 if (p == q)
1351 goto err;
1352 p = q;
1353 if (p[0] != ';' && p[0] != 0)
1354 goto err;
1355
95954743 1356 resume_info[i].thread = ptid;
a06660f7 1357
64386c31
DJ
1358 i++;
1359 }
1360 }
1361
2bd7c093
PA
1362 if (i < n)
1363 resume_info[i] = default_action;
64386c31
DJ
1364
1365 /* Still used in occasional places in the backend. */
bd99dc85 1366 if (n == 1
95954743 1367 && !ptid_equal (resume_info[0].thread, minus_one_ptid)
bd99dc85 1368 && resume_info[0].kind != resume_stop)
64386c31
DJ
1369 cont_thread = resume_info[0].thread;
1370 else
95954743 1371 cont_thread = minus_one_ptid;
dc3f8883 1372 set_desired_inferior (0);
64386c31 1373
bd99dc85
PA
1374 if (!non_stop)
1375 enable_async_io ();
1376
2bd7c093 1377 (*the_target->resume) (resume_info, n);
64386c31
DJ
1378
1379 free (resume_info);
1380
bd99dc85
PA
1381 if (non_stop)
1382 write_ok (own_buf);
1383 else
1384 {
95954743 1385 last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
bd99dc85
PA
1386 prepare_resume_reply (own_buf, last_ptid, &last_status);
1387 disable_async_io ();
1388 }
64386c31
DJ
1389 return;
1390
1391err:
255e7678 1392 write_enn (own_buf);
64386c31
DJ
1393 free (resume_info);
1394 return;
1395}
1396
2d717e4f
DJ
1397/* Attach to a new program. Return 1 if successful, 0 if failure. */
1398int
5b1c542e 1399handle_v_attach (char *own_buf)
2d717e4f
DJ
1400{
1401 int pid;
1402
1403 pid = strtol (own_buf + 8, NULL, 16);
5b1c542e 1404 if (pid != 0 && attach_inferior (pid) == 0)
2d717e4f 1405 {
aeba519e
PA
1406 /* Don't report shared library events after attaching, even if
1407 some libraries are preloaded. GDB will always poll the
1408 library list. Avoids the "stopped by shared library event"
1409 notice on the GDB side. */
1410 dlls_changed = 0;
bd99dc85
PA
1411
1412 if (non_stop)
1413 {
1414 /* In non-stop, we don't send a resume reply. Stop events
1415 will follow up using the normal notification
1416 mechanism. */
1417 write_ok (own_buf);
1418 }
1419 else
1420 prepare_resume_reply (own_buf, last_ptid, &last_status);
1421
2d717e4f
DJ
1422 return 1;
1423 }
1424 else
1425 {
1426 write_enn (own_buf);
1427 return 0;
1428 }
1429}
1430
1431/* Run a new program. Return 1 if successful, 0 if failure. */
1432static int
5b1c542e 1433handle_v_run (char *own_buf)
2d717e4f 1434{
aef93bd7 1435 char *p, *next_p, **new_argv;
2d717e4f
DJ
1436 int i, new_argc;
1437
1438 new_argc = 0;
1439 for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
1440 {
1441 p++;
1442 new_argc++;
1443 }
1444
aef93bd7
DE
1445 new_argv = calloc (new_argc + 2, sizeof (char *));
1446 if (new_argv == NULL)
1447 {
1448 write_enn (own_buf);
1449 return 0;
1450 }
1451
2d717e4f
DJ
1452 i = 0;
1453 for (p = own_buf + strlen ("vRun;"); *p; p = next_p)
1454 {
1455 next_p = strchr (p, ';');
1456 if (next_p == NULL)
1457 next_p = p + strlen (p);
1458
1459 if (i == 0 && p == next_p)
1460 new_argv[i] = NULL;
1461 else
1462 {
aef93bd7 1463 /* FIXME: Fail request if out of memory instead of dying. */
bca929d3 1464 new_argv[i] = xmalloc (1 + (next_p - p) / 2);
2d717e4f
DJ
1465 unhexify (new_argv[i], p, (next_p - p) / 2);
1466 new_argv[i][(next_p - p) / 2] = '\0';
1467 }
1468
1469 if (*next_p)
1470 next_p++;
1471 i++;
1472 }
1473 new_argv[i] = NULL;
1474
1475 if (new_argv[0] == NULL)
1476 {
f142445f
DJ
1477 /* GDB didn't specify a program to run. Use the program from the
1478 last run with the new argument list. */
9b710a42 1479
2d717e4f
DJ
1480 if (program_argv == NULL)
1481 {
aef93bd7 1482 /* FIXME: new_argv memory leak */
2d717e4f
DJ
1483 write_enn (own_buf);
1484 return 0;
1485 }
1486
aef93bd7
DE
1487 new_argv[0] = strdup (program_argv[0]);
1488 if (new_argv[0] == NULL)
1489 {
1490 /* FIXME: new_argv memory leak */
1491 write_enn (own_buf);
1492 return 0;
1b3f6016 1493 }
2d717e4f 1494 }
f142445f 1495
aef93bd7
DE
1496 /* Free the old argv and install the new one. */
1497 freeargv (program_argv);
f142445f 1498 program_argv = new_argv;
2d717e4f 1499
5b1c542e
PA
1500 start_inferior (program_argv);
1501 if (last_status.kind == TARGET_WAITKIND_STOPPED)
2d717e4f 1502 {
5b1c542e 1503 prepare_resume_reply (own_buf, last_ptid, &last_status);
bd99dc85
PA
1504
1505 /* In non-stop, sending a resume reply doesn't set the general
1506 thread, but GDB assumes a vRun sets it (this is so GDB can
1507 query which is the main thread of the new inferior. */
1508 if (non_stop)
1509 general_thread = last_ptid;
1510
2d717e4f
DJ
1511 return 1;
1512 }
1513 else
1514 {
1515 write_enn (own_buf);
1516 return 0;
1517 }
1518}
1519
95954743
PA
1520/* Kill process. Return 1 if successful, 0 if failure. */
1521int
1522handle_v_kill (char *own_buf)
1523{
1524 int pid;
1525 char *p = &own_buf[6];
0f54c268
PM
1526 if (multi_process)
1527 pid = strtol (p, NULL, 16);
1528 else
1529 pid = signal_pid;
95954743
PA
1530 if (pid != 0 && kill_inferior (pid) == 0)
1531 {
1532 last_status.kind = TARGET_WAITKIND_SIGNALLED;
1533 last_status.value.sig = TARGET_SIGNAL_KILL;
1534 last_ptid = pid_to_ptid (pid);
1535 discard_queued_stop_replies (pid);
1536 write_ok (own_buf);
1537 return 1;
1538 }
1539 else
1540 {
1541 write_enn (own_buf);
1542 return 0;
1543 }
1544}
1545
bd99dc85
PA
1546/* Handle a 'vStopped' packet. */
1547static void
1548handle_v_stopped (char *own_buf)
1549{
1550 /* If we're waiting for GDB to acknowledge a pending stop reply,
1551 consider that done. */
1552 if (notif_queue)
1553 {
1554 struct vstop_notif *head;
1555
1556 if (remote_debug)
95954743
PA
1557 fprintf (stderr, "vStopped: acking %s\n",
1558 target_pid_to_str (notif_queue->ptid));
bd99dc85
PA
1559
1560 head = notif_queue;
1561 notif_queue = notif_queue->next;
1562 free (head);
1563 }
1564
1565 /* Push another stop reply, or if there are no more left, an OK. */
1566 send_next_stop_reply (own_buf);
1567}
1568
64386c31
DJ
1569/* Handle all of the extended 'v' packets. */
1570void
5b1c542e 1571handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
64386c31 1572{
db42f210 1573 if (!disable_packet_vCont)
64386c31 1574 {
db42f210
PA
1575 if (strncmp (own_buf, "vCont;", 6) == 0)
1576 {
1577 require_running (own_buf);
5b1c542e 1578 handle_v_cont (own_buf);
db42f210
PA
1579 return;
1580 }
64386c31 1581
db42f210
PA
1582 if (strncmp (own_buf, "vCont?", 6) == 0)
1583 {
bd99dc85 1584 strcpy (own_buf, "vCont;c;C;s;S;t");
db42f210
PA
1585 return;
1586 }
64386c31
DJ
1587 }
1588
a6b151f1
DJ
1589 if (strncmp (own_buf, "vFile:", 6) == 0
1590 && handle_vFile (own_buf, packet_len, new_packet_len))
1591 return;
1592
2d717e4f
DJ
1593 if (strncmp (own_buf, "vAttach;", 8) == 0)
1594 {
95954743 1595 if (!multi_process && target_running ())
2d717e4f 1596 {
fd96d250
PA
1597 fprintf (stderr, "Already debugging a process\n");
1598 write_enn (own_buf);
1599 return;
2d717e4f 1600 }
5b1c542e 1601 handle_v_attach (own_buf);
2d717e4f
DJ
1602 return;
1603 }
1604
1605 if (strncmp (own_buf, "vRun;", 5) == 0)
1606 {
95954743 1607 if (!multi_process && target_running ())
2d717e4f 1608 {
fd96d250
PA
1609 fprintf (stderr, "Already debugging a process\n");
1610 write_enn (own_buf);
1611 return;
2d717e4f 1612 }
5b1c542e 1613 handle_v_run (own_buf);
2d717e4f
DJ
1614 return;
1615 }
1616
95954743
PA
1617 if (strncmp (own_buf, "vKill;", 6) == 0)
1618 {
1619 if (!target_running ())
1620 {
1621 fprintf (stderr, "No process to kill\n");
1622 write_enn (own_buf);
1623 return;
1624 }
1625 handle_v_kill (own_buf);
1626 return;
1627 }
1628
bd99dc85
PA
1629 if (strncmp (own_buf, "vStopped", 8) == 0)
1630 {
1631 handle_v_stopped (own_buf);
1632 return;
1633 }
1634
64386c31
DJ
1635 /* Otherwise we didn't know what packet it was. Say we didn't
1636 understand it. */
1637 own_buf[0] = 0;
1638 return;
1639}
1640
bd99dc85
PA
1641/* Resume inferior and wait for another event. In non-stop mode,
1642 don't really wait here, but return immediatelly to the event
1643 loop. */
64386c31 1644void
5b1c542e 1645myresume (char *own_buf, int step, int sig)
64386c31
DJ
1646{
1647 struct thread_resume resume_info[2];
1648 int n = 0;
2bd7c093 1649 int valid_cont_thread;
a20d5e98
DJ
1650
1651 set_desired_inferior (0);
64386c31 1652
95954743
PA
1653 valid_cont_thread = (!ptid_equal (cont_thread, null_ptid)
1654 && !ptid_equal (cont_thread, minus_one_ptid));
2bd7c093
PA
1655
1656 if (step || sig || valid_cont_thread)
64386c31
DJ
1657 {
1658 resume_info[0].thread
1659 = ((struct inferior_list_entry *) current_inferior)->id;
bd99dc85
PA
1660 if (step)
1661 resume_info[0].kind = resume_step;
1662 else
1663 resume_info[0].kind = resume_continue;
64386c31 1664 resume_info[0].sig = sig;
64386c31
DJ
1665 n++;
1666 }
2bd7c093
PA
1667
1668 if (!valid_cont_thread)
1669 {
95954743 1670 resume_info[n].thread = minus_one_ptid;
bd99dc85 1671 resume_info[n].kind = resume_continue;
2bd7c093
PA
1672 resume_info[n].sig = 0;
1673 n++;
1674 }
64386c31 1675
bd99dc85
PA
1676 if (!non_stop)
1677 enable_async_io ();
1678
2bd7c093 1679 (*the_target->resume) (resume_info, n);
bd99dc85
PA
1680
1681 if (non_stop)
1682 write_ok (own_buf);
1683 else
1684 {
95954743 1685 last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
bd99dc85
PA
1686 prepare_resume_reply (own_buf, last_ptid, &last_status);
1687 disable_async_io ();
1688 }
1689}
1690
1691/* Callback for for_each_inferior. Make a new stop reply for each
1692 stopped thread. */
1693
95954743
PA
1694static int
1695queue_stop_reply_callback (struct inferior_list_entry *entry, void *arg)
bd99dc85 1696{
95954743 1697 int pid = * (int *) arg;
bd99dc85 1698
95954743
PA
1699 if (pid == -1
1700 || ptid_get_pid (entry->id) == pid)
1701 {
1702 struct target_waitstatus status;
1703
1704 status.kind = TARGET_WAITKIND_STOPPED;
1705 status.value.sig = TARGET_SIGNAL_TRAP;
bd99dc85 1706
95954743
PA
1707 /* Pass the last stop reply back to GDB, but don't notify. */
1708 queue_stop_reply (entry->id, &status);
1709 }
1710
1711 return 0;
64386c31
DJ
1712}
1713
5b1c542e
PA
1714/* Status handler for the '?' packet. */
1715
1716static void
1717handle_status (char *own_buf)
1718{
bd99dc85
PA
1719 struct target_waitstatus status;
1720 status.kind = TARGET_WAITKIND_STOPPED;
1721 status.value.sig = TARGET_SIGNAL_TRAP;
1722
1723 /* In non-stop mode, we must send a stop reply for each stopped
1724 thread. In all-stop mode, just send one for the first stopped
1725 thread we find. */
1726
1727 if (non_stop)
1728 {
95954743
PA
1729 int pid = -1;
1730 discard_queued_stop_replies (pid);
1731 find_inferior (&all_threads, queue_stop_reply_callback, &pid);
bd99dc85
PA
1732
1733 /* The first is sent immediatly. OK is sent if there is no
1734 stopped thread, which is the same handling of the vStopped
1735 packet (by design). */
1736 send_next_stop_reply (own_buf);
1737 }
5b1c542e 1738 else
bd99dc85
PA
1739 {
1740 if (all_threads.head)
1741 prepare_resume_reply (own_buf,
1742 all_threads.head->id, &status);
1743 else
1744 strcpy (own_buf, "W00");
1745 }
5b1c542e
PA
1746}
1747
dd24457d
DJ
1748static void
1749gdbserver_version (void)
1750{
c16158bc 1751 printf ("GNU gdbserver %s%s\n"
ff703abe 1752 "Copyright (C) 2009 Free Software Foundation, Inc.\n"
dd24457d
DJ
1753 "gdbserver is free software, covered by the GNU General Public License.\n"
1754 "This gdbserver was configured as \"%s\"\n",
c16158bc 1755 PKGVERSION, version, host_name);
dd24457d
DJ
1756}
1757
0bc68c49 1758static void
c16158bc 1759gdbserver_usage (FILE *stream)
0bc68c49 1760{
c16158bc
JM
1761 fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
1762 "\tgdbserver [OPTIONS] --attach COMM PID\n"
1763 "\tgdbserver [OPTIONS] --multi COMM\n"
1764 "\n"
1765 "COMM may either be a tty device (for serial debugging), or \n"
1766 "HOST:PORT to listen for a TCP connection.\n"
1767 "\n"
1768 "Options:\n"
62709adf
PA
1769 " --debug Enable general debugging output.\n"
1770 " --remote-debug Enable remote protocol debugging output.\n"
1771 " --version Display version information and exit.\n"
1772 " --wrapper WRAPPER -- Run WRAPPER to start new programs.\n");
c16158bc
JM
1773 if (REPORT_BUGS_TO[0] && stream == stdout)
1774 fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
0bc68c49
DJ
1775}
1776
db42f210
PA
1777static void
1778gdbserver_show_disableable (FILE *stream)
1779{
1780 fprintf (stream, "Disableable packets:\n"
1781 " vCont \tAll vCont packets\n"
1782 " qC \tQuerying the current thread\n"
1783 " qfThreadInfo\tThread listing\n"
1784 " Tthread \tPassing the thread specifier in the T stop reply packet\n"
1785 " threads \tAll of the above\n");
1786}
1787
1788
2d717e4f
DJ
1789#undef require_running
1790#define require_running(BUF) \
1791 if (!target_running ()) \
1792 { \
1793 write_enn (BUF); \
1794 break; \
1795 }
1796
95954743
PA
1797static int
1798first_thread_of (struct inferior_list_entry *entry, void *args)
1799{
1800 int pid = * (int *) args;
1801
1802 if (ptid_get_pid (entry->id) == pid)
1803 return 1;
1804
1805 return 0;
1806}
1807
1808static void
1809kill_inferior_callback (struct inferior_list_entry *entry)
1810{
1811 struct process_info *process = (struct process_info *) entry;
1812 int pid = ptid_get_pid (process->head.id);
1813
1814 kill_inferior (pid);
1815 discard_queued_stop_replies (pid);
1816}
1817
9f767825
DE
1818/* Callback for for_each_inferior to detach or kill the inferior,
1819 depending on whether we attached to it or not.
1820 We inform the user whether we're detaching or killing the process
1821 as this is only called when gdbserver is about to exit. */
1822
95954743
PA
1823static void
1824detach_or_kill_inferior_callback (struct inferior_list_entry *entry)
1825{
1826 struct process_info *process = (struct process_info *) entry;
1827 int pid = ptid_get_pid (process->head.id);
1828
1829 if (process->attached)
1830 detach_inferior (pid);
1831 else
1832 kill_inferior (pid);
1833
1834 discard_queued_stop_replies (pid);
1835}
1836
9f767825
DE
1837/* for_each_inferior callback for detach_or_kill_for_exit to print
1838 the pids of started inferiors. */
1839
1840static void
1841print_started_pid (struct inferior_list_entry *entry)
1842{
1843 struct process_info *process = (struct process_info *) entry;
1844
1845 if (! process->attached)
1846 {
1847 int pid = ptid_get_pid (process->head.id);
1848 fprintf (stderr, " %d", pid);
1849 }
1850}
1851
1852/* for_each_inferior callback for detach_or_kill_for_exit to print
1853 the pids of attached inferiors. */
1854
1855static void
1856print_attached_pid (struct inferior_list_entry *entry)
1857{
1858 struct process_info *process = (struct process_info *) entry;
1859
1860 if (process->attached)
1861 {
1862 int pid = ptid_get_pid (process->head.id);
1863 fprintf (stderr, " %d", pid);
1864 }
1865}
1866
1867/* Call this when exiting gdbserver with possible inferiors that need
1868 to be killed or detached from. */
1869
1870static void
1871detach_or_kill_for_exit (void)
1872{
1873 /* First print a list of the inferiors we will be killing/detaching.
1874 This is to assist the user, for example, in case the inferior unexpectedly
1875 dies after we exit: did we screw up or did the inferior exit on its own?
1876 Having this info will save some head-scratching. */
1877
1878 if (have_started_inferiors_p ())
1879 {
1880 fprintf (stderr, "Killing process(es):");
1881 for_each_inferior (&all_processes, print_started_pid);
1882 fprintf (stderr, "\n");
1883 }
1884 if (have_attached_inferiors_p ())
1885 {
1886 fprintf (stderr, "Detaching process(es):");
1887 for_each_inferior (&all_processes, print_attached_pid);
1888 fprintf (stderr, "\n");
1889 }
1890
1891 /* Now we can kill or detach the inferiors. */
1892
1893 for_each_inferior (&all_processes, detach_or_kill_inferior_callback);
1894}
1895
95954743
PA
1896static void
1897join_inferiors_callback (struct inferior_list_entry *entry)
1898{
1899 struct process_info *process = (struct process_info *) entry;
1900
1901 /* If we are attached, then we can exit. Otherwise, we need to hang
1902 around doing nothing, until the child is gone. */
1903 if (!process->attached)
1904 join_inferior (ptid_get_pid (process->head.id));
1905}
1906
c906108c 1907int
da85418c 1908main (int argc, char *argv[])
c906108c 1909{
0729219d
DJ
1910 int bad_attach;
1911 int pid;
2d717e4f
DJ
1912 char *arg_end, *port;
1913 char **next_arg = &argv[1];
1914 int multi_mode = 0;
1915 int attach = 0;
1916 int was_running;
c906108c 1917
2d717e4f 1918 while (*next_arg != NULL && **next_arg == '-')
dd24457d 1919 {
2d717e4f
DJ
1920 if (strcmp (*next_arg, "--version") == 0)
1921 {
1922 gdbserver_version ();
1923 exit (0);
1924 }
1925 else if (strcmp (*next_arg, "--help") == 0)
1926 {
c16158bc 1927 gdbserver_usage (stdout);
2d717e4f
DJ
1928 exit (0);
1929 }
1930 else if (strcmp (*next_arg, "--attach") == 0)
1931 attach = 1;
1932 else if (strcmp (*next_arg, "--multi") == 0)
1933 multi_mode = 1;
ccd213ac
DJ
1934 else if (strcmp (*next_arg, "--wrapper") == 0)
1935 {
1936 next_arg++;
1937
1938 wrapper_argv = next_arg;
1939 while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
1940 next_arg++;
1941
1942 if (next_arg == wrapper_argv || *next_arg == NULL)
1943 {
c16158bc 1944 gdbserver_usage (stderr);
ccd213ac
DJ
1945 exit (1);
1946 }
1947
1948 /* Consume the "--". */
1949 *next_arg = NULL;
1950 }
2d717e4f
DJ
1951 else if (strcmp (*next_arg, "--debug") == 0)
1952 debug_threads = 1;
62709adf
PA
1953 else if (strcmp (*next_arg, "--remote-debug") == 0)
1954 remote_debug = 1;
db42f210
PA
1955 else if (strcmp (*next_arg, "--disable-packet") == 0)
1956 {
1957 gdbserver_show_disableable (stdout);
1958 exit (0);
1959 }
1960 else if (strncmp (*next_arg,
1961 "--disable-packet=",
1962 sizeof ("--disable-packet=") - 1) == 0)
1963 {
1964 char *packets, *tok;
1965
1966 packets = *next_arg += sizeof ("--disable-packet=") - 1;
1967 for (tok = strtok (packets, ",");
1968 tok != NULL;
1969 tok = strtok (NULL, ","))
1970 {
1971 if (strcmp ("vCont", tok) == 0)
1972 disable_packet_vCont = 1;
1973 else if (strcmp ("Tthread", tok) == 0)
1974 disable_packet_Tthread = 1;
1975 else if (strcmp ("qC", tok) == 0)
1976 disable_packet_qC = 1;
1977 else if (strcmp ("qfThreadInfo", tok) == 0)
1978 disable_packet_qfThreadInfo = 1;
1979 else if (strcmp ("threads", tok) == 0)
1980 {
1981 disable_packet_vCont = 1;
1982 disable_packet_Tthread = 1;
1983 disable_packet_qC = 1;
1984 disable_packet_qfThreadInfo = 1;
1985 }
1986 else
1987 {
1988 fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
1989 tok);
1990 gdbserver_show_disableable (stderr);
1991 exit (1);
1992 }
1993 }
1994 }
2d717e4f
DJ
1995 else
1996 {
1997 fprintf (stderr, "Unknown argument: %s\n", *next_arg);
1998 exit (1);
1999 }
dd24457d 2000
2d717e4f
DJ
2001 next_arg++;
2002 continue;
dd24457d
DJ
2003 }
2004
c5aa993b 2005 if (setjmp (toplevel))
c906108c 2006 {
c5aa993b
JM
2007 fprintf (stderr, "Exiting\n");
2008 exit (1);
c906108c
SS
2009 }
2010
2d717e4f
DJ
2011 port = *next_arg;
2012 next_arg++;
2013 if (port == NULL || (!attach && !multi_mode && *next_arg == NULL))
2014 {
c16158bc 2015 gdbserver_usage (stderr);
2d717e4f
DJ
2016 exit (1);
2017 }
2018
0729219d
DJ
2019 bad_attach = 0;
2020 pid = 0;
2d717e4f
DJ
2021
2022 /* --attach used to come after PORT, so allow it there for
2023 compatibility. */
2024 if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
45b7b345 2025 {
2d717e4f
DJ
2026 attach = 1;
2027 next_arg++;
45b7b345
DJ
2028 }
2029
2d717e4f
DJ
2030 if (attach
2031 && (*next_arg == NULL
2032 || (*next_arg)[0] == '\0'
2033 || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
2034 || *arg_end != '\0'
2035 || next_arg[1] != NULL))
2036 bad_attach = 1;
2037
2038 if (bad_attach)
dd24457d 2039 {
c16158bc 2040 gdbserver_usage (stderr);
dd24457d
DJ
2041 exit (1);
2042 }
c906108c 2043
95954743 2044 initialize_inferiors ();
a20d5e98 2045 initialize_async_io ();
4ce44c66
JM
2046 initialize_low ();
2047
bca929d3
DE
2048 own_buf = xmalloc (PBUFSIZ + 1);
2049 mem_buf = xmalloc (PBUFSIZ);
0a30fbc4 2050
2d717e4f 2051 if (pid == 0 && *next_arg != NULL)
45b7b345 2052 {
2d717e4f
DJ
2053 int i, n;
2054
2055 n = argc - (next_arg - argv);
bca929d3 2056 program_argv = xmalloc (sizeof (char *) * (n + 1));
2d717e4f 2057 for (i = 0; i < n; i++)
bca929d3 2058 program_argv[i] = xstrdup (next_arg[i]);
2d717e4f
DJ
2059 program_argv[i] = NULL;
2060
45b7b345 2061 /* Wait till we are at first instruction in program. */
5b1c542e 2062 start_inferior (program_argv);
c906108c 2063
c588c53c
MS
2064 /* We are now (hopefully) stopped at the first instruction of
2065 the target process. This assumes that the target process was
2066 successfully created. */
45b7b345 2067 }
2d717e4f
DJ
2068 else if (pid != 0)
2069 {
5b1c542e 2070 if (attach_inferior (pid) == -1)
2d717e4f
DJ
2071 error ("Attaching not supported on this target");
2072
2073 /* Otherwise succeeded. */
2074 }
45b7b345
DJ
2075 else
2076 {
5b1c542e
PA
2077 last_status.kind = TARGET_WAITKIND_EXITED;
2078 last_status.value.integer = 0;
95954743 2079 last_ptid = minus_one_ptid;
45b7b345 2080 }
c906108c 2081
311de423
PA
2082 /* Don't report shared library events on the initial connection,
2083 even if some libraries are preloaded. Avoids the "stopped by
2084 shared library event" notice on gdb side. */
2085 dlls_changed = 0;
2086
8264bb58
DJ
2087 if (setjmp (toplevel))
2088 {
9f767825 2089 detach_or_kill_for_exit ();
8264bb58
DJ
2090 exit (1);
2091 }
2092
5b1c542e
PA
2093 if (last_status.kind == TARGET_WAITKIND_EXITED
2094 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
2d717e4f
DJ
2095 was_running = 0;
2096 else
2097 was_running = 1;
2098
2099 if (!was_running && !multi_mode)
c588c53c 2100 {
2d717e4f 2101 fprintf (stderr, "No program to debug. GDBserver exiting.\n");
c588c53c
MS
2102 exit (1);
2103 }
2104
c906108c
SS
2105 while (1)
2106 {
a6f3e723 2107 noack_mode = 0;
95954743 2108 multi_process = 0;
bd99dc85
PA
2109 non_stop = 0;
2110
2d717e4f 2111 remote_open (port);
c906108c 2112
2d717e4f
DJ
2113 if (setjmp (toplevel) != 0)
2114 {
2115 /* An error occurred. */
2116 if (response_needed)
2117 {
2118 write_enn (own_buf);
2119 putpkt (own_buf);
2120 }
2121 }
2122
bd99dc85
PA
2123 /* Wait for events. This will return when all event sources are
2124 removed from the event loop. */
2125 start_event_loop ();
2126
2127 /* If an exit was requested (using the "monitor exit" command),
2128 terminate now. The only other way to get here is for
2129 getpkt to fail; close the connection and reopen it at the
2130 top of the loop. */
2131
2132 if (exit_requested)
c906108c 2133 {
9f767825 2134 detach_or_kill_for_exit ();
bd99dc85
PA
2135 exit (0);
2136 }
2137 else
2138 fprintf (stderr, "Remote side has terminated connection. "
2139 "GDBserver will reopen the connection.\n");
2140 }
2141}
01f9e8fa 2142
bd99dc85
PA
2143/* Event loop callback that handles a serial event. The first byte in
2144 the serial buffer gets us here. We expect characters to arrive at
2145 a brisk pace, so we read the rest of the packet with a blocking
2146 getpkt call. */
01f9e8fa 2147
bd99dc85
PA
2148static void
2149process_serial_event (void)
2150{
2151 char ch;
2152 int i = 0;
2153 int signal;
2154 unsigned int len;
2155 CORE_ADDR mem_addr;
95954743 2156 int pid;
bd99dc85
PA
2157 unsigned char sig;
2158 int packet_len;
2159 int new_packet_len = -1;
2160
2161 /* Used to decide when gdbserver should exit in
2162 multi-mode/remote. */
2163 static int have_ran = 0;
2164
2165 if (!have_ran)
2166 have_ran = target_running ();
2167
2168 disable_async_io ();
2169
2170 response_needed = 0;
2171 packet_len = getpkt (own_buf);
2172 if (packet_len <= 0)
2173 {
2174 target_async (0);
2175 remote_close ();
2176 return;
2177 }
2178 response_needed = 1;
2179
2180 i = 0;
2181 ch = own_buf[i++];
2182 switch (ch)
2183 {
2184 case 'q':
2185 handle_query (own_buf, packet_len, &new_packet_len);
2186 break;
2187 case 'Q':
2188 handle_general_set (own_buf);
2189 break;
2190 case 'D':
2191 require_running (own_buf);
95954743
PA
2192
2193 if (multi_process)
2194 {
2195 i++; /* skip ';' */
2196 pid = strtol (&own_buf[i], NULL, 16);
2197 }
2198 else
2199 pid =
2200 ptid_get_pid (((struct inferior_list_entry *) current_inferior)->id);
2201
2202 fprintf (stderr, "Detaching from process %d\n", pid);
2203 if (detach_inferior (pid) != 0)
bd99dc85
PA
2204 write_enn (own_buf);
2205 else
2206 {
95954743 2207 discard_queued_stop_replies (pid);
bd99dc85
PA
2208 write_ok (own_buf);
2209
2210 if (extended_protocol)
c906108c 2211 {
bd99dc85
PA
2212 /* Treat this like a normal program exit. */
2213 last_status.kind = TARGET_WAITKIND_EXITED;
2214 last_status.value.integer = 0;
95954743 2215 last_ptid = pid_to_ptid (pid);
2d717e4f 2216
bd99dc85
PA
2217 current_inferior = NULL;
2218 }
2219 else
2220 {
2221 putpkt (own_buf);
2222 remote_close ();
2223
2224 /* If we are attached, then we can exit. Otherwise, we
2225 need to hang around doing nothing, until the child is
2226 gone. */
95954743
PA
2227 for_each_inferior (&all_processes,
2228 join_inferiors_callback);
bd99dc85
PA
2229 exit (0);
2230 }
2231 }
2232 break;
2233 case '!':
2234 extended_protocol = 1;
2235 write_ok (own_buf);
2236 break;
2237 case '?':
2238 handle_status (own_buf);
2239 break;
2240 case 'H':
2241 if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
2242 {
95954743
PA
2243 ptid_t gdb_id, thread_id;
2244 int pid;
bd99dc85
PA
2245
2246 require_running (own_buf);
95954743
PA
2247
2248 gdb_id = read_ptid (&own_buf[2], NULL);
2249
2250 pid = ptid_get_pid (gdb_id);
2251
2252 if (ptid_equal (gdb_id, null_ptid)
2253 || ptid_equal (gdb_id, minus_one_ptid))
2254 thread_id = null_ptid;
2255 else if (pid != 0
2256 && ptid_equal (pid_to_ptid (pid),
2257 gdb_id))
2258 {
2259 struct thread_info *thread =
2260 (struct thread_info *) find_inferior (&all_threads,
2261 first_thread_of,
2262 &pid);
2263 if (!thread)
2264 {
2265 write_enn (own_buf);
2266 break;
2267 }
2268
2269 thread_id = ((struct inferior_list_entry *)thread)->id;
2270 }
bd99dc85
PA
2271 else
2272 {
2273 thread_id = gdb_id_to_thread_id (gdb_id);
95954743 2274 if (ptid_equal (thread_id, null_ptid))
c906108c 2275 {
a06660f7 2276 write_enn (own_buf);
c906108c
SS
2277 break;
2278 }
c906108c
SS
2279 }
2280
bd99dc85 2281 if (own_buf[1] == 'g')
c906108c 2282 {
95954743 2283 if (ptid_equal (thread_id, null_ptid))
c906108c 2284 {
bd99dc85
PA
2285 /* GDB is telling us to choose any thread. Check if
2286 the currently selected thread is still valid. If
2287 it is not, select the first available. */
2288 struct thread_info *thread =
2289 (struct thread_info *) find_inferior_id (&all_threads,
2290 general_thread);
2291 if (thread == NULL)
2292 thread_id = all_threads.head->id;
c906108c 2293 }
bd99dc85
PA
2294
2295 general_thread = thread_id;
2296 set_desired_inferior (1);
c906108c 2297 }
bd99dc85
PA
2298 else if (own_buf[1] == 'c')
2299 cont_thread = thread_id;
2300 else if (own_buf[1] == 's')
2301 step_thread = thread_id;
c906108c 2302
bd99dc85
PA
2303 write_ok (own_buf);
2304 }
2305 else
2306 {
2307 /* Silently ignore it so that gdb can extend the protocol
2308 without compatibility headaches. */
2309 own_buf[0] = '\0';
2d717e4f 2310 }
bd99dc85
PA
2311 break;
2312 case 'g':
2313 require_running (own_buf);
2314 set_desired_inferior (1);
2315 registers_to_string (own_buf);
2316 break;
2317 case 'G':
2318 require_running (own_buf);
2319 set_desired_inferior (1);
2320 registers_from_string (&own_buf[1]);
2321 write_ok (own_buf);
2322 break;
2323 case 'm':
2324 require_running (own_buf);
2325 decode_m_packet (&own_buf[1], &mem_addr, &len);
2326 if (read_inferior_memory (mem_addr, mem_buf, len) == 0)
2327 convert_int_to_ascii (mem_buf, own_buf, len);
2328 else
2329 write_enn (own_buf);
2330 break;
2331 case 'M':
2332 require_running (own_buf);
2333 decode_M_packet (&own_buf[1], &mem_addr, &len, mem_buf);
2334 if (write_inferior_memory (mem_addr, mem_buf, len) == 0)
2335 write_ok (own_buf);
2336 else
2337 write_enn (own_buf);
2338 break;
2339 case 'X':
2340 require_running (own_buf);
2341 if (decode_X_packet (&own_buf[1], packet_len - 1,
2342 &mem_addr, &len, mem_buf) < 0
2343 || write_inferior_memory (mem_addr, mem_buf, len) != 0)
2344 write_enn (own_buf);
2345 else
2346 write_ok (own_buf);
2347 break;
2348 case 'C':
2349 require_running (own_buf);
2350 convert_ascii_to_int (own_buf + 1, &sig, 1);
2351 if (target_signal_to_host_p (sig))
2352 signal = target_signal_to_host (sig);
2353 else
2354 signal = 0;
2355 myresume (own_buf, 0, signal);
2356 break;
2357 case 'S':
2358 require_running (own_buf);
2359 convert_ascii_to_int (own_buf + 1, &sig, 1);
2360 if (target_signal_to_host_p (sig))
2361 signal = target_signal_to_host (sig);
2362 else
2363 signal = 0;
2364 myresume (own_buf, 1, signal);
2365 break;
2366 case 'c':
2367 require_running (own_buf);
2368 signal = 0;
2369 myresume (own_buf, 0, signal);
2370 break;
2371 case 's':
2372 require_running (own_buf);
2373 signal = 0;
2374 myresume (own_buf, 1, signal);
2375 break;
c6314022
AR
2376 case 'Z': /* insert_ ... */
2377 /* Fallthrough. */
2378 case 'z': /* remove_ ... */
bd99dc85
PA
2379 {
2380 char *lenptr;
2381 char *dataptr;
2382 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
2383 int len = strtol (lenptr + 1, &dataptr, 16);
2384 char type = own_buf[1];
c6314022
AR
2385 int res;
2386 const int insert_ = ch == 'Z';
2387
2388 /* Type: '0' - software-breakpoint
2389 '1' - hardware-breakpoint
2390 '2' - write watchpoint
2391 '3' - read watchpoint
2392 '4' - access watchpoint */
bd99dc85
PA
2393
2394 if (the_target->insert_watchpoint == NULL
c6314022
AR
2395 || the_target->remove_watchpoint == NULL)
2396 res = 1; /* Not supported. */
bd99dc85 2397 else
c6314022
AR
2398 switch (type)
2399 {
2400 case '2':
2401 /* Fallthrough. */
2402 case '3':
2403 /* Fallthrough. */
2404 case '4':
2405 require_running (own_buf);
2406 /* Fallthrough. */
2407 case '0':
2408 /* Fallthrough. */
2409 case '1':
2410 res = insert_ ? (*the_target->insert_watchpoint) (type, addr,
2411 len)
2412 : (*the_target->remove_watchpoint) (type, addr,
2413 len);
2414 break;
2415 default:
2416 res = -1; /* Unrecognized type. */
2417 }
bd99dc85 2418
c6314022
AR
2419 if (res == 0)
2420 write_ok (own_buf);
2421 else if (res == 1)
2422 /* Unsupported. */
2423 own_buf[0] = '\0';
bd99dc85 2424 else
c6314022 2425 write_enn (own_buf);
bd99dc85
PA
2426 break;
2427 }
2428 case 'k':
2429 response_needed = 0;
2430 if (!target_running ())
95954743
PA
2431 /* The packet we received doesn't make sense - but we can't
2432 reply to it, either. */
bd99dc85 2433 return;
c906108c 2434
95954743
PA
2435 fprintf (stderr, "Killing all inferiors\n");
2436 for_each_inferior (&all_processes, kill_inferior_callback);
c906108c 2437
bd99dc85
PA
2438 /* When using the extended protocol, we wait with no program
2439 running. The traditional protocol will exit instead. */
2440 if (extended_protocol)
2441 {
2442 last_status.kind = TARGET_WAITKIND_EXITED;
2443 last_status.value.sig = TARGET_SIGNAL_KILL;
2444 return;
2445 }
2446 else
c906108c 2447 {
c906108c 2448 exit (0);
bd99dc85
PA
2449 break;
2450 }
2451 case 'T':
2452 {
95954743 2453 ptid_t gdb_id, thread_id;
bd99dc85
PA
2454
2455 require_running (own_buf);
95954743
PA
2456
2457 gdb_id = read_ptid (&own_buf[1], NULL);
bd99dc85 2458 thread_id = gdb_id_to_thread_id (gdb_id);
95954743 2459 if (ptid_equal (thread_id, null_ptid))
bd99dc85
PA
2460 {
2461 write_enn (own_buf);
2462 break;
2463 }
2464
2465 if (mythread_alive (thread_id))
2466 write_ok (own_buf);
2467 else
2468 write_enn (own_buf);
2469 }
2470 break;
2471 case 'R':
2472 response_needed = 0;
2473
2474 /* Restarting the inferior is only supported in the extended
2475 protocol. */
2476 if (extended_protocol)
2477 {
2478 if (target_running ())
95954743
PA
2479 for_each_inferior (&all_processes,
2480 kill_inferior_callback);
bd99dc85
PA
2481 fprintf (stderr, "GDBserver restarting\n");
2482
2483 /* Wait till we are at 1st instruction in prog. */
2484 if (program_argv != NULL)
2485 start_inferior (program_argv);
2486 else
2487 {
2488 last_status.kind = TARGET_WAITKIND_EXITED;
2489 last_status.value.sig = TARGET_SIGNAL_KILL;
2490 }
2491 return;
c906108c
SS
2492 }
2493 else
2494 {
bd99dc85
PA
2495 /* It is a request we don't understand. Respond with an
2496 empty packet so that gdb knows that we don't support this
2497 request. */
2498 own_buf[0] = '\0';
2499 break;
2500 }
2501 case 'v':
2502 /* Extended (long) request. */
2503 handle_v_requests (own_buf, packet_len, &new_packet_len);
2504 break;
2505
2506 default:
2507 /* It is a request we don't understand. Respond with an empty
2508 packet so that gdb knows that we don't support this
2509 request. */
2510 own_buf[0] = '\0';
2511 break;
2512 }
2513
2514 if (new_packet_len != -1)
2515 putpkt_binary (own_buf, new_packet_len);
2516 else
2517 putpkt (own_buf);
2518
2519 response_needed = 0;
2520
2521 if (!extended_protocol && have_ran && !target_running ())
2522 {
2523 /* In non-stop, defer exiting until GDB had a chance to query
2524 the whole vStopped list (until it gets an OK). */
2525 if (!notif_queue)
2526 {
2527 fprintf (stderr, "GDBserver exiting\n");
c906108c 2528 remote_close ();
bd99dc85 2529 exit (0);
c906108c
SS
2530 }
2531 }
2532}
bd99dc85
PA
2533
2534/* Event-loop callback for serial events. */
2535
2536void
2537handle_serial_event (int err, gdb_client_data client_data)
2538{
2539 if (debug_threads)
2540 fprintf (stderr, "handling possible serial event\n");
2541
2542 /* Really handle it. */
2543 process_serial_event ();
2544
2545 /* Be sure to not change the selected inferior behind GDB's back.
2546 Important in the non-stop mode asynchronous protocol. */
2547 set_desired_inferior (1);
2548}
2549
2550/* Event-loop callback for target events. */
2551
2552void
2553handle_target_event (int err, gdb_client_data client_data)
2554{
2555 if (debug_threads)
2556 fprintf (stderr, "handling possible target event\n");
2557
95954743
PA
2558 last_ptid = mywait (minus_one_ptid, &last_status,
2559 TARGET_WNOHANG, 1);
bd99dc85
PA
2560
2561 if (last_status.kind != TARGET_WAITKIND_IGNORE)
2562 {
2563 /* Something interesting. Tell GDB about it. */
2564 push_event (last_ptid, &last_status);
2565 }
2566
2567 /* Be sure to not change the selected inferior behind GDB's back.
2568 Important in the non-stop mode asynchronous protocol. */
2569 set_desired_inferior (1);
2570}
This page took 0.798574 seconds and 4 git commands to generate.