| Index: gdb/mi/mi-main.c
|
| diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
|
| index b170f01ab4d264e84581336c2b50eceb82e856c5..dfb489243cbe4a569e43a6f2f8681494bbac76da 100644
|
| --- a/gdb/mi/mi-main.c
|
| +++ b/gdb/mi/mi-main.c
|
| @@ -19,8 +19,6 @@
|
| You should have received a copy of the GNU General Public License
|
| along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
| -/* Work in progress. */
|
| -
|
| #include "defs.h"
|
| #include "arch-utils.h"
|
| #include "target.h"
|
| @@ -71,18 +69,19 @@ enum
|
| };
|
|
|
| int mi_debug_p;
|
| +
|
| struct ui_file *raw_stdout;
|
|
|
| -/* This is used to pass the current command timestamp
|
| - down to continuation routines. */
|
| +/* This is used to pass the current command timestamp down to
|
| + continuation routines. */
|
| static struct mi_timestamp *current_command_ts;
|
|
|
| static int do_timings = 0;
|
|
|
| char *current_token;
|
| -/* Few commands would like to know if options like --thread-group
|
| - were explicitly specified. This variable keeps the current
|
| - parsed command including all option, and make it possible. */
|
| +/* Few commands would like to know if options like --thread-group were
|
| + explicitly specified. This variable keeps the current parsed
|
| + command including all option, and make it possible. */
|
| static struct mi_parse *current_context;
|
|
|
| int running_result_record_printed = 1;
|
| @@ -178,7 +177,7 @@ void
|
| mi_cmd_exec_return (char *command, char **argv, int argc)
|
| {
|
| /* This command doesn't really execute the target, it just pops the
|
| - specified number of frames. */
|
| + specified number of frames. */
|
| if (argc)
|
| /* Call return_command with from_tty argument equal to 0 so as to
|
| avoid being queried. */
|
| @@ -211,10 +210,9 @@ proceed_thread (struct thread_info *thread, int pid)
|
|
|
| switch_to_thread (thread->ptid);
|
| clear_proceed_status ();
|
| - proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
|
| + proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0);
|
| }
|
|
|
| -
|
| static int
|
| proceed_thread_callback (struct thread_info *thread, void *arg)
|
| {
|
| @@ -229,9 +227,10 @@ exec_continue (char **argv, int argc)
|
| {
|
| if (non_stop)
|
| {
|
| - /* In non-stop mode, 'resume' always resumes a single thread. Therefore,
|
| - to resume all threads of the current inferior, or all threads in all
|
| - inferiors, we need to iterate over threads.
|
| + /* In non-stop mode, 'resume' always resumes a single thread.
|
| + Therefore, to resume all threads of the current inferior, or
|
| + all threads in all inferiors, we need to iterate over
|
| + threads.
|
|
|
| See comment on infcmd.c:proceed_thread_callback for rationale. */
|
| if (current_context->all || current_context->thread_group != -1)
|
| @@ -265,9 +264,10 @@ exec_continue (char **argv, int argc)
|
| }
|
| else
|
| {
|
| - /* In all-stop mode, -exec-continue traditionally resumed either
|
| - all threads, or one thread, depending on the 'scheduler-locking'
|
| - variable. Let's continue to do the same. */
|
| + /* In all-stop mode, -exec-continue traditionally resumed
|
| + either all threads, or one thread, depending on the
|
| + 'scheduler-locking' variable. Let's continue to do the
|
| + same. */
|
| continue_1 (1);
|
| }
|
| do_cleanups (back_to);
|
| @@ -322,11 +322,12 @@ interrupt_thread_callback (struct thread_info *thread, void *arg)
|
| return 0;
|
| }
|
|
|
| -/* Interrupt the execution of the target. Note how we must play around
|
| - with the token variables, in order to display the current token in
|
| - the result of the interrupt command, and the previous execution
|
| - token when the target finally stops. See comments in
|
| +/* Interrupt the execution of the target. Note how we must play
|
| + around with the token variables, in order to display the current
|
| + token in the result of the interrupt command, and the previous
|
| + execution token when the target finally stops. See comments in
|
| mi_cmd_execute. */
|
| +
|
| void
|
| mi_cmd_exec_interrupt (char *command, char **argv, int argc)
|
| {
|
| @@ -507,6 +508,8 @@ mi_cmd_thread_info (char *command, char **argv, int argc)
|
| print_thread_info (current_uiout, argv[0], -1);
|
| }
|
|
|
| +DEF_VEC_I(int);
|
| +
|
| struct collect_cores_data
|
| {
|
| int pid;
|
| @@ -609,8 +612,9 @@ print_one_inferior (struct inferior *inferior, void *xdata)
|
| return 0;
|
| }
|
|
|
| -/* Output a field named 'cores' with a list as the value. The elements of
|
| - the list are obtained by splitting 'cores' on comma. */
|
| +/* Output a field named 'cores' with a list as the value. The
|
| + elements of the list are obtained by splitting 'cores' on
|
| + comma. */
|
|
|
| static void
|
| output_cores (struct ui_out *uiout, const char *field_name, const char *xcores)
|
| @@ -797,23 +801,23 @@ mi_cmd_list_thread_groups (char *command, char **argv, int argc)
|
| VEC (int) *ids = 0;
|
|
|
| enum opt
|
| - {
|
| - AVAILABLE_OPT, RECURSE_OPT
|
| - };
|
| - static const struct mi_opt opts[] =
|
| {
|
| - {"-available", AVAILABLE_OPT, 0},
|
| - {"-recurse", RECURSE_OPT, 1},
|
| - { 0, 0, 0 }
|
| + AVAILABLE_OPT, RECURSE_OPT
|
| };
|
| + static const struct mi_opt opts[] =
|
| + {
|
| + {"-available", AVAILABLE_OPT, 0},
|
| + {"-recurse", RECURSE_OPT, 1},
|
| + { 0, 0, 0 }
|
| + };
|
|
|
| - int optind = 0;
|
| - char *optarg;
|
| + int oind = 0;
|
| + char *oarg;
|
|
|
| while (1)
|
| {
|
| int opt = mi_getopt ("-list-thread-groups", argc, argv, opts,
|
| - &optind, &optarg);
|
| + &oind, &oarg);
|
|
|
| if (opt < 0)
|
| break;
|
| @@ -823,9 +827,9 @@ mi_cmd_list_thread_groups (char *command, char **argv, int argc)
|
| available = 1;
|
| break;
|
| case RECURSE_OPT:
|
| - if (strcmp (optarg, "0") == 0)
|
| + if (strcmp (oarg, "0") == 0)
|
| ;
|
| - else if (strcmp (optarg, "1") == 0)
|
| + else if (strcmp (oarg, "1") == 0)
|
| recurse = 1;
|
| else
|
| error (_("only '0' and '1' are valid values "
|
| @@ -834,18 +838,18 @@ mi_cmd_list_thread_groups (char *command, char **argv, int argc)
|
| }
|
| }
|
|
|
| - for (; optind < argc; ++optind)
|
| + for (; oind < argc; ++oind)
|
| {
|
| char *end;
|
| int inf;
|
|
|
| - if (*(argv[optind]) != 'i')
|
| - error (_("invalid syntax of group id '%s'"), argv[optind]);
|
| + if (*(argv[oind]) != 'i')
|
| + error (_("invalid syntax of group id '%s'"), argv[oind]);
|
|
|
| - inf = strtoul (argv[optind] + 1, &end, 0);
|
| + inf = strtoul (argv[oind] + 1, &end, 0);
|
|
|
| if (*end != '\0')
|
| - error (_("invalid syntax of group id '%s'"), argv[optind]);
|
| + error (_("invalid syntax of group id '%s'"), argv[oind]);
|
| VEC_safe_push (int, ids, inf);
|
| }
|
| if (VEC_length (int, ids) > 1)
|
| @@ -861,7 +865,7 @@ mi_cmd_list_thread_groups (char *command, char **argv, int argc)
|
| }
|
| else if (VEC_length (int, ids) == 1)
|
| {
|
| - /* Local thread groups, single id. */
|
| + /* Local thread groups, single id. */
|
| int id = *VEC_address (int, ids);
|
| struct inferior *inf = find_inferior_id (id);
|
|
|
| @@ -899,10 +903,11 @@ mi_cmd_data_list_register_names (char *command, char **argv, int argc)
|
| struct cleanup *cleanup;
|
|
|
| /* Note that the test for a valid register must include checking the
|
| - gdbarch_register_name because gdbarch_num_regs may be allocated for
|
| - the union of the register sets within a family of related processors.
|
| - In this case, some entries of gdbarch_register_name will change depending
|
| - upon the particular processor being debugged. */
|
| + gdbarch_register_name because gdbarch_num_regs may be allocated
|
| + for the union of the register sets within a family of related
|
| + processors. In this case, some entries of gdbarch_register_name
|
| + will change depending upon the particular processor being
|
| + debugged. */
|
|
|
| gdbarch = get_current_arch ();
|
| numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
|
| @@ -952,27 +957,30 @@ mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
|
| int i;
|
| struct cleanup *cleanup;
|
|
|
| - /* The last time we visited this function, the current frame's register
|
| - contents were saved in THIS_REGS. Move THIS_REGS over to PREV_REGS,
|
| - and refresh THIS_REGS with the now-current register contents. */
|
| + /* The last time we visited this function, the current frame's
|
| + register contents were saved in THIS_REGS. Move THIS_REGS over
|
| + to PREV_REGS, and refresh THIS_REGS with the now-current register
|
| + contents. */
|
|
|
| prev_regs = this_regs;
|
| this_regs = frame_save_as_regcache (get_selected_frame (NULL));
|
| cleanup = make_cleanup_regcache_xfree (prev_regs);
|
|
|
| /* Note that the test for a valid register must include checking the
|
| - gdbarch_register_name because gdbarch_num_regs may be allocated for
|
| - the union of the register sets within a family of related processors.
|
| - In this case, some entries of gdbarch_register_name will change depending
|
| - upon the particular processor being debugged. */
|
| + gdbarch_register_name because gdbarch_num_regs may be allocated
|
| + for the union of the register sets within a family of related
|
| + processors. In this case, some entries of gdbarch_register_name
|
| + will change depending upon the particular processor being
|
| + debugged. */
|
|
|
| gdbarch = get_regcache_arch (this_regs);
|
| numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
|
|
|
| make_cleanup_ui_out_list_begin_end (uiout, "changed-registers");
|
|
|
| - if (argc == 0) /* No args, just do all the regs. */
|
| + if (argc == 0)
|
| {
|
| + /* No args, just do all the regs. */
|
| for (regnum = 0;
|
| regnum < numregs;
|
| regnum++)
|
| @@ -1042,11 +1050,13 @@ register_changed_p (int regnum, struct regcache *prev_regs,
|
|
|
| /* Return a list of register number and value pairs. The valid
|
| arguments expected are: a letter indicating the format in which to
|
| - display the registers contents. This can be one of: x (hexadecimal), d
|
| - (decimal), N (natural), t (binary), o (octal), r (raw). After the
|
| - format argumetn there can be a sequence of numbers, indicating which
|
| - registers to fetch the content of. If the format is the only argument,
|
| - a list of all the registers with their values is returned. */
|
| + display the registers contents. This can be one of: x
|
| + (hexadecimal), d (decimal), N (natural), t (binary), o (octal), r
|
| + (raw). After the format argument there can be a sequence of
|
| + numbers, indicating which registers to fetch the content of. If
|
| + the format is the only argument, a list of all the registers with
|
| + their values is returned. */
|
| +
|
| void
|
| mi_cmd_data_list_register_values (char *command, char **argv, int argc)
|
| {
|
| @@ -1058,10 +1068,11 @@ mi_cmd_data_list_register_values (char *command, char **argv, int argc)
|
| struct cleanup *list_cleanup, *tuple_cleanup;
|
|
|
| /* Note that the test for a valid register must include checking the
|
| - gdbarch_register_name because gdbarch_num_regs may be allocated for
|
| - the union of the register sets within a family of related processors.
|
| - In this case, some entries of gdbarch_register_name will change depending
|
| - upon the particular processor being debugged. */
|
| + gdbarch_register_name because gdbarch_num_regs may be allocated
|
| + for the union of the register sets within a family of related
|
| + processors. In this case, some entries of gdbarch_register_name
|
| + will change depending upon the particular processor being
|
| + debugged. */
|
|
|
| if (argc == 0)
|
| error (_("-data-list-register-values: Usage: "
|
| @@ -1075,8 +1086,9 @@ mi_cmd_data_list_register_values (char *command, char **argv, int argc)
|
|
|
| list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-values");
|
|
|
| - if (argc == 1) /* No args, beside the format: do all the regs. */
|
| + if (argc == 1)
|
| {
|
| + /* No args, beside the format: do all the regs. */
|
| for (regnum = 0;
|
| regnum < numregs;
|
| regnum++)
|
| @@ -1113,18 +1125,14 @@ mi_cmd_data_list_register_values (char *command, char **argv, int argc)
|
| }
|
|
|
| /* Output one register's contents in the desired format. */
|
| +
|
| static void
|
| get_register (struct frame_info *frame, int regnum, int format)
|
| {
|
| struct gdbarch *gdbarch = get_frame_arch (frame);
|
| struct ui_out *uiout = current_uiout;
|
| - CORE_ADDR addr;
|
| - enum lval_type lval;
|
| - struct ui_stream *stb;
|
| struct value *val;
|
|
|
| - stb = ui_out_stream_new (uiout);
|
| -
|
| if (format == 'N')
|
| format = 0;
|
|
|
| @@ -1150,20 +1158,24 @@ get_register (struct frame_info *frame, int regnum, int format)
|
| ptr += 2;
|
| }
|
| ui_out_field_string (uiout, "value", buf);
|
| - /*fputs_filtered (buf, gdb_stdout); */
|
| }
|
| else
|
| {
|
| struct value_print_options opts;
|
| + struct ui_file *stb;
|
| + struct cleanup *old_chain;
|
| +
|
| + stb = mem_fileopen ();
|
| + old_chain = make_cleanup_ui_file_delete (stb);
|
|
|
| get_formatted_print_options (&opts, format);
|
| opts.deref_ref = 1;
|
| val_print (value_type (val),
|
| value_contents_for_printing (val),
|
| value_embedded_offset (val), 0,
|
| - stb->stream, 0, val, &opts, current_language);
|
| + stb, 0, val, &opts, current_language);
|
| ui_out_field_stream (uiout, "value", stb);
|
| - ui_out_stream_delete (stb);
|
| + do_cleanups (old_chain);
|
| }
|
| }
|
|
|
| @@ -1180,10 +1192,11 @@ mi_cmd_data_write_register_values (char *command, char **argv, int argc)
|
| char format;
|
|
|
| /* Note that the test for a valid register must include checking the
|
| - gdbarch_register_name because gdbarch_num_regs may be allocated for
|
| - the union of the register sets within a family of related processors.
|
| - In this case, some entries of gdbarch_register_name will change depending
|
| - upon the particular processor being debugged. */
|
| + gdbarch_register_name because gdbarch_num_regs may be allocated
|
| + for the union of the register sets within a family of related
|
| + processors. In this case, some entries of gdbarch_register_name
|
| + will change depending upon the particular processor being
|
| + debugged. */
|
|
|
| regcache = get_current_regcache ();
|
| gdbarch = get_regcache_arch (regcache);
|
| @@ -1229,43 +1242,41 @@ mi_cmd_data_write_register_values (char *command, char **argv, int argc)
|
| /* Evaluate the value of the argument. The argument is an
|
| expression. If the expression contains spaces it needs to be
|
| included in double quotes. */
|
| +
|
| void
|
| mi_cmd_data_evaluate_expression (char *command, char **argv, int argc)
|
| {
|
| struct expression *expr;
|
| - struct cleanup *old_chain = NULL;
|
| + struct cleanup *old_chain;
|
| struct value *val;
|
| - struct ui_stream *stb = NULL;
|
| + struct ui_file *stb;
|
| struct value_print_options opts;
|
| struct ui_out *uiout = current_uiout;
|
|
|
| - stb = ui_out_stream_new (uiout);
|
| + stb = mem_fileopen ();
|
| + old_chain = make_cleanup_ui_file_delete (stb);
|
|
|
| if (argc != 1)
|
| - {
|
| - ui_out_stream_delete (stb);
|
| - error (_("-data-evaluate-expression: "
|
| - "Usage: -data-evaluate-expression expression"));
|
| - }
|
| + error (_("-data-evaluate-expression: "
|
| + "Usage: -data-evaluate-expression expression"));
|
|
|
| expr = parse_expression (argv[0]);
|
|
|
| - old_chain = make_cleanup (free_current_contents, &expr);
|
| + make_cleanup (free_current_contents, &expr);
|
|
|
| val = evaluate_expression (expr);
|
|
|
| /* Print the result of the expression evaluation. */
|
| get_user_print_options (&opts);
|
| opts.deref_ref = 0;
|
| - common_val_print (val, stb->stream, 0, &opts, current_language);
|
| + common_val_print (val, stb, 0, &opts, current_language);
|
|
|
| ui_out_field_stream (uiout, "value", stb);
|
| - ui_out_stream_delete (stb);
|
|
|
| do_cleanups (old_chain);
|
| }
|
|
|
| -/* DATA-MEMORY-READ:
|
| +/* This is the -data-read-memory command.
|
|
|
| ADDR: start address of data to be dumped.
|
| WORD-FORMAT: a char indicating format for the ``word''. See
|
| @@ -1282,7 +1293,7 @@ mi_cmd_data_evaluate_expression (char *command, char **argv, int argc)
|
| {addr="...",rowN={wordN="..." ,... [,ascii="..."]}, ...}
|
|
|
| Returns:
|
| - The number of bytes read is SIZE*ROW*COL. */
|
| + The number of bytes read is SIZE*ROW*COL. */
|
|
|
| void
|
| mi_cmd_data_read_memory (char *command, char **argv, int argc)
|
| @@ -1291,9 +1302,7 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
|
| struct ui_out *uiout = current_uiout;
|
| struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
|
| CORE_ADDR addr;
|
| - long total_bytes;
|
| - long nr_cols;
|
| - long nr_rows;
|
| + long total_bytes, nr_cols, nr_rows;
|
| char word_format;
|
| struct type *word_type;
|
| long word_size;
|
| @@ -1302,34 +1311,34 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
|
| gdb_byte *mbuf;
|
| int nr_bytes;
|
| long offset = 0;
|
| - int optind = 0;
|
| - char *optarg;
|
| + int oind = 0;
|
| + char *oarg;
|
| enum opt
|
| - {
|
| - OFFSET_OPT
|
| - };
|
| - static const struct mi_opt opts[] =
|
| {
|
| - {"o", OFFSET_OPT, 1},
|
| - { 0, 0, 0 }
|
| + OFFSET_OPT
|
| };
|
| + static const struct mi_opt opts[] =
|
| + {
|
| + {"o", OFFSET_OPT, 1},
|
| + { 0, 0, 0 }
|
| + };
|
|
|
| while (1)
|
| {
|
| int opt = mi_getopt ("-data-read-memory", argc, argv, opts,
|
| - &optind, &optarg);
|
| + &oind, &oarg);
|
|
|
| if (opt < 0)
|
| break;
|
| switch ((enum opt) opt)
|
| {
|
| case OFFSET_OPT:
|
| - offset = atol (optarg);
|
| + offset = atol (oarg);
|
| break;
|
| }
|
| }
|
| - argv += optind;
|
| - argc -= optind;
|
| + argv += oind;
|
| + argc -= oind;
|
|
|
| if (argc < 5 || argc > 6)
|
| error (_("-data-read-memory: Usage: "
|
| @@ -1340,7 +1349,7 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
|
| /* Start address of the memory dump. */
|
| addr = parse_and_eval_address (argv[0]) + offset;
|
| /* The format character to use when displaying a memory word. See
|
| - the ``x'' command. */
|
| + the ``x'' command. */
|
| word_format = argv[1][0];
|
| /* The size of the memory word. */
|
| word_size = atol (argv[2]);
|
| @@ -1408,12 +1417,15 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
|
|
|
| /* Build the result as a two dimentional table. */
|
| {
|
| - struct ui_stream *stream = ui_out_stream_new (uiout);
|
| - struct cleanup *cleanup_list_memory;
|
| + struct ui_file *stream;
|
| + struct cleanup *cleanup_stream;
|
| int row;
|
| int row_byte;
|
|
|
| - cleanup_list_memory = make_cleanup_ui_out_list_begin_end (uiout, "memory");
|
| + stream = mem_fileopen ();
|
| + cleanup_stream = make_cleanup_ui_file_delete (stream);
|
| +
|
| + make_cleanup_ui_out_list_begin_end (uiout, "memory");
|
| for (row = 0, row_byte = 0;
|
| row < nr_rows;
|
| row++, row_byte += nr_cols * word_size)
|
| @@ -1440,9 +1452,9 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
|
| }
|
| else
|
| {
|
| - ui_file_rewind (stream->stream);
|
| + ui_file_rewind (stream);
|
| print_scalar_formatted (mbuf + col_byte, word_type, &opts,
|
| - word_asize, stream->stream);
|
| + word_asize, stream);
|
| ui_out_field_stream (uiout, NULL, stream);
|
| }
|
| }
|
| @@ -1451,27 +1463,22 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
|
| {
|
| int byte;
|
|
|
| - ui_file_rewind (stream->stream);
|
| + ui_file_rewind (stream);
|
| for (byte = row_byte;
|
| byte < row_byte + word_size * nr_cols; byte++)
|
| {
|
| if (byte >= nr_bytes)
|
| - {
|
| - fputc_unfiltered ('X', stream->stream);
|
| - }
|
| + fputc_unfiltered ('X', stream);
|
| else if (mbuf[byte] < 32 || mbuf[byte] > 126)
|
| - {
|
| - fputc_unfiltered (aschar, stream->stream);
|
| - }
|
| + fputc_unfiltered (aschar, stream);
|
| else
|
| - fputc_unfiltered (mbuf[byte], stream->stream);
|
| + fputc_unfiltered (mbuf[byte], stream);
|
| }
|
| ui_out_field_stream (uiout, "ascii", stream);
|
| }
|
| do_cleanups (cleanup_tuple);
|
| }
|
| - ui_out_stream_delete (stream);
|
| - do_cleanups (cleanup_list_memory);
|
| + do_cleanups (cleanup_stream);
|
| }
|
| do_cleanups (cleanups);
|
| }
|
| @@ -1488,33 +1495,33 @@ mi_cmd_data_read_memory_bytes (char *command, char **argv, int argc)
|
| int ix;
|
| VEC(memory_read_result_s) *result;
|
| long offset = 0;
|
| - int optind = 0;
|
| - char *optarg;
|
| + int oind = 0;
|
| + char *oarg;
|
| enum opt
|
| - {
|
| - OFFSET_OPT
|
| - };
|
| - static const struct mi_opt opts[] =
|
| {
|
| - {"o", OFFSET_OPT, 1},
|
| - { 0, 0, 0 }
|
| + OFFSET_OPT
|
| };
|
| + static const struct mi_opt opts[] =
|
| + {
|
| + {"o", OFFSET_OPT, 1},
|
| + { 0, 0, 0 }
|
| + };
|
|
|
| while (1)
|
| {
|
| int opt = mi_getopt ("-data-read-memory-bytes", argc, argv, opts,
|
| - &optind, &optarg);
|
| + &oind, &oarg);
|
| if (opt < 0)
|
| break;
|
| switch ((enum opt) opt)
|
| {
|
| case OFFSET_OPT:
|
| - offset = atol (optarg);
|
| + offset = atol (oarg);
|
| break;
|
| }
|
| }
|
| - argv += optind;
|
| - argc -= optind;
|
| + argv += oind;
|
| + argc -= oind;
|
|
|
| if (argc != 2)
|
| error (_("Usage: [ -o OFFSET ] ADDR LENGTH."));
|
| @@ -1558,8 +1565,7 @@ mi_cmd_data_read_memory_bytes (char *command, char **argv, int argc)
|
| do_cleanups (cleanups);
|
| }
|
|
|
| -
|
| -/* DATA-MEMORY-WRITE:
|
| +/* Implementation of the -data-write_memory command.
|
|
|
| COLUMN_OFFSET: optional argument. Must be preceded by '-o'. The
|
| offset from the beginning of the memory grid row where the cell to
|
| @@ -1575,6 +1581,7 @@ mi_cmd_data_read_memory_bytes (char *command, char **argv, int argc)
|
| Writes VALUE into ADDR + (COLUMN_OFFSET * WORD_SIZE).
|
|
|
| Prints nothing. */
|
| +
|
| void
|
| mi_cmd_data_write_memory (char *command, char **argv, int argc)
|
| {
|
| @@ -1589,34 +1596,34 @@ mi_cmd_data_write_memory (char *command, char **argv, int argc)
|
| void *buffer;
|
| struct cleanup *old_chain;
|
| long offset = 0;
|
| - int optind = 0;
|
| - char *optarg;
|
| + int oind = 0;
|
| + char *oarg;
|
| enum opt
|
| - {
|
| - OFFSET_OPT
|
| - };
|
| - static const struct mi_opt opts[] =
|
| {
|
| - {"o", OFFSET_OPT, 1},
|
| - { 0, 0, 0 }
|
| + OFFSET_OPT
|
| };
|
| + static const struct mi_opt opts[] =
|
| + {
|
| + {"o", OFFSET_OPT, 1},
|
| + { 0, 0, 0 }
|
| + };
|
|
|
| while (1)
|
| {
|
| int opt = mi_getopt ("-data-write-memory", argc, argv, opts,
|
| - &optind, &optarg);
|
| + &oind, &oarg);
|
|
|
| if (opt < 0)
|
| break;
|
| switch ((enum opt) opt)
|
| {
|
| case OFFSET_OPT:
|
| - offset = atol (optarg);
|
| + offset = atol (oarg);
|
| break;
|
| }
|
| }
|
| - argv += optind;
|
| - argc -= optind;
|
| + argv += oind;
|
| + argc -= oind;
|
|
|
| if (argc != 4)
|
| error (_("-data-write-memory: Usage: "
|
| @@ -1628,7 +1635,7 @@ mi_cmd_data_write_memory (char *command, char **argv, int argc)
|
| /* The format character to use when displaying a memory word. See
|
| the ``x'' command. */
|
| word_format = argv[1][0];
|
| - /* The size of the memory word. */
|
| + /* The size of the memory word. */
|
| word_size = atol (argv[2]);
|
|
|
| /* Calculate the real address of the write destination. */
|
| @@ -1646,10 +1653,11 @@ mi_cmd_data_write_memory (char *command, char **argv, int argc)
|
| do_cleanups (old_chain);
|
| }
|
|
|
| -/* DATA-MEMORY-WRITE-RAW:
|
| +/* Implementation of the -data-write-memory-bytes command.
|
|
|
| ADDR: start address
|
| - DATA: string of bytes to write at that address. */
|
| + DATA: string of bytes to write at that address. */
|
| +
|
| void
|
| mi_cmd_data_write_memory_bytes (char *command, char **argv, int argc)
|
| {
|
| @@ -1673,7 +1681,7 @@ mi_cmd_data_write_memory_bytes (char *command, char **argv, int argc)
|
| {
|
| int x;
|
| sscanf (cdata + i * 2, "%02x", &x);
|
| - data[i] = (gdb_byte)x;
|
| + data[i] = (gdb_byte) x;
|
| }
|
|
|
| r = target_write_memory (addr, data, len);
|
| @@ -1683,7 +1691,6 @@ mi_cmd_data_write_memory_bytes (char *command, char **argv, int argc)
|
| do_cleanups (back_to);
|
| }
|
|
|
| -
|
| void
|
| mi_cmd_enable_timings (char *command, char **argv, int argc)
|
| {
|
| @@ -1768,8 +1775,8 @@ mi_cmd_add_inferior (char *command, char **argv, int argc)
|
| ui_out_field_fmt (current_uiout, "inferior", "i%d", inf->num);
|
| }
|
|
|
| -/* Callback used to find the first inferior other than the
|
| - current one. */
|
| +/* Callback used to find the first inferior other than the current
|
| + one. */
|
|
|
| static int
|
| get_other_inferior (struct inferior *inf, void *arg)
|
| @@ -1825,7 +1832,7 @@ mi_cmd_remove_inferior (char *command, char **argv, int argc)
|
|
|
| args->action will tell mi_execute_command what action
|
| to perfrom after the given command has executed (display/suppress
|
| - prompt, display error). */
|
| + prompt, display error). */
|
|
|
| static void
|
| captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
|
| @@ -1849,15 +1856,14 @@ captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
|
| fprintf_unfiltered (raw_stdout, " token=`%s' command=`%s' args=`%s'\n",
|
| context->token, context->command, context->args);
|
|
|
| -
|
| mi_cmd_execute (context);
|
|
|
| /* Print the result if there were no errors.
|
|
|
| Remember that on the way out of executing a command, you have
|
| - to directly use the mi_interp's uiout, since the command could
|
| - have reset the interpreter, in which case the current uiout
|
| - will most likely crash in the mi_out_* routines. */
|
| + to directly use the mi_interp's uiout, since the command
|
| + could have reset the interpreter, in which case the current
|
| + uiout will most likely crash in the mi_out_* routines. */
|
| if (!running_result_record_printed)
|
| {
|
| fputs_unfiltered (context->token, raw_stdout);
|
| @@ -1871,9 +1877,9 @@ captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
|
| fputs_unfiltered ("\n", raw_stdout);
|
| }
|
| else
|
| - /* The command does not want anything to be printed. In that
|
| - case, the command probably should not have written anything
|
| - to uiout, but in case it has written something, discard it. */
|
| + /* The command does not want anything to be printed. In that
|
| + case, the command probably should not have written anything
|
| + to uiout, but in case it has written something, discard it. */
|
| mi_out_rewind (uiout);
|
| break;
|
|
|
| @@ -1911,12 +1917,9 @@ captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
|
| }
|
| break;
|
| }
|
| -
|
| }
|
|
|
| do_cleanups (cleanup);
|
| -
|
| - return;
|
| }
|
|
|
| /* Print a gdb exception to the MI output stream. */
|
| @@ -2025,11 +2028,6 @@ mi_execute_command (char *cmd, int from_tty)
|
|
|
| mi_parse_free (command);
|
| }
|
| -
|
| - fputs_unfiltered ("(gdb) \n", raw_stdout);
|
| - gdb_flush (raw_stdout);
|
| - /* Print any buffered hook code. */
|
| - /* ..... */
|
| }
|
|
|
| static void
|
| @@ -2061,9 +2059,10 @@ mi_cmd_execute (struct mi_parse *parse)
|
|
|
| set_current_inferior (inf);
|
| /* This behaviour means that if --thread-group option identifies
|
| - an inferior with multiple threads, then a random one will be picked.
|
| - This is not a problem -- frontend should always provide --thread if
|
| - it wishes to operate on a specific thread. */
|
| + an inferior with multiple threads, then a random one will be
|
| + picked. This is not a problem -- frontend should always
|
| + provide --thread if it wishes to operate on a specific
|
| + thread. */
|
| if (inf->pid != 0)
|
| tp = any_live_thread_of_process (inf->pid);
|
| switch_to_thread (tp ? tp->ptid : null_ptid);
|
| @@ -2154,7 +2153,7 @@ mi_execute_cli_command (const char *cmd, int args_p, const char *args)
|
| fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n",
|
| cmd, run);
|
| old_cleanups = make_cleanup (xfree, run);
|
| - execute_command ( /*ui */ run, 0 /*from_tty */ );
|
| + execute_command (run, 0 /* from_tty */ );
|
| do_cleanups (old_cleanups);
|
| return;
|
| }
|
| @@ -2172,7 +2171,7 @@ mi_execute_async_cli_command (char *cli_command, char **argv, int argc)
|
| run = xstrprintf ("%s %s", cli_command, argc ? *argv : "");
|
| old_cleanups = make_cleanup (xfree, run);
|
|
|
| - execute_command ( /*ui */ run, 0 /*from_tty */ );
|
| + execute_command (run, 0 /* from_tty */ );
|
|
|
| /* Do this before doing any printing. It would appear that some
|
| print code leaves garbage around in the buffer. */
|
| @@ -2273,61 +2272,61 @@ mi_load_progress (const char *section_name,
|
|
|
| static void
|
| timestamp (struct mi_timestamp *tv)
|
| - {
|
| - gettimeofday (&tv->wallclock, NULL);
|
| +{
|
| + gettimeofday (&tv->wallclock, NULL);
|
| #ifdef HAVE_GETRUSAGE
|
| - getrusage (RUSAGE_SELF, &rusage);
|
| - tv->utime.tv_sec = rusage.ru_utime.tv_sec;
|
| - tv->utime.tv_usec = rusage.ru_utime.tv_usec;
|
| - tv->stime.tv_sec = rusage.ru_stime.tv_sec;
|
| - tv->stime.tv_usec = rusage.ru_stime.tv_usec;
|
| + getrusage (RUSAGE_SELF, &rusage);
|
| + tv->utime.tv_sec = rusage.ru_utime.tv_sec;
|
| + tv->utime.tv_usec = rusage.ru_utime.tv_usec;
|
| + tv->stime.tv_sec = rusage.ru_stime.tv_sec;
|
| + tv->stime.tv_usec = rusage.ru_stime.tv_usec;
|
| #else
|
| - {
|
| - long usec = get_run_time ();
|
| + {
|
| + long usec = get_run_time ();
|
|
|
| - tv->utime.tv_sec = usec/1000000L;
|
| - tv->utime.tv_usec = usec - 1000000L*tv->utime.tv_sec;
|
| - tv->stime.tv_sec = 0;
|
| - tv->stime.tv_usec = 0;
|
| - }
|
| -#endif
|
| + tv->utime.tv_sec = usec/1000000L;
|
| + tv->utime.tv_usec = usec - 1000000L*tv->utime.tv_sec;
|
| + tv->stime.tv_sec = 0;
|
| + tv->stime.tv_usec = 0;
|
| }
|
| +#endif
|
| +}
|
|
|
| static void
|
| print_diff_now (struct mi_timestamp *start)
|
| - {
|
| - struct mi_timestamp now;
|
| +{
|
| + struct mi_timestamp now;
|
|
|
| - timestamp (&now);
|
| - print_diff (start, &now);
|
| - }
|
| + timestamp (&now);
|
| + print_diff (start, &now);
|
| +}
|
|
|
| void
|
| mi_print_timing_maybe (void)
|
| {
|
| - /* If the command is -enable-timing then do_timings may be
|
| - true whilst current_command_ts is not initialized. */
|
| + /* If the command is -enable-timing then do_timings may be true
|
| + whilst current_command_ts is not initialized. */
|
| if (do_timings && current_command_ts)
|
| print_diff_now (current_command_ts);
|
| }
|
|
|
| static long
|
| timeval_diff (struct timeval start, struct timeval end)
|
| - {
|
| - return ((end.tv_sec - start.tv_sec) * 1000000L)
|
| - + (end.tv_usec - start.tv_usec);
|
| - }
|
| +{
|
| + return ((end.tv_sec - start.tv_sec) * 1000000L)
|
| + + (end.tv_usec - start.tv_usec);
|
| +}
|
|
|
| static void
|
| print_diff (struct mi_timestamp *start, struct mi_timestamp *end)
|
| - {
|
| - fprintf_unfiltered
|
| - (raw_stdout,
|
| - ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}",
|
| - timeval_diff (start->wallclock, end->wallclock) / 1000000.0,
|
| - timeval_diff (start->utime, end->utime) / 1000000.0,
|
| - timeval_diff (start->stime, end->stime) / 1000000.0);
|
| - }
|
| +{
|
| + fprintf_unfiltered
|
| + (raw_stdout,
|
| + ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}",
|
| + timeval_diff (start->wallclock, end->wallclock) / 1000000.0,
|
| + timeval_diff (start->utime, end->utime) / 1000000.0,
|
| + timeval_diff (start->stime, end->stime) / 1000000.0);
|
| +}
|
|
|
| void
|
| mi_cmd_trace_define_variable (char *command, char **argv, int argc)
|
| @@ -2371,7 +2370,7 @@ void
|
| mi_cmd_trace_list_variables (char *command, char **argv, int argc)
|
| {
|
| if (argc != 0)
|
| - error (_("-trace-list-variables: no arguments are allowed"));
|
| + error (_("-trace-list-variables: no arguments allowed"));
|
|
|
| tvariables_info_1 ();
|
| }
|
| @@ -2437,7 +2436,8 @@ mi_cmd_trace_find (char *command, char **argv, int argc)
|
| if (argc != 2)
|
| error (_("Line is required"));
|
|
|
| - sals = decode_line_spec (argv[1], DECODE_LINE_FUNFIRSTLINE);
|
| + sals = decode_line_with_current_source (argv[1],
|
| + DECODE_LINE_FUNFIRSTLINE);
|
| back_to = make_cleanup (xfree, sals.sals);
|
|
|
| sal = sals.sals[0];
|
| @@ -2456,9 +2456,7 @@ mi_cmd_trace_find (char *command, char **argv, int argc)
|
| error (_("Invalid mode '%s'"), mode);
|
|
|
| if (has_stack_frames () || get_traceframe_number () >= 0)
|
| - {
|
| - print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
|
| - }
|
| + print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
|
| }
|
|
|
| void
|
| @@ -2486,7 +2484,6 @@ mi_cmd_trace_save (char *command, char **argv, int argc)
|
| trace_save (filename, target_saves);
|
| }
|
|
|
| -
|
| void
|
| mi_cmd_trace_start (char *command, char **argv, int argc)
|
| {
|
| @@ -2506,7 +2503,7 @@ mi_cmd_trace_stop (char *command, char **argv, int argc)
|
| trace_status_mi (1);
|
| }
|
|
|
| -/* Implement the "-ada-task-info" GDB/MI command. */
|
| +/* Implement the "-ada-task-info" command. */
|
|
|
| void
|
| mi_cmd_ada_task_info (char *command, char **argv, int argc)
|
|
|