aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-03-28 15:49:24 -0600
committerTom Tromey <tom@tromey.com>2018-03-30 13:10:42 -0600
commit9ae79dac31c2bcbd2f5418da2e12af94060e139a (patch)
tree3c75e61dca77791339abe7b5d132b49633fbe7d2 /gdb
parentf2ab4b4206781d75c76962b3ef7dd08b3489c40e (diff)
downloadbinutils-9ae79dac31c2bcbd2f5418da2e12af94060e139a.zip
binutils-9ae79dac31c2bcbd2f5418da2e12af94060e139a.tar.gz
binutils-9ae79dac31c2bcbd2f5418da2e12af94060e139a.tar.bz2
Remove make_cleanup_unpush_target
This removes make_cleanup_unpush_target, replacing it with a unique_ptr. This may seem odd, because the object in question is not actually freed, but unique_ptr provided the necessary functionality. Tested by the buildbot. gdb/ChangeLog 2018-03-30 Tom Tromey <tom@tromey.com> * utils.h (make_cleanup_unpush_target): Remove. * inf-ptrace.c (struct target_unpusher): New. (target_unpush_up) New typedef. (inf_ptrace_create_inferior, inf_ptrace_attach): Use target_unpush_up. * utils.c (do_unpush_target, make_cleanup_unpush_target): Remove.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/inf-ptrace.c28
-rw-r--r--gdb/utils.c18
-rw-r--r--gdb/utils.h3
4 files changed, 31 insertions, 27 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 78f427f..815d03d 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2018-03-30 Tom Tromey <tom@tromey.com>
+
+ * utils.h (make_cleanup_unpush_target): Remove.
+ * inf-ptrace.c (struct target_unpusher): New.
+ (target_unpush_up) New typedef.
+ (inf_ptrace_create_inferior, inf_ptrace_attach): Use
+ target_unpush_up.
+ * utils.c (do_unpush_target, make_cleanup_unpush_target): Remove.
+
2018-03-27 Tom Tromey <tom@tromey.com>
* utils.c (prompt_for_continue): Use unique_xmalloc_ptr.
diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c
index a290cd8..e203886 100644
--- a/gdb/inf-ptrace.c
+++ b/gdb/inf-ptrace.c
@@ -36,6 +36,22 @@
+/* A unique_ptr helper to unpush a target. */
+
+struct target_unpusher
+{
+ void operator() (struct target_ops *ops) const
+ {
+ unpush_target (ops);
+ }
+};
+
+/* A unique_ptr that unpushes a target on destruction. */
+
+typedef std::unique_ptr<struct target_ops, target_unpusher> target_unpush_up;
+
+
+
#ifdef PT_GET_PROCESS_STATE
/* Target hook for follow_fork. On entry and at return inferior_ptid is
@@ -101,13 +117,13 @@ inf_ptrace_create_inferior (struct target_ops *ops,
/* Do not change either targets above or the same target if already present.
The reason is the target stack is shared across multiple inferiors. */
int ops_already_pushed = target_is_pushed (ops);
- struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
+ target_unpush_up unpusher;
if (! ops_already_pushed)
{
/* Clear possible core file with its process_stratum. */
push_target (ops);
- make_cleanup_unpush_target (ops);
+ unpusher.reset (ops);
}
pid = fork_inferior (exec_file, allargs, env, inf_ptrace_me, NULL,
@@ -119,7 +135,7 @@ inf_ptrace_create_inferior (struct target_ops *ops,
pid shouldn't change. */
add_thread_silent (ptid);
- discard_cleanups (back_to);
+ unpusher.release ();
gdb_startup_inferior (pid, START_INFERIOR_TRAPS_EXPECTED);
@@ -174,19 +190,19 @@ inf_ptrace_attach (struct target_ops *ops, const char *args, int from_tty)
/* Do not change either targets above or the same target if already present.
The reason is the target stack is shared across multiple inferiors. */
int ops_already_pushed = target_is_pushed (ops);
- struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
pid = parse_pid_to_attach (args);
if (pid == getpid ()) /* Trying to masturbate? */
error (_("I refuse to debug myself!"));
+ target_unpush_up unpusher;
if (! ops_already_pushed)
{
/* target_pid_to_str already uses the target. Also clear possible core
file with its process_stratum. */
push_target (ops);
- make_cleanup_unpush_target (ops);
+ unpusher.reset (ops);
}
if (from_tty)
@@ -221,7 +237,7 @@ inf_ptrace_attach (struct target_ops *ops, const char *args, int from_tty)
target, it should decorate the ptid later with more info. */
add_thread_silent (inferior_ptid);
- discard_cleanups (back_to);
+ unpusher.release ();
}
#ifdef PT_GET_PROCESS_STATE
diff --git a/gdb/utils.c b/gdb/utils.c
index ee31f39..ee19fed 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -141,24 +141,6 @@ show_pagination_enabled (struct ui_file *file, int from_tty,
because while they use the "cleanup API" they are not part of the
"cleanup API". */
-/* Helper for make_cleanup_unpush_target. */
-
-static void
-do_unpush_target (void *arg)
-{
- struct target_ops *ops = (struct target_ops *) arg;
-
- unpush_target (ops);
-}
-
-/* Return a new cleanup that unpushes OPS. */
-
-struct cleanup *
-make_cleanup_unpush_target (struct target_ops *ops)
-{
- return make_cleanup (do_unpush_target, ops);
-}
-
/* Helper for make_cleanup_value_free_to_mark. */
static void
diff --git a/gdb/utils.h b/gdb/utils.h
index 6ff18568..0de0fe2 100644
--- a/gdb/utils.h
+++ b/gdb/utils.h
@@ -244,9 +244,6 @@ private:
/* For make_cleanup_close see common/filestuff.h. */
-struct target_ops;
-extern struct cleanup *make_cleanup_unpush_target (struct target_ops *ops);
-
extern struct cleanup *make_cleanup_value_free_to_mark (struct value *);
/* A deleter for a hash table. */