From patchwork Wed May 3 22:46:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 20256 Received: (qmail 53490 invoked by alias); 3 May 2017 22:46:50 -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 52356 invoked by uid 89); 3 May 2017 22:46:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.3 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=migration, H*RU:sk:outboun, Hx-spam-relays-external:sk:outboun, sourced X-HELO: outbound-ss-1812.hostmonster.com Received: from gproxy1-pub.mail.unifiedlayer.com (HELO outbound-ss-1812.hostmonster.com) (69.89.25.95) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 03 May 2017 22:46:36 +0000 Received: from cmgw2 (cmgw3 [10.0.90.83]) by gproxy1.mail.unifiedlayer.com (Postfix) with ESMTP id 9F218175A3A for ; Wed, 3 May 2017 16:46:37 -0600 (MDT) Received: from box522.bluehost.com ([74.220.219.122]) by cmgw2 with id Fyma1v00a2f2jeq01ymdAK; Wed, 03 May 2017 16:46:37 -0600 X-Authority-Analysis: v=2.2 cv=Ibz3YSia c=1 sm=1 tr=0 a=GsOEXm/OWkKvwdLVJsfwcA==:117 a=GsOEXm/OWkKvwdLVJsfwcA==:17 a=tJ8p9aeEuA8A:10 a=zstS-IiYAAAA:8 a=GVLBpVferg01hwQz18sA:9 a=fBUfDqCkxn8ueD1k:21 a=vD9zCGQIn_Xp6BFE:21 a=4G6NA9xxw8l3yy4pmD5M:22 Received: from 75-166-63-71.hlrn.qwest.net ([75.166.63.71]:53090 helo=bapiya.Home) by box522.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.87) (envelope-from ) id 1d632Y-00051x-FQ; Wed, 03 May 2017 16:46:34 -0600 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [RFA 12/23] More uses of scoped_restore Date: Wed, 3 May 2017 16:46:15 -0600 Message-Id: <20170503224626.2818-13-tom@tromey.com> In-Reply-To: <20170503224626.2818-1-tom@tromey.com> References: <20170503224626.2818-1-tom@tromey.com> X-BWhitelist: no X-Exim-ID: 1d632Y-00051x-FQ X-Source-Sender: 75-166-63-71.hlrn.qwest.net (bapiya.Home) [75.166.63.71]:53090 X-Source-Auth: tom+tromey.com X-Email-Count: 19 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTIyLmJsdWVob3N0LmNvbQ== There were a few more places in gdb that could easily use scoped_restore, replacing some cleanups. 2017-05-02 Tom Tromey * reverse.c (exec_direction_default): Remove. (exec_reverse_once): Use scoped_restore. * remote.c (restore_remote_timeout): Remove. (remote_flash_erase, remote_flash_write, remote_flash_done) (readchar, remote_serial_write): Use scoped_restore. * cli/cli-script.c (struct source_cleanup_lines_args) (source_cleanup_lines): Remove. (script_from_file): Use scoped_restore. * cli/cli-cmds.c (source_verbose_cleanup): Remove. (source_command): Use scoped_restore. --- gdb/ChangeLog | 13 +++++++++++ gdb/cli/cli-cmds.c | 16 +------------- gdb/cli/cli-script.c | 60 +++++++++++++++----------------------------------- gdb/remote.c | 62 +++++++++++++++++----------------------------------- gdb/reverse.c | 18 ++++----------- 5 files changed, 56 insertions(+), 113 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ddf87a3..d288de4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,18 @@ 2017-05-02 Tom Tromey + * reverse.c (exec_direction_default): Remove. + (exec_reverse_once): Use scoped_restore. + * remote.c (restore_remote_timeout): Remove. + (remote_flash_erase, remote_flash_write, remote_flash_done) + (readchar, remote_serial_write): Use scoped_restore. + * cli/cli-script.c (struct source_cleanup_lines_args) + (source_cleanup_lines): Remove. + (script_from_file): Use scoped_restore. + * cli/cli-cmds.c (source_verbose_cleanup): Remove. + (source_command): Use scoped_restore. + +2017-05-02 Tom Tromey + * utils.h (make_cleanup_free_so): Remove. * utils.c (do_free_so, make_cleanup_free_so): Remove. * solist.h (struct so_deleter): New. diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index c75dd16..3dc8b9c 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -633,26 +633,14 @@ source_script (const char *file, int from_tty) source_script_with_search (file, from_tty, 0); } -/* Return the source_verbose global variable to its previous state - on exit from the source command, by whatever means. */ -static void -source_verbose_cleanup (void *old_value) -{ - source_verbose = *(int *)old_value; - xfree (old_value); -} - static void source_command (char *args, int from_tty) { - struct cleanup *old_cleanups; char *file = args; int *old_source_verbose = XNEW (int); int search_path = 0; - *old_source_verbose = source_verbose; - old_cleanups = make_cleanup (source_verbose_cleanup, - old_source_verbose); + scoped_restore save_source_verbose = make_scoped_restore (&source_verbose); /* -v causes the source command to run in verbose mode. -s causes the file to be searched in the source search path, @@ -693,8 +681,6 @@ source_command (char *args, int from_tty) } source_script_with_search (file, from_tty, search_path); - - do_cleanups (old_cleanups); } diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c index e0e27ef..0aa1848 100644 --- a/gdb/cli/cli-script.c +++ b/gdb/cli/cli-script.c @@ -1584,58 +1584,34 @@ document_command (char *comname, int from_tty) } } -struct source_cleanup_lines_args -{ - int old_line; - const char *old_file; -}; - -static void -source_cleanup_lines (void *args) -{ - struct source_cleanup_lines_args *p = - (struct source_cleanup_lines_args *) args; - - source_line_number = p->old_line; - source_file_name = p->old_file; -} - /* Used to implement source_command. */ void script_from_file (FILE *stream, const char *file) { - struct cleanup *old_cleanups; - struct source_cleanup_lines_args old_lines; - if (stream == NULL) internal_error (__FILE__, __LINE__, _("called with NULL file pointer!")); - old_lines.old_line = source_line_number; - old_lines.old_file = source_file_name; - old_cleanups = make_cleanup (source_cleanup_lines, &old_lines); - source_line_number = 0; - source_file_name = file; - - { - scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0); + scoped_restore restore_line_number + = make_scoped_restore (&source_line_number, 0); + scoped_restore resotre_file + = make_scoped_restore (&source_file_name, file); - TRY - { - read_command_file (stream); - } - CATCH (e, RETURN_MASK_ERROR) - { - /* Re-throw the error, but with the file name information - prepended. */ - throw_error (e.error, - _("%s:%d: Error in sourced command file:\n%s"), - source_file_name, source_line_number, e.message); - } - END_CATCH - } + scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0); - do_cleanups (old_cleanups); + TRY + { + read_command_file (stream); + } + CATCH (e, RETURN_MASK_ERROR) + { + /* Re-throw the error, but with the file name information + prepended. */ + throw_error (e.error, + _("%s:%d: Error in sourced command file:\n%s"), + source_file_name, source_line_number, e.message); + } + END_CATCH } /* Print the definition of user command C to STREAM. Or, if C is a diff --git a/gdb/remote.c b/gdb/remote.c index 1db2e57..ecd0ce0 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -72,6 +72,7 @@ #include "btrace.h" #include "record-btrace.h" #include +#include "common/scoped_restore.h" /* Temp hacks for tracepoint encoding migration. */ static char *target_buf; @@ -8474,14 +8475,6 @@ remote_send_printf (const char *format, ...) return packet_check_result (rs->buf); } -static void -restore_remote_timeout (void *p) -{ - int value = *(int *)p; - - remote_timeout = value; -} - /* Flash writing can take quite some time. We'll set effectively infinite timeout for flash operations. In future, we'll need to decide on a better approach. */ @@ -8492,12 +8485,9 @@ remote_flash_erase (struct target_ops *ops, ULONGEST address, LONGEST length) { int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8; - int saved_remote_timeout = remote_timeout; enum packet_result ret; - struct cleanup *back_to = make_cleanup (restore_remote_timeout, - &saved_remote_timeout); - - remote_timeout = remote_flash_timeout; + scoped_restore restore_timeout + = make_scoped_restore (&remote_timeout, remote_flash_timeout); ret = remote_send_printf ("vFlashErase:%s,%s", phex (address, addr_size), @@ -8511,8 +8501,6 @@ remote_flash_erase (struct target_ops *ops, default: break; } - - do_cleanups (back_to); } static enum target_xfer_status @@ -8520,30 +8508,21 @@ remote_flash_write (struct target_ops *ops, ULONGEST address, ULONGEST length, ULONGEST *xfered_len, const gdb_byte *data) { - int saved_remote_timeout = remote_timeout; - enum target_xfer_status ret; - struct cleanup *back_to = make_cleanup (restore_remote_timeout, - &saved_remote_timeout); - - remote_timeout = remote_flash_timeout; - ret = remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1, - xfered_len,'X', 0); - do_cleanups (back_to); - - return ret; + scoped_restore restore_timeout + = make_scoped_restore (&remote_timeout, remote_flash_timeout); + return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1, + xfered_len,'X', 0); } static void remote_flash_done (struct target_ops *ops) { - int saved_remote_timeout = remote_timeout; int ret; - struct cleanup *back_to = make_cleanup (restore_remote_timeout, - &saved_remote_timeout); - remote_timeout = remote_flash_timeout; + scoped_restore restore_timeout + = make_scoped_restore (&remote_timeout, remote_flash_timeout); + ret = remote_send_printf ("vFlashDone"); - do_cleanups (back_to); switch (ret) { @@ -8591,18 +8570,18 @@ readchar (int timeout) { int ch; struct remote_state *rs = get_remote_state (); - struct cleanup *old_chain; - old_chain = make_cleanup_override_quit_handler (remote_serial_quit_handler); - - rs->got_ctrlc_during_io = 0; + { + scoped_restore restore_quit + = make_scoped_restore (&quit_handler, remote_serial_quit_handler); - ch = serial_readchar (rs->remote_desc, timeout); + rs->got_ctrlc_during_io = 0; - if (rs->got_ctrlc_during_io) - set_quit_flag (); + ch = serial_readchar (rs->remote_desc, timeout); - do_cleanups (old_chain); + if (rs->got_ctrlc_during_io) + set_quit_flag (); + } if (ch >= 0) return ch; @@ -8635,7 +8614,8 @@ remote_serial_write (const char *str, int len) struct remote_state *rs = get_remote_state (); struct cleanup *old_chain; - old_chain = make_cleanup_override_quit_handler (remote_serial_quit_handler); + scoped_restore restore_quit + = make_scoped_restore (&quit_handler, remote_serial_quit_handler); rs->got_ctrlc_during_io = 0; @@ -8647,8 +8627,6 @@ remote_serial_write (const char *str, int len) if (rs->got_ctrlc_during_io) set_quit_flag (); - - do_cleanups (old_chain); } /* Send the command in *BUF to the remote machine, and read the reply diff --git a/gdb/reverse.c b/gdb/reverse.c index 4080616..374a215 100644 --- a/gdb/reverse.c +++ b/gdb/reverse.c @@ -30,13 +30,6 @@ /* User interface: reverse-step, reverse-next etc. */ -static void -exec_direction_default (void *notused) -{ - /* Return execution direction to default state. */ - execution_direction = EXEC_FORWARD; -} - /* exec_reverse_once -- accepts an arbitrary gdb command (string), and executes it with exec-direction set to 'reverse'. @@ -45,9 +38,7 @@ exec_direction_default (void *notused) static void exec_reverse_once (const char *cmd, char *args, int from_tty) { - char *reverse_command; enum exec_direction_kind dir = execution_direction; - struct cleanup *old_chain; if (dir == EXEC_REVERSE) error (_("Already in reverse mode. Use '%s' or 'set exec-dir forward'."), @@ -56,12 +47,11 @@ exec_reverse_once (const char *cmd, char *args, int from_tty) if (!target_can_execute_reverse) error (_("Target %s does not support this command."), target_shortname); - reverse_command = xstrprintf ("%s %s", cmd, args ? args : ""); - old_chain = make_cleanup (exec_direction_default, NULL); - make_cleanup (xfree, reverse_command); + std::string reverse_command = string_printf ("%s %s", cmd, args ? args : ""); + scoped_restore restore_exec_dir + = make_scoped_restore (&execution_direction, EXEC_REVERSE); execution_direction = EXEC_REVERSE; - execute_command (reverse_command, from_tty); - do_cleanups (old_chain); + execute_command (&reverse_command[0], from_tty); } static void