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:
parent
70e958370c
commit
fadf6add30
@ -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
|
||||||
|
@ -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.
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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 ();
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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. */
|
||||||
|
@ -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. */
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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 ();
|
||||||
}
|
}
|
||||||
|
18
gdb/target.c
18
gdb/target.c
@ -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
|
||||||
|
@ -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. */
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user