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
This commit is contained in:
Simon Marchi 2021-03-23 09:50:32 -04:00
parent 70e958370c
commit fadf6add30
17 changed files with 36 additions and 35 deletions

View File

@ -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> 2021-03-22 Andrew Burgess <andrew.burgess@embecosm.com>
* dwarf2/read.c (process_psymtab_comp_unit): Replace abort with an * dwarf2/read.c (process_psymtab_comp_unit): Replace abort with an

View File

@ -993,7 +993,7 @@ pd_disable (void)
if (pd_active) if (pd_active)
pd_deactivate (); pd_deactivate ();
pd_able = 0; pd_able = 0;
unpush_target (&aix_thread_ops); current_inferior ()->unpush_target (&aix_thread_ops);
} }
/* new_objfile observer callback. /* new_objfile observer callback.

View File

@ -132,7 +132,7 @@ bsd_kvm_target_open (const char *arg, int from_tty)
error (("%s"), errbuf); error (("%s"), errbuf);
bsd_kvm_corefile = filename; bsd_kvm_corefile = filename;
unpush_target (&bsd_kvm_ops); current_inferior ()->unpush_target (&bsd_kvm_ops);
core_kd = temp_kd; core_kd = temp_kd;
push_target (&bsd_kvm_ops); push_target (&bsd_kvm_ops);

View File

@ -259,7 +259,7 @@ bsd_uthread_deactivate (void)
if (!bsd_uthread_active) if (!bsd_uthread_active)
return; return;
unpush_target (&bsd_uthread_ops); current_inferior ()->unpush_target (&bsd_uthread_ops);
} }
static void static void

View File

@ -580,7 +580,7 @@ core_target::detach (inferior *inf, int from_tty)
/* Note that 'this' is dangling after this call. unpush_target /* Note that 'this' is dangling after this call. unpush_target
closes the target, and our close implementation deletes closes the target, and our close implementation deletes
'this'. */ 'this'. */
unpush_target (this); inf->unpush_target (this);
/* Clear the register cache and the frame cache. */ /* Clear the register cache and the frame cache. */
registers_changed (); registers_changed ();

View File

@ -671,7 +671,7 @@ program_space::remove_target_sections (void *owner)
continue; continue;
switch_to_inferior_no_thread (inf); switch_to_inferior_no_thread (inf);
unpush_target (&exec_ops); inf->unpush_target (&exec_ops);
} }
} }
} }

View File

@ -207,7 +207,7 @@ void
inf_child_target::maybe_unpush_target () inf_child_target::maybe_unpush_target ()
{ {
if (!inf_child_explicitly_opened) if (!inf_child_explicitly_opened)
unpush_target (this); current_inferior ()->unpush_target (this);
} }
void void

View File

@ -1364,7 +1364,7 @@ thread_db_target::detach (inferior *inf, int from_tty)
/* NOTE: From this point on, inferior_ptid is null_ptid. */ /* NOTE: From this point on, inferior_ptid is null_ptid. */
/* Detach the thread_db target from this inferior. */ /* Detach the thread_db target from this inferior. */
unpush_target (this); inf->unpush_target (this);
} }
ptid_t 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 /* New image, it may or may not end up using thread_db. Assume
not unless we find otherwise. */ not unless we find otherwise. */
delete_thread_db_info (beneath, ptid.pid ()); delete_thread_db_info (beneath, ptid.pid ());
unpush_target (this); current_inferior ()->unpush_target (this);
return ptid; return ptid;
} }
@ -1420,7 +1420,7 @@ thread_db_target::mourn_inferior ()
target_beneath->mourn_inferior (); target_beneath->mourn_inferior ();
/* Detach the thread_db target from this inferior. */ /* Detach the thread_db target from this inferior. */
unpush_target (this); current_inferior ()->unpush_target (this);
} }
struct callback_data struct callback_data

View File

@ -620,7 +620,7 @@ ravenscar_thread_target::mourn_inferior ()
{ {
m_base_ptid = null_ptid; m_base_ptid = null_ptid;
target_ops *beneath = this->beneath (); target_ops *beneath = this->beneath ();
unpush_target (this); current_inferior ()->unpush_target (this);
beneath->mourn_inferior (); beneath->mourn_inferior ();
} }

View File

@ -428,7 +428,7 @@ record_btrace_target::disconnect (const char *args,
struct target_ops *beneath = this->beneath (); struct target_ops *beneath = this->beneath ();
/* Do not stop recording, just clean up GDB side. */ /* Do not stop recording, just clean up GDB side. */
unpush_target (this); current_inferior ()->unpush_target (this);
/* Forward disconnect. */ /* Forward disconnect. */
beneath->disconnect (args, from_tty); beneath->disconnect (args, from_tty);

View File

@ -2078,7 +2078,7 @@ record_full_core_target::kill ()
if (record_debug) if (record_debug)
fprintf_unfiltered (gdb_stdlog, "Process record: record_full_core_kill\n"); 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. */ /* "fetch_registers" method for prec over corefile. */

View File

@ -166,7 +166,7 @@ record_unpush (struct target_ops *t)
{ {
DEBUG ("unpush %s", t->shortname ()); DEBUG ("unpush %s", t->shortname ());
unpush_target (t); current_inferior ()->unpush_target (t);
} }
/* See record.h. */ /* See record.h. */

View File

@ -699,7 +699,7 @@ gdbsim_target_open (const char *args, int from_tty)
operation until after we complete those operations which could operation until after we complete those operations which could
error out. */ error out. */
if (gdbsim_is_open) if (gdbsim_is_open)
unpush_target (&gdbsim_ops); current_inferior ()->unpush_target (&gdbsim_ops);
len = (7 + 1 /* gdbsim */ len = (7 + 1 /* gdbsim */
+ strlen (" -E little") + strlen (" -E little")
@ -834,7 +834,7 @@ gdbsim_target::detach (inferior *inf, int from_tty)
if (remote_debug) if (remote_debug)
fprintf_unfiltered (gdb_stdlog, "gdbsim_detach\n"); 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) if (from_tty)
printf_filtered ("Ending simulator %s debugging\n", target_shortname); printf_filtered ("Ending simulator %s debugging\n", target_shortname);
} }

View File

@ -387,7 +387,7 @@ sol_thread_target::detach (inferior *inf, int from_tty)
sol_thread_active = 0; sol_thread_active = 0;
inferior_ptid = ptid_t (main_ph.ptid.pid ()); inferior_ptid = ptid_t (main_ph.ptid.pid ());
unpush_target (this); inf->unpush_target (this);
beneath->detach (inf, from_tty); beneath->detach (inf, from_tty);
} }
@ -681,7 +681,7 @@ sol_thread_target::mourn_inferior ()
sol_thread_active = 0; sol_thread_active = 0;
unpush_target (this); current_inferior ()->unpush_target (this);
beneath->mourn_inferior (); beneath->mourn_inferior ();
} }

View File

@ -160,7 +160,7 @@ set_targetdebug (const char *args, int from_tty, struct cmd_list_element *c)
if (targetdebug) if (targetdebug)
push_target (the_debug_target); push_target (the_debug_target);
else else
unpush_target (the_debug_target); current_inferior ()->unpush_target (the_debug_target);
} }
static void static void
@ -589,14 +589,6 @@ push_target (target_ops_up &&t)
/* See target.h. */ /* See target.h. */
int
unpush_target (struct target_ops *t)
{
return current_inferior ()->unpush_target (t);
}
/* See target.h. */
bool bool
target_stack::unpush (target_ops *t) target_stack::unpush (target_ops *t)
{ {
@ -640,7 +632,7 @@ target_stack::unpush (target_ops *t)
static void static void
unpush_target_and_assert (struct target_ops *target) unpush_target_and_assert (struct target_ops *target)
{ {
if (!unpush_target (target)) if (!current_inferior ()->unpush_target (target))
{ {
fprintf_unfiltered (gdb_stderr, fprintf_unfiltered (gdb_stderr,
"pop_all_targets couldn't find target %s\n", "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); 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. */ /* Default implementation of to_get_thread_local_address. */
static void static void

View File

@ -2390,16 +2390,11 @@ extern void push_target (struct target_ops *);
/* An overload that deletes the target on failure. */ /* An overload that deletes the target on failure. */
extern void push_target (target_ops_up &&); extern void push_target (target_ops_up &&);
extern int unpush_target (struct target_ops *);
/* A unique_ptr helper to unpush a target. */ /* A unique_ptr helper to unpush a target. */
struct target_unpusher struct target_unpusher
{ {
void operator() (struct target_ops *ops) const void operator() (struct target_ops *ops) const;
{
unpush_target (ops);
}
}; };
/* A unique_ptr that unpushes a target on destruction. */ /* A unique_ptr that unpushes a target on destruction. */

View File

@ -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. */ /* 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_filename = filename.release ();
trace_fd = scratch_chan; trace_fd = scratch_chan;
@ -551,7 +551,7 @@ tfile_target_open (const char *arg, int from_tty)
catch (const gdb_exception &ex) catch (const gdb_exception &ex)
{ {
/* Remove the partially set up target. */ /* Remove the partially set up target. */
unpush_target (&tfile_ops); current_inferior ()->unpush_target (&tfile_ops);
throw; throw;
} }