aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2021-03-23 09:50:32 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2021-03-23 09:50:32 -0400
commitfadf6add3028d477457c809f60f07643964d7fd2 (patch)
tree6892c92baa1dc60e5e238e9bee69c0fd2fe732cc
parent70e958370c8f4dc3222b658a725571d8d2f5f98a (diff)
downloadgdb-fadf6add3028d477457c809f60f07643964d7fd2.zip
gdb-fadf6add3028d477457c809f60f07643964d7fd2.tar.gz
gdb-fadf6add3028d477457c809f60f07643964d7fd2.tar.bz2
gdb: remove unpush_target free function
unpush_target unpushes the passed-in target from the current inferior's target stack. Calling it is therefore an implicit dependency on the current global inferior. Remove that function and make the callers use the inferior::unpush_target method directly. This sometimes allows using the inferior from the context rather than the global current inferior. target_unpusher::operator() now needs to be implemented in target.c, otherwise target.h and inferior.h both need to include each other, and that wouldn't work. gdb/ChangeLog: * target.h (unpush_target): Remove, update all callers to use `inferior::unpush_target` instead. (struct target_unpusher) <operator()>: Just declare. * target.c (unpush_target): Remove. (target_unpusher::operator()): New. Change-Id: Ia5172dfb3f373e0a75b991885b50322ca2142a8c
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/aix-thread.c2
-rw-r--r--gdb/bsd-kvm.c2
-rw-r--r--gdb/bsd-uthread.c2
-rw-r--r--gdb/corelow.c2
-rw-r--r--gdb/exec.c2
-rw-r--r--gdb/inf-child.c2
-rw-r--r--gdb/linux-thread-db.c6
-rw-r--r--gdb/ravenscar-thread.c2
-rw-r--r--gdb/record-btrace.c2
-rw-r--r--gdb/record-full.c2
-rw-r--r--gdb/record.c2
-rw-r--r--gdb/remote-sim.c4
-rw-r--r--gdb/sol-thread.c4
-rw-r--r--gdb/target.c18
-rw-r--r--gdb/target.h7
-rw-r--r--gdb/tracefile-tfile.c4
17 files changed, 36 insertions, 35 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1e07654..7396237 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2021-03-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ * target.h (unpush_target): Remove, update all callers
+ to use `inferior::unpush_target` instead.
+ (struct target_unpusher) <operator()>: Just declare.
+ * target.c (unpush_target): Remove.
+ (target_unpusher::operator()): New.
+
2021-03-22 Andrew Burgess <andrew.burgess@embecosm.com>
* dwarf2/read.c (process_psymtab_comp_unit): Replace abort with an
diff --git a/gdb/aix-thread.c b/gdb/aix-thread.c
index f4b6c1b..a479d01 100644
--- a/gdb/aix-thread.c
+++ b/gdb/aix-thread.c
@@ -993,7 +993,7 @@ pd_disable (void)
if (pd_active)
pd_deactivate ();
pd_able = 0;
- unpush_target (&aix_thread_ops);
+ current_inferior ()->unpush_target (&aix_thread_ops);
}
/* new_objfile observer callback.
diff --git a/gdb/bsd-kvm.c b/gdb/bsd-kvm.c
index cd25e19..17db2fe 100644
--- a/gdb/bsd-kvm.c
+++ b/gdb/bsd-kvm.c
@@ -132,7 +132,7 @@ bsd_kvm_target_open (const char *arg, int from_tty)
error (("%s"), errbuf);
bsd_kvm_corefile = filename;
- unpush_target (&bsd_kvm_ops);
+ current_inferior ()->unpush_target (&bsd_kvm_ops);
core_kd = temp_kd;
push_target (&bsd_kvm_ops);
diff --git a/gdb/bsd-uthread.c b/gdb/bsd-uthread.c
index d7dd0a1..2ee47bf 100644
--- a/gdb/bsd-uthread.c
+++ b/gdb/bsd-uthread.c
@@ -259,7 +259,7 @@ bsd_uthread_deactivate (void)
if (!bsd_uthread_active)
return;
- unpush_target (&bsd_uthread_ops);
+ current_inferior ()->unpush_target (&bsd_uthread_ops);
}
static void
diff --git a/gdb/corelow.c b/gdb/corelow.c
index a2d2d20..a4c1f63 100644
--- a/gdb/corelow.c
+++ b/gdb/corelow.c
@@ -580,7 +580,7 @@ core_target::detach (inferior *inf, int from_tty)
/* Note that 'this' is dangling after this call. unpush_target
closes the target, and our close implementation deletes
'this'. */
- unpush_target (this);
+ inf->unpush_target (this);
/* Clear the register cache and the frame cache. */
registers_changed ();
diff --git a/gdb/exec.c b/gdb/exec.c
index 544a058..bcc54bd 100644
--- a/gdb/exec.c
+++ b/gdb/exec.c
@@ -671,7 +671,7 @@ program_space::remove_target_sections (void *owner)
continue;
switch_to_inferior_no_thread (inf);
- unpush_target (&exec_ops);
+ inf->unpush_target (&exec_ops);
}
}
}
diff --git a/gdb/inf-child.c b/gdb/inf-child.c
index 192cfc3..b8bc2e2 100644
--- a/gdb/inf-child.c
+++ b/gdb/inf-child.c
@@ -207,7 +207,7 @@ void
inf_child_target::maybe_unpush_target ()
{
if (!inf_child_explicitly_opened)
- unpush_target (this);
+ current_inferior ()->unpush_target (this);
}
void
diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c
index 4dab64a..3a3d3de 100644
--- a/gdb/linux-thread-db.c
+++ b/gdb/linux-thread-db.c
@@ -1364,7 +1364,7 @@ thread_db_target::detach (inferior *inf, int from_tty)
/* NOTE: From this point on, inferior_ptid is null_ptid. */
/* Detach the thread_db target from this inferior. */
- unpush_target (this);
+ inf->unpush_target (this);
}
ptid_t
@@ -1398,7 +1398,7 @@ thread_db_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
/* New image, it may or may not end up using thread_db. Assume
not unless we find otherwise. */
delete_thread_db_info (beneath, ptid.pid ());
- unpush_target (this);
+ current_inferior ()->unpush_target (this);
return ptid;
}
@@ -1420,7 +1420,7 @@ thread_db_target::mourn_inferior ()
target_beneath->mourn_inferior ();
/* Detach the thread_db target from this inferior. */
- unpush_target (this);
+ current_inferior ()->unpush_target (this);
}
struct callback_data
diff --git a/gdb/ravenscar-thread.c b/gdb/ravenscar-thread.c
index 2cc7bbc..63aa1d1 100644
--- a/gdb/ravenscar-thread.c
+++ b/gdb/ravenscar-thread.c
@@ -620,7 +620,7 @@ ravenscar_thread_target::mourn_inferior ()
{
m_base_ptid = null_ptid;
target_ops *beneath = this->beneath ();
- unpush_target (this);
+ current_inferior ()->unpush_target (this);
beneath->mourn_inferior ();
}
diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c
index d9cc7a3..1a0cac2 100644
--- a/gdb/record-btrace.c
+++ b/gdb/record-btrace.c
@@ -428,7 +428,7 @@ record_btrace_target::disconnect (const char *args,
struct target_ops *beneath = this->beneath ();
/* Do not stop recording, just clean up GDB side. */
- unpush_target (this);
+ current_inferior ()->unpush_target (this);
/* Forward disconnect. */
beneath->disconnect (args, from_tty);
diff --git a/gdb/record-full.c b/gdb/record-full.c
index 2373741..59e4410 100644
--- a/gdb/record-full.c
+++ b/gdb/record-full.c
@@ -2078,7 +2078,7 @@ record_full_core_target::kill ()
if (record_debug)
fprintf_unfiltered (gdb_stdlog, "Process record: record_full_core_kill\n");
- unpush_target (this);
+ current_inferior ()->unpush_target (this);
}
/* "fetch_registers" method for prec over corefile. */
diff --git a/gdb/record.c b/gdb/record.c
index cd541b5..483b906 100644
--- a/gdb/record.c
+++ b/gdb/record.c
@@ -166,7 +166,7 @@ record_unpush (struct target_ops *t)
{
DEBUG ("unpush %s", t->shortname ());
- unpush_target (t);
+ current_inferior ()->unpush_target (t);
}
/* See record.h. */
diff --git a/gdb/remote-sim.c b/gdb/remote-sim.c
index d511305..f72bbd2 100644
--- a/gdb/remote-sim.c
+++ b/gdb/remote-sim.c
@@ -699,7 +699,7 @@ gdbsim_target_open (const char *args, int from_tty)
operation until after we complete those operations which could
error out. */
if (gdbsim_is_open)
- unpush_target (&gdbsim_ops);
+ current_inferior ()->unpush_target (&gdbsim_ops);
len = (7 + 1 /* gdbsim */
+ strlen (" -E little")
@@ -834,7 +834,7 @@ gdbsim_target::detach (inferior *inf, int from_tty)
if (remote_debug)
fprintf_unfiltered (gdb_stdlog, "gdbsim_detach\n");
- unpush_target (this); /* calls gdbsim_close to do the real work */
+ inf->unpush_target (this); /* calls gdbsim_close to do the real work */
if (from_tty)
printf_filtered ("Ending simulator %s debugging\n", target_shortname);
}
diff --git a/gdb/sol-thread.c b/gdb/sol-thread.c
index 7b46a57..1458185 100644
--- a/gdb/sol-thread.c
+++ b/gdb/sol-thread.c
@@ -387,7 +387,7 @@ sol_thread_target::detach (inferior *inf, int from_tty)
sol_thread_active = 0;
inferior_ptid = ptid_t (main_ph.ptid.pid ());
- unpush_target (this);
+ inf->unpush_target (this);
beneath->detach (inf, from_tty);
}
@@ -681,7 +681,7 @@ sol_thread_target::mourn_inferior ()
sol_thread_active = 0;
- unpush_target (this);
+ current_inferior ()->unpush_target (this);
beneath->mourn_inferior ();
}
diff --git a/gdb/target.c b/gdb/target.c
index 0889da8..236aded 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -160,7 +160,7 @@ set_targetdebug (const char *args, int from_tty, struct cmd_list_element *c)
if (targetdebug)
push_target (the_debug_target);
else
- unpush_target (the_debug_target);
+ current_inferior ()->unpush_target (the_debug_target);
}
static void
@@ -589,14 +589,6 @@ push_target (target_ops_up &&t)
/* See target.h. */
-int
-unpush_target (struct target_ops *t)
-{
- return current_inferior ()->unpush_target (t);
-}
-
-/* See target.h. */
-
bool
target_stack::unpush (target_ops *t)
{
@@ -640,7 +632,7 @@ target_stack::unpush (target_ops *t)
static void
unpush_target_and_assert (struct target_ops *target)
{
- if (!unpush_target (target))
+ if (!current_inferior ()->unpush_target (target))
{
fprintf_unfiltered (gdb_stderr,
"pop_all_targets couldn't find target %s\n",
@@ -681,6 +673,12 @@ target_is_pushed (target_ops *t)
return current_inferior ()->target_is_pushed (t);
}
+void
+target_unpusher::operator() (struct target_ops *ops) const
+{
+ current_inferior ()->unpush_target (ops);
+}
+
/* Default implementation of to_get_thread_local_address. */
static void
diff --git a/gdb/target.h b/gdb/target.h
index ee93c5c..3a64094 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -2390,16 +2390,11 @@ extern void push_target (struct target_ops *);
/* An overload that deletes the target on failure. */
extern void push_target (target_ops_up &&);
-extern int unpush_target (struct target_ops *);
-
/* A unique_ptr helper to unpush a target. */
struct target_unpusher
{
- void operator() (struct target_ops *ops) const
- {
- unpush_target (ops);
- }
+ void operator() (struct target_ops *ops) const;
};
/* A unique_ptr that unpushes a target on destruction. */
diff --git a/gdb/tracefile-tfile.c b/gdb/tracefile-tfile.c
index ca6324c..ea70364 100644
--- a/gdb/tracefile-tfile.c
+++ b/gdb/tracefile-tfile.c
@@ -481,7 +481,7 @@ tfile_target_open (const char *arg, int from_tty)
/* Looks semi-reasonable. Toss the old trace file and work on the new. */
- unpush_target (&tfile_ops);
+ current_inferior ()->unpush_target (&tfile_ops);
trace_filename = filename.release ();
trace_fd = scratch_chan;
@@ -551,7 +551,7 @@ tfile_target_open (const char *arg, int from_tty)
catch (const gdb_exception &ex)
{
/* Remove the partially set up target. */
- unpush_target (&tfile_ops);
+ current_inferior ()->unpush_target (&tfile_ops);
throw;
}