diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2018-03-04 15:56:05 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@ericsson.com> | 2018-03-05 17:09:15 -0500 |
commit | 7ccb006d857734ad3292ea97db2180a76dd23a2c (patch) | |
tree | 29cb635bafd2ca02152c74da4013828a8d4c3955 | |
parent | f3564073fe1f956c8791c2ae3822db5b359365f6 (diff) | |
download | gdb-users/simark/btrace-cleanups.zip gdb-users/simark/btrace-cleanups.tar.gz gdb-users/simark/btrace-cleanups.tar.bz2 |
btrace: Remove ui_out cleanupsusers/simark/btrace-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.
-rw-r--r-- | gdb/record-btrace.c | 54 | ||||
-rw-r--r-- | gdb/ui-out.c | 44 | ||||
-rw-r--r-- | gdb/ui-out.h | 8 |
3 files changed, 24 insertions, 82 deletions
diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c index 82e06c6..4e6b86f 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<ui_out_emit_tuple> &src_and_asm_tuple, + gdb::optional<ui_out_emit_list> &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<ui_out_emit_tuple> src_and_asm_tuple; + gdb::optional<ui_out_emit_list> 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 0340a44..3648815 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 1708542..a415100 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: |