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