gdb: remove current_top_target function
[deliverable/binutils-gdb.git] / gdb / mi / mi-main.c
1 /* MI Command Set.
2
3 Copyright (C) 2000-2021 Free Software Foundation, Inc.
4
5 Contributed by Cygnus Solutions (a Red Hat company).
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21
22 #include "defs.h"
23 #include "arch-utils.h"
24 #include "target.h"
25 #include "inferior.h"
26 #include "infrun.h"
27 #include "top.h"
28 #include "gdbthread.h"
29 #include "mi-cmds.h"
30 #include "mi-parse.h"
31 #include "mi-getopt.h"
32 #include "mi-console.h"
33 #include "ui-out.h"
34 #include "mi-out.h"
35 #include "interps.h"
36 #include "gdbsupport/event-loop.h"
37 #include "event-top.h"
38 #include "gdbcore.h" /* For write_memory(). */
39 #include "value.h"
40 #include "regcache.h"
41 #include "frame.h"
42 #include "mi-main.h"
43 #include "mi-common.h"
44 #include "language.h"
45 #include "valprint.h"
46 #include "osdata.h"
47 #include "gdbsupport/gdb_splay_tree.h"
48 #include "tracepoint.h"
49 #include "ada-lang.h"
50 #include "linespec.h"
51 #include "extension.h"
52 #include "gdbcmd.h"
53 #include "observable.h"
54 #include "gdbsupport/gdb_optional.h"
55 #include "gdbsupport/byte-vector.h"
56
57 #include <ctype.h>
58 #include "gdbsupport/run-time-clock.h"
59 #include <chrono>
60 #include "progspace-and-thread.h"
61 #include "gdbsupport/rsp-low.h"
62 #include <algorithm>
63 #include <set>
64 #include <map>
65
66 enum
67 {
68 FROM_TTY = 0
69 };
70
71 int mi_debug_p;
72
73 /* This is used to pass the current command timestamp down to
74 continuation routines. */
75 static struct mi_timestamp *current_command_ts;
76
77 static int do_timings = 0;
78
79 char *current_token;
80 /* Few commands would like to know if options like --thread-group were
81 explicitly specified. This variable keeps the current parsed
82 command including all option, and make it possible. */
83 static struct mi_parse *current_context;
84
85 int running_result_record_printed = 1;
86
87 /* Flag indicating that the target has proceeded since the last
88 command was issued. */
89 int mi_proceeded;
90
91 static void mi_cmd_execute (struct mi_parse *parse);
92
93 static void mi_execute_cli_command (const char *cmd, int args_p,
94 const char *args);
95 static void mi_execute_async_cli_command (const char *cli_command,
96 char **argv, int argc);
97 static bool register_changed_p (int regnum, readonly_detached_regcache *,
98 readonly_detached_regcache *);
99 static void output_register (struct frame_info *, int regnum, int format,
100 int skip_unavailable);
101
102 /* Controls whether the frontend wants MI in async mode. */
103 static bool mi_async = false;
104
105 /* The set command writes to this variable. If the inferior is
106 executing, mi_async is *not* updated. */
107 static bool mi_async_1 = false;
108
109 static void
110 set_mi_async_command (const char *args, int from_tty,
111 struct cmd_list_element *c)
112 {
113 if (have_live_inferiors ())
114 {
115 mi_async_1 = mi_async;
116 error (_("Cannot change this setting while the inferior is running."));
117 }
118
119 mi_async = mi_async_1;
120 }
121
122 static void
123 show_mi_async_command (struct ui_file *file, int from_tty,
124 struct cmd_list_element *c,
125 const char *value)
126 {
127 fprintf_filtered (file,
128 _("Whether MI is in asynchronous mode is %s.\n"),
129 value);
130 }
131
132 /* A wrapper for target_can_async_p that takes the MI setting into
133 account. */
134
135 int
136 mi_async_p (void)
137 {
138 return mi_async && target_can_async_p ();
139 }
140
141 /* Command implementations. FIXME: Is this libgdb? No. This is the MI
142 layer that calls libgdb. Any operation used in the below should be
143 formalized. */
144
145 static void timestamp (struct mi_timestamp *tv);
146
147 static void print_diff (struct ui_file *file, struct mi_timestamp *start,
148 struct mi_timestamp *end);
149
150 void
151 mi_cmd_gdb_exit (const char *command, char **argv, int argc)
152 {
153 struct mi_interp *mi = (struct mi_interp *) current_interpreter ();
154
155 /* We have to print everything right here because we never return. */
156 if (current_token)
157 fputs_unfiltered (current_token, mi->raw_stdout);
158 fputs_unfiltered ("^exit\n", mi->raw_stdout);
159 mi_out_put (current_uiout, mi->raw_stdout);
160 gdb_flush (mi->raw_stdout);
161 /* FIXME: The function called is not yet a formal libgdb function. */
162 quit_force (NULL, FROM_TTY);
163 }
164
165 void
166 mi_cmd_exec_next (const char *command, char **argv, int argc)
167 {
168 /* FIXME: Should call a libgdb function, not a cli wrapper. */
169 if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
170 mi_execute_async_cli_command ("reverse-next", argv + 1, argc - 1);
171 else
172 mi_execute_async_cli_command ("next", argv, argc);
173 }
174
175 void
176 mi_cmd_exec_next_instruction (const char *command, char **argv, int argc)
177 {
178 /* FIXME: Should call a libgdb function, not a cli wrapper. */
179 if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
180 mi_execute_async_cli_command ("reverse-nexti", argv + 1, argc - 1);
181 else
182 mi_execute_async_cli_command ("nexti", argv, argc);
183 }
184
185 void
186 mi_cmd_exec_step (const char *command, char **argv, int argc)
187 {
188 /* FIXME: Should call a libgdb function, not a cli wrapper. */
189 if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
190 mi_execute_async_cli_command ("reverse-step", argv + 1, argc - 1);
191 else
192 mi_execute_async_cli_command ("step", argv, argc);
193 }
194
195 void
196 mi_cmd_exec_step_instruction (const char *command, char **argv, int argc)
197 {
198 /* FIXME: Should call a libgdb function, not a cli wrapper. */
199 if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
200 mi_execute_async_cli_command ("reverse-stepi", argv + 1, argc - 1);
201 else
202 mi_execute_async_cli_command ("stepi", argv, argc);
203 }
204
205 void
206 mi_cmd_exec_finish (const char *command, char **argv, int argc)
207 {
208 /* FIXME: Should call a libgdb function, not a cli wrapper. */
209 if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
210 mi_execute_async_cli_command ("reverse-finish", argv + 1, argc - 1);
211 else
212 mi_execute_async_cli_command ("finish", argv, argc);
213 }
214
215 void
216 mi_cmd_exec_return (const char *command, char **argv, int argc)
217 {
218 /* This command doesn't really execute the target, it just pops the
219 specified number of frames. */
220 if (argc)
221 /* Call return_command with from_tty argument equal to 0 so as to
222 avoid being queried. */
223 return_command (*argv, 0);
224 else
225 /* Call return_command with from_tty argument equal to 0 so as to
226 avoid being queried. */
227 return_command (NULL, 0);
228
229 /* Because we have called return_command with from_tty = 0, we need
230 to print the frame here. */
231 print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS, 1);
232 }
233
234 void
235 mi_cmd_exec_jump (const char *args, char **argv, int argc)
236 {
237 /* FIXME: Should call a libgdb function, not a cli wrapper. */
238 mi_execute_async_cli_command ("jump", argv, argc);
239 }
240
241 static void
242 proceed_thread (struct thread_info *thread, int pid)
243 {
244 if (thread->state != THREAD_STOPPED)
245 return;
246
247 if (pid != 0 && thread->ptid.pid () != pid)
248 return;
249
250 switch_to_thread (thread);
251 clear_proceed_status (0);
252 proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT);
253 }
254
255 static int
256 proceed_thread_callback (struct thread_info *thread, void *arg)
257 {
258 int pid = *(int *)arg;
259
260 proceed_thread (thread, pid);
261 return 0;
262 }
263
264 static void
265 exec_continue (char **argv, int argc)
266 {
267 prepare_execution_command (current_inferior ()->top_target (), mi_async_p ());
268
269 if (non_stop)
270 {
271 /* In non-stop mode, 'resume' always resumes a single thread.
272 Therefore, to resume all threads of the current inferior, or
273 all threads in all inferiors, we need to iterate over
274 threads.
275
276 See comment on infcmd.c:proceed_thread_callback for rationale. */
277 if (current_context->all || current_context->thread_group != -1)
278 {
279 scoped_restore_current_thread restore_thread;
280 int pid = 0;
281
282 if (!current_context->all)
283 {
284 struct inferior *inf
285 = find_inferior_id (current_context->thread_group);
286
287 pid = inf->pid;
288 }
289 iterate_over_threads (proceed_thread_callback, &pid);
290 }
291 else
292 {
293 continue_1 (0);
294 }
295 }
296 else
297 {
298 scoped_restore save_multi = make_scoped_restore (&sched_multi);
299
300 if (current_context->all)
301 {
302 sched_multi = 1;
303 continue_1 (0);
304 }
305 else
306 {
307 /* In all-stop mode, -exec-continue traditionally resumed
308 either all threads, or one thread, depending on the
309 'scheduler-locking' variable. Let's continue to do the
310 same. */
311 continue_1 (1);
312 }
313 }
314 }
315
316 static void
317 exec_reverse_continue (char **argv, int argc)
318 {
319 enum exec_direction_kind dir = execution_direction;
320
321 if (dir == EXEC_REVERSE)
322 error (_("Already in reverse mode."));
323
324 if (!target_can_execute_reverse ())
325 error (_("Target %s does not support this command."), target_shortname ());
326
327 scoped_restore save_exec_dir = make_scoped_restore (&execution_direction,
328 EXEC_REVERSE);
329 exec_continue (argv, argc);
330 }
331
332 void
333 mi_cmd_exec_continue (const char *command, char **argv, int argc)
334 {
335 if (argc > 0 && strcmp (argv[0], "--reverse") == 0)
336 exec_reverse_continue (argv + 1, argc - 1);
337 else
338 exec_continue (argv, argc);
339 }
340
341 static int
342 interrupt_thread_callback (struct thread_info *thread, void *arg)
343 {
344 int pid = *(int *)arg;
345
346 if (thread->state != THREAD_RUNNING)
347 return 0;
348
349 if (thread->ptid.pid () != pid)
350 return 0;
351
352 target_stop (thread->ptid);
353 return 0;
354 }
355
356 /* Interrupt the execution of the target. Note how we must play
357 around with the token variables, in order to display the current
358 token in the result of the interrupt command, and the previous
359 execution token when the target finally stops. See comments in
360 mi_cmd_execute. */
361
362 void
363 mi_cmd_exec_interrupt (const char *command, char **argv, int argc)
364 {
365 /* In all-stop mode, everything stops, so we don't need to try
366 anything specific. */
367 if (!non_stop)
368 {
369 interrupt_target_1 (0);
370 return;
371 }
372
373 if (current_context->all)
374 {
375 /* This will interrupt all threads in all inferiors. */
376 interrupt_target_1 (1);
377 }
378 else if (current_context->thread_group != -1)
379 {
380 struct inferior *inf = find_inferior_id (current_context->thread_group);
381
382 iterate_over_threads (interrupt_thread_callback, &inf->pid);
383 }
384 else
385 {
386 /* Interrupt just the current thread -- either explicitly
387 specified via --thread or whatever was current before
388 MI command was sent. */
389 interrupt_target_1 (0);
390 }
391 }
392
393 /* Start the execution of the given inferior.
394
395 START_P indicates whether the program should be stopped when reaching the
396 main subprogram (similar to what the CLI "start" command does). */
397
398 static void
399 run_one_inferior (inferior *inf, bool start_p)
400 {
401 const char *run_cmd = start_p ? "start" : "run";
402 struct target_ops *run_target = find_run_target ();
403 int async_p = mi_async && run_target->can_async_p ();
404
405 if (inf->pid != 0)
406 {
407 thread_info *tp = any_thread_of_inferior (inf);
408 if (tp == NULL)
409 error (_("Inferior has no threads."));
410
411 switch_to_thread (tp);
412 }
413 else
414 switch_to_inferior_no_thread (inf);
415 mi_execute_cli_command (run_cmd, async_p,
416 async_p ? "&" : NULL);
417 }
418
419 void
420 mi_cmd_exec_run (const char *command, char **argv, int argc)
421 {
422 int start_p = 0;
423
424 /* Parse the command options. */
425 enum opt
426 {
427 START_OPT,
428 };
429 static const struct mi_opt opts[] =
430 {
431 {"-start", START_OPT, 0},
432 {NULL, 0, 0},
433 };
434
435 int oind = 0;
436 char *oarg;
437
438 while (1)
439 {
440 int opt = mi_getopt ("-exec-run", argc, argv, opts, &oind, &oarg);
441
442 if (opt < 0)
443 break;
444 switch ((enum opt) opt)
445 {
446 case START_OPT:
447 start_p = 1;
448 break;
449 }
450 }
451
452 /* This command does not accept any argument. Make sure the user
453 did not provide any. */
454 if (oind != argc)
455 error (_("Invalid argument: %s"), argv[oind]);
456
457 if (current_context->all)
458 {
459 scoped_restore_current_pspace_and_thread restore_pspace_thread;
460
461 for (inferior *inf : all_inferiors ())
462 run_one_inferior (inf, start_p);
463 }
464 else
465 {
466 const char *run_cmd = start_p ? "start" : "run";
467 struct target_ops *run_target = find_run_target ();
468 int async_p = mi_async && run_target->can_async_p ();
469
470 mi_execute_cli_command (run_cmd, async_p,
471 async_p ? "&" : NULL);
472 }
473 }
474
475
476 static int
477 find_thread_of_process (struct thread_info *ti, void *p)
478 {
479 int pid = *(int *)p;
480
481 if (ti->ptid.pid () == pid && ti->state != THREAD_EXITED)
482 return 1;
483
484 return 0;
485 }
486
487 void
488 mi_cmd_target_detach (const char *command, char **argv, int argc)
489 {
490 if (argc != 0 && argc != 1)
491 error (_("Usage: -target-detach [pid | thread-group]"));
492
493 if (argc == 1)
494 {
495 struct thread_info *tp;
496 char *end = argv[0];
497 int pid;
498
499 /* First see if we are dealing with a thread-group id. */
500 if (*argv[0] == 'i')
501 {
502 struct inferior *inf;
503 int id = strtoul (argv[0] + 1, &end, 0);
504
505 if (*end != '\0')
506 error (_("Invalid syntax of thread-group id '%s'"), argv[0]);
507
508 inf = find_inferior_id (id);
509 if (!inf)
510 error (_("Non-existent thread-group id '%d'"), id);
511
512 pid = inf->pid;
513 }
514 else
515 {
516 /* We must be dealing with a pid. */
517 pid = strtol (argv[0], &end, 10);
518
519 if (*end != '\0')
520 error (_("Invalid identifier '%s'"), argv[0]);
521 }
522
523 /* Pick any thread in the desired process. Current
524 target_detach detaches from the parent of inferior_ptid. */
525 tp = iterate_over_threads (find_thread_of_process, &pid);
526 if (!tp)
527 error (_("Thread group is empty"));
528
529 switch_to_thread (tp);
530 }
531
532 detach_command (NULL, 0);
533 }
534
535 void
536 mi_cmd_target_flash_erase (const char *command, char **argv, int argc)
537 {
538 flash_erase_command (NULL, 0);
539 }
540
541 void
542 mi_cmd_thread_select (const char *command, char **argv, int argc)
543 {
544 if (argc != 1)
545 error (_("-thread-select: USAGE: threadnum."));
546
547 int num = value_as_long (parse_and_eval (argv[0]));
548 thread_info *thr = find_thread_global_id (num);
549 if (thr == NULL)
550 error (_("Thread ID %d not known."), num);
551
552 ptid_t previous_ptid = inferior_ptid;
553
554 thread_select (argv[0], thr);
555
556 print_selected_thread_frame (current_uiout,
557 USER_SELECTED_THREAD | USER_SELECTED_FRAME);
558
559 /* Notify if the thread has effectively changed. */
560 if (inferior_ptid != previous_ptid)
561 {
562 gdb::observers::user_selected_context_changed.notify
563 (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
564 }
565 }
566
567 void
568 mi_cmd_thread_list_ids (const char *command, char **argv, int argc)
569 {
570 if (argc != 0)
571 error (_("-thread-list-ids: No arguments required."));
572
573 int num = 0;
574 int current_thread = -1;
575
576 update_thread_list ();
577
578 {
579 ui_out_emit_tuple tuple_emitter (current_uiout, "thread-ids");
580
581 for (thread_info *tp : all_non_exited_threads ())
582 {
583 if (tp->ptid == inferior_ptid)
584 current_thread = tp->global_num;
585
586 num++;
587 current_uiout->field_signed ("thread-id", tp->global_num);
588 }
589 }
590
591 if (current_thread != -1)
592 current_uiout->field_signed ("current-thread-id", current_thread);
593 current_uiout->field_signed ("number-of-threads", num);
594 }
595
596 void
597 mi_cmd_thread_info (const char *command, char **argv, int argc)
598 {
599 if (argc != 0 && argc != 1)
600 error (_("Invalid MI command"));
601
602 print_thread_info (current_uiout, argv[0], -1);
603 }
604
605 struct collect_cores_data
606 {
607 int pid;
608 std::set<int> cores;
609 };
610
611 static int
612 collect_cores (struct thread_info *ti, void *xdata)
613 {
614 struct collect_cores_data *data = (struct collect_cores_data *) xdata;
615
616 if (ti->ptid.pid () == data->pid)
617 {
618 int core = target_core_of_thread (ti->ptid);
619
620 if (core != -1)
621 data->cores.insert (core);
622 }
623
624 return 0;
625 }
626
627 struct print_one_inferior_data
628 {
629 int recurse;
630 const std::set<int> *inferiors;
631 };
632
633 static void
634 print_one_inferior (struct inferior *inferior, bool recurse,
635 const std::set<int> &ids)
636 {
637 struct ui_out *uiout = current_uiout;
638
639 if (ids.empty () || (ids.find (inferior->pid) != ids.end ()))
640 {
641 struct collect_cores_data data;
642 ui_out_emit_tuple tuple_emitter (uiout, NULL);
643
644 uiout->field_fmt ("id", "i%d", inferior->num);
645 uiout->field_string ("type", "process");
646 if (inferior->has_exit_code)
647 uiout->field_string ("exit-code",
648 int_string (inferior->exit_code, 8, 0, 0, 1));
649 if (inferior->pid != 0)
650 uiout->field_signed ("pid", inferior->pid);
651
652 if (inferior->pspace->exec_filename != nullptr)
653 {
654 uiout->field_string ("executable",
655 inferior->pspace->exec_filename.get ());
656 }
657
658 if (inferior->pid != 0)
659 {
660 data.pid = inferior->pid;
661 iterate_over_threads (collect_cores, &data);
662 }
663
664 if (!data.cores.empty ())
665 {
666 ui_out_emit_list list_emitter (uiout, "cores");
667
668 for (int b : data.cores)
669 uiout->field_signed (NULL, b);
670 }
671
672 if (recurse)
673 print_thread_info (uiout, NULL, inferior->pid);
674 }
675 }
676
677 /* Output a field named 'cores' with a list as the value. The
678 elements of the list are obtained by splitting 'cores' on
679 comma. */
680
681 static void
682 output_cores (struct ui_out *uiout, const char *field_name, const char *xcores)
683 {
684 ui_out_emit_list list_emitter (uiout, field_name);
685 auto cores = make_unique_xstrdup (xcores);
686 char *p = cores.get ();
687 char *saveptr;
688
689 for (p = strtok_r (p, ",", &saveptr); p; p = strtok_r (NULL, ",", &saveptr))
690 uiout->field_string (NULL, p);
691 }
692
693 static void
694 list_available_thread_groups (const std::set<int> &ids, int recurse)
695 {
696 struct ui_out *uiout = current_uiout;
697
698 /* This keeps a map from integer (pid) to vector of struct osdata_item.
699 The vector contains information about all threads for the given pid. */
700 std::map<int, std::vector<osdata_item>> tree;
701
702 /* get_osdata will throw if it cannot return data. */
703 std::unique_ptr<osdata> data = get_osdata ("processes");
704
705 if (recurse)
706 {
707 std::unique_ptr<osdata> threads = get_osdata ("threads");
708
709 for (const osdata_item &item : threads->items)
710 {
711 const std::string *pid = get_osdata_column (item, "pid");
712 int pid_i = strtoul (pid->c_str (), NULL, 0);
713
714 tree[pid_i].push_back (item);
715 }
716 }
717
718 ui_out_emit_list list_emitter (uiout, "groups");
719
720 for (const osdata_item &item : data->items)
721 {
722 const std::string *pid = get_osdata_column (item, "pid");
723 const std::string *cmd = get_osdata_column (item, "command");
724 const std::string *user = get_osdata_column (item, "user");
725 const std::string *cores = get_osdata_column (item, "cores");
726
727 int pid_i = strtoul (pid->c_str (), NULL, 0);
728
729 /* At present, the target will return all available processes
730 and if information about specific ones was required, we filter
731 undesired processes here. */
732 if (!ids.empty () && ids.find (pid_i) == ids.end ())
733 continue;
734
735 ui_out_emit_tuple tuple_emitter (uiout, NULL);
736
737 uiout->field_string ("id", pid->c_str ());
738 uiout->field_string ("type", "process");
739 if (cmd)
740 uiout->field_string ("description", cmd->c_str ());
741 if (user)
742 uiout->field_string ("user", user->c_str ());
743 if (cores)
744 output_cores (uiout, "cores", cores->c_str ());
745
746 if (recurse)
747 {
748 auto n = tree.find (pid_i);
749 if (n != tree.end ())
750 {
751 std::vector<osdata_item> &children = n->second;
752
753 ui_out_emit_list thread_list_emitter (uiout, "threads");
754
755 for (const osdata_item &child : children)
756 {
757 ui_out_emit_tuple inner_tuple_emitter (uiout, NULL);
758 const std::string *tid = get_osdata_column (child, "tid");
759 const std::string *tcore = get_osdata_column (child, "core");
760
761 uiout->field_string ("id", tid->c_str ());
762 if (tcore)
763 uiout->field_string ("core", tcore->c_str ());
764 }
765 }
766 }
767 }
768 }
769
770 void
771 mi_cmd_list_thread_groups (const char *command, char **argv, int argc)
772 {
773 struct ui_out *uiout = current_uiout;
774 int available = 0;
775 int recurse = 0;
776 std::set<int> ids;
777
778 enum opt
779 {
780 AVAILABLE_OPT, RECURSE_OPT
781 };
782 static const struct mi_opt opts[] =
783 {
784 {"-available", AVAILABLE_OPT, 0},
785 {"-recurse", RECURSE_OPT, 1},
786 { 0, 0, 0 }
787 };
788
789 int oind = 0;
790 char *oarg;
791
792 while (1)
793 {
794 int opt = mi_getopt ("-list-thread-groups", argc, argv, opts,
795 &oind, &oarg);
796
797 if (opt < 0)
798 break;
799 switch ((enum opt) opt)
800 {
801 case AVAILABLE_OPT:
802 available = 1;
803 break;
804 case RECURSE_OPT:
805 if (strcmp (oarg, "0") == 0)
806 ;
807 else if (strcmp (oarg, "1") == 0)
808 recurse = 1;
809 else
810 error (_("only '0' and '1' are valid values "
811 "for the '--recurse' option"));
812 break;
813 }
814 }
815
816 for (; oind < argc; ++oind)
817 {
818 char *end;
819 int inf;
820
821 if (*(argv[oind]) != 'i')
822 error (_("invalid syntax of group id '%s'"), argv[oind]);
823
824 inf = strtoul (argv[oind] + 1, &end, 0);
825
826 if (*end != '\0')
827 error (_("invalid syntax of group id '%s'"), argv[oind]);
828 ids.insert (inf);
829 }
830
831 if (available)
832 {
833 list_available_thread_groups (ids, recurse);
834 }
835 else if (ids.size () == 1)
836 {
837 /* Local thread groups, single id. */
838 int id = *(ids.begin ());
839 struct inferior *inf = find_inferior_id (id);
840
841 if (!inf)
842 error (_("Non-existent thread group id '%d'"), id);
843
844 print_thread_info (uiout, NULL, inf->pid);
845 }
846 else
847 {
848 /* Local thread groups. Either no explicit ids -- and we
849 print everything, or several explicit ids. In both cases,
850 we print more than one group, and have to use 'groups'
851 as the top-level element. */
852 ui_out_emit_list list_emitter (uiout, "groups");
853 update_thread_list ();
854 for (inferior *inf : all_inferiors ())
855 print_one_inferior (inf, recurse, ids);
856 }
857 }
858
859 void
860 mi_cmd_data_list_register_names (const char *command, char **argv, int argc)
861 {
862 struct gdbarch *gdbarch;
863 struct ui_out *uiout = current_uiout;
864 int regnum, numregs;
865 int i;
866
867 /* Note that the test for a valid register must include checking the
868 gdbarch_register_name because gdbarch_num_regs may be allocated
869 for the union of the register sets within a family of related
870 processors. In this case, some entries of gdbarch_register_name
871 will change depending upon the particular processor being
872 debugged. */
873
874 gdbarch = get_current_arch ();
875 numregs = gdbarch_num_cooked_regs (gdbarch);
876
877 ui_out_emit_list list_emitter (uiout, "register-names");
878
879 if (argc == 0) /* No args, just do all the regs. */
880 {
881 for (regnum = 0;
882 regnum < numregs;
883 regnum++)
884 {
885 if (gdbarch_register_name (gdbarch, regnum) == NULL
886 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
887 uiout->field_string (NULL, "");
888 else
889 uiout->field_string (NULL, gdbarch_register_name (gdbarch, regnum));
890 }
891 }
892
893 /* Else, list of register #s, just do listed regs. */
894 for (i = 0; i < argc; i++)
895 {
896 regnum = atoi (argv[i]);
897 if (regnum < 0 || regnum >= numregs)
898 error (_("bad register number"));
899
900 if (gdbarch_register_name (gdbarch, regnum) == NULL
901 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
902 uiout->field_string (NULL, "");
903 else
904 uiout->field_string (NULL, gdbarch_register_name (gdbarch, regnum));
905 }
906 }
907
908 void
909 mi_cmd_data_list_changed_registers (const char *command, char **argv, int argc)
910 {
911 static std::unique_ptr<readonly_detached_regcache> this_regs;
912 struct ui_out *uiout = current_uiout;
913 std::unique_ptr<readonly_detached_regcache> prev_regs;
914 struct gdbarch *gdbarch;
915 int regnum, numregs;
916 int i;
917
918 /* The last time we visited this function, the current frame's
919 register contents were saved in THIS_REGS. Move THIS_REGS over
920 to PREV_REGS, and refresh THIS_REGS with the now-current register
921 contents. */
922
923 prev_regs = std::move (this_regs);
924 this_regs = frame_save_as_regcache (get_selected_frame (NULL));
925
926 /* Note that the test for a valid register must include checking the
927 gdbarch_register_name because gdbarch_num_regs may be allocated
928 for the union of the register sets within a family of related
929 processors. In this case, some entries of gdbarch_register_name
930 will change depending upon the particular processor being
931 debugged. */
932
933 gdbarch = this_regs->arch ();
934 numregs = gdbarch_num_cooked_regs (gdbarch);
935
936 ui_out_emit_list list_emitter (uiout, "changed-registers");
937
938 if (argc == 0)
939 {
940 /* No args, just do all the regs. */
941 for (regnum = 0;
942 regnum < numregs;
943 regnum++)
944 {
945 if (gdbarch_register_name (gdbarch, regnum) == NULL
946 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
947 continue;
948
949 if (register_changed_p (regnum, prev_regs.get (),
950 this_regs.get ()))
951 uiout->field_signed (NULL, regnum);
952 }
953 }
954
955 /* Else, list of register #s, just do listed regs. */
956 for (i = 0; i < argc; i++)
957 {
958 regnum = atoi (argv[i]);
959
960 if (regnum >= 0
961 && regnum < numregs
962 && gdbarch_register_name (gdbarch, regnum) != NULL
963 && *gdbarch_register_name (gdbarch, regnum) != '\000')
964 {
965 if (register_changed_p (regnum, prev_regs.get (),
966 this_regs.get ()))
967 uiout->field_signed (NULL, regnum);
968 }
969 else
970 error (_("bad register number"));
971 }
972 }
973
974 static bool
975 register_changed_p (int regnum, readonly_detached_regcache *prev_regs,
976 readonly_detached_regcache *this_regs)
977 {
978 struct gdbarch *gdbarch = this_regs->arch ();
979 struct value *prev_value, *this_value;
980
981 /* First time through or after gdbarch change consider all registers
982 as changed. */
983 if (!prev_regs || prev_regs->arch () != gdbarch)
984 return true;
985
986 /* Get register contents and compare. */
987 prev_value = prev_regs->cooked_read_value (regnum);
988 this_value = this_regs->cooked_read_value (regnum);
989 gdb_assert (prev_value != NULL);
990 gdb_assert (this_value != NULL);
991
992 auto ret = !value_contents_eq (prev_value, 0, this_value, 0,
993 register_size (gdbarch, regnum));
994
995 release_value (prev_value);
996 release_value (this_value);
997 return ret;
998 }
999
1000 /* Return a list of register number and value pairs. The valid
1001 arguments expected are: a letter indicating the format in which to
1002 display the registers contents. This can be one of: x
1003 (hexadecimal), d (decimal), N (natural), t (binary), o (octal), r
1004 (raw). After the format argument there can be a sequence of
1005 numbers, indicating which registers to fetch the content of. If
1006 the format is the only argument, a list of all the registers with
1007 their values is returned. */
1008
1009 void
1010 mi_cmd_data_list_register_values (const char *command, char **argv, int argc)
1011 {
1012 struct ui_out *uiout = current_uiout;
1013 struct frame_info *frame;
1014 struct gdbarch *gdbarch;
1015 int regnum, numregs, format;
1016 int i;
1017 int skip_unavailable = 0;
1018 int oind = 0;
1019 enum opt
1020 {
1021 SKIP_UNAVAILABLE,
1022 };
1023 static const struct mi_opt opts[] =
1024 {
1025 {"-skip-unavailable", SKIP_UNAVAILABLE, 0},
1026 { 0, 0, 0 }
1027 };
1028
1029 /* Note that the test for a valid register must include checking the
1030 gdbarch_register_name because gdbarch_num_regs may be allocated
1031 for the union of the register sets within a family of related
1032 processors. In this case, some entries of gdbarch_register_name
1033 will change depending upon the particular processor being
1034 debugged. */
1035
1036 while (1)
1037 {
1038 char *oarg;
1039 int opt = mi_getopt ("-data-list-register-values", argc, argv,
1040 opts, &oind, &oarg);
1041
1042 if (opt < 0)
1043 break;
1044 switch ((enum opt) opt)
1045 {
1046 case SKIP_UNAVAILABLE:
1047 skip_unavailable = 1;
1048 break;
1049 }
1050 }
1051
1052 if (argc - oind < 1)
1053 error (_("-data-list-register-values: Usage: "
1054 "-data-list-register-values [--skip-unavailable] <format>"
1055 " [<regnum1>...<regnumN>]"));
1056
1057 format = (int) argv[oind][0];
1058
1059 frame = get_selected_frame (NULL);
1060 gdbarch = get_frame_arch (frame);
1061 numregs = gdbarch_num_cooked_regs (gdbarch);
1062
1063 ui_out_emit_list list_emitter (uiout, "register-values");
1064
1065 if (argc - oind == 1)
1066 {
1067 /* No args, beside the format: do all the regs. */
1068 for (regnum = 0;
1069 regnum < numregs;
1070 regnum++)
1071 {
1072 if (gdbarch_register_name (gdbarch, regnum) == NULL
1073 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
1074 continue;
1075
1076 output_register (frame, regnum, format, skip_unavailable);
1077 }
1078 }
1079
1080 /* Else, list of register #s, just do listed regs. */
1081 for (i = 1 + oind; i < argc; i++)
1082 {
1083 regnum = atoi (argv[i]);
1084
1085 if (regnum >= 0
1086 && regnum < numregs
1087 && gdbarch_register_name (gdbarch, regnum) != NULL
1088 && *gdbarch_register_name (gdbarch, regnum) != '\000')
1089 output_register (frame, regnum, format, skip_unavailable);
1090 else
1091 error (_("bad register number"));
1092 }
1093 }
1094
1095 /* Output one register REGNUM's contents in the desired FORMAT. If
1096 SKIP_UNAVAILABLE is true, skip the register if it is
1097 unavailable. */
1098
1099 static void
1100 output_register (struct frame_info *frame, int regnum, int format,
1101 int skip_unavailable)
1102 {
1103 struct ui_out *uiout = current_uiout;
1104 struct value *val = value_of_register (regnum, frame);
1105 struct value_print_options opts;
1106
1107 if (skip_unavailable && !value_entirely_available (val))
1108 return;
1109
1110 ui_out_emit_tuple tuple_emitter (uiout, NULL);
1111 uiout->field_signed ("number", regnum);
1112
1113 if (format == 'N')
1114 format = 0;
1115
1116 if (format == 'r')
1117 format = 'z';
1118
1119 string_file stb;
1120
1121 get_formatted_print_options (&opts, format);
1122 opts.deref_ref = 1;
1123 common_val_print (val, &stb, 0, &opts, current_language);
1124 uiout->field_stream ("value", stb);
1125 }
1126
1127 /* Write given values into registers. The registers and values are
1128 given as pairs. The corresponding MI command is
1129 -data-write-register-values <format>
1130 [<regnum1> <value1>...<regnumN> <valueN>] */
1131 void
1132 mi_cmd_data_write_register_values (const char *command, char **argv, int argc)
1133 {
1134 struct regcache *regcache;
1135 struct gdbarch *gdbarch;
1136 int numregs, i;
1137
1138 /* Note that the test for a valid register must include checking the
1139 gdbarch_register_name because gdbarch_num_regs may be allocated
1140 for the union of the register sets within a family of related
1141 processors. In this case, some entries of gdbarch_register_name
1142 will change depending upon the particular processor being
1143 debugged. */
1144
1145 regcache = get_current_regcache ();
1146 gdbarch = regcache->arch ();
1147 numregs = gdbarch_num_cooked_regs (gdbarch);
1148
1149 if (argc == 0)
1150 error (_("-data-write-register-values: Usage: -data-write-register-"
1151 "values <format> [<regnum1> <value1>...<regnumN> <valueN>]"));
1152
1153 if (!target_has_registers ())
1154 error (_("-data-write-register-values: No registers."));
1155
1156 if (!(argc - 1))
1157 error (_("-data-write-register-values: No regs and values specified."));
1158
1159 if ((argc - 1) % 2)
1160 error (_("-data-write-register-values: "
1161 "Regs and vals are not in pairs."));
1162
1163 for (i = 1; i < argc; i = i + 2)
1164 {
1165 int regnum = atoi (argv[i]);
1166
1167 if (regnum >= 0 && regnum < numregs
1168 && gdbarch_register_name (gdbarch, regnum)
1169 && *gdbarch_register_name (gdbarch, regnum))
1170 {
1171 LONGEST value;
1172
1173 /* Get the value as a number. */
1174 value = parse_and_eval_address (argv[i + 1]);
1175
1176 /* Write it down. */
1177 regcache_cooked_write_signed (regcache, regnum, value);
1178 }
1179 else
1180 error (_("bad register number"));
1181 }
1182 }
1183
1184 /* Evaluate the value of the argument. The argument is an
1185 expression. If the expression contains spaces it needs to be
1186 included in double quotes. */
1187
1188 void
1189 mi_cmd_data_evaluate_expression (const char *command, char **argv, int argc)
1190 {
1191 struct value *val;
1192 struct value_print_options opts;
1193 struct ui_out *uiout = current_uiout;
1194
1195 if (argc != 1)
1196 error (_("-data-evaluate-expression: "
1197 "Usage: -data-evaluate-expression expression"));
1198
1199 expression_up expr = parse_expression (argv[0]);
1200
1201 val = evaluate_expression (expr.get ());
1202
1203 string_file stb;
1204
1205 /* Print the result of the expression evaluation. */
1206 get_user_print_options (&opts);
1207 opts.deref_ref = 0;
1208 common_val_print (val, &stb, 0, &opts, current_language);
1209
1210 uiout->field_stream ("value", stb);
1211 }
1212
1213 /* This is the -data-read-memory command.
1214
1215 ADDR: start address of data to be dumped.
1216 WORD-FORMAT: a char indicating format for the ``word''. See
1217 the ``x'' command.
1218 WORD-SIZE: size of each ``word''; 1,2,4, or 8 bytes.
1219 NR_ROW: Number of rows.
1220 NR_COL: The number of columns (words per row).
1221 ASCHAR: (OPTIONAL) Append an ascii character dump to each row. Use
1222 ASCHAR for unprintable characters.
1223
1224 Reads SIZE*NR_ROW*NR_COL bytes starting at ADDR from memory and
1225 displays them. Returns:
1226
1227 {addr="...",rowN={wordN="..." ,... [,ascii="..."]}, ...}
1228
1229 Returns:
1230 The number of bytes read is SIZE*ROW*COL. */
1231
1232 void
1233 mi_cmd_data_read_memory (const char *command, char **argv, int argc)
1234 {
1235 struct gdbarch *gdbarch = get_current_arch ();
1236 struct ui_out *uiout = current_uiout;
1237 CORE_ADDR addr;
1238 long total_bytes, nr_cols, nr_rows;
1239 char word_format;
1240 struct type *word_type;
1241 long word_size;
1242 char word_asize;
1243 char aschar;
1244 int nr_bytes;
1245 long offset = 0;
1246 int oind = 0;
1247 char *oarg;
1248 enum opt
1249 {
1250 OFFSET_OPT
1251 };
1252 static const struct mi_opt opts[] =
1253 {
1254 {"o", OFFSET_OPT, 1},
1255 { 0, 0, 0 }
1256 };
1257
1258 while (1)
1259 {
1260 int opt = mi_getopt ("-data-read-memory", argc, argv, opts,
1261 &oind, &oarg);
1262
1263 if (opt < 0)
1264 break;
1265 switch ((enum opt) opt)
1266 {
1267 case OFFSET_OPT:
1268 offset = atol (oarg);
1269 break;
1270 }
1271 }
1272 argv += oind;
1273 argc -= oind;
1274
1275 if (argc < 5 || argc > 6)
1276 error (_("-data-read-memory: Usage: "
1277 "ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS [ASCHAR]."));
1278
1279 /* Extract all the arguments. */
1280
1281 /* Start address of the memory dump. */
1282 addr = parse_and_eval_address (argv[0]) + offset;
1283 /* The format character to use when displaying a memory word. See
1284 the ``x'' command. */
1285 word_format = argv[1][0];
1286 /* The size of the memory word. */
1287 word_size = atol (argv[2]);
1288 switch (word_size)
1289 {
1290 case 1:
1291 word_type = builtin_type (gdbarch)->builtin_int8;
1292 word_asize = 'b';
1293 break;
1294 case 2:
1295 word_type = builtin_type (gdbarch)->builtin_int16;
1296 word_asize = 'h';
1297 break;
1298 case 4:
1299 word_type = builtin_type (gdbarch)->builtin_int32;
1300 word_asize = 'w';
1301 break;
1302 case 8:
1303 word_type = builtin_type (gdbarch)->builtin_int64;
1304 word_asize = 'g';
1305 break;
1306 default:
1307 word_type = builtin_type (gdbarch)->builtin_int8;
1308 word_asize = 'b';
1309 }
1310 /* The number of rows. */
1311 nr_rows = atol (argv[3]);
1312 if (nr_rows <= 0)
1313 error (_("-data-read-memory: invalid number of rows."));
1314
1315 /* Number of bytes per row. */
1316 nr_cols = atol (argv[4]);
1317 if (nr_cols <= 0)
1318 error (_("-data-read-memory: invalid number of columns."));
1319
1320 /* The un-printable character when printing ascii. */
1321 if (argc == 6)
1322 aschar = *argv[5];
1323 else
1324 aschar = 0;
1325
1326 /* Create a buffer and read it in. */
1327 total_bytes = word_size * nr_rows * nr_cols;
1328
1329 gdb::byte_vector mbuf (total_bytes);
1330
1331 nr_bytes = target_read (current_inferior ()->top_target (),
1332 TARGET_OBJECT_MEMORY, NULL,
1333 mbuf.data (), addr, total_bytes);
1334 if (nr_bytes <= 0)
1335 error (_("Unable to read memory."));
1336
1337 /* Output the header information. */
1338 uiout->field_core_addr ("addr", gdbarch, addr);
1339 uiout->field_signed ("nr-bytes", nr_bytes);
1340 uiout->field_signed ("total-bytes", total_bytes);
1341 uiout->field_core_addr ("next-row", gdbarch, addr + word_size * nr_cols);
1342 uiout->field_core_addr ("prev-row", gdbarch, addr - word_size * nr_cols);
1343 uiout->field_core_addr ("next-page", gdbarch, addr + total_bytes);
1344 uiout->field_core_addr ("prev-page", gdbarch, addr - total_bytes);
1345
1346 /* Build the result as a two dimensional table. */
1347 {
1348 int row;
1349 int row_byte;
1350
1351 string_file stream;
1352
1353 ui_out_emit_list list_emitter (uiout, "memory");
1354 for (row = 0, row_byte = 0;
1355 row < nr_rows;
1356 row++, row_byte += nr_cols * word_size)
1357 {
1358 int col;
1359 int col_byte;
1360 struct value_print_options print_opts;
1361
1362 ui_out_emit_tuple tuple_emitter (uiout, NULL);
1363 uiout->field_core_addr ("addr", gdbarch, addr + row_byte);
1364 /* ui_out_field_core_addr_symbolic (uiout, "saddr", addr +
1365 row_byte); */
1366 {
1367 ui_out_emit_list list_data_emitter (uiout, "data");
1368 get_formatted_print_options (&print_opts, word_format);
1369 for (col = 0, col_byte = row_byte;
1370 col < nr_cols;
1371 col++, col_byte += word_size)
1372 {
1373 if (col_byte + word_size > nr_bytes)
1374 {
1375 uiout->field_string (NULL, "N/A");
1376 }
1377 else
1378 {
1379 stream.clear ();
1380 print_scalar_formatted (&mbuf[col_byte], word_type,
1381 &print_opts, word_asize, &stream);
1382 uiout->field_stream (NULL, stream);
1383 }
1384 }
1385 }
1386
1387 if (aschar)
1388 {
1389 int byte;
1390
1391 stream.clear ();
1392 for (byte = row_byte;
1393 byte < row_byte + word_size * nr_cols; byte++)
1394 {
1395 if (byte >= nr_bytes)
1396 stream.putc ('X');
1397 else if (mbuf[byte] < 32 || mbuf[byte] > 126)
1398 stream.putc (aschar);
1399 else
1400 stream.putc (mbuf[byte]);
1401 }
1402 uiout->field_stream ("ascii", stream);
1403 }
1404 }
1405 }
1406 }
1407
1408 void
1409 mi_cmd_data_read_memory_bytes (const char *command, char **argv, int argc)
1410 {
1411 struct gdbarch *gdbarch = get_current_arch ();
1412 struct ui_out *uiout = current_uiout;
1413 CORE_ADDR addr;
1414 LONGEST length;
1415 long offset = 0;
1416 int unit_size = gdbarch_addressable_memory_unit_size (gdbarch);
1417 int oind = 0;
1418 char *oarg;
1419 enum opt
1420 {
1421 OFFSET_OPT
1422 };
1423 static const struct mi_opt opts[] =
1424 {
1425 {"o", OFFSET_OPT, 1},
1426 { 0, 0, 0 }
1427 };
1428
1429 while (1)
1430 {
1431 int opt = mi_getopt ("-data-read-memory-bytes", argc, argv, opts,
1432 &oind, &oarg);
1433 if (opt < 0)
1434 break;
1435 switch ((enum opt) opt)
1436 {
1437 case OFFSET_OPT:
1438 offset = atol (oarg);
1439 break;
1440 }
1441 }
1442 argv += oind;
1443 argc -= oind;
1444
1445 if (argc != 2)
1446 error (_("Usage: [ -o OFFSET ] ADDR LENGTH."));
1447
1448 addr = parse_and_eval_address (argv[0]) + offset;
1449 length = atol (argv[1]);
1450
1451 std::vector<memory_read_result> result
1452 = read_memory_robust (current_inferior ()->top_target (), addr, length);
1453
1454 if (result.size () == 0)
1455 error (_("Unable to read memory."));
1456
1457 ui_out_emit_list list_emitter (uiout, "memory");
1458 for (const memory_read_result &read_result : result)
1459 {
1460 ui_out_emit_tuple tuple_emitter (uiout, NULL);
1461
1462 uiout->field_core_addr ("begin", gdbarch, read_result.begin);
1463 uiout->field_core_addr ("offset", gdbarch, read_result.begin - addr);
1464 uiout->field_core_addr ("end", gdbarch, read_result.end);
1465
1466 std::string data = bin2hex (read_result.data.get (),
1467 (read_result.end - read_result.begin)
1468 * unit_size);
1469 uiout->field_string ("contents", data.c_str ());
1470 }
1471 }
1472
1473 /* Implementation of the -data-write_memory command.
1474
1475 COLUMN_OFFSET: optional argument. Must be preceded by '-o'. The
1476 offset from the beginning of the memory grid row where the cell to
1477 be written is.
1478 ADDR: start address of the row in the memory grid where the memory
1479 cell is, if OFFSET_COLUMN is specified. Otherwise, the address of
1480 the location to write to.
1481 FORMAT: a char indicating format for the ``word''. See
1482 the ``x'' command.
1483 WORD_SIZE: size of each ``word''; 1,2,4, or 8 bytes
1484 VALUE: value to be written into the memory address.
1485
1486 Writes VALUE into ADDR + (COLUMN_OFFSET * WORD_SIZE).
1487
1488 Prints nothing. */
1489
1490 void
1491 mi_cmd_data_write_memory (const char *command, char **argv, int argc)
1492 {
1493 struct gdbarch *gdbarch = get_current_arch ();
1494 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1495 CORE_ADDR addr;
1496 long word_size;
1497 /* FIXME: ezannoni 2000-02-17 LONGEST could possibly not be big
1498 enough when using a compiler other than GCC. */
1499 LONGEST value;
1500 long offset = 0;
1501 int oind = 0;
1502 char *oarg;
1503 enum opt
1504 {
1505 OFFSET_OPT
1506 };
1507 static const struct mi_opt opts[] =
1508 {
1509 {"o", OFFSET_OPT, 1},
1510 { 0, 0, 0 }
1511 };
1512
1513 while (1)
1514 {
1515 int opt = mi_getopt ("-data-write-memory", argc, argv, opts,
1516 &oind, &oarg);
1517
1518 if (opt < 0)
1519 break;
1520 switch ((enum opt) opt)
1521 {
1522 case OFFSET_OPT:
1523 offset = atol (oarg);
1524 break;
1525 }
1526 }
1527 argv += oind;
1528 argc -= oind;
1529
1530 if (argc != 4)
1531 error (_("-data-write-memory: Usage: "
1532 "[-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE."));
1533
1534 /* Extract all the arguments. */
1535 /* Start address of the memory dump. */
1536 addr = parse_and_eval_address (argv[0]);
1537 /* The size of the memory word. */
1538 word_size = atol (argv[2]);
1539
1540 /* Calculate the real address of the write destination. */
1541 addr += (offset * word_size);
1542
1543 /* Get the value as a number. */
1544 value = parse_and_eval_address (argv[3]);
1545 /* Get the value into an array. */
1546 gdb::byte_vector buffer (word_size);
1547 store_signed_integer (buffer.data (), word_size, byte_order, value);
1548 /* Write it down to memory. */
1549 write_memory_with_notification (addr, buffer.data (), word_size);
1550 }
1551
1552 /* Implementation of the -data-write-memory-bytes command.
1553
1554 ADDR: start address
1555 DATA: string of bytes to write at that address
1556 COUNT: number of bytes to be filled (decimal integer). */
1557
1558 void
1559 mi_cmd_data_write_memory_bytes (const char *command, char **argv, int argc)
1560 {
1561 CORE_ADDR addr;
1562 char *cdata;
1563 size_t len_hex, len_bytes, len_units, i, steps, remaining_units;
1564 long int count_units;
1565 int unit_size;
1566
1567 if (argc != 2 && argc != 3)
1568 error (_("Usage: ADDR DATA [COUNT]."));
1569
1570 addr = parse_and_eval_address (argv[0]);
1571 cdata = argv[1];
1572 len_hex = strlen (cdata);
1573 unit_size = gdbarch_addressable_memory_unit_size (get_current_arch ());
1574
1575 if (len_hex % (unit_size * 2) != 0)
1576 error (_("Hex-encoded '%s' must represent an integral number of "
1577 "addressable memory units."),
1578 cdata);
1579
1580 len_bytes = len_hex / 2;
1581 len_units = len_bytes / unit_size;
1582
1583 if (argc == 3)
1584 count_units = strtoul (argv[2], NULL, 10);
1585 else
1586 count_units = len_units;
1587
1588 gdb::byte_vector databuf (len_bytes);
1589
1590 for (i = 0; i < len_bytes; ++i)
1591 {
1592 int x;
1593 if (sscanf (cdata + i * 2, "%02x", &x) != 1)
1594 error (_("Invalid argument"));
1595 databuf[i] = (gdb_byte) x;
1596 }
1597
1598 gdb::byte_vector data;
1599 if (len_units < count_units)
1600 {
1601 /* Pattern is made of less units than count:
1602 repeat pattern to fill memory. */
1603 data = gdb::byte_vector (count_units * unit_size);
1604
1605 /* Number of times the pattern is entirely repeated. */
1606 steps = count_units / len_units;
1607 /* Number of remaining addressable memory units. */
1608 remaining_units = count_units % len_units;
1609 for (i = 0; i < steps; i++)
1610 memcpy (&data[i * len_bytes], &databuf[0], len_bytes);
1611
1612 if (remaining_units > 0)
1613 memcpy (&data[steps * len_bytes], &databuf[0],
1614 remaining_units * unit_size);
1615 }
1616 else
1617 {
1618 /* Pattern is longer than or equal to count:
1619 just copy count addressable memory units. */
1620 data = std::move (databuf);
1621 }
1622
1623 write_memory_with_notification (addr, data.data (), count_units);
1624 }
1625
1626 void
1627 mi_cmd_enable_timings (const char *command, char **argv, int argc)
1628 {
1629 if (argc == 0)
1630 do_timings = 1;
1631 else if (argc == 1)
1632 {
1633 if (strcmp (argv[0], "yes") == 0)
1634 do_timings = 1;
1635 else if (strcmp (argv[0], "no") == 0)
1636 do_timings = 0;
1637 else
1638 goto usage_error;
1639 }
1640 else
1641 goto usage_error;
1642
1643 return;
1644
1645 usage_error:
1646 error (_("-enable-timings: Usage: %s {yes|no}"), command);
1647 }
1648
1649 void
1650 mi_cmd_list_features (const char *command, char **argv, int argc)
1651 {
1652 if (argc == 0)
1653 {
1654 struct ui_out *uiout = current_uiout;
1655
1656 ui_out_emit_list list_emitter (uiout, "features");
1657 uiout->field_string (NULL, "frozen-varobjs");
1658 uiout->field_string (NULL, "pending-breakpoints");
1659 uiout->field_string (NULL, "thread-info");
1660 uiout->field_string (NULL, "data-read-memory-bytes");
1661 uiout->field_string (NULL, "breakpoint-notifications");
1662 uiout->field_string (NULL, "ada-task-info");
1663 uiout->field_string (NULL, "language-option");
1664 uiout->field_string (NULL, "info-gdb-mi-command");
1665 uiout->field_string (NULL, "undefined-command-error-code");
1666 uiout->field_string (NULL, "exec-run-start-option");
1667 uiout->field_string (NULL, "data-disassemble-a-option");
1668
1669 if (ext_lang_initialized_p (get_ext_lang_defn (EXT_LANG_PYTHON)))
1670 uiout->field_string (NULL, "python");
1671
1672 return;
1673 }
1674
1675 error (_("-list-features should be passed no arguments"));
1676 }
1677
1678 void
1679 mi_cmd_list_target_features (const char *command, char **argv, int argc)
1680 {
1681 if (argc == 0)
1682 {
1683 struct ui_out *uiout = current_uiout;
1684
1685 ui_out_emit_list list_emitter (uiout, "features");
1686 if (mi_async_p ())
1687 uiout->field_string (NULL, "async");
1688 if (target_can_execute_reverse ())
1689 uiout->field_string (NULL, "reverse");
1690 return;
1691 }
1692
1693 error (_("-list-target-features should be passed no arguments"));
1694 }
1695
1696 void
1697 mi_cmd_add_inferior (const char *command, char **argv, int argc)
1698 {
1699 struct inferior *inf;
1700
1701 if (argc != 0)
1702 error (_("-add-inferior should be passed no arguments"));
1703
1704 inf = add_inferior_with_spaces ();
1705
1706 current_uiout->field_fmt ("inferior", "i%d", inf->num);
1707 }
1708
1709 void
1710 mi_cmd_remove_inferior (const char *command, char **argv, int argc)
1711 {
1712 int id;
1713 struct inferior *inf_to_remove;
1714
1715 if (argc != 1)
1716 error (_("-remove-inferior should be passed a single argument"));
1717
1718 if (sscanf (argv[0], "i%d", &id) != 1)
1719 error (_("the thread group id is syntactically invalid"));
1720
1721 inf_to_remove = find_inferior_id (id);
1722 if (inf_to_remove == NULL)
1723 error (_("the specified thread group does not exist"));
1724
1725 if (inf_to_remove->pid != 0)
1726 error (_("cannot remove an active inferior"));
1727
1728 if (inf_to_remove == current_inferior ())
1729 {
1730 struct thread_info *tp = 0;
1731 struct inferior *new_inferior = NULL;
1732
1733 for (inferior *inf : all_inferiors ())
1734 {
1735 if (inf != inf_to_remove)
1736 new_inferior = inf;
1737 }
1738
1739 if (new_inferior == NULL)
1740 error (_("Cannot remove last inferior"));
1741
1742 set_current_inferior (new_inferior);
1743 if (new_inferior->pid != 0)
1744 tp = any_thread_of_inferior (new_inferior);
1745 if (tp != NULL)
1746 switch_to_thread (tp);
1747 else
1748 switch_to_no_thread ();
1749 set_current_program_space (new_inferior->pspace);
1750 }
1751
1752 delete_inferior (inf_to_remove);
1753 }
1754
1755 \f
1756
1757 /* Execute a command within a safe environment.
1758 Return <0 for error; >=0 for ok.
1759
1760 args->action will tell mi_execute_command what action
1761 to perform after the given command has executed (display/suppress
1762 prompt, display error). */
1763
1764 static void
1765 captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
1766 {
1767 struct mi_interp *mi = (struct mi_interp *) command_interp ();
1768
1769 if (do_timings)
1770 current_command_ts = context->cmd_start;
1771
1772 scoped_restore save_token = make_scoped_restore (&current_token,
1773 context->token);
1774
1775 running_result_record_printed = 0;
1776 mi_proceeded = 0;
1777 switch (context->op)
1778 {
1779 case MI_COMMAND:
1780 /* A MI command was read from the input stream. */
1781 if (mi_debug_p)
1782 /* FIXME: gdb_???? */
1783 fprintf_unfiltered (mi->raw_stdout,
1784 " token=`%s' command=`%s' args=`%s'\n",
1785 context->token, context->command, context->args);
1786
1787 mi_cmd_execute (context);
1788
1789 /* Print the result if there were no errors.
1790
1791 Remember that on the way out of executing a command, you have
1792 to directly use the mi_interp's uiout, since the command
1793 could have reset the interpreter, in which case the current
1794 uiout will most likely crash in the mi_out_* routines. */
1795 if (!running_result_record_printed)
1796 {
1797 fputs_unfiltered (context->token, mi->raw_stdout);
1798 /* There's no particularly good reason why target-connect results
1799 in not ^done. Should kill ^connected for MI3. */
1800 fputs_unfiltered (strcmp (context->command, "target-select") == 0
1801 ? "^connected" : "^done", mi->raw_stdout);
1802 mi_out_put (uiout, mi->raw_stdout);
1803 mi_out_rewind (uiout);
1804 mi_print_timing_maybe (mi->raw_stdout);
1805 fputs_unfiltered ("\n", mi->raw_stdout);
1806 }
1807 else
1808 /* The command does not want anything to be printed. In that
1809 case, the command probably should not have written anything
1810 to uiout, but in case it has written something, discard it. */
1811 mi_out_rewind (uiout);
1812 break;
1813
1814 case CLI_COMMAND:
1815 {
1816 char *argv[2];
1817
1818 /* A CLI command was read from the input stream. */
1819 /* This "feature" will be removed as soon as we have a
1820 complete set of mi commands. */
1821 /* Echo the command on the console. */
1822 fprintf_unfiltered (gdb_stdlog, "%s\n", context->command);
1823 /* Call the "console" interpreter. */
1824 argv[0] = (char *) INTERP_CONSOLE;
1825 argv[1] = context->command;
1826 mi_cmd_interpreter_exec ("-interpreter-exec", argv, 2);
1827
1828 /* If we changed interpreters, DON'T print out anything. */
1829 if (current_interp_named_p (INTERP_MI)
1830 || current_interp_named_p (INTERP_MI1)
1831 || current_interp_named_p (INTERP_MI2)
1832 || current_interp_named_p (INTERP_MI3))
1833 {
1834 if (!running_result_record_printed)
1835 {
1836 fputs_unfiltered (context->token, mi->raw_stdout);
1837 fputs_unfiltered ("^done", mi->raw_stdout);
1838 mi_out_put (uiout, mi->raw_stdout);
1839 mi_out_rewind (uiout);
1840 mi_print_timing_maybe (mi->raw_stdout);
1841 fputs_unfiltered ("\n", mi->raw_stdout);
1842 }
1843 else
1844 mi_out_rewind (uiout);
1845 }
1846 break;
1847 }
1848 }
1849 }
1850
1851 /* Print a gdb exception to the MI output stream. */
1852
1853 static void
1854 mi_print_exception (const char *token, const struct gdb_exception &exception)
1855 {
1856 struct mi_interp *mi = (struct mi_interp *) current_interpreter ();
1857
1858 fputs_unfiltered (token, mi->raw_stdout);
1859 fputs_unfiltered ("^error,msg=\"", mi->raw_stdout);
1860 if (exception.message == NULL)
1861 fputs_unfiltered ("unknown error", mi->raw_stdout);
1862 else
1863 fputstr_unfiltered (exception.what (), '"', mi->raw_stdout);
1864 fputs_unfiltered ("\"", mi->raw_stdout);
1865
1866 switch (exception.error)
1867 {
1868 case UNDEFINED_COMMAND_ERROR:
1869 fputs_unfiltered (",code=\"undefined-command\"", mi->raw_stdout);
1870 break;
1871 }
1872
1873 fputs_unfiltered ("\n", mi->raw_stdout);
1874 }
1875
1876 /* Determine whether the parsed command already notifies the
1877 user_selected_context_changed observer. */
1878
1879 static int
1880 command_notifies_uscc_observer (struct mi_parse *command)
1881 {
1882 if (command->op == CLI_COMMAND)
1883 {
1884 /* CLI commands "thread" and "inferior" already send it. */
1885 return (strncmp (command->command, "thread ", 7) == 0
1886 || strncmp (command->command, "inferior ", 9) == 0);
1887 }
1888 else /* MI_COMMAND */
1889 {
1890 if (strcmp (command->command, "interpreter-exec") == 0
1891 && command->argc > 1)
1892 {
1893 /* "thread" and "inferior" again, but through -interpreter-exec. */
1894 return (strncmp (command->argv[1], "thread ", 7) == 0
1895 || strncmp (command->argv[1], "inferior ", 9) == 0);
1896 }
1897
1898 else
1899 /* -thread-select already sends it. */
1900 return strcmp (command->command, "thread-select") == 0;
1901 }
1902 }
1903
1904 void
1905 mi_execute_command (const char *cmd, int from_tty)
1906 {
1907 char *token;
1908 std::unique_ptr<struct mi_parse> command;
1909
1910 /* This is to handle EOF (^D). We just quit gdb. */
1911 /* FIXME: we should call some API function here. */
1912 if (cmd == 0)
1913 quit_force (NULL, from_tty);
1914
1915 target_log_command (cmd);
1916
1917 try
1918 {
1919 command = mi_parse (cmd, &token);
1920 }
1921 catch (const gdb_exception &exception)
1922 {
1923 mi_print_exception (token, exception);
1924 xfree (token);
1925 }
1926
1927 if (command != NULL)
1928 {
1929 ptid_t previous_ptid = inferior_ptid;
1930
1931 gdb::optional<scoped_restore_tmpl<int>> restore_suppress;
1932
1933 if (command->cmd != NULL && command->cmd->suppress_notification != NULL)
1934 restore_suppress.emplace (command->cmd->suppress_notification, 1);
1935
1936 command->token = token;
1937
1938 if (do_timings)
1939 {
1940 command->cmd_start = new mi_timestamp ();
1941 timestamp (command->cmd_start);
1942 }
1943
1944 try
1945 {
1946 captured_mi_execute_command (current_uiout, command.get ());
1947 }
1948 catch (const gdb_exception &result)
1949 {
1950 /* Like in start_event_loop, enable input and force display
1951 of the prompt. Otherwise, any command that calls
1952 async_disable_stdin, and then throws, will leave input
1953 disabled. */
1954 async_enable_stdin ();
1955 current_ui->prompt_state = PROMPT_NEEDED;
1956
1957 /* The command execution failed and error() was called
1958 somewhere. */
1959 mi_print_exception (command->token, result);
1960 mi_out_rewind (current_uiout);
1961 }
1962
1963 bpstat_do_actions ();
1964
1965 if (/* The notifications are only output when the top-level
1966 interpreter (specified on the command line) is MI. */
1967 top_level_interpreter ()->interp_ui_out ()->is_mi_like_p ()
1968 /* Don't try report anything if there are no threads --
1969 the program is dead. */
1970 && any_thread_p ()
1971 /* If the command already reports the thread change, no need to do it
1972 again. */
1973 && !command_notifies_uscc_observer (command.get ()))
1974 {
1975 int report_change = 0;
1976
1977 if (command->thread == -1)
1978 {
1979 report_change = (previous_ptid != null_ptid
1980 && inferior_ptid != previous_ptid
1981 && inferior_ptid != null_ptid);
1982 }
1983 else if (inferior_ptid != null_ptid)
1984 {
1985 struct thread_info *ti = inferior_thread ();
1986
1987 report_change = (ti->global_num != command->thread);
1988 }
1989
1990 if (report_change)
1991 {
1992 gdb::observers::user_selected_context_changed.notify
1993 (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
1994 }
1995 }
1996 }
1997 }
1998
1999 static void
2000 mi_cmd_execute (struct mi_parse *parse)
2001 {
2002 scoped_value_mark cleanup = prepare_execute_command ();
2003
2004 if (parse->all && parse->thread_group != -1)
2005 error (_("Cannot specify --thread-group together with --all"));
2006
2007 if (parse->all && parse->thread != -1)
2008 error (_("Cannot specify --thread together with --all"));
2009
2010 if (parse->thread_group != -1 && parse->thread != -1)
2011 error (_("Cannot specify --thread together with --thread-group"));
2012
2013 if (parse->frame != -1 && parse->thread == -1)
2014 error (_("Cannot specify --frame without --thread"));
2015
2016 if (parse->thread_group != -1)
2017 {
2018 struct inferior *inf = find_inferior_id (parse->thread_group);
2019 struct thread_info *tp = 0;
2020
2021 if (!inf)
2022 error (_("Invalid thread group for the --thread-group option"));
2023
2024 set_current_inferior (inf);
2025 /* This behaviour means that if --thread-group option identifies
2026 an inferior with multiple threads, then a random one will be
2027 picked. This is not a problem -- frontend should always
2028 provide --thread if it wishes to operate on a specific
2029 thread. */
2030 if (inf->pid != 0)
2031 tp = any_live_thread_of_inferior (inf);
2032 if (tp != NULL)
2033 switch_to_thread (tp);
2034 else
2035 switch_to_no_thread ();
2036 set_current_program_space (inf->pspace);
2037 }
2038
2039 if (parse->thread != -1)
2040 {
2041 thread_info *tp = find_thread_global_id (parse->thread);
2042
2043 if (tp == NULL)
2044 error (_("Invalid thread id: %d"), parse->thread);
2045
2046 if (tp->state == THREAD_EXITED)
2047 error (_("Thread id: %d has terminated"), parse->thread);
2048
2049 switch_to_thread (tp);
2050 }
2051
2052 if (parse->frame != -1)
2053 {
2054 struct frame_info *fid;
2055 int frame = parse->frame;
2056
2057 fid = find_relative_frame (get_current_frame (), &frame);
2058 if (frame == 0)
2059 /* find_relative_frame was successful */
2060 select_frame (fid);
2061 else
2062 error (_("Invalid frame id: %d"), frame);
2063 }
2064
2065 gdb::optional<scoped_restore_current_language> lang_saver;
2066 if (parse->language != language_unknown)
2067 {
2068 lang_saver.emplace ();
2069 set_language (parse->language);
2070 }
2071
2072 current_context = parse;
2073
2074 if (parse->cmd->argv_func != NULL)
2075 {
2076 parse->cmd->argv_func (parse->command, parse->argv, parse->argc);
2077 }
2078 else if (parse->cmd->cli.cmd != 0)
2079 {
2080 /* FIXME: DELETE THIS. */
2081 /* The operation is still implemented by a cli command. */
2082 /* Must be a synchronous one. */
2083 mi_execute_cli_command (parse->cmd->cli.cmd, parse->cmd->cli.args_p,
2084 parse->args);
2085 }
2086 else
2087 {
2088 /* FIXME: DELETE THIS. */
2089 string_file stb;
2090
2091 stb.puts ("Undefined mi command: ");
2092 stb.putstr (parse->command, '"');
2093 stb.puts (" (missing implementation)");
2094
2095 error_stream (stb);
2096 }
2097 }
2098
2099 /* FIXME: This is just a hack so we can get some extra commands going.
2100 We don't want to channel things through the CLI, but call libgdb directly.
2101 Use only for synchronous commands. */
2102
2103 void
2104 mi_execute_cli_command (const char *cmd, int args_p, const char *args)
2105 {
2106 if (cmd != 0)
2107 {
2108 std::string run = cmd;
2109
2110 if (args_p)
2111 run = run + " " + args;
2112 if (mi_debug_p)
2113 /* FIXME: gdb_???? */
2114 fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n",
2115 cmd, run.c_str ());
2116 execute_command (run.c_str (), 0 /* from_tty */ );
2117 }
2118 }
2119
2120 void
2121 mi_execute_async_cli_command (const char *cli_command, char **argv, int argc)
2122 {
2123 std::string run = cli_command;
2124
2125 if (argc)
2126 run = run + " " + *argv;
2127 if (mi_async_p ())
2128 run += "&";
2129
2130 execute_command (run.c_str (), 0 /* from_tty */ );
2131 }
2132
2133 void
2134 mi_load_progress (const char *section_name,
2135 unsigned long sent_so_far,
2136 unsigned long total_section,
2137 unsigned long total_sent,
2138 unsigned long grand_total)
2139 {
2140 using namespace std::chrono;
2141 static steady_clock::time_point last_update;
2142 static char *previous_sect_name = NULL;
2143 int new_section;
2144 struct mi_interp *mi = (struct mi_interp *) current_interpreter ();
2145
2146 /* This function is called through deprecated_show_load_progress
2147 which means uiout may not be correct. Fix it for the duration
2148 of this function. */
2149
2150 std::unique_ptr<ui_out> uiout (mi_out_new (current_interpreter ()->name ()));
2151 if (uiout == nullptr)
2152 return;
2153
2154 scoped_restore save_uiout
2155 = make_scoped_restore (&current_uiout, uiout.get ());
2156
2157 new_section = (previous_sect_name ?
2158 strcmp (previous_sect_name, section_name) : 1);
2159 if (new_section)
2160 {
2161 xfree (previous_sect_name);
2162 previous_sect_name = xstrdup (section_name);
2163
2164 if (current_token)
2165 fputs_unfiltered (current_token, mi->raw_stdout);
2166 fputs_unfiltered ("+download", mi->raw_stdout);
2167 {
2168 ui_out_emit_tuple tuple_emitter (uiout.get (), NULL);
2169 uiout->field_string ("section", section_name);
2170 uiout->field_signed ("section-size", total_section);
2171 uiout->field_signed ("total-size", grand_total);
2172 }
2173 mi_out_put (uiout.get (), mi->raw_stdout);
2174 fputs_unfiltered ("\n", mi->raw_stdout);
2175 gdb_flush (mi->raw_stdout);
2176 }
2177
2178 steady_clock::time_point time_now = steady_clock::now ();
2179 if (time_now - last_update > milliseconds (500))
2180 {
2181 last_update = time_now;
2182 if (current_token)
2183 fputs_unfiltered (current_token, mi->raw_stdout);
2184 fputs_unfiltered ("+download", mi->raw_stdout);
2185 {
2186 ui_out_emit_tuple tuple_emitter (uiout.get (), NULL);
2187 uiout->field_string ("section", section_name);
2188 uiout->field_signed ("section-sent", sent_so_far);
2189 uiout->field_signed ("section-size", total_section);
2190 uiout->field_signed ("total-sent", total_sent);
2191 uiout->field_signed ("total-size", grand_total);
2192 }
2193 mi_out_put (uiout.get (), mi->raw_stdout);
2194 fputs_unfiltered ("\n", mi->raw_stdout);
2195 gdb_flush (mi->raw_stdout);
2196 }
2197 }
2198
2199 static void
2200 timestamp (struct mi_timestamp *tv)
2201 {
2202 using namespace std::chrono;
2203
2204 tv->wallclock = steady_clock::now ();
2205 run_time_clock::now (tv->utime, tv->stime);
2206 }
2207
2208 static void
2209 print_diff_now (struct ui_file *file, struct mi_timestamp *start)
2210 {
2211 struct mi_timestamp now;
2212
2213 timestamp (&now);
2214 print_diff (file, start, &now);
2215 }
2216
2217 void
2218 mi_print_timing_maybe (struct ui_file *file)
2219 {
2220 /* If the command is -enable-timing then do_timings may be true
2221 whilst current_command_ts is not initialized. */
2222 if (do_timings && current_command_ts)
2223 print_diff_now (file, current_command_ts);
2224 }
2225
2226 static void
2227 print_diff (struct ui_file *file, struct mi_timestamp *start,
2228 struct mi_timestamp *end)
2229 {
2230 using namespace std::chrono;
2231
2232 duration<double> wallclock = end->wallclock - start->wallclock;
2233 duration<double> utime = end->utime - start->utime;
2234 duration<double> stime = end->stime - start->stime;
2235
2236 fprintf_unfiltered
2237 (file,
2238 ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}",
2239 wallclock.count (), utime.count (), stime.count ());
2240 }
2241
2242 void
2243 mi_cmd_trace_define_variable (const char *command, char **argv, int argc)
2244 {
2245 LONGEST initval = 0;
2246 struct trace_state_variable *tsv;
2247 char *name = 0;
2248
2249 if (argc != 1 && argc != 2)
2250 error (_("Usage: -trace-define-variable VARIABLE [VALUE]"));
2251
2252 name = argv[0];
2253 if (*name++ != '$')
2254 error (_("Name of trace variable should start with '$'"));
2255
2256 validate_trace_state_variable_name (name);
2257
2258 tsv = find_trace_state_variable (name);
2259 if (!tsv)
2260 tsv = create_trace_state_variable (name);
2261
2262 if (argc == 2)
2263 initval = value_as_long (parse_and_eval (argv[1]));
2264
2265 tsv->initial_value = initval;
2266 }
2267
2268 void
2269 mi_cmd_trace_list_variables (const char *command, char **argv, int argc)
2270 {
2271 if (argc != 0)
2272 error (_("-trace-list-variables: no arguments allowed"));
2273
2274 tvariables_info_1 ();
2275 }
2276
2277 void
2278 mi_cmd_trace_find (const char *command, char **argv, int argc)
2279 {
2280 char *mode;
2281
2282 if (argc == 0)
2283 error (_("trace selection mode is required"));
2284
2285 mode = argv[0];
2286
2287 if (strcmp (mode, "none") == 0)
2288 {
2289 tfind_1 (tfind_number, -1, 0, 0, 0);
2290 return;
2291 }
2292
2293 check_trace_running (current_trace_status ());
2294
2295 if (strcmp (mode, "frame-number") == 0)
2296 {
2297 if (argc != 2)
2298 error (_("frame number is required"));
2299 tfind_1 (tfind_number, atoi (argv[1]), 0, 0, 0);
2300 }
2301 else if (strcmp (mode, "tracepoint-number") == 0)
2302 {
2303 if (argc != 2)
2304 error (_("tracepoint number is required"));
2305 tfind_1 (tfind_tp, atoi (argv[1]), 0, 0, 0);
2306 }
2307 else if (strcmp (mode, "pc") == 0)
2308 {
2309 if (argc != 2)
2310 error (_("PC is required"));
2311 tfind_1 (tfind_pc, 0, parse_and_eval_address (argv[1]), 0, 0);
2312 }
2313 else if (strcmp (mode, "pc-inside-range") == 0)
2314 {
2315 if (argc != 3)
2316 error (_("Start and end PC are required"));
2317 tfind_1 (tfind_range, 0, parse_and_eval_address (argv[1]),
2318 parse_and_eval_address (argv[2]), 0);
2319 }
2320 else if (strcmp (mode, "pc-outside-range") == 0)
2321 {
2322 if (argc != 3)
2323 error (_("Start and end PC are required"));
2324 tfind_1 (tfind_outside, 0, parse_and_eval_address (argv[1]),
2325 parse_and_eval_address (argv[2]), 0);
2326 }
2327 else if (strcmp (mode, "line") == 0)
2328 {
2329 if (argc != 2)
2330 error (_("Line is required"));
2331
2332 std::vector<symtab_and_line> sals
2333 = decode_line_with_current_source (argv[1],
2334 DECODE_LINE_FUNFIRSTLINE);
2335 const symtab_and_line &sal = sals[0];
2336
2337 if (sal.symtab == 0)
2338 error (_("Could not find the specified line"));
2339
2340 CORE_ADDR start_pc, end_pc;
2341 if (sal.line > 0 && find_line_pc_range (sal, &start_pc, &end_pc))
2342 tfind_1 (tfind_range, 0, start_pc, end_pc - 1, 0);
2343 else
2344 error (_("Could not find the specified line"));
2345 }
2346 else
2347 error (_("Invalid mode '%s'"), mode);
2348
2349 if (has_stack_frames () || get_traceframe_number () >= 0)
2350 print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS, 1);
2351 }
2352
2353 void
2354 mi_cmd_trace_save (const char *command, char **argv, int argc)
2355 {
2356 int target_saves = 0;
2357 int generate_ctf = 0;
2358 char *filename;
2359 int oind = 0;
2360 char *oarg;
2361
2362 enum opt
2363 {
2364 TARGET_SAVE_OPT, CTF_OPT
2365 };
2366 static const struct mi_opt opts[] =
2367 {
2368 {"r", TARGET_SAVE_OPT, 0},
2369 {"ctf", CTF_OPT, 0},
2370 { 0, 0, 0 }
2371 };
2372
2373 while (1)
2374 {
2375 int opt = mi_getopt ("-trace-save", argc, argv, opts,
2376 &oind, &oarg);
2377
2378 if (opt < 0)
2379 break;
2380 switch ((enum opt) opt)
2381 {
2382 case TARGET_SAVE_OPT:
2383 target_saves = 1;
2384 break;
2385 case CTF_OPT:
2386 generate_ctf = 1;
2387 break;
2388 }
2389 }
2390
2391 if (argc - oind != 1)
2392 error (_("Exactly one argument required "
2393 "(file in which to save trace data)"));
2394
2395 filename = argv[oind];
2396
2397 if (generate_ctf)
2398 trace_save_ctf (filename, target_saves);
2399 else
2400 trace_save_tfile (filename, target_saves);
2401 }
2402
2403 void
2404 mi_cmd_trace_start (const char *command, char **argv, int argc)
2405 {
2406 start_tracing (NULL);
2407 }
2408
2409 void
2410 mi_cmd_trace_status (const char *command, char **argv, int argc)
2411 {
2412 trace_status_mi (0);
2413 }
2414
2415 void
2416 mi_cmd_trace_stop (const char *command, char **argv, int argc)
2417 {
2418 stop_tracing (NULL);
2419 trace_status_mi (1);
2420 }
2421
2422 /* Implement the "-ada-task-info" command. */
2423
2424 void
2425 mi_cmd_ada_task_info (const char *command, char **argv, int argc)
2426 {
2427 if (argc != 0 && argc != 1)
2428 error (_("Invalid MI command"));
2429
2430 print_ada_task_info (current_uiout, argv[0], current_inferior ());
2431 }
2432
2433 /* Print EXPRESSION according to VALUES. */
2434
2435 static void
2436 print_variable_or_computed (const char *expression, enum print_values values)
2437 {
2438 struct value *val;
2439 struct type *type;
2440 struct ui_out *uiout = current_uiout;
2441
2442 string_file stb;
2443
2444 expression_up expr = parse_expression (expression);
2445
2446 if (values == PRINT_SIMPLE_VALUES)
2447 val = evaluate_type (expr.get ());
2448 else
2449 val = evaluate_expression (expr.get ());
2450
2451 gdb::optional<ui_out_emit_tuple> tuple_emitter;
2452 if (values != PRINT_NO_VALUES)
2453 tuple_emitter.emplace (uiout, nullptr);
2454 uiout->field_string ("name", expression);
2455
2456 switch (values)
2457 {
2458 case PRINT_SIMPLE_VALUES:
2459 type = check_typedef (value_type (val));
2460 type_print (value_type (val), "", &stb, -1);
2461 uiout->field_stream ("type", stb);
2462 if (type->code () != TYPE_CODE_ARRAY
2463 && type->code () != TYPE_CODE_STRUCT
2464 && type->code () != TYPE_CODE_UNION)
2465 {
2466 struct value_print_options opts;
2467
2468 get_no_prettyformat_print_options (&opts);
2469 opts.deref_ref = 1;
2470 common_val_print (val, &stb, 0, &opts, current_language);
2471 uiout->field_stream ("value", stb);
2472 }
2473 break;
2474 case PRINT_ALL_VALUES:
2475 {
2476 struct value_print_options opts;
2477
2478 get_no_prettyformat_print_options (&opts);
2479 opts.deref_ref = 1;
2480 common_val_print (val, &stb, 0, &opts, current_language);
2481 uiout->field_stream ("value", stb);
2482 }
2483 break;
2484 }
2485 }
2486
2487 /* Implement the "-trace-frame-collected" command. */
2488
2489 void
2490 mi_cmd_trace_frame_collected (const char *command, char **argv, int argc)
2491 {
2492 struct bp_location *tloc;
2493 int stepping_frame;
2494 struct collection_list *clist;
2495 struct collection_list tracepoint_list, stepping_list;
2496 struct traceframe_info *tinfo;
2497 int oind = 0;
2498 enum print_values var_print_values = PRINT_ALL_VALUES;
2499 enum print_values comp_print_values = PRINT_ALL_VALUES;
2500 int registers_format = 'x';
2501 int memory_contents = 0;
2502 struct ui_out *uiout = current_uiout;
2503 enum opt
2504 {
2505 VAR_PRINT_VALUES,
2506 COMP_PRINT_VALUES,
2507 REGISTERS_FORMAT,
2508 MEMORY_CONTENTS,
2509 };
2510 static const struct mi_opt opts[] =
2511 {
2512 {"-var-print-values", VAR_PRINT_VALUES, 1},
2513 {"-comp-print-values", COMP_PRINT_VALUES, 1},
2514 {"-registers-format", REGISTERS_FORMAT, 1},
2515 {"-memory-contents", MEMORY_CONTENTS, 0},
2516 { 0, 0, 0 }
2517 };
2518
2519 while (1)
2520 {
2521 char *oarg;
2522 int opt = mi_getopt ("-trace-frame-collected", argc, argv, opts,
2523 &oind, &oarg);
2524 if (opt < 0)
2525 break;
2526 switch ((enum opt) opt)
2527 {
2528 case VAR_PRINT_VALUES:
2529 var_print_values = mi_parse_print_values (oarg);
2530 break;
2531 case COMP_PRINT_VALUES:
2532 comp_print_values = mi_parse_print_values (oarg);
2533 break;
2534 case REGISTERS_FORMAT:
2535 registers_format = oarg[0];
2536 break;
2537 case MEMORY_CONTENTS:
2538 memory_contents = 1;
2539 break;
2540 }
2541 }
2542
2543 if (oind != argc)
2544 error (_("Usage: -trace-frame-collected "
2545 "[--var-print-values PRINT_VALUES] "
2546 "[--comp-print-values PRINT_VALUES] "
2547 "[--registers-format FORMAT]"
2548 "[--memory-contents]"));
2549
2550 /* This throws an error is not inspecting a trace frame. */
2551 tloc = get_traceframe_location (&stepping_frame);
2552
2553 /* This command only makes sense for the current frame, not the
2554 selected frame. */
2555 scoped_restore_current_thread restore_thread;
2556 select_frame (get_current_frame ());
2557
2558 encode_actions (tloc, &tracepoint_list, &stepping_list);
2559
2560 if (stepping_frame)
2561 clist = &stepping_list;
2562 else
2563 clist = &tracepoint_list;
2564
2565 tinfo = get_traceframe_info ();
2566
2567 /* Explicitly wholly collected variables. */
2568 {
2569 ui_out_emit_list list_emitter (uiout, "explicit-variables");
2570 const std::vector<std::string> &wholly_collected
2571 = clist->wholly_collected ();
2572 for (size_t i = 0; i < wholly_collected.size (); i++)
2573 {
2574 const std::string &str = wholly_collected[i];
2575 print_variable_or_computed (str.c_str (), var_print_values);
2576 }
2577 }
2578
2579 /* Computed expressions. */
2580 {
2581 ui_out_emit_list list_emitter (uiout, "computed-expressions");
2582
2583 const std::vector<std::string> &computed = clist->computed ();
2584 for (size_t i = 0; i < computed.size (); i++)
2585 {
2586 const std::string &str = computed[i];
2587 print_variable_or_computed (str.c_str (), comp_print_values);
2588 }
2589 }
2590
2591 /* Registers. Given pseudo-registers, and that some architectures
2592 (like MIPS) actually hide the raw registers, we don't go through
2593 the trace frame info, but instead consult the register cache for
2594 register availability. */
2595 {
2596 struct frame_info *frame;
2597 struct gdbarch *gdbarch;
2598 int regnum;
2599 int numregs;
2600
2601 ui_out_emit_list list_emitter (uiout, "registers");
2602
2603 frame = get_selected_frame (NULL);
2604 gdbarch = get_frame_arch (frame);
2605 numregs = gdbarch_num_cooked_regs (gdbarch);
2606
2607 for (regnum = 0; regnum < numregs; regnum++)
2608 {
2609 if (gdbarch_register_name (gdbarch, regnum) == NULL
2610 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
2611 continue;
2612
2613 output_register (frame, regnum, registers_format, 1);
2614 }
2615 }
2616
2617 /* Trace state variables. */
2618 {
2619 ui_out_emit_list list_emitter (uiout, "tvars");
2620
2621 for (int tvar : tinfo->tvars)
2622 {
2623 struct trace_state_variable *tsv;
2624
2625 tsv = find_trace_state_variable_by_number (tvar);
2626
2627 ui_out_emit_tuple tuple_emitter (uiout, NULL);
2628
2629 if (tsv != NULL)
2630 {
2631 uiout->field_fmt ("name", "$%s", tsv->name.c_str ());
2632
2633 tsv->value_known = target_get_trace_state_variable_value (tsv->number,
2634 &tsv->value);
2635 uiout->field_signed ("current", tsv->value);
2636 }
2637 else
2638 {
2639 uiout->field_skip ("name");
2640 uiout->field_skip ("current");
2641 }
2642 }
2643 }
2644
2645 /* Memory. */
2646 {
2647 std::vector<mem_range> available_memory;
2648
2649 traceframe_available_memory (&available_memory, 0, ULONGEST_MAX);
2650
2651 ui_out_emit_list list_emitter (uiout, "memory");
2652
2653 for (const mem_range &r : available_memory)
2654 {
2655 struct gdbarch *gdbarch = target_gdbarch ();
2656
2657 ui_out_emit_tuple tuple_emitter (uiout, NULL);
2658
2659 uiout->field_core_addr ("address", gdbarch, r.start);
2660 uiout->field_signed ("length", r.length);
2661
2662 gdb::byte_vector data (r.length);
2663
2664 if (memory_contents)
2665 {
2666 if (target_read_memory (r.start, data.data (), r.length) == 0)
2667 {
2668 std::string data_str = bin2hex (data.data (), r.length);
2669 uiout->field_string ("contents", data_str.c_str ());
2670 }
2671 else
2672 uiout->field_skip ("contents");
2673 }
2674 }
2675 }
2676 }
2677
2678 /* See mi/mi-main.h. */
2679
2680 void
2681 mi_cmd_fix_multi_location_breakpoint_output (const char *command, char **argv,
2682 int argc)
2683 {
2684 fix_multi_location_breakpoint_output_globally = true;
2685 }
2686
2687 /* Implement the "-complete" command. */
2688
2689 void
2690 mi_cmd_complete (const char *command, char **argv, int argc)
2691 {
2692 if (argc != 1)
2693 error (_("Usage: -complete COMMAND"));
2694
2695 if (max_completions == 0)
2696 error (_("max-completions is zero, completion is disabled."));
2697
2698 int quote_char = '\0';
2699 const char *word;
2700
2701 completion_result result = complete (argv[0], &word, &quote_char);
2702
2703 std::string arg_prefix (argv[0], word - argv[0]);
2704
2705 struct ui_out *uiout = current_uiout;
2706
2707 if (result.number_matches > 0)
2708 uiout->field_fmt ("completion", "%s%s",
2709 arg_prefix.c_str (),result.match_list[0]);
2710
2711 {
2712 ui_out_emit_list completions_emitter (uiout, "matches");
2713
2714 if (result.number_matches == 1)
2715 uiout->field_fmt (NULL, "%s%s",
2716 arg_prefix.c_str (), result.match_list[0]);
2717 else
2718 {
2719 result.sort_match_list ();
2720 for (size_t i = 0; i < result.number_matches; i++)
2721 {
2722 uiout->field_fmt (NULL, "%s%s",
2723 arg_prefix.c_str (), result.match_list[i + 1]);
2724 }
2725 }
2726 }
2727 uiout->field_string ("max_completions_reached",
2728 result.number_matches == max_completions ? "1" : "0");
2729 }
2730
2731
2732 void _initialize_mi_main ();
2733 void
2734 _initialize_mi_main ()
2735 {
2736 struct cmd_list_element *c;
2737
2738 add_setshow_boolean_cmd ("mi-async", class_run,
2739 &mi_async_1, _("\
2740 Set whether MI asynchronous mode is enabled."), _("\
2741 Show whether MI asynchronous mode is enabled."), _("\
2742 Tells GDB whether MI should be in asynchronous mode."),
2743 set_mi_async_command,
2744 show_mi_async_command,
2745 &setlist,
2746 &showlist);
2747
2748 /* Alias old "target-async" to "mi-async". */
2749 c = add_alias_cmd ("target-async", "mi-async", class_run, 0, &setlist);
2750 deprecate_cmd (c, "set mi-async");
2751 c = add_alias_cmd ("target-async", "mi-async", class_run, 0, &showlist);
2752 deprecate_cmd (c, "show mi-async");
2753 }
This page took 0.088593 seconds and 4 git commands to generate.