Browse Source

2002-10-23 Jeff Johnston <jjohnstn@redhat.com>


			
			
				jimb-separate-debug-021125-branch
			
			
		
Jeff Johnston 24 years ago
parent
commit
6ad4a2cfb3
  1. 10
      gdb/mi/ChangeLog
  2. 26
      gdb/mi/mi-cmd-stack.c
  3. 10
      gdb/mi/mi-cmd-var.c
  4. 25
      gdb/mi/mi-main.c

10
gdb/mi/ChangeLog

@ -1,3 +1,13 @@
2002-10-23 Jeff Johnston <jjohnstn@redhat.com>
* mi-cmd-var.c: Change all remaining occurrences of ui_out_tuple_begin
to make_cleanup_ui_out_tuple_begin_end. Change all remaining
occurrences of ui_out_list_begin to make_cleanup_ui_out_list_begin_end.
Use do_cleanups instead of ui_out_list_end or ui_out_tuple_end. This
is a fix for PR gdb/680.
* mi-cmd-stack.c: Ditto.
* mi-main.c: Ditto.
2002-10-22 Keith Seitz <keiths@redhat.com> 2002-10-22 Keith Seitz <keiths@redhat.com>
* mi-main.c (mi_cmd_thread_select): Only return MI_CMD_CAUGHT_ERROR * mi-main.c (mi_cmd_thread_select): Only return MI_CMD_CAUGHT_ERROR

26
gdb/mi/mi-cmd-stack.c

@ -45,6 +45,7 @@ mi_cmd_stack_list_frames (char *command, char **argv, int argc)
int frame_low; int frame_low;
int frame_high; int frame_high;
int i; int i;
struct cleanup *cleanup_stack;
struct frame_info *fi; struct frame_info *fi;
if (!target_has_stack) if (!target_has_stack)
@ -76,7 +77,7 @@ mi_cmd_stack_list_frames (char *command, char **argv, int argc)
if (fi == NULL) if (fi == NULL)
error ("mi_cmd_stack_list_frames: Not enough frames in stack."); error ("mi_cmd_stack_list_frames: Not enough frames in stack.");
ui_out_list_begin (uiout, "stack"); cleanup_stack = make_cleanup_ui_out_list_begin_end (uiout, "stack");
/* Now let;s print the frames up to frame_high, or until there are /* Now let;s print the frames up to frame_high, or until there are
frames in the stack. */ frames in the stack. */
@ -95,7 +96,7 @@ mi_cmd_stack_list_frames (char *command, char **argv, int argc)
0 /* args */ ); 0 /* args */ );
} }
ui_out_list_end (uiout); do_cleanups (cleanup_stack);
if (i < frame_high) if (i < frame_high)
error ("mi_cmd_stack_list_frames: Not enough frames in stack."); error ("mi_cmd_stack_list_frames: Not enough frames in stack.");
@ -155,6 +156,7 @@ mi_cmd_stack_list_args (char *command, char **argv, int argc)
int frame_high; int frame_high;
int i; int i;
struct frame_info *fi; struct frame_info *fi;
struct cleanup *cleanup_stack_args;
if (argc < 1 || argc > 3 || argc == 2) if (argc < 1 || argc > 3 || argc == 2)
error ("mi_cmd_stack_list_args: Usage: PRINT_VALUES [FRAME_LOW FRAME_HIGH]"); error ("mi_cmd_stack_list_args: Usage: PRINT_VALUES [FRAME_LOW FRAME_HIGH]");
@ -182,7 +184,7 @@ mi_cmd_stack_list_args (char *command, char **argv, int argc)
if (fi == NULL) if (fi == NULL)
error ("mi_cmd_stack_list_args: Not enough frames in stack."); error ("mi_cmd_stack_list_args: Not enough frames in stack.");
ui_out_list_begin (uiout, "stack-args"); cleanup_stack_args = make_cleanup_ui_out_list_begin_end (uiout, "stack-args");
/* Now let's print the frames up to frame_high, or until there are /* Now let's print the frames up to frame_high, or until there are
frames in the stack. */ frames in the stack. */
@ -190,14 +192,15 @@ mi_cmd_stack_list_args (char *command, char **argv, int argc)
fi && (i <= frame_high || frame_high == -1); fi && (i <= frame_high || frame_high == -1);
i++, fi = get_prev_frame (fi)) i++, fi = get_prev_frame (fi))
{ {
struct cleanup *cleanup_frame;
QUIT; QUIT;
ui_out_tuple_begin (uiout, "frame"); cleanup_frame = make_cleanup_ui_out_tuple_begin_end (uiout, "frame");
ui_out_field_int (uiout, "level", i); ui_out_field_int (uiout, "level", i);
list_args_or_locals (0, atoi (argv[0]), fi); list_args_or_locals (0, atoi (argv[0]), fi);
ui_out_tuple_end (uiout); do_cleanups (cleanup_frame);
} }
ui_out_list_end (uiout); do_cleanups (cleanup_stack_args);
if (i < frame_high) if (i < frame_high)
error ("mi_cmd_stack_list_args: Not enough frames in stack."); error ("mi_cmd_stack_list_args: Not enough frames in stack.");
@ -214,13 +217,14 @@ list_args_or_locals (int locals, int values, struct frame_info *fi)
struct block *block; struct block *block;
struct symbol *sym; struct symbol *sym;
int i, nsyms; int i, nsyms;
struct cleanup *cleanup_list;
static struct ui_stream *stb = NULL; static struct ui_stream *stb = NULL;
stb = ui_out_stream_new (uiout); stb = ui_out_stream_new (uiout);
block = get_frame_block (fi, 0); block = get_frame_block (fi, 0);
ui_out_list_begin (uiout, locals ? "locals" : "args"); cleanup_list = make_cleanup_ui_out_list_begin_end (uiout, locals ? "locals" : "args");
while (block != 0) while (block != 0)
{ {
@ -262,8 +266,10 @@ list_args_or_locals (int locals, int values, struct frame_info *fi)
} }
if (print_me) if (print_me)
{ {
struct cleanup *cleanup_tuple = NULL;
if (values) if (values)
ui_out_tuple_begin (uiout, NULL); cleanup_tuple =
make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
ui_out_field_string (uiout, "name", SYMBOL_NAME (sym)); ui_out_field_string (uiout, "name", SYMBOL_NAME (sym));
if (values) if (values)
@ -278,7 +284,7 @@ list_args_or_locals (int locals, int values, struct frame_info *fi)
sym2 = sym; sym2 = sym;
print_variable_value (sym2, fi, stb->stream); print_variable_value (sym2, fi, stb->stream);
ui_out_field_stream (uiout, "value", stb); ui_out_field_stream (uiout, "value", stb);
ui_out_tuple_end (uiout); do_cleanups (cleanup_tuple);
} }
} }
} }
@ -287,7 +293,7 @@ list_args_or_locals (int locals, int values, struct frame_info *fi)
else else
block = BLOCK_SUPERBLOCK (block); block = BLOCK_SUPERBLOCK (block);
} }
ui_out_list_end (uiout); do_cleanups (cleanup_list);
ui_out_stream_delete (stb); ui_out_stream_delete (stb);
} }

10
gdb/mi/mi-cmd-var.c

@ -254,6 +254,7 @@ mi_cmd_var_list_children (char *command, char **argv, int argc)
struct varobj *var; struct varobj *var;
struct varobj **childlist; struct varobj **childlist;
struct varobj **cc; struct varobj **cc;
struct cleanup *cleanup_children;
int numchild; int numchild;
char *type; char *type;
@ -271,11 +272,12 @@ mi_cmd_var_list_children (char *command, char **argv, int argc)
if (numchild <= 0) if (numchild <= 0)
return MI_CMD_DONE; return MI_CMD_DONE;
ui_out_tuple_begin (uiout, "children"); cleanup_children = make_cleanup_ui_out_tuple_begin_end (uiout, "children");
cc = childlist; cc = childlist;
while (*cc != NULL) while (*cc != NULL)
{ {
ui_out_tuple_begin (uiout, "child"); struct cleanup *cleanup_child;
cleanup_child = make_cleanup_ui_out_tuple_begin_end (uiout, "child");
ui_out_field_string (uiout, "name", varobj_get_objname (*cc)); ui_out_field_string (uiout, "name", varobj_get_objname (*cc));
ui_out_field_string (uiout, "exp", varobj_get_expression (*cc)); ui_out_field_string (uiout, "exp", varobj_get_expression (*cc));
ui_out_field_int (uiout, "numchild", varobj_get_num_children (*cc)); ui_out_field_int (uiout, "numchild", varobj_get_num_children (*cc));
@ -283,10 +285,10 @@ mi_cmd_var_list_children (char *command, char **argv, int argc)
/* C++ pseudo-variables (public, private, protected) do not have a type */ /* C++ pseudo-variables (public, private, protected) do not have a type */
if (type) if (type)
ui_out_field_string (uiout, "type", varobj_get_type (*cc)); ui_out_field_string (uiout, "type", varobj_get_type (*cc));
ui_out_tuple_end (uiout); do_cleanups (cleanup_child);
cc++; cc++;
} }
ui_out_tuple_end (uiout); do_cleanups (cleanup_children);
xfree (childlist); xfree (childlist);
return MI_CMD_DONE; return MI_CMD_DONE;
} }

25
gdb/mi/mi-main.c

@ -915,19 +915,22 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
/* Build the result as a two dimentional table. */ /* Build the result as a two dimentional table. */
{ {
struct ui_stream *stream = ui_out_stream_new (uiout); struct ui_stream *stream = ui_out_stream_new (uiout);
struct cleanup *cleanup_list_memory;
int row; int row;
int row_byte; int row_byte;
ui_out_list_begin (uiout, "memory"); cleanup_list_memory = make_cleanup_ui_out_list_begin_end (uiout, "memory");
for (row = 0, row_byte = 0; for (row = 0, row_byte = 0;
row < nr_rows; row < nr_rows;
row++, row_byte += nr_cols * word_size) row++, row_byte += nr_cols * word_size)
{ {
int col; int col;
int col_byte; int col_byte;
ui_out_tuple_begin (uiout, NULL); struct cleanup *cleanup_tuple;
struct cleanup *cleanup_list_data;
cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
ui_out_field_core_addr (uiout, "addr", addr + row_byte); ui_out_field_core_addr (uiout, "addr", addr + row_byte);
/* ui_out_field_core_addr_symbolic (uiout, "saddr", addr + row_byte); */ /* ui_out_field_core_addr_symbolic (uiout, "saddr", addr + row_byte); */
ui_out_list_begin (uiout, "data"); cleanup_list_data = make_cleanup_ui_out_list_begin_end (uiout, "data");
for (col = 0, col_byte = row_byte; for (col = 0, col_byte = row_byte;
col < nr_cols; col < nr_cols;
col++, col_byte += word_size) col++, col_byte += word_size)
@ -944,7 +947,7 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
ui_out_field_stream (uiout, NULL, stream); ui_out_field_stream (uiout, NULL, stream);
} }
} }
ui_out_list_end (uiout); do_cleanups (cleanup_list_data);
if (aschar) if (aschar)
{ {
int byte; int byte;
@ -964,10 +967,10 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
} }
ui_out_field_stream (uiout, "ascii", stream); ui_out_field_stream (uiout, "ascii", stream);
} }
ui_out_tuple_end (uiout); do_cleanups (cleanup_tuple);
} }
ui_out_stream_delete (stream); ui_out_stream_delete (stream);
ui_out_list_end (uiout); do_cleanups (cleanup_list_memory);
} }
do_cleanups (cleanups); do_cleanups (cleanups);
return MI_CMD_DONE; return MI_CMD_DONE;
@ -1419,17 +1422,18 @@ mi_load_progress (const char *section_name,
strcmp (previous_sect_name, section_name) : 1); strcmp (previous_sect_name, section_name) : 1);
if (new_section) if (new_section)
{ {
struct cleanup *cleanup_tuple;
xfree (previous_sect_name); xfree (previous_sect_name);
previous_sect_name = xstrdup (section_name); previous_sect_name = xstrdup (section_name);
if (last_async_command) if (last_async_command)
fputs_unfiltered (last_async_command, raw_stdout); fputs_unfiltered (last_async_command, raw_stdout);
fputs_unfiltered ("+download", raw_stdout); fputs_unfiltered ("+download", raw_stdout);
ui_out_tuple_begin (uiout, NULL); cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
ui_out_field_string (uiout, "section", section_name); ui_out_field_string (uiout, "section", section_name);
ui_out_field_int (uiout, "section-size", total_section); ui_out_field_int (uiout, "section-size", total_section);
ui_out_field_int (uiout, "total-size", grand_total); ui_out_field_int (uiout, "total-size", grand_total);
ui_out_tuple_end (uiout); do_cleanups (cleanup_tuple);
mi_out_put (uiout, raw_stdout); mi_out_put (uiout, raw_stdout);
fputs_unfiltered ("\n", raw_stdout); fputs_unfiltered ("\n", raw_stdout);
gdb_flush (raw_stdout); gdb_flush (raw_stdout);
@ -1438,18 +1442,19 @@ mi_load_progress (const char *section_name,
if (delta.tv_sec >= update_threshold.tv_sec && if (delta.tv_sec >= update_threshold.tv_sec &&
delta.tv_usec >= update_threshold.tv_usec) delta.tv_usec >= update_threshold.tv_usec)
{ {
struct cleanup *cleanup_tuple;
last_update.tv_sec = time_now.tv_sec; last_update.tv_sec = time_now.tv_sec;
last_update.tv_usec = time_now.tv_usec; last_update.tv_usec = time_now.tv_usec;
if (last_async_command) if (last_async_command)
fputs_unfiltered (last_async_command, raw_stdout); fputs_unfiltered (last_async_command, raw_stdout);
fputs_unfiltered ("+download", raw_stdout); fputs_unfiltered ("+download", raw_stdout);
ui_out_tuple_begin (uiout, NULL); cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
ui_out_field_string (uiout, "section", section_name); ui_out_field_string (uiout, "section", section_name);
ui_out_field_int (uiout, "section-sent", sent_so_far); ui_out_field_int (uiout, "section-sent", sent_so_far);
ui_out_field_int (uiout, "section-size", total_section); ui_out_field_int (uiout, "section-size", total_section);
ui_out_field_int (uiout, "total-sent", total_sent); ui_out_field_int (uiout, "total-sent", total_sent);
ui_out_field_int (uiout, "total-size", grand_total); ui_out_field_int (uiout, "total-size", grand_total);
ui_out_tuple_end (uiout); do_cleanups (cleanup_tuple);
mi_out_put (uiout, raw_stdout); mi_out_put (uiout, raw_stdout);
fputs_unfiltered ("\n", raw_stdout); fputs_unfiltered ("\n", raw_stdout);
gdb_flush (raw_stdout); gdb_flush (raw_stdout);

Loading…
Cancel
Save