Patch for gdb/mi 796
Elena Zannoni
ezannoni@redhat.com
Tue Oct 22 08:43:00 GMT 2002
J. Johnston writes:
> This patch is an extension of 680 whereby more ui_out_tuple_begin and
> ui_out_list_begin statements are switched over to use the new make_cleanup....
> equivalents.
>
> Since I do not have a test case, I will leave it up to the originator to
> verify if the patch does in fact fix the problem.
>
> gdb/ChangeLog:
>
> 2002-10-11 Jeff Johnston <jjohnstn@redhat.com>
>
> * disasm.c (dump_insns, do_mixed_source_and_assembly): Change uiout tuples
> and lists to use make_cleanup_ui_out_tuple_begin_end,
> make_cleanup_ui_out_list_begin_end respectively, and do_cleanups.
> This is a fix for PR gdb/796.
> (do_assembly_only): Ditto.
> * thread.c (do_captured_list_thread_ids): Ditto.
>
> Is this ok to commit?
>
I think it is safe. However is there any chance to change the
cleanup_list_1 and cleanup_list_2 to more meaningful names?
Thanks
Elena
> -- Jeff J.Index: disasm.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/disasm.c,v
> retrieving revision 1.1
> diff -u -r1.1 disasm.c
> --- disasm.c 30 Sep 2002 15:57:25 -0000 1.1
> +++ disasm.c 11 Oct 2002 22:04:29 -0000
> @@ -89,6 +89,7 @@
> {
> int num_displayed = 0;
> CORE_ADDR pc;
> + struct cleanup *cleanup_tuple;
>
> /* parts of the symbolic representation of the address */
> int unmapped;
> @@ -107,7 +108,7 @@
> else
> num_displayed++;
> }
> - ui_out_tuple_begin (uiout, NULL);
> + cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
> ui_out_field_core_addr (uiout, "address", pc);
>
> if (!build_address_symbolic (pc, 0, &name, &offset, &filename,
> @@ -130,7 +131,7 @@
> pc += TARGET_PRINT_INSN (pc, di);
> ui_out_field_stream (uiout, "inst", stb);
> ui_file_rewind (stb->stream);
> - ui_out_tuple_end (uiout);
> + do_cleanups (cleanup_tuple);
> ui_out_text (uiout, "\n");
> }
> return num_displayed;
> @@ -152,6 +153,9 @@
> struct dis_line_entry *mle;
> struct symtab_and_line sal;
> int i;
> + struct cleanup *cleanup_list_1;
> + struct cleanup *cleanup_list_2 = NULL;
> + struct cleanup *cleanup_tuple = NULL;
> int out_of_order = 0;
> int next_line = 0;
> CORE_ADDR pc;
> @@ -209,7 +213,7 @@
> they have been emitted before), followed by the assembly code
> for that line. */
>
> - ui_out_list_begin (uiout, "asm_insns");
> + cleanup_list_1 = make_cleanup_ui_out_list_begin_end (uiout, "asm_insns");
>
> for (i = 0; i < newlines; i++)
> {
> @@ -222,7 +226,8 @@
> /* Just one line to print. */
> if (next_line == mle[i].line)
> {
> - ui_out_tuple_begin (uiout, "src_and_asm_line");
> + cleanup_tuple =
> + make_cleanup_ui_out_tuple_begin_end (uiout, "src_and_asm_line");
> print_source_lines (symtab, next_line, mle[i].line + 1, 0);
> }
> else
> @@ -230,27 +235,32 @@
> /* Several source lines w/o asm instructions associated. */
> for (; next_line < mle[i].line; next_line++)
> {
> - ui_out_tuple_begin (uiout, "src_and_asm_line");
> + cleanup_tuple =
> + make_cleanup_ui_out_tuple_begin_end (uiout, "src_and_asm_line");
> print_source_lines (symtab, next_line, next_line + 1,
> 0);
> - ui_out_list_begin (uiout, "line_asm_insn");
> - ui_out_list_end (uiout);
> - ui_out_tuple_end (uiout);
> + cleanup_list_2 =
> + make_cleanup_ui_out_list_begin_end (uiout, "line_asm_insn");
> + do_cleanups (cleanup_list_2);
> + do_cleanups (cleanup_tuple);
> }
> /* Print the last line and leave list open for
> asm instructions to be added. */
> - ui_out_tuple_begin (uiout, "src_and_asm_line");
> + cleanup_tuple =
> + make_cleanup_ui_out_tuple_begin_end (uiout, "src_and_asm_line");
> print_source_lines (symtab, next_line, mle[i].line + 1, 0);
> }
> }
> else
> {
> - ui_out_tuple_begin (uiout, "src_and_asm_line");
> + cleanup_tuple =
> + make_cleanup_ui_out_tuple_begin_end (uiout, "src_and_asm_line");
> print_source_lines (symtab, mle[i].line, mle[i].line + 1, 0);
> }
>
> next_line = mle[i].line + 1;
> - ui_out_list_begin (uiout, "line_asm_insn");
> + cleanup_list_2 =
> + make_cleanup_ui_out_list_begin_end (uiout, "line_asm_insn");
> /* Don't close the list if the lines are not in order. */
> if (i < (newlines - 1) && mle[i + 1].line <= mle[i].line)
> close_list = 0;
> @@ -260,8 +270,8 @@
> how_many, stb);
> if (close_list)
> {
> - ui_out_list_end (uiout);
> - ui_out_tuple_end (uiout);
> + do_cleanups (cleanup_list_2);
> + do_cleanups (cleanup_tuple);
> ui_out_text (uiout, "\n");
> close_list = 0;
> }
> @@ -269,7 +279,7 @@
> if (num_displayed >= how_many)
> break;
> }
> - ui_out_list_end (uiout);
> + do_cleanups (cleanup_list_1);
> }
>
>
> @@ -278,13 +288,14 @@
> CORE_ADDR low, CORE_ADDR high,
> int how_many, struct ui_stream *stb)
> {
> + struct cleanup *cleanup_list;
> int num_displayed = 0;
>
> - ui_out_list_begin (uiout, "asm_insns");
> + cleanup_list = make_cleanup_ui_out_list_begin_end (uiout, "asm_insns");
>
> num_displayed = dump_insns (uiout, di, low, high, how_many, stb);
>
> - ui_out_list_end (uiout);
> + do_cleanups (cleanup_list);
> }
>
> void
> Index: thread.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/thread.c,v
> retrieving revision 1.23
> diff -u -r1.23 thread.c
> --- thread.c 2 Aug 2002 20:51:21 -0000 1.23
> +++ thread.c 11 Oct 2002 22:04:30 -0000
> @@ -260,9 +260,10 @@
> void *arg)
> {
> struct thread_info *tp;
> + struct cleanup *cleanup_tuple;
> int num = 0;
>
> - ui_out_tuple_begin (uiout, "thread-ids");
> + cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, "thread-ids");
>
> for (tp = thread_list; tp; tp = tp->next)
> {
> @@ -270,7 +271,7 @@
> ui_out_field_int (uiout, "thread-id", tp->num);
> }
>
> - ui_out_tuple_end (uiout);
> + do_cleanups (cleanup_tuple);
> ui_out_field_int (uiout, "number-of-threads", num);
> return GDB_RC_OK;
> }
More information about the Gdb-patches
mailing list