static CORE_ADDR td_death_bp_addr;
/* Prototypes for local functions. */
-static void thread_db_find_new_threads (void);
+static void thread_db_find_new_threads_1 (void);
static void attach_thread (ptid_t ptid, const td_thrhandle_t *th_p,
const td_thrinfo_t *ti_p);
static void detach_thread (ptid_t ptid);
thread_db_err_str (err));
/* Fill the cache. */
- thread_ptid = ptid_build (GET_PID (inferior_ptid), ti.ti_lid, 0);
+ thread_ptid = ptid_build (GET_PID (proc_handle.ptid), ti.ti_lid, 0);
thread_info = find_thread_pid (thread_ptid);
/* In the case of a zombie thread, don't continue. We don't want to
{
/* New thread. Attach to it now (why wait?). */
if (!have_threads ())
- thread_db_find_new_threads ();
+ thread_db_find_new_threads_1 ();
else
attach_thread (thread_ptid, thp, &ti);
thread_info = find_thread_pid (thread_ptid);
gdb_assert (GET_LWP (ptid) != 0);
/* Access an lwp we know is stopped. */
- proc_handle.pid = GET_LWP (ptid);
+ proc_handle.ptid = ptid;
err = td_ta_map_lwp2thr_p (thread_agent, GET_LWP (ptid), &th);
if (err != TD_OK)
error (_("Cannot find user-level thread for LWP %ld: %s"),
gdb_assert (GET_LWP (ptid) != 0);
/* Access an lwp we know is stopped. */
- proc_handle.pid = GET_LWP (ptid);
+ proc_handle.ptid = ptid;
/* If we have only looked at the first thread before libpthread was
initialized, we may not know its thread ID yet. Make sure we do
before we add another thread to the list. */
if (!have_threads ())
- thread_db_find_new_threads ();
+ thread_db_find_new_threads_1 ();
err = td_ta_map_lwp2thr_p (thread_agent, GET_LWP (ptid), &th);
if (err != TD_OK)
td_err_e err;
/* Access an lwp we know is stopped. */
- proc_handle.pid = GET_LWP (inferior_ptid);
+ proc_handle.ptid = inferior_ptid;
/* Get the breakpoint address for thread EVENT. */
err = td_ta_event_addr_p (thread_agent, event, ¬ify);
return;
/* Initialize the structure that identifies the child process. */
- proc_handle.pid = GET_PID (inferior_ptid);
+ proc_handle.ptid = inferior_ptid;
/* Now attempt to open a connection to the thread library. */
err = td_ta_new_p (&proc_handle, &thread_agent);
using_thread_db = 1;
enable_thread_event_reporting ();
- thread_db_find_new_threads ();
+ thread_db_find_new_threads_1 ();
break;
default:
/* Forget about the child's process ID. We shouldn't need it
anymore. */
- proc_handle.pid = 0;
+ proc_handle.ptid = null_ptid;
/* Detach thread_db target ops. */
unpush_target (&thread_db_ops);
return;
/* Access an lwp we know is stopped. */
- proc_handle.pid = GET_LWP (ptid);
+ proc_handle.ptid = ptid;
/* If we have only looked at the first thread before libpthread was
initialized, we may not know its thread ID yet. Make sure we do
before we add another thread to the list. */
if (!have_threads ())
- thread_db_find_new_threads ();
+ thread_db_find_new_threads_1 ();
/* If we are at a create breakpoint, we do not know what new lwp
was created and cannot specifically locate the event message for it.
/* If we do not know about the main thread yet, this would be a good time to
find it. */
if (ourstatus->kind == TARGET_WAITKIND_STOPPED && !have_threads ())
- thread_db_find_new_threads ();
+ thread_db_find_new_threads_1 ();
if (ourstatus->kind == TARGET_WAITKIND_STOPPED
&& ourstatus->value.sig == TARGET_SIGNAL_TRAP)
/* Forget about the child's process ID. We shouldn't need it
anymore. */
- proc_handle.pid = 0;
+ proc_handle.ptid = null_ptid;
target_beneath->to_mourn_inferior (target_beneath);
if (ti.ti_state == TD_THR_UNKNOWN || ti.ti_state == TD_THR_ZOMBIE)
return 0; /* A zombie -- ignore. */
- ptid = ptid_build (GET_PID (inferior_ptid), ti.ti_lid, 0);
+ ptid = ptid_build (GET_PID (proc_handle.ptid), ti.ti_lid, 0);
if (ti.ti_tid == 0)
{
PTID. */
static void
-thread_db_find_new_threads (void)
+thread_db_find_new_threads_1 (void)
{
td_err_e err;
struct lwp_info *lp;
return;
/* Access an lwp we know is stopped. */
- proc_handle.pid = GET_LWP (ptid);
+ proc_handle.ptid = ptid;
/* Iterate over all user-space threads to discover new threads. */
err = td_ta_thr_iter_p (thread_agent, find_new_threads_callback, NULL,
TD_THR_ANY_STATE, TD_THR_LOWEST_PRIORITY,
error (_("Cannot find new threads: %s"), thread_db_err_str (err));
}
+static void
+thread_db_find_new_threads (struct target_ops *ops)
+{
+ thread_db_find_new_threads_1 ();
+}
+
static char *
thread_db_pid_to_str (struct target_ops *ops, ptid_t ptid)
{
/* If we have not discovered any threads yet, check now. */
if (!have_threads ())
- thread_db_find_new_threads ();
+ thread_db_find_new_threads_1 ();
/* Find the matching thread. */
thread_info = find_thread_pid (ptid);
{
struct thread_info *thread_info;
- thread_db_find_new_threads ();
+ thread_db_find_new_threads_1 ();
thread_info = iterate_over_threads (thread_db_find_thread_from_tid, &thread);
gdb_assert (thread_info != NULL);
thread_db_ops.to_magic = OPS_MAGIC;
}
+/* Provide a prototype to silence -Wmissing-prototypes. */
+extern initialize_file_ftype _initialize_thread_db;
+
void
_initialize_thread_db (void)
{