From 7ea78b5973525193eda8e379cc351c7804653216 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Tue, 6 Mar 2018 09:51:33 -0500 Subject: [PATCH] btrace: Remove ui_out cleanups This patch replaces the cleanups that close the list and tuple of the btrace instruction history output with ui_out_emit_tuple and ui_out_emit_list. This allows removing make_cleanup_ui_out_tuple_begin_end and make_cleanup_ui_out_list_begin_end. This patch (along with the previous ones in the series) was regtested on the buildbot. gdb/ChangeLog: * record-btrace.c (btrace_print_lines): Replace cleanup parameter with RAII equivalents. (btrace_insn_history): Replace cleanup with RAII equivalents. * ui-out.h (make_cleanup_ui_out_list_begin_end, make_cleanup_ui_out_tuple_begin_end): Remove. * ui-out.c (struct ui_out_end_cleanup_data, do_cleanup_end, make_cleanup_ui_out_end, make_cleanup_ui_out_tuple_begin_end, make_cleanup_ui_out_list_begin_end): Remove. --- gdb/ChangeLog | 11 +++++++++ gdb/record-btrace.c | 54 ++++++++++++++++++++------------------------- gdb/ui-out.c | 44 ------------------------------------ gdb/ui-out.h | 8 ------- 4 files changed, 35 insertions(+), 82 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index dfc22f7a4db..8e78518ff67 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2018-03-06 Simon Marchi + + * record-btrace.c (btrace_print_lines): Replace cleanup + parameter with RAII equivalents. + (btrace_insn_history): Replace cleanup with RAII equivalents. + * ui-out.h (make_cleanup_ui_out_list_begin_end, + make_cleanup_ui_out_tuple_begin_end): Remove. + * ui-out.c (struct ui_out_end_cleanup_data, do_cleanup_end, + make_cleanup_ui_out_end, make_cleanup_ui_out_tuple_begin_end, + make_cleanup_ui_out_list_begin_end): Remove. + 2018-03-06 Simon Marchi * record-btrace.c (record_btrace_maybe_mark_async_event): Change diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c index 82e06c68921..e77a6a7d216 100644 --- a/gdb/record-btrace.c +++ b/gdb/record-btrace.c @@ -620,26 +620,24 @@ btrace_find_line_range (CORE_ADDR pc) static void btrace_print_lines (struct btrace_line_range lines, struct ui_out *uiout, - struct cleanup **ui_item_chain, gdb_disassembly_flags flags) + gdb::optional *src_and_asm_tuple, + gdb::optional *asm_list, + gdb_disassembly_flags flags) { print_source_lines_flags psl_flags; - int line; - psl_flags = 0; if (flags & DISASSEMBLY_FILENAME) psl_flags |= PRINT_SOURCE_LINES_FILENAME; - for (line = lines.begin; line < lines.end; ++line) + for (int line = lines.begin; line < lines.end; ++line) { - if (*ui_item_chain != NULL) - do_cleanups (*ui_item_chain); + asm_list->reset (); - *ui_item_chain - = make_cleanup_ui_out_tuple_begin_end (uiout, "src_and_asm_line"); + src_and_asm_tuple->emplace (uiout, "src_and_asm_line"); print_source_lines (lines.symtab, line, line + 1, psl_flags); - make_cleanup_ui_out_list_begin_end (uiout, "line_asm_insn"); + asm_list->emplace (uiout, "line_asm_insn"); } } @@ -652,28 +650,23 @@ btrace_insn_history (struct ui_out *uiout, const struct btrace_insn_iterator *end, gdb_disassembly_flags flags) { - struct cleanup *cleanups, *ui_item_chain; - struct gdbarch *gdbarch; - struct btrace_insn_iterator it; - struct btrace_line_range last_lines; - DEBUG ("itrace (0x%x): [%u; %u)", (unsigned) flags, btrace_insn_number (begin), btrace_insn_number (end)); flags |= DISASSEMBLY_SPECULATIVE; - gdbarch = target_gdbarch (); - last_lines = btrace_mk_line_range (NULL, 0, 0); + struct gdbarch *gdbarch = target_gdbarch (); + btrace_line_range last_lines = btrace_mk_line_range (NULL, 0, 0); - cleanups = make_cleanup_ui_out_list_begin_end (uiout, "asm_insns"); + ui_out_emit_list list_emitter (uiout, "asm_insns"); - /* UI_ITEM_CHAIN is a cleanup chain for the last source line and the - instructions corresponding to that line. */ - ui_item_chain = NULL; + gdb::optional src_and_asm_tuple; + gdb::optional asm_list; gdb_pretty_print_disassembler disasm (gdbarch); - for (it = *begin; btrace_insn_cmp (&it, end) != 0; btrace_insn_next (&it, 1)) + for (btrace_insn_iterator it = *begin; btrace_insn_cmp (&it, end) != 0; + btrace_insn_next (&it, 1)) { const struct btrace_insn *insn; @@ -708,19 +701,22 @@ btrace_insn_history (struct ui_out *uiout, if (!btrace_line_range_is_empty (lines) && !btrace_line_range_contains_range (last_lines, lines)) { - btrace_print_lines (lines, uiout, &ui_item_chain, flags); + btrace_print_lines (lines, uiout, &src_and_asm_tuple, &asm_list, + flags); last_lines = lines; } - else if (ui_item_chain == NULL) + else if (!src_and_asm_tuple.has_value ()) { - ui_item_chain - = make_cleanup_ui_out_tuple_begin_end (uiout, - "src_and_asm_line"); + gdb_assert (!asm_list.has_value ()); + + src_and_asm_tuple.emplace (uiout, "src_and_asm_line"); + /* No source information. */ - make_cleanup_ui_out_list_begin_end (uiout, "line_asm_insn"); + asm_list.emplace (uiout, "line_asm_insn"); } - gdb_assert (ui_item_chain != NULL); + gdb_assert (src_and_asm_tuple.has_value ()); + gdb_assert (asm_list.has_value ()); } memset (&dinsn, 0, sizeof (dinsn)); @@ -733,8 +729,6 @@ btrace_insn_history (struct ui_out *uiout, disasm.pretty_print_insn (uiout, &dinsn, flags); } } - - do_cleanups (cleanups); } /* The to_insn_history method of target record-btrace. */ diff --git a/gdb/ui-out.c b/gdb/ui-out.c index 0340a44a83b..3648815090c 100644 --- a/gdb/ui-out.c +++ b/gdb/ui-out.c @@ -438,50 +438,6 @@ ui_out::end (ui_out_type type) do_end (type); } -struct ui_out_end_cleanup_data -{ - struct ui_out *uiout; - enum ui_out_type type; -}; - -static void -do_cleanup_end (void *data) -{ - struct ui_out_end_cleanup_data *end_cleanup_data - = (struct ui_out_end_cleanup_data *) data; - - end_cleanup_data->uiout->end (end_cleanup_data->type); - xfree (end_cleanup_data); -} - -static struct cleanup * -make_cleanup_ui_out_end (struct ui_out *uiout, - enum ui_out_type type) -{ - struct ui_out_end_cleanup_data *end_cleanup_data; - - end_cleanup_data = XNEW (struct ui_out_end_cleanup_data); - end_cleanup_data->uiout = uiout; - end_cleanup_data->type = type; - return make_cleanup (do_cleanup_end, end_cleanup_data); -} - -struct cleanup * -make_cleanup_ui_out_tuple_begin_end (struct ui_out *uiout, - const char *id) -{ - uiout->begin (ui_out_type_tuple, id); - return make_cleanup_ui_out_end (uiout, ui_out_type_tuple); -} - -struct cleanup * -make_cleanup_ui_out_list_begin_end (struct ui_out *uiout, - const char *id) -{ - uiout->begin (ui_out_type_list, id); - return make_cleanup_ui_out_end (uiout, ui_out_type_list); -} - void ui_out::field_int (const char *fldname, int value) { diff --git a/gdb/ui-out.h b/gdb/ui-out.h index 1708542e7ec..a415100d7ea 100644 --- a/gdb/ui-out.h +++ b/gdb/ui-out.h @@ -66,14 +66,6 @@ enum ui_out_type ui_out_type_list }; -/* Compatibility wrappers. */ - -extern struct cleanup *make_cleanup_ui_out_list_begin_end (struct ui_out *uiout, - const char *id); - -extern struct cleanup *make_cleanup_ui_out_tuple_begin_end (struct ui_out *uiout, - const char *id); - class ui_out { public: -- 2.30.2