2 Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
3 Contributed by Cygnus Solutions (a Red Hat company).
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
22 /* Work in progress */
27 #include "gdb_string.h"
29 #include "gdbthread.h"
32 #include "mi-getopt.h"
33 #include "mi-console.h"
36 #include "event-loop.h"
37 #include "event-top.h"
38 #include "gdbcore.h" /* for write_memory() */
39 #include "value.h" /* for write_register_bytes() */
52 struct ui_file *raw_stdout;
54 /* The token of the last asynchronous command */
55 static char *last_async_command;
56 static char *previous_async_command;
57 static char *mi_error_message;
58 static char *old_regs;
60 extern void _initialize_mi_main (void);
61 static char *mi_input (char *);
62 static void mi_execute_command (char *cmd, int from_tty);
63 static enum mi_cmd_result mi_cmd_execute (struct mi_parse *parse);
65 static void mi_execute_cli_command (const char *cli, char *args);
66 static enum mi_cmd_result mi_execute_async_cli_command (char *mi, char *args, int from_tty);
67 static void mi_execute_command_wrapper (char *cmd);
69 void mi_exec_async_cli_cmd_continuation (struct continuation_arg *arg);
71 static int register_changed_p (int regnum);
72 static int get_register (int regnum, int format);
73 static void mi_load_progress (const char *section_name,
74 unsigned long sent_so_far,
75 unsigned long total_section,
76 unsigned long total_sent,
77 unsigned long grand_total);
79 /* FIXME: these should go in some .h file, but infcmd.c doesn't have a
80 corresponding .h file. These wrappers will be obsolete anyway, once
81 we pull the plug on the sanitization. */
82 extern void interrupt_target_command_wrapper (char *, int);
83 extern void return_command_wrapper (char *, int);
85 /* Command implementations. FIXME: Is this libgdb? No. This is the MI
86 layer that calls libgdb. Any operation used in the below should be
90 mi_cmd_gdb_exit (char *command, char **argv, int argc)
92 /* We have to print everything right here because we never return */
93 if (last_async_command)
94 fputs_unfiltered (last_async_command, raw_stdout);
95 fputs_unfiltered ("^exit\n", raw_stdout);
96 mi_out_put (uiout, raw_stdout);
97 /* FIXME: The function called is not yet a formal libgdb function */
98 quit_force (NULL, FROM_TTY);
103 mi_cmd_exec_run (char *args, int from_tty)
105 /* FIXME: Should call a libgdb function, not a cli wrapper */
106 return mi_execute_async_cli_command ("run", args, from_tty);
110 mi_cmd_exec_next (char *args, int from_tty)
112 /* FIXME: Should call a libgdb function, not a cli wrapper */
113 return mi_execute_async_cli_command ("next", args, from_tty);
117 mi_cmd_exec_next_instruction (char *args, int from_tty)
119 /* FIXME: Should call a libgdb function, not a cli wrapper */
120 return mi_execute_async_cli_command ("nexti", args, from_tty);
124 mi_cmd_exec_step (char *args, int from_tty)
126 /* FIXME: Should call a libgdb function, not a cli wrapper */
127 return mi_execute_async_cli_command ("step", args, from_tty);
131 mi_cmd_exec_step_instruction (char *args, int from_tty)
133 /* FIXME: Should call a libgdb function, not a cli wrapper */
134 return mi_execute_async_cli_command ("stepi", args, from_tty);
138 mi_cmd_exec_finish (char *args, int from_tty)
140 /* FIXME: Should call a libgdb function, not a cli wrapper */
141 return mi_execute_async_cli_command ("finish", args, from_tty);
145 mi_cmd_exec_until (char *args, int from_tty)
147 /* FIXME: Should call a libgdb function, not a cli wrapper */
148 return mi_execute_async_cli_command ("until", args, from_tty);
152 mi_cmd_exec_return (char *args, int from_tty)
154 /* This command doesn't really execute the target, it just pops the
155 specified number of frames. */
157 /* Call return_command with from_tty argument equal to 0 so as to
158 avoid being queried. */
159 return_command_wrapper (args, 0);
161 /* Call return_command with from_tty argument equal to 0 so as to
162 avoid being queried. */
163 return_command_wrapper (NULL, 0);
165 /* Because we have called return_command with from_tty = 0, we need
166 to print the frame here. */
167 show_and_print_stack_frame (selected_frame,
168 selected_frame_level,
175 mi_cmd_exec_continue (char *args, int from_tty)
177 /* FIXME: Should call a libgdb function, not a cli wrapper */
178 return mi_execute_async_cli_command ("continue", args, from_tty);
181 /* Interrupt the execution of the target. Note how we must play around
182 with the token varialbes, in order to display the current token in
183 the result of the interrupt command, and the previous execution
184 token when the target finally stops. See comments in
187 mi_cmd_exec_interrupt (char *args, int from_tty)
189 if (!target_executing)
191 xasprintf (&mi_error_message,
192 "mi_cmd_exec_interrupt: Inferior not executing.");
195 interrupt_target_command_wrapper (args, from_tty);
196 if (last_async_command)
197 fputs_unfiltered (last_async_command, raw_stdout);
198 fputs_unfiltered ("^done", raw_stdout);
199 xfree (last_async_command);
200 if (previous_async_command)
201 last_async_command = xstrdup (previous_async_command);
202 xfree (previous_async_command);
203 previous_async_command = NULL;
204 mi_out_put (uiout, raw_stdout);
205 mi_out_rewind (uiout);
206 fputs_unfiltered ("\n", raw_stdout);
211 mi_cmd_thread_select (char *command, char **argv, int argc)
217 xasprintf (&mi_error_message,
218 "mi_cmd_thread_select: USAGE: threadnum.");
222 rc = gdb_thread_select (uiout, argv[0]);
224 if (rc == GDB_RC_FAIL)
225 return MI_CMD_CAUGHT_ERROR;
231 mi_cmd_thread_list_ids (char *command, char **argv, int argc)
233 enum gdb_rc rc = MI_CMD_DONE;
237 xasprintf (&mi_error_message,
238 "mi_cmd_thread_list_ids: No arguments required.");
242 rc = gdb_list_thread_ids (uiout);
244 if (rc == GDB_RC_FAIL)
245 return MI_CMD_CAUGHT_ERROR;
251 mi_cmd_data_list_register_names (char *command, char **argv, int argc)
256 /* Note that the test for a valid register must include checking the
257 REGISTER_NAME because NUM_REGS may be allocated for the union of
258 the register sets within a family of related processors. In this
259 case, some entries of REGISTER_NAME will change depending upon
260 the particular processor being debugged. */
262 numregs = NUM_REGS + NUM_PSEUDO_REGS;
264 ui_out_list_begin (uiout, "register-names");
266 if (argc == 0) /* No args, just do all the regs */
272 if (REGISTER_NAME (regnum) == NULL
273 || *(REGISTER_NAME (regnum)) == '\0')
274 ui_out_field_string (uiout, NULL, "");
276 ui_out_field_string (uiout, NULL, REGISTER_NAME (regnum));
280 /* Else, list of register #s, just do listed regs */
281 for (i = 0; i < argc; i++)
283 regnum = atoi (argv[i]);
284 if (regnum < 0 || regnum >= numregs)
286 xasprintf (&mi_error_message, "bad register number");
289 if (REGISTER_NAME (regnum) == NULL
290 || *(REGISTER_NAME (regnum)) == '\0')
291 ui_out_field_string (uiout, NULL, "");
293 ui_out_field_string (uiout, NULL, REGISTER_NAME (regnum));
295 ui_out_list_end (uiout);
300 mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
302 int regnum, numregs, changed;
305 /* Note that the test for a valid register must include checking the
306 REGISTER_NAME because NUM_REGS may be allocated for the union of
307 the register sets within a family of related processors. In this
308 case, some entries of REGISTER_NAME will change depending upon
309 the particular processor being debugged. */
313 ui_out_list_begin (uiout, "changed-registers");
315 if (argc == 0) /* No args, just do all the regs */
321 if (REGISTER_NAME (regnum) == NULL
322 || *(REGISTER_NAME (regnum)) == '\0')
324 changed = register_changed_p (regnum);
327 xasprintf (&mi_error_message,
328 "mi_cmd_data_list_changed_registers: Unable to read register contents.");
332 ui_out_field_int (uiout, NULL, regnum);
336 /* Else, list of register #s, just do listed regs */
337 for (i = 0; i < argc; i++)
339 regnum = atoi (argv[i]);
343 && REGISTER_NAME (regnum) != NULL
344 && *REGISTER_NAME (regnum) != '\000')
346 changed = register_changed_p (regnum);
349 xasprintf (&mi_error_message,
350 "mi_cmd_data_list_register_change: Unable to read register contents.");
354 ui_out_field_int (uiout, NULL, regnum);
358 xasprintf (&mi_error_message, "bad register number");
362 ui_out_list_end (uiout);
367 register_changed_p (int regnum)
369 char *raw_buffer = alloca (MAX_REGISTER_RAW_SIZE);
371 if (read_relative_register_raw_bytes (regnum, raw_buffer))
374 if (memcmp (&old_regs[REGISTER_BYTE (regnum)], raw_buffer,
375 REGISTER_RAW_SIZE (regnum)) == 0)
378 /* Found a changed register. Return 1. */
380 memcpy (&old_regs[REGISTER_BYTE (regnum)], raw_buffer,
381 REGISTER_RAW_SIZE (regnum));
386 /* Return a list of register number and value pairs. The valid
387 arguments expected are: a letter indicating the format in which to
388 display the registers contents. This can be one of: x (hexadecimal), d
389 (decimal), N (natural), t (binary), o (octal), r (raw). After the
390 format argumetn there can be a sequence of numbers, indicating which
391 registers to fetch the content of. If the format is the only argument,
392 a list of all the registers with their values is returned. */
394 mi_cmd_data_list_register_values (char *command, char **argv, int argc)
396 int regnum, numregs, format, result;
399 /* Note that the test for a valid register must include checking the
400 REGISTER_NAME because NUM_REGS may be allocated for the union of
401 the register sets within a family of related processors. In this
402 case, some entries of REGISTER_NAME will change depending upon
403 the particular processor being debugged. */
409 xasprintf (&mi_error_message,
410 "mi_cmd_data_list_register_values: Usage: -data-list-register-values <format> [<regnum1>...<regnumN>]");
414 format = (int) argv[0][0];
416 if (!target_has_registers)
418 xasprintf (&mi_error_message,
419 "mi_cmd_data_list_register_values: No registers.");
423 ui_out_list_begin (uiout, "register-values");
425 if (argc == 1) /* No args, beside the format: do all the regs */
431 if (REGISTER_NAME (regnum) == NULL
432 || *(REGISTER_NAME (regnum)) == '\0')
434 ui_out_tuple_begin (uiout, NULL);
435 ui_out_field_int (uiout, "number", regnum);
436 result = get_register (regnum, format);
439 ui_out_tuple_end (uiout);
443 /* Else, list of register #s, just do listed regs */
444 for (i = 1; i < argc; i++)
446 regnum = atoi (argv[i]);
450 && REGISTER_NAME (regnum) != NULL
451 && *REGISTER_NAME (regnum) != '\000')
453 ui_out_tuple_begin (uiout, NULL);
454 ui_out_field_int (uiout, "number", regnum);
455 result = get_register (regnum, format);
458 ui_out_tuple_end (uiout);
462 xasprintf (&mi_error_message, "bad register number");
466 ui_out_list_end (uiout);
470 /* Output one register's contents in the desired format. */
472 get_register (int regnum, int format)
474 char *raw_buffer = alloca (MAX_REGISTER_RAW_SIZE);
475 char *virtual_buffer = alloca (MAX_REGISTER_VIRTUAL_SIZE);
477 static struct ui_stream *stb = NULL;
479 stb = ui_out_stream_new (uiout);
484 /* read_relative_register_raw_bytes returns a virtual frame pointer
485 (FRAME_FP (selected_frame)) if regnum == FP_REGNUM instead
486 of the real contents of the register. To get around this,
487 use get_saved_register instead. */
488 get_saved_register (raw_buffer, &optim, (CORE_ADDR *) NULL, selected_frame,
489 regnum, (enum lval_type *) NULL);
492 xasprintf (&mi_error_message, "Optimized out");
496 /* Convert raw data to virtual format if necessary. */
498 if (REGISTER_CONVERTIBLE (regnum))
500 REGISTER_CONVERT_TO_VIRTUAL (regnum, REGISTER_VIRTUAL_TYPE (regnum),
501 raw_buffer, virtual_buffer);
504 memcpy (virtual_buffer, raw_buffer, REGISTER_VIRTUAL_SIZE (regnum));
509 char *ptr, buf[1024];
513 for (j = 0; j < REGISTER_RAW_SIZE (regnum); j++)
515 register int idx = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? j
516 : REGISTER_RAW_SIZE (regnum) - 1 - j;
517 sprintf (ptr, "%02x", (unsigned char) raw_buffer[idx]);
520 ui_out_field_string (uiout, "value", buf);
521 /*fputs_filtered (buf, gdb_stdout); */
525 val_print (REGISTER_VIRTUAL_TYPE (regnum), virtual_buffer, 0, 0,
526 stb->stream, format, 1, 0, Val_pretty_default);
527 ui_out_field_stream (uiout, "value", stb);
528 ui_out_stream_delete (stb);
533 /* Write given values into registers. The registers and values are
534 given as pairs. The corresponding MI command is
535 -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]*/
537 mi_cmd_data_write_register_values (char *command, char **argv, int argc)
545 /* Note that the test for a valid register must include checking the
546 REGISTER_NAME because NUM_REGS may be allocated for the union of
547 the register sets within a family of related processors. In this
548 case, some entries of REGISTER_NAME will change depending upon
549 the particular processor being debugged. */
555 xasprintf (&mi_error_message,
556 "mi_cmd_data_write_register_values: Usage: -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]");
560 format = (int) argv[0][0];
562 if (!target_has_registers)
564 xasprintf (&mi_error_message,
565 "mi_cmd_data_write_register_values: No registers.");
571 xasprintf (&mi_error_message,
572 "mi_cmd_data_write_register_values: No regs and values specified.");
578 xasprintf (&mi_error_message,
579 "mi_cmd_data_write_register_values: Regs and vals are not in pairs.");
583 for (i = 1; i < argc; i = i + 2)
585 regnum = atoi (argv[i]);
589 && REGISTER_NAME (regnum) != NULL
590 && *REGISTER_NAME (regnum) != '\000')
593 struct cleanup *old_chain;
595 /* Get the value as a number */
596 value = parse_and_eval_address (argv[i + 1]);
597 /* Get the value into an array */
598 buffer = xmalloc (REGISTER_SIZE);
599 old_chain = make_cleanup (xfree, buffer);
600 store_signed_integer (buffer, REGISTER_SIZE, value);
602 write_register_bytes (REGISTER_BYTE (regnum), buffer, REGISTER_RAW_SIZE (regnum));
603 /* Free the buffer. */
604 do_cleanups (old_chain);
608 xasprintf (&mi_error_message, "bad register number");
616 /*This is commented out because we decided it was not useful. I leave
617 it, just in case. ezannoni:1999-12-08 */
619 /* Assign a value to a variable. The expression argument must be in
620 the form A=2 or "A = 2" (I.e. if there are spaces it needs to be
623 mi_cmd_data_assign (char *command, char **argv, int argc)
625 struct expression *expr;
626 struct cleanup *old_chain;
630 xasprintf (&mi_error_message,
631 "mi_cmd_data_assign: Usage: -data-assign expression");
635 /* NOTE what follows is a clone of set_command(). FIXME: ezannoni
636 01-12-1999: Need to decide what to do with this for libgdb purposes. */
638 expr = parse_expression (argv[0]);
639 old_chain = make_cleanup (free_current_contents, &expr);
640 evaluate_expression (expr);
641 do_cleanups (old_chain);
646 /* Evaluate the value of the argument. The argument is an
647 expression. If the expression contains spaces it needs to be
648 included in double quotes. */
650 mi_cmd_data_evaluate_expression (char *command, char **argv, int argc)
652 struct expression *expr;
653 struct cleanup *old_chain = NULL;
655 struct ui_stream *stb = NULL;
657 stb = ui_out_stream_new (uiout);
661 xasprintf (&mi_error_message,
662 "mi_cmd_data_evaluate_expression: Usage: -data-evaluate-expression expression");
666 expr = parse_expression (argv[0]);
668 old_chain = make_cleanup (free_current_contents, &expr);
670 val = evaluate_expression (expr);
672 /* Print the result of the expression evaluation. */
673 val_print (VALUE_TYPE (val), VALUE_CONTENTS (val),
674 VALUE_EMBEDDED_OFFSET (val), VALUE_ADDRESS (val),
675 stb->stream, 0, 0, 0, 0);
677 ui_out_field_stream (uiout, "value", stb);
678 ui_out_stream_delete (stb);
680 do_cleanups (old_chain);
686 mi_cmd_target_download (char *args, int from_tty)
689 struct cleanup *old_cleanups = NULL;
691 xasprintf (&run, "load %s", args);
692 old_cleanups = make_cleanup (xfree, run);
693 execute_command (run, from_tty);
695 do_cleanups (old_cleanups);
699 /* Connect to the remote target. */
701 mi_cmd_target_select (char *args, int from_tty)
704 struct cleanup *old_cleanups = NULL;
706 xasprintf (&run, "target %s", args);
707 old_cleanups = make_cleanup (xfree, run);
709 /* target-select is always synchronous. once the call has returned
710 we know that we are connected. */
711 /* NOTE: At present all targets that are connected are also
712 (implicitly) talking to a halted target. In the future this may
714 execute_command (run, from_tty);
716 do_cleanups (old_cleanups);
718 /* Issue the completion message here. */
719 if (last_async_command)
720 fputs_unfiltered (last_async_command, raw_stdout);
721 fputs_unfiltered ("^connected", raw_stdout);
722 mi_out_put (uiout, raw_stdout);
723 mi_out_rewind (uiout);
724 fputs_unfiltered ("\n", raw_stdout);
725 do_exec_cleanups (ALL_CLEANUPS);
731 ADDR: start address of data to be dumped.
732 WORD-FORMAT: a char indicating format for the ``word''. See
734 WORD-SIZE: size of each ``word''; 1,2,4, or 8 bytes
735 NR_ROW: Number of rows.
736 NR_COL: The number of colums (words per row).
737 ASCHAR: (OPTIONAL) Append an ascii character dump to each row. Use
738 ASCHAR for unprintable characters.
740 Reads SIZE*NR_ROW*NR_COL bytes starting at ADDR from memory and
741 displayes them. Returns:
743 {addr="...",rowN={wordN="..." ,... [,ascii="..."]}, ...}
746 The number of bytes read is SIZE*ROW*COL. */
749 mi_cmd_data_read_memory (char *command, char **argv, int argc)
751 struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
757 struct type *word_type;
770 static struct mi_opt opts[] =
772 {"o", OFFSET_OPT, 1},
778 int opt = mi_getopt ("mi_cmd_data_read_memory", argc, argv, opts,
782 switch ((enum opt) opt)
785 offset = atol (optarg);
792 if (argc < 5 || argc > 6)
794 xasprintf (&mi_error_message,
795 "mi_cmd_data_read_memory: Usage: ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS [ASCHAR].");
799 /* Extract all the arguments. */
801 /* Start address of the memory dump. */
802 addr = parse_and_eval_address (argv[0]) + offset;
803 /* The format character to use when displaying a memory word. See
804 the ``x'' command. */
805 word_format = argv[1][0];
806 /* The size of the memory word. */
807 word_size = atol (argv[2]);
811 word_type = builtin_type_int8;
815 word_type = builtin_type_int16;
819 word_type = builtin_type_int32;
823 word_type = builtin_type_int64;
827 word_type = builtin_type_int8;
830 /* The number of rows */
831 nr_rows = atol (argv[3]);
834 xasprintf (&mi_error_message,
835 "mi_cmd_data_read_memory: invalid number of rows.");
838 /* number of bytes per row. */
839 nr_cols = atol (argv[4]);
842 xasprintf (&mi_error_message,
843 "mi_cmd_data_read_memory: invalid number of columns.");
845 /* The un-printable character when printing ascii. */
851 /* create a buffer and read it in. */
852 total_bytes = word_size * nr_rows * nr_cols;
853 mbuf = xcalloc (total_bytes, 1);
854 make_cleanup (xfree, mbuf);
857 xasprintf (&mi_error_message,
858 "mi_cmd_data_read_memory: out of memory.");
862 while (nr_bytes < total_bytes)
865 long num = target_read_memory_partial (addr + nr_bytes, mbuf + nr_bytes,
866 total_bytes - nr_bytes,
873 /* output the header information. */
874 ui_out_field_core_addr (uiout, "addr", addr);
875 ui_out_field_int (uiout, "nr-bytes", nr_bytes);
876 ui_out_field_int (uiout, "total-bytes", total_bytes);
877 ui_out_field_core_addr (uiout, "next-row", addr + word_size * nr_cols);
878 ui_out_field_core_addr (uiout, "prev-row", addr - word_size * nr_cols);
879 ui_out_field_core_addr (uiout, "next-page", addr + total_bytes);
880 ui_out_field_core_addr (uiout, "prev-page", addr - total_bytes);
882 /* Build the result as a two dimentional table. */
884 struct ui_stream *stream = ui_out_stream_new (uiout);
887 ui_out_list_begin (uiout, "memory");
888 for (row = 0, row_byte = 0;
890 row++, row_byte += nr_cols * word_size)
894 ui_out_tuple_begin (uiout, NULL);
895 ui_out_field_core_addr (uiout, "addr", addr + row_byte);
896 /* ui_out_field_core_addr_symbolic (uiout, "saddr", addr + row_byte); */
897 ui_out_list_begin (uiout, "data");
898 for (col = 0, col_byte = row_byte;
900 col++, col_byte += word_size)
902 if (col_byte + word_size > nr_bytes)
904 ui_out_field_string (uiout, NULL, "N/A");
908 ui_file_rewind (stream->stream);
909 print_scalar_formatted (mbuf + col_byte, word_type, word_format,
910 word_asize, stream->stream);
911 ui_out_field_stream (uiout, NULL, stream);
914 ui_out_list_end (uiout);
918 ui_file_rewind (stream->stream);
919 for (byte = row_byte; byte < row_byte + word_size * nr_cols; byte++)
921 if (byte >= nr_bytes)
923 fputc_unfiltered ('X', stream->stream);
925 else if (mbuf[byte] < 32 || mbuf[byte] > 126)
927 fputc_unfiltered (aschar, stream->stream);
930 fputc_unfiltered (mbuf[byte], stream->stream);
932 ui_out_field_stream (uiout, "ascii", stream);
934 ui_out_tuple_end (uiout);
936 ui_out_stream_delete (stream);
937 ui_out_list_end (uiout);
939 do_cleanups (cleanups);
943 /* DATA-MEMORY-WRITE:
945 COLUMN_OFFSET: optional argument. Must be preceeded by '-o'. The
946 offset from the beginning of the memory grid row where the cell to
948 ADDR: start address of the row in the memory grid where the memory
949 cell is, if OFFSET_COLUMN is specified. Otherwise, the address of
950 the location to write to.
951 FORMAT: a char indicating format for the ``word''. See
953 WORD_SIZE: size of each ``word''; 1,2,4, or 8 bytes
954 VALUE: value to be written into the memory address.
956 Writes VALUE into ADDR + (COLUMN_OFFSET * WORD_SIZE).
960 mi_cmd_data_write_memory (char *command, char **argv, int argc)
965 /* FIXME: ezannoni 2000-02-17 LONGEST could possibly not be big
966 enough when using a compiler other than GCC. */
969 struct cleanup *old_chain;
977 static struct mi_opt opts[] =
979 {"o", OFFSET_OPT, 1},
985 int opt = mi_getopt ("mi_cmd_data_write_memory", argc, argv, opts,
989 switch ((enum opt) opt)
992 offset = atol (optarg);
1001 xasprintf (&mi_error_message,
1002 "mi_cmd_data_write_memory: Usage: [-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE.");
1003 return MI_CMD_ERROR;
1006 /* Extract all the arguments. */
1007 /* Start address of the memory dump. */
1008 addr = parse_and_eval_address (argv[0]);
1009 /* The format character to use when displaying a memory word. See
1010 the ``x'' command. */
1011 word_format = argv[1][0];
1012 /* The size of the memory word. */
1013 word_size = atol (argv[2]);
1015 /* Calculate the real address of the write destination. */
1016 addr += (offset * word_size);
1018 /* Get the value as a number */
1019 value = parse_and_eval_address (argv[3]);
1020 /* Get the value into an array */
1021 buffer = xmalloc (word_size);
1022 old_chain = make_cleanup (xfree, buffer);
1023 store_signed_integer (buffer, word_size, value);
1024 /* Write it down to memory */
1025 write_memory (addr, buffer, word_size);
1026 /* Free the buffer. */
1027 do_cleanups (old_chain);
1032 /* Execute a command within a safe environment. Return >0 for
1033 ok. Return <0 for supress prompt. Return 0 to have the error
1034 extracted from error_last_message(). */
1037 captured_mi_execute_command (void *data)
1039 struct mi_parse *context = data;
1040 enum mi_cmd_result rc;
1042 switch (context->op)
1046 /* A MI command was read from the input stream */
1048 /* FIXME: gdb_???? */
1049 fprintf_unfiltered (raw_stdout, " token=`%s' command=`%s' args=`%s'\n",
1050 context->token, context->command, context->args);
1051 /* FIXME: cagney/1999-09-25: Rather than this convoluted
1052 condition expression, each function should return an
1053 indication of what action is required and then switch on
1055 rc = mi_cmd_execute (context);
1056 if (!target_can_async_p () || !target_executing)
1058 /* print the result if there were no errors */
1059 if (rc == MI_CMD_DONE)
1061 fputs_unfiltered (context->token, raw_stdout);
1062 fputs_unfiltered ("^done", raw_stdout);
1063 mi_out_put (uiout, raw_stdout);
1064 mi_out_rewind (uiout);
1065 fputs_unfiltered ("\n", raw_stdout);
1067 else if (rc == MI_CMD_ERROR)
1069 if (mi_error_message)
1071 fputs_unfiltered (context->token, raw_stdout);
1072 fputs_unfiltered ("^error,msg=\"", raw_stdout);
1073 fputstr_unfiltered (mi_error_message, '"', raw_stdout);
1074 xfree (mi_error_message);
1075 fputs_unfiltered ("\"\n", raw_stdout);
1077 mi_out_rewind (uiout);
1079 else if (rc == MI_CMD_CAUGHT_ERROR)
1081 mi_out_rewind (uiout);
1085 mi_out_rewind (uiout);
1087 else if (sync_execution)
1088 /* Don't print the prompt. We are executing the target in
1089 synchronous mode. */
1094 /* A CLI command was read from the input stream */
1095 /* This will be removed as soon as we have a complete set of
1097 /* echo the command on the console. */
1098 fprintf_unfiltered (gdb_stdlog, "%s\n", context->command);
1099 /* FIXME: If the command string has something that looks like
1100 a format spec (e.g. %s) we will get a core dump */
1101 mi_execute_cli_command ("%s", context->command);
1102 /* print the result */
1103 /* FIXME: Check for errors here. */
1104 fputs_unfiltered (context->token, raw_stdout);
1105 fputs_unfiltered ("^done", raw_stdout);
1106 mi_out_put (uiout, raw_stdout);
1107 mi_out_rewind (uiout);
1108 fputs_unfiltered ("\n", raw_stdout);
1117 mi_execute_command (char *cmd, int from_tty)
1119 struct mi_parse *command;
1121 /* This is to handle EOF (^D). We just quit gdb. */
1122 /* FIXME: we should call some API function here. */
1124 quit_force (NULL, from_tty);
1126 command = mi_parse (cmd);
1128 if (command != NULL)
1130 /* FIXME: cagney/1999-11-04: Can this use of catch_errors either
1131 be pushed even further down or even eliminated? */
1132 int rc = catch_errors (captured_mi_execute_command, command, "",
1136 /* The command is executing synchronously. Bail out early
1137 suppressing the finished prompt. */
1138 mi_parse_free (command);
1143 char *msg = error_last_message ();
1144 struct cleanup *cleanup = make_cleanup (xfree, msg);
1145 /* The command execution failed and error() was called
1147 fputs_unfiltered (command->token, raw_stdout);
1148 fputs_unfiltered ("^error,msg=\"", raw_stdout);
1149 fputstr_unfiltered (msg, '"', raw_stdout);
1150 fputs_unfiltered ("\"\n", raw_stdout);
1152 mi_parse_free (command);
1155 fputs_unfiltered ("(gdb) \n", raw_stdout);
1156 gdb_flush (raw_stdout);
1157 /* print any buffered hook code */
1161 static enum mi_cmd_result
1162 mi_cmd_execute (struct mi_parse *parse)
1164 if (parse->cmd->argv_func != NULL
1165 || parse->cmd->args_func != NULL)
1167 /* FIXME: We need to save the token because the command executed
1168 may be asynchronous and need to print the token again.
1169 In the future we can pass the token down to the func
1170 and get rid of the last_async_command */
1171 /* The problem here is to keep the token around when we launch
1172 the target, and we want to interrupt it later on. The
1173 interrupt command will have its own token, but when the
1174 target stops, we must display the token corresponding to the
1175 last execution command given. So we have another string where
1176 we copy the token (previous_async_command), if this was
1177 indeed the token of an execution command, and when we stop we
1178 print that one. This is possible because the interrupt
1179 command, when over, will copy that token back into the
1180 default token string (last_async_command). */
1182 if (target_executing)
1184 if (!previous_async_command)
1185 previous_async_command = xstrdup (last_async_command);
1186 if (strcmp (parse->command, "exec-interrupt"))
1188 fputs_unfiltered (parse->token, raw_stdout);
1189 fputs_unfiltered ("^error,msg=\"", raw_stdout);
1190 fputs_unfiltered ("Cannot execute command ", raw_stdout);
1191 fputstr_unfiltered (parse->command, '"', raw_stdout);
1192 fputs_unfiltered (" while target running", raw_stdout);
1193 fputs_unfiltered ("\"\n", raw_stdout);
1194 return MI_CMD_ERROR;
1197 last_async_command = xstrdup (parse->token);
1198 make_exec_cleanup (free_current_contents, &last_async_command);
1199 /* FIXME: DELETE THIS! */
1200 if (parse->cmd->args_func != NULL)
1201 return parse->cmd->args_func (parse->args, 0 /*from_tty */ );
1202 return parse->cmd->argv_func (parse->command, parse->argv, parse->argc);
1204 else if (parse->cmd->cli != 0)
1206 /* FIXME: DELETE THIS. */
1207 /* The operation is still implemented by a cli command */
1208 /* Must be a synchronous one */
1209 mi_execute_cli_command (parse->cmd->cli, parse->args);
1214 /* FIXME: DELETE THIS. */
1215 fputs_unfiltered (parse->token, raw_stdout);
1216 fputs_unfiltered ("^error,msg=\"", raw_stdout);
1217 fputs_unfiltered ("Undefined mi command: ", raw_stdout);
1218 fputstr_unfiltered (parse->command, '"', raw_stdout);
1219 fputs_unfiltered (" (missing implementation)", raw_stdout);
1220 fputs_unfiltered ("\"\n", raw_stdout);
1221 return MI_CMD_ERROR;
1226 mi_execute_command_wrapper (char *cmd)
1228 mi_execute_command (cmd, stdin == instream);
1231 /* FIXME: This is just a hack so we can get some extra commands going.
1232 We don't want to channel things through the CLI, but call libgdb directly */
1233 /* Use only for synchronous commands */
1236 mi_execute_cli_command (const char *cli, char *args)
1240 struct cleanup *old_cleanups;
1242 xasprintf (&run, cli, args);
1244 /* FIXME: gdb_???? */
1245 fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n",
1247 old_cleanups = make_cleanup (xfree, run);
1248 execute_command ( /*ui */ run, 0 /*from_tty */ );
1249 do_cleanups (old_cleanups);
1255 mi_execute_async_cli_command (char *mi, char *args, int from_tty)
1257 struct cleanup *old_cleanups;
1261 if (target_can_async_p ())
1263 async_args = (char *) xmalloc (strlen (args) + 2);
1264 make_exec_cleanup (free, async_args);
1265 strcpy (async_args, args);
1266 strcat (async_args, "&");
1267 xasprintf (&run, "%s %s", mi, async_args);
1268 make_exec_cleanup (free, run);
1269 add_continuation (mi_exec_async_cli_cmd_continuation, NULL);
1270 old_cleanups = NULL;
1274 xasprintf (&run, "%s %s", mi, args);
1275 old_cleanups = make_cleanup (xfree, run);
1278 if (!target_can_async_p ())
1280 /* NOTE: For synchronous targets asynchronous behavour is faked by
1281 printing out the GDB prompt before we even try to execute the
1283 if (last_async_command)
1284 fputs_unfiltered (last_async_command, raw_stdout);
1285 fputs_unfiltered ("^running\n", raw_stdout);
1286 fputs_unfiltered ("(gdb) \n", raw_stdout);
1287 gdb_flush (raw_stdout);
1291 /* FIXME: cagney/1999-11-29: Printing this message before
1292 calling execute_command is wrong. It should only be printed
1293 once gdb has confirmed that it really has managed to send a
1294 run command to the target. */
1295 if (last_async_command)
1296 fputs_unfiltered (last_async_command, raw_stdout);
1297 fputs_unfiltered ("^running\n", raw_stdout);
1300 execute_command ( /*ui */ run, 0 /*from_tty */ );
1302 if (!target_can_async_p ())
1304 /* Do this before doing any printing. It would appear that some
1305 print code leaves garbage around in the buffer. */
1306 do_cleanups (old_cleanups);
1307 /* If the target was doing the operation synchronously we fake
1308 the stopped message. */
1309 if (last_async_command)
1310 fputs_unfiltered (last_async_command, raw_stdout);
1311 fputs_unfiltered ("*stopped", raw_stdout);
1312 mi_out_put (uiout, raw_stdout);
1313 mi_out_rewind (uiout);
1314 fputs_unfiltered ("\n", raw_stdout);
1315 return MI_CMD_QUIET;
1321 mi_exec_async_cli_cmd_continuation (struct continuation_arg *arg)
1323 if (last_async_command)
1324 fputs_unfiltered (last_async_command, raw_stdout);
1325 fputs_unfiltered ("*stopped", raw_stdout);
1326 mi_out_put (uiout, raw_stdout);
1327 fputs_unfiltered ("\n", raw_stdout);
1328 fputs_unfiltered ("(gdb) \n", raw_stdout);
1329 gdb_flush (raw_stdout);
1330 do_exec_cleanups (ALL_CLEANUPS);
1334 mi_input (char *buf)
1336 return gdb_readline (NULL);
1340 mi_load_progress (const char *section_name,
1341 unsigned long sent_so_far,
1342 unsigned long total_section,
1343 unsigned long total_sent,
1344 unsigned long grand_total)
1346 struct timeval time_now, delta, update_threshold;
1347 static struct timeval last_update;
1348 static char *previous_sect_name = NULL;
1351 if (!interpreter_p || strncmp (interpreter_p, "mi", 2) != 0)
1354 update_threshold.tv_sec = 0;
1355 update_threshold.tv_usec = 500000;
1356 gettimeofday (&time_now, NULL);
1358 delta.tv_usec = time_now.tv_usec - last_update.tv_usec;
1359 delta.tv_sec = time_now.tv_sec - last_update.tv_sec;
1361 if (delta.tv_usec < 0)
1364 delta.tv_usec += 1000000;
1367 new_section = (previous_sect_name ?
1368 strcmp (previous_sect_name, section_name) : 1);
1371 xfree (previous_sect_name);
1372 previous_sect_name = xstrdup (section_name);
1374 if (last_async_command)
1375 fputs_unfiltered (last_async_command, raw_stdout);
1376 fputs_unfiltered ("+download", raw_stdout);
1377 ui_out_tuple_begin (uiout, NULL);
1378 ui_out_field_string (uiout, "section", section_name);
1379 ui_out_field_int (uiout, "section-size", total_section);
1380 ui_out_field_int (uiout, "total-size", grand_total);
1381 ui_out_tuple_end (uiout);
1382 mi_out_put (uiout, raw_stdout);
1383 fputs_unfiltered ("\n", raw_stdout);
1384 gdb_flush (raw_stdout);
1387 if (delta.tv_sec >= update_threshold.tv_sec &&
1388 delta.tv_usec >= update_threshold.tv_usec)
1390 last_update.tv_sec = time_now.tv_sec;
1391 last_update.tv_usec = time_now.tv_usec;
1392 if (last_async_command)
1393 fputs_unfiltered (last_async_command, raw_stdout);
1394 fputs_unfiltered ("+download", raw_stdout);
1395 ui_out_tuple_begin (uiout, NULL);
1396 ui_out_field_string (uiout, "section", section_name);
1397 ui_out_field_int (uiout, "section-sent", sent_so_far);
1398 ui_out_field_int (uiout, "section-size", total_section);
1399 ui_out_field_int (uiout, "total-sent", total_sent);
1400 ui_out_field_int (uiout, "total-size", grand_total);
1401 ui_out_tuple_end (uiout);
1402 mi_out_put (uiout, raw_stdout);
1403 fputs_unfiltered ("\n", raw_stdout);
1404 gdb_flush (raw_stdout);
1409 mi_command_loop (int mi_version)
1411 /* HACK: Force stdout/stderr to point at the console. This avoids
1412 any potential side effects caused by legacy code that is still
1413 using the TUI / fputs_unfiltered_hook */
1414 raw_stdout = stdio_fileopen (stdout);
1415 /* Route normal output through the MIx */
1416 gdb_stdout = mi_console_file_new (raw_stdout, "~");
1417 /* Route error and log output through the MI */
1418 gdb_stderr = mi_console_file_new (raw_stdout, "&");
1419 gdb_stdlog = gdb_stderr;
1420 /* Route target output through the MI. */
1421 gdb_stdtarg = mi_console_file_new (raw_stdout, "@");
1423 /* HACK: Poke the ui_out table directly. Should we be creating a
1424 mi_out object wired up to the above gdb_stdout / gdb_stderr? */
1425 uiout = mi_out_new (mi_version);
1427 /* HACK: Override any other interpreter hooks. We need to create a
1428 real event table and pass in that. */
1430 /* command_loop_hook = 0; */
1431 print_frame_info_listing_hook = 0;
1434 create_breakpoint_hook = 0;
1435 delete_breakpoint_hook = 0;
1436 modify_breakpoint_hook = 0;
1437 interactive_hook = 0;
1438 registers_changed_hook = 0;
1439 readline_begin_hook = 0;
1441 readline_end_hook = 0;
1442 register_changed_hook = 0;
1443 memory_changed_hook = 0;
1445 target_wait_hook = 0;
1446 call_command_hook = 0;
1448 error_begin_hook = 0;
1449 show_load_progress = mi_load_progress;
1451 /* Turn off 8 bit strings in quoted output. Any character with the
1452 high bit set is printed using C's octal format. */
1453 sevenbit_strings = 1;
1455 /* Tell the world that we're alive */
1456 fputs_unfiltered ("(gdb) \n", raw_stdout);
1457 gdb_flush (raw_stdout);
1460 simplified_command_loop (mi_input, mi_execute_command);
1462 start_event_loop ();
1466 mi0_command_loop (void)
1468 mi_command_loop (0);
1472 mi1_command_loop (void)
1474 mi_command_loop (1);
1478 setup_architecture_data (void)
1480 /* don't trust REGISTER_BYTES to be zero. */
1481 old_regs = xmalloc (REGISTER_BYTES + 1);
1482 memset (old_regs, 0, REGISTER_BYTES + 1);
1486 mi_init_ui (char *arg0)
1488 /* Eventually this will contain code that takes control of the
1493 _initialize_mi_main (void)
1495 if (interpreter_p == NULL)
1498 /* If we're _the_ interpreter, take control. */
1499 if (strcmp (interpreter_p, "mi0") == 0)
1500 command_loop_hook = mi0_command_loop;
1501 else if (strcmp (interpreter_p, "mi") == 0
1502 || strcmp (interpreter_p, "mi1") == 0)
1503 command_loop_hook = mi1_command_loop;
1507 init_ui_hook = mi_init_ui;
1508 setup_architecture_data ();
1509 register_gdbarch_swap (&old_regs, sizeof (old_regs), NULL);
1510 register_gdbarch_swap (NULL, 0, setup_architecture_data);
1513 /* These overwrite some of the initialization done in
1514 _intialize_event_loop. */
1515 call_readline = gdb_readline2;
1516 input_handler = mi_execute_command_wrapper;
1517 add_file_handler (input_fd, stdin_event_handler, 0);
1518 async_command_editing_p = 0;
1520 /* FIXME: Should we notify main that we are here as a possible