#include "bsd-uthread.h"
+static const target_info bsd_uthread_target_info = {
+ "bsd-uthreads",
+ N_("BSD user-level threads"),
+ N_("BSD user-level threads")
+};
+
struct bsd_uthread_target final : public target_ops
{
bsd_uthread_target ()
{ to_stratum = thread_stratum; }
- const char *shortname () override
- { return "bsd-uthreads"; }
-
- const char *longname () override
- { return _("BSD user-level threads"); }
-
- const char *doc () override
- { return _("BSD user-level threads"); }
+ const target_info &info () const override
+ { return bsd_uthread_target_info; }
void close () override;
void
bsd_uthread_target::mourn_inferior ()
{
- struct target_ops *beneath = find_target_beneath (this);
- beneath->mourn_inferior ();
+ beneath ()->mourn_inferior ();
bsd_uthread_deactivate ();
}
struct gdbarch *gdbarch = regcache->arch ();
struct bsd_uthread_ops *uthread_ops
= (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data);
- ptid_t ptid = regcache_get_ptid (regcache);
+ ptid_t ptid = regcache->ptid ();
CORE_ADDR addr = ptid_get_tid (ptid);
- struct target_ops *beneath = find_target_beneath (this);
CORE_ADDR active_addr;
scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
inferior_ptid = ptid;
/* 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
sure we overwrite all relevant registers with values from the
struct gdbarch *gdbarch = regcache->arch ();
struct bsd_uthread_ops *uthread_ops
= (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data);
- struct target_ops *beneath = find_target_beneath (this);
- ptid_t ptid = regcache_get_ptid (regcache);
+ ptid_t ptid = regcache->ptid ();
CORE_ADDR addr = ptid_get_tid (ptid);
CORE_ADDR active_addr;
scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
{
/* Updating the thread that is currently running; pass the
request to the layer beneath. */
- beneath->store_registers (regcache, regnum);
+ beneath ()->store_registers (regcache, regnum);
}
}
{
enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
CORE_ADDR addr;
- struct target_ops *beneath = find_target_beneath (this);
/* 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
out the thread ID. It will fail anyway. */
{
ULONGEST magic = extract_unsigned_integer (buf, 4, byte_order);
if (magic == BSD_UTHREAD_PTHREAD_MAGIC)
- ptid = ptid_build (ptid_get_pid (ptid), 0, addr);
+ ptid = ptid_t (ptid_get_pid (ptid), 0, addr);
}
}
thread_change_ptid (inferior_ptid, ptid);
/* Don't let the core see a ptid without a corresponding thread. */
- if (!in_thread_list (ptid) || is_exited (ptid))
+ thread_info *thread = find_thread_ptid (ptid);
+ if (thread == NULL || thread->state == THREAD_EXITED)
add_thread (ptid);
return ptid;
bsd_uthread_target::resume (ptid_t ptid, int step, enum gdb_signal sig)
{
/* 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
bsd_uthread_target::thread_alive (ptid_t ptid)
{
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);
if (addr != 0)
return false;
}
- return beneath->thread_alive (ptid);
+ return beneath ()->thread_alive (ptid);
}
void
addr = bsd_uthread_read_memory_address (bsd_uthread_thread_list_addr);
while (addr != 0)
{
- ptid_t ptid = ptid_build (pid, 0, addr);
+ ptid_t ptid = ptid_t (pid, 0, addr);
- if (!in_thread_list (ptid) || is_exited (ptid))
+ thread_info *thread = find_thread_ptid (ptid);
+ if (thread == nullptr || thread->state == THREAD_EXITED)
{
/* If INFERIOR_PTID doesn't have a tid member yet, then ptid
is still the initial thread of the process. Notify GDB