From patchwork Wed Jan 23 15:21:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 31185 Received: (qmail 64407 invoked by alias); 23 Jan 2019 15:21:43 -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 64312 invoked by uid 89); 23 Jan 2019 15:21:43 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:4275 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 23 Jan 2019 15:21:41 +0000 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 29A3A80F90; Wed, 23 Jan 2019 15:21:40 +0000 (UTC) Received: from localhost.localdomain (ovpn04.gateway.prod.ext.ams2.redhat.com [10.39.146.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 50B9267152; Wed, 23 Jan 2019 15:21:39 +0000 (UTC) From: Pedro Alves To: gdb-patches@sourceware.org Cc: Tom Tromey , Andrew Burgess Subject: [PATCH v3 06/17] Replace delete_longjmp_breakpoint_cleanup with a forward_scope_exit type Date: Wed, 23 Jan 2019 15:21:20 +0000 Message-Id: <20190123152131.29893-7-palves@redhat.com> In-Reply-To: <20190123152131.29893-1-palves@redhat.com> References: <20190123152131.29893-1-palves@redhat.com> From: Tom Tromey This removes delete_longjmp_breakpoint_cleanup in favor of forward_scope_exit. gdb/ChangeLog: yyyy-mm-dd Tom Tromey Andrew Burgess Pedro Alves * breakpoint.c (until_break_command): Use delete_longjmp_breakpoint_cleanup class. * infcmd.c (delete_longjmp_breakpoint_cleanup): Remove function. (until_next_command): Use delete_longjmp_breakpoint_cleanup class. * inferior.h: Include forward-scope-exit.h. (delete_longjmp_breakpoint_cleanup): Replace function declaration with FORWARD_SCOPE_EXIT type. --- gdb/breakpoint.c | 11 ++++++----- gdb/infcmd.c | 12 ++---------- gdb/inferior.h | 4 +++- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 3166fa0129..999809c312 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -11073,7 +11073,6 @@ until_break_command (const char *arg, int from_tty, int anywhere) struct gdbarch *frame_gdbarch; struct frame_id stack_frame_id; struct frame_id caller_frame_id; - struct cleanup *old_chain; int thread; struct thread_info *tp; struct until_break_fsm *sm; @@ -11106,8 +11105,6 @@ until_break_command (const char *arg, int from_tty, int anywhere) tp = inferior_thread (); thread = tp->global_num; - old_chain = make_cleanup (null_cleanup, NULL); - /* Note linespec handling above invalidates the frame chain. Installing a breakpoint also invalidates the frame chain (as it may need to switch threads), so do any frame handling before @@ -11122,6 +11119,9 @@ until_break_command (const char *arg, int from_tty, int anywhere) one. */ breakpoint_up caller_breakpoint; + + gdb::optional lj_deleter; + if (frame_id_p (caller_frame_id)) { struct symtab_and_line sal2; @@ -11136,7 +11136,7 @@ until_break_command (const char *arg, int from_tty, int anywhere) bp_until); set_longjmp_breakpoint (tp, caller_frame_id); - make_cleanup (delete_longjmp_breakpoint_cleanup, &thread); + lj_deleter.emplace (thread); } /* set_momentary_breakpoint could invalidate FRAME. */ @@ -11159,7 +11159,8 @@ until_break_command (const char *arg, int from_tty, int anywhere) std::move (caller_breakpoint)); tp->thread_fsm = &sm->thread_fsm; - discard_cleanups (old_chain); + if (lj_deleter) + lj_deleter->release (); proceed (-1, GDB_SIGNAL_DEFAULT); } diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 3c3add89ab..fafb7e2ec4 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -947,13 +947,6 @@ nexti_command (const char *count_string, int from_tty) step_1 (1, 1, count_string); } -void -delete_longjmp_breakpoint_cleanup (void *arg) -{ - int thread = * (int *) arg; - delete_longjmp_breakpoint (thread); -} - /* Data for the FSM that manages the step/next/stepi/nexti commands. */ @@ -1517,7 +1510,6 @@ until_next_command (int from_tty) struct symtab_and_line sal; struct thread_info *tp = inferior_thread (); int thread = tp->global_num; - struct cleanup *old_chain; struct until_next_fsm *sm; clear_proceed_status (0); @@ -1556,11 +1548,11 @@ until_next_command (int from_tty) tp->control.step_over_calls = STEP_OVER_ALL; set_longjmp_breakpoint (tp, get_frame_id (frame)); - old_chain = make_cleanup (delete_longjmp_breakpoint_cleanup, &thread); + delete_longjmp_breakpoint_cleanup lj_deleter (thread); sm = new_until_next_fsm (command_interp (), tp->global_num); tp->thread_fsm = &sm->thread_fsm; - discard_cleanups (old_chain); + lj_deleter.release (); proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT); } diff --git a/gdb/inferior.h b/gdb/inferior.h index a82df1a52a..cadaaedf22 100644 --- a/gdb/inferior.h +++ b/gdb/inferior.h @@ -51,6 +51,7 @@ struct thread_info; #include "symfile-add-flags.h" #include "common/refcounted-object.h" +#include "common/forward-scope-exit.h" #include "common-inferior.h" #include "gdbthread.h" @@ -198,7 +199,8 @@ extern void continue_1 (int all_threads); extern void interrupt_target_1 (int all_threads); -extern void delete_longjmp_breakpoint_cleanup (void *arg); +using delete_longjmp_breakpoint_cleanup + = FORWARD_SCOPE_EXIT (delete_longjmp_breakpoint); extern void detach_command (const char *, int);