Make gdbserver work with filename-only binaries
[deliverable/binutils-gdb.git] / gdb / gdbserver / server.c
1 /* Main code for remote server for GDB.
2 Copyright (C) 1989-2018 Free Software Foundation, Inc.
3
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
18
19 #include "server.h"
20 #include "gdbthread.h"
21 #include "agent.h"
22 #include "notif.h"
23 #include "tdesc.h"
24 #include "rsp-low.h"
25 #include "signals-state-save-restore.h"
26 #include <ctype.h>
27 #include <unistd.h>
28 #if HAVE_SIGNAL_H
29 #include <signal.h>
30 #endif
31 #include "gdb_vecs.h"
32 #include "gdb_wait.h"
33 #include "btrace-common.h"
34 #include "filestuff.h"
35 #include "tracepoint.h"
36 #include "dll.h"
37 #include "hostio.h"
38 #include <vector>
39 #include "common-inferior.h"
40 #include "job-control.h"
41 #include "environ.h"
42 #include "filenames.h"
43 #include "pathstuff.h"
44
45 #include "common/selftest.h"
46
47 #define require_running_or_return(BUF) \
48 if (!target_running ()) \
49 { \
50 write_enn (BUF); \
51 return; \
52 }
53
54 #define require_running_or_break(BUF) \
55 if (!target_running ()) \
56 { \
57 write_enn (BUF); \
58 break; \
59 }
60
61 /* String containing the current directory (what getwd would return). */
62
63 char *current_directory;
64
65 /* The environment to pass to the inferior when creating it. */
66
67 static gdb_environ our_environ;
68
69 /* Start the inferior using a shell. */
70
71 /* We always try to start the inferior using a shell. */
72
73 int startup_with_shell = 1;
74
75 /* The thread set with an `Hc' packet. `Hc' is deprecated in favor of
76 `vCont'. Note the multi-process extensions made `vCont' a
77 requirement, so `Hc pPID.TID' is pretty much undefined. So
78 CONT_THREAD can be null_ptid for no `Hc' thread, minus_one_ptid for
79 resuming all threads of the process (again, `Hc' isn't used for
80 multi-process), or a specific thread ptid_t. */
81 ptid_t cont_thread;
82
83 /* The thread set with an `Hg' packet. */
84 ptid_t general_thread;
85
86 int server_waiting;
87
88 static int extended_protocol;
89 static int response_needed;
90 static int exit_requested;
91
92 /* --once: Exit after the first connection has closed. */
93 int run_once;
94
95 int multi_process;
96 int report_fork_events;
97 int report_vfork_events;
98 int report_exec_events;
99 int report_thread_events;
100
101 /* Whether to report TARGET_WAITKING_NO_RESUMED events. */
102 static int report_no_resumed;
103
104 int non_stop;
105 int swbreak_feature;
106 int hwbreak_feature;
107
108 /* True if the "vContSupported" feature is active. In that case, GDB
109 wants us to report whether single step is supported in the reply to
110 "vCont?" packet. */
111 static int vCont_supported;
112
113 /* Whether we should attempt to disable the operating system's address
114 space randomization feature before starting an inferior. */
115 int disable_randomization = 1;
116
117 static struct {
118 /* Set the PROGRAM_PATH. Here we adjust the path of the provided
119 binary if needed. */
120 void set (gdb::unique_xmalloc_ptr<char> &&path)
121 {
122 m_path = std::move (path);
123
124 /* Make sure we're using the absolute path of the inferior when
125 creating it. */
126 if (!contains_dir_separator (m_path.get ()))
127 {
128 int reg_file_errno;
129
130 /* Check if the file is in our CWD. If it is, then we prefix
131 its name with CURRENT_DIRECTORY. Otherwise, we leave the
132 name as-is because we'll try searching for it in $PATH. */
133 if (is_regular_file (m_path.get (), &reg_file_errno))
134 m_path = gdb_abspath (m_path.get ());
135 }
136 }
137
138 /* Return the PROGRAM_PATH. */
139 char *get ()
140 { return m_path.get (); }
141
142 private:
143 /* The program name, adjusted if needed. */
144 gdb::unique_xmalloc_ptr<char> m_path;
145 } program_path;
146 static std::vector<char *> program_args;
147 static std::string wrapper_argv;
148
149 int pass_signals[GDB_SIGNAL_LAST];
150 int program_signals[GDB_SIGNAL_LAST];
151 int program_signals_p;
152
153 /* The PID of the originally created or attached inferior. Used to
154 send signals to the process when GDB sends us an asynchronous interrupt
155 (user hitting Control-C in the client), and to wait for the child to exit
156 when no longer debugging it. */
157
158 unsigned long signal_pid;
159
160 /* Set if you want to disable optional thread related packets support
161 in gdbserver, for the sake of testing GDB against stubs that don't
162 support them. */
163 int disable_packet_vCont;
164 int disable_packet_Tthread;
165 int disable_packet_qC;
166 int disable_packet_qfThreadInfo;
167
168 /* Last status reported to GDB. */
169 struct target_waitstatus last_status;
170 ptid_t last_ptid;
171
172 char *own_buf;
173 static unsigned char *mem_buf;
174
175 /* A sub-class of 'struct notif_event' for stop, holding information
176 relative to a single stop reply. We keep a queue of these to
177 push to GDB in non-stop mode. */
178
179 struct vstop_notif
180 {
181 struct notif_event base;
182
183 /* Thread or process that got the event. */
184 ptid_t ptid;
185
186 /* Event info. */
187 struct target_waitstatus status;
188 };
189
190 /* The current btrace configuration. This is gdbserver's mirror of GDB's
191 btrace configuration. */
192 static struct btrace_config current_btrace_conf;
193
194 DEFINE_QUEUE_P (notif_event_p);
195
196 /* Put a stop reply to the stop reply queue. */
197
198 static void
199 queue_stop_reply (ptid_t ptid, struct target_waitstatus *status)
200 {
201 struct vstop_notif *new_notif = XNEW (struct vstop_notif);
202
203 new_notif->ptid = ptid;
204 new_notif->status = *status;
205
206 notif_event_enque (&notif_stop, (struct notif_event *) new_notif);
207 }
208
209 static int
210 remove_all_on_match_ptid (QUEUE (notif_event_p) *q,
211 QUEUE_ITER (notif_event_p) *iter,
212 struct notif_event *event,
213 void *data)
214 {
215 ptid_t filter_ptid = *(ptid_t *) data;
216 struct vstop_notif *vstop_event = (struct vstop_notif *) event;
217
218 if (ptid_match (vstop_event->ptid, filter_ptid))
219 {
220 if (q->free_func != NULL)
221 q->free_func (event);
222
223 QUEUE_remove_elem (notif_event_p, q, iter);
224 }
225
226 return 1;
227 }
228
229 /* See server.h. */
230
231 void
232 discard_queued_stop_replies (ptid_t ptid)
233 {
234 QUEUE_iterate (notif_event_p, notif_stop.queue,
235 remove_all_on_match_ptid, &ptid);
236 }
237
238 static void
239 vstop_notif_reply (struct notif_event *event, char *own_buf)
240 {
241 struct vstop_notif *vstop = (struct vstop_notif *) event;
242
243 prepare_resume_reply (own_buf, vstop->ptid, &vstop->status);
244 }
245
246 /* QUEUE_iterate callback helper for in_queued_stop_replies. */
247
248 static int
249 in_queued_stop_replies_ptid (QUEUE (notif_event_p) *q,
250 QUEUE_ITER (notif_event_p) *iter,
251 struct notif_event *event,
252 void *data)
253 {
254 ptid_t filter_ptid = *(ptid_t *) data;
255 struct vstop_notif *vstop_event = (struct vstop_notif *) event;
256
257 if (ptid_match (vstop_event->ptid, filter_ptid))
258 return 0;
259
260 /* Don't resume fork children that GDB does not know about yet. */
261 if ((vstop_event->status.kind == TARGET_WAITKIND_FORKED
262 || vstop_event->status.kind == TARGET_WAITKIND_VFORKED)
263 && ptid_match (vstop_event->status.value.related_pid, filter_ptid))
264 return 0;
265
266 return 1;
267 }
268
269 /* See server.h. */
270
271 int
272 in_queued_stop_replies (ptid_t ptid)
273 {
274 return !QUEUE_iterate (notif_event_p, notif_stop.queue,
275 in_queued_stop_replies_ptid, &ptid);
276 }
277
278 struct notif_server notif_stop =
279 {
280 "vStopped", "Stop", NULL, vstop_notif_reply,
281 };
282
283 static int
284 target_running (void)
285 {
286 return get_first_thread () != NULL;
287 }
288
289 /* See common/common-inferior.h. */
290
291 const char *
292 get_exec_wrapper ()
293 {
294 return !wrapper_argv.empty () ? wrapper_argv.c_str () : NULL;
295 }
296
297 /* See common/common-inferior.h. */
298
299 char *
300 get_exec_file (int err)
301 {
302 if (err && program_path.get () == NULL)
303 error (_("No executable file specified."));
304
305 return program_path.get ();
306 }
307
308 /* See server.h. */
309
310 gdb_environ *
311 get_environ ()
312 {
313 return &our_environ;
314 }
315
316 static int
317 attach_inferior (int pid)
318 {
319 /* myattach should return -1 if attaching is unsupported,
320 0 if it succeeded, and call error() otherwise. */
321
322 if (myattach (pid) != 0)
323 return -1;
324
325 fprintf (stderr, "Attached; pid = %d\n", pid);
326 fflush (stderr);
327
328 /* FIXME - It may be that we should get the SIGNAL_PID from the
329 attach function, so that it can be the main thread instead of
330 whichever we were told to attach to. */
331 signal_pid = pid;
332
333 if (!non_stop)
334 {
335 last_ptid = mywait (pid_to_ptid (pid), &last_status, 0, 0);
336
337 /* GDB knows to ignore the first SIGSTOP after attaching to a running
338 process using the "attach" command, but this is different; it's
339 just using "target remote". Pretend it's just starting up. */
340 if (last_status.kind == TARGET_WAITKIND_STOPPED
341 && last_status.value.sig == GDB_SIGNAL_STOP)
342 last_status.value.sig = GDB_SIGNAL_TRAP;
343
344 current_thread->last_resume_kind = resume_stop;
345 current_thread->last_status = last_status;
346 }
347
348 return 0;
349 }
350
351 extern int remote_debug;
352
353 /* Decode a qXfer read request. Return 0 if everything looks OK,
354 or -1 otherwise. */
355
356 static int
357 decode_xfer_read (char *buf, CORE_ADDR *ofs, unsigned int *len)
358 {
359 /* After the read marker and annex, qXfer looks like a
360 traditional 'm' packet. */
361 decode_m_packet (buf, ofs, len);
362
363 return 0;
364 }
365
366 static int
367 decode_xfer (char *buf, char **object, char **rw, char **annex, char **offset)
368 {
369 /* Extract and NUL-terminate the object. */
370 *object = buf;
371 while (*buf && *buf != ':')
372 buf++;
373 if (*buf == '\0')
374 return -1;
375 *buf++ = 0;
376
377 /* Extract and NUL-terminate the read/write action. */
378 *rw = buf;
379 while (*buf && *buf != ':')
380 buf++;
381 if (*buf == '\0')
382 return -1;
383 *buf++ = 0;
384
385 /* Extract and NUL-terminate the annex. */
386 *annex = buf;
387 while (*buf && *buf != ':')
388 buf++;
389 if (*buf == '\0')
390 return -1;
391 *buf++ = 0;
392
393 *offset = buf;
394 return 0;
395 }
396
397 /* Write the response to a successful qXfer read. Returns the
398 length of the (binary) data stored in BUF, corresponding
399 to as much of DATA/LEN as we could fit. IS_MORE controls
400 the first character of the response. */
401 static int
402 write_qxfer_response (char *buf, const gdb_byte *data, int len, int is_more)
403 {
404 int out_len;
405
406 if (is_more)
407 buf[0] = 'm';
408 else
409 buf[0] = 'l';
410
411 return remote_escape_output (data, len, 1, (unsigned char *) buf + 1,
412 &out_len, PBUFSIZ - 2) + 1;
413 }
414
415 /* Handle btrace enabling in BTS format. */
416
417 static void
418 handle_btrace_enable_bts (struct thread_info *thread)
419 {
420 if (thread->btrace != NULL)
421 error (_("Btrace already enabled."));
422
423 current_btrace_conf.format = BTRACE_FORMAT_BTS;
424 thread->btrace = target_enable_btrace (thread->id, &current_btrace_conf);
425 }
426
427 /* Handle btrace enabling in Intel Processor Trace format. */
428
429 static void
430 handle_btrace_enable_pt (struct thread_info *thread)
431 {
432 if (thread->btrace != NULL)
433 error (_("Btrace already enabled."));
434
435 current_btrace_conf.format = BTRACE_FORMAT_PT;
436 thread->btrace = target_enable_btrace (thread->id, &current_btrace_conf);
437 }
438
439 /* Handle btrace disabling. */
440
441 static void
442 handle_btrace_disable (struct thread_info *thread)
443 {
444
445 if (thread->btrace == NULL)
446 error (_("Branch tracing not enabled."));
447
448 if (target_disable_btrace (thread->btrace) != 0)
449 error (_("Could not disable branch tracing."));
450
451 thread->btrace = NULL;
452 }
453
454 /* Handle the "Qbtrace" packet. */
455
456 static int
457 handle_btrace_general_set (char *own_buf)
458 {
459 struct thread_info *thread;
460 char *op;
461
462 if (!startswith (own_buf, "Qbtrace:"))
463 return 0;
464
465 op = own_buf + strlen ("Qbtrace:");
466
467 if (ptid_equal (general_thread, null_ptid)
468 || ptid_equal (general_thread, minus_one_ptid))
469 {
470 strcpy (own_buf, "E.Must select a single thread.");
471 return -1;
472 }
473
474 thread = find_thread_ptid (general_thread);
475 if (thread == NULL)
476 {
477 strcpy (own_buf, "E.No such thread.");
478 return -1;
479 }
480
481 TRY
482 {
483 if (strcmp (op, "bts") == 0)
484 handle_btrace_enable_bts (thread);
485 else if (strcmp (op, "pt") == 0)
486 handle_btrace_enable_pt (thread);
487 else if (strcmp (op, "off") == 0)
488 handle_btrace_disable (thread);
489 else
490 error (_("Bad Qbtrace operation. Use bts, pt, or off."));
491
492 write_ok (own_buf);
493 }
494 CATCH (exception, RETURN_MASK_ERROR)
495 {
496 sprintf (own_buf, "E.%s", exception.message);
497 }
498 END_CATCH
499
500 return 1;
501 }
502
503 /* Handle the "Qbtrace-conf" packet. */
504
505 static int
506 handle_btrace_conf_general_set (char *own_buf)
507 {
508 struct thread_info *thread;
509 char *op;
510
511 if (!startswith (own_buf, "Qbtrace-conf:"))
512 return 0;
513
514 op = own_buf + strlen ("Qbtrace-conf:");
515
516 if (ptid_equal (general_thread, null_ptid)
517 || ptid_equal (general_thread, minus_one_ptid))
518 {
519 strcpy (own_buf, "E.Must select a single thread.");
520 return -1;
521 }
522
523 thread = find_thread_ptid (general_thread);
524 if (thread == NULL)
525 {
526 strcpy (own_buf, "E.No such thread.");
527 return -1;
528 }
529
530 if (startswith (op, "bts:size="))
531 {
532 unsigned long size;
533 char *endp = NULL;
534
535 errno = 0;
536 size = strtoul (op + strlen ("bts:size="), &endp, 16);
537 if (endp == NULL || *endp != 0 || errno != 0 || size > UINT_MAX)
538 {
539 strcpy (own_buf, "E.Bad size value.");
540 return -1;
541 }
542
543 current_btrace_conf.bts.size = (unsigned int) size;
544 }
545 else if (strncmp (op, "pt:size=", strlen ("pt:size=")) == 0)
546 {
547 unsigned long size;
548 char *endp = NULL;
549
550 errno = 0;
551 size = strtoul (op + strlen ("pt:size="), &endp, 16);
552 if (endp == NULL || *endp != 0 || errno != 0 || size > UINT_MAX)
553 {
554 strcpy (own_buf, "E.Bad size value.");
555 return -1;
556 }
557
558 current_btrace_conf.pt.size = (unsigned int) size;
559 }
560 else
561 {
562 strcpy (own_buf, "E.Bad Qbtrace configuration option.");
563 return -1;
564 }
565
566 write_ok (own_buf);
567 return 1;
568 }
569
570 /* Handle all of the extended 'Q' packets. */
571
572 static void
573 handle_general_set (char *own_buf)
574 {
575 if (startswith (own_buf, "QPassSignals:"))
576 {
577 int numsigs = (int) GDB_SIGNAL_LAST, i;
578 const char *p = own_buf + strlen ("QPassSignals:");
579 CORE_ADDR cursig;
580
581 p = decode_address_to_semicolon (&cursig, p);
582 for (i = 0; i < numsigs; i++)
583 {
584 if (i == cursig)
585 {
586 pass_signals[i] = 1;
587 if (*p == '\0')
588 /* Keep looping, to clear the remaining signals. */
589 cursig = -1;
590 else
591 p = decode_address_to_semicolon (&cursig, p);
592 }
593 else
594 pass_signals[i] = 0;
595 }
596 strcpy (own_buf, "OK");
597 return;
598 }
599
600 if (startswith (own_buf, "QProgramSignals:"))
601 {
602 int numsigs = (int) GDB_SIGNAL_LAST, i;
603 const char *p = own_buf + strlen ("QProgramSignals:");
604 CORE_ADDR cursig;
605
606 program_signals_p = 1;
607
608 p = decode_address_to_semicolon (&cursig, p);
609 for (i = 0; i < numsigs; i++)
610 {
611 if (i == cursig)
612 {
613 program_signals[i] = 1;
614 if (*p == '\0')
615 /* Keep looping, to clear the remaining signals. */
616 cursig = -1;
617 else
618 p = decode_address_to_semicolon (&cursig, p);
619 }
620 else
621 program_signals[i] = 0;
622 }
623 strcpy (own_buf, "OK");
624 return;
625 }
626
627 if (startswith (own_buf, "QCatchSyscalls:"))
628 {
629 const char *p = own_buf + sizeof ("QCatchSyscalls:") - 1;
630 int enabled = -1;
631 CORE_ADDR sysno;
632 struct process_info *process;
633
634 if (!target_running () || !target_supports_catch_syscall ())
635 {
636 write_enn (own_buf);
637 return;
638 }
639
640 if (strcmp (p, "0") == 0)
641 enabled = 0;
642 else if (p[0] == '1' && (p[1] == ';' || p[1] == '\0'))
643 enabled = 1;
644 else
645 {
646 fprintf (stderr, "Unknown catch-syscalls mode requested: %s\n",
647 own_buf);
648 write_enn (own_buf);
649 return;
650 }
651
652 process = current_process ();
653 process->syscalls_to_catch.clear ();
654
655 if (enabled)
656 {
657 p += 1;
658 if (*p == ';')
659 {
660 p += 1;
661 while (*p != '\0')
662 {
663 p = decode_address_to_semicolon (&sysno, p);
664 process->syscalls_to_catch.push_back (sysno);
665 }
666 }
667 else
668 process->syscalls_to_catch.push_back (ANY_SYSCALL);
669 }
670
671 write_ok (own_buf);
672 return;
673 }
674
675 if (strcmp (own_buf, "QEnvironmentReset") == 0)
676 {
677 our_environ = gdb_environ::from_host_environ ();
678
679 write_ok (own_buf);
680 return;
681 }
682
683 if (startswith (own_buf, "QEnvironmentHexEncoded:"))
684 {
685 const char *p = own_buf + sizeof ("QEnvironmentHexEncoded:") - 1;
686 /* The final form of the environment variable. FINAL_VAR will
687 hold the 'VAR=VALUE' format. */
688 std::string final_var = hex2str (p);
689 std::string var_name, var_value;
690
691 if (remote_debug)
692 {
693 debug_printf (_("[QEnvironmentHexEncoded received '%s']\n"), p);
694 debug_printf (_("[Environment variable to be set: '%s']\n"),
695 final_var.c_str ());
696 debug_flush ();
697 }
698
699 size_t pos = final_var.find ('=');
700 if (pos == std::string::npos)
701 {
702 warning (_("Unexpected format for environment variable: '%s'"),
703 final_var.c_str ());
704 write_enn (own_buf);
705 return;
706 }
707
708 var_name = final_var.substr (0, pos);
709 var_value = final_var.substr (pos + 1, std::string::npos);
710
711 our_environ.set (var_name.c_str (), var_value.c_str ());
712
713 write_ok (own_buf);
714 return;
715 }
716
717 if (startswith (own_buf, "QEnvironmentUnset:"))
718 {
719 const char *p = own_buf + sizeof ("QEnvironmentUnset:") - 1;
720 std::string varname = hex2str (p);
721
722 if (remote_debug)
723 {
724 debug_printf (_("[QEnvironmentUnset received '%s']\n"), p);
725 debug_printf (_("[Environment variable to be unset: '%s']\n"),
726 varname.c_str ());
727 debug_flush ();
728 }
729
730 our_environ.unset (varname.c_str ());
731
732 write_ok (own_buf);
733 return;
734 }
735
736 if (strcmp (own_buf, "QStartNoAckMode") == 0)
737 {
738 if (remote_debug)
739 {
740 debug_printf ("[noack mode enabled]\n");
741 debug_flush ();
742 }
743
744 noack_mode = 1;
745 write_ok (own_buf);
746 return;
747 }
748
749 if (startswith (own_buf, "QNonStop:"))
750 {
751 char *mode = own_buf + 9;
752 int req = -1;
753 const char *req_str;
754
755 if (strcmp (mode, "0") == 0)
756 req = 0;
757 else if (strcmp (mode, "1") == 0)
758 req = 1;
759 else
760 {
761 /* We don't know what this mode is, so complain to
762 GDB. */
763 fprintf (stderr, "Unknown non-stop mode requested: %s\n",
764 own_buf);
765 write_enn (own_buf);
766 return;
767 }
768
769 req_str = req ? "non-stop" : "all-stop";
770 if (start_non_stop (req) != 0)
771 {
772 fprintf (stderr, "Setting %s mode failed\n", req_str);
773 write_enn (own_buf);
774 return;
775 }
776
777 non_stop = req;
778
779 if (remote_debug)
780 debug_printf ("[%s mode enabled]\n", req_str);
781
782 write_ok (own_buf);
783 return;
784 }
785
786 if (startswith (own_buf, "QDisableRandomization:"))
787 {
788 char *packet = own_buf + strlen ("QDisableRandomization:");
789 ULONGEST setting;
790
791 unpack_varlen_hex (packet, &setting);
792 disable_randomization = setting;
793
794 if (remote_debug)
795 {
796 debug_printf (disable_randomization
797 ? "[address space randomization disabled]\n"
798 : "[address space randomization enabled]\n");
799 }
800
801 write_ok (own_buf);
802 return;
803 }
804
805 if (target_supports_tracepoints ()
806 && handle_tracepoint_general_set (own_buf))
807 return;
808
809 if (startswith (own_buf, "QAgent:"))
810 {
811 char *mode = own_buf + strlen ("QAgent:");
812 int req = 0;
813
814 if (strcmp (mode, "0") == 0)
815 req = 0;
816 else if (strcmp (mode, "1") == 0)
817 req = 1;
818 else
819 {
820 /* We don't know what this value is, so complain to GDB. */
821 sprintf (own_buf, "E.Unknown QAgent value");
822 return;
823 }
824
825 /* Update the flag. */
826 use_agent = req;
827 if (remote_debug)
828 debug_printf ("[%s agent]\n", req ? "Enable" : "Disable");
829 write_ok (own_buf);
830 return;
831 }
832
833 if (handle_btrace_general_set (own_buf))
834 return;
835
836 if (handle_btrace_conf_general_set (own_buf))
837 return;
838
839 if (startswith (own_buf, "QThreadEvents:"))
840 {
841 char *mode = own_buf + strlen ("QThreadEvents:");
842 enum tribool req = TRIBOOL_UNKNOWN;
843
844 if (strcmp (mode, "0") == 0)
845 req = TRIBOOL_FALSE;
846 else if (strcmp (mode, "1") == 0)
847 req = TRIBOOL_TRUE;
848 else
849 {
850 char *mode_copy = xstrdup (mode);
851
852 /* We don't know what this mode is, so complain to GDB. */
853 sprintf (own_buf, "E.Unknown thread-events mode requested: %s\n",
854 mode_copy);
855 xfree (mode_copy);
856 return;
857 }
858
859 report_thread_events = (req == TRIBOOL_TRUE);
860
861 if (remote_debug)
862 {
863 const char *req_str = report_thread_events ? "enabled" : "disabled";
864
865 debug_printf ("[thread events are now %s]\n", req_str);
866 }
867
868 write_ok (own_buf);
869 return;
870 }
871
872 if (startswith (own_buf, "QStartupWithShell:"))
873 {
874 const char *value = own_buf + strlen ("QStartupWithShell:");
875
876 if (strcmp (value, "1") == 0)
877 startup_with_shell = true;
878 else if (strcmp (value, "0") == 0)
879 startup_with_shell = false;
880 else
881 {
882 /* Unknown value. */
883 fprintf (stderr, "Unknown value to startup-with-shell: %s\n",
884 own_buf);
885 write_enn (own_buf);
886 return;
887 }
888
889 if (remote_debug)
890 debug_printf (_("[Inferior will %s started with shell]"),
891 startup_with_shell ? "be" : "not be");
892
893 write_ok (own_buf);
894 return;
895 }
896
897 if (startswith (own_buf, "QSetWorkingDir:"))
898 {
899 const char *p = own_buf + strlen ("QSetWorkingDir:");
900
901 if (*p != '\0')
902 {
903 std::string path = hex2str (p);
904
905 set_inferior_cwd (path.c_str ());
906
907 if (remote_debug)
908 debug_printf (_("[Set the inferior's current directory to %s]\n"),
909 path.c_str ());
910 }
911 else
912 {
913 /* An empty argument means that we should clear out any
914 previously set cwd for the inferior. */
915 set_inferior_cwd (NULL);
916
917 if (remote_debug)
918 debug_printf (_("\
919 [Unset the inferior's current directory; will use gdbserver's cwd]\n"));
920 }
921 write_ok (own_buf);
922
923 return;
924 }
925
926 /* Otherwise we didn't know what packet it was. Say we didn't
927 understand it. */
928 own_buf[0] = 0;
929 }
930
931 static const char *
932 get_features_xml (const char *annex)
933 {
934 const struct target_desc *desc = current_target_desc ();
935
936 /* `desc->xmltarget' defines what to return when looking for the
937 "target.xml" file. Its contents can either be verbatim XML code
938 (prefixed with a '@') or else the name of the actual XML file to
939 be used in place of "target.xml".
940
941 This variable is set up from the auto-generated
942 init_registers_... routine for the current target. */
943
944 if (strcmp (annex, "target.xml") == 0)
945 {
946 const char *ret = tdesc_get_features_xml ((target_desc*) desc);
947
948 if (*ret == '@')
949 return ret + 1;
950 else
951 annex = ret;
952 }
953
954 #ifdef USE_XML
955 {
956 extern const char *const xml_builtin[][2];
957 int i;
958
959 /* Look for the annex. */
960 for (i = 0; xml_builtin[i][0] != NULL; i++)
961 if (strcmp (annex, xml_builtin[i][0]) == 0)
962 break;
963
964 if (xml_builtin[i][0] != NULL)
965 return xml_builtin[i][1];
966 }
967 #endif
968
969 return NULL;
970 }
971
972 static void
973 monitor_show_help (void)
974 {
975 monitor_output ("The following monitor commands are supported:\n");
976 monitor_output (" set debug <0|1>\n");
977 monitor_output (" Enable general debugging messages\n");
978 monitor_output (" set debug-hw-points <0|1>\n");
979 monitor_output (" Enable h/w breakpoint/watchpoint debugging messages\n");
980 monitor_output (" set remote-debug <0|1>\n");
981 monitor_output (" Enable remote protocol debugging messages\n");
982 monitor_output (" set debug-format option1[,option2,...]\n");
983 monitor_output (" Add additional information to debugging messages\n");
984 monitor_output (" Options: all, none");
985 monitor_output (", timestamp");
986 monitor_output ("\n");
987 monitor_output (" exit\n");
988 monitor_output (" Quit GDBserver\n");
989 }
990
991 /* Read trace frame or inferior memory. Returns the number of bytes
992 actually read, zero when no further transfer is possible, and -1 on
993 error. Return of a positive value smaller than LEN does not
994 indicate there's no more to be read, only the end of the transfer.
995 E.g., when GDB reads memory from a traceframe, a first request may
996 be served from a memory block that does not cover the whole request
997 length. A following request gets the rest served from either
998 another block (of the same traceframe) or from the read-only
999 regions. */
1000
1001 static int
1002 gdb_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
1003 {
1004 int res;
1005
1006 if (current_traceframe >= 0)
1007 {
1008 ULONGEST nbytes;
1009 ULONGEST length = len;
1010
1011 if (traceframe_read_mem (current_traceframe,
1012 memaddr, myaddr, len, &nbytes))
1013 return -1;
1014 /* Data read from trace buffer, we're done. */
1015 if (nbytes > 0)
1016 return nbytes;
1017 if (!in_readonly_region (memaddr, length))
1018 return -1;
1019 /* Otherwise we have a valid readonly case, fall through. */
1020 /* (assume no half-trace half-real blocks for now) */
1021 }
1022
1023 res = prepare_to_access_memory ();
1024 if (res == 0)
1025 {
1026 if (set_desired_thread ())
1027 res = read_inferior_memory (memaddr, myaddr, len);
1028 else
1029 res = 1;
1030 done_accessing_memory ();
1031
1032 return res == 0 ? len : -1;
1033 }
1034 else
1035 return -1;
1036 }
1037
1038 /* Write trace frame or inferior memory. Actually, writing to trace
1039 frames is forbidden. */
1040
1041 static int
1042 gdb_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
1043 {
1044 if (current_traceframe >= 0)
1045 return EIO;
1046 else
1047 {
1048 int ret;
1049
1050 ret = prepare_to_access_memory ();
1051 if (ret == 0)
1052 {
1053 if (set_desired_thread ())
1054 ret = write_inferior_memory (memaddr, myaddr, len);
1055 else
1056 ret = EIO;
1057 done_accessing_memory ();
1058 }
1059 return ret;
1060 }
1061 }
1062
1063 /* Subroutine of handle_search_memory to simplify it. */
1064
1065 static int
1066 handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len,
1067 gdb_byte *pattern, unsigned pattern_len,
1068 gdb_byte *search_buf,
1069 unsigned chunk_size, unsigned search_buf_size,
1070 CORE_ADDR *found_addrp)
1071 {
1072 /* Prime the search buffer. */
1073
1074 if (gdb_read_memory (start_addr, search_buf, search_buf_size)
1075 != search_buf_size)
1076 {
1077 warning ("Unable to access %ld bytes of target "
1078 "memory at 0x%lx, halting search.",
1079 (long) search_buf_size, (long) start_addr);
1080 return -1;
1081 }
1082
1083 /* Perform the search.
1084
1085 The loop is kept simple by allocating [N + pattern-length - 1] bytes.
1086 When we've scanned N bytes we copy the trailing bytes to the start and
1087 read in another N bytes. */
1088
1089 while (search_space_len >= pattern_len)
1090 {
1091 gdb_byte *found_ptr;
1092 unsigned nr_search_bytes = (search_space_len < search_buf_size
1093 ? search_space_len
1094 : search_buf_size);
1095
1096 found_ptr = (gdb_byte *) memmem (search_buf, nr_search_bytes, pattern,
1097 pattern_len);
1098
1099 if (found_ptr != NULL)
1100 {
1101 CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
1102 *found_addrp = found_addr;
1103 return 1;
1104 }
1105
1106 /* Not found in this chunk, skip to next chunk. */
1107
1108 /* Don't let search_space_len wrap here, it's unsigned. */
1109 if (search_space_len >= chunk_size)
1110 search_space_len -= chunk_size;
1111 else
1112 search_space_len = 0;
1113
1114 if (search_space_len >= pattern_len)
1115 {
1116 unsigned keep_len = search_buf_size - chunk_size;
1117 CORE_ADDR read_addr = start_addr + chunk_size + keep_len;
1118 int nr_to_read;
1119
1120 /* Copy the trailing part of the previous iteration to the front
1121 of the buffer for the next iteration. */
1122 memcpy (search_buf, search_buf + chunk_size, keep_len);
1123
1124 nr_to_read = (search_space_len - keep_len < chunk_size
1125 ? search_space_len - keep_len
1126 : chunk_size);
1127
1128 if (gdb_read_memory (read_addr, search_buf + keep_len,
1129 nr_to_read) != search_buf_size)
1130 {
1131 warning ("Unable to access %ld bytes of target memory "
1132 "at 0x%lx, halting search.",
1133 (long) nr_to_read, (long) read_addr);
1134 return -1;
1135 }
1136
1137 start_addr += chunk_size;
1138 }
1139 }
1140
1141 /* Not found. */
1142
1143 return 0;
1144 }
1145
1146 /* Handle qSearch:memory packets. */
1147
1148 static void
1149 handle_search_memory (char *own_buf, int packet_len)
1150 {
1151 CORE_ADDR start_addr;
1152 CORE_ADDR search_space_len;
1153 gdb_byte *pattern;
1154 unsigned int pattern_len;
1155 /* NOTE: also defined in find.c testcase. */
1156 #define SEARCH_CHUNK_SIZE 16000
1157 const unsigned chunk_size = SEARCH_CHUNK_SIZE;
1158 /* Buffer to hold memory contents for searching. */
1159 gdb_byte *search_buf;
1160 unsigned search_buf_size;
1161 int found;
1162 CORE_ADDR found_addr;
1163 int cmd_name_len = sizeof ("qSearch:memory:") - 1;
1164
1165 pattern = (gdb_byte *) malloc (packet_len);
1166 if (pattern == NULL)
1167 {
1168 error ("Unable to allocate memory to perform the search");
1169 strcpy (own_buf, "E00");
1170 return;
1171 }
1172 if (decode_search_memory_packet (own_buf + cmd_name_len,
1173 packet_len - cmd_name_len,
1174 &start_addr, &search_space_len,
1175 pattern, &pattern_len) < 0)
1176 {
1177 free (pattern);
1178 error ("Error in parsing qSearch:memory packet");
1179 strcpy (own_buf, "E00");
1180 return;
1181 }
1182
1183 search_buf_size = chunk_size + pattern_len - 1;
1184
1185 /* No point in trying to allocate a buffer larger than the search space. */
1186 if (search_space_len < search_buf_size)
1187 search_buf_size = search_space_len;
1188
1189 search_buf = (gdb_byte *) malloc (search_buf_size);
1190 if (search_buf == NULL)
1191 {
1192 free (pattern);
1193 error ("Unable to allocate memory to perform the search");
1194 strcpy (own_buf, "E00");
1195 return;
1196 }
1197
1198 found = handle_search_memory_1 (start_addr, search_space_len,
1199 pattern, pattern_len,
1200 search_buf, chunk_size, search_buf_size,
1201 &found_addr);
1202
1203 if (found > 0)
1204 sprintf (own_buf, "1,%lx", (long) found_addr);
1205 else if (found == 0)
1206 strcpy (own_buf, "0");
1207 else
1208 strcpy (own_buf, "E00");
1209
1210 free (search_buf);
1211 free (pattern);
1212 }
1213
1214 /* Handle the "D" packet. */
1215
1216 static void
1217 handle_detach (char *own_buf)
1218 {
1219 require_running_or_return (own_buf);
1220
1221 int pid;
1222
1223 if (multi_process)
1224 {
1225 /* skip 'D;' */
1226 pid = strtol (&own_buf[2], NULL, 16);
1227 }
1228 else
1229 pid = ptid_get_pid (current_ptid);
1230
1231 if ((tracing && disconnected_tracing) || any_persistent_commands ())
1232 {
1233 struct process_info *process = find_process_pid (pid);
1234
1235 if (process == NULL)
1236 {
1237 write_enn (own_buf);
1238 return;
1239 }
1240
1241 if (tracing && disconnected_tracing)
1242 fprintf (stderr,
1243 "Disconnected tracing in effect, "
1244 "leaving gdbserver attached to the process\n");
1245
1246 if (any_persistent_commands ())
1247 fprintf (stderr,
1248 "Persistent commands are present, "
1249 "leaving gdbserver attached to the process\n");
1250
1251 /* Make sure we're in non-stop/async mode, so we we can both
1252 wait for an async socket accept, and handle async target
1253 events simultaneously. There's also no point either in
1254 having the target stop all threads, when we're going to
1255 pass signals down without informing GDB. */
1256 if (!non_stop)
1257 {
1258 if (debug_threads)
1259 debug_printf ("Forcing non-stop mode\n");
1260
1261 non_stop = 1;
1262 start_non_stop (1);
1263 }
1264
1265 process->gdb_detached = 1;
1266
1267 /* Detaching implicitly resumes all threads. */
1268 target_continue_no_signal (minus_one_ptid);
1269
1270 write_ok (own_buf);
1271 return;
1272 }
1273
1274 fprintf (stderr, "Detaching from process %d\n", pid);
1275 stop_tracing ();
1276 if (detach_inferior (pid) != 0)
1277 write_enn (own_buf);
1278 else
1279 {
1280 discard_queued_stop_replies (pid_to_ptid (pid));
1281 write_ok (own_buf);
1282
1283 if (extended_protocol || target_running ())
1284 {
1285 /* There is still at least one inferior remaining or
1286 we are in extended mode, so don't terminate gdbserver,
1287 and instead treat this like a normal program exit. */
1288 last_status.kind = TARGET_WAITKIND_EXITED;
1289 last_status.value.integer = 0;
1290 last_ptid = pid_to_ptid (pid);
1291
1292 current_thread = NULL;
1293 }
1294 else
1295 {
1296 putpkt (own_buf);
1297 remote_close ();
1298
1299 /* If we are attached, then we can exit. Otherwise, we
1300 need to hang around doing nothing, until the child is
1301 gone. */
1302 join_inferior (pid);
1303 exit (0);
1304 }
1305 }
1306 }
1307
1308 /* Parse options to --debug-format= and "monitor set debug-format".
1309 ARG is the text after "--debug-format=" or "monitor set debug-format".
1310 IS_MONITOR is non-zero if we're invoked via "monitor set debug-format".
1311 This triggers calls to monitor_output.
1312 The result is NULL if all options were parsed ok, otherwise an error
1313 message which the caller must free.
1314
1315 N.B. These commands affect all debug format settings, they are not
1316 cumulative. If a format is not specified, it is turned off.
1317 However, we don't go to extra trouble with things like
1318 "monitor set debug-format all,none,timestamp".
1319 Instead we just parse them one at a time, in order.
1320
1321 The syntax for "monitor set debug" we support here is not identical
1322 to gdb's "set debug foo on|off" because we also use this function to
1323 parse "--debug-format=foo,bar". */
1324
1325 static std::string
1326 parse_debug_format_options (const char *arg, int is_monitor)
1327 {
1328 VEC (char_ptr) *options;
1329 int ix;
1330 char *option;
1331
1332 /* First turn all debug format options off. */
1333 debug_timestamp = 0;
1334
1335 /* First remove leading spaces, for "monitor set debug-format". */
1336 while (isspace (*arg))
1337 ++arg;
1338
1339 options = delim_string_to_char_ptr_vec (arg, ',');
1340
1341 for (ix = 0; VEC_iterate (char_ptr, options, ix, option); ++ix)
1342 {
1343 if (strcmp (option, "all") == 0)
1344 {
1345 debug_timestamp = 1;
1346 if (is_monitor)
1347 monitor_output ("All extra debug format options enabled.\n");
1348 }
1349 else if (strcmp (option, "none") == 0)
1350 {
1351 debug_timestamp = 0;
1352 if (is_monitor)
1353 monitor_output ("All extra debug format options disabled.\n");
1354 }
1355 else if (strcmp (option, "timestamp") == 0)
1356 {
1357 debug_timestamp = 1;
1358 if (is_monitor)
1359 monitor_output ("Timestamps will be added to debug output.\n");
1360 }
1361 else if (*option == '\0')
1362 {
1363 /* An empty option, e.g., "--debug-format=foo,,bar", is ignored. */
1364 continue;
1365 }
1366 else
1367 {
1368 std::string msg
1369 = string_printf ("Unknown debug-format argument: \"%s\"\n", option);
1370
1371 free_char_ptr_vec (options);
1372 return msg;
1373 }
1374 }
1375
1376 free_char_ptr_vec (options);
1377 return std::string ();
1378 }
1379
1380 /* Handle monitor commands not handled by target-specific handlers. */
1381
1382 static void
1383 handle_monitor_command (char *mon, char *own_buf)
1384 {
1385 if (strcmp (mon, "set debug 1") == 0)
1386 {
1387 debug_threads = 1;
1388 monitor_output ("Debug output enabled.\n");
1389 }
1390 else if (strcmp (mon, "set debug 0") == 0)
1391 {
1392 debug_threads = 0;
1393 monitor_output ("Debug output disabled.\n");
1394 }
1395 else if (strcmp (mon, "set debug-hw-points 1") == 0)
1396 {
1397 show_debug_regs = 1;
1398 monitor_output ("H/W point debugging output enabled.\n");
1399 }
1400 else if (strcmp (mon, "set debug-hw-points 0") == 0)
1401 {
1402 show_debug_regs = 0;
1403 monitor_output ("H/W point debugging output disabled.\n");
1404 }
1405 else if (strcmp (mon, "set remote-debug 1") == 0)
1406 {
1407 remote_debug = 1;
1408 monitor_output ("Protocol debug output enabled.\n");
1409 }
1410 else if (strcmp (mon, "set remote-debug 0") == 0)
1411 {
1412 remote_debug = 0;
1413 monitor_output ("Protocol debug output disabled.\n");
1414 }
1415 else if (startswith (mon, "set debug-format "))
1416 {
1417 std::string error_msg
1418 = parse_debug_format_options (mon + sizeof ("set debug-format ") - 1,
1419 1);
1420
1421 if (!error_msg.empty ())
1422 {
1423 monitor_output (error_msg.c_str ());
1424 monitor_show_help ();
1425 write_enn (own_buf);
1426 }
1427 }
1428 else if (strcmp (mon, "help") == 0)
1429 monitor_show_help ();
1430 else if (strcmp (mon, "exit") == 0)
1431 exit_requested = 1;
1432 else
1433 {
1434 monitor_output ("Unknown monitor command.\n\n");
1435 monitor_show_help ();
1436 write_enn (own_buf);
1437 }
1438 }
1439
1440 /* Associates a callback with each supported qXfer'able object. */
1441
1442 struct qxfer
1443 {
1444 /* The object this handler handles. */
1445 const char *object;
1446
1447 /* Request that the target transfer up to LEN 8-bit bytes of the
1448 target's OBJECT. The OFFSET, for a seekable object, specifies
1449 the starting point. The ANNEX can be used to provide additional
1450 data-specific information to the target.
1451
1452 Return the number of bytes actually transfered, zero when no
1453 further transfer is possible, -1 on error, -2 when the transfer
1454 is not supported, and -3 on a verbose error message that should
1455 be preserved. Return of a positive value smaller than LEN does
1456 not indicate the end of the object, only the end of the transfer.
1457
1458 One, and only one, of readbuf or writebuf must be non-NULL. */
1459 int (*xfer) (const char *annex,
1460 gdb_byte *readbuf, const gdb_byte *writebuf,
1461 ULONGEST offset, LONGEST len);
1462 };
1463
1464 /* Handle qXfer:auxv:read. */
1465
1466 static int
1467 handle_qxfer_auxv (const char *annex,
1468 gdb_byte *readbuf, const gdb_byte *writebuf,
1469 ULONGEST offset, LONGEST len)
1470 {
1471 if (the_target->read_auxv == NULL || writebuf != NULL)
1472 return -2;
1473
1474 if (annex[0] != '\0' || current_thread == NULL)
1475 return -1;
1476
1477 return (*the_target->read_auxv) (offset, readbuf, len);
1478 }
1479
1480 /* Handle qXfer:exec-file:read. */
1481
1482 static int
1483 handle_qxfer_exec_file (const char *annex,
1484 gdb_byte *readbuf, const gdb_byte *writebuf,
1485 ULONGEST offset, LONGEST len)
1486 {
1487 char *file;
1488 ULONGEST pid;
1489 int total_len;
1490
1491 if (the_target->pid_to_exec_file == NULL || writebuf != NULL)
1492 return -2;
1493
1494 if (annex[0] == '\0')
1495 {
1496 if (current_thread == NULL)
1497 return -1;
1498
1499 pid = pid_of (current_thread);
1500 }
1501 else
1502 {
1503 annex = unpack_varlen_hex (annex, &pid);
1504 if (annex[0] != '\0')
1505 return -1;
1506 }
1507
1508 if (pid <= 0)
1509 return -1;
1510
1511 file = (*the_target->pid_to_exec_file) (pid);
1512 if (file == NULL)
1513 return -1;
1514
1515 total_len = strlen (file);
1516
1517 if (offset > total_len)
1518 return -1;
1519
1520 if (offset + len > total_len)
1521 len = total_len - offset;
1522
1523 memcpy (readbuf, file + offset, len);
1524 return len;
1525 }
1526
1527 /* Handle qXfer:features:read. */
1528
1529 static int
1530 handle_qxfer_features (const char *annex,
1531 gdb_byte *readbuf, const gdb_byte *writebuf,
1532 ULONGEST offset, LONGEST len)
1533 {
1534 const char *document;
1535 size_t total_len;
1536
1537 if (writebuf != NULL)
1538 return -2;
1539
1540 if (!target_running ())
1541 return -1;
1542
1543 /* Grab the correct annex. */
1544 document = get_features_xml (annex);
1545 if (document == NULL)
1546 return -1;
1547
1548 total_len = strlen (document);
1549
1550 if (offset > total_len)
1551 return -1;
1552
1553 if (offset + len > total_len)
1554 len = total_len - offset;
1555
1556 memcpy (readbuf, document + offset, len);
1557 return len;
1558 }
1559
1560 /* Handle qXfer:libraries:read. */
1561
1562 static int
1563 handle_qxfer_libraries (const char *annex,
1564 gdb_byte *readbuf, const gdb_byte *writebuf,
1565 ULONGEST offset, LONGEST len)
1566 {
1567 if (writebuf != NULL)
1568 return -2;
1569
1570 if (annex[0] != '\0' || current_thread == NULL)
1571 return -1;
1572
1573 std::string document = "<library-list version=\"1.0\">\n";
1574
1575 for (const dll_info &dll : all_dlls)
1576 document += string_printf
1577 (" <library name=\"%s\"><segment address=\"0x%lx\"/></library>\n",
1578 dll.name.c_str (), (long) dll.base_addr);
1579
1580 document += "</library-list>\n";
1581
1582 if (offset > document.length ())
1583 return -1;
1584
1585 if (offset + len > document.length ())
1586 len = document.length () - offset;
1587
1588 memcpy (readbuf, &document[offset], len);
1589
1590 return len;
1591 }
1592
1593 /* Handle qXfer:libraries-svr4:read. */
1594
1595 static int
1596 handle_qxfer_libraries_svr4 (const char *annex,
1597 gdb_byte *readbuf, const gdb_byte *writebuf,
1598 ULONGEST offset, LONGEST len)
1599 {
1600 if (writebuf != NULL)
1601 return -2;
1602
1603 if (current_thread == NULL || the_target->qxfer_libraries_svr4 == NULL)
1604 return -1;
1605
1606 return the_target->qxfer_libraries_svr4 (annex, readbuf, writebuf, offset, len);
1607 }
1608
1609 /* Handle qXfer:osadata:read. */
1610
1611 static int
1612 handle_qxfer_osdata (const char *annex,
1613 gdb_byte *readbuf, const gdb_byte *writebuf,
1614 ULONGEST offset, LONGEST len)
1615 {
1616 if (the_target->qxfer_osdata == NULL || writebuf != NULL)
1617 return -2;
1618
1619 return (*the_target->qxfer_osdata) (annex, readbuf, NULL, offset, len);
1620 }
1621
1622 /* Handle qXfer:siginfo:read and qXfer:siginfo:write. */
1623
1624 static int
1625 handle_qxfer_siginfo (const char *annex,
1626 gdb_byte *readbuf, const gdb_byte *writebuf,
1627 ULONGEST offset, LONGEST len)
1628 {
1629 if (the_target->qxfer_siginfo == NULL)
1630 return -2;
1631
1632 if (annex[0] != '\0' || current_thread == NULL)
1633 return -1;
1634
1635 return (*the_target->qxfer_siginfo) (annex, readbuf, writebuf, offset, len);
1636 }
1637
1638 /* Handle qXfer:spu:read and qXfer:spu:write. */
1639
1640 static int
1641 handle_qxfer_spu (const char *annex,
1642 gdb_byte *readbuf, const gdb_byte *writebuf,
1643 ULONGEST offset, LONGEST len)
1644 {
1645 if (the_target->qxfer_spu == NULL)
1646 return -2;
1647
1648 if (current_thread == NULL)
1649 return -1;
1650
1651 return (*the_target->qxfer_spu) (annex, readbuf, writebuf, offset, len);
1652 }
1653
1654 /* Handle qXfer:statictrace:read. */
1655
1656 static int
1657 handle_qxfer_statictrace (const char *annex,
1658 gdb_byte *readbuf, const gdb_byte *writebuf,
1659 ULONGEST offset, LONGEST len)
1660 {
1661 ULONGEST nbytes;
1662
1663 if (writebuf != NULL)
1664 return -2;
1665
1666 if (annex[0] != '\0' || current_thread == NULL || current_traceframe == -1)
1667 return -1;
1668
1669 if (traceframe_read_sdata (current_traceframe, offset,
1670 readbuf, len, &nbytes))
1671 return -1;
1672 return nbytes;
1673 }
1674
1675 /* Helper for handle_qxfer_threads_proper.
1676 Emit the XML to describe the thread of INF. */
1677
1678 static void
1679 handle_qxfer_threads_worker (thread_info *thread, struct buffer *buffer)
1680 {
1681 ptid_t ptid = ptid_of (thread);
1682 char ptid_s[100];
1683 int core = target_core_of_thread (ptid);
1684 char core_s[21];
1685 const char *name = target_thread_name (ptid);
1686 int handle_len;
1687 gdb_byte *handle;
1688 bool handle_status = target_thread_handle (ptid, &handle, &handle_len);
1689
1690 write_ptid (ptid_s, ptid);
1691
1692 buffer_xml_printf (buffer, "<thread id=\"%s\"", ptid_s);
1693
1694 if (core != -1)
1695 {
1696 sprintf (core_s, "%d", core);
1697 buffer_xml_printf (buffer, " core=\"%s\"", core_s);
1698 }
1699
1700 if (name != NULL)
1701 buffer_xml_printf (buffer, " name=\"%s\"", name);
1702
1703 if (handle_status)
1704 {
1705 char *handle_s = (char *) alloca (handle_len * 2 + 1);
1706 bin2hex (handle, handle_s, handle_len);
1707 buffer_xml_printf (buffer, " handle=\"%s\"", handle_s);
1708 }
1709
1710 buffer_xml_printf (buffer, "/>\n");
1711 }
1712
1713 /* Helper for handle_qxfer_threads. */
1714
1715 static void
1716 handle_qxfer_threads_proper (struct buffer *buffer)
1717 {
1718 buffer_grow_str (buffer, "<threads>\n");
1719
1720 for_each_thread ([&] (thread_info *thread)
1721 {
1722 handle_qxfer_threads_worker (thread, buffer);
1723 });
1724
1725 buffer_grow_str0 (buffer, "</threads>\n");
1726 }
1727
1728 /* Handle qXfer:threads:read. */
1729
1730 static int
1731 handle_qxfer_threads (const char *annex,
1732 gdb_byte *readbuf, const gdb_byte *writebuf,
1733 ULONGEST offset, LONGEST len)
1734 {
1735 static char *result = 0;
1736 static unsigned int result_length = 0;
1737
1738 if (writebuf != NULL)
1739 return -2;
1740
1741 if (annex[0] != '\0')
1742 return -1;
1743
1744 if (offset == 0)
1745 {
1746 struct buffer buffer;
1747 /* When asked for data at offset 0, generate everything and store into
1748 'result'. Successive reads will be served off 'result'. */
1749 if (result)
1750 free (result);
1751
1752 buffer_init (&buffer);
1753
1754 handle_qxfer_threads_proper (&buffer);
1755
1756 result = buffer_finish (&buffer);
1757 result_length = strlen (result);
1758 buffer_free (&buffer);
1759 }
1760
1761 if (offset >= result_length)
1762 {
1763 /* We're out of data. */
1764 free (result);
1765 result = NULL;
1766 result_length = 0;
1767 return 0;
1768 }
1769
1770 if (len > result_length - offset)
1771 len = result_length - offset;
1772
1773 memcpy (readbuf, result + offset, len);
1774
1775 return len;
1776 }
1777
1778 /* Handle qXfer:traceframe-info:read. */
1779
1780 static int
1781 handle_qxfer_traceframe_info (const char *annex,
1782 gdb_byte *readbuf, const gdb_byte *writebuf,
1783 ULONGEST offset, LONGEST len)
1784 {
1785 static char *result = 0;
1786 static unsigned int result_length = 0;
1787
1788 if (writebuf != NULL)
1789 return -2;
1790
1791 if (!target_running () || annex[0] != '\0' || current_traceframe == -1)
1792 return -1;
1793
1794 if (offset == 0)
1795 {
1796 struct buffer buffer;
1797
1798 /* When asked for data at offset 0, generate everything and
1799 store into 'result'. Successive reads will be served off
1800 'result'. */
1801 free (result);
1802
1803 buffer_init (&buffer);
1804
1805 traceframe_read_info (current_traceframe, &buffer);
1806
1807 result = buffer_finish (&buffer);
1808 result_length = strlen (result);
1809 buffer_free (&buffer);
1810 }
1811
1812 if (offset >= result_length)
1813 {
1814 /* We're out of data. */
1815 free (result);
1816 result = NULL;
1817 result_length = 0;
1818 return 0;
1819 }
1820
1821 if (len > result_length - offset)
1822 len = result_length - offset;
1823
1824 memcpy (readbuf, result + offset, len);
1825 return len;
1826 }
1827
1828 /* Handle qXfer:fdpic:read. */
1829
1830 static int
1831 handle_qxfer_fdpic (const char *annex, gdb_byte *readbuf,
1832 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
1833 {
1834 if (the_target->read_loadmap == NULL)
1835 return -2;
1836
1837 if (current_thread == NULL)
1838 return -1;
1839
1840 return (*the_target->read_loadmap) (annex, offset, readbuf, len);
1841 }
1842
1843 /* Handle qXfer:btrace:read. */
1844
1845 static int
1846 handle_qxfer_btrace (const char *annex,
1847 gdb_byte *readbuf, const gdb_byte *writebuf,
1848 ULONGEST offset, LONGEST len)
1849 {
1850 static struct buffer cache;
1851 struct thread_info *thread;
1852 enum btrace_read_type type;
1853 int result;
1854
1855 if (the_target->read_btrace == NULL || writebuf != NULL)
1856 return -2;
1857
1858 if (ptid_equal (general_thread, null_ptid)
1859 || ptid_equal (general_thread, minus_one_ptid))
1860 {
1861 strcpy (own_buf, "E.Must select a single thread.");
1862 return -3;
1863 }
1864
1865 thread = find_thread_ptid (general_thread);
1866 if (thread == NULL)
1867 {
1868 strcpy (own_buf, "E.No such thread.");
1869 return -3;
1870 }
1871
1872 if (thread->btrace == NULL)
1873 {
1874 strcpy (own_buf, "E.Btrace not enabled.");
1875 return -3;
1876 }
1877
1878 if (strcmp (annex, "all") == 0)
1879 type = BTRACE_READ_ALL;
1880 else if (strcmp (annex, "new") == 0)
1881 type = BTRACE_READ_NEW;
1882 else if (strcmp (annex, "delta") == 0)
1883 type = BTRACE_READ_DELTA;
1884 else
1885 {
1886 strcpy (own_buf, "E.Bad annex.");
1887 return -3;
1888 }
1889
1890 if (offset == 0)
1891 {
1892 buffer_free (&cache);
1893
1894 result = target_read_btrace (thread->btrace, &cache, type);
1895 if (result != 0)
1896 {
1897 memcpy (own_buf, cache.buffer, cache.used_size);
1898 return -3;
1899 }
1900 }
1901 else if (offset > cache.used_size)
1902 {
1903 buffer_free (&cache);
1904 return -3;
1905 }
1906
1907 if (len > cache.used_size - offset)
1908 len = cache.used_size - offset;
1909
1910 memcpy (readbuf, cache.buffer + offset, len);
1911
1912 return len;
1913 }
1914
1915 /* Handle qXfer:btrace-conf:read. */
1916
1917 static int
1918 handle_qxfer_btrace_conf (const char *annex,
1919 gdb_byte *readbuf, const gdb_byte *writebuf,
1920 ULONGEST offset, LONGEST len)
1921 {
1922 static struct buffer cache;
1923 struct thread_info *thread;
1924 int result;
1925
1926 if (the_target->read_btrace_conf == NULL || writebuf != NULL)
1927 return -2;
1928
1929 if (annex[0] != '\0')
1930 return -1;
1931
1932 if (ptid_equal (general_thread, null_ptid)
1933 || ptid_equal (general_thread, minus_one_ptid))
1934 {
1935 strcpy (own_buf, "E.Must select a single thread.");
1936 return -3;
1937 }
1938
1939 thread = find_thread_ptid (general_thread);
1940 if (thread == NULL)
1941 {
1942 strcpy (own_buf, "E.No such thread.");
1943 return -3;
1944 }
1945
1946 if (thread->btrace == NULL)
1947 {
1948 strcpy (own_buf, "E.Btrace not enabled.");
1949 return -3;
1950 }
1951
1952 if (offset == 0)
1953 {
1954 buffer_free (&cache);
1955
1956 result = target_read_btrace_conf (thread->btrace, &cache);
1957 if (result != 0)
1958 {
1959 memcpy (own_buf, cache.buffer, cache.used_size);
1960 return -3;
1961 }
1962 }
1963 else if (offset > cache.used_size)
1964 {
1965 buffer_free (&cache);
1966 return -3;
1967 }
1968
1969 if (len > cache.used_size - offset)
1970 len = cache.used_size - offset;
1971
1972 memcpy (readbuf, cache.buffer + offset, len);
1973
1974 return len;
1975 }
1976
1977 static const struct qxfer qxfer_packets[] =
1978 {
1979 { "auxv", handle_qxfer_auxv },
1980 { "btrace", handle_qxfer_btrace },
1981 { "btrace-conf", handle_qxfer_btrace_conf },
1982 { "exec-file", handle_qxfer_exec_file},
1983 { "fdpic", handle_qxfer_fdpic},
1984 { "features", handle_qxfer_features },
1985 { "libraries", handle_qxfer_libraries },
1986 { "libraries-svr4", handle_qxfer_libraries_svr4 },
1987 { "osdata", handle_qxfer_osdata },
1988 { "siginfo", handle_qxfer_siginfo },
1989 { "spu", handle_qxfer_spu },
1990 { "statictrace", handle_qxfer_statictrace },
1991 { "threads", handle_qxfer_threads },
1992 { "traceframe-info", handle_qxfer_traceframe_info },
1993 };
1994
1995 static int
1996 handle_qxfer (char *own_buf, int packet_len, int *new_packet_len_p)
1997 {
1998 int i;
1999 char *object;
2000 char *rw;
2001 char *annex;
2002 char *offset;
2003
2004 if (!startswith (own_buf, "qXfer:"))
2005 return 0;
2006
2007 /* Grab the object, r/w and annex. */
2008 if (decode_xfer (own_buf + 6, &object, &rw, &annex, &offset) < 0)
2009 {
2010 write_enn (own_buf);
2011 return 1;
2012 }
2013
2014 for (i = 0;
2015 i < sizeof (qxfer_packets) / sizeof (qxfer_packets[0]);
2016 i++)
2017 {
2018 const struct qxfer *q = &qxfer_packets[i];
2019
2020 if (strcmp (object, q->object) == 0)
2021 {
2022 if (strcmp (rw, "read") == 0)
2023 {
2024 unsigned char *data;
2025 int n;
2026 CORE_ADDR ofs;
2027 unsigned int len;
2028
2029 /* Grab the offset and length. */
2030 if (decode_xfer_read (offset, &ofs, &len) < 0)
2031 {
2032 write_enn (own_buf);
2033 return 1;
2034 }
2035
2036 /* Read one extra byte, as an indicator of whether there is
2037 more. */
2038 if (len > PBUFSIZ - 2)
2039 len = PBUFSIZ - 2;
2040 data = (unsigned char *) malloc (len + 1);
2041 if (data == NULL)
2042 {
2043 write_enn (own_buf);
2044 return 1;
2045 }
2046 n = (*q->xfer) (annex, data, NULL, ofs, len + 1);
2047 if (n == -2)
2048 {
2049 free (data);
2050 return 0;
2051 }
2052 else if (n == -3)
2053 {
2054 /* Preserve error message. */
2055 }
2056 else if (n < 0)
2057 write_enn (own_buf);
2058 else if (n > len)
2059 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
2060 else
2061 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
2062
2063 free (data);
2064 return 1;
2065 }
2066 else if (strcmp (rw, "write") == 0)
2067 {
2068 int n;
2069 unsigned int len;
2070 CORE_ADDR ofs;
2071 unsigned char *data;
2072
2073 strcpy (own_buf, "E00");
2074 data = (unsigned char *) malloc (packet_len - (offset - own_buf));
2075 if (data == NULL)
2076 {
2077 write_enn (own_buf);
2078 return 1;
2079 }
2080 if (decode_xfer_write (offset, packet_len - (offset - own_buf),
2081 &ofs, &len, data) < 0)
2082 {
2083 free (data);
2084 write_enn (own_buf);
2085 return 1;
2086 }
2087
2088 n = (*q->xfer) (annex, NULL, data, ofs, len);
2089 if (n == -2)
2090 {
2091 free (data);
2092 return 0;
2093 }
2094 else if (n == -3)
2095 {
2096 /* Preserve error message. */
2097 }
2098 else if (n < 0)
2099 write_enn (own_buf);
2100 else
2101 sprintf (own_buf, "%x", n);
2102
2103 free (data);
2104 return 1;
2105 }
2106
2107 return 0;
2108 }
2109 }
2110
2111 return 0;
2112 }
2113
2114 /* Compute 32 bit CRC from inferior memory.
2115
2116 On success, return 32 bit CRC.
2117 On failure, return (unsigned long long) -1. */
2118
2119 static unsigned long long
2120 crc32 (CORE_ADDR base, int len, unsigned int crc)
2121 {
2122 while (len--)
2123 {
2124 unsigned char byte = 0;
2125
2126 /* Return failure if memory read fails. */
2127 if (read_inferior_memory (base, &byte, 1) != 0)
2128 return (unsigned long long) -1;
2129
2130 crc = xcrc32 (&byte, 1, crc);
2131 base++;
2132 }
2133 return (unsigned long long) crc;
2134 }
2135
2136 /* Add supported btrace packets to BUF. */
2137
2138 static void
2139 supported_btrace_packets (char *buf)
2140 {
2141 strcat (buf, ";Qbtrace:bts+");
2142 strcat (buf, ";Qbtrace-conf:bts:size+");
2143 strcat (buf, ";Qbtrace:pt+");
2144 strcat (buf, ";Qbtrace-conf:pt:size+");
2145 strcat (buf, ";Qbtrace:off+");
2146 strcat (buf, ";qXfer:btrace:read+");
2147 strcat (buf, ";qXfer:btrace-conf:read+");
2148 }
2149
2150 /* Handle all of the extended 'q' packets. */
2151
2152 static void
2153 handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
2154 {
2155 static std::list<thread_info *>::const_iterator thread_iter;
2156
2157 /* Reply the current thread id. */
2158 if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC)
2159 {
2160 ptid_t ptid;
2161 require_running_or_return (own_buf);
2162
2163 if (general_thread != null_ptid && general_thread != minus_one_ptid)
2164 ptid = general_thread;
2165 else
2166 {
2167 thread_iter = all_threads.begin ();
2168 ptid = (*thread_iter)->id;
2169 }
2170
2171 sprintf (own_buf, "QC");
2172 own_buf += 2;
2173 write_ptid (own_buf, ptid);
2174 return;
2175 }
2176
2177 if (strcmp ("qSymbol::", own_buf) == 0)
2178 {
2179 struct thread_info *save_thread = current_thread;
2180
2181 /* For qSymbol, GDB only changes the current thread if the
2182 previous current thread was of a different process. So if
2183 the previous thread is gone, we need to pick another one of
2184 the same process. This can happen e.g., if we followed an
2185 exec in a non-leader thread. */
2186 if (current_thread == NULL)
2187 {
2188 current_thread
2189 = find_any_thread_of_pid (ptid_get_pid (general_thread));
2190
2191 /* Just in case, if we didn't find a thread, then bail out
2192 instead of crashing. */
2193 if (current_thread == NULL)
2194 {
2195 write_enn (own_buf);
2196 current_thread = save_thread;
2197 return;
2198 }
2199 }
2200
2201 /* GDB is suggesting new symbols have been loaded. This may
2202 mean a new shared library has been detected as loaded, so
2203 take the opportunity to check if breakpoints we think are
2204 inserted, still are. Note that it isn't guaranteed that
2205 we'll see this when a shared library is loaded, and nor will
2206 we see this for unloads (although breakpoints in unloaded
2207 libraries shouldn't trigger), as GDB may not find symbols for
2208 the library at all. We also re-validate breakpoints when we
2209 see a second GDB breakpoint for the same address, and or when
2210 we access breakpoint shadows. */
2211 validate_breakpoints ();
2212
2213 if (target_supports_tracepoints ())
2214 tracepoint_look_up_symbols ();
2215
2216 if (current_thread != NULL && the_target->look_up_symbols != NULL)
2217 (*the_target->look_up_symbols) ();
2218
2219 current_thread = save_thread;
2220
2221 strcpy (own_buf, "OK");
2222 return;
2223 }
2224
2225 if (!disable_packet_qfThreadInfo)
2226 {
2227 if (strcmp ("qfThreadInfo", own_buf) == 0)
2228 {
2229 require_running_or_return (own_buf);
2230 thread_iter = all_threads.begin ();
2231
2232 *own_buf++ = 'm';
2233 ptid_t ptid = (*thread_iter)->id;
2234 write_ptid (own_buf, ptid);
2235 thread_iter++;
2236 return;
2237 }
2238
2239 if (strcmp ("qsThreadInfo", own_buf) == 0)
2240 {
2241 require_running_or_return (own_buf);
2242 if (thread_iter != all_threads.end ())
2243 {
2244 *own_buf++ = 'm';
2245 ptid_t ptid = (*thread_iter)->id;
2246 write_ptid (own_buf, ptid);
2247 thread_iter++;
2248 return;
2249 }
2250 else
2251 {
2252 sprintf (own_buf, "l");
2253 return;
2254 }
2255 }
2256 }
2257
2258 if (the_target->read_offsets != NULL
2259 && strcmp ("qOffsets", own_buf) == 0)
2260 {
2261 CORE_ADDR text, data;
2262
2263 require_running_or_return (own_buf);
2264 if (the_target->read_offsets (&text, &data))
2265 sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
2266 (long)text, (long)data, (long)data);
2267 else
2268 write_enn (own_buf);
2269
2270 return;
2271 }
2272
2273 /* Protocol features query. */
2274 if (startswith (own_buf, "qSupported")
2275 && (own_buf[10] == ':' || own_buf[10] == '\0'))
2276 {
2277 char *p = &own_buf[10];
2278 int gdb_supports_qRelocInsn = 0;
2279
2280 /* Process each feature being provided by GDB. The first
2281 feature will follow a ':', and latter features will follow
2282 ';'. */
2283 if (*p == ':')
2284 {
2285 char **qsupported = NULL;
2286 int count = 0;
2287 int unknown = 0;
2288 int i;
2289
2290 /* Two passes, to avoid nested strtok calls in
2291 target_process_qsupported. */
2292 for (p = strtok (p + 1, ";");
2293 p != NULL;
2294 p = strtok (NULL, ";"))
2295 {
2296 count++;
2297 qsupported = XRESIZEVEC (char *, qsupported, count);
2298 qsupported[count - 1] = xstrdup (p);
2299 }
2300
2301 for (i = 0; i < count; i++)
2302 {
2303 p = qsupported[i];
2304 if (strcmp (p, "multiprocess+") == 0)
2305 {
2306 /* GDB supports and wants multi-process support if
2307 possible. */
2308 if (target_supports_multi_process ())
2309 multi_process = 1;
2310 }
2311 else if (strcmp (p, "qRelocInsn+") == 0)
2312 {
2313 /* GDB supports relocate instruction requests. */
2314 gdb_supports_qRelocInsn = 1;
2315 }
2316 else if (strcmp (p, "swbreak+") == 0)
2317 {
2318 /* GDB wants us to report whether a trap is caused
2319 by a software breakpoint and for us to handle PC
2320 adjustment if necessary on this target. */
2321 if (target_supports_stopped_by_sw_breakpoint ())
2322 swbreak_feature = 1;
2323 }
2324 else if (strcmp (p, "hwbreak+") == 0)
2325 {
2326 /* GDB wants us to report whether a trap is caused
2327 by a hardware breakpoint. */
2328 if (target_supports_stopped_by_hw_breakpoint ())
2329 hwbreak_feature = 1;
2330 }
2331 else if (strcmp (p, "fork-events+") == 0)
2332 {
2333 /* GDB supports and wants fork events if possible. */
2334 if (target_supports_fork_events ())
2335 report_fork_events = 1;
2336 }
2337 else if (strcmp (p, "vfork-events+") == 0)
2338 {
2339 /* GDB supports and wants vfork events if possible. */
2340 if (target_supports_vfork_events ())
2341 report_vfork_events = 1;
2342 }
2343 else if (strcmp (p, "exec-events+") == 0)
2344 {
2345 /* GDB supports and wants exec events if possible. */
2346 if (target_supports_exec_events ())
2347 report_exec_events = 1;
2348 }
2349 else if (strcmp (p, "vContSupported+") == 0)
2350 vCont_supported = 1;
2351 else if (strcmp (p, "QThreadEvents+") == 0)
2352 ;
2353 else if (strcmp (p, "no-resumed+") == 0)
2354 {
2355 /* GDB supports and wants TARGET_WAITKIND_NO_RESUMED
2356 events. */
2357 report_no_resumed = 1;
2358 }
2359 else
2360 {
2361 /* Move the unknown features all together. */
2362 qsupported[i] = NULL;
2363 qsupported[unknown] = p;
2364 unknown++;
2365 }
2366 }
2367
2368 /* Give the target backend a chance to process the unknown
2369 features. */
2370 target_process_qsupported (qsupported, unknown);
2371
2372 for (i = 0; i < count; i++)
2373 free (qsupported[i]);
2374 free (qsupported);
2375 }
2376
2377 sprintf (own_buf,
2378 "PacketSize=%x;QPassSignals+;QProgramSignals+;"
2379 "QStartupWithShell+;QEnvironmentHexEncoded+;"
2380 "QEnvironmentReset+;QEnvironmentUnset+;"
2381 "QSetWorkingDir+",
2382 PBUFSIZ - 1);
2383
2384 if (target_supports_catch_syscall ())
2385 strcat (own_buf, ";QCatchSyscalls+");
2386
2387 if (the_target->qxfer_libraries_svr4 != NULL)
2388 strcat (own_buf, ";qXfer:libraries-svr4:read+"
2389 ";augmented-libraries-svr4-read+");
2390 else
2391 {
2392 /* We do not have any hook to indicate whether the non-SVR4 target
2393 backend supports qXfer:libraries:read, so always report it. */
2394 strcat (own_buf, ";qXfer:libraries:read+");
2395 }
2396
2397 if (the_target->read_auxv != NULL)
2398 strcat (own_buf, ";qXfer:auxv:read+");
2399
2400 if (the_target->qxfer_spu != NULL)
2401 strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
2402
2403 if (the_target->qxfer_siginfo != NULL)
2404 strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
2405
2406 if (the_target->read_loadmap != NULL)
2407 strcat (own_buf, ";qXfer:fdpic:read+");
2408
2409 /* We always report qXfer:features:read, as targets may
2410 install XML files on a subsequent call to arch_setup.
2411 If we reported to GDB on startup that we don't support
2412 qXfer:feature:read at all, we will never be re-queried. */
2413 strcat (own_buf, ";qXfer:features:read+");
2414
2415 if (transport_is_reliable)
2416 strcat (own_buf, ";QStartNoAckMode+");
2417
2418 if (the_target->qxfer_osdata != NULL)
2419 strcat (own_buf, ";qXfer:osdata:read+");
2420
2421 if (target_supports_multi_process ())
2422 strcat (own_buf, ";multiprocess+");
2423
2424 if (target_supports_fork_events ())
2425 strcat (own_buf, ";fork-events+");
2426
2427 if (target_supports_vfork_events ())
2428 strcat (own_buf, ";vfork-events+");
2429
2430 if (target_supports_exec_events ())
2431 strcat (own_buf, ";exec-events+");
2432
2433 if (target_supports_non_stop ())
2434 strcat (own_buf, ";QNonStop+");
2435
2436 if (target_supports_disable_randomization ())
2437 strcat (own_buf, ";QDisableRandomization+");
2438
2439 strcat (own_buf, ";qXfer:threads:read+");
2440
2441 if (target_supports_tracepoints ())
2442 {
2443 strcat (own_buf, ";ConditionalTracepoints+");
2444 strcat (own_buf, ";TraceStateVariables+");
2445 strcat (own_buf, ";TracepointSource+");
2446 strcat (own_buf, ";DisconnectedTracing+");
2447 if (gdb_supports_qRelocInsn && target_supports_fast_tracepoints ())
2448 strcat (own_buf, ";FastTracepoints+");
2449 strcat (own_buf, ";StaticTracepoints+");
2450 strcat (own_buf, ";InstallInTrace+");
2451 strcat (own_buf, ";qXfer:statictrace:read+");
2452 strcat (own_buf, ";qXfer:traceframe-info:read+");
2453 strcat (own_buf, ";EnableDisableTracepoints+");
2454 strcat (own_buf, ";QTBuffer:size+");
2455 strcat (own_buf, ";tracenz+");
2456 }
2457
2458 if (target_supports_hardware_single_step ()
2459 || target_supports_software_single_step () )
2460 {
2461 strcat (own_buf, ";ConditionalBreakpoints+");
2462 }
2463 strcat (own_buf, ";BreakpointCommands+");
2464
2465 if (target_supports_agent ())
2466 strcat (own_buf, ";QAgent+");
2467
2468 supported_btrace_packets (own_buf);
2469
2470 if (target_supports_stopped_by_sw_breakpoint ())
2471 strcat (own_buf, ";swbreak+");
2472
2473 if (target_supports_stopped_by_hw_breakpoint ())
2474 strcat (own_buf, ";hwbreak+");
2475
2476 if (the_target->pid_to_exec_file != NULL)
2477 strcat (own_buf, ";qXfer:exec-file:read+");
2478
2479 strcat (own_buf, ";vContSupported+");
2480
2481 strcat (own_buf, ";QThreadEvents+");
2482
2483 strcat (own_buf, ";no-resumed+");
2484
2485 /* Reinitialize components as needed for the new connection. */
2486 hostio_handle_new_gdb_connection ();
2487 target_handle_new_gdb_connection ();
2488
2489 return;
2490 }
2491
2492 /* Thread-local storage support. */
2493 if (the_target->get_tls_address != NULL
2494 && startswith (own_buf, "qGetTLSAddr:"))
2495 {
2496 char *p = own_buf + 12;
2497 CORE_ADDR parts[2], address = 0;
2498 int i, err;
2499 ptid_t ptid = null_ptid;
2500
2501 require_running_or_return (own_buf);
2502
2503 for (i = 0; i < 3; i++)
2504 {
2505 char *p2;
2506 int len;
2507
2508 if (p == NULL)
2509 break;
2510
2511 p2 = strchr (p, ',');
2512 if (p2)
2513 {
2514 len = p2 - p;
2515 p2++;
2516 }
2517 else
2518 {
2519 len = strlen (p);
2520 p2 = NULL;
2521 }
2522
2523 if (i == 0)
2524 ptid = read_ptid (p, NULL);
2525 else
2526 decode_address (&parts[i - 1], p, len);
2527 p = p2;
2528 }
2529
2530 if (p != NULL || i < 3)
2531 err = 1;
2532 else
2533 {
2534 struct thread_info *thread = find_thread_ptid (ptid);
2535
2536 if (thread == NULL)
2537 err = 2;
2538 else
2539 err = the_target->get_tls_address (thread, parts[0], parts[1],
2540 &address);
2541 }
2542
2543 if (err == 0)
2544 {
2545 strcpy (own_buf, paddress(address));
2546 return;
2547 }
2548 else if (err > 0)
2549 {
2550 write_enn (own_buf);
2551 return;
2552 }
2553
2554 /* Otherwise, pretend we do not understand this packet. */
2555 }
2556
2557 /* Windows OS Thread Information Block address support. */
2558 if (the_target->get_tib_address != NULL
2559 && startswith (own_buf, "qGetTIBAddr:"))
2560 {
2561 const char *annex;
2562 int n;
2563 CORE_ADDR tlb;
2564 ptid_t ptid = read_ptid (own_buf + 12, &annex);
2565
2566 n = (*the_target->get_tib_address) (ptid, &tlb);
2567 if (n == 1)
2568 {
2569 strcpy (own_buf, paddress(tlb));
2570 return;
2571 }
2572 else if (n == 0)
2573 {
2574 write_enn (own_buf);
2575 return;
2576 }
2577 return;
2578 }
2579
2580 /* Handle "monitor" commands. */
2581 if (startswith (own_buf, "qRcmd,"))
2582 {
2583 char *mon = (char *) malloc (PBUFSIZ);
2584 int len = strlen (own_buf + 6);
2585
2586 if (mon == NULL)
2587 {
2588 write_enn (own_buf);
2589 return;
2590 }
2591
2592 if ((len % 2) != 0
2593 || hex2bin (own_buf + 6, (gdb_byte *) mon, len / 2) != len / 2)
2594 {
2595 write_enn (own_buf);
2596 free (mon);
2597 return;
2598 }
2599 mon[len / 2] = '\0';
2600
2601 write_ok (own_buf);
2602
2603 if (the_target->handle_monitor_command == NULL
2604 || (*the_target->handle_monitor_command) (mon) == 0)
2605 /* Default processing. */
2606 handle_monitor_command (mon, own_buf);
2607
2608 free (mon);
2609 return;
2610 }
2611
2612 if (startswith (own_buf, "qSearch:memory:"))
2613 {
2614 require_running_or_return (own_buf);
2615 handle_search_memory (own_buf, packet_len);
2616 return;
2617 }
2618
2619 if (strcmp (own_buf, "qAttached") == 0
2620 || startswith (own_buf, "qAttached:"))
2621 {
2622 struct process_info *process;
2623
2624 if (own_buf[sizeof ("qAttached") - 1])
2625 {
2626 int pid = strtoul (own_buf + sizeof ("qAttached:") - 1, NULL, 16);
2627 process = find_process_pid (pid);
2628 }
2629 else
2630 {
2631 require_running_or_return (own_buf);
2632 process = current_process ();
2633 }
2634
2635 if (process == NULL)
2636 {
2637 write_enn (own_buf);
2638 return;
2639 }
2640
2641 strcpy (own_buf, process->attached ? "1" : "0");
2642 return;
2643 }
2644
2645 if (startswith (own_buf, "qCRC:"))
2646 {
2647 /* CRC check (compare-section). */
2648 const char *comma;
2649 ULONGEST base;
2650 int len;
2651 unsigned long long crc;
2652
2653 require_running_or_return (own_buf);
2654 comma = unpack_varlen_hex (own_buf + 5, &base);
2655 if (*comma++ != ',')
2656 {
2657 write_enn (own_buf);
2658 return;
2659 }
2660 len = strtoul (comma, NULL, 16);
2661 crc = crc32 (base, len, 0xffffffff);
2662 /* Check for memory failure. */
2663 if (crc == (unsigned long long) -1)
2664 {
2665 write_enn (own_buf);
2666 return;
2667 }
2668 sprintf (own_buf, "C%lx", (unsigned long) crc);
2669 return;
2670 }
2671
2672 if (handle_qxfer (own_buf, packet_len, new_packet_len_p))
2673 return;
2674
2675 if (target_supports_tracepoints () && handle_tracepoint_query (own_buf))
2676 return;
2677
2678 /* Otherwise we didn't know what packet it was. Say we didn't
2679 understand it. */
2680 own_buf[0] = 0;
2681 }
2682
2683 static void gdb_wants_all_threads_stopped (void);
2684 static void resume (struct thread_resume *actions, size_t n);
2685
2686 /* The callback that is passed to visit_actioned_threads. */
2687 typedef int (visit_actioned_threads_callback_ftype)
2688 (const struct thread_resume *, struct thread_info *);
2689
2690 /* Call CALLBACK for any thread to which ACTIONS applies to. Returns
2691 true if CALLBACK returns true. Returns false if no matching thread
2692 is found or CALLBACK results false.
2693 Note: This function is itself a callback for find_thread. */
2694
2695 static bool
2696 visit_actioned_threads (thread_info *thread,
2697 const struct thread_resume *actions,
2698 size_t num_actions,
2699 visit_actioned_threads_callback_ftype *callback)
2700 {
2701 for (size_t i = 0; i < num_actions; i++)
2702 {
2703 const struct thread_resume *action = &actions[i];
2704
2705 if (ptid_equal (action->thread, minus_one_ptid)
2706 || ptid_equal (action->thread, thread->id)
2707 || ((ptid_get_pid (action->thread)
2708 == thread->id.pid ())
2709 && ptid_get_lwp (action->thread) == -1))
2710 {
2711 if ((*callback) (action, thread))
2712 return true;
2713 }
2714 }
2715
2716 return false;
2717 }
2718
2719 /* Callback for visit_actioned_threads. If the thread has a pending
2720 status to report, report it now. */
2721
2722 static int
2723 handle_pending_status (const struct thread_resume *resumption,
2724 struct thread_info *thread)
2725 {
2726 if (thread->status_pending_p)
2727 {
2728 thread->status_pending_p = 0;
2729
2730 last_status = thread->last_status;
2731 last_ptid = thread->id;
2732 prepare_resume_reply (own_buf, last_ptid, &last_status);
2733 return 1;
2734 }
2735 return 0;
2736 }
2737
2738 /* Parse vCont packets. */
2739 static void
2740 handle_v_cont (char *own_buf)
2741 {
2742 const char *p;
2743 int n = 0, i = 0;
2744 struct thread_resume *resume_info;
2745 struct thread_resume default_action { null_ptid };
2746
2747 /* Count the number of semicolons in the packet. There should be one
2748 for every action. */
2749 p = &own_buf[5];
2750 while (p)
2751 {
2752 n++;
2753 p++;
2754 p = strchr (p, ';');
2755 }
2756
2757 resume_info = (struct thread_resume *) malloc (n * sizeof (resume_info[0]));
2758 if (resume_info == NULL)
2759 goto err;
2760
2761 p = &own_buf[5];
2762 while (*p)
2763 {
2764 p++;
2765
2766 memset (&resume_info[i], 0, sizeof resume_info[i]);
2767
2768 if (p[0] == 's' || p[0] == 'S')
2769 resume_info[i].kind = resume_step;
2770 else if (p[0] == 'r')
2771 resume_info[i].kind = resume_step;
2772 else if (p[0] == 'c' || p[0] == 'C')
2773 resume_info[i].kind = resume_continue;
2774 else if (p[0] == 't')
2775 resume_info[i].kind = resume_stop;
2776 else
2777 goto err;
2778
2779 if (p[0] == 'S' || p[0] == 'C')
2780 {
2781 char *q;
2782 int sig = strtol (p + 1, &q, 16);
2783 if (p == q)
2784 goto err;
2785 p = q;
2786
2787 if (!gdb_signal_to_host_p ((enum gdb_signal) sig))
2788 goto err;
2789 resume_info[i].sig = gdb_signal_to_host ((enum gdb_signal) sig);
2790 }
2791 else if (p[0] == 'r')
2792 {
2793 ULONGEST addr;
2794
2795 p = unpack_varlen_hex (p + 1, &addr);
2796 resume_info[i].step_range_start = addr;
2797
2798 if (*p != ',')
2799 goto err;
2800
2801 p = unpack_varlen_hex (p + 1, &addr);
2802 resume_info[i].step_range_end = addr;
2803 }
2804 else
2805 {
2806 p = p + 1;
2807 }
2808
2809 if (p[0] == 0)
2810 {
2811 resume_info[i].thread = minus_one_ptid;
2812 default_action = resume_info[i];
2813
2814 /* Note: we don't increment i here, we'll overwrite this entry
2815 the next time through. */
2816 }
2817 else if (p[0] == ':')
2818 {
2819 const char *q;
2820 ptid_t ptid = read_ptid (p + 1, &q);
2821
2822 if (p == q)
2823 goto err;
2824 p = q;
2825 if (p[0] != ';' && p[0] != 0)
2826 goto err;
2827
2828 resume_info[i].thread = ptid;
2829
2830 i++;
2831 }
2832 }
2833
2834 if (i < n)
2835 resume_info[i] = default_action;
2836
2837 resume (resume_info, n);
2838 free (resume_info);
2839 return;
2840
2841 err:
2842 write_enn (own_buf);
2843 free (resume_info);
2844 return;
2845 }
2846
2847 /* Resume target with ACTIONS, an array of NUM_ACTIONS elements. */
2848
2849 static void
2850 resume (struct thread_resume *actions, size_t num_actions)
2851 {
2852 if (!non_stop)
2853 {
2854 /* Check if among the threads that GDB wants actioned, there's
2855 one with a pending status to report. If so, skip actually
2856 resuming/stopping and report the pending event
2857 immediately. */
2858
2859 thread_info *thread_with_status = find_thread ([&] (thread_info *thread)
2860 {
2861 return visit_actioned_threads (thread, actions, num_actions,
2862 handle_pending_status);
2863 });
2864
2865 if (thread_with_status != NULL)
2866 return;
2867
2868 enable_async_io ();
2869 }
2870
2871 (*the_target->resume) (actions, num_actions);
2872
2873 if (non_stop)
2874 write_ok (own_buf);
2875 else
2876 {
2877 last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
2878
2879 if (last_status.kind == TARGET_WAITKIND_NO_RESUMED
2880 && !report_no_resumed)
2881 {
2882 /* The client does not support this stop reply. At least
2883 return error. */
2884 sprintf (own_buf, "E.No unwaited-for children left.");
2885 disable_async_io ();
2886 return;
2887 }
2888
2889 if (last_status.kind != TARGET_WAITKIND_EXITED
2890 && last_status.kind != TARGET_WAITKIND_SIGNALLED
2891 && last_status.kind != TARGET_WAITKIND_NO_RESUMED)
2892 current_thread->last_status = last_status;
2893
2894 /* From the client's perspective, all-stop mode always stops all
2895 threads implicitly (and the target backend has already done
2896 so by now). Tag all threads as "want-stopped", so we don't
2897 resume them implicitly without the client telling us to. */
2898 gdb_wants_all_threads_stopped ();
2899 prepare_resume_reply (own_buf, last_ptid, &last_status);
2900 disable_async_io ();
2901
2902 if (last_status.kind == TARGET_WAITKIND_EXITED
2903 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
2904 target_mourn_inferior (last_ptid);
2905 }
2906 }
2907
2908 /* Attach to a new program. Return 1 if successful, 0 if failure. */
2909 static int
2910 handle_v_attach (char *own_buf)
2911 {
2912 int pid;
2913
2914 pid = strtol (own_buf + 8, NULL, 16);
2915 if (pid != 0 && attach_inferior (pid) == 0)
2916 {
2917 /* Don't report shared library events after attaching, even if
2918 some libraries are preloaded. GDB will always poll the
2919 library list. Avoids the "stopped by shared library event"
2920 notice on the GDB side. */
2921 dlls_changed = 0;
2922
2923 if (non_stop)
2924 {
2925 /* In non-stop, we don't send a resume reply. Stop events
2926 will follow up using the normal notification
2927 mechanism. */
2928 write_ok (own_buf);
2929 }
2930 else
2931 prepare_resume_reply (own_buf, last_ptid, &last_status);
2932
2933 return 1;
2934 }
2935 else
2936 {
2937 write_enn (own_buf);
2938 return 0;
2939 }
2940 }
2941
2942 /* Run a new program. Return 1 if successful, 0 if failure. */
2943 static int
2944 handle_v_run (char *own_buf)
2945 {
2946 char *p, *next_p;
2947 std::vector<char *> new_argv;
2948 char *new_program_name = NULL;
2949 int i, new_argc;
2950
2951 new_argc = 0;
2952 for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
2953 {
2954 p++;
2955 new_argc++;
2956 }
2957
2958 for (i = 0, p = own_buf + strlen ("vRun;"); *p; p = next_p, ++i)
2959 {
2960 next_p = strchr (p, ';');
2961 if (next_p == NULL)
2962 next_p = p + strlen (p);
2963
2964 if (i == 0 && p == next_p)
2965 {
2966 /* No program specified. */
2967 new_program_name = NULL;
2968 }
2969 else if (p == next_p)
2970 {
2971 /* Empty argument. */
2972 new_argv.push_back (xstrdup ("''"));
2973 }
2974 else
2975 {
2976 size_t len = (next_p - p) / 2;
2977 /* ARG is the unquoted argument received via the RSP. */
2978 char *arg = (char *) xmalloc (len + 1);
2979 /* FULL_ARGS will contain the quoted version of ARG. */
2980 char *full_arg = (char *) xmalloc ((len + 1) * 2);
2981 /* These are pointers used to navigate the strings above. */
2982 char *tmp_arg = arg;
2983 char *tmp_full_arg = full_arg;
2984 int need_quote = 0;
2985
2986 hex2bin (p, (gdb_byte *) arg, len);
2987 arg[len] = '\0';
2988
2989 while (*tmp_arg != '\0')
2990 {
2991 switch (*tmp_arg)
2992 {
2993 case '\n':
2994 /* Quote \n. */
2995 *tmp_full_arg = '\'';
2996 ++tmp_full_arg;
2997 need_quote = 1;
2998 break;
2999
3000 case '\'':
3001 /* Quote single quote. */
3002 *tmp_full_arg = '\\';
3003 ++tmp_full_arg;
3004 break;
3005
3006 default:
3007 break;
3008 }
3009
3010 *tmp_full_arg = *tmp_arg;
3011 ++tmp_full_arg;
3012 ++tmp_arg;
3013 }
3014
3015 if (need_quote)
3016 *tmp_full_arg++ = '\'';
3017
3018 /* Finish FULL_ARG and push it into the vector containing
3019 the argv. */
3020 *tmp_full_arg = '\0';
3021 if (i == 0)
3022 new_program_name = full_arg;
3023 else
3024 new_argv.push_back (full_arg);
3025 xfree (arg);
3026 }
3027 if (*next_p)
3028 next_p++;
3029 }
3030 new_argv.push_back (NULL);
3031
3032 if (new_program_name == NULL)
3033 {
3034 /* GDB didn't specify a program to run. Use the program from the
3035 last run with the new argument list. */
3036 if (program_path.get () == NULL)
3037 {
3038 write_enn (own_buf);
3039 free_vector_argv (new_argv);
3040 return 0;
3041 }
3042 }
3043 else
3044 program_path.set (gdb::unique_xmalloc_ptr<char> (new_program_name));
3045
3046 /* Free the old argv and install the new one. */
3047 free_vector_argv (program_args);
3048 program_args = new_argv;
3049
3050 create_inferior (program_path.get (), program_args);
3051
3052 if (last_status.kind == TARGET_WAITKIND_STOPPED)
3053 {
3054 prepare_resume_reply (own_buf, last_ptid, &last_status);
3055
3056 /* In non-stop, sending a resume reply doesn't set the general
3057 thread, but GDB assumes a vRun sets it (this is so GDB can
3058 query which is the main thread of the new inferior. */
3059 if (non_stop)
3060 general_thread = last_ptid;
3061
3062 return 1;
3063 }
3064 else
3065 {
3066 write_enn (own_buf);
3067 return 0;
3068 }
3069 }
3070
3071 /* Kill process. Return 1 if successful, 0 if failure. */
3072 static int
3073 handle_v_kill (char *own_buf)
3074 {
3075 int pid;
3076 char *p = &own_buf[6];
3077 if (multi_process)
3078 pid = strtol (p, NULL, 16);
3079 else
3080 pid = signal_pid;
3081 if (pid != 0 && kill_inferior (pid) == 0)
3082 {
3083 last_status.kind = TARGET_WAITKIND_SIGNALLED;
3084 last_status.value.sig = GDB_SIGNAL_KILL;
3085 last_ptid = pid_to_ptid (pid);
3086 discard_queued_stop_replies (last_ptid);
3087 write_ok (own_buf);
3088 return 1;
3089 }
3090 else
3091 {
3092 write_enn (own_buf);
3093 return 0;
3094 }
3095 }
3096
3097 /* Handle all of the extended 'v' packets. */
3098 void
3099 handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
3100 {
3101 if (!disable_packet_vCont)
3102 {
3103 if (strcmp (own_buf, "vCtrlC") == 0)
3104 {
3105 (*the_target->request_interrupt) ();
3106 write_ok (own_buf);
3107 return;
3108 }
3109
3110 if (startswith (own_buf, "vCont;"))
3111 {
3112 handle_v_cont (own_buf);
3113 return;
3114 }
3115
3116 if (startswith (own_buf, "vCont?"))
3117 {
3118 strcpy (own_buf, "vCont;c;C;t");
3119
3120 if (target_supports_hardware_single_step ()
3121 || target_supports_software_single_step ()
3122 || !vCont_supported)
3123 {
3124 /* If target supports single step either by hardware or by
3125 software, add actions s and S to the list of supported
3126 actions. On the other hand, if GDB doesn't request the
3127 supported vCont actions in qSupported packet, add s and
3128 S to the list too. */
3129 own_buf = own_buf + strlen (own_buf);
3130 strcpy (own_buf, ";s;S");
3131 }
3132
3133 if (target_supports_range_stepping ())
3134 {
3135 own_buf = own_buf + strlen (own_buf);
3136 strcpy (own_buf, ";r");
3137 }
3138 return;
3139 }
3140 }
3141
3142 if (startswith (own_buf, "vFile:")
3143 && handle_vFile (own_buf, packet_len, new_packet_len))
3144 return;
3145
3146 if (startswith (own_buf, "vAttach;"))
3147 {
3148 if ((!extended_protocol || !multi_process) && target_running ())
3149 {
3150 fprintf (stderr, "Already debugging a process\n");
3151 write_enn (own_buf);
3152 return;
3153 }
3154 handle_v_attach (own_buf);
3155 return;
3156 }
3157
3158 if (startswith (own_buf, "vRun;"))
3159 {
3160 if ((!extended_protocol || !multi_process) && target_running ())
3161 {
3162 fprintf (stderr, "Already debugging a process\n");
3163 write_enn (own_buf);
3164 return;
3165 }
3166 handle_v_run (own_buf);
3167 return;
3168 }
3169
3170 if (startswith (own_buf, "vKill;"))
3171 {
3172 if (!target_running ())
3173 {
3174 fprintf (stderr, "No process to kill\n");
3175 write_enn (own_buf);
3176 return;
3177 }
3178 handle_v_kill (own_buf);
3179 return;
3180 }
3181
3182 if (handle_notif_ack (own_buf, packet_len))
3183 return;
3184
3185 /* Otherwise we didn't know what packet it was. Say we didn't
3186 understand it. */
3187 own_buf[0] = 0;
3188 return;
3189 }
3190
3191 /* Resume thread and wait for another event. In non-stop mode,
3192 don't really wait here, but return immediatelly to the event
3193 loop. */
3194 static void
3195 myresume (char *own_buf, int step, int sig)
3196 {
3197 struct thread_resume resume_info[2];
3198 int n = 0;
3199 int valid_cont_thread;
3200
3201 valid_cont_thread = (!ptid_equal (cont_thread, null_ptid)
3202 && !ptid_equal (cont_thread, minus_one_ptid));
3203
3204 if (step || sig || valid_cont_thread)
3205 {
3206 resume_info[0].thread = current_ptid;
3207 if (step)
3208 resume_info[0].kind = resume_step;
3209 else
3210 resume_info[0].kind = resume_continue;
3211 resume_info[0].sig = sig;
3212 n++;
3213 }
3214
3215 if (!valid_cont_thread)
3216 {
3217 resume_info[n].thread = minus_one_ptid;
3218 resume_info[n].kind = resume_continue;
3219 resume_info[n].sig = 0;
3220 n++;
3221 }
3222
3223 resume (resume_info, n);
3224 }
3225
3226 /* Callback for for_each_thread. Make a new stop reply for each
3227 stopped thread. */
3228
3229 static void
3230 queue_stop_reply_callback (thread_info *thread)
3231 {
3232 /* For now, assume targets that don't have this callback also don't
3233 manage the thread's last_status field. */
3234 if (the_target->thread_stopped == NULL)
3235 {
3236 struct vstop_notif *new_notif = XNEW (struct vstop_notif);
3237
3238 new_notif->ptid = thread->id;
3239 new_notif->status = thread->last_status;
3240 /* Pass the last stop reply back to GDB, but don't notify
3241 yet. */
3242 notif_event_enque (&notif_stop,
3243 (struct notif_event *) new_notif);
3244 }
3245 else
3246 {
3247 if (thread_stopped (thread))
3248 {
3249 if (debug_threads)
3250 {
3251 std::string status_string
3252 = target_waitstatus_to_string (&thread->last_status);
3253
3254 debug_printf ("Reporting thread %s as already stopped with %s\n",
3255 target_pid_to_str (thread->id),
3256 status_string.c_str ());
3257 }
3258
3259 gdb_assert (thread->last_status.kind != TARGET_WAITKIND_IGNORE);
3260
3261 /* Pass the last stop reply back to GDB, but don't notify
3262 yet. */
3263 queue_stop_reply (thread->id, &thread->last_status);
3264 }
3265 }
3266 }
3267
3268 /* Set this inferior threads's state as "want-stopped". We won't
3269 resume this thread until the client gives us another action for
3270 it. */
3271
3272 static void
3273 gdb_wants_thread_stopped (thread_info *thread)
3274 {
3275 thread->last_resume_kind = resume_stop;
3276
3277 if (thread->last_status.kind == TARGET_WAITKIND_IGNORE)
3278 {
3279 /* Most threads are stopped implicitly (all-stop); tag that with
3280 signal 0. */
3281 thread->last_status.kind = TARGET_WAITKIND_STOPPED;
3282 thread->last_status.value.sig = GDB_SIGNAL_0;
3283 }
3284 }
3285
3286 /* Set all threads' states as "want-stopped". */
3287
3288 static void
3289 gdb_wants_all_threads_stopped (void)
3290 {
3291 for_each_thread (gdb_wants_thread_stopped);
3292 }
3293
3294 /* Callback for for_each_thread. If the thread is stopped with an
3295 interesting event, mark it as having a pending event. */
3296
3297 static void
3298 set_pending_status_callback (thread_info *thread)
3299 {
3300 if (thread->last_status.kind != TARGET_WAITKIND_STOPPED
3301 || (thread->last_status.value.sig != GDB_SIGNAL_0
3302 /* A breakpoint, watchpoint or finished step from a previous
3303 GDB run isn't considered interesting for a new GDB run.
3304 If we left those pending, the new GDB could consider them
3305 random SIGTRAPs. This leaves out real async traps. We'd
3306 have to peek into the (target-specific) siginfo to
3307 distinguish those. */
3308 && thread->last_status.value.sig != GDB_SIGNAL_TRAP))
3309 thread->status_pending_p = 1;
3310 }
3311
3312 /* Status handler for the '?' packet. */
3313
3314 static void
3315 handle_status (char *own_buf)
3316 {
3317 /* GDB is connected, don't forward events to the target anymore. */
3318 for_each_process ([] (process_info *process) {
3319 process->gdb_detached = 0;
3320 });
3321
3322 /* In non-stop mode, we must send a stop reply for each stopped
3323 thread. In all-stop mode, just send one for the first stopped
3324 thread we find. */
3325
3326 if (non_stop)
3327 {
3328 for_each_thread (queue_stop_reply_callback);
3329
3330 /* The first is sent immediatly. OK is sent if there is no
3331 stopped thread, which is the same handling of the vStopped
3332 packet (by design). */
3333 notif_write_event (&notif_stop, own_buf);
3334 }
3335 else
3336 {
3337 thread_info *thread = NULL;
3338
3339 pause_all (0);
3340 stabilize_threads ();
3341 gdb_wants_all_threads_stopped ();
3342
3343 /* We can only report one status, but we might be coming out of
3344 non-stop -- if more than one thread is stopped with
3345 interesting events, leave events for the threads we're not
3346 reporting now pending. They'll be reported the next time the
3347 threads are resumed. Start by marking all interesting events
3348 as pending. */
3349 for_each_thread (set_pending_status_callback);
3350
3351 /* Prefer the last thread that reported an event to GDB (even if
3352 that was a GDB_SIGNAL_TRAP). */
3353 if (last_status.kind != TARGET_WAITKIND_IGNORE
3354 && last_status.kind != TARGET_WAITKIND_EXITED
3355 && last_status.kind != TARGET_WAITKIND_SIGNALLED)
3356 thread = find_thread_ptid (last_ptid);
3357
3358 /* If the last event thread is not found for some reason, look
3359 for some other thread that might have an event to report. */
3360 if (thread == NULL)
3361 thread = find_thread ([] (thread_info *thread)
3362 {
3363 return thread->status_pending_p;
3364 });
3365
3366 /* If we're still out of luck, simply pick the first thread in
3367 the thread list. */
3368 if (thread == NULL)
3369 thread = get_first_thread ();
3370
3371 if (thread != NULL)
3372 {
3373 struct thread_info *tp = (struct thread_info *) thread;
3374
3375 /* We're reporting this event, so it's no longer
3376 pending. */
3377 tp->status_pending_p = 0;
3378
3379 /* GDB assumes the current thread is the thread we're
3380 reporting the status for. */
3381 general_thread = thread->id;
3382 set_desired_thread ();
3383
3384 gdb_assert (tp->last_status.kind != TARGET_WAITKIND_IGNORE);
3385 prepare_resume_reply (own_buf, tp->id, &tp->last_status);
3386 }
3387 else
3388 strcpy (own_buf, "W00");
3389 }
3390 }
3391
3392 static void
3393 gdbserver_version (void)
3394 {
3395 printf ("GNU gdbserver %s%s\n"
3396 "Copyright (C) 2018 Free Software Foundation, Inc.\n"
3397 "gdbserver is free software, covered by the "
3398 "GNU General Public License.\n"
3399 "This gdbserver was configured as \"%s\"\n",
3400 PKGVERSION, version, host_name);
3401 }
3402
3403 static void
3404 gdbserver_usage (FILE *stream)
3405 {
3406 fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
3407 "\tgdbserver [OPTIONS] --attach COMM PID\n"
3408 "\tgdbserver [OPTIONS] --multi COMM\n"
3409 "\n"
3410 "COMM may either be a tty device (for serial debugging),\n"
3411 "HOST:PORT to listen for a TCP connection, or '-' or 'stdio' to use \n"
3412 "stdin/stdout of gdbserver.\n"
3413 "PROG is the executable program. ARGS are arguments passed to inferior.\n"
3414 "PID is the process ID to attach to, when --attach is specified.\n"
3415 "\n"
3416 "Operating modes:\n"
3417 "\n"
3418 " --attach Attach to running process PID.\n"
3419 " --multi Start server without a specific program, and\n"
3420 " only quit when explicitly commanded.\n"
3421 " --once Exit after the first connection has closed.\n"
3422 " --help Print this message and then exit.\n"
3423 " --version Display version information and exit.\n"
3424 "\n"
3425 "Other options:\n"
3426 "\n"
3427 " --wrapper WRAPPER -- Run WRAPPER to start new programs.\n"
3428 " --disable-randomization\n"
3429 " Run PROG with address space randomization disabled.\n"
3430 " --no-disable-randomization\n"
3431 " Don't disable address space randomization when\n"
3432 " starting PROG.\n"
3433 " --startup-with-shell\n"
3434 " Start PROG using a shell. I.e., execs a shell that\n"
3435 " then execs PROG. (default)\n"
3436 " --no-startup-with-shell\n"
3437 " Exec PROG directly instead of using a shell.\n"
3438 " Disables argument globbing and variable substitution\n"
3439 " on UNIX-like systems.\n"
3440 "\n"
3441 "Debug options:\n"
3442 "\n"
3443 " --debug Enable general debugging output.\n"
3444 " --debug-format=opt1[,opt2,...]\n"
3445 " Specify extra content in debugging output.\n"
3446 " Options:\n"
3447 " all\n"
3448 " none\n"
3449 " timestamp\n"
3450 " --remote-debug Enable remote protocol debugging output.\n"
3451 " --disable-packet=opt1[,opt2,...]\n"
3452 " Disable support for RSP packets or features.\n"
3453 " Options:\n"
3454 " vCont, Tthread, qC, qfThreadInfo and \n"
3455 " threads (disable all threading packets).\n"
3456 "\n"
3457 "For more information, consult the GDB manual (available as on-line \n"
3458 "info or a printed manual).\n");
3459 if (REPORT_BUGS_TO[0] && stream == stdout)
3460 fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
3461 }
3462
3463 static void
3464 gdbserver_show_disableable (FILE *stream)
3465 {
3466 fprintf (stream, "Disableable packets:\n"
3467 " vCont \tAll vCont packets\n"
3468 " qC \tQuerying the current thread\n"
3469 " qfThreadInfo\tThread listing\n"
3470 " Tthread \tPassing the thread specifier in the "
3471 "T stop reply packet\n"
3472 " threads \tAll of the above\n");
3473 }
3474
3475 static void
3476 kill_inferior_callback (process_info *process)
3477 {
3478 int pid = process->pid;
3479
3480 kill_inferior (pid);
3481 discard_queued_stop_replies (pid_to_ptid (pid));
3482 }
3483
3484 /* Call this when exiting gdbserver with possible inferiors that need
3485 to be killed or detached from. */
3486
3487 static void
3488 detach_or_kill_for_exit (void)
3489 {
3490 /* First print a list of the inferiors we will be killing/detaching.
3491 This is to assist the user, for example, in case the inferior unexpectedly
3492 dies after we exit: did we screw up or did the inferior exit on its own?
3493 Having this info will save some head-scratching. */
3494
3495 if (have_started_inferiors_p ())
3496 {
3497 fprintf (stderr, "Killing process(es):");
3498
3499 for_each_process ([] (process_info *process) {
3500 if (!process->attached)
3501 fprintf (stderr, " %d", process->pid);
3502 });
3503
3504 fprintf (stderr, "\n");
3505 }
3506 if (have_attached_inferiors_p ())
3507 {
3508 fprintf (stderr, "Detaching process(es):");
3509
3510 for_each_process ([] (process_info *process) {
3511 if (process->attached)
3512 fprintf (stderr, " %d", process->pid);
3513 });
3514
3515 fprintf (stderr, "\n");
3516 }
3517
3518 /* Now we can kill or detach the inferiors. */
3519 for_each_process ([] (process_info *process) {
3520 int pid = process->pid;
3521
3522 if (process->attached)
3523 detach_inferior (pid);
3524 else
3525 kill_inferior (pid);
3526
3527 discard_queued_stop_replies (pid_to_ptid (pid));
3528 });
3529 }
3530
3531 /* Value that will be passed to exit(3) when gdbserver exits. */
3532 static int exit_code;
3533
3534 /* Cleanup version of detach_or_kill_for_exit. */
3535
3536 static void
3537 detach_or_kill_for_exit_cleanup (void *ignore)
3538 {
3539
3540 TRY
3541 {
3542 detach_or_kill_for_exit ();
3543 }
3544
3545 CATCH (exception, RETURN_MASK_ALL)
3546 {
3547 fflush (stdout);
3548 fprintf (stderr, "Detach or kill failed: %s\n", exception.message);
3549 exit_code = 1;
3550 }
3551 END_CATCH
3552 }
3553
3554 /* Main function. This is called by the real "main" function,
3555 wrapped in a TRY_CATCH that handles any uncaught exceptions. */
3556
3557 static void ATTRIBUTE_NORETURN
3558 captured_main (int argc, char *argv[])
3559 {
3560 int bad_attach;
3561 int pid;
3562 char *arg_end;
3563 const char *port = NULL;
3564 char **next_arg = &argv[1];
3565 volatile int multi_mode = 0;
3566 volatile int attach = 0;
3567 int was_running;
3568 bool selftest = false;
3569 #if GDB_SELF_TEST
3570 const char *selftest_filter = NULL;
3571 #endif
3572
3573 current_directory = getcwd (NULL, 0);
3574 if (current_directory == NULL)
3575 {
3576 error (_("%s: error finding working directory"),
3577 safe_strerror (errno));
3578 }
3579
3580 while (*next_arg != NULL && **next_arg == '-')
3581 {
3582 if (strcmp (*next_arg, "--version") == 0)
3583 {
3584 gdbserver_version ();
3585 exit (0);
3586 }
3587 else if (strcmp (*next_arg, "--help") == 0)
3588 {
3589 gdbserver_usage (stdout);
3590 exit (0);
3591 }
3592 else if (strcmp (*next_arg, "--attach") == 0)
3593 attach = 1;
3594 else if (strcmp (*next_arg, "--multi") == 0)
3595 multi_mode = 1;
3596 else if (strcmp (*next_arg, "--wrapper") == 0)
3597 {
3598 char **tmp;
3599
3600 next_arg++;
3601
3602 tmp = next_arg;
3603 while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
3604 {
3605 wrapper_argv += *next_arg;
3606 wrapper_argv += ' ';
3607 next_arg++;
3608 }
3609
3610 if (!wrapper_argv.empty ())
3611 {
3612 /* Erase the last whitespace. */
3613 wrapper_argv.erase (wrapper_argv.end () - 1);
3614 }
3615
3616 if (next_arg == tmp || *next_arg == NULL)
3617 {
3618 gdbserver_usage (stderr);
3619 exit (1);
3620 }
3621
3622 /* Consume the "--". */
3623 *next_arg = NULL;
3624 }
3625 else if (strcmp (*next_arg, "--debug") == 0)
3626 debug_threads = 1;
3627 else if (startswith (*next_arg, "--debug-format="))
3628 {
3629 std::string error_msg
3630 = parse_debug_format_options ((*next_arg)
3631 + sizeof ("--debug-format=") - 1, 0);
3632
3633 if (!error_msg.empty ())
3634 {
3635 fprintf (stderr, "%s", error_msg.c_str ());
3636 exit (1);
3637 }
3638 }
3639 else if (strcmp (*next_arg, "--remote-debug") == 0)
3640 remote_debug = 1;
3641 else if (strcmp (*next_arg, "--disable-packet") == 0)
3642 {
3643 gdbserver_show_disableable (stdout);
3644 exit (0);
3645 }
3646 else if (startswith (*next_arg, "--disable-packet="))
3647 {
3648 char *packets, *tok;
3649
3650 packets = *next_arg += sizeof ("--disable-packet=") - 1;
3651 for (tok = strtok (packets, ",");
3652 tok != NULL;
3653 tok = strtok (NULL, ","))
3654 {
3655 if (strcmp ("vCont", tok) == 0)
3656 disable_packet_vCont = 1;
3657 else if (strcmp ("Tthread", tok) == 0)
3658 disable_packet_Tthread = 1;
3659 else if (strcmp ("qC", tok) == 0)
3660 disable_packet_qC = 1;
3661 else if (strcmp ("qfThreadInfo", tok) == 0)
3662 disable_packet_qfThreadInfo = 1;
3663 else if (strcmp ("threads", tok) == 0)
3664 {
3665 disable_packet_vCont = 1;
3666 disable_packet_Tthread = 1;
3667 disable_packet_qC = 1;
3668 disable_packet_qfThreadInfo = 1;
3669 }
3670 else
3671 {
3672 fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
3673 tok);
3674 gdbserver_show_disableable (stderr);
3675 exit (1);
3676 }
3677 }
3678 }
3679 else if (strcmp (*next_arg, "-") == 0)
3680 {
3681 /* "-" specifies a stdio connection and is a form of port
3682 specification. */
3683 port = STDIO_CONNECTION_NAME;
3684 next_arg++;
3685 break;
3686 }
3687 else if (strcmp (*next_arg, "--disable-randomization") == 0)
3688 disable_randomization = 1;
3689 else if (strcmp (*next_arg, "--no-disable-randomization") == 0)
3690 disable_randomization = 0;
3691 else if (strcmp (*next_arg, "--startup-with-shell") == 0)
3692 startup_with_shell = true;
3693 else if (strcmp (*next_arg, "--no-startup-with-shell") == 0)
3694 startup_with_shell = false;
3695 else if (strcmp (*next_arg, "--once") == 0)
3696 run_once = 1;
3697 else if (strcmp (*next_arg, "--selftest") == 0)
3698 selftest = true;
3699 else if (startswith (*next_arg, "--selftest="))
3700 {
3701 selftest = true;
3702 #if GDB_SELF_TEST
3703 selftest_filter = *next_arg + strlen ("--selftest=");
3704 #endif
3705 }
3706 else
3707 {
3708 fprintf (stderr, "Unknown argument: %s\n", *next_arg);
3709 exit (1);
3710 }
3711
3712 next_arg++;
3713 continue;
3714 }
3715
3716 if (port == NULL)
3717 {
3718 port = *next_arg;
3719 next_arg++;
3720 }
3721 if ((port == NULL || (!attach && !multi_mode && *next_arg == NULL))
3722 && !selftest)
3723 {
3724 gdbserver_usage (stderr);
3725 exit (1);
3726 }
3727
3728 /* Remember stdio descriptors. LISTEN_DESC must not be listed, it will be
3729 opened by remote_prepare. */
3730 notice_open_fds ();
3731
3732 save_original_signals_state (false);
3733
3734 /* We need to know whether the remote connection is stdio before
3735 starting the inferior. Inferiors created in this scenario have
3736 stdin,stdout redirected. So do this here before we call
3737 start_inferior. */
3738 if (port != NULL)
3739 remote_prepare (port);
3740
3741 bad_attach = 0;
3742 pid = 0;
3743
3744 /* --attach used to come after PORT, so allow it there for
3745 compatibility. */
3746 if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
3747 {
3748 attach = 1;
3749 next_arg++;
3750 }
3751
3752 if (attach
3753 && (*next_arg == NULL
3754 || (*next_arg)[0] == '\0'
3755 || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
3756 || *arg_end != '\0'
3757 || next_arg[1] != NULL))
3758 bad_attach = 1;
3759
3760 if (bad_attach)
3761 {
3762 gdbserver_usage (stderr);
3763 exit (1);
3764 }
3765
3766 /* Gather information about the environment. */
3767 our_environ = gdb_environ::from_host_environ ();
3768
3769 initialize_async_io ();
3770 initialize_low ();
3771 have_job_control ();
3772 initialize_event_loop ();
3773 if (target_supports_tracepoints ())
3774 initialize_tracepoint ();
3775 initialize_notif ();
3776
3777 own_buf = (char *) xmalloc (PBUFSIZ + 1);
3778 mem_buf = (unsigned char *) xmalloc (PBUFSIZ);
3779
3780 if (selftest)
3781 {
3782 #if GDB_SELF_TEST
3783 selftests::run_tests (selftest_filter);
3784 #else
3785 printf (_("Selftests are not available in a non-development build.\n"));
3786 #endif
3787 throw_quit ("Quit");
3788 }
3789
3790 if (pid == 0 && *next_arg != NULL)
3791 {
3792 int i, n;
3793
3794 n = argc - (next_arg - argv);
3795 program_path.set (gdb::unique_xmalloc_ptr<char> (xstrdup (next_arg[0])));
3796 for (i = 1; i < n; i++)
3797 program_args.push_back (xstrdup (next_arg[i]));
3798 program_args.push_back (NULL);
3799
3800 /* Wait till we are at first instruction in program. */
3801 create_inferior (program_path.get (), program_args);
3802
3803 /* We are now (hopefully) stopped at the first instruction of
3804 the target process. This assumes that the target process was
3805 successfully created. */
3806 }
3807 else if (pid != 0)
3808 {
3809 if (attach_inferior (pid) == -1)
3810 error ("Attaching not supported on this target");
3811
3812 /* Otherwise succeeded. */
3813 }
3814 else
3815 {
3816 last_status.kind = TARGET_WAITKIND_EXITED;
3817 last_status.value.integer = 0;
3818 last_ptid = minus_one_ptid;
3819 }
3820 make_cleanup (detach_or_kill_for_exit_cleanup, NULL);
3821
3822 /* Don't report shared library events on the initial connection,
3823 even if some libraries are preloaded. Avoids the "stopped by
3824 shared library event" notice on gdb side. */
3825 dlls_changed = 0;
3826
3827 if (last_status.kind == TARGET_WAITKIND_EXITED
3828 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
3829 was_running = 0;
3830 else
3831 was_running = 1;
3832
3833 if (!was_running && !multi_mode)
3834 error ("No program to debug");
3835
3836 while (1)
3837 {
3838
3839 noack_mode = 0;
3840 multi_process = 0;
3841 report_fork_events = 0;
3842 report_vfork_events = 0;
3843 report_exec_events = 0;
3844 /* Be sure we're out of tfind mode. */
3845 current_traceframe = -1;
3846 cont_thread = null_ptid;
3847 swbreak_feature = 0;
3848 hwbreak_feature = 0;
3849 vCont_supported = 0;
3850
3851 remote_open (port);
3852
3853 TRY
3854 {
3855 /* Wait for events. This will return when all event sources
3856 are removed from the event loop. */
3857 start_event_loop ();
3858
3859 /* If an exit was requested (using the "monitor exit"
3860 command), terminate now. */
3861 if (exit_requested)
3862 throw_quit ("Quit");
3863
3864 /* The only other way to get here is for getpkt to fail:
3865
3866 - If --once was specified, we're done.
3867
3868 - If not in extended-remote mode, and we're no longer
3869 debugging anything, simply exit: GDB has disconnected
3870 after processing the last process exit.
3871
3872 - Otherwise, close the connection and reopen it at the
3873 top of the loop. */
3874 if (run_once || (!extended_protocol && !target_running ()))
3875 throw_quit ("Quit");
3876
3877 fprintf (stderr,
3878 "Remote side has terminated connection. "
3879 "GDBserver will reopen the connection.\n");
3880
3881 /* Get rid of any pending statuses. An eventual reconnection
3882 (by the same GDB instance or another) will refresh all its
3883 state from scratch. */
3884 discard_queued_stop_replies (minus_one_ptid);
3885 for_each_thread ([] (thread_info *thread)
3886 {
3887 thread->status_pending_p = 0;
3888 });
3889
3890 if (tracing)
3891 {
3892 if (disconnected_tracing)
3893 {
3894 /* Try to enable non-stop/async mode, so we we can
3895 both wait for an async socket accept, and handle
3896 async target events simultaneously. There's also
3897 no point either in having the target always stop
3898 all threads, when we're going to pass signals
3899 down without informing GDB. */
3900 if (!non_stop)
3901 {
3902 if (start_non_stop (1))
3903 non_stop = 1;
3904
3905 /* Detaching implicitly resumes all threads;
3906 simply disconnecting does not. */
3907 }
3908 }
3909 else
3910 {
3911 fprintf (stderr,
3912 "Disconnected tracing disabled; "
3913 "stopping trace run.\n");
3914 stop_tracing ();
3915 }
3916 }
3917 }
3918 CATCH (exception, RETURN_MASK_ERROR)
3919 {
3920 fflush (stdout);
3921 fprintf (stderr, "gdbserver: %s\n", exception.message);
3922
3923 if (response_needed)
3924 {
3925 write_enn (own_buf);
3926 putpkt (own_buf);
3927 }
3928
3929 if (run_once)
3930 throw_quit ("Quit");
3931 }
3932 END_CATCH
3933 }
3934 }
3935
3936 /* Main function. */
3937
3938 int
3939 main (int argc, char *argv[])
3940 {
3941
3942 TRY
3943 {
3944 captured_main (argc, argv);
3945 }
3946 CATCH (exception, RETURN_MASK_ALL)
3947 {
3948 if (exception.reason == RETURN_ERROR)
3949 {
3950 fflush (stdout);
3951 fprintf (stderr, "%s\n", exception.message);
3952 fprintf (stderr, "Exiting\n");
3953 exit_code = 1;
3954 }
3955
3956 exit (exit_code);
3957 }
3958 END_CATCH
3959
3960 gdb_assert_not_reached ("captured_main should never return");
3961 }
3962
3963 /* Process options coming from Z packets for a breakpoint. PACKET is
3964 the packet buffer. *PACKET is updated to point to the first char
3965 after the last processed option. */
3966
3967 static void
3968 process_point_options (struct gdb_breakpoint *bp, const char **packet)
3969 {
3970 const char *dataptr = *packet;
3971 int persist;
3972
3973 /* Check if data has the correct format. */
3974 if (*dataptr != ';')
3975 return;
3976
3977 dataptr++;
3978
3979 while (*dataptr)
3980 {
3981 if (*dataptr == ';')
3982 ++dataptr;
3983
3984 if (*dataptr == 'X')
3985 {
3986 /* Conditional expression. */
3987 if (debug_threads)
3988 debug_printf ("Found breakpoint condition.\n");
3989 if (!add_breakpoint_condition (bp, &dataptr))
3990 dataptr = strchrnul (dataptr, ';');
3991 }
3992 else if (startswith (dataptr, "cmds:"))
3993 {
3994 dataptr += strlen ("cmds:");
3995 if (debug_threads)
3996 debug_printf ("Found breakpoint commands %s.\n", dataptr);
3997 persist = (*dataptr == '1');
3998 dataptr += 2;
3999 if (add_breakpoint_commands (bp, &dataptr, persist))
4000 dataptr = strchrnul (dataptr, ';');
4001 }
4002 else
4003 {
4004 fprintf (stderr, "Unknown token %c, ignoring.\n",
4005 *dataptr);
4006 /* Skip tokens until we find one that we recognize. */
4007 dataptr = strchrnul (dataptr, ';');
4008 }
4009 }
4010 *packet = dataptr;
4011 }
4012
4013 /* Event loop callback that handles a serial event. The first byte in
4014 the serial buffer gets us here. We expect characters to arrive at
4015 a brisk pace, so we read the rest of the packet with a blocking
4016 getpkt call. */
4017
4018 static int
4019 process_serial_event (void)
4020 {
4021 int signal;
4022 unsigned int len;
4023 int res;
4024 CORE_ADDR mem_addr;
4025 unsigned char sig;
4026 int packet_len;
4027 int new_packet_len = -1;
4028
4029 disable_async_io ();
4030
4031 response_needed = 0;
4032 packet_len = getpkt (own_buf);
4033 if (packet_len <= 0)
4034 {
4035 remote_close ();
4036 /* Force an event loop break. */
4037 return -1;
4038 }
4039 response_needed = 1;
4040
4041 char ch = own_buf[0];
4042 switch (ch)
4043 {
4044 case 'q':
4045 handle_query (own_buf, packet_len, &new_packet_len);
4046 break;
4047 case 'Q':
4048 handle_general_set (own_buf);
4049 break;
4050 case 'D':
4051 handle_detach (own_buf);
4052 break;
4053 case '!':
4054 extended_protocol = 1;
4055 write_ok (own_buf);
4056 break;
4057 case '?':
4058 handle_status (own_buf);
4059 break;
4060 case 'H':
4061 if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
4062 {
4063 require_running_or_break (own_buf);
4064
4065 ptid_t thread_id = read_ptid (&own_buf[2], NULL);
4066
4067 if (thread_id == null_ptid || thread_id == minus_one_ptid)
4068 thread_id = null_ptid;
4069 else if (thread_id.is_pid ())
4070 {
4071 /* The ptid represents a pid. */
4072 thread_info *thread = find_any_thread_of_pid (thread_id.pid ());
4073
4074 if (thread == NULL)
4075 {
4076 write_enn (own_buf);
4077 break;
4078 }
4079
4080 thread_id = thread->id;
4081 }
4082 else
4083 {
4084 /* The ptid represents a lwp/tid. */
4085 if (find_thread_ptid (thread_id) == NULL)
4086 {
4087 write_enn (own_buf);
4088 break;
4089 }
4090 }
4091
4092 if (own_buf[1] == 'g')
4093 {
4094 if (ptid_equal (thread_id, null_ptid))
4095 {
4096 /* GDB is telling us to choose any thread. Check if
4097 the currently selected thread is still valid. If
4098 it is not, select the first available. */
4099 thread_info *thread = find_thread_ptid (general_thread);
4100 if (thread == NULL)
4101 thread = get_first_thread ();
4102 thread_id = thread->id;
4103 }
4104
4105 general_thread = thread_id;
4106 set_desired_thread ();
4107 gdb_assert (current_thread != NULL);
4108 }
4109 else if (own_buf[1] == 'c')
4110 cont_thread = thread_id;
4111
4112 write_ok (own_buf);
4113 }
4114 else
4115 {
4116 /* Silently ignore it so that gdb can extend the protocol
4117 without compatibility headaches. */
4118 own_buf[0] = '\0';
4119 }
4120 break;
4121 case 'g':
4122 require_running_or_break (own_buf);
4123 if (current_traceframe >= 0)
4124 {
4125 struct regcache *regcache
4126 = new_register_cache (current_target_desc ());
4127
4128 if (fetch_traceframe_registers (current_traceframe,
4129 regcache, -1) == 0)
4130 registers_to_string (regcache, own_buf);
4131 else
4132 write_enn (own_buf);
4133 free_register_cache (regcache);
4134 }
4135 else
4136 {
4137 struct regcache *regcache;
4138
4139 if (!set_desired_thread ())
4140 write_enn (own_buf);
4141 else
4142 {
4143 regcache = get_thread_regcache (current_thread, 1);
4144 registers_to_string (regcache, own_buf);
4145 }
4146 }
4147 break;
4148 case 'G':
4149 require_running_or_break (own_buf);
4150 if (current_traceframe >= 0)
4151 write_enn (own_buf);
4152 else
4153 {
4154 struct regcache *regcache;
4155
4156 if (!set_desired_thread ())
4157 write_enn (own_buf);
4158 else
4159 {
4160 regcache = get_thread_regcache (current_thread, 1);
4161 registers_from_string (regcache, &own_buf[1]);
4162 write_ok (own_buf);
4163 }
4164 }
4165 break;
4166 case 'm':
4167 require_running_or_break (own_buf);
4168 decode_m_packet (&own_buf[1], &mem_addr, &len);
4169 res = gdb_read_memory (mem_addr, mem_buf, len);
4170 if (res < 0)
4171 write_enn (own_buf);
4172 else
4173 bin2hex (mem_buf, own_buf, res);
4174 break;
4175 case 'M':
4176 require_running_or_break (own_buf);
4177 decode_M_packet (&own_buf[1], &mem_addr, &len, &mem_buf);
4178 if (gdb_write_memory (mem_addr, mem_buf, len) == 0)
4179 write_ok (own_buf);
4180 else
4181 write_enn (own_buf);
4182 break;
4183 case 'X':
4184 require_running_or_break (own_buf);
4185 if (decode_X_packet (&own_buf[1], packet_len - 1,
4186 &mem_addr, &len, &mem_buf) < 0
4187 || gdb_write_memory (mem_addr, mem_buf, len) != 0)
4188 write_enn (own_buf);
4189 else
4190 write_ok (own_buf);
4191 break;
4192 case 'C':
4193 require_running_or_break (own_buf);
4194 hex2bin (own_buf + 1, &sig, 1);
4195 if (gdb_signal_to_host_p ((enum gdb_signal) sig))
4196 signal = gdb_signal_to_host ((enum gdb_signal) sig);
4197 else
4198 signal = 0;
4199 myresume (own_buf, 0, signal);
4200 break;
4201 case 'S':
4202 require_running_or_break (own_buf);
4203 hex2bin (own_buf + 1, &sig, 1);
4204 if (gdb_signal_to_host_p ((enum gdb_signal) sig))
4205 signal = gdb_signal_to_host ((enum gdb_signal) sig);
4206 else
4207 signal = 0;
4208 myresume (own_buf, 1, signal);
4209 break;
4210 case 'c':
4211 require_running_or_break (own_buf);
4212 signal = 0;
4213 myresume (own_buf, 0, signal);
4214 break;
4215 case 's':
4216 require_running_or_break (own_buf);
4217 signal = 0;
4218 myresume (own_buf, 1, signal);
4219 break;
4220 case 'Z': /* insert_ ... */
4221 /* Fallthrough. */
4222 case 'z': /* remove_ ... */
4223 {
4224 char *dataptr;
4225 ULONGEST addr;
4226 int kind;
4227 char type = own_buf[1];
4228 int res;
4229 const int insert = ch == 'Z';
4230 const char *p = &own_buf[3];
4231
4232 p = unpack_varlen_hex (p, &addr);
4233 kind = strtol (p + 1, &dataptr, 16);
4234
4235 if (insert)
4236 {
4237 struct gdb_breakpoint *bp;
4238
4239 bp = set_gdb_breakpoint (type, addr, kind, &res);
4240 if (bp != NULL)
4241 {
4242 res = 0;
4243
4244 /* GDB may have sent us a list of *point parameters to
4245 be evaluated on the target's side. Read such list
4246 here. If we already have a list of parameters, GDB
4247 is telling us to drop that list and use this one
4248 instead. */
4249 clear_breakpoint_conditions_and_commands (bp);
4250 const char *options = dataptr;
4251 process_point_options (bp, &options);
4252 }
4253 }
4254 else
4255 res = delete_gdb_breakpoint (type, addr, kind);
4256
4257 if (res == 0)
4258 write_ok (own_buf);
4259 else if (res == 1)
4260 /* Unsupported. */
4261 own_buf[0] = '\0';
4262 else
4263 write_enn (own_buf);
4264 break;
4265 }
4266 case 'k':
4267 response_needed = 0;
4268 if (!target_running ())
4269 /* The packet we received doesn't make sense - but we can't
4270 reply to it, either. */
4271 return 0;
4272
4273 fprintf (stderr, "Killing all inferiors\n");
4274
4275 for_each_process (kill_inferior_callback);
4276
4277 /* When using the extended protocol, we wait with no program
4278 running. The traditional protocol will exit instead. */
4279 if (extended_protocol)
4280 {
4281 last_status.kind = TARGET_WAITKIND_EXITED;
4282 last_status.value.sig = GDB_SIGNAL_KILL;
4283 return 0;
4284 }
4285 else
4286 exit (0);
4287
4288 case 'T':
4289 {
4290 require_running_or_break (own_buf);
4291
4292 ptid_t thread_id = read_ptid (&own_buf[1], NULL);
4293 if (find_thread_ptid (thread_id) == NULL)
4294 {
4295 write_enn (own_buf);
4296 break;
4297 }
4298
4299 if (mythread_alive (thread_id))
4300 write_ok (own_buf);
4301 else
4302 write_enn (own_buf);
4303 }
4304 break;
4305 case 'R':
4306 response_needed = 0;
4307
4308 /* Restarting the inferior is only supported in the extended
4309 protocol. */
4310 if (extended_protocol)
4311 {
4312 if (target_running ())
4313 for_each_process (kill_inferior_callback);
4314
4315 fprintf (stderr, "GDBserver restarting\n");
4316
4317 /* Wait till we are at 1st instruction in prog. */
4318 if (program_path.get () != NULL)
4319 {
4320 create_inferior (program_path.get (), program_args);
4321
4322 if (last_status.kind == TARGET_WAITKIND_STOPPED)
4323 {
4324 /* Stopped at the first instruction of the target
4325 process. */
4326 general_thread = last_ptid;
4327 }
4328 else
4329 {
4330 /* Something went wrong. */
4331 general_thread = null_ptid;
4332 }
4333 }
4334 else
4335 {
4336 last_status.kind = TARGET_WAITKIND_EXITED;
4337 last_status.value.sig = GDB_SIGNAL_KILL;
4338 }
4339 return 0;
4340 }
4341 else
4342 {
4343 /* It is a request we don't understand. Respond with an
4344 empty packet so that gdb knows that we don't support this
4345 request. */
4346 own_buf[0] = '\0';
4347 break;
4348 }
4349 case 'v':
4350 /* Extended (long) request. */
4351 handle_v_requests (own_buf, packet_len, &new_packet_len);
4352 break;
4353
4354 default:
4355 /* It is a request we don't understand. Respond with an empty
4356 packet so that gdb knows that we don't support this
4357 request. */
4358 own_buf[0] = '\0';
4359 break;
4360 }
4361
4362 if (new_packet_len != -1)
4363 putpkt_binary (own_buf, new_packet_len);
4364 else
4365 putpkt (own_buf);
4366
4367 response_needed = 0;
4368
4369 if (exit_requested)
4370 return -1;
4371
4372 return 0;
4373 }
4374
4375 /* Event-loop callback for serial events. */
4376
4377 int
4378 handle_serial_event (int err, gdb_client_data client_data)
4379 {
4380 if (debug_threads)
4381 debug_printf ("handling possible serial event\n");
4382
4383 /* Really handle it. */
4384 if (process_serial_event () < 0)
4385 return -1;
4386
4387 /* Be sure to not change the selected thread behind GDB's back.
4388 Important in the non-stop mode asynchronous protocol. */
4389 set_desired_thread ();
4390
4391 return 0;
4392 }
4393
4394 /* Push a stop notification on the notification queue. */
4395
4396 static void
4397 push_stop_notification (ptid_t ptid, struct target_waitstatus *status)
4398 {
4399 struct vstop_notif *vstop_notif = XNEW (struct vstop_notif);
4400
4401 vstop_notif->status = *status;
4402 vstop_notif->ptid = ptid;
4403 /* Push Stop notification. */
4404 notif_push (&notif_stop, (struct notif_event *) vstop_notif);
4405 }
4406
4407 /* Event-loop callback for target events. */
4408
4409 int
4410 handle_target_event (int err, gdb_client_data client_data)
4411 {
4412 if (debug_threads)
4413 debug_printf ("handling possible target event\n");
4414
4415 last_ptid = mywait (minus_one_ptid, &last_status,
4416 TARGET_WNOHANG, 1);
4417
4418 if (last_status.kind == TARGET_WAITKIND_NO_RESUMED)
4419 {
4420 if (gdb_connected () && report_no_resumed)
4421 push_stop_notification (null_ptid, &last_status);
4422 }
4423 else if (last_status.kind != TARGET_WAITKIND_IGNORE)
4424 {
4425 int pid = ptid_get_pid (last_ptid);
4426 struct process_info *process = find_process_pid (pid);
4427 int forward_event = !gdb_connected () || process->gdb_detached;
4428
4429 if (last_status.kind == TARGET_WAITKIND_EXITED
4430 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
4431 {
4432 mark_breakpoints_out (process);
4433 target_mourn_inferior (last_ptid);
4434 }
4435 else if (last_status.kind == TARGET_WAITKIND_THREAD_EXITED)
4436 ;
4437 else
4438 {
4439 /* We're reporting this thread as stopped. Update its
4440 "want-stopped" state to what the client wants, until it
4441 gets a new resume action. */
4442 current_thread->last_resume_kind = resume_stop;
4443 current_thread->last_status = last_status;
4444 }
4445
4446 if (forward_event)
4447 {
4448 if (!target_running ())
4449 {
4450 /* The last process exited. We're done. */
4451 exit (0);
4452 }
4453
4454 if (last_status.kind == TARGET_WAITKIND_EXITED
4455 || last_status.kind == TARGET_WAITKIND_SIGNALLED
4456 || last_status.kind == TARGET_WAITKIND_THREAD_EXITED)
4457 ;
4458 else
4459 {
4460 /* A thread stopped with a signal, but gdb isn't
4461 connected to handle it. Pass it down to the
4462 inferior, as if it wasn't being traced. */
4463 enum gdb_signal signal;
4464
4465 if (debug_threads)
4466 debug_printf ("GDB not connected; forwarding event %d for"
4467 " [%s]\n",
4468 (int) last_status.kind,
4469 target_pid_to_str (last_ptid));
4470
4471 if (last_status.kind == TARGET_WAITKIND_STOPPED)
4472 signal = last_status.value.sig;
4473 else
4474 signal = GDB_SIGNAL_0;
4475 target_continue (last_ptid, signal);
4476 }
4477 }
4478 else
4479 push_stop_notification (last_ptid, &last_status);
4480 }
4481
4482 /* Be sure to not change the selected thread behind GDB's back.
4483 Important in the non-stop mode asynchronous protocol. */
4484 set_desired_thread ();
4485
4486 return 0;
4487 }
4488
4489 #if GDB_SELF_TEST
4490 namespace selftests
4491 {
4492
4493 void
4494 reset ()
4495 {}
4496
4497 } // namespace selftests
4498 #endif /* GDB_SELF_TEST */
This page took 0.133036 seconds and 5 git commands to generate.