Eliminate find_target_beneath

Call target_ops::beneath() throughout instead.

gdb/ChangeLog:
2018-06-07  Pedro Alves  <palves@redhat.com>

	* target.h (find_target_beneath): Delete declaration.
	* target.c (find_target_beneath): Delete definition.
	* aix-thread.c: All callers of find_target_beneath adjusted to
	call target_ops::beneath instead.
	* bsd-uthread.c: Likewise.
	* linux-thread-db.c: Likewise.
	* ravenscar-thread.c: Likewise.
	* sol-thread.c: Likewise.
	* spu-multiarch.c: Likewise.
This commit is contained in:
Pedro Alves 2018-06-07 17:27:47 +01:00
parent b6a8c27bb8
commit d6ca69cddc
9 changed files with 69 additions and 128 deletions

View File

@ -1,3 +1,15 @@
2018-06-07 Pedro Alves <palves@redhat.com>
* target.h (find_target_beneath): Delete declaration.
* target.c (find_target_beneath): Delete definition.
* aix-thread.c: All callers of find_target_beneath adjusted to
call target_ops::beneath instead.
* bsd-uthread.c: Likewise.
* linux-thread-db.c: Likewise.
* ravenscar-thread.c: Likewise.
* sol-thread.c: Likewise.
* spu-multiarch.c: Likewise.
2018-06-07 Pedro Alves <palves@redhat.com> 2018-06-07 Pedro Alves <palves@redhat.com>
* target.h (target_ops) <beneath>: Now a method. All references * target.h (target_ops) <beneath>: Now a method. All references

View File

@ -1023,7 +1023,7 @@ aix_thread_inferior_created (struct target_ops *ops, int from_tty)
void void
aix_thread_target::detach (inferior *inf, int from_tty) aix_thread_target::detach (inferior *inf, int from_tty)
{ {
struct target_ops *beneath = find_target_beneath (this); target_ops *beneath = this->beneath ();
pd_disable (); pd_disable ();
beneath->detach (inf, from_tty); beneath->detach (inf, from_tty);
@ -1041,10 +1041,9 @@ aix_thread_target::resume (ptid_t ptid, int step, enum gdb_signal sig)
if (!PD_TID (ptid)) if (!PD_TID (ptid))
{ {
scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
struct target_ops *beneath = find_target_beneath (this);
inferior_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid)); inferior_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
beneath->resume (ptid, step, sig); beneath ()->resume (ptid, step, sig);
} }
else else
{ {
@ -1078,15 +1077,13 @@ ptid_t
aix_thread_target::wait (ptid_t ptid, struct target_waitstatus *status, aix_thread_target::wait (ptid_t ptid, struct target_waitstatus *status,
int options) int options)
{ {
struct target_ops *beneath = find_target_beneath (this);
{ {
scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
pid_to_prc (&ptid); pid_to_prc (&ptid);
inferior_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid)); inferior_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
ptid = beneath->wait (ptid, status, options); ptid = beneath ()->wait (ptid, status, options);
} }
if (ptid_get_pid (ptid) == -1) if (ptid_get_pid (ptid) == -1)
@ -1358,10 +1355,9 @@ aix_thread_target::fetch_registers (struct regcache *regcache, int regno)
{ {
struct thread_info *thread; struct thread_info *thread;
pthdb_tid_t tid; pthdb_tid_t tid;
struct target_ops *beneath = find_target_beneath (this);
if (!PD_TID (regcache->ptid ())) if (!PD_TID (regcache->ptid ()))
beneath->fetch_registers (regcache, regno); beneath ()->fetch_registers (regcache, regno);
else else
{ {
thread = find_thread_ptid (regcache->ptid ()); thread = find_thread_ptid (regcache->ptid ());
@ -1699,10 +1695,9 @@ aix_thread_target::store_registers (struct regcache *regcache, int regno)
{ {
struct thread_info *thread; struct thread_info *thread;
pthdb_tid_t tid; pthdb_tid_t tid;
struct target_ops *beneath = find_target_beneath (this);
if (!PD_TID (regcache->ptid ())) if (!PD_TID (regcache->ptid ()))
beneath->store_registers (regcache, regno); beneath ()->store_registers (regcache, regno);
else else
{ {
thread = find_thread_ptid (regcache->ptid ()); thread = find_thread_ptid (regcache->ptid ());
@ -1726,11 +1721,10 @@ aix_thread_target::xfer_partial (enum target_object object,
ULONGEST *xfered_len) ULONGEST *xfered_len)
{ {
scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
struct target_ops *beneath = find_target_beneath (this);
inferior_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid)); inferior_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
return beneath->xfer_partial (object, annex, readbuf, return beneath ()->xfer_partial (object, annex, readbuf,
writebuf, offset, len, xfered_len); writebuf, offset, len, xfered_len);
} }
/* Clean up after the inferior exits. */ /* Clean up after the inferior exits. */
@ -1738,7 +1732,7 @@ aix_thread_target::xfer_partial (enum target_object object,
void void
aix_thread_target::mourn_inferior () aix_thread_target::mourn_inferior ()
{ {
struct target_ops *beneath = find_target_beneath (this); target_ops *beneath = beneath ();
pd_deactivate (); pd_deactivate ();
beneath->mourn_inferior (); beneath->mourn_inferior ();
@ -1749,10 +1743,8 @@ aix_thread_target::mourn_inferior ()
bool bool
aix_thread_target::thread_alive (ptid_t ptid) aix_thread_target::thread_alive (ptid_t ptid)
{ {
struct target_ops *beneath = find_target_beneath (this);
if (!PD_TID (ptid)) if (!PD_TID (ptid))
return beneath->thread_alive (ptid); return beneath ()->thread_alive (ptid);
/* We update the thread list every time the child stops, so all /* We update the thread list every time the child stops, so all
valid threads should be in the thread list. */ valid threads should be in the thread list. */
@ -1766,10 +1758,9 @@ const char *
aix_thread_target::pid_to_str (ptid_t ptid) aix_thread_target::pid_to_str (ptid_t ptid)
{ {
static char *ret = NULL; static char *ret = NULL;
struct target_ops *beneath = find_target_beneath (this);
if (!PD_TID (ptid)) if (!PD_TID (ptid))
return beneath->pid_to_str (ptid); return beneath ()->pid_to_str (ptid);
/* Free previous return value; a new one will be allocated by /* Free previous return value; a new one will be allocated by
xstrprintf(). */ xstrprintf(). */

View File

@ -310,8 +310,7 @@ bsd_uthread_solib_unloaded (struct so_list *so)
void void
bsd_uthread_target::mourn_inferior () bsd_uthread_target::mourn_inferior ()
{ {
struct target_ops *beneath = find_target_beneath (this); beneath ()->mourn_inferior ();
beneath->mourn_inferior ();
bsd_uthread_deactivate (); bsd_uthread_deactivate ();
} }
@ -323,7 +322,6 @@ bsd_uthread_target::fetch_registers (struct regcache *regcache, int regnum)
= (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data); = (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data);
ptid_t ptid = regcache->ptid (); ptid_t ptid = regcache->ptid ();
CORE_ADDR addr = ptid_get_tid (ptid); CORE_ADDR addr = ptid_get_tid (ptid);
struct target_ops *beneath = find_target_beneath (this);
CORE_ADDR active_addr; CORE_ADDR active_addr;
scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
@ -332,7 +330,7 @@ bsd_uthread_target::fetch_registers (struct regcache *regcache, int regnum)
inferior_ptid = ptid; inferior_ptid = ptid;
/* Always fetch the appropriate registers from the layer beneath. */ /* Always fetch the appropriate registers from the layer beneath. */
beneath->fetch_registers (regcache, regnum); beneath ()->fetch_registers (regcache, regnum);
/* FIXME: That might have gotten us more than we asked for. Make /* FIXME: That might have gotten us more than we asked for. Make
sure we overwrite all relevant registers with values from the sure we overwrite all relevant registers with values from the
@ -354,7 +352,6 @@ bsd_uthread_target::store_registers (struct regcache *regcache, int regnum)
struct gdbarch *gdbarch = regcache->arch (); struct gdbarch *gdbarch = regcache->arch ();
struct bsd_uthread_ops *uthread_ops struct bsd_uthread_ops *uthread_ops
= (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data); = (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data);
struct target_ops *beneath = find_target_beneath (this);
ptid_t ptid = regcache->ptid (); ptid_t ptid = regcache->ptid ();
CORE_ADDR addr = ptid_get_tid (ptid); CORE_ADDR addr = ptid_get_tid (ptid);
CORE_ADDR active_addr; CORE_ADDR active_addr;
@ -375,7 +372,7 @@ bsd_uthread_target::store_registers (struct regcache *regcache, int regnum)
{ {
/* Updating the thread that is currently running; pass the /* Updating the thread that is currently running; pass the
request to the layer beneath. */ request to the layer beneath. */
beneath->store_registers (regcache, regnum); beneath ()->store_registers (regcache, regnum);
} }
} }
@ -385,10 +382,9 @@ bsd_uthread_target::wait (ptid_t ptid, struct target_waitstatus *status,
{ {
enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
CORE_ADDR addr; CORE_ADDR addr;
struct target_ops *beneath = find_target_beneath (this);
/* Pass the request to the layer beneath. */ /* Pass the request to the layer beneath. */
ptid = beneath->wait (ptid, status, options); ptid = beneath ()->wait (ptid, status, options);
/* If the process is no longer alive, there's no point in figuring /* If the process is no longer alive, there's no point in figuring
out the thread ID. It will fail anyway. */ out the thread ID. It will fail anyway. */
@ -433,15 +429,13 @@ void
bsd_uthread_target::resume (ptid_t ptid, int step, enum gdb_signal sig) bsd_uthread_target::resume (ptid_t ptid, int step, enum gdb_signal sig)
{ {
/* Pass the request to the layer beneath. */ /* Pass the request to the layer beneath. */
struct target_ops *beneath = find_target_beneath (this); beneath ()->resume (ptid, step, sig);
beneath->resume (ptid, step, sig);
} }
bool bool
bsd_uthread_target::thread_alive (ptid_t ptid) bsd_uthread_target::thread_alive (ptid_t ptid)
{ {
enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
struct target_ops *beneath = find_target_beneath (this);
CORE_ADDR addr = ptid_get_tid (ptid); CORE_ADDR addr = ptid_get_tid (ptid);
if (addr != 0) if (addr != 0)
@ -456,7 +450,7 @@ bsd_uthread_target::thread_alive (ptid_t ptid)
return false; return false;
} }
return beneath->thread_alive (ptid); return beneath ()->thread_alive (ptid);
} }
void void

View File

@ -1094,11 +1094,9 @@ record_thread (struct thread_db_info *info,
void void
thread_db_target::detach (inferior *inf, int from_tty) thread_db_target::detach (inferior *inf, int from_tty)
{ {
struct target_ops *target_beneath = find_target_beneath (this);
delete_thread_db_info (inf->pid); delete_thread_db_info (inf->pid);
target_beneath->detach (inf, from_tty); beneath ()->detach (inf, from_tty);
/* NOTE: From this point on, inferior_ptid is null_ptid. */ /* NOTE: From this point on, inferior_ptid is null_ptid. */
@ -1113,9 +1111,8 @@ thread_db_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
int options) int options)
{ {
struct thread_db_info *info; struct thread_db_info *info;
struct target_ops *beneath = find_target_beneath (this);
ptid = beneath->wait (ptid, ourstatus, options); ptid = beneath ()->wait (ptid, ourstatus, options);
switch (ourstatus->kind) switch (ourstatus->kind)
{ {
@ -1152,11 +1149,9 @@ thread_db_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
void void
thread_db_target::mourn_inferior () thread_db_target::mourn_inferior ()
{ {
struct target_ops *target_beneath = find_target_beneath (this);
delete_thread_db_info (ptid_get_pid (inferior_ptid)); delete_thread_db_info (ptid_get_pid (inferior_ptid));
target_beneath->mourn_inferior (); beneath ()->mourn_inferior ();
/* Detach thread_db target ops. */ /* Detach thread_db target ops. */
if (!thread_db_list) if (!thread_db_list)
@ -1376,7 +1371,6 @@ const char *
thread_db_target::pid_to_str (ptid_t ptid) thread_db_target::pid_to_str (ptid_t ptid)
{ {
struct thread_info *thread_info = find_thread_ptid (ptid); struct thread_info *thread_info = find_thread_ptid (ptid);
struct target_ops *beneath;
if (thread_info != NULL && thread_info->priv != NULL) if (thread_info != NULL && thread_info->priv != NULL)
{ {
@ -1389,8 +1383,7 @@ thread_db_target::pid_to_str (ptid_t ptid)
return buf; return buf;
} }
beneath = find_target_beneath (this); return beneath ()->pid_to_str (ptid);
return beneath->pid_to_str (ptid);
} }
/* Return a string describing the state of the thread specified by /* Return a string describing the state of the thread specified by
@ -1451,7 +1444,6 @@ thread_db_target::get_thread_local_address (ptid_t ptid,
CORE_ADDR offset) CORE_ADDR offset)
{ {
struct thread_info *thread_info; struct thread_info *thread_info;
struct target_ops *beneath;
/* Find the matching thread. */ /* Find the matching thread. */
thread_info = find_thread_ptid (ptid); thread_info = find_thread_ptid (ptid);
@ -1523,8 +1515,7 @@ thread_db_target::get_thread_local_address (ptid_t ptid,
: (CORE_ADDR) (uintptr_t) address); : (CORE_ADDR) (uintptr_t) address);
} }
beneath = find_target_beneath (this); return beneath ()->get_thread_local_address (ptid, lm, offset);
return beneath->get_thread_local_address (ptid, lm, offset);
} }
/* Implement the to_get_ada_task_ptid target method for this target. */ /* Implement the to_get_ada_task_ptid target method for this target. */
@ -1539,7 +1530,6 @@ thread_db_target::get_ada_task_ptid (long lwp, long thread)
void void
thread_db_target::resume (ptid_t ptid, int step, enum gdb_signal signo) thread_db_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
{ {
struct target_ops *beneath = find_target_beneath (this);
struct thread_db_info *info; struct thread_db_info *info;
if (ptid_equal (ptid, minus_one_ptid)) if (ptid_equal (ptid, minus_one_ptid))
@ -1553,7 +1543,7 @@ thread_db_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
if (info) if (info)
info->need_stale_parent_threads_check = 0; info->need_stale_parent_threads_check = 0;
beneath->resume (ptid, step, signo); beneath ()->resume (ptid, step, signo);
} }
/* std::sort helper function for info_auto_load_libthread_db, sort the /* std::sort helper function for info_auto_load_libthread_db, sort the

View File

@ -323,10 +323,8 @@ get_running_thread_id (int cpu)
void void
ravenscar_thread_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal) ravenscar_thread_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal)
{ {
struct target_ops *beneath = find_target_beneath (this);
inferior_ptid = base_ptid; inferior_ptid = base_ptid;
beneath->resume (base_ptid, step, siggnal); beneath ()->resume (base_ptid, step, siggnal);
} }
ptid_t ptid_t
@ -334,11 +332,10 @@ ravenscar_thread_target::wait (ptid_t ptid,
struct target_waitstatus *status, struct target_waitstatus *status,
int options) int options)
{ {
struct target_ops *beneath = find_target_beneath (this);
ptid_t event_ptid; ptid_t event_ptid;
inferior_ptid = base_ptid; inferior_ptid = base_ptid;
event_ptid = beneath->wait (base_ptid, status, 0); event_ptid = beneath ()->wait (base_ptid, status, 0);
/* Find any new threads that might have been created, and update /* Find any new threads that might have been created, and update
inferior_ptid to the active thread. inferior_ptid to the active thread.
@ -415,7 +412,6 @@ ravenscar_thread_target::pid_to_str (ptid_t ptid)
void void
ravenscar_thread_target::fetch_registers (struct regcache *regcache, int regnum) ravenscar_thread_target::fetch_registers (struct regcache *regcache, int regnum)
{ {
struct target_ops *beneath = find_target_beneath (this);
ptid_t ptid = regcache->ptid (); ptid_t ptid = regcache->ptid ();
if (ravenscar_runtime_initialized () if (ravenscar_runtime_initialized ()
@ -429,14 +425,13 @@ ravenscar_thread_target::fetch_registers (struct regcache *regcache, int regnum)
arch_ops->to_fetch_registers (regcache, regnum); arch_ops->to_fetch_registers (regcache, regnum);
} }
else else
beneath->fetch_registers (regcache, regnum); beneath ()->fetch_registers (regcache, regnum);
} }
void void
ravenscar_thread_target::store_registers (struct regcache *regcache, ravenscar_thread_target::store_registers (struct regcache *regcache,
int regnum) int regnum)
{ {
target_ops *beneath = find_target_beneath (this);
ptid_t ptid = regcache->ptid (); ptid_t ptid = regcache->ptid ();
if (ravenscar_runtime_initialized () if (ravenscar_runtime_initialized ()
@ -447,16 +442,15 @@ ravenscar_thread_target::store_registers (struct regcache *regcache,
struct ravenscar_arch_ops *arch_ops struct ravenscar_arch_ops *arch_ops
= gdbarch_ravenscar_ops (gdbarch); = gdbarch_ravenscar_ops (gdbarch);
beneath->store_registers (regcache, regnum); beneath ()->store_registers (regcache, regnum);
} }
else else
beneath->store_registers (regcache, regnum); beneath ()->store_registers (regcache, regnum);
} }
void void
ravenscar_thread_target::prepare_to_store (struct regcache *regcache) ravenscar_thread_target::prepare_to_store (struct regcache *regcache)
{ {
target_ops *beneath = find_target_beneath (this);
ptid_t ptid = regcache->ptid (); ptid_t ptid = regcache->ptid ();
if (ravenscar_runtime_initialized () if (ravenscar_runtime_initialized ()
@ -467,10 +461,10 @@ ravenscar_thread_target::prepare_to_store (struct regcache *regcache)
struct ravenscar_arch_ops *arch_ops struct ravenscar_arch_ops *arch_ops
= gdbarch_ravenscar_ops (gdbarch); = gdbarch_ravenscar_ops (gdbarch);
beneath->prepare_to_store (regcache); beneath ()->prepare_to_store (regcache);
} }
else else
beneath->prepare_to_store (regcache); beneath ()->prepare_to_store (regcache);
} }
/* Implement the to_stopped_by_sw_breakpoint target_ops "method". */ /* Implement the to_stopped_by_sw_breakpoint target_ops "method". */
@ -479,11 +473,10 @@ bool
ravenscar_thread_target::stopped_by_sw_breakpoint () ravenscar_thread_target::stopped_by_sw_breakpoint ()
{ {
ptid_t saved_ptid = inferior_ptid; ptid_t saved_ptid = inferior_ptid;
struct target_ops *beneath = find_target_beneath (this);
bool result; bool result;
inferior_ptid = get_base_thread_from_ravenscar_task (saved_ptid); inferior_ptid = get_base_thread_from_ravenscar_task (saved_ptid);
result = beneath->stopped_by_sw_breakpoint (); result = beneath ()->stopped_by_sw_breakpoint ();
inferior_ptid = saved_ptid; inferior_ptid = saved_ptid;
return result; return result;
} }
@ -494,11 +487,10 @@ bool
ravenscar_thread_target::stopped_by_hw_breakpoint () ravenscar_thread_target::stopped_by_hw_breakpoint ()
{ {
ptid_t saved_ptid = inferior_ptid; ptid_t saved_ptid = inferior_ptid;
struct target_ops *beneath = find_target_beneath (this);
bool result; bool result;
inferior_ptid = get_base_thread_from_ravenscar_task (saved_ptid); inferior_ptid = get_base_thread_from_ravenscar_task (saved_ptid);
result = beneath->stopped_by_hw_breakpoint (); result = beneath ()->stopped_by_hw_breakpoint ();
inferior_ptid = saved_ptid; inferior_ptid = saved_ptid;
return result; return result;
} }
@ -509,11 +501,10 @@ bool
ravenscar_thread_target::stopped_by_watchpoint () ravenscar_thread_target::stopped_by_watchpoint ()
{ {
ptid_t saved_ptid = inferior_ptid; ptid_t saved_ptid = inferior_ptid;
struct target_ops *beneath = find_target_beneath (this);
bool result; bool result;
inferior_ptid = get_base_thread_from_ravenscar_task (saved_ptid); inferior_ptid = get_base_thread_from_ravenscar_task (saved_ptid);
result = beneath->stopped_by_watchpoint (); result = beneath ()->stopped_by_watchpoint ();
inferior_ptid = saved_ptid; inferior_ptid = saved_ptid;
return result; return result;
} }
@ -524,11 +515,10 @@ bool
ravenscar_thread_target::stopped_data_address (CORE_ADDR *addr_p) ravenscar_thread_target::stopped_data_address (CORE_ADDR *addr_p)
{ {
ptid_t saved_ptid = inferior_ptid; ptid_t saved_ptid = inferior_ptid;
struct target_ops *beneath = find_target_beneath (this);
bool result; bool result;
inferior_ptid = get_base_thread_from_ravenscar_task (saved_ptid); inferior_ptid = get_base_thread_from_ravenscar_task (saved_ptid);
result = beneath->stopped_data_address (addr_p); result = beneath ()->stopped_data_address (addr_p);
inferior_ptid = saved_ptid; inferior_ptid = saved_ptid;
return result; return result;
} }
@ -536,10 +526,8 @@ ravenscar_thread_target::stopped_data_address (CORE_ADDR *addr_p)
void void
ravenscar_thread_target::mourn_inferior () ravenscar_thread_target::mourn_inferior ()
{ {
struct target_ops *beneath = find_target_beneath (this);
base_ptid = null_ptid; base_ptid = null_ptid;
beneath->mourn_inferior (); beneath ()->mourn_inferior ();
unpush_target (&ravenscar_ops); unpush_target (&ravenscar_ops);
} }
@ -549,11 +537,10 @@ int
ravenscar_thread_target::core_of_thread (ptid_t ptid) ravenscar_thread_target::core_of_thread (ptid_t ptid)
{ {
ptid_t saved_ptid = inferior_ptid; ptid_t saved_ptid = inferior_ptid;
struct target_ops *beneath = find_target_beneath (this);
int result; int result;
inferior_ptid = get_base_thread_from_ravenscar_task (saved_ptid); inferior_ptid = get_base_thread_from_ravenscar_task (saved_ptid);
result = beneath->core_of_thread (inferior_ptid); result = beneath ()->core_of_thread (inferior_ptid);
inferior_ptid = saved_ptid; inferior_ptid = saved_ptid;
return result; return result;
} }

View File

@ -384,7 +384,7 @@ lwp_to_thread (ptid_t lwp)
void void
sol_thread_target::detach (inferior *inf, int from_tty) sol_thread_target::detach (inferior *inf, int from_tty)
{ {
struct target_ops *beneath = find_target_beneath (this); target_ops *beneath = this->beneath ();
sol_thread_active = 0; sol_thread_active = 0;
inferior_ptid = pid_to_ptid (ptid_get_pid (main_ph.ptid)); inferior_ptid = pid_to_ptid (ptid_get_pid (main_ph.ptid));
@ -400,8 +400,6 @@ sol_thread_target::detach (inferior *inf, int from_tty)
void void
sol_thread_target::resume (ptid_t ptid, int step, enum gdb_signal signo) sol_thread_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
{ {
struct target_ops *beneath = find_target_beneath (this);
scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
inferior_ptid = thread_to_lwp (inferior_ptid, ptid_get_pid (main_ph.ptid)); inferior_ptid = thread_to_lwp (inferior_ptid, ptid_get_pid (main_ph.ptid));
@ -420,7 +418,7 @@ sol_thread_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
ptid_get_tid (save_ptid)); ptid_get_tid (save_ptid));
} }
beneath->resume (ptid, step, signo); beneath ()->resume (ptid, step, signo);
} }
/* Wait for any threads to stop. We may have to convert PTID from a /* Wait for any threads to stop. We may have to convert PTID from a
@ -432,7 +430,6 @@ sol_thread_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
{ {
ptid_t rtnval; ptid_t rtnval;
ptid_t save_ptid; ptid_t save_ptid;
struct target_ops *beneath = find_target_beneath (this);
save_ptid = inferior_ptid; save_ptid = inferior_ptid;
scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
@ -453,7 +450,7 @@ sol_thread_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
ptid_get_tid (save_ptid)); ptid_get_tid (save_ptid));
} }
rtnval = beneath->wait (ptid, ourstatus, options); rtnval = beneath ()->wait (ptid, ourstatus, options);
if (ourstatus->kind != TARGET_WAITKIND_EXITED) if (ourstatus->kind != TARGET_WAITKIND_EXITED)
{ {
@ -487,13 +484,12 @@ sol_thread_target::fetch_registers (struct regcache *regcache, int regnum)
prfpregset_t fpregset; prfpregset_t fpregset;
gdb_gregset_t *gregset_p = &gregset; gdb_gregset_t *gregset_p = &gregset;
gdb_fpregset_t *fpregset_p = &fpregset; gdb_fpregset_t *fpregset_p = &fpregset;
struct target_ops *beneath = find_target_beneath (this);
ptid_t ptid = regcache->ptid (); ptid_t ptid = regcache->ptid ();
if (!ptid_tid_p (ptid)) if (!ptid_tid_p (ptid))
{ {
/* It's an LWP; pass the request on to the layer beneath. */ /* It's an LWP; pass the request on to the layer beneath. */
beneath->fetch_registers (regcache, regnum); beneath ()->fetch_registers (regcache, regnum);
return; return;
} }
@ -544,10 +540,8 @@ sol_thread_target::store_registers (struct regcache *regcache, int regnum)
if (!ptid_tid_p (ptid)) if (!ptid_tid_p (ptid))
{ {
struct target_ops *beneath = find_target_beneath (this);
/* It's an LWP; pass the request on to the layer beneath. */ /* It's an LWP; pass the request on to the layer beneath. */
beneath->store_registers (regcache, regnum); beneath ()->store_registers (regcache, regnum);
return; return;
} }
@ -595,8 +589,6 @@ sol_thread_target::xfer_partial (enum target_object object,
ULONGEST offset, ULONGEST len, ULONGEST offset, ULONGEST len,
ULONGEST *xfered_len) ULONGEST *xfered_len)
{ {
struct target_ops *beneath = find_target_beneath (this);
scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
if (ptid_tid_p (inferior_ptid) || !target_thread_alive (inferior_ptid)) if (ptid_tid_p (inferior_ptid) || !target_thread_alive (inferior_ptid))
@ -609,8 +601,8 @@ sol_thread_target::xfer_partial (enum target_object object,
inferior_ptid = procfs_first_available (); inferior_ptid = procfs_first_available ();
} }
return beneath->xfer_partial (object, annex, readbuf, return beneath ()->xfer_partial (object, annex, readbuf,
writebuf, offset, len, xfered_len); writebuf, offset, len, xfered_len);
} }
static void static void
@ -691,7 +683,7 @@ sol_thread_new_objfile (struct objfile *objfile)
void void
sol_thread_target::mourn_inferior () sol_thread_target::mourn_inferior ()
{ {
struct target_ops *beneath = find_target_beneath (this); target_ops *beneath = this->beneath ();
sol_thread_active = 0; sol_thread_active = 0;
@ -721,10 +713,8 @@ sol_thread_target::thread_alive (ptid_t ptid)
} }
else else
{ {
struct target_ops *beneath = find_target_beneath (this);
/* It's an LPW; pass the request on to the layer below. */ /* It's an LPW; pass the request on to the layer below. */
return beneath->thread_alive (ptid); return beneath ()->thread_alive (ptid);
} }
} }
@ -1062,13 +1052,11 @@ sol_update_thread_list_callback (const td_thrhandle_t *th, void *ignored)
void void
sol_thread_target::update_thread_list () sol_thread_target::update_thread_list ()
{ {
struct target_ops *beneath = find_target_beneath (this);
/* Delete dead threads. */ /* Delete dead threads. */
prune_threads (); prune_threads ();
/* Find any new LWP's. */ /* Find any new LWP's. */
beneath->update_thread_list (); beneath ()->update_thread_list ();
/* Then find any new user-level threads. */ /* Then find any new user-level threads. */
p_td_ta_thr_iter (main_ta, sol_update_thread_list_callback, (void *) 0, p_td_ta_thr_iter (main_ta, sol_update_thread_list_callback, (void *) 0,

View File

@ -157,8 +157,7 @@ spu_multiarch_target::thread_architecture (ptid_t ptid)
if (parse_spufs_run (ptid, &spufs_fd, &spufs_addr)) if (parse_spufs_run (ptid, &spufs_fd, &spufs_addr))
return spu_gdbarch (spufs_fd); return spu_gdbarch (spufs_fd);
target_ops *beneath = find_target_beneath (this); return beneath ()->thread_architecture (ptid);
return beneath->thread_architecture (ptid);
} }
/* Override the to_region_ok_for_hw_watchpoint routine. */ /* Override the to_region_ok_for_hw_watchpoint routine. */
@ -166,13 +165,11 @@ spu_multiarch_target::thread_architecture (ptid_t ptid)
int int
spu_multiarch_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len) spu_multiarch_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
{ {
struct target_ops *ops_beneath = find_target_beneath (this);
/* We cannot watch SPU local store. */ /* We cannot watch SPU local store. */
if (SPUADDR_SPU (addr) != -1) if (SPUADDR_SPU (addr) != -1)
return 0; return 0;
return ops_beneath->region_ok_for_hw_watchpoint (addr, len); return beneath ()->region_ok_for_hw_watchpoint (addr, len);
} }
/* Override the to_fetch_registers routine. */ /* Override the to_fetch_registers routine. */
@ -182,7 +179,6 @@ spu_multiarch_target::fetch_registers (struct regcache *regcache, int regno)
{ {
struct gdbarch *gdbarch = regcache->arch (); struct gdbarch *gdbarch = regcache->arch ();
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
struct target_ops *ops_beneath = find_target_beneath (this);
int spufs_fd; int spufs_fd;
CORE_ADDR spufs_addr; CORE_ADDR spufs_addr;
@ -194,7 +190,7 @@ spu_multiarch_target::fetch_registers (struct regcache *regcache, int regno)
/* This version applies only if we're currently in spu_run. */ /* This version applies only if we're currently in spu_run. */
if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu) if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
{ {
ops_beneath->fetch_registers (regcache, regno); beneath ()->fetch_registers (regcache, regno);
return; return;
} }
@ -215,7 +211,7 @@ spu_multiarch_target::fetch_registers (struct regcache *regcache, int regno)
{ {
gdb_byte buf[4]; gdb_byte buf[4];
if (target_read (ops_beneath, TARGET_OBJECT_MEMORY, NULL, if (target_read (beneath (), TARGET_OBJECT_MEMORY, NULL,
buf, spufs_addr, sizeof buf) == sizeof buf) buf, spufs_addr, sizeof buf) == sizeof buf)
regcache->raw_supply (SPU_PC_REGNUM, buf); regcache->raw_supply (SPU_PC_REGNUM, buf);
} }
@ -228,7 +224,7 @@ spu_multiarch_target::fetch_registers (struct regcache *regcache, int regno)
int i; int i;
xsnprintf (annex, sizeof annex, "%d/regs", spufs_fd); xsnprintf (annex, sizeof annex, "%d/regs", spufs_fd);
if (target_read (ops_beneath, TARGET_OBJECT_SPU, annex, if (target_read (beneath (), TARGET_OBJECT_SPU, annex,
buf, 0, sizeof buf) == sizeof buf) buf, 0, sizeof buf) == sizeof buf)
for (i = 0; i < SPU_NUM_GPRS; i++) for (i = 0; i < SPU_NUM_GPRS; i++)
regcache->raw_supply (i, buf + i*16); regcache->raw_supply (i, buf + i*16);
@ -241,7 +237,6 @@ void
spu_multiarch_target::store_registers (struct regcache *regcache, int regno) spu_multiarch_target::store_registers (struct regcache *regcache, int regno)
{ {
struct gdbarch *gdbarch = regcache->arch (); struct gdbarch *gdbarch = regcache->arch ();
struct target_ops *ops_beneath = find_target_beneath (this);
int spufs_fd; int spufs_fd;
CORE_ADDR spufs_addr; CORE_ADDR spufs_addr;
@ -253,7 +248,7 @@ spu_multiarch_target::store_registers (struct regcache *regcache, int regno)
/* This version applies only if we're currently in spu_run. */ /* This version applies only if we're currently in spu_run. */
if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu) if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
{ {
ops_beneath->store_registers (regcache, regno); beneath ()->store_registers (regcache, regno);
return; return;
} }
@ -267,7 +262,7 @@ spu_multiarch_target::store_registers (struct regcache *regcache, int regno)
gdb_byte buf[4]; gdb_byte buf[4];
regcache->raw_collect (SPU_PC_REGNUM, buf); regcache->raw_collect (SPU_PC_REGNUM, buf);
target_write (ops_beneath, TARGET_OBJECT_MEMORY, NULL, target_write (beneath (), TARGET_OBJECT_MEMORY, NULL,
buf, spufs_addr, sizeof buf); buf, spufs_addr, sizeof buf);
} }
@ -282,7 +277,7 @@ spu_multiarch_target::store_registers (struct regcache *regcache, int regno)
regcache->raw_collect (i, buf + i*16); regcache->raw_collect (i, buf + i*16);
xsnprintf (annex, sizeof annex, "%d/regs", spufs_fd); xsnprintf (annex, sizeof annex, "%d/regs", spufs_fd);
target_write (ops_beneath, TARGET_OBJECT_SPU, annex, target_write (beneath (), TARGET_OBJECT_SPU, annex,
buf, 0, sizeof buf); buf, 0, sizeof buf);
} }
} }
@ -295,7 +290,7 @@ spu_multiarch_target::xfer_partial (enum target_object object,
const gdb_byte *writebuf, ULONGEST offset, ULONGEST len, const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
ULONGEST *xfered_len) ULONGEST *xfered_len)
{ {
struct target_ops *ops_beneath = find_target_beneath (this); struct target_ops *ops_beneath = this->beneath ();
/* Use the "mem" spufs file to access SPU local store. */ /* Use the "mem" spufs file to access SPU local store. */
if (object == TARGET_OBJECT_MEMORY) if (object == TARGET_OBJECT_MEMORY)
@ -345,15 +340,13 @@ spu_multiarch_target::search_memory (CORE_ADDR start_addr, ULONGEST search_space
const gdb_byte *pattern, ULONGEST pattern_len, const gdb_byte *pattern, ULONGEST pattern_len,
CORE_ADDR *found_addrp) CORE_ADDR *found_addrp)
{ {
struct target_ops *ops_beneath = find_target_beneath (this);
/* For SPU local store, always fall back to the simple method. */ /* For SPU local store, always fall back to the simple method. */
if (SPUADDR_SPU (start_addr) >= 0) if (SPUADDR_SPU (start_addr) >= 0)
return simple_search_memory (this, start_addr, search_space_len, return simple_search_memory (this, start_addr, search_space_len,
pattern, pattern_len, found_addrp); pattern, pattern_len, found_addrp);
return ops_beneath->search_memory (start_addr, search_space_len, return beneath ()->search_memory (start_addr, search_space_len,
pattern, pattern_len, found_addrp); pattern, pattern_len, found_addrp);
} }
@ -410,9 +403,7 @@ spu_multiarch_solib_unloaded (struct so_list *so)
void void
spu_multiarch_target::mourn_inferior () spu_multiarch_target::mourn_inferior ()
{ {
struct target_ops *ops_beneath = find_target_beneath (this); beneath ()->mourn_inferior ();
ops_beneath->mourn_inferior ();
spu_multiarch_deactivate (); spu_multiarch_deactivate ();
} }

View File

@ -3211,16 +3211,6 @@ default_thread_architecture (struct target_ops *ops, ptid_t ptid)
return inf->gdbarch; return inf->gdbarch;
} }
/*
* Find the next target down the stack from the specified target.
*/
struct target_ops *
find_target_beneath (struct target_ops *t)
{
return t->beneath ();
}
/* See target.h. */ /* See target.h. */
struct target_ops * struct target_ops *

View File

@ -2377,8 +2377,6 @@ extern void noprocess (void) ATTRIBUTE_NORETURN;
extern void target_require_runnable (void); extern void target_require_runnable (void);
extern struct target_ops *find_target_beneath (struct target_ops *);
/* Find the target at STRATUM. If no target is at that stratum, /* Find the target at STRATUM. If no target is at that stratum,
return NULL. */ return NULL. */