From: Tom Tromey Date: Wed, 3 May 2017 23:13:04 +0000 (-0600) Subject: Remove make_cleanup_defer_target_commit_resume X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a9bc57b97840a874ad2802e29a44fbf557668808;p=binutils-gdb.git Remove make_cleanup_defer_target_commit_resume This removes make_cleanup_defer_target_commit_resume in favor of using scoped_restore. gdb/ChangeLog 2017-09-29 Tom Tromey * target.h (make_scoped_defer_target_commit_resume): Update. * target.c (make_scoped_defer_target_commit_resume): Rename from make_cleanup_defer_target_commit_resume. Return a scoped_restore. * infrun.c (proceed): Use make_scoped_defer_target_commit_resume. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4fa2d4952d8..5d68fb1f6ab 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2017-09-29 Tom Tromey + + * target.h (make_scoped_defer_target_commit_resume): Update. + * target.c (make_scoped_defer_target_commit_resume): Rename from + make_cleanup_defer_target_commit_resume. Return a + scoped_restore. + * infrun.c (proceed): Use make_scoped_defer_target_commit_resume. + 2017-09-29 Tom Tromey * main.c (captured_main_1): Remove unused declaration. diff --git a/gdb/infrun.c b/gdb/infrun.c index f44ca91e77c..fba00795ac7 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -2990,7 +2990,6 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal) struct execution_control_state ecss; struct execution_control_state *ecs = &ecss; struct cleanup *old_chain; - struct cleanup *defer_resume_cleanup; int started; /* If we're stopped at a fork/vfork, follow the branch set by the @@ -3132,26 +3131,27 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal) until the target stops again. */ tp->prev_pc = regcache_read_pc (regcache); - defer_resume_cleanup = make_cleanup_defer_target_commit_resume (); + { + scoped_restore save_defer_tc = make_scoped_defer_target_commit_resume (); - started = start_step_over (); + started = start_step_over (); - if (step_over_info_valid_p ()) - { - /* Either this thread started a new in-line step over, or some - other thread was already doing one. In either case, don't - resume anything else until the step-over is finished. */ - } - else if (started && !target_is_non_stop_p ()) - { - /* A new displaced stepping sequence was started. In all-stop, - we can't talk to the target anymore until it next stops. */ - } - else if (!non_stop && target_is_non_stop_p ()) - { - /* In all-stop, but the target is always in non-stop mode. - Start all other threads that are implicitly resumed too. */ - ALL_NON_EXITED_THREADS (tp) + if (step_over_info_valid_p ()) + { + /* Either this thread started a new in-line step over, or some + other thread was already doing one. In either case, don't + resume anything else until the step-over is finished. */ + } + else if (started && !target_is_non_stop_p ()) + { + /* A new displaced stepping sequence was started. In all-stop, + we can't talk to the target anymore until it next stops. */ + } + else if (!non_stop && target_is_non_stop_p ()) + { + /* In all-stop, but the target is always in non-stop mode. + Start all other threads that are implicitly resumed too. */ + ALL_NON_EXITED_THREADS (tp) { /* Ignore threads of processes we're not resuming. */ if (!ptid_match (tp->ptid, resume_ptid)) @@ -3187,18 +3187,18 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal) if (!ecs->wait_some_more) error (_("Command aborted.")); } - } - else if (!tp->resumed && !thread_is_in_step_over_chain (tp)) - { - /* The thread wasn't started, and isn't queued, run it now. */ - reset_ecs (ecs, tp); - switch_to_thread (tp->ptid); - keep_going_pass_signal (ecs); - if (!ecs->wait_some_more) - error (_("Command aborted.")); - } + } + else if (!tp->resumed && !thread_is_in_step_over_chain (tp)) + { + /* The thread wasn't started, and isn't queued, run it now. */ + reset_ecs (ecs, tp); + switch_to_thread (tp->ptid); + keep_going_pass_signal (ecs); + if (!ecs->wait_some_more) + error (_("Command aborted.")); + } + } - do_cleanups (defer_resume_cleanup); target_commit_resume (); discard_cleanups (old_chain); diff --git a/gdb/target.c b/gdb/target.c index 4f574f670ff..9abaa581525 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -2285,14 +2285,10 @@ target_commit_resume (void) /* See target.h. */ -struct cleanup * -make_cleanup_defer_target_commit_resume (void) +scoped_restore_tmpl +make_scoped_defer_target_commit_resume () { - struct cleanup *old_chain; - - old_chain = make_cleanup_restore_integer (&defer_target_commit_resume); - defer_target_commit_resume = 1; - return old_chain; + return make_scoped_restore (&defer_target_commit_resume, 1); } void diff --git a/gdb/target.h b/gdb/target.h index d5a5312817a..87482dcd91c 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -1376,10 +1376,10 @@ extern void target_resume (ptid_t ptid, int step, enum gdb_signal signal); coalesce multiple resumption requests in a single vCont packet. */ extern void target_commit_resume (); -/* Setup to defer target_commit_resume calls, and return a cleanup - that reactivates target_commit_resume, if it was previously +/* Setup to defer target_commit_resume calls, and reactivate + target_commit_resume on destruction, if it was previously active. */ -struct cleanup *make_cleanup_defer_target_commit_resume (); +extern scoped_restore_tmpl make_scoped_defer_target_commit_resume (); /* For target_read_memory see target/target.h. */