gdb/
[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
a1928bad
DJ
35unsigned long cont_thread;
36unsigned long general_thread;
37unsigned long step_thread;
38unsigned long thread_from_wait;
39unsigned long old_thread_from_wait;
0d62e5e8
DJ
40int server_waiting;
41
2d717e4f
DJ
42static int extended_protocol;
43static int attached;
44static int response_needed;
45static int exit_requested;
46
ccd213ac 47static char **program_argv, **wrapper_argv;
2d717e4f 48
c74d0ad8
DJ
49/* Enable miscellaneous debugging output. The name is historical - it
50 was originally used to debug LinuxThreads support. */
51int debug_threads;
52
89be2091
DJ
53int pass_signals[TARGET_SIGNAL_LAST];
54
c906108c 55jmp_buf toplevel;
c906108c 56
9b4b61c8
UW
57const char *gdbserver_xmltarget;
58
a9fa9f7d
DJ
59/* The PID of the originally created or attached inferior. Used to
60 send signals to the process when GDB sends us an asynchronous interrupt
61 (user hitting Control-C in the client), and to wait for the child to exit
62 when no longer debugging it. */
63
a1928bad 64unsigned long signal_pid;
a9fa9f7d 65
290fadea
RS
66#ifdef SIGTTOU
67/* A file descriptor for the controlling terminal. */
68int terminal_fd;
69
70/* TERMINAL_FD's original foreground group. */
71pid_t old_foreground_pgrp;
72
73/* Hand back terminal ownership to the original foreground group. */
74
75static void
76restore_old_foreground_pgrp (void)
77{
78 tcsetpgrp (terminal_fd, old_foreground_pgrp);
79}
80#endif
81
ec56be1b
PA
82/* Set if you want to disable optional thread related packets support
83 in gdbserver, for the sake of testing GDB against stubs that don't
84 support them. */
85int disable_packet_vCont;
86int disable_packet_Tthread;
87int disable_packet_qC;
88int disable_packet_qfThreadInfo;
89
2d717e4f
DJ
90static int
91target_running (void)
92{
93 return all_threads.head != NULL;
94}
95
fc620387 96static int
ccd213ac 97start_inferior (char **argv, char *statusptr)
c906108c 98{
ccd213ac 99 char **new_argv = argv;
2d717e4f
DJ
100 attached = 0;
101
ccd213ac
DJ
102 if (wrapper_argv != NULL)
103 {
104 int i, count = 1;
105
106 for (i = 0; wrapper_argv[i] != NULL; i++)
107 count++;
108 for (i = 0; argv[i] != NULL; i++)
109 count++;
110 new_argv = alloca (sizeof (char *) * count);
111 count = 0;
112 for (i = 0; wrapper_argv[i] != NULL; i++)
113 new_argv[count++] = wrapper_argv[i];
114 for (i = 0; argv[i] != NULL; i++)
115 new_argv[count++] = argv[i];
116 new_argv[count] = NULL;
117 }
118
b80864fb 119#ifdef SIGTTOU
a9fa9f7d
DJ
120 signal (SIGTTOU, SIG_DFL);
121 signal (SIGTTIN, SIG_DFL);
b80864fb 122#endif
a9fa9f7d 123
ccd213ac 124 signal_pid = create_inferior (new_argv[0], new_argv);
0d62e5e8 125
c588c53c
MS
126 /* FIXME: we don't actually know at this point that the create
127 actually succeeded. We won't know that until we wait. */
a1928bad 128 fprintf (stderr, "Process %s created; pid = %ld\n", argv[0],
a9fa9f7d 129 signal_pid);
b80864fb 130 fflush (stderr);
a9fa9f7d 131
b80864fb 132#ifdef SIGTTOU
a9fa9f7d
DJ
133 signal (SIGTTOU, SIG_IGN);
134 signal (SIGTTIN, SIG_IGN);
290fadea
RS
135 terminal_fd = fileno (stderr);
136 old_foreground_pgrp = tcgetpgrp (terminal_fd);
137 tcsetpgrp (terminal_fd, signal_pid);
138 atexit (restore_old_foreground_pgrp);
b80864fb 139#endif
c906108c 140
ccd213ac
DJ
141 if (wrapper_argv != NULL)
142 {
143 struct thread_resume resume_info;
144 int sig;
145
146 resume_info.thread = -1;
147 resume_info.step = 0;
148 resume_info.sig = 0;
149 resume_info.leave_stopped = 0;
150
151 sig = mywait (statusptr, 0);
152 if (*statusptr != 'T')
153 return sig;
154
155 do
156 {
157 (*the_target->resume) (&resume_info);
158
159 sig = mywait (statusptr, 0);
160 if (*statusptr != 'T')
161 return sig;
162 }
163 while (sig != TARGET_SIGNAL_TRAP);
164
165 return sig;
166 }
167
c588c53c
MS
168 /* Wait till we are at 1st instruction in program, return signal
169 number (assuming success). */
0d62e5e8 170 return mywait (statusptr, 0);
c906108c
SS
171}
172
45b7b345 173static int
fc620387 174attach_inferior (int pid, char *statusptr, int *sigptr)
45b7b345
DJ
175{
176 /* myattach should return -1 if attaching is unsupported,
177 0 if it succeeded, and call error() otherwise. */
a9fa9f7d 178
45b7b345
DJ
179 if (myattach (pid) != 0)
180 return -1;
181
2d717e4f
DJ
182 attached = 1;
183
6910d122 184 fprintf (stderr, "Attached; pid = %d\n", pid);
b80864fb 185 fflush (stderr);
6910d122 186
a9fa9f7d
DJ
187 /* FIXME - It may be that we should get the SIGNAL_PID from the
188 attach function, so that it can be the main thread instead of
189 whichever we were told to attach to. */
190 signal_pid = pid;
191
0d62e5e8 192 *sigptr = mywait (statusptr, 0);
45b7b345 193
9db87ebd
DJ
194 /* GDB knows to ignore the first SIGSTOP after attaching to a running
195 process using the "attach" command, but this is different; it's
196 just using "target remote". Pretend it's just starting up. */
b80864fb
DJ
197 if (*statusptr == 'T' && *sigptr == TARGET_SIGNAL_STOP)
198 *sigptr = TARGET_SIGNAL_TRAP;
9db87ebd 199
45b7b345
DJ
200 return 0;
201}
202
c906108c 203extern int remote_debug;
ce3a066d 204
0876f84a
DJ
205/* Decode a qXfer read request. Return 0 if everything looks OK,
206 or -1 otherwise. */
207
208static int
209decode_xfer_read (char *buf, char **annex, CORE_ADDR *ofs, unsigned int *len)
210{
211 /* Extract and NUL-terminate the annex. */
212 *annex = buf;
213 while (*buf && *buf != ':')
214 buf++;
215 if (*buf == '\0')
216 return -1;
217 *buf++ = 0;
218
0e7f50da 219 /* After the read marker and annex, qXfer looks like a
0876f84a
DJ
220 traditional 'm' packet. */
221 decode_m_packet (buf, ofs, len);
222
223 return 0;
224}
225
226/* Write the response to a successful qXfer read. Returns the
227 length of the (binary) data stored in BUF, corresponding
228 to as much of DATA/LEN as we could fit. IS_MORE controls
229 the first character of the response. */
230static int
23181151 231write_qxfer_response (char *buf, const void *data, int len, int is_more)
0876f84a
DJ
232{
233 int out_len;
234
235 if (is_more)
236 buf[0] = 'm';
237 else
238 buf[0] = 'l';
239
240 return remote_escape_output (data, len, (unsigned char *) buf + 1, &out_len,
241 PBUFSIZ - 2) + 1;
242}
243
89be2091
DJ
244/* Handle all of the extended 'Q' packets. */
245void
246handle_general_set (char *own_buf)
247{
248 if (strncmp ("QPassSignals:", own_buf, strlen ("QPassSignals:")) == 0)
249 {
250 int numsigs = (int) TARGET_SIGNAL_LAST, i;
251 const char *p = own_buf + strlen ("QPassSignals:");
252 CORE_ADDR cursig;
253
254 p = decode_address_to_semicolon (&cursig, p);
255 for (i = 0; i < numsigs; i++)
256 {
257 if (i == cursig)
258 {
259 pass_signals[i] = 1;
260 if (*p == '\0')
261 /* Keep looping, to clear the remaining signals. */
262 cursig = -1;
263 else
264 p = decode_address_to_semicolon (&cursig, p);
265 }
266 else
267 pass_signals[i] = 0;
268 }
269 strcpy (own_buf, "OK");
270 return;
271 }
272
a6f3e723
SL
273 if (strcmp (own_buf, "QStartNoAckMode") == 0)
274 {
275 if (remote_debug)
276 {
277 fprintf (stderr, "[noack mode enabled]\n");
278 fflush (stderr);
279 }
280
281 noack_mode = 1;
282 write_ok (own_buf);
283 return;
284 }
285
89be2091
DJ
286 /* Otherwise we didn't know what packet it was. Say we didn't
287 understand it. */
288 own_buf[0] = 0;
289}
290
23181151 291static const char *
fb1e4ffc 292get_features_xml (const char *annex)
23181151 293{
9b4b61c8
UW
294 /* gdbserver_xmltarget defines what to return when looking
295 for the "target.xml" file. Its contents can either be
296 verbatim XML code (prefixed with a '@') or else the name
297 of the actual XML file to be used in place of "target.xml".
fb1e4ffc 298
9b4b61c8
UW
299 This variable is set up from the auto-generated
300 init_registers_... routine for the current target. */
fb1e4ffc 301
9b4b61c8 302 if (gdbserver_xmltarget
221c031f 303 && strcmp (annex, "target.xml") == 0)
23181151 304 {
9b4b61c8
UW
305 if (*gdbserver_xmltarget == '@')
306 return gdbserver_xmltarget + 1;
23181151 307 else
9b4b61c8 308 annex = gdbserver_xmltarget;
23181151
DJ
309 }
310
9b4b61c8
UW
311#ifdef USE_XML
312 {
313 extern const char *const xml_builtin[][2];
314 int i;
315
316 /* Look for the annex. */
317 for (i = 0; xml_builtin[i][0] != NULL; i++)
318 if (strcmp (annex, xml_builtin[i][0]) == 0)
319 break;
320
321 if (xml_builtin[i][0] != NULL)
322 return xml_builtin[i][1];
323 }
324#endif
325
326 return NULL;
23181151
DJ
327}
328
c74d0ad8
DJ
329void
330monitor_show_help (void)
331{
332 monitor_output ("The following monitor commands are supported:\n");
333 monitor_output (" set debug <0|1>\n");
334 monitor_output (" Enable general debugging messages\n");
335 monitor_output (" set remote-debug <0|1>\n");
336 monitor_output (" Enable remote protocol debugging messages\n");
ecd7ecbc
DJ
337 monitor_output (" exit\n");
338 monitor_output (" Quit GDBserver\n");
c74d0ad8
DJ
339}
340
08388c79
DE
341/* Subroutine of handle_search_memory to simplify it. */
342
343static int
344handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len,
345 gdb_byte *pattern, unsigned pattern_len,
346 gdb_byte *search_buf,
347 unsigned chunk_size, unsigned search_buf_size,
348 CORE_ADDR *found_addrp)
349{
350 /* Prime the search buffer. */
351
352 if (read_inferior_memory (start_addr, search_buf, search_buf_size) != 0)
353 {
5e1471f5 354 warning ("Unable to access target memory at 0x%lx, halting search.",
08388c79
DE
355 (long) start_addr);
356 return -1;
357 }
358
359 /* Perform the search.
360
361 The loop is kept simple by allocating [N + pattern-length - 1] bytes.
362 When we've scanned N bytes we copy the trailing bytes to the start and
363 read in another N bytes. */
364
365 while (search_space_len >= pattern_len)
366 {
367 gdb_byte *found_ptr;
368 unsigned nr_search_bytes = (search_space_len < search_buf_size
369 ? search_space_len
370 : search_buf_size);
371
372 found_ptr = memmem (search_buf, nr_search_bytes, pattern, pattern_len);
373
374 if (found_ptr != NULL)
375 {
376 CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
377 *found_addrp = found_addr;
378 return 1;
379 }
380
381 /* Not found in this chunk, skip to next chunk. */
382
383 /* Don't let search_space_len wrap here, it's unsigned. */
384 if (search_space_len >= chunk_size)
385 search_space_len -= chunk_size;
386 else
387 search_space_len = 0;
388
389 if (search_space_len >= pattern_len)
390 {
391 unsigned keep_len = search_buf_size - chunk_size;
392 CORE_ADDR read_addr = start_addr + keep_len;
393 int nr_to_read;
394
395 /* Copy the trailing part of the previous iteration to the front
396 of the buffer for the next iteration. */
397 memcpy (search_buf, search_buf + chunk_size, keep_len);
398
399 nr_to_read = (search_space_len - keep_len < chunk_size
400 ? search_space_len - keep_len
401 : chunk_size);
402
403 if (read_inferior_memory (read_addr, search_buf + keep_len,
404 nr_to_read) != 0)
405 {
5e1471f5 406 warning ("Unable to access target memory at 0x%lx, halting search.",
08388c79
DE
407 (long) read_addr);
408 return -1;
409 }
410
411 start_addr += chunk_size;
412 }
413 }
414
415 /* Not found. */
416
417 return 0;
418}
419
420/* Handle qSearch:memory packets. */
421
422static void
423handle_search_memory (char *own_buf, int packet_len)
424{
425 CORE_ADDR start_addr;
426 CORE_ADDR search_space_len;
427 gdb_byte *pattern;
428 unsigned int pattern_len;
429 /* NOTE: also defined in find.c testcase. */
430#define SEARCH_CHUNK_SIZE 16000
431 const unsigned chunk_size = SEARCH_CHUNK_SIZE;
432 /* Buffer to hold memory contents for searching. */
433 gdb_byte *search_buf;
434 unsigned search_buf_size;
435 int found;
436 CORE_ADDR found_addr;
437 int cmd_name_len = sizeof ("qSearch:memory:") - 1;
438
aef93bd7 439 pattern = malloc (packet_len);
08388c79
DE
440 if (pattern == NULL)
441 {
5e1471f5 442 error ("Unable to allocate memory to perform the search");
08388c79
DE
443 strcpy (own_buf, "E00");
444 return;
445 }
446 if (decode_search_memory_packet (own_buf + cmd_name_len,
447 packet_len - cmd_name_len,
448 &start_addr, &search_space_len,
449 pattern, &pattern_len) < 0)
450 {
451 free (pattern);
5e1471f5 452 error ("Error in parsing qSearch:memory packet");
08388c79
DE
453 strcpy (own_buf, "E00");
454 return;
455 }
456
457 search_buf_size = chunk_size + pattern_len - 1;
458
459 /* No point in trying to allocate a buffer larger than the search space. */
460 if (search_space_len < search_buf_size)
461 search_buf_size = search_space_len;
462
aef93bd7 463 search_buf = malloc (search_buf_size);
08388c79
DE
464 if (search_buf == NULL)
465 {
466 free (pattern);
5e1471f5 467 error ("Unable to allocate memory to perform the search");
08388c79
DE
468 strcpy (own_buf, "E00");
469 return;
470 }
471
472 found = handle_search_memory_1 (start_addr, search_space_len,
473 pattern, pattern_len,
474 search_buf, chunk_size, search_buf_size,
475 &found_addr);
476
477 if (found > 0)
478 sprintf (own_buf, "1,%lx", (long) found_addr);
479 else if (found == 0)
480 strcpy (own_buf, "0");
481 else
482 strcpy (own_buf, "E00");
483
484 free (search_buf);
485 free (pattern);
486}
487
2d717e4f
DJ
488#define require_running(BUF) \
489 if (!target_running ()) \
490 { \
491 write_enn (BUF); \
492 return; \
493 }
494
ce3a066d
DJ
495/* Handle all of the extended 'q' packets. */
496void
0e7f50da 497handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
ce3a066d 498{
0d62e5e8
DJ
499 static struct inferior_list_entry *thread_ptr;
500
bb63802a 501 /* Reply the current thread id. */
db42f210 502 if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC)
bb63802a 503 {
2d717e4f 504 require_running (own_buf);
bb63802a
UW
505 thread_ptr = all_threads.head;
506 sprintf (own_buf, "QC%x",
db42f210 507 thread_to_gdb_id ((struct thread_info *)thread_ptr));
bb63802a
UW
508 return;
509 }
510
ce3a066d
DJ
511 if (strcmp ("qSymbol::", own_buf) == 0)
512 {
2d717e4f 513 if (target_running () && the_target->look_up_symbols != NULL)
2f2893d9
DJ
514 (*the_target->look_up_symbols) ();
515
ce3a066d
DJ
516 strcpy (own_buf, "OK");
517 return;
518 }
519
db42f210 520 if (!disable_packet_qfThreadInfo)
0d62e5e8 521 {
db42f210 522 if (strcmp ("qfThreadInfo", own_buf) == 0)
0d62e5e8 523 {
db42f210
PA
524 require_running (own_buf);
525 thread_ptr = all_threads.head;
a06660f7 526 sprintf (own_buf, "m%x", thread_to_gdb_id ((struct thread_info *)thread_ptr));
0d62e5e8
DJ
527 thread_ptr = thread_ptr->next;
528 return;
529 }
db42f210
PA
530
531 if (strcmp ("qsThreadInfo", own_buf) == 0)
0d62e5e8 532 {
db42f210
PA
533 require_running (own_buf);
534 if (thread_ptr != NULL)
535 {
536 sprintf (own_buf, "m%x", thread_to_gdb_id ((struct thread_info *)thread_ptr));
537 thread_ptr = thread_ptr->next;
538 return;
539 }
540 else
541 {
542 sprintf (own_buf, "l");
543 return;
544 }
0d62e5e8
DJ
545 }
546 }
aa691b87 547
52fb6437
NS
548 if (the_target->read_offsets != NULL
549 && strcmp ("qOffsets", own_buf) == 0)
550 {
551 CORE_ADDR text, data;
2d717e4f
DJ
552
553 require_running (own_buf);
52fb6437
NS
554 if (the_target->read_offsets (&text, &data))
555 sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
556 (long)text, (long)data, (long)data);
557 else
558 write_enn (own_buf);
559
560 return;
561 }
562
0e7f50da
UW
563 if (the_target->qxfer_spu != NULL
564 && strncmp ("qXfer:spu:read:", own_buf, 15) == 0)
565 {
566 char *annex;
567 int n;
568 unsigned int len;
569 CORE_ADDR ofs;
570 unsigned char *spu_buf;
571
2d717e4f 572 require_running (own_buf);
0e7f50da
UW
573 strcpy (own_buf, "E00");
574 if (decode_xfer_read (own_buf + 15, &annex, &ofs, &len) < 0)
575 return;
576 if (len > PBUFSIZ - 2)
577 len = PBUFSIZ - 2;
aef93bd7 578 spu_buf = malloc (len + 1);
0e7f50da
UW
579 if (!spu_buf)
580 return;
581
582 n = (*the_target->qxfer_spu) (annex, spu_buf, NULL, ofs, len + 1);
583 if (n < 0)
584 write_enn (own_buf);
585 else if (n > len)
586 *new_packet_len_p = write_qxfer_response
587 (own_buf, spu_buf, len, 1);
588 else
589 *new_packet_len_p = write_qxfer_response
590 (own_buf, spu_buf, n, 0);
591
592 free (spu_buf);
593 return;
594 }
595
596 if (the_target->qxfer_spu != NULL
597 && strncmp ("qXfer:spu:write:", own_buf, 16) == 0)
598 {
599 char *annex;
600 int n;
601 unsigned int len;
602 CORE_ADDR ofs;
603 unsigned char *spu_buf;
604
2d717e4f 605 require_running (own_buf);
0e7f50da 606 strcpy (own_buf, "E00");
aef93bd7 607 spu_buf = malloc (packet_len - 15);
0e7f50da
UW
608 if (!spu_buf)
609 return;
610 if (decode_xfer_write (own_buf + 16, packet_len - 16, &annex,
611 &ofs, &len, spu_buf) < 0)
612 {
613 free (spu_buf);
614 return;
615 }
616
617 n = (*the_target->qxfer_spu)
618 (annex, NULL, (unsigned const char *)spu_buf, ofs, len);
619 if (n < 0)
620 write_enn (own_buf);
621 else
622 sprintf (own_buf, "%x", n);
623
624 free (spu_buf);
625 return;
626 }
627
aa691b87 628 if (the_target->read_auxv != NULL
0876f84a 629 && strncmp ("qXfer:auxv:read:", own_buf, 16) == 0)
aa691b87 630 {
0876f84a
DJ
631 unsigned char *data;
632 int n;
aa691b87
RM
633 CORE_ADDR ofs;
634 unsigned int len;
0876f84a
DJ
635 char *annex;
636
2d717e4f
DJ
637 require_running (own_buf);
638
0876f84a
DJ
639 /* Reject any annex; grab the offset and length. */
640 if (decode_xfer_read (own_buf + 16, &annex, &ofs, &len) < 0
641 || annex[0] != '\0')
642 {
643 strcpy (own_buf, "E00");
644 return;
645 }
646
647 /* Read one extra byte, as an indicator of whether there is
648 more. */
649 if (len > PBUFSIZ - 2)
650 len = PBUFSIZ - 2;
aef93bd7
DE
651 data = malloc (len + 1);
652 if (data == NULL)
653 {
654 write_enn (own_buf);
655 return;
656 }
0876f84a 657 n = (*the_target->read_auxv) (ofs, data, len + 1);
000ef4f0
DJ
658 if (n < 0)
659 write_enn (own_buf);
660 else if (n > len)
0876f84a 661 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
aa691b87 662 else
0876f84a
DJ
663 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
664
665 free (data);
666
aa691b87
RM
667 return;
668 }
669
23181151
DJ
670 if (strncmp ("qXfer:features:read:", own_buf, 20) == 0)
671 {
672 CORE_ADDR ofs;
673 unsigned int len, total_len;
674 const char *document;
675 char *annex;
676
2d717e4f
DJ
677 require_running (own_buf);
678
fb1e4ffc
DJ
679 /* Grab the annex, offset, and length. */
680 if (decode_xfer_read (own_buf + 20, &annex, &ofs, &len) < 0)
681 {
682 strcpy (own_buf, "E00");
683 return;
684 }
685
686 /* Now grab the correct annex. */
687 document = get_features_xml (annex);
688 if (document == NULL)
23181151
DJ
689 {
690 strcpy (own_buf, "E00");
691 return;
692 }
693
694 total_len = strlen (document);
695 if (len > PBUFSIZ - 2)
696 len = PBUFSIZ - 2;
697
698 if (ofs > total_len)
699 write_enn (own_buf);
700 else if (len < total_len - ofs)
701 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
702 len, 1);
703 else
704 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
705 total_len - ofs, 0);
706
707 return;
708 }
709
255e7678
DJ
710 if (strncmp ("qXfer:libraries:read:", own_buf, 21) == 0)
711 {
712 CORE_ADDR ofs;
713 unsigned int len, total_len;
714 char *document, *p;
715 struct inferior_list_entry *dll_ptr;
716 char *annex;
717
2d717e4f
DJ
718 require_running (own_buf);
719
255e7678
DJ
720 /* Reject any annex; grab the offset and length. */
721 if (decode_xfer_read (own_buf + 21, &annex, &ofs, &len) < 0
722 || annex[0] != '\0')
723 {
724 strcpy (own_buf, "E00");
725 return;
726 }
727
728 /* Over-estimate the necessary memory. Assume that every character
729 in the library name must be escaped. */
730 total_len = 64;
731 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
732 total_len += 128 + 6 * strlen (((struct dll_info *) dll_ptr)->name);
733
aef93bd7
DE
734 document = malloc (total_len);
735 if (document == NULL)
736 {
737 write_enn (own_buf);
738 return;
739 }
255e7678
DJ
740 strcpy (document, "<library-list>\n");
741 p = document + strlen (document);
742
743 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
744 {
745 struct dll_info *dll = (struct dll_info *) dll_ptr;
746 char *name;
747
748 strcpy (p, " <library name=\"");
749 p = p + strlen (p);
750 name = xml_escape_text (dll->name);
751 strcpy (p, name);
752 free (name);
753 p = p + strlen (p);
754 strcpy (p, "\"><segment address=\"");
755 p = p + strlen (p);
756 sprintf (p, "0x%lx", (long) dll->base_addr);
757 p = p + strlen (p);
758 strcpy (p, "\"/></library>\n");
759 p = p + strlen (p);
760 }
761
762 strcpy (p, "</library-list>\n");
763
764 total_len = strlen (document);
765 if (len > PBUFSIZ - 2)
766 len = PBUFSIZ - 2;
767
768 if (ofs > total_len)
769 write_enn (own_buf);
770 else if (len < total_len - ofs)
771 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
772 len, 1);
773 else
774 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
775 total_len - ofs, 0);
776
777 free (document);
778 return;
779 }
780
07e059b5
VP
781 if (the_target->qxfer_osdata != NULL
782 && strncmp ("qXfer:osdata:read:", own_buf, 18) == 0)
783 {
784 char *annex;
785 int n;
786 unsigned int len;
787 CORE_ADDR ofs;
788 unsigned char *workbuf;
789
790 strcpy (own_buf, "E00");
791 if (decode_xfer_read (own_buf + 18, &annex, &ofs, &len) < 0)
792 return;
793 if (len > PBUFSIZ - 2)
794 len = PBUFSIZ - 2;
aef93bd7 795 workbuf = malloc (len + 1);
07e059b5
VP
796 if (!workbuf)
797 return;
798
799 n = (*the_target->qxfer_osdata) (annex, workbuf, NULL, ofs, len + 1);
800 if (n < 0)
801 write_enn (own_buf);
802 else if (n > len)
803 *new_packet_len_p = write_qxfer_response
804 (own_buf, workbuf, len, 1);
805 else
806 *new_packet_len_p = write_qxfer_response
807 (own_buf, workbuf, n, 0);
808
809 free (workbuf);
810 return;
811 }
812
be2a5f71
DJ
813 /* Protocol features query. */
814 if (strncmp ("qSupported", own_buf, 10) == 0
815 && (own_buf[10] == ':' || own_buf[10] == '\0'))
816 {
89be2091 817 sprintf (own_buf, "PacketSize=%x;QPassSignals+", PBUFSIZ - 1);
0876f84a 818
255e7678
DJ
819 /* We do not have any hook to indicate whether the target backend
820 supports qXfer:libraries:read, so always report it. */
821 strcat (own_buf, ";qXfer:libraries:read+");
822
0876f84a 823 if (the_target->read_auxv != NULL)
9f2e1e63 824 strcat (own_buf, ";qXfer:auxv:read+");
2d717e4f 825
0e7f50da
UW
826 if (the_target->qxfer_spu != NULL)
827 strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
0876f84a 828
221c031f
UW
829 /* We always report qXfer:features:read, as targets may
830 install XML files on a subsequent call to arch_setup.
831 If we reported to GDB on startup that we don't support
832 qXfer:feature:read at all, we will never be re-queried. */
833 strcat (own_buf, ";qXfer:features:read+");
23181151 834
a6f3e723
SL
835 if (transport_is_reliable)
836 strcat (own_buf, ";QStartNoAckMode+");
07e059b5
VP
837
838 if (the_target->qxfer_osdata != NULL)
839 strcat (own_buf, ";qXfer:osdata:read+");
840
be2a5f71
DJ
841 return;
842 }
843
dae5f5cf
DJ
844 /* Thread-local storage support. */
845 if (the_target->get_tls_address != NULL
846 && strncmp ("qGetTLSAddr:", own_buf, 12) == 0)
847 {
848 char *p = own_buf + 12;
849 CORE_ADDR parts[3], address = 0;
850 int i, err;
851
2d717e4f
DJ
852 require_running (own_buf);
853
dae5f5cf
DJ
854 for (i = 0; i < 3; i++)
855 {
856 char *p2;
857 int len;
858
859 if (p == NULL)
860 break;
861
862 p2 = strchr (p, ',');
863 if (p2)
864 {
865 len = p2 - p;
866 p2++;
867 }
868 else
869 {
870 len = strlen (p);
871 p2 = NULL;
872 }
873
874 decode_address (&parts[i], p, len);
875 p = p2;
876 }
877
878 if (p != NULL || i < 3)
879 err = 1;
880 else
881 {
882 struct thread_info *thread = gdb_id_to_thread (parts[0]);
883
884 if (thread == NULL)
885 err = 2;
886 else
887 err = the_target->get_tls_address (thread, parts[1], parts[2],
888 &address);
889 }
890
891 if (err == 0)
892 {
893 sprintf (own_buf, "%llx", address);
894 return;
895 }
896 else if (err > 0)
897 {
898 write_enn (own_buf);
899 return;
900 }
901
902 /* Otherwise, pretend we do not understand this packet. */
903 }
904
c74d0ad8
DJ
905 /* Handle "monitor" commands. */
906 if (strncmp ("qRcmd,", own_buf, 6) == 0)
907 {
aef93bd7 908 char *mon = malloc (PBUFSIZ);
c74d0ad8
DJ
909 int len = strlen (own_buf + 6);
910
aef93bd7
DE
911 if (mon == NULL)
912 {
913 write_enn (own_buf);
914 return;
915 }
916
d41b6bb4 917 if ((len % 2) != 0 || unhexify (mon, own_buf + 6, len / 2) != len / 2)
c74d0ad8
DJ
918 {
919 write_enn (own_buf);
920 free (mon);
921 return;
922 }
923 mon[len / 2] = '\0';
924
925 write_ok (own_buf);
926
927 if (strcmp (mon, "set debug 1") == 0)
928 {
929 debug_threads = 1;
930 monitor_output ("Debug output enabled.\n");
931 }
932 else if (strcmp (mon, "set debug 0") == 0)
933 {
934 debug_threads = 0;
935 monitor_output ("Debug output disabled.\n");
936 }
937 else if (strcmp (mon, "set remote-debug 1") == 0)
938 {
939 remote_debug = 1;
940 monitor_output ("Protocol debug output enabled.\n");
941 }
942 else if (strcmp (mon, "set remote-debug 0") == 0)
943 {
944 remote_debug = 0;
945 monitor_output ("Protocol debug output disabled.\n");
946 }
947 else if (strcmp (mon, "help") == 0)
948 monitor_show_help ();
2d717e4f
DJ
949 else if (strcmp (mon, "exit") == 0)
950 exit_requested = 1;
c74d0ad8
DJ
951 else
952 {
953 monitor_output ("Unknown monitor command.\n\n");
954 monitor_show_help ();
955 write_enn (own_buf);
956 }
957
958 free (mon);
959 return;
960 }
961
08388c79
DE
962 if (strncmp ("qSearch:memory:", own_buf, sizeof ("qSearch:memory:") - 1) == 0)
963 {
964 require_running (own_buf);
965 handle_search_memory (own_buf, packet_len);
966 return;
967 }
968
ce3a066d
DJ
969 /* Otherwise we didn't know what packet it was. Say we didn't
970 understand it. */
971 own_buf[0] = 0;
972}
973
64386c31
DJ
974/* Parse vCont packets. */
975void
fc620387 976handle_v_cont (char *own_buf, char *status, int *signal)
64386c31
DJ
977{
978 char *p, *q;
979 int n = 0, i = 0;
980 struct thread_resume *resume_info, default_action;
981
982 /* Count the number of semicolons in the packet. There should be one
983 for every action. */
984 p = &own_buf[5];
985 while (p)
986 {
987 n++;
988 p++;
989 p = strchr (p, ';');
990 }
991 /* Allocate room for one extra action, for the default remain-stopped
992 behavior; if no default action is in the list, we'll need the extra
993 slot. */
aef93bd7
DE
994 resume_info = malloc ((n + 1) * sizeof (resume_info[0]));
995 if (resume_info == NULL)
996 goto err;
64386c31
DJ
997
998 default_action.thread = -1;
999 default_action.leave_stopped = 1;
1000 default_action.step = 0;
1001 default_action.sig = 0;
1002
1003 p = &own_buf[5];
1004 i = 0;
1005 while (*p)
1006 {
1007 p++;
1008
1009 resume_info[i].leave_stopped = 0;
1010
1011 if (p[0] == 's' || p[0] == 'S')
1012 resume_info[i].step = 1;
1013 else if (p[0] == 'c' || p[0] == 'C')
1014 resume_info[i].step = 0;
1015 else
1016 goto err;
1017
1018 if (p[0] == 'S' || p[0] == 'C')
1019 {
1020 int sig;
1021 sig = strtol (p + 1, &q, 16);
1022 if (p == q)
1023 goto err;
1024 p = q;
1025
1026 if (!target_signal_to_host_p (sig))
1027 goto err;
1028 resume_info[i].sig = target_signal_to_host (sig);
1029 }
1030 else
1031 {
1032 resume_info[i].sig = 0;
1033 p = p + 1;
1034 }
1035
1036 if (p[0] == 0)
1037 {
1038 resume_info[i].thread = -1;
1039 default_action = resume_info[i];
1040
1041 /* Note: we don't increment i here, we'll overwrite this entry
1042 the next time through. */
1043 }
1044 else if (p[0] == ':')
1045 {
a06660f7
DJ
1046 unsigned int gdb_id = strtoul (p + 1, &q, 16);
1047 unsigned long thread_id;
1048
64386c31
DJ
1049 if (p == q)
1050 goto err;
1051 p = q;
1052 if (p[0] != ';' && p[0] != 0)
1053 goto err;
1054
a06660f7
DJ
1055 thread_id = gdb_id_to_thread_id (gdb_id);
1056 if (thread_id)
1057 resume_info[i].thread = thread_id;
1058 else
1059 goto err;
1060
64386c31
DJ
1061 i++;
1062 }
1063 }
1064
1065 resume_info[i] = default_action;
1066
1067 /* Still used in occasional places in the backend. */
1068 if (n == 1 && resume_info[0].thread != -1)
1069 cont_thread = resume_info[0].thread;
1070 else
1071 cont_thread = -1;
dc3f8883 1072 set_desired_inferior (0);
64386c31 1073
a20d5e98 1074 enable_async_io ();
64386c31
DJ
1075 (*the_target->resume) (resume_info);
1076
1077 free (resume_info);
1078
1079 *signal = mywait (status, 1);
1080 prepare_resume_reply (own_buf, *status, *signal);
a20d5e98 1081 disable_async_io ();
64386c31
DJ
1082 return;
1083
1084err:
255e7678 1085 write_enn (own_buf);
64386c31
DJ
1086 free (resume_info);
1087 return;
1088}
1089
2d717e4f
DJ
1090/* Attach to a new program. Return 1 if successful, 0 if failure. */
1091int
1092handle_v_attach (char *own_buf, char *status, int *signal)
1093{
1094 int pid;
1095
1096 pid = strtol (own_buf + 8, NULL, 16);
1097 if (pid != 0 && attach_inferior (pid, status, signal) == 0)
1098 {
aeba519e
PA
1099 /* Don't report shared library events after attaching, even if
1100 some libraries are preloaded. GDB will always poll the
1101 library list. Avoids the "stopped by shared library event"
1102 notice on the GDB side. */
1103 dlls_changed = 0;
2d717e4f
DJ
1104 prepare_resume_reply (own_buf, *status, *signal);
1105 return 1;
1106 }
1107 else
1108 {
1109 write_enn (own_buf);
1110 return 0;
1111 }
1112}
1113
1114/* Run a new program. Return 1 if successful, 0 if failure. */
1115static int
1116handle_v_run (char *own_buf, char *status, int *signal)
1117{
aef93bd7 1118 char *p, *next_p, **new_argv;
2d717e4f
DJ
1119 int i, new_argc;
1120
1121 new_argc = 0;
1122 for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
1123 {
1124 p++;
1125 new_argc++;
1126 }
1127
aef93bd7
DE
1128 new_argv = calloc (new_argc + 2, sizeof (char *));
1129 if (new_argv == NULL)
1130 {
1131 write_enn (own_buf);
1132 return 0;
1133 }
1134
2d717e4f
DJ
1135 i = 0;
1136 for (p = own_buf + strlen ("vRun;"); *p; p = next_p)
1137 {
1138 next_p = strchr (p, ';');
1139 if (next_p == NULL)
1140 next_p = p + strlen (p);
1141
1142 if (i == 0 && p == next_p)
1143 new_argv[i] = NULL;
1144 else
1145 {
aef93bd7 1146 /* FIXME: Fail request if out of memory instead of dying. */
bca929d3 1147 new_argv[i] = xmalloc (1 + (next_p - p) / 2);
2d717e4f
DJ
1148 unhexify (new_argv[i], p, (next_p - p) / 2);
1149 new_argv[i][(next_p - p) / 2] = '\0';
1150 }
1151
1152 if (*next_p)
1153 next_p++;
1154 i++;
1155 }
1156 new_argv[i] = NULL;
1157
1158 if (new_argv[0] == NULL)
1159 {
f142445f
DJ
1160 /* GDB didn't specify a program to run. Use the program from the
1161 last run with the new argument list. */
9b710a42 1162
2d717e4f
DJ
1163 if (program_argv == NULL)
1164 {
aef93bd7 1165 /* FIXME: new_argv memory leak */
2d717e4f
DJ
1166 write_enn (own_buf);
1167 return 0;
1168 }
1169
aef93bd7
DE
1170 new_argv[0] = strdup (program_argv[0]);
1171 if (new_argv[0] == NULL)
1172 {
1173 /* FIXME: new_argv memory leak */
1174 write_enn (own_buf);
1175 return 0;
1176 }
2d717e4f 1177 }
f142445f 1178
aef93bd7
DE
1179 /* Free the old argv and install the new one. */
1180 freeargv (program_argv);
f142445f 1181 program_argv = new_argv;
2d717e4f
DJ
1182
1183 *signal = start_inferior (program_argv, status);
1184 if (*status == 'T')
1185 {
1186 prepare_resume_reply (own_buf, *status, *signal);
1187 return 1;
1188 }
1189 else
1190 {
1191 write_enn (own_buf);
1192 return 0;
1193 }
1194}
1195
64386c31
DJ
1196/* Handle all of the extended 'v' packets. */
1197void
a6b151f1
DJ
1198handle_v_requests (char *own_buf, char *status, int *signal,
1199 int packet_len, int *new_packet_len)
64386c31 1200{
db42f210 1201 if (!disable_packet_vCont)
64386c31 1202 {
db42f210
PA
1203 if (strncmp (own_buf, "vCont;", 6) == 0)
1204 {
1205 require_running (own_buf);
1206 handle_v_cont (own_buf, status, signal);
1207 return;
1208 }
64386c31 1209
db42f210
PA
1210 if (strncmp (own_buf, "vCont?", 6) == 0)
1211 {
1212 strcpy (own_buf, "vCont;c;C;s;S");
1213 return;
1214 }
64386c31
DJ
1215 }
1216
a6b151f1
DJ
1217 if (strncmp (own_buf, "vFile:", 6) == 0
1218 && handle_vFile (own_buf, packet_len, new_packet_len))
1219 return;
1220
2d717e4f
DJ
1221 if (strncmp (own_buf, "vAttach;", 8) == 0)
1222 {
1223 if (target_running ())
1224 {
fd96d250
PA
1225 fprintf (stderr, "Already debugging a process\n");
1226 write_enn (own_buf);
1227 return;
2d717e4f
DJ
1228 }
1229 handle_v_attach (own_buf, status, signal);
1230 return;
1231 }
1232
1233 if (strncmp (own_buf, "vRun;", 5) == 0)
1234 {
1235 if (target_running ())
1236 {
fd96d250
PA
1237 fprintf (stderr, "Already debugging a process\n");
1238 write_enn (own_buf);
1239 return;
2d717e4f
DJ
1240 }
1241 handle_v_run (own_buf, status, signal);
1242 return;
1243 }
1244
64386c31
DJ
1245 /* Otherwise we didn't know what packet it was. Say we didn't
1246 understand it. */
1247 own_buf[0] = 0;
1248 return;
1249}
1250
1251void
27524b67 1252myresume (char *own_buf, int step, int *signalp, char *statusp)
64386c31
DJ
1253{
1254 struct thread_resume resume_info[2];
1255 int n = 0;
a20d5e98
DJ
1256 int sig = *signalp;
1257
1258 set_desired_inferior (0);
64386c31 1259
d592fa2f 1260 if (step || sig || (cont_thread != 0 && cont_thread != -1))
64386c31
DJ
1261 {
1262 resume_info[0].thread
1263 = ((struct inferior_list_entry *) current_inferior)->id;
1264 resume_info[0].step = step;
1265 resume_info[0].sig = sig;
1266 resume_info[0].leave_stopped = 0;
1267 n++;
1268 }
1269 resume_info[n].thread = -1;
1270 resume_info[n].step = 0;
1271 resume_info[n].sig = 0;
d592fa2f 1272 resume_info[n].leave_stopped = (cont_thread != 0 && cont_thread != -1);
64386c31 1273
a20d5e98 1274 enable_async_io ();
64386c31 1275 (*the_target->resume) (resume_info);
a20d5e98
DJ
1276 *signalp = mywait (statusp, 1);
1277 prepare_resume_reply (own_buf, *statusp, *signalp);
1278 disable_async_io ();
64386c31
DJ
1279}
1280
dd24457d
DJ
1281static void
1282gdbserver_version (void)
1283{
c16158bc 1284 printf ("GNU gdbserver %s%s\n"
ff703abe 1285 "Copyright (C) 2009 Free Software Foundation, Inc.\n"
dd24457d
DJ
1286 "gdbserver is free software, covered by the GNU General Public License.\n"
1287 "This gdbserver was configured as \"%s\"\n",
c16158bc 1288 PKGVERSION, version, host_name);
dd24457d
DJ
1289}
1290
0bc68c49 1291static void
c16158bc 1292gdbserver_usage (FILE *stream)
0bc68c49 1293{
c16158bc
JM
1294 fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
1295 "\tgdbserver [OPTIONS] --attach COMM PID\n"
1296 "\tgdbserver [OPTIONS] --multi COMM\n"
1297 "\n"
1298 "COMM may either be a tty device (for serial debugging), or \n"
1299 "HOST:PORT to listen for a TCP connection.\n"
1300 "\n"
1301 "Options:\n"
62709adf
PA
1302 " --debug Enable general debugging output.\n"
1303 " --remote-debug Enable remote protocol debugging output.\n"
1304 " --version Display version information and exit.\n"
1305 " --wrapper WRAPPER -- Run WRAPPER to start new programs.\n");
c16158bc
JM
1306 if (REPORT_BUGS_TO[0] && stream == stdout)
1307 fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
0bc68c49
DJ
1308}
1309
db42f210
PA
1310static void
1311gdbserver_show_disableable (FILE *stream)
1312{
1313 fprintf (stream, "Disableable packets:\n"
1314 " vCont \tAll vCont packets\n"
1315 " qC \tQuerying the current thread\n"
1316 " qfThreadInfo\tThread listing\n"
1317 " Tthread \tPassing the thread specifier in the T stop reply packet\n"
1318 " threads \tAll of the above\n");
1319}
1320
1321
2d717e4f
DJ
1322#undef require_running
1323#define require_running(BUF) \
1324 if (!target_running ()) \
1325 { \
1326 write_enn (BUF); \
1327 break; \
1328 }
1329
c906108c 1330int
da85418c 1331main (int argc, char *argv[])
c906108c 1332{
f450004a 1333 char ch, status, *own_buf;
7fb85e41 1334 unsigned char *mem_buf;
c906108c 1335 int i = 0;
fc620387 1336 int signal;
c906108c
SS
1337 unsigned int len;
1338 CORE_ADDR mem_addr;
0729219d
DJ
1339 int bad_attach;
1340 int pid;
2d717e4f
DJ
1341 char *arg_end, *port;
1342 char **next_arg = &argv[1];
1343 int multi_mode = 0;
1344 int attach = 0;
1345 int was_running;
c906108c 1346
2d717e4f 1347 while (*next_arg != NULL && **next_arg == '-')
dd24457d 1348 {
2d717e4f
DJ
1349 if (strcmp (*next_arg, "--version") == 0)
1350 {
1351 gdbserver_version ();
1352 exit (0);
1353 }
1354 else if (strcmp (*next_arg, "--help") == 0)
1355 {
c16158bc 1356 gdbserver_usage (stdout);
2d717e4f
DJ
1357 exit (0);
1358 }
1359 else if (strcmp (*next_arg, "--attach") == 0)
1360 attach = 1;
1361 else if (strcmp (*next_arg, "--multi") == 0)
1362 multi_mode = 1;
ccd213ac
DJ
1363 else if (strcmp (*next_arg, "--wrapper") == 0)
1364 {
1365 next_arg++;
1366
1367 wrapper_argv = next_arg;
1368 while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
1369 next_arg++;
1370
1371 if (next_arg == wrapper_argv || *next_arg == NULL)
1372 {
c16158bc 1373 gdbserver_usage (stderr);
ccd213ac
DJ
1374 exit (1);
1375 }
1376
1377 /* Consume the "--". */
1378 *next_arg = NULL;
1379 }
2d717e4f
DJ
1380 else if (strcmp (*next_arg, "--debug") == 0)
1381 debug_threads = 1;
62709adf
PA
1382 else if (strcmp (*next_arg, "--remote-debug") == 0)
1383 remote_debug = 1;
db42f210
PA
1384 else if (strcmp (*next_arg, "--disable-packet") == 0)
1385 {
1386 gdbserver_show_disableable (stdout);
1387 exit (0);
1388 }
1389 else if (strncmp (*next_arg,
1390 "--disable-packet=",
1391 sizeof ("--disable-packet=") - 1) == 0)
1392 {
1393 char *packets, *tok;
1394
1395 packets = *next_arg += sizeof ("--disable-packet=") - 1;
1396 for (tok = strtok (packets, ",");
1397 tok != NULL;
1398 tok = strtok (NULL, ","))
1399 {
1400 if (strcmp ("vCont", tok) == 0)
1401 disable_packet_vCont = 1;
1402 else if (strcmp ("Tthread", tok) == 0)
1403 disable_packet_Tthread = 1;
1404 else if (strcmp ("qC", tok) == 0)
1405 disable_packet_qC = 1;
1406 else if (strcmp ("qfThreadInfo", tok) == 0)
1407 disable_packet_qfThreadInfo = 1;
1408 else if (strcmp ("threads", tok) == 0)
1409 {
1410 disable_packet_vCont = 1;
1411 disable_packet_Tthread = 1;
1412 disable_packet_qC = 1;
1413 disable_packet_qfThreadInfo = 1;
1414 }
1415 else
1416 {
1417 fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
1418 tok);
1419 gdbserver_show_disableable (stderr);
1420 exit (1);
1421 }
1422 }
1423 }
2d717e4f
DJ
1424 else
1425 {
1426 fprintf (stderr, "Unknown argument: %s\n", *next_arg);
1427 exit (1);
1428 }
dd24457d 1429
2d717e4f
DJ
1430 next_arg++;
1431 continue;
dd24457d
DJ
1432 }
1433
c5aa993b 1434 if (setjmp (toplevel))
c906108c 1435 {
c5aa993b
JM
1436 fprintf (stderr, "Exiting\n");
1437 exit (1);
c906108c
SS
1438 }
1439
2d717e4f
DJ
1440 port = *next_arg;
1441 next_arg++;
1442 if (port == NULL || (!attach && !multi_mode && *next_arg == NULL))
1443 {
c16158bc 1444 gdbserver_usage (stderr);
2d717e4f
DJ
1445 exit (1);
1446 }
1447
0729219d
DJ
1448 bad_attach = 0;
1449 pid = 0;
2d717e4f
DJ
1450
1451 /* --attach used to come after PORT, so allow it there for
1452 compatibility. */
1453 if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
45b7b345 1454 {
2d717e4f
DJ
1455 attach = 1;
1456 next_arg++;
45b7b345
DJ
1457 }
1458
2d717e4f
DJ
1459 if (attach
1460 && (*next_arg == NULL
1461 || (*next_arg)[0] == '\0'
1462 || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
1463 || *arg_end != '\0'
1464 || next_arg[1] != NULL))
1465 bad_attach = 1;
1466
1467 if (bad_attach)
dd24457d 1468 {
c16158bc 1469 gdbserver_usage (stderr);
dd24457d
DJ
1470 exit (1);
1471 }
c906108c 1472
a20d5e98 1473 initialize_async_io ();
4ce44c66
JM
1474 initialize_low ();
1475
bca929d3
DE
1476 own_buf = xmalloc (PBUFSIZ + 1);
1477 mem_buf = xmalloc (PBUFSIZ);
0a30fbc4 1478
2d717e4f 1479 if (pid == 0 && *next_arg != NULL)
45b7b345 1480 {
2d717e4f
DJ
1481 int i, n;
1482
1483 n = argc - (next_arg - argv);
bca929d3 1484 program_argv = xmalloc (sizeof (char *) * (n + 1));
2d717e4f 1485 for (i = 0; i < n; i++)
bca929d3 1486 program_argv[i] = xstrdup (next_arg[i]);
2d717e4f
DJ
1487 program_argv[i] = NULL;
1488
45b7b345 1489 /* Wait till we are at first instruction in program. */
2d717e4f 1490 signal = start_inferior (program_argv, &status);
c906108c 1491
c588c53c
MS
1492 /* We are now (hopefully) stopped at the first instruction of
1493 the target process. This assumes that the target process was
1494 successfully created. */
45b7b345 1495 }
2d717e4f
DJ
1496 else if (pid != 0)
1497 {
1498 if (attach_inferior (pid, &status, &signal) == -1)
1499 error ("Attaching not supported on this target");
1500
1501 /* Otherwise succeeded. */
1502 }
45b7b345
DJ
1503 else
1504 {
2d717e4f
DJ
1505 status = 'W';
1506 signal = 0;
45b7b345 1507 }
c906108c 1508
311de423
PA
1509 /* Don't report shared library events on the initial connection,
1510 even if some libraries are preloaded. Avoids the "stopped by
1511 shared library event" notice on gdb side. */
1512 dlls_changed = 0;
1513
8264bb58
DJ
1514 if (setjmp (toplevel))
1515 {
1516 fprintf (stderr, "Killing inferior\n");
1517 kill_inferior ();
1518 exit (1);
1519 }
1520
c588c53c 1521 if (status == 'W' || status == 'X')
2d717e4f
DJ
1522 was_running = 0;
1523 else
1524 was_running = 1;
1525
1526 if (!was_running && !multi_mode)
c588c53c 1527 {
2d717e4f 1528 fprintf (stderr, "No program to debug. GDBserver exiting.\n");
c588c53c
MS
1529 exit (1);
1530 }
1531
c906108c
SS
1532 while (1)
1533 {
a6f3e723 1534 noack_mode = 0;
2d717e4f 1535 remote_open (port);
c906108c 1536
c5aa993b 1537 restart:
2d717e4f
DJ
1538 if (setjmp (toplevel) != 0)
1539 {
1540 /* An error occurred. */
1541 if (response_needed)
1542 {
1543 write_enn (own_buf);
1544 putpkt (own_buf);
1545 }
1546 }
1547
a20d5e98 1548 disable_async_io ();
2d717e4f 1549 while (!exit_requested)
c906108c
SS
1550 {
1551 unsigned char sig;
01f9e8fa
DJ
1552 int packet_len;
1553 int new_packet_len = -1;
1554
2d717e4f 1555 response_needed = 0;
01f9e8fa
DJ
1556 packet_len = getpkt (own_buf);
1557 if (packet_len <= 0)
1558 break;
2d717e4f 1559 response_needed = 1;
01f9e8fa 1560
c906108c
SS
1561 i = 0;
1562 ch = own_buf[i++];
1563 switch (ch)
1564 {
ce3a066d 1565 case 'q':
0e7f50da 1566 handle_query (own_buf, packet_len, &new_packet_len);
ce3a066d 1567 break;
89be2091
DJ
1568 case 'Q':
1569 handle_general_set (own_buf);
1570 break;
6ad8ae5c 1571 case 'D':
2d717e4f 1572 require_running (own_buf);
6ad8ae5c 1573 fprintf (stderr, "Detaching from inferior\n");
444d6139 1574 if (detach_inferior () != 0)
2d717e4f 1575 write_enn (own_buf);
444d6139
PA
1576 else
1577 {
1578 write_ok (own_buf);
6ad8ae5c 1579
2d717e4f
DJ
1580 if (extended_protocol)
1581 {
1582 /* Treat this like a normal program exit. */
1583 signal = 0;
1584 status = 'W';
1585 }
1586 else
1587 {
1588 putpkt (own_buf);
1589 remote_close ();
6ad8ae5c 1590
2d717e4f
DJ
1591 /* If we are attached, then we can exit. Otherwise, we
1592 need to hang around doing nothing, until the child
1593 is gone. */
1594 if (!attached)
1595 join_inferior ();
1596
1597 exit (0);
1598 }
444d6139 1599 }
2d717e4f 1600 break;
c906108c 1601 case '!':
2d717e4f
DJ
1602 extended_protocol = 1;
1603 write_ok (own_buf);
c906108c
SS
1604 break;
1605 case '?':
1606 prepare_resume_reply (own_buf, status, signal);
1607 break;
1608 case 'H':
a06660f7 1609 if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
c906108c 1610 {
a06660f7
DJ
1611 unsigned long gdb_id, thread_id;
1612
2d717e4f 1613 require_running (own_buf);
a06660f7 1614 gdb_id = strtoul (&own_buf[2], NULL, 16);
2d717e4f
DJ
1615 if (gdb_id == 0 || gdb_id == -1)
1616 thread_id = gdb_id;
1617 else
a06660f7 1618 {
2d717e4f
DJ
1619 thread_id = gdb_id_to_thread_id (gdb_id);
1620 if (thread_id == 0)
1621 {
1622 write_enn (own_buf);
1623 break;
1624 }
a06660f7
DJ
1625 }
1626
1627 if (own_buf[1] == 'g')
1628 {
1629 general_thread = thread_id;
1630 set_desired_inferior (1);
1631 }
1632 else if (own_buf[1] == 'c')
1633 cont_thread = thread_id;
1634 else if (own_buf[1] == 's')
1635 step_thread = thread_id;
1636
0d62e5e8 1637 write_ok (own_buf);
a06660f7
DJ
1638 }
1639 else
1640 {
c906108c
SS
1641 /* Silently ignore it so that gdb can extend the protocol
1642 without compatibility headaches. */
1643 own_buf[0] = '\0';
c906108c
SS
1644 }
1645 break;
1646 case 'g':
2d717e4f 1647 require_running (own_buf);
0d62e5e8 1648 set_desired_inferior (1);
0a30fbc4 1649 registers_to_string (own_buf);
c906108c
SS
1650 break;
1651 case 'G':
2d717e4f 1652 require_running (own_buf);
0d62e5e8 1653 set_desired_inferior (1);
0a30fbc4 1654 registers_from_string (&own_buf[1]);
c906108c
SS
1655 write_ok (own_buf);
1656 break;
1657 case 'm':
2d717e4f 1658 require_running (own_buf);
c906108c 1659 decode_m_packet (&own_buf[1], &mem_addr, &len);
c3e735a6
DJ
1660 if (read_inferior_memory (mem_addr, mem_buf, len) == 0)
1661 convert_int_to_ascii (mem_buf, own_buf, len);
1662 else
1663 write_enn (own_buf);
c906108c
SS
1664 break;
1665 case 'M':
2d717e4f 1666 require_running (own_buf);
c906108c
SS
1667 decode_M_packet (&own_buf[1], &mem_addr, &len, mem_buf);
1668 if (write_inferior_memory (mem_addr, mem_buf, len) == 0)
1669 write_ok (own_buf);
1670 else
1671 write_enn (own_buf);
1672 break;
01f9e8fa 1673 case 'X':
2d717e4f 1674 require_running (own_buf);
01f9e8fa
DJ
1675 if (decode_X_packet (&own_buf[1], packet_len - 1,
1676 &mem_addr, &len, mem_buf) < 0
1677 || write_inferior_memory (mem_addr, mem_buf, len) != 0)
1678 write_enn (own_buf);
1679 else
1680 write_ok (own_buf);
1681 break;
c906108c 1682 case 'C':
2d717e4f 1683 require_running (own_buf);
c906108c 1684 convert_ascii_to_int (own_buf + 1, &sig, 1);
0e98d0a7
DJ
1685 if (target_signal_to_host_p (sig))
1686 signal = target_signal_to_host (sig);
1687 else
1688 signal = 0;
27524b67 1689 myresume (own_buf, 0, &signal, &status);
c906108c
SS
1690 break;
1691 case 'S':
2d717e4f 1692 require_running (own_buf);
c906108c 1693 convert_ascii_to_int (own_buf + 1, &sig, 1);
0e98d0a7
DJ
1694 if (target_signal_to_host_p (sig))
1695 signal = target_signal_to_host (sig);
1696 else
1697 signal = 0;
27524b67 1698 myresume (own_buf, 1, &signal, &status);
c906108c
SS
1699 break;
1700 case 'c':
2d717e4f 1701 require_running (own_buf);
a20d5e98 1702 signal = 0;
27524b67 1703 myresume (own_buf, 0, &signal, &status);
c906108c
SS
1704 break;
1705 case 's':
2d717e4f 1706 require_running (own_buf);
a20d5e98 1707 signal = 0;
27524b67 1708 myresume (own_buf, 1, &signal, &status);
c906108c 1709 break;
e013ee27
OF
1710 case 'Z':
1711 {
1712 char *lenptr;
1713 char *dataptr;
1714 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
1715 int len = strtol (lenptr + 1, &dataptr, 16);
1716 char type = own_buf[1];
1717
1718 if (the_target->insert_watchpoint == NULL
1719 || (type < '2' || type > '4'))
1720 {
1721 /* No watchpoint support or not a watchpoint command;
1722 unrecognized either way. */
1723 own_buf[0] = '\0';
1724 }
1725 else
1726 {
1727 int res;
1728
2d717e4f 1729 require_running (own_buf);
e013ee27
OF
1730 res = (*the_target->insert_watchpoint) (type, addr, len);
1731 if (res == 0)
1732 write_ok (own_buf);
1733 else if (res == 1)
1734 /* Unsupported. */
1735 own_buf[0] = '\0';
1736 else
1737 write_enn (own_buf);
1738 }
1739 break;
1740 }
1741 case 'z':
1742 {
1743 char *lenptr;
1744 char *dataptr;
1745 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
1746 int len = strtol (lenptr + 1, &dataptr, 16);
1747 char type = own_buf[1];
1748
1749 if (the_target->remove_watchpoint == NULL
1750 || (type < '2' || type > '4'))
1751 {
1752 /* No watchpoint support or not a watchpoint command;
1753 unrecognized either way. */
1754 own_buf[0] = '\0';
1755 }
1756 else
1757 {
1758 int res;
1759
2d717e4f 1760 require_running (own_buf);
e013ee27
OF
1761 res = (*the_target->remove_watchpoint) (type, addr, len);
1762 if (res == 0)
1763 write_ok (own_buf);
1764 else if (res == 1)
1765 /* Unsupported. */
1766 own_buf[0] = '\0';
1767 else
1768 write_enn (own_buf);
1769 }
1770 break;
1771 }
c906108c 1772 case 'k':
2d717e4f
DJ
1773 response_needed = 0;
1774 if (!target_running ())
1775 /* The packet we received doesn't make sense - but we
1776 can't reply to it, either. */
1777 goto restart;
1778
c906108c
SS
1779 fprintf (stderr, "Killing inferior\n");
1780 kill_inferior ();
2d717e4f
DJ
1781
1782 /* When using the extended protocol, we wait with no
1783 program running. The traditional protocol will exit
1784 instead. */
c906108c
SS
1785 if (extended_protocol)
1786 {
2d717e4f
DJ
1787 status = 'X';
1788 signal = TARGET_SIGNAL_KILL;
1789 was_running = 0;
c906108c 1790 goto restart;
c906108c
SS
1791 }
1792 else
1793 {
1794 exit (0);
1795 break;
1796 }
1797 case 'T':
a06660f7
DJ
1798 {
1799 unsigned long gdb_id, thread_id;
1800
2d717e4f 1801 require_running (own_buf);
a06660f7
DJ
1802 gdb_id = strtoul (&own_buf[1], NULL, 16);
1803 thread_id = gdb_id_to_thread_id (gdb_id);
1804 if (thread_id == 0)
1805 {
1806 write_enn (own_buf);
1807 break;
1808 }
1809
1810 if (mythread_alive (thread_id))
1811 write_ok (own_buf);
1812 else
1813 write_enn (own_buf);
1814 }
c906108c
SS
1815 break;
1816 case 'R':
2d717e4f
DJ
1817 response_needed = 0;
1818
c906108c 1819 /* Restarting the inferior is only supported in the
c5aa993b 1820 extended protocol. */
c906108c
SS
1821 if (extended_protocol)
1822 {
2d717e4f
DJ
1823 if (target_running ())
1824 kill_inferior ();
c906108c
SS
1825 fprintf (stderr, "GDBserver restarting\n");
1826
1827 /* Wait till we are at 1st instruction in prog. */
2d717e4f
DJ
1828 if (program_argv != NULL)
1829 signal = start_inferior (program_argv, &status);
1830 else
1831 {
1832 status = 'X';
1833 signal = TARGET_SIGNAL_KILL;
1834 }
c906108c 1835 goto restart;
c906108c
SS
1836 }
1837 else
1838 {
1839 /* It is a request we don't understand. Respond with an
1840 empty packet so that gdb knows that we don't support this
1841 request. */
1842 own_buf[0] = '\0';
1843 break;
1844 }
64386c31
DJ
1845 case 'v':
1846 /* Extended (long) request. */
a6b151f1
DJ
1847 handle_v_requests (own_buf, &status, &signal,
1848 packet_len, &new_packet_len);
64386c31 1849 break;
a6b151f1 1850
c906108c
SS
1851 default:
1852 /* It is a request we don't understand. Respond with an
c5aa993b
JM
1853 empty packet so that gdb knows that we don't support this
1854 request. */
c906108c
SS
1855 own_buf[0] = '\0';
1856 break;
1857 }
1858
01f9e8fa
DJ
1859 if (new_packet_len != -1)
1860 putpkt_binary (own_buf, new_packet_len);
1861 else
1862 putpkt (own_buf);
c906108c 1863
2d717e4f
DJ
1864 response_needed = 0;
1865
1866 if (was_running && (status == 'W' || status == 'X'))
c906108c 1867 {
2d717e4f 1868 was_running = 0;
c906108c 1869
2d717e4f
DJ
1870 if (status == 'W')
1871 fprintf (stderr,
1872 "\nChild exited with status %d\n", signal);
1873 if (status == 'X')
1874 fprintf (stderr, "\nChild terminated with signal = 0x%x (%s)\n",
1875 target_signal_to_host (signal),
1876 target_signal_to_name (signal));
1877
1878 if (extended_protocol)
1879 goto restart;
c906108c
SS
1880 else
1881 {
1882 fprintf (stderr, "GDBserver exiting\n");
1883 exit (0);
1884 }
1885 }
c906108c 1886
2d717e4f
DJ
1887 if (status != 'W' && status != 'X')
1888 was_running = 1;
1889 }
c906108c 1890
2d717e4f
DJ
1891 /* If an exit was requested (using the "monitor exit" command),
1892 terminate now. The only other way to get here is for
1893 getpkt to fail; close the connection and reopen it at the
1894 top of the loop. */
c906108c 1895
2d717e4f 1896 if (exit_requested)
c906108c
SS
1897 {
1898 remote_close ();
2d717e4f
DJ
1899 if (attached && target_running ())
1900 detach_inferior ();
1901 else if (target_running ())
1902 kill_inferior ();
c906108c
SS
1903 exit (0);
1904 }
1905 else
1906 {
45b7b345
DJ
1907 fprintf (stderr, "Remote side has terminated connection. "
1908 "GDBserver will reopen the connection.\n");
c906108c
SS
1909 remote_close ();
1910 }
1911 }
1912}
This page took 0.730365 seconds and 4 git commands to generate.