3 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007
4 Free Software Foundation, Inc.
6 Contributed by Cygnus Solutions (a Red Hat company).
8 This file is part of GDB.
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin Street, Fifth Floor,
23 Boston, MA 02110-1301, USA. */
25 /* Work in progress. */
30 #include "gdb_string.h"
31 #include "exceptions.h"
33 #include "gdbthread.h"
36 #include "mi-getopt.h"
37 #include "mi-console.h"
41 #include "event-loop.h"
42 #include "event-top.h"
43 #include "gdbcore.h" /* For write_memory(). */
53 #if defined HAVE_SYS_RESOURCE_H
54 #include <sys/resource.h>
66 /* Enumerations of the actions that may result from calling
67 captured_mi_execute_command. */
69 enum captured_mi_execute_command_actions
71 EXECUTE_COMMAND_DISPLAY_PROMPT,
72 EXECUTE_COMMAND_SUPRESS_PROMPT
75 /* This structure is used to pass information from captured_mi_execute_command
76 to mi_execute_command. */
77 struct captured_mi_execute_command_args
79 /* This return result of the MI command (output). */
80 enum mi_cmd_result rc;
82 /* What action to perform when the call is finished (output). */
83 enum captured_mi_execute_command_actions action;
85 /* The command context to be executed (input). */
86 struct mi_parse *command;
90 struct ui_file *raw_stdout;
92 /* This is used to pass the current command timestamp
93 down to continuation routines. */
94 static struct mi_timestamp *current_command_ts;
96 static int do_timings = 0;
98 /* The token of the last asynchronous command. */
99 static char *last_async_command;
100 static char *previous_async_command;
101 char *mi_error_message;
103 extern void _initialize_mi_main (void);
104 static enum mi_cmd_result mi_cmd_execute (struct mi_parse *parse);
106 static void mi_execute_cli_command (const char *cmd, int args_p,
108 static enum mi_cmd_result mi_execute_async_cli_command (char *mi, char *args, int from_tty);
110 static void mi_exec_async_cli_cmd_continuation (struct continuation_arg *arg);
112 static int register_changed_p (int regnum, struct regcache *,
114 static int get_register (int regnum, int format);
116 /* Command implementations. FIXME: Is this libgdb? No. This is the MI
117 layer that calls libgdb. Any operation used in the below should be
120 static void timestamp (struct mi_timestamp *tv);
122 static void print_diff_now (struct mi_timestamp *start);
123 static void print_diff (struct mi_timestamp *start, struct mi_timestamp *end);
126 mi_cmd_gdb_exit (char *command, char **argv, int argc)
128 /* We have to print everything right here because we never return. */
129 if (last_async_command)
130 fputs_unfiltered (last_async_command, raw_stdout);
131 fputs_unfiltered ("^exit\n", raw_stdout);
132 mi_out_put (uiout, raw_stdout);
133 /* FIXME: The function called is not yet a formal libgdb function. */
134 quit_force (NULL, FROM_TTY);
139 mi_cmd_exec_run (char *args, int from_tty)
141 /* FIXME: Should call a libgdb function, not a cli wrapper. */
142 return mi_execute_async_cli_command ("run", args, from_tty);
146 mi_cmd_exec_next (char *args, int from_tty)
148 /* FIXME: Should call a libgdb function, not a cli wrapper. */
149 return mi_execute_async_cli_command ("next", args, from_tty);
153 mi_cmd_exec_next_instruction (char *args, int from_tty)
155 /* FIXME: Should call a libgdb function, not a cli wrapper. */
156 return mi_execute_async_cli_command ("nexti", args, from_tty);
160 mi_cmd_exec_step (char *args, int from_tty)
162 /* FIXME: Should call a libgdb function, not a cli wrapper. */
163 return mi_execute_async_cli_command ("step", args, from_tty);
167 mi_cmd_exec_step_instruction (char *args, int from_tty)
169 /* FIXME: Should call a libgdb function, not a cli wrapper. */
170 return mi_execute_async_cli_command ("stepi", args, from_tty);
174 mi_cmd_exec_finish (char *args, int from_tty)
176 /* FIXME: Should call a libgdb function, not a cli wrapper. */
177 return mi_execute_async_cli_command ("finish", args, from_tty);
181 mi_cmd_exec_until (char *args, int from_tty)
183 /* FIXME: Should call a libgdb function, not a cli wrapper. */
184 return mi_execute_async_cli_command ("until", args, from_tty);
188 mi_cmd_exec_return (char *args, int from_tty)
190 /* This command doesn't really execute the target, it just pops the
191 specified number of frames. */
193 /* Call return_command with from_tty argument equal to 0 so as to
194 avoid being queried. */
195 return_command (args, 0);
197 /* Call return_command with from_tty argument equal to 0 so as to
198 avoid being queried. */
199 return_command (NULL, 0);
201 /* Because we have called return_command with from_tty = 0, we need
202 to print the frame here. */
203 print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS);
209 mi_cmd_exec_continue (char *args, int from_tty)
211 /* FIXME: Should call a libgdb function, not a cli wrapper. */
212 return mi_execute_async_cli_command ("continue", args, from_tty);
215 /* Interrupt the execution of the target. Note how we must play around
216 with the token variables, in order to display the current token in
217 the result of the interrupt command, and the previous execution
218 token when the target finally stops. See comments in
221 mi_cmd_exec_interrupt (char *args, int from_tty)
223 if (!target_executing)
225 mi_error_message = xstrprintf ("mi_cmd_exec_interrupt: Inferior not executing.");
228 interrupt_target_command (args, from_tty);
229 if (last_async_command)
230 fputs_unfiltered (last_async_command, raw_stdout);
231 fputs_unfiltered ("^done", raw_stdout);
232 xfree (last_async_command);
233 if (previous_async_command)
234 last_async_command = xstrdup (previous_async_command);
235 xfree (previous_async_command);
236 previous_async_command = NULL;
237 mi_out_put (uiout, raw_stdout);
238 mi_out_rewind (uiout);
239 fputs_unfiltered ("\n", raw_stdout);
244 mi_cmd_thread_select (char *command, char **argv, int argc)
250 mi_error_message = xstrprintf ("mi_cmd_thread_select: USAGE: threadnum.");
254 rc = gdb_thread_select (uiout, argv[0], &mi_error_message);
256 if (rc == GDB_RC_FAIL)
263 mi_cmd_thread_list_ids (char *command, char **argv, int argc)
269 mi_error_message = xstrprintf ("mi_cmd_thread_list_ids: No arguments required.");
273 rc = gdb_list_thread_ids (uiout, &mi_error_message);
275 if (rc == GDB_RC_FAIL)
282 mi_cmd_data_list_register_names (char *command, char **argv, int argc)
286 struct cleanup *cleanup;
288 /* Note that the test for a valid register must include checking the
289 gdbarch_register_name because gdbarch_num_regs may be allocated for
290 the union of the register sets within a family of related processors.
291 In this case, some entries of gdbarch_register_name will change depending
292 upon the particular processor being debugged. */
294 numregs = gdbarch_num_regs (current_gdbarch)
295 + gdbarch_num_pseudo_regs (current_gdbarch);
297 cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-names");
299 if (argc == 0) /* No args, just do all the regs. */
305 if (gdbarch_register_name (current_gdbarch, regnum) == NULL
306 || *(gdbarch_register_name (current_gdbarch, regnum)) == '\0')
307 ui_out_field_string (uiout, NULL, "");
309 ui_out_field_string (uiout, NULL,
310 gdbarch_register_name
311 (current_gdbarch, regnum));
315 /* Else, list of register #s, just do listed regs. */
316 for (i = 0; i < argc; i++)
318 regnum = atoi (argv[i]);
319 if (regnum < 0 || regnum >= numregs)
321 do_cleanups (cleanup);
322 mi_error_message = xstrprintf ("bad register number");
325 if (gdbarch_register_name (current_gdbarch, regnum) == NULL
326 || *(gdbarch_register_name (current_gdbarch, regnum)) == '\0')
327 ui_out_field_string (uiout, NULL, "");
329 ui_out_field_string (uiout, NULL,
330 gdbarch_register_name (current_gdbarch, regnum));
332 do_cleanups (cleanup);
337 mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
339 static struct regcache *this_regs = NULL;
340 struct regcache *prev_regs;
341 int regnum, numregs, changed;
343 struct cleanup *cleanup;
345 /* The last time we visited this function, the current frame's register
346 contents were saved in THIS_REGS. Move THIS_REGS over to PREV_REGS,
347 and refresh THIS_REGS with the now-current register contents. */
349 prev_regs = this_regs;
350 this_regs = frame_save_as_regcache (get_selected_frame (NULL));
351 cleanup = make_cleanup_regcache_xfree (prev_regs);
353 /* Note that the test for a valid register must include checking the
354 gdbarch_register_name because gdbarch_num_regs may be allocated for
355 the union of the register sets within a family of related processors.
356 In this case, some entries of gdbarch_register_name will change depending
357 upon the particular processor being debugged. */
359 numregs = gdbarch_num_regs (current_gdbarch)
360 + gdbarch_num_pseudo_regs (current_gdbarch);
362 make_cleanup_ui_out_list_begin_end (uiout, "changed-registers");
364 if (argc == 0) /* No args, just do all the regs. */
370 if (gdbarch_register_name (current_gdbarch, regnum) == NULL
371 || *(gdbarch_register_name (current_gdbarch, regnum)) == '\0')
373 changed = register_changed_p (regnum, prev_regs, this_regs);
376 do_cleanups (cleanup);
377 mi_error_message = xstrprintf ("mi_cmd_data_list_changed_registers: Unable to read register contents.");
381 ui_out_field_int (uiout, NULL, regnum);
385 /* Else, list of register #s, just do listed regs. */
386 for (i = 0; i < argc; i++)
388 regnum = atoi (argv[i]);
392 && gdbarch_register_name (current_gdbarch, regnum) != NULL
393 && *gdbarch_register_name (current_gdbarch, regnum) != '\000')
395 changed = register_changed_p (regnum, prev_regs, this_regs);
398 do_cleanups (cleanup);
399 mi_error_message = xstrprintf ("mi_cmd_data_list_register_change: Unable to read register contents.");
403 ui_out_field_int (uiout, NULL, regnum);
407 do_cleanups (cleanup);
408 mi_error_message = xstrprintf ("bad register number");
412 do_cleanups (cleanup);
417 register_changed_p (int regnum, struct regcache *prev_regs,
418 struct regcache *this_regs)
420 struct gdbarch *gdbarch = get_regcache_arch (this_regs);
421 gdb_byte prev_buffer[MAX_REGISTER_SIZE];
422 gdb_byte this_buffer[MAX_REGISTER_SIZE];
424 /* Registers not valid in this frame return count as unchanged. */
425 if (!regcache_valid_p (this_regs, regnum))
428 /* First time through or after gdbarch change consider all registers as
429 changed. Same for registers not valid in the previous frame. */
430 if (!prev_regs || get_regcache_arch (prev_regs) != gdbarch
431 || !regcache_valid_p (prev_regs, regnum))
434 /* Get register contents and compare. */
435 regcache_cooked_read (prev_regs, regnum, prev_buffer);
436 regcache_cooked_read (this_regs, regnum, this_buffer);
438 return memcmp (prev_buffer, this_buffer,
439 register_size (gdbarch, regnum)) != 0;
442 /* Return a list of register number and value pairs. The valid
443 arguments expected are: a letter indicating the format in which to
444 display the registers contents. This can be one of: x (hexadecimal), d
445 (decimal), N (natural), t (binary), o (octal), r (raw). After the
446 format argumetn there can be a sequence of numbers, indicating which
447 registers to fetch the content of. If the format is the only argument,
448 a list of all the registers with their values is returned. */
450 mi_cmd_data_list_register_values (char *command, char **argv, int argc)
452 int regnum, numregs, format, result;
454 struct cleanup *list_cleanup, *tuple_cleanup;
456 /* Note that the test for a valid register must include checking the
457 gdbarch_register_name because gdbarch_num_regs may be allocated for
458 the union of the register sets within a family of related processors.
459 In this case, some entries of gdbarch_register_name will change depending
460 upon the particular processor being debugged. */
462 numregs = gdbarch_num_regs (current_gdbarch)
463 + gdbarch_num_pseudo_regs (current_gdbarch);
467 mi_error_message = xstrprintf ("mi_cmd_data_list_register_values: Usage: -data-list-register-values <format> [<regnum1>...<regnumN>]");
471 format = (int) argv[0][0];
473 list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-values");
475 if (argc == 1) /* No args, beside the format: do all the regs. */
481 if (gdbarch_register_name (current_gdbarch, regnum) == NULL
482 || *(gdbarch_register_name (current_gdbarch, regnum)) == '\0')
484 tuple_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
485 ui_out_field_int (uiout, "number", regnum);
486 result = get_register (regnum, format);
489 do_cleanups (list_cleanup);
492 do_cleanups (tuple_cleanup);
496 /* Else, list of register #s, just do listed regs. */
497 for (i = 1; i < argc; i++)
499 regnum = atoi (argv[i]);
503 && gdbarch_register_name (current_gdbarch, regnum) != NULL
504 && *gdbarch_register_name (current_gdbarch, regnum) != '\000')
506 tuple_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
507 ui_out_field_int (uiout, "number", regnum);
508 result = get_register (regnum, format);
511 do_cleanups (list_cleanup);
514 do_cleanups (tuple_cleanup);
518 do_cleanups (list_cleanup);
519 mi_error_message = xstrprintf ("bad register number");
523 do_cleanups (list_cleanup);
527 /* Output one register's contents in the desired format. */
529 get_register (int regnum, int format)
531 gdb_byte buffer[MAX_REGISTER_SIZE];
536 static struct ui_stream *stb = NULL;
538 stb = ui_out_stream_new (uiout);
543 frame_register (get_selected_frame (NULL), regnum, &optim, &lval, &addr,
548 mi_error_message = xstrprintf ("Optimized out");
555 char *ptr, buf[1024];
559 for (j = 0; j < register_size (current_gdbarch, regnum); j++)
561 int idx = gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG ? j
562 : register_size (current_gdbarch, regnum) - 1 - j;
563 sprintf (ptr, "%02x", (unsigned char) buffer[idx]);
566 ui_out_field_string (uiout, "value", buf);
567 /*fputs_filtered (buf, gdb_stdout); */
571 val_print (register_type (current_gdbarch, regnum), buffer, 0, 0,
572 stb->stream, format, 1, 0, Val_pretty_default);
573 ui_out_field_stream (uiout, "value", stb);
574 ui_out_stream_delete (stb);
579 /* Write given values into registers. The registers and values are
580 given as pairs. The corresponding MI command is
581 -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]*/
583 mi_cmd_data_write_register_values (char *command, char **argv, int argc)
588 /* Note that the test for a valid register must include checking the
589 gdbarch_register_name because gdbarch_num_regs may be allocated for
590 the union of the register sets within a family of related processors.
591 In this case, some entries of gdbarch_register_name will change depending
592 upon the particular processor being debugged. */
594 numregs = gdbarch_num_regs (current_gdbarch)
595 + gdbarch_num_pseudo_regs (current_gdbarch);
599 mi_error_message = xstrprintf ("mi_cmd_data_write_register_values: Usage: -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]");
603 format = (int) argv[0][0];
605 if (!target_has_registers)
607 mi_error_message = xstrprintf ("mi_cmd_data_write_register_values: No registers.");
613 mi_error_message = xstrprintf ("mi_cmd_data_write_register_values: No regs and values specified.");
619 mi_error_message = xstrprintf ("mi_cmd_data_write_register_values: Regs and vals are not in pairs.");
623 for (i = 1; i < argc; i = i + 2)
625 int regnum = atoi (argv[i]);
627 if (regnum >= 0 && regnum < numregs
628 && gdbarch_register_name (current_gdbarch, regnum)
629 && *gdbarch_register_name (current_gdbarch, regnum))
633 /* Get the value as a number. */
634 value = parse_and_eval_address (argv[i + 1]);
637 regcache_cooked_write_signed (current_regcache, regnum, value);
641 mi_error_message = xstrprintf ("bad register number");
649 /* This is commented out because we decided it was not useful. I leave
650 it, just in case. ezannoni:1999-12-08 */
652 /* Assign a value to a variable. The expression argument must be in
653 the form A=2 or "A = 2" i.e. if there are spaces it needs to be
656 mi_cmd_data_assign (char *command, char **argv, int argc)
658 struct expression *expr;
659 struct cleanup *old_chain;
663 mi_error_message = xstrprintf ("mi_cmd_data_assign: Usage: -data-assign expression");
667 /* NOTE what follows is a clone of set_command(). FIXME: ezannoni
668 01-12-1999: Need to decide what to do with this for libgdb purposes. */
670 expr = parse_expression (argv[0]);
671 old_chain = make_cleanup (free_current_contents, &expr);
672 evaluate_expression (expr);
673 do_cleanups (old_chain);
678 /* Evaluate the value of the argument. The argument is an
679 expression. If the expression contains spaces it needs to be
680 included in double quotes. */
682 mi_cmd_data_evaluate_expression (char *command, char **argv, int argc)
684 struct expression *expr;
685 struct cleanup *old_chain = NULL;
687 struct ui_stream *stb = NULL;
689 stb = ui_out_stream_new (uiout);
693 mi_error_message = xstrprintf ("mi_cmd_data_evaluate_expression: Usage: -data-evaluate-expression expression");
697 expr = parse_expression (argv[0]);
699 old_chain = make_cleanup (free_current_contents, &expr);
701 val = evaluate_expression (expr);
703 /* Print the result of the expression evaluation. */
704 val_print (value_type (val), value_contents (val),
705 value_embedded_offset (val), VALUE_ADDRESS (val),
706 stb->stream, 0, 0, 0, 0);
708 ui_out_field_stream (uiout, "value", stb);
709 ui_out_stream_delete (stb);
711 do_cleanups (old_chain);
717 mi_cmd_target_download (char *args, int from_tty)
720 struct cleanup *old_cleanups = NULL;
722 run = xstrprintf ("load %s", args);
723 old_cleanups = make_cleanup (xfree, run);
724 execute_command (run, from_tty);
726 do_cleanups (old_cleanups);
730 /* Connect to the remote target. */
732 mi_cmd_target_select (char *args, int from_tty)
735 struct cleanup *old_cleanups = NULL;
737 run = xstrprintf ("target %s", args);
738 old_cleanups = make_cleanup (xfree, run);
740 /* target-select is always synchronous. Once the call has returned
741 we know that we are connected. */
742 /* NOTE: At present all targets that are connected are also
743 (implicitly) talking to a halted target. In the future this may
745 execute_command (run, from_tty);
747 do_cleanups (old_cleanups);
749 /* Issue the completion message here. */
750 if (last_async_command)
751 fputs_unfiltered (last_async_command, raw_stdout);
752 fputs_unfiltered ("^connected", raw_stdout);
753 mi_out_put (uiout, raw_stdout);
754 mi_out_rewind (uiout);
755 fputs_unfiltered ("\n", raw_stdout);
756 do_exec_cleanups (ALL_CLEANUPS);
762 ADDR: start address of data to be dumped.
763 WORD-FORMAT: a char indicating format for the ``word''. See
765 WORD-SIZE: size of each ``word''; 1,2,4, or 8 bytes.
766 NR_ROW: Number of rows.
767 NR_COL: The number of colums (words per row).
768 ASCHAR: (OPTIONAL) Append an ascii character dump to each row. Use
769 ASCHAR for unprintable characters.
771 Reads SIZE*NR_ROW*NR_COL bytes starting at ADDR from memory and
772 displayes them. Returns:
774 {addr="...",rowN={wordN="..." ,... [,ascii="..."]}, ...}
777 The number of bytes read is SIZE*ROW*COL. */
780 mi_cmd_data_read_memory (char *command, char **argv, int argc)
782 struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
788 struct type *word_type;
801 static struct mi_opt opts[] =
803 {"o", OFFSET_OPT, 1},
809 int opt = mi_getopt ("mi_cmd_data_read_memory", argc, argv, opts,
813 switch ((enum opt) opt)
816 offset = atol (optarg);
823 if (argc < 5 || argc > 6)
825 mi_error_message = xstrprintf ("mi_cmd_data_read_memory: Usage: ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS [ASCHAR].");
829 /* Extract all the arguments. */
831 /* Start address of the memory dump. */
832 addr = parse_and_eval_address (argv[0]) + offset;
833 /* The format character to use when displaying a memory word. See
834 the ``x'' command. */
835 word_format = argv[1][0];
836 /* The size of the memory word. */
837 word_size = atol (argv[2]);
841 word_type = builtin_type_int8;
845 word_type = builtin_type_int16;
849 word_type = builtin_type_int32;
853 word_type = builtin_type_int64;
857 word_type = builtin_type_int8;
860 /* The number of rows. */
861 nr_rows = atol (argv[3]);
864 mi_error_message = xstrprintf ("mi_cmd_data_read_memory: invalid number of rows.");
867 /* Number of bytes per row. */
868 nr_cols = atol (argv[4]);
871 mi_error_message = xstrprintf ("mi_cmd_data_read_memory: invalid number of columns.");
874 /* The un-printable character when printing ascii. */
880 /* Create a buffer and read it in. */
881 total_bytes = word_size * nr_rows * nr_cols;
882 mbuf = xcalloc (total_bytes, 1);
883 make_cleanup (xfree, mbuf);
885 nr_bytes = target_read (¤t_target, TARGET_OBJECT_MEMORY, NULL,
886 mbuf, addr, total_bytes);
889 do_cleanups (cleanups);
890 mi_error_message = xstrdup ("Unable to read memory.");
894 /* Output the header information. */
895 ui_out_field_core_addr (uiout, "addr", addr);
896 ui_out_field_int (uiout, "nr-bytes", nr_bytes);
897 ui_out_field_int (uiout, "total-bytes", total_bytes);
898 ui_out_field_core_addr (uiout, "next-row", addr + word_size * nr_cols);
899 ui_out_field_core_addr (uiout, "prev-row", addr - word_size * nr_cols);
900 ui_out_field_core_addr (uiout, "next-page", addr + total_bytes);
901 ui_out_field_core_addr (uiout, "prev-page", addr - total_bytes);
903 /* Build the result as a two dimentional table. */
905 struct ui_stream *stream = ui_out_stream_new (uiout);
906 struct cleanup *cleanup_list_memory;
909 cleanup_list_memory = make_cleanup_ui_out_list_begin_end (uiout, "memory");
910 for (row = 0, row_byte = 0;
912 row++, row_byte += nr_cols * word_size)
916 struct cleanup *cleanup_tuple;
917 struct cleanup *cleanup_list_data;
918 cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
919 ui_out_field_core_addr (uiout, "addr", addr + row_byte);
920 /* ui_out_field_core_addr_symbolic (uiout, "saddr", addr + row_byte); */
921 cleanup_list_data = make_cleanup_ui_out_list_begin_end (uiout, "data");
922 for (col = 0, col_byte = row_byte;
924 col++, col_byte += word_size)
926 if (col_byte + word_size > nr_bytes)
928 ui_out_field_string (uiout, NULL, "N/A");
932 ui_file_rewind (stream->stream);
933 print_scalar_formatted (mbuf + col_byte, word_type, word_format,
934 word_asize, stream->stream);
935 ui_out_field_stream (uiout, NULL, stream);
938 do_cleanups (cleanup_list_data);
942 ui_file_rewind (stream->stream);
943 for (byte = row_byte; byte < row_byte + word_size * nr_cols; byte++)
945 if (byte >= nr_bytes)
947 fputc_unfiltered ('X', stream->stream);
949 else if (mbuf[byte] < 32 || mbuf[byte] > 126)
951 fputc_unfiltered (aschar, stream->stream);
954 fputc_unfiltered (mbuf[byte], stream->stream);
956 ui_out_field_stream (uiout, "ascii", stream);
958 do_cleanups (cleanup_tuple);
960 ui_out_stream_delete (stream);
961 do_cleanups (cleanup_list_memory);
963 do_cleanups (cleanups);
967 /* DATA-MEMORY-WRITE:
969 COLUMN_OFFSET: optional argument. Must be preceeded by '-o'. The
970 offset from the beginning of the memory grid row where the cell to
972 ADDR: start address of the row in the memory grid where the memory
973 cell is, if OFFSET_COLUMN is specified. Otherwise, the address of
974 the location to write to.
975 FORMAT: a char indicating format for the ``word''. See
977 WORD_SIZE: size of each ``word''; 1,2,4, or 8 bytes
978 VALUE: value to be written into the memory address.
980 Writes VALUE into ADDR + (COLUMN_OFFSET * WORD_SIZE).
984 mi_cmd_data_write_memory (char *command, char **argv, int argc)
989 /* FIXME: ezannoni 2000-02-17 LONGEST could possibly not be big
990 enough when using a compiler other than GCC. */
993 struct cleanup *old_chain;
1001 static struct mi_opt opts[] =
1003 {"o", OFFSET_OPT, 1},
1009 int opt = mi_getopt ("mi_cmd_data_write_memory", argc, argv, opts,
1013 switch ((enum opt) opt)
1016 offset = atol (optarg);
1025 mi_error_message = xstrprintf ("mi_cmd_data_write_memory: Usage: [-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE.");
1026 return MI_CMD_ERROR;
1029 /* Extract all the arguments. */
1030 /* Start address of the memory dump. */
1031 addr = parse_and_eval_address (argv[0]);
1032 /* The format character to use when displaying a memory word. See
1033 the ``x'' command. */
1034 word_format = argv[1][0];
1035 /* The size of the memory word. */
1036 word_size = atol (argv[2]);
1038 /* Calculate the real address of the write destination. */
1039 addr += (offset * word_size);
1041 /* Get the value as a number. */
1042 value = parse_and_eval_address (argv[3]);
1043 /* Get the value into an array. */
1044 buffer = xmalloc (word_size);
1045 old_chain = make_cleanup (xfree, buffer);
1046 store_signed_integer (buffer, word_size, value);
1047 /* Write it down to memory. */
1048 write_memory (addr, buffer, word_size);
1049 /* Free the buffer. */
1050 do_cleanups (old_chain);
1056 mi_cmd_enable_timings (char *command, char **argv, int argc)
1062 if (strcmp (argv[0], "yes") == 0)
1064 else if (strcmp (argv[0], "no") == 0)
1075 error ("mi_cmd_enable_timings: Usage: %s {yes|no}", command);
1076 return MI_CMD_ERROR;
1079 /* Execute a command within a safe environment.
1080 Return <0 for error; >=0 for ok.
1082 args->action will tell mi_execute_command what action
1083 to perfrom after the given command has executed (display/supress
1084 prompt, display error). */
1087 captured_mi_execute_command (struct ui_out *uiout, void *data)
1089 struct captured_mi_execute_command_args *args =
1090 (struct captured_mi_execute_command_args *) data;
1091 struct mi_parse *context = args->command;
1093 struct mi_timestamp cmd_finished;
1095 switch (context->op)
1099 /* A MI command was read from the input stream. */
1101 /* FIXME: gdb_???? */
1102 fprintf_unfiltered (raw_stdout, " token=`%s' command=`%s' args=`%s'\n",
1103 context->token, context->command, context->args);
1104 /* FIXME: cagney/1999-09-25: Rather than this convoluted
1105 condition expression, each function should return an
1106 indication of what action is required and then switch on
1108 args->action = EXECUTE_COMMAND_DISPLAY_PROMPT;
1111 current_command_ts = context->cmd_start;
1113 args->rc = mi_cmd_execute (context);
1116 timestamp (&cmd_finished);
1118 if (!target_can_async_p () || !target_executing)
1120 /* Print the result if there were no errors.
1122 Remember that on the way out of executing a command, you have
1123 to directly use the mi_interp's uiout, since the command could
1124 have reset the interpreter, in which case the current uiout
1125 will most likely crash in the mi_out_* routines. */
1126 if (args->rc == MI_CMD_DONE)
1128 fputs_unfiltered (context->token, raw_stdout);
1129 fputs_unfiltered ("^done", raw_stdout);
1130 mi_out_put (uiout, raw_stdout);
1131 mi_out_rewind (uiout);
1132 /* Have to check cmd_start, since the command could be
1134 if (do_timings && context->cmd_start)
1135 print_diff (context->cmd_start, &cmd_finished);
1136 fputs_unfiltered ("\n", raw_stdout);
1138 else if (args->rc == MI_CMD_ERROR)
1140 if (mi_error_message)
1142 fputs_unfiltered (context->token, raw_stdout);
1143 fputs_unfiltered ("^error,msg=\"", raw_stdout);
1144 fputstr_unfiltered (mi_error_message, '"', raw_stdout);
1145 xfree (mi_error_message);
1146 fputs_unfiltered ("\"\n", raw_stdout);
1148 mi_out_rewind (uiout);
1151 mi_out_rewind (uiout);
1153 else if (sync_execution)
1155 /* Don't print the prompt. We are executing the target in
1156 synchronous mode. */
1157 args->action = EXECUTE_COMMAND_SUPRESS_PROMPT;
1165 /* A CLI command was read from the input stream. */
1166 /* This "feature" will be removed as soon as we have a
1167 complete set of mi commands. */
1168 /* Echo the command on the console. */
1169 fprintf_unfiltered (gdb_stdlog, "%s\n", context->command);
1170 /* Call the "console" interpreter. */
1171 argv[0] = "console";
1172 argv[1] = context->command;
1173 args->rc = mi_cmd_interpreter_exec ("-interpreter-exec", argv, 2);
1175 /* If we changed interpreters, DON'T print out anything. */
1176 if (current_interp_named_p (INTERP_MI)
1177 || current_interp_named_p (INTERP_MI1)
1178 || current_interp_named_p (INTERP_MI2)
1179 || current_interp_named_p (INTERP_MI3))
1181 if (args->rc == MI_CMD_DONE)
1183 fputs_unfiltered (context->token, raw_stdout);
1184 fputs_unfiltered ("^done", raw_stdout);
1185 mi_out_put (uiout, raw_stdout);
1186 mi_out_rewind (uiout);
1187 fputs_unfiltered ("\n", raw_stdout);
1188 args->action = EXECUTE_COMMAND_DISPLAY_PROMPT;
1190 else if (args->rc == MI_CMD_ERROR)
1192 if (mi_error_message)
1194 fputs_unfiltered (context->token, raw_stdout);
1195 fputs_unfiltered ("^error,msg=\"", raw_stdout);
1196 fputstr_unfiltered (mi_error_message, '"', raw_stdout);
1197 xfree (mi_error_message);
1198 fputs_unfiltered ("\"\n", raw_stdout);
1200 mi_out_rewind (uiout);
1203 mi_out_rewind (uiout);
1215 mi_execute_command (char *cmd, int from_tty)
1217 struct mi_parse *command;
1218 struct captured_mi_execute_command_args args;
1219 struct ui_out *saved_uiout = uiout;
1221 /* This is to handle EOF (^D). We just quit gdb. */
1222 /* FIXME: we should call some API function here. */
1224 quit_force (NULL, from_tty);
1226 command = mi_parse (cmd);
1228 if (command != NULL)
1230 struct gdb_exception result;
1234 command->cmd_start = (struct mi_timestamp *)
1235 xmalloc (sizeof (struct mi_timestamp));
1236 timestamp (command->cmd_start);
1239 /* FIXME: cagney/1999-11-04: Can this use of catch_exceptions either
1240 be pushed even further down or even eliminated? */
1241 args.command = command;
1242 result = catch_exception (uiout, captured_mi_execute_command, &args,
1244 exception_print (gdb_stderr, result);
1246 if (args.action == EXECUTE_COMMAND_SUPRESS_PROMPT)
1248 /* The command is executing synchronously. Bail out early
1249 suppressing the finished prompt. */
1250 mi_parse_free (command);
1253 if (result.reason < 0)
1255 /* The command execution failed and error() was called
1257 fputs_unfiltered (command->token, raw_stdout);
1258 fputs_unfiltered ("^error,msg=\"", raw_stdout);
1259 if (result.message == NULL)
1260 fputs_unfiltered ("unknown error", raw_stdout);
1262 fputstr_unfiltered (result.message, '"', raw_stdout);
1263 fputs_unfiltered ("\"\n", raw_stdout);
1264 mi_out_rewind (uiout);
1266 mi_parse_free (command);
1269 fputs_unfiltered ("(gdb) \n", raw_stdout);
1270 gdb_flush (raw_stdout);
1271 /* Print any buffered hook code. */
1275 static enum mi_cmd_result
1276 mi_cmd_execute (struct mi_parse *parse)
1280 if (parse->cmd->argv_func != NULL
1281 || parse->cmd->args_func != NULL)
1283 /* FIXME: We need to save the token because the command executed
1284 may be asynchronous and need to print the token again.
1285 In the future we can pass the token down to the func
1286 and get rid of the last_async_command. */
1287 /* The problem here is to keep the token around when we launch
1288 the target, and we want to interrupt it later on. The
1289 interrupt command will have its own token, but when the
1290 target stops, we must display the token corresponding to the
1291 last execution command given. So we have another string where
1292 we copy the token (previous_async_command), if this was
1293 indeed the token of an execution command, and when we stop we
1294 print that one. This is possible because the interrupt
1295 command, when over, will copy that token back into the
1296 default token string (last_async_command). */
1298 if (target_executing)
1300 if (!previous_async_command)
1301 previous_async_command = xstrdup (last_async_command);
1302 if (strcmp (parse->command, "exec-interrupt"))
1304 fputs_unfiltered (parse->token, raw_stdout);
1305 fputs_unfiltered ("^error,msg=\"", raw_stdout);
1306 fputs_unfiltered ("Cannot execute command ", raw_stdout);
1307 fputstr_unfiltered (parse->command, '"', raw_stdout);
1308 fputs_unfiltered (" while target running", raw_stdout);
1309 fputs_unfiltered ("\"\n", raw_stdout);
1310 return MI_CMD_ERROR;
1313 last_async_command = xstrdup (parse->token);
1314 make_exec_cleanup (free_current_contents, &last_async_command);
1315 /* FIXME: DELETE THIS! */
1316 if (parse->cmd->args_func != NULL)
1317 return parse->cmd->args_func (parse->args, 0 /*from_tty */ );
1318 return parse->cmd->argv_func (parse->command, parse->argv, parse->argc);
1320 else if (parse->cmd->cli.cmd != 0)
1322 /* FIXME: DELETE THIS. */
1323 /* The operation is still implemented by a cli command. */
1324 /* Must be a synchronous one. */
1325 mi_execute_cli_command (parse->cmd->cli.cmd, parse->cmd->cli.args_p,
1331 /* FIXME: DELETE THIS. */
1332 fputs_unfiltered (parse->token, raw_stdout);
1333 fputs_unfiltered ("^error,msg=\"", raw_stdout);
1334 fputs_unfiltered ("Undefined mi command: ", raw_stdout);
1335 fputstr_unfiltered (parse->command, '"', raw_stdout);
1336 fputs_unfiltered (" (missing implementation)", raw_stdout);
1337 fputs_unfiltered ("\"\n", raw_stdout);
1338 return MI_CMD_ERROR;
1342 /* FIXME: This is just a hack so we can get some extra commands going.
1343 We don't want to channel things through the CLI, but call libgdb directly.
1344 Use only for synchronous commands. */
1347 mi_execute_cli_command (const char *cmd, int args_p, const char *args)
1351 struct cleanup *old_cleanups;
1354 run = xstrprintf ("%s %s", cmd, args);
1356 run = xstrdup (cmd);
1358 /* FIXME: gdb_???? */
1359 fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n",
1361 old_cleanups = make_cleanup (xfree, run);
1362 execute_command ( /*ui */ run, 0 /*from_tty */ );
1363 do_cleanups (old_cleanups);
1369 mi_execute_async_cli_command (char *mi, char *args, int from_tty)
1371 struct cleanup *old_cleanups;
1375 if (target_can_async_p ())
1377 async_args = (char *) xmalloc (strlen (args) + 2);
1378 make_exec_cleanup (free, async_args);
1379 strcpy (async_args, args);
1380 strcat (async_args, "&");
1381 run = xstrprintf ("%s %s", mi, async_args);
1382 make_exec_cleanup (free, run);
1383 add_continuation (mi_exec_async_cli_cmd_continuation, NULL);
1384 old_cleanups = NULL;
1388 run = xstrprintf ("%s %s", mi, args);
1389 old_cleanups = make_cleanup (xfree, run);
1392 if (!target_can_async_p ())
1394 /* NOTE: For synchronous targets asynchronous behavour is faked by
1395 printing out the GDB prompt before we even try to execute the
1397 if (last_async_command)
1398 fputs_unfiltered (last_async_command, raw_stdout);
1399 fputs_unfiltered ("^running\n", raw_stdout);
1400 fputs_unfiltered ("(gdb) \n", raw_stdout);
1401 gdb_flush (raw_stdout);
1405 /* FIXME: cagney/1999-11-29: Printing this message before
1406 calling execute_command is wrong. It should only be printed
1407 once gdb has confirmed that it really has managed to send a
1408 run command to the target. */
1409 if (last_async_command)
1410 fputs_unfiltered (last_async_command, raw_stdout);
1411 fputs_unfiltered ("^running\n", raw_stdout);
1414 execute_command ( /*ui */ run, 0 /*from_tty */ );
1416 if (!target_can_async_p ())
1418 /* Do this before doing any printing. It would appear that some
1419 print code leaves garbage around in the buffer. */
1420 do_cleanups (old_cleanups);
1421 /* If the target was doing the operation synchronously we fake
1422 the stopped message. */
1423 if (last_async_command)
1424 fputs_unfiltered (last_async_command, raw_stdout);
1425 fputs_unfiltered ("*stopped", raw_stdout);
1426 mi_out_put (uiout, raw_stdout);
1427 mi_out_rewind (uiout);
1429 print_diff_now (current_command_ts);
1430 fputs_unfiltered ("\n", raw_stdout);
1431 return MI_CMD_QUIET;
1437 mi_exec_async_cli_cmd_continuation (struct continuation_arg *arg)
1439 if (last_async_command)
1440 fputs_unfiltered (last_async_command, raw_stdout);
1441 fputs_unfiltered ("*stopped", raw_stdout);
1442 mi_out_put (uiout, raw_stdout);
1443 fputs_unfiltered ("\n", raw_stdout);
1444 fputs_unfiltered ("(gdb) \n", raw_stdout);
1445 gdb_flush (raw_stdout);
1446 do_exec_cleanups (ALL_CLEANUPS);
1450 mi_load_progress (const char *section_name,
1451 unsigned long sent_so_far,
1452 unsigned long total_section,
1453 unsigned long total_sent,
1454 unsigned long grand_total)
1456 struct timeval time_now, delta, update_threshold;
1457 static struct timeval last_update;
1458 static char *previous_sect_name = NULL;
1460 struct ui_out *saved_uiout;
1462 /* This function is called through deprecated_show_load_progress
1463 which means uiout may not be correct. Fix it for the duration
1464 of this function. */
1465 saved_uiout = uiout;
1467 if (current_interp_named_p (INTERP_MI))
1468 uiout = mi_out_new (2);
1469 else if (current_interp_named_p (INTERP_MI1))
1470 uiout = mi_out_new (1);
1474 update_threshold.tv_sec = 0;
1475 update_threshold.tv_usec = 500000;
1476 gettimeofday (&time_now, NULL);
1478 delta.tv_usec = time_now.tv_usec - last_update.tv_usec;
1479 delta.tv_sec = time_now.tv_sec - last_update.tv_sec;
1481 if (delta.tv_usec < 0)
1484 delta.tv_usec += 1000000L;
1487 new_section = (previous_sect_name ?
1488 strcmp (previous_sect_name, section_name) : 1);
1491 struct cleanup *cleanup_tuple;
1492 xfree (previous_sect_name);
1493 previous_sect_name = xstrdup (section_name);
1495 if (last_async_command)
1496 fputs_unfiltered (last_async_command, raw_stdout);
1497 fputs_unfiltered ("+download", raw_stdout);
1498 cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1499 ui_out_field_string (uiout, "section", section_name);
1500 ui_out_field_int (uiout, "section-size", total_section);
1501 ui_out_field_int (uiout, "total-size", grand_total);
1502 do_cleanups (cleanup_tuple);
1503 mi_out_put (uiout, raw_stdout);
1504 fputs_unfiltered ("\n", raw_stdout);
1505 gdb_flush (raw_stdout);
1508 if (delta.tv_sec >= update_threshold.tv_sec &&
1509 delta.tv_usec >= update_threshold.tv_usec)
1511 struct cleanup *cleanup_tuple;
1512 last_update.tv_sec = time_now.tv_sec;
1513 last_update.tv_usec = time_now.tv_usec;
1514 if (last_async_command)
1515 fputs_unfiltered (last_async_command, raw_stdout);
1516 fputs_unfiltered ("+download", raw_stdout);
1517 cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1518 ui_out_field_string (uiout, "section", section_name);
1519 ui_out_field_int (uiout, "section-sent", sent_so_far);
1520 ui_out_field_int (uiout, "section-size", total_section);
1521 ui_out_field_int (uiout, "total-sent", total_sent);
1522 ui_out_field_int (uiout, "total-size", grand_total);
1523 do_cleanups (cleanup_tuple);
1524 mi_out_put (uiout, raw_stdout);
1525 fputs_unfiltered ("\n", raw_stdout);
1526 gdb_flush (raw_stdout);
1530 uiout = saved_uiout;
1534 timestamp (struct mi_timestamp *tv)
1537 gettimeofday (&tv->wallclock, NULL);
1538 #ifdef HAVE_GETRUSAGE
1539 getrusage (RUSAGE_SELF, &rusage);
1540 tv->utime.tv_sec = rusage.ru_utime.tv_sec;
1541 tv->utime.tv_usec = rusage.ru_utime.tv_usec;
1542 tv->stime.tv_sec = rusage.ru_stime.tv_sec;
1543 tv->stime.tv_usec = rusage.ru_stime.tv_usec;
1545 usec = get_run_time ();
1546 tv->utime.tv_sec = usec/1000000L;
1547 tv->utime.tv_usec = usec - 1000000L*tv->utime.tv_sec;
1548 tv->stime.tv_sec = 0;
1549 tv->stime.tv_usec = 0;
1554 print_diff_now (struct mi_timestamp *start)
1556 struct mi_timestamp now;
1558 print_diff (start, &now);
1562 timeval_diff (struct timeval start, struct timeval end)
1564 return ((end.tv_sec - start.tv_sec) * 1000000L)
1565 + (end.tv_usec - start.tv_usec);
1569 print_diff (struct mi_timestamp *start, struct mi_timestamp *end)
1573 ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}",
1574 timeval_diff (start->wallclock, end->wallclock) / 1000000.0,
1575 timeval_diff (start->utime, end->utime) / 1000000.0,
1576 timeval_diff (start->stime, end->stime) / 1000000.0);