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