From patchwork Sun Mar 4 20:56:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 26188 Received: (qmail 20362 invoked by alias); 4 Mar 2018 20:56:17 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 20308 invoked by uid 89); 4 Mar 2018 20:56:15 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_SOFTFAIL autolearn=ham version=3.3.2 spammy= X-HELO: barracuda.ebox.ca Received: from barracuda.ebox.ca (HELO barracuda.ebox.ca) (96.127.255.19) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 04 Mar 2018 20:56:13 +0000 X-ASG-Debug-ID: 1520196971-0c856e618a22ee00001-fS2M51 Received: from smtp.ebox.ca (smtp.electronicbox.net [96.127.255.82]) by barracuda.ebox.ca with ESMTP id C4HiLQzczGdFE1OX (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sun, 04 Mar 2018 15:56:11 -0500 (EST) X-Barracuda-Envelope-From: simon.marchi@polymtl.ca X-Barracuda-RBL-Trusted-Forwarder: 96.127.255.82 Received: from simark.lan (192-222-251-162.qc.cable.ebox.net [192.222.251.162]) by smtp.ebox.ca (Postfix) with ESMTP id 11C3F441D64; Sun, 4 Mar 2018 15:56:11 -0500 (EST) From: Simon Marchi X-Barracuda-Effective-Source-IP: 192-222-251-162.qc.cable.ebox.net[192.222.251.162] X-Barracuda-Apparent-Source-IP: 192.222.251.162 X-Barracuda-RBL-IP: 192.222.251.162 To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH 3/3] btrace: Remove ui_out cleanups Date: Sun, 4 Mar 2018 15:56:05 -0500 X-ASG-Orig-Subj: [PATCH 3/3] btrace: Remove ui_out cleanups Message-Id: <20180304205605.13037-3-simon.marchi@polymtl.ca> In-Reply-To: <20180304205605.13037-1-simon.marchi@polymtl.ca> References: <20180304205605.13037-1-simon.marchi@polymtl.ca> X-Barracuda-Connect: smtp.electronicbox.net[96.127.255.82] X-Barracuda-Start-Time: 1520196971 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://96.127.255.19:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 6880 X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using global scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=8.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.48563 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-IsSubscribed: yes 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/record-btrace.c | 55 ++++++++++++++++++++++++----------------------------- gdb/ui-out.c | 44 ------------------------------------------ gdb/ui-out.h | 8 -------- 3 files changed, 25 insertions(+), 82 deletions(-) diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c index 15ce760f5a..ddd15c4781 100644 --- a/gdb/record-btrace.c +++ b/gdb/record-btrace.c @@ -620,26 +620,25 @@ 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, int flags) + gdb::optional *src_and_asm_tuple, + gdb::optional *asm_list, + int 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 (); + src_and_asm_tuple->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 +651,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 +702,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 +730,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 0340a44a83..3648815090 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 1708542e7e..a415100d7e 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: