3 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software
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() */
44 #include "value.h" /* for deprecated_write_register_bytes() */
58 /* Enumerations of the actions that may result from calling
59 captured_mi_execute_command */
61 enum captured_mi_execute_command_actions
63 EXECUTE_COMMAND_DISPLAY_PROMPT
,
64 EXECUTE_COMMAND_SUPRESS_PROMPT
67 /* This structure is used to pass information from captured_mi_execute_command
68 to mi_execute_command. */
69 struct captured_mi_execute_command_args
71 /* This return result of the MI command (output) */
72 enum mi_cmd_result rc
;
74 /* What action to perform when the call is finished (output) */
75 enum captured_mi_execute_command_actions action
;
77 /* The command context to be executed (input) */
78 struct mi_parse
*command
;
82 struct ui_file
*raw_stdout
;
84 /* The token of the last asynchronous command */
85 static char *last_async_command
;
86 static char *previous_async_command
;
87 char *mi_error_message
;
88 static char *old_regs
;
90 extern void _initialize_mi_main (void);
91 static enum mi_cmd_result
mi_cmd_execute (struct mi_parse
*parse
);
93 static void mi_execute_cli_command (const char *cmd
, int args_p
,
95 static enum mi_cmd_result
mi_execute_async_cli_command (char *mi
, char *args
, int from_tty
);
97 static void mi_exec_async_cli_cmd_continuation (struct continuation_arg
*arg
);
99 static int register_changed_p (int regnum
);
100 static int get_register (int regnum
, int format
);
102 /* Command implementations. FIXME: Is this libgdb? No. This is the MI
103 layer that calls libgdb. Any operation used in the below should be
107 mi_cmd_gdb_exit (char *command
, char **argv
, int argc
)
109 /* We have to print everything right here because we never return */
110 if (last_async_command
)
111 fputs_unfiltered (last_async_command
, raw_stdout
);
112 fputs_unfiltered ("^exit\n", raw_stdout
);
113 mi_out_put (uiout
, raw_stdout
);
114 /* FIXME: The function called is not yet a formal libgdb function */
115 quit_force (NULL
, FROM_TTY
);
120 mi_cmd_exec_run (char *args
, int from_tty
)
122 /* FIXME: Should call a libgdb function, not a cli wrapper */
123 return mi_execute_async_cli_command ("run", args
, from_tty
);
127 mi_cmd_exec_next (char *args
, int from_tty
)
129 /* FIXME: Should call a libgdb function, not a cli wrapper */
130 return mi_execute_async_cli_command ("next", args
, from_tty
);
134 mi_cmd_exec_next_instruction (char *args
, int from_tty
)
136 /* FIXME: Should call a libgdb function, not a cli wrapper */
137 return mi_execute_async_cli_command ("nexti", args
, from_tty
);
141 mi_cmd_exec_step (char *args
, int from_tty
)
143 /* FIXME: Should call a libgdb function, not a cli wrapper */
144 return mi_execute_async_cli_command ("step", args
, from_tty
);
148 mi_cmd_exec_step_instruction (char *args
, int from_tty
)
150 /* FIXME: Should call a libgdb function, not a cli wrapper */
151 return mi_execute_async_cli_command ("stepi", args
, from_tty
);
155 mi_cmd_exec_finish (char *args
, int from_tty
)
157 /* FIXME: Should call a libgdb function, not a cli wrapper */
158 return mi_execute_async_cli_command ("finish", args
, from_tty
);
162 mi_cmd_exec_until (char *args
, int from_tty
)
164 /* FIXME: Should call a libgdb function, not a cli wrapper */
165 return mi_execute_async_cli_command ("until", args
, from_tty
);
169 mi_cmd_exec_return (char *args
, int from_tty
)
171 /* This command doesn't really execute the target, it just pops the
172 specified number of frames. */
174 /* Call return_command with from_tty argument equal to 0 so as to
175 avoid being queried. */
176 return_command (args
, 0);
178 /* Call return_command with from_tty argument equal to 0 so as to
179 avoid being queried. */
180 return_command (NULL
, 0);
182 /* Because we have called return_command with from_tty = 0, we need
183 to print the frame here. */
184 print_stack_frame (get_selected_frame (NULL
), 1, LOC_AND_ADDRESS
);
190 mi_cmd_exec_continue (char *args
, int from_tty
)
192 /* FIXME: Should call a libgdb function, not a cli wrapper */
193 return mi_execute_async_cli_command ("continue", args
, from_tty
);
196 /* Interrupt the execution of the target. Note how we must play around
197 with the token varialbes, in order to display the current token in
198 the result of the interrupt command, and the previous execution
199 token when the target finally stops. See comments in
202 mi_cmd_exec_interrupt (char *args
, int from_tty
)
204 if (!target_executing
)
206 mi_error_message
= xstrprintf ("mi_cmd_exec_interrupt: Inferior not executing.");
209 interrupt_target_command (args
, from_tty
);
210 if (last_async_command
)
211 fputs_unfiltered (last_async_command
, raw_stdout
);
212 fputs_unfiltered ("^done", raw_stdout
);
213 xfree (last_async_command
);
214 if (previous_async_command
)
215 last_async_command
= xstrdup (previous_async_command
);
216 xfree (previous_async_command
);
217 previous_async_command
= NULL
;
218 mi_out_put (uiout
, raw_stdout
);
219 mi_out_rewind (uiout
);
220 fputs_unfiltered ("\n", raw_stdout
);
225 mi_cmd_thread_select (char *command
, char **argv
, int argc
)
231 mi_error_message
= xstrprintf ("mi_cmd_thread_select: USAGE: threadnum.");
235 rc
= gdb_thread_select (uiout
, argv
[0], &mi_error_message
);
237 /* RC is enum gdb_rc if it is successful (>=0)
238 enum return_reason if not (<0). */
239 if ((int) rc
< 0 && (enum return_reason
) rc
== RETURN_ERROR
)
241 else if ((int) rc
>= 0 && rc
== GDB_RC_FAIL
)
248 mi_cmd_thread_list_ids (char *command
, char **argv
, int argc
)
250 enum gdb_rc rc
= MI_CMD_DONE
;
254 mi_error_message
= xstrprintf ("mi_cmd_thread_list_ids: No arguments required.");
258 rc
= gdb_list_thread_ids (uiout
, &mi_error_message
);
260 if (rc
== GDB_RC_FAIL
)
267 mi_cmd_data_list_register_names (char *command
, char **argv
, int argc
)
271 struct cleanup
*cleanup
;
273 /* Note that the test for a valid register must include checking the
274 REGISTER_NAME because NUM_REGS may be allocated for the union of
275 the register sets within a family of related processors. In this
276 case, some entries of REGISTER_NAME will change depending upon
277 the particular processor being debugged. */
279 numregs
= NUM_REGS
+ NUM_PSEUDO_REGS
;
281 cleanup
= make_cleanup_ui_out_list_begin_end (uiout
, "register-names");
283 if (argc
== 0) /* No args, just do all the regs */
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
));
297 /* Else, list of register #s, just do listed regs */
298 for (i
= 0; i
< argc
; i
++)
300 regnum
= atoi (argv
[i
]);
301 if (regnum
< 0 || regnum
>= numregs
)
303 do_cleanups (cleanup
);
304 mi_error_message
= xstrprintf ("bad register number");
307 if (REGISTER_NAME (regnum
) == NULL
308 || *(REGISTER_NAME (regnum
)) == '\0')
309 ui_out_field_string (uiout
, NULL
, "");
311 ui_out_field_string (uiout
, NULL
, REGISTER_NAME (regnum
));
313 do_cleanups (cleanup
);
318 mi_cmd_data_list_changed_registers (char *command
, char **argv
, int argc
)
320 int regnum
, numregs
, changed
;
322 struct cleanup
*cleanup
;
324 /* Note that the test for a valid register must include checking the
325 REGISTER_NAME because NUM_REGS may be allocated for the union of
326 the register sets within a family of related processors. In this
327 case, some entries of REGISTER_NAME will change depending upon
328 the particular processor being debugged. */
330 numregs
= NUM_REGS
+ NUM_PSEUDO_REGS
;
332 cleanup
= make_cleanup_ui_out_list_begin_end (uiout
, "changed-registers");
334 if (argc
== 0) /* No args, just do all the regs */
340 if (REGISTER_NAME (regnum
) == NULL
341 || *(REGISTER_NAME (regnum
)) == '\0')
343 changed
= register_changed_p (regnum
);
346 do_cleanups (cleanup
);
347 mi_error_message
= xstrprintf ("mi_cmd_data_list_changed_registers: Unable to read register contents.");
351 ui_out_field_int (uiout
, NULL
, regnum
);
355 /* Else, list of register #s, just do listed regs */
356 for (i
= 0; i
< argc
; i
++)
358 regnum
= atoi (argv
[i
]);
362 && REGISTER_NAME (regnum
) != NULL
363 && *REGISTER_NAME (regnum
) != '\000')
365 changed
= register_changed_p (regnum
);
368 do_cleanups (cleanup
);
369 mi_error_message
= xstrprintf ("mi_cmd_data_list_register_change: Unable to read register contents.");
373 ui_out_field_int (uiout
, NULL
, regnum
);
377 do_cleanups (cleanup
);
378 mi_error_message
= xstrprintf ("bad register number");
382 do_cleanups (cleanup
);
387 register_changed_p (int regnum
)
389 gdb_byte raw_buffer
[MAX_REGISTER_SIZE
];
391 if (! frame_register_read (get_selected_frame (NULL
), regnum
, raw_buffer
))
394 if (memcmp (&old_regs
[DEPRECATED_REGISTER_BYTE (regnum
)], raw_buffer
,
395 register_size (current_gdbarch
, regnum
)) == 0)
398 /* Found a changed register. Return 1. */
400 memcpy (&old_regs
[DEPRECATED_REGISTER_BYTE (regnum
)], raw_buffer
,
401 register_size (current_gdbarch
, regnum
));
406 /* Return a list of register number and value pairs. The valid
407 arguments expected are: a letter indicating the format in which to
408 display the registers contents. This can be one of: x (hexadecimal), d
409 (decimal), N (natural), t (binary), o (octal), r (raw). After the
410 format argumetn there can be a sequence of numbers, indicating which
411 registers to fetch the content of. If the format is the only argument,
412 a list of all the registers with their values is returned. */
414 mi_cmd_data_list_register_values (char *command
, char **argv
, int argc
)
416 int regnum
, numregs
, format
, result
;
418 struct cleanup
*list_cleanup
, *tuple_cleanup
;
420 /* Note that the test for a valid register must include checking the
421 REGISTER_NAME because NUM_REGS may be allocated for the union of
422 the register sets within a family of related processors. In this
423 case, some entries of REGISTER_NAME will change depending upon
424 the particular processor being debugged. */
426 numregs
= NUM_REGS
+ NUM_PSEUDO_REGS
;
430 mi_error_message
= xstrprintf ("mi_cmd_data_list_register_values: Usage: -data-list-register-values <format> [<regnum1>...<regnumN>]");
434 format
= (int) argv
[0][0];
436 list_cleanup
= make_cleanup_ui_out_list_begin_end (uiout
, "register-values");
438 if (argc
== 1) /* No args, beside the format: do all the regs */
444 if (REGISTER_NAME (regnum
) == NULL
445 || *(REGISTER_NAME (regnum
)) == '\0')
447 tuple_cleanup
= make_cleanup_ui_out_tuple_begin_end (uiout
, NULL
);
448 ui_out_field_int (uiout
, "number", regnum
);
449 result
= get_register (regnum
, format
);
452 do_cleanups (list_cleanup
);
455 do_cleanups (tuple_cleanup
);
459 /* Else, list of register #s, just do listed regs */
460 for (i
= 1; i
< argc
; i
++)
462 regnum
= atoi (argv
[i
]);
466 && REGISTER_NAME (regnum
) != NULL
467 && *REGISTER_NAME (regnum
) != '\000')
469 tuple_cleanup
= make_cleanup_ui_out_tuple_begin_end (uiout
, NULL
);
470 ui_out_field_int (uiout
, "number", regnum
);
471 result
= get_register (regnum
, format
);
474 do_cleanups (list_cleanup
);
477 do_cleanups (tuple_cleanup
);
481 do_cleanups (list_cleanup
);
482 mi_error_message
= xstrprintf ("bad register number");
486 do_cleanups (list_cleanup
);
490 /* Output one register's contents in the desired format. */
492 get_register (int regnum
, int format
)
494 gdb_byte buffer
[MAX_REGISTER_SIZE
];
499 static struct ui_stream
*stb
= NULL
;
501 stb
= ui_out_stream_new (uiout
);
506 frame_register (get_selected_frame (NULL
), regnum
, &optim
, &lval
, &addr
,
511 mi_error_message
= xstrprintf ("Optimized out");
518 char *ptr
, buf
[1024];
522 for (j
= 0; j
< register_size (current_gdbarch
, regnum
); j
++)
524 int idx
= TARGET_BYTE_ORDER
== BFD_ENDIAN_BIG
? j
525 : register_size (current_gdbarch
, regnum
) - 1 - j
;
526 sprintf (ptr
, "%02x", (unsigned char) buffer
[idx
]);
529 ui_out_field_string (uiout
, "value", buf
);
530 /*fputs_filtered (buf, gdb_stdout); */
534 val_print (register_type (current_gdbarch
, regnum
), buffer
, 0, 0,
535 stb
->stream
, format
, 1, 0, Val_pretty_default
);
536 ui_out_field_stream (uiout
, "value", stb
);
537 ui_out_stream_delete (stb
);
542 /* Write given values into registers. The registers and values are
543 given as pairs. The corresponding MI command is
544 -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]*/
546 mi_cmd_data_write_register_values (char *command
, char **argv
, int argc
)
554 /* Note that the test for a valid register must include checking the
555 REGISTER_NAME because NUM_REGS may be allocated for the union of
556 the register sets within a family of related processors. In this
557 case, some entries of REGISTER_NAME will change depending upon
558 the particular processor being debugged. */
560 numregs
= NUM_REGS
+ NUM_PSEUDO_REGS
;
564 mi_error_message
= xstrprintf ("mi_cmd_data_write_register_values: Usage: -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]");
568 format
= (int) argv
[0][0];
570 if (!target_has_registers
)
572 mi_error_message
= xstrprintf ("mi_cmd_data_write_register_values: No registers.");
578 mi_error_message
= xstrprintf ("mi_cmd_data_write_register_values: No regs and values specified.");
584 mi_error_message
= xstrprintf ("mi_cmd_data_write_register_values: Regs and vals are not in pairs.");
588 for (i
= 1; i
< argc
; i
= i
+ 2)
590 regnum
= atoi (argv
[i
]);
594 && REGISTER_NAME (regnum
) != NULL
595 && *REGISTER_NAME (regnum
) != '\000')
598 struct cleanup
*old_chain
;
600 /* Get the value as a number */
601 value
= parse_and_eval_address (argv
[i
+ 1]);
602 /* Get the value into an array */
603 buffer
= xmalloc (DEPRECATED_REGISTER_SIZE
);
604 old_chain
= make_cleanup (xfree
, buffer
);
605 store_signed_integer (buffer
, DEPRECATED_REGISTER_SIZE
, value
);
607 deprecated_write_register_bytes (DEPRECATED_REGISTER_BYTE (regnum
), buffer
, register_size (current_gdbarch
, regnum
));
608 /* Free the buffer. */
609 do_cleanups (old_chain
);
613 mi_error_message
= xstrprintf ("bad register number");
621 /*This is commented out because we decided it was not useful. I leave
622 it, just in case. ezannoni:1999-12-08 */
624 /* Assign a value to a variable. The expression argument must be in
625 the form A=2 or "A = 2" (I.e. if there are spaces it needs to be
628 mi_cmd_data_assign (char *command
, char **argv
, int argc
)
630 struct expression
*expr
;
631 struct cleanup
*old_chain
;
635 mi_error_message
= xstrprintf ("mi_cmd_data_assign: Usage: -data-assign expression");
639 /* NOTE what follows is a clone of set_command(). FIXME: ezannoni
640 01-12-1999: Need to decide what to do with this for libgdb purposes. */
642 expr
= parse_expression (argv
[0]);
643 old_chain
= make_cleanup (free_current_contents
, &expr
);
644 evaluate_expression (expr
);
645 do_cleanups (old_chain
);
650 /* Evaluate the value of the argument. The argument is an
651 expression. If the expression contains spaces it needs to be
652 included in double quotes. */
654 mi_cmd_data_evaluate_expression (char *command
, char **argv
, int argc
)
656 struct expression
*expr
;
657 struct cleanup
*old_chain
= NULL
;
659 struct ui_stream
*stb
= NULL
;
661 stb
= ui_out_stream_new (uiout
);
665 mi_error_message
= xstrprintf ("mi_cmd_data_evaluate_expression: Usage: -data-evaluate-expression expression");
669 expr
= parse_expression (argv
[0]);
671 old_chain
= make_cleanup (free_current_contents
, &expr
);
673 val
= evaluate_expression (expr
);
675 /* Print the result of the expression evaluation. */
676 val_print (value_type (val
), value_contents (val
),
677 value_embedded_offset (val
), VALUE_ADDRESS (val
),
678 stb
->stream
, 0, 0, 0, 0);
680 ui_out_field_stream (uiout
, "value", stb
);
681 ui_out_stream_delete (stb
);
683 do_cleanups (old_chain
);
689 mi_cmd_target_download (char *args
, int from_tty
)
692 struct cleanup
*old_cleanups
= NULL
;
694 run
= xstrprintf ("load %s", args
);
695 old_cleanups
= make_cleanup (xfree
, run
);
696 execute_command (run
, from_tty
);
698 do_cleanups (old_cleanups
);
702 /* Connect to the remote target. */
704 mi_cmd_target_select (char *args
, int from_tty
)
707 struct cleanup
*old_cleanups
= NULL
;
709 run
= xstrprintf ("target %s", args
);
710 old_cleanups
= make_cleanup (xfree
, run
);
712 /* target-select is always synchronous. once the call has returned
713 we know that we are connected. */
714 /* NOTE: At present all targets that are connected are also
715 (implicitly) talking to a halted target. In the future this may
717 execute_command (run
, from_tty
);
719 do_cleanups (old_cleanups
);
721 /* Issue the completion message here. */
722 if (last_async_command
)
723 fputs_unfiltered (last_async_command
, raw_stdout
);
724 fputs_unfiltered ("^connected", raw_stdout
);
725 mi_out_put (uiout
, raw_stdout
);
726 mi_out_rewind (uiout
);
727 fputs_unfiltered ("\n", raw_stdout
);
728 do_exec_cleanups (ALL_CLEANUPS
);
734 ADDR: start address of data to be dumped.
735 WORD-FORMAT: a char indicating format for the ``word''. See
737 WORD-SIZE: size of each ``word''; 1,2,4, or 8 bytes
738 NR_ROW: Number of rows.
739 NR_COL: The number of colums (words per row).
740 ASCHAR: (OPTIONAL) Append an ascii character dump to each row. Use
741 ASCHAR for unprintable characters.
743 Reads SIZE*NR_ROW*NR_COL bytes starting at ADDR from memory and
744 displayes them. Returns:
746 {addr="...",rowN={wordN="..." ,... [,ascii="..."]}, ...}
749 The number of bytes read is SIZE*ROW*COL. */
752 mi_cmd_data_read_memory (char *command
, char **argv
, int argc
)
754 struct cleanup
*cleanups
= make_cleanup (null_cleanup
, NULL
);
760 struct type
*word_type
;
773 static struct mi_opt opts
[] =
775 {"o", OFFSET_OPT
, 1},
781 int opt
= mi_getopt ("mi_cmd_data_read_memory", argc
, argv
, opts
,
785 switch ((enum opt
) opt
)
788 offset
= atol (optarg
);
795 if (argc
< 5 || argc
> 6)
797 mi_error_message
= xstrprintf ("mi_cmd_data_read_memory: Usage: ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS [ASCHAR].");
801 /* Extract all the arguments. */
803 /* Start address of the memory dump. */
804 addr
= parse_and_eval_address (argv
[0]) + offset
;
805 /* The format character to use when displaying a memory word. See
806 the ``x'' command. */
807 word_format
= argv
[1][0];
808 /* The size of the memory word. */
809 word_size
= atol (argv
[2]);
813 word_type
= builtin_type_int8
;
817 word_type
= builtin_type_int16
;
821 word_type
= builtin_type_int32
;
825 word_type
= builtin_type_int64
;
829 word_type
= builtin_type_int8
;
832 /* The number of rows */
833 nr_rows
= atol (argv
[3]);
836 mi_error_message
= xstrprintf ("mi_cmd_data_read_memory: invalid number of rows.");
839 /* number of bytes per row. */
840 nr_cols
= atol (argv
[4]);
843 mi_error_message
= xstrprintf ("mi_cmd_data_read_memory: invalid number of columns.");
846 /* The un-printable character when printing ascii. */
852 /* create a buffer and read it in. */
853 total_bytes
= word_size
* nr_rows
* nr_cols
;
854 mbuf
= xcalloc (total_bytes
, 1);
855 make_cleanup (xfree
, mbuf
);
857 while (nr_bytes
< total_bytes
)
860 long num
= target_read_memory_partial (addr
+ nr_bytes
, mbuf
+ nr_bytes
,
861 total_bytes
- nr_bytes
,
868 /* output the header information. */
869 ui_out_field_core_addr (uiout
, "addr", addr
);
870 ui_out_field_int (uiout
, "nr-bytes", nr_bytes
);
871 ui_out_field_int (uiout
, "total-bytes", total_bytes
);
872 ui_out_field_core_addr (uiout
, "next-row", addr
+ word_size
* nr_cols
);
873 ui_out_field_core_addr (uiout
, "prev-row", addr
- word_size
* nr_cols
);
874 ui_out_field_core_addr (uiout
, "next-page", addr
+ total_bytes
);
875 ui_out_field_core_addr (uiout
, "prev-page", addr
- total_bytes
);
877 /* Build the result as a two dimentional table. */
879 struct ui_stream
*stream
= ui_out_stream_new (uiout
);
880 struct cleanup
*cleanup_list_memory
;
883 cleanup_list_memory
= make_cleanup_ui_out_list_begin_end (uiout
, "memory");
884 for (row
= 0, row_byte
= 0;
886 row
++, row_byte
+= nr_cols
* word_size
)
890 struct cleanup
*cleanup_tuple
;
891 struct cleanup
*cleanup_list_data
;
892 cleanup_tuple
= make_cleanup_ui_out_tuple_begin_end (uiout
, NULL
);
893 ui_out_field_core_addr (uiout
, "addr", addr
+ row_byte
);
894 /* ui_out_field_core_addr_symbolic (uiout, "saddr", addr + row_byte); */
895 cleanup_list_data
= make_cleanup_ui_out_list_begin_end (uiout
, "data");
896 for (col
= 0, col_byte
= row_byte
;
898 col
++, col_byte
+= word_size
)
900 if (col_byte
+ word_size
> nr_bytes
)
902 ui_out_field_string (uiout
, NULL
, "N/A");
906 ui_file_rewind (stream
->stream
);
907 print_scalar_formatted (mbuf
+ col_byte
, word_type
, word_format
,
908 word_asize
, stream
->stream
);
909 ui_out_field_stream (uiout
, NULL
, stream
);
912 do_cleanups (cleanup_list_data
);
916 ui_file_rewind (stream
->stream
);
917 for (byte
= row_byte
; byte
< row_byte
+ word_size
* nr_cols
; byte
++)
919 if (byte
>= nr_bytes
)
921 fputc_unfiltered ('X', stream
->stream
);
923 else if (mbuf
[byte
] < 32 || mbuf
[byte
] > 126)
925 fputc_unfiltered (aschar
, stream
->stream
);
928 fputc_unfiltered (mbuf
[byte
], stream
->stream
);
930 ui_out_field_stream (uiout
, "ascii", stream
);
932 do_cleanups (cleanup_tuple
);
934 ui_out_stream_delete (stream
);
935 do_cleanups (cleanup_list_memory
);
937 do_cleanups (cleanups
);
941 /* DATA-MEMORY-WRITE:
943 COLUMN_OFFSET: optional argument. Must be preceeded by '-o'. The
944 offset from the beginning of the memory grid row where the cell to
946 ADDR: start address of the row in the memory grid where the memory
947 cell is, if OFFSET_COLUMN is specified. Otherwise, the address of
948 the location to write to.
949 FORMAT: a char indicating format for the ``word''. See
951 WORD_SIZE: size of each ``word''; 1,2,4, or 8 bytes
952 VALUE: value to be written into the memory address.
954 Writes VALUE into ADDR + (COLUMN_OFFSET * WORD_SIZE).
958 mi_cmd_data_write_memory (char *command
, char **argv
, int argc
)
963 /* FIXME: ezannoni 2000-02-17 LONGEST could possibly not be big
964 enough when using a compiler other than GCC. */
967 struct cleanup
*old_chain
;
975 static struct mi_opt opts
[] =
977 {"o", OFFSET_OPT
, 1},
983 int opt
= mi_getopt ("mi_cmd_data_write_memory", argc
, argv
, opts
,
987 switch ((enum opt
) opt
)
990 offset
= atol (optarg
);
999 mi_error_message
= xstrprintf ("mi_cmd_data_write_memory: Usage: [-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE.");
1000 return MI_CMD_ERROR
;
1003 /* Extract all the arguments. */
1004 /* Start address of the memory dump. */
1005 addr
= parse_and_eval_address (argv
[0]);
1006 /* The format character to use when displaying a memory word. See
1007 the ``x'' command. */
1008 word_format
= argv
[1][0];
1009 /* The size of the memory word. */
1010 word_size
= atol (argv
[2]);
1012 /* Calculate the real address of the write destination. */
1013 addr
+= (offset
* word_size
);
1015 /* Get the value as a number */
1016 value
= parse_and_eval_address (argv
[3]);
1017 /* Get the value into an array */
1018 buffer
= xmalloc (word_size
);
1019 old_chain
= make_cleanup (xfree
, buffer
);
1020 store_signed_integer (buffer
, word_size
, value
);
1021 /* Write it down to memory */
1022 write_memory (addr
, buffer
, word_size
);
1023 /* Free the buffer. */
1024 do_cleanups (old_chain
);
1029 /* Execute a command within a safe environment.
1030 Return <0 for error; >=0 for ok.
1032 args->action will tell mi_execute_command what action
1033 to perfrom after the given command has executed (display/supress
1034 prompt, display error). */
1037 captured_mi_execute_command (struct ui_out
*uiout
, void *data
)
1039 struct captured_mi_execute_command_args
*args
=
1040 (struct captured_mi_execute_command_args
*) data
;
1041 struct mi_parse
*context
= args
->command
;
1043 switch (context
->op
)
1047 /* A MI command was read from the input stream */
1049 /* FIXME: gdb_???? */
1050 fprintf_unfiltered (raw_stdout
, " token=`%s' command=`%s' args=`%s'\n",
1051 context
->token
, context
->command
, context
->args
);
1052 /* FIXME: cagney/1999-09-25: Rather than this convoluted
1053 condition expression, each function should return an
1054 indication of what action is required and then switch on
1056 args
->action
= EXECUTE_COMMAND_DISPLAY_PROMPT
;
1057 args
->rc
= mi_cmd_execute (context
);
1059 if (!target_can_async_p () || !target_executing
)
1061 /* print the result if there were no errors
1063 Remember that on the way out of executing a command, you have
1064 to directly use the mi_interp's uiout, since the command could
1065 have reset the interpreter, in which case the current uiout
1066 will most likely crash in the mi_out_* routines. */
1067 if (args
->rc
== MI_CMD_DONE
)
1069 fputs_unfiltered (context
->token
, raw_stdout
);
1070 fputs_unfiltered ("^done", raw_stdout
);
1071 mi_out_put (uiout
, raw_stdout
);
1072 mi_out_rewind (uiout
);
1073 fputs_unfiltered ("\n", raw_stdout
);
1075 else if (args
->rc
== MI_CMD_ERROR
)
1077 if (mi_error_message
)
1079 fputs_unfiltered (context
->token
, raw_stdout
);
1080 fputs_unfiltered ("^error,msg=\"", raw_stdout
);
1081 fputstr_unfiltered (mi_error_message
, '"', raw_stdout
);
1082 xfree (mi_error_message
);
1083 fputs_unfiltered ("\"\n", raw_stdout
);
1085 mi_out_rewind (uiout
);
1088 mi_out_rewind (uiout
);
1090 else if (sync_execution
)
1092 /* Don't print the prompt. We are executing the target in
1093 synchronous mode. */
1094 args
->action
= EXECUTE_COMMAND_SUPRESS_PROMPT
;
1102 /* A CLI command was read from the input stream. */
1103 /* This "feature" will be removed as soon as we have a
1104 complete set of mi commands. */
1105 /* Echo the command on the console. */
1106 fprintf_unfiltered (gdb_stdlog
, "%s\n", context
->command
);
1107 /* Call the "console" interpreter. */
1108 argv
[0] = "console";
1109 argv
[1] = context
->command
;
1110 args
->rc
= mi_cmd_interpreter_exec ("-interpreter-exec", argv
, 2);
1112 /* If we changed interpreters, DON'T print out anything. */
1113 if (current_interp_named_p (INTERP_MI
)
1114 || current_interp_named_p (INTERP_MI1
)
1115 || current_interp_named_p (INTERP_MI2
)
1116 || current_interp_named_p (INTERP_MI3
))
1118 if (args
->rc
== MI_CMD_DONE
)
1120 fputs_unfiltered (context
->token
, raw_stdout
);
1121 fputs_unfiltered ("^done", raw_stdout
);
1122 mi_out_put (uiout
, raw_stdout
);
1123 mi_out_rewind (uiout
);
1124 fputs_unfiltered ("\n", raw_stdout
);
1125 args
->action
= EXECUTE_COMMAND_DISPLAY_PROMPT
;
1127 else if (args
->rc
== MI_CMD_ERROR
)
1129 if (mi_error_message
)
1131 fputs_unfiltered (context
->token
, raw_stdout
);
1132 fputs_unfiltered ("^error,msg=\"", raw_stdout
);
1133 fputstr_unfiltered (mi_error_message
, '"', raw_stdout
);
1134 xfree (mi_error_message
);
1135 fputs_unfiltered ("\"\n", raw_stdout
);
1137 mi_out_rewind (uiout
);
1140 mi_out_rewind (uiout
);
1152 mi_execute_command (char *cmd
, int from_tty
)
1154 struct mi_parse
*command
;
1155 struct captured_mi_execute_command_args args
;
1156 struct ui_out
*saved_uiout
= uiout
;
1158 /* This is to handle EOF (^D). We just quit gdb. */
1159 /* FIXME: we should call some API function here. */
1161 quit_force (NULL
, from_tty
);
1163 command
= mi_parse (cmd
);
1165 if (command
!= NULL
)
1167 struct gdb_exception result
;
1168 /* FIXME: cagney/1999-11-04: Can this use of catch_exceptions either
1169 be pushed even further down or even eliminated? */
1170 args
.command
= command
;
1171 result
= catch_exception (uiout
, captured_mi_execute_command
, &args
,
1173 exception_print (gdb_stderr
, result
);
1175 if (args
.action
== EXECUTE_COMMAND_SUPRESS_PROMPT
)
1177 /* The command is executing synchronously. Bail out early
1178 suppressing the finished prompt. */
1179 mi_parse_free (command
);
1182 if (result
.reason
< 0)
1184 /* The command execution failed and error() was called
1186 fputs_unfiltered (command
->token
, raw_stdout
);
1187 fputs_unfiltered ("^error,msg=\"", raw_stdout
);
1188 fputstr_unfiltered (result
.message
, '"', raw_stdout
);
1189 fputs_unfiltered ("\"\n", raw_stdout
);
1190 mi_out_rewind (uiout
);
1192 mi_parse_free (command
);
1195 fputs_unfiltered ("(gdb) \n", raw_stdout
);
1196 gdb_flush (raw_stdout
);
1197 /* print any buffered hook code */
1201 static enum mi_cmd_result
1202 mi_cmd_execute (struct mi_parse
*parse
)
1204 if (parse
->cmd
->argv_func
!= NULL
1205 || parse
->cmd
->args_func
!= NULL
)
1207 /* FIXME: We need to save the token because the command executed
1208 may be asynchronous and need to print the token again.
1209 In the future we can pass the token down to the func
1210 and get rid of the last_async_command */
1211 /* The problem here is to keep the token around when we launch
1212 the target, and we want to interrupt it later on. The
1213 interrupt command will have its own token, but when the
1214 target stops, we must display the token corresponding to the
1215 last execution command given. So we have another string where
1216 we copy the token (previous_async_command), if this was
1217 indeed the token of an execution command, and when we stop we
1218 print that one. This is possible because the interrupt
1219 command, when over, will copy that token back into the
1220 default token string (last_async_command). */
1222 if (target_executing
)
1224 if (!previous_async_command
)
1225 previous_async_command
= xstrdup (last_async_command
);
1226 if (strcmp (parse
->command
, "exec-interrupt"))
1228 fputs_unfiltered (parse
->token
, raw_stdout
);
1229 fputs_unfiltered ("^error,msg=\"", raw_stdout
);
1230 fputs_unfiltered ("Cannot execute command ", raw_stdout
);
1231 fputstr_unfiltered (parse
->command
, '"', raw_stdout
);
1232 fputs_unfiltered (" while target running", raw_stdout
);
1233 fputs_unfiltered ("\"\n", raw_stdout
);
1234 return MI_CMD_ERROR
;
1237 last_async_command
= xstrdup (parse
->token
);
1238 make_exec_cleanup (free_current_contents
, &last_async_command
);
1239 /* FIXME: DELETE THIS! */
1240 if (parse
->cmd
->args_func
!= NULL
)
1241 return parse
->cmd
->args_func (parse
->args
, 0 /*from_tty */ );
1242 return parse
->cmd
->argv_func (parse
->command
, parse
->argv
, parse
->argc
);
1244 else if (parse
->cmd
->cli
.cmd
!= 0)
1246 /* FIXME: DELETE THIS. */
1247 /* The operation is still implemented by a cli command */
1248 /* Must be a synchronous one */
1249 mi_execute_cli_command (parse
->cmd
->cli
.cmd
, parse
->cmd
->cli
.args_p
,
1255 /* FIXME: DELETE THIS. */
1256 fputs_unfiltered (parse
->token
, raw_stdout
);
1257 fputs_unfiltered ("^error,msg=\"", raw_stdout
);
1258 fputs_unfiltered ("Undefined mi command: ", raw_stdout
);
1259 fputstr_unfiltered (parse
->command
, '"', raw_stdout
);
1260 fputs_unfiltered (" (missing implementation)", raw_stdout
);
1261 fputs_unfiltered ("\"\n", raw_stdout
);
1262 return MI_CMD_ERROR
;
1266 /* FIXME: This is just a hack so we can get some extra commands going.
1267 We don't want to channel things through the CLI, but call libgdb directly */
1268 /* Use only for synchronous commands */
1271 mi_execute_cli_command (const char *cmd
, int args_p
, const char *args
)
1275 struct cleanup
*old_cleanups
;
1278 run
= xstrprintf ("%s %s", cmd
, args
);
1280 run
= xstrdup (cmd
);
1282 /* FIXME: gdb_???? */
1283 fprintf_unfiltered (gdb_stdout
, "cli=%s run=%s\n",
1285 old_cleanups
= make_cleanup (xfree
, run
);
1286 execute_command ( /*ui */ run
, 0 /*from_tty */ );
1287 do_cleanups (old_cleanups
);
1293 mi_execute_async_cli_command (char *mi
, char *args
, int from_tty
)
1295 struct cleanup
*old_cleanups
;
1299 if (target_can_async_p ())
1301 async_args
= (char *) xmalloc (strlen (args
) + 2);
1302 make_exec_cleanup (free
, async_args
);
1303 strcpy (async_args
, args
);
1304 strcat (async_args
, "&");
1305 run
= xstrprintf ("%s %s", mi
, async_args
);
1306 make_exec_cleanup (free
, run
);
1307 add_continuation (mi_exec_async_cli_cmd_continuation
, NULL
);
1308 old_cleanups
= NULL
;
1312 run
= xstrprintf ("%s %s", mi
, args
);
1313 old_cleanups
= make_cleanup (xfree
, run
);
1316 if (!target_can_async_p ())
1318 /* NOTE: For synchronous targets asynchronous behavour is faked by
1319 printing out the GDB prompt before we even try to execute the
1321 if (last_async_command
)
1322 fputs_unfiltered (last_async_command
, raw_stdout
);
1323 fputs_unfiltered ("^running\n", raw_stdout
);
1324 fputs_unfiltered ("(gdb) \n", raw_stdout
);
1325 gdb_flush (raw_stdout
);
1329 /* FIXME: cagney/1999-11-29: Printing this message before
1330 calling execute_command is wrong. It should only be printed
1331 once gdb has confirmed that it really has managed to send a
1332 run command to the target. */
1333 if (last_async_command
)
1334 fputs_unfiltered (last_async_command
, raw_stdout
);
1335 fputs_unfiltered ("^running\n", raw_stdout
);
1338 execute_command ( /*ui */ run
, 0 /*from_tty */ );
1340 if (!target_can_async_p ())
1342 /* Do this before doing any printing. It would appear that some
1343 print code leaves garbage around in the buffer. */
1344 do_cleanups (old_cleanups
);
1345 /* If the target was doing the operation synchronously we fake
1346 the stopped message. */
1347 if (last_async_command
)
1348 fputs_unfiltered (last_async_command
, raw_stdout
);
1349 fputs_unfiltered ("*stopped", raw_stdout
);
1350 mi_out_put (uiout
, raw_stdout
);
1351 mi_out_rewind (uiout
);
1352 fputs_unfiltered ("\n", raw_stdout
);
1353 return MI_CMD_QUIET
;
1359 mi_exec_async_cli_cmd_continuation (struct continuation_arg
*arg
)
1361 if (last_async_command
)
1362 fputs_unfiltered (last_async_command
, raw_stdout
);
1363 fputs_unfiltered ("*stopped", raw_stdout
);
1364 mi_out_put (uiout
, raw_stdout
);
1365 fputs_unfiltered ("\n", raw_stdout
);
1366 fputs_unfiltered ("(gdb) \n", raw_stdout
);
1367 gdb_flush (raw_stdout
);
1368 do_exec_cleanups (ALL_CLEANUPS
);
1372 mi_load_progress (const char *section_name
,
1373 unsigned long sent_so_far
,
1374 unsigned long total_section
,
1375 unsigned long total_sent
,
1376 unsigned long grand_total
)
1378 struct timeval time_now
, delta
, update_threshold
;
1379 static struct timeval last_update
;
1380 static char *previous_sect_name
= NULL
;
1382 struct ui_out
*saved_uiout
;
1384 /* This function is called through deprecated_show_load_progress
1385 which means uiout may not be correct. Fix it for the duration
1386 of this function. */
1387 saved_uiout
= uiout
;
1389 if (current_interp_named_p (INTERP_MI
))
1390 uiout
= mi_out_new (2);
1391 else if (current_interp_named_p (INTERP_MI1
))
1392 uiout
= mi_out_new (1);
1396 update_threshold
.tv_sec
= 0;
1397 update_threshold
.tv_usec
= 500000;
1398 gettimeofday (&time_now
, NULL
);
1400 delta
.tv_usec
= time_now
.tv_usec
- last_update
.tv_usec
;
1401 delta
.tv_sec
= time_now
.tv_sec
- last_update
.tv_sec
;
1403 if (delta
.tv_usec
< 0)
1406 delta
.tv_usec
+= 1000000;
1409 new_section
= (previous_sect_name
?
1410 strcmp (previous_sect_name
, section_name
) : 1);
1413 struct cleanup
*cleanup_tuple
;
1414 xfree (previous_sect_name
);
1415 previous_sect_name
= xstrdup (section_name
);
1417 if (last_async_command
)
1418 fputs_unfiltered (last_async_command
, raw_stdout
);
1419 fputs_unfiltered ("+download", raw_stdout
);
1420 cleanup_tuple
= make_cleanup_ui_out_tuple_begin_end (uiout
, NULL
);
1421 ui_out_field_string (uiout
, "section", section_name
);
1422 ui_out_field_int (uiout
, "section-size", total_section
);
1423 ui_out_field_int (uiout
, "total-size", grand_total
);
1424 do_cleanups (cleanup_tuple
);
1425 mi_out_put (uiout
, raw_stdout
);
1426 fputs_unfiltered ("\n", raw_stdout
);
1427 gdb_flush (raw_stdout
);
1430 if (delta
.tv_sec
>= update_threshold
.tv_sec
&&
1431 delta
.tv_usec
>= update_threshold
.tv_usec
)
1433 struct cleanup
*cleanup_tuple
;
1434 last_update
.tv_sec
= time_now
.tv_sec
;
1435 last_update
.tv_usec
= time_now
.tv_usec
;
1436 if (last_async_command
)
1437 fputs_unfiltered (last_async_command
, raw_stdout
);
1438 fputs_unfiltered ("+download", raw_stdout
);
1439 cleanup_tuple
= make_cleanup_ui_out_tuple_begin_end (uiout
, NULL
);
1440 ui_out_field_string (uiout
, "section", section_name
);
1441 ui_out_field_int (uiout
, "section-sent", sent_so_far
);
1442 ui_out_field_int (uiout
, "section-size", total_section
);
1443 ui_out_field_int (uiout
, "total-sent", total_sent
);
1444 ui_out_field_int (uiout
, "total-size", grand_total
);
1445 do_cleanups (cleanup_tuple
);
1446 mi_out_put (uiout
, raw_stdout
);
1447 fputs_unfiltered ("\n", raw_stdout
);
1448 gdb_flush (raw_stdout
);
1452 uiout
= saved_uiout
;
1456 mi_setup_architecture_data (void)
1458 old_regs
= xmalloc ((NUM_REGS
+ NUM_PSEUDO_REGS
) * MAX_REGISTER_SIZE
+ 1);
1459 memset (old_regs
, 0, (NUM_REGS
+ NUM_PSEUDO_REGS
) * MAX_REGISTER_SIZE
+ 1);
1463 _initialize_mi_main (void)
1465 DEPRECATED_REGISTER_GDBARCH_SWAP (old_regs
);
1466 deprecated_register_gdbarch_swap (NULL
, 0, mi_setup_architecture_data
);