aboutsummaryrefslogtreecommitdiff
path: root/gdb/lin-thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/lin-thread.c')
-rw-r--r--gdb/lin-thread.c237
1 files changed, 121 insertions, 116 deletions
diff --git a/gdb/lin-thread.c b/gdb/lin-thread.c
index 8c303fd..495fb43 100644
--- a/gdb/lin-thread.c
+++ b/gdb/lin-thread.c
@@ -127,11 +127,12 @@
#ifndef TIDGET
#define TIDGET(PID) (((PID) & 0x7fffffff) >> 16)
-#define PIDGET(PID) (((PID) & 0xffff))
+#define PIDGET0(PID) (((PID) & 0xffff))
+#define PIDGET(PID) ((PIDGET0 (PID) == 0xffff) ? -1 : PIDGET0 (PID))
#define MERGEPID(PID, TID) (((PID) & 0xffff) | ((TID) << 16))
#endif
-/* Macros for superimposing PID and TID into inferior_pid. */
+/* Macros for superimposing PID and TID into inferior_ptid. */
#define THREAD_FLAG 0x80000000
#define is_thread(ARG) (((ARG) & THREAD_FLAG) != 0)
#define is_lwp(ARG) (((ARG) & THREAD_FLAG) == 0)
@@ -303,8 +304,8 @@ ps_ptwrite (gdb_ps_prochandle_t ph, /* write to text segment */
return rw_common (ph, addr, (char *) buf, size, PS_WRITE);
}
-static struct cleanup *save_inferior_pid (void);
-static void restore_inferior_pid (void *saved_pid);
+static struct cleanup *save_inferior_ptid (void);
+static void restore_inferior_ptid (void *saved_pid);
static char *thr_err_string (td_err_e);
static char *thr_state_string (td_thr_state_e);
@@ -315,10 +316,9 @@ td_thragent_t * main_threadagent;
* Common proc_service routine for reading and writing memory.
*/
-/* FIXME: once we've munged the inferior_pid, why can't we
+/* FIXME: once we've munged the inferior_ptid, why can't we
simply call target_read/write_memory and return? */
-
static ps_err_e
rw_common (const struct ps_prochandle *ph,
paddr_t addr,
@@ -326,11 +326,11 @@ rw_common (const struct ps_prochandle *ph,
int size,
int write_p)
{
- struct cleanup *old_chain = save_inferior_pid ();
+ struct cleanup *old_chain = save_inferior_ptid ();
int to_do = size;
int done = 0;
- inferior_pid = main_prochandle.pid;
+ inferior_ptid = pid_to_ptid (main_prochandle.pid);
while (to_do > 0)
{
@@ -353,19 +353,19 @@ rw_common (const struct ps_prochandle *ph,
}
/* Cleanup functions used by the register callbacks
- (which have to manipulate the global inferior_pid). */
+ (which have to manipulate the global inferior_ptid). */
ps_err_e
ps_lgetregs (gdb_ps_prochandle_t ph, /* Get LWP general regs */
lwpid_t lwpid,
prgregset_t gregset)
{
- struct cleanup *old_chain = save_inferior_pid ();
+ struct cleanup *old_chain = save_inferior_ptid ();
- inferior_pid = BUILD_LWP (lwpid, main_prochandle.pid);
+ inferior_ptid = BUILD_LWP (lwpid, main_prochandle.pid);
current_target.to_fetch_registers (-1);
- fill_gregset (gregset, -1);
+ fill_gregset ((gdb_gregset_t *) gregset, -1);
do_cleanups (old_chain);
return PS_OK;
@@ -376,10 +376,10 @@ ps_lsetregs (gdb_ps_prochandle_t ph, /* Set LWP general regs */
lwpid_t lwpid,
const prgregset_t gregset)
{
- struct cleanup *old_chain = save_inferior_pid ();
+ struct cleanup *old_chain = save_inferior_ptid ();
- inferior_pid = BUILD_LWP (lwpid, main_prochandle.pid);
- supply_gregset (gregset);
+ inferior_ptid = BUILD_LWP (lwpid, main_prochandle.pid);
+ supply_gregset ((gdb_gregset_t *) gregset);
current_target.to_store_registers (-1);
do_cleanups (old_chain);
return PS_OK;
@@ -390,9 +390,9 @@ ps_lgetfpregs (gdb_ps_prochandle_t ph, /* Get LWP float regs */
lwpid_t lwpid,
gdb_prfpregset_t *fpregset)
{
- struct cleanup *old_chain = save_inferior_pid ();
+ struct cleanup *old_chain = save_inferior_ptid ();
- inferior_pid = BUILD_LWP (lwpid, main_prochandle.pid);
+ inferior_ptid = BUILD_LWP (lwpid, main_prochandle.pid);
current_target.to_fetch_registers (-1);
fill_fpregset (fpregset, -1);
do_cleanups (old_chain);
@@ -404,9 +404,9 @@ ps_lsetfpregs (gdb_ps_prochandle_t ph, /* Set LWP float regs */
lwpid_t lwpid,
const gdb_prfpregset_t *fpregset)
{
- struct cleanup *old_chain = save_inferior_pid ();
+ struct cleanup *old_chain = save_inferior_ptid ();
- inferior_pid = BUILD_LWP (lwpid, main_prochandle.pid);
+ inferior_ptid = BUILD_LWP (lwpid, main_prochandle.pid);
supply_fpregset (fpregset);
current_target.to_store_registers (-1);
do_cleanups (old_chain);
@@ -628,44 +628,44 @@ init_thread_db_library (void)
LOCAL FUNCTION
- save_inferior_pid - Save inferior_pid on the cleanup list
- restore_inferior_pid - Restore inferior_pid from the cleanup list
+ save_inferior_ptid - Save inferior_ptid on the cleanup list
+ restore_inferior_ptid - Restore inferior_ptid from the cleanup list
SYNOPSIS
- struct cleanup *save_inferior_pid (void);
- void restore_inferior_pid (void *saved_pid);
+ struct cleanup *save_inferior_ptid (void);
+ void restore_inferior_ptid (void *saved_pid);
DESCRIPTION
- These two functions act in unison to restore inferior_pid in
+ These two functions act in unison to restore inferior_ptid in
case of an error.
NOTES
- inferior_pid is a global variable that needs to be changed by many
+ inferior_ptid is a global variable that needs to be changed by many
of these routines before calling functions in procfs.c. In order
- to guarantee that inferior_pid gets restored (in case of errors),
- you need to call save_inferior_pid before changing it. At the end
+ to guarantee that inferior_ptid gets restored (in case of errors),
+ you need to call save_inferior_ptid before changing it. At the end
of the function, you should invoke do_cleanups to restore it.
*/
static struct cleanup *
-save_inferior_pid (void)
+save_inferior_ptid (void)
{
- int *saved_pid_ptr;
+ ptid_t *saved_ptid_ptr;
- saved_pid_ptr = xmalloc (sizeof (int));
- *saved_pid_ptr = inferior_pid;
- return make_cleanup (restore_inferior_pid, saved_pid_ptr);
+ saved_ptid_ptr = xmalloc (sizeof (ptid_t));
+ *saved_ptid_ptr = inferior_ptid;
+ return make_cleanup (restore_inferior_ptid, saved_ptid_ptr);
}
static void
-restore_inferior_pid (void *arg)
+restore_inferior_ptid (void *arg)
{
- int *saved_pid_ptr = arg;
- inferior_pid = *saved_pid_ptr;
+ ptid_t *saved_ptid_ptr = arg;
+ inferior_ptid = *saved_ptid_ptr;
xfree (arg);
}
@@ -920,10 +920,10 @@ enable_thread_event_reporting (td_thragent_t *ta)
}
/* Set up the breakpoint. */
- create_thread_event_breakpoint (notify.u.bptaddr);
+ create_thread_event_breakpoint ((CORE_ADDR) notify.u.bptaddr);
/* Save it's location. */
- thread_creation_bkpt_address = notify.u.bptaddr;
+ thread_creation_bkpt_address = (CORE_ADDR) notify.u.bptaddr;
/* thread death */
/* get breakpoint location */
@@ -933,10 +933,10 @@ enable_thread_event_reporting (td_thragent_t *ta)
return;
}
/* Set up the breakpoint. */
- create_thread_event_breakpoint (notify.u.bptaddr);
+ create_thread_event_breakpoint ((CORE_ADDR) notify.u.bptaddr);
/* Save it's location. */
- thread_death_bkpt_address = notify.u.bptaddr;
+ thread_death_bkpt_address = (CORE_ADDR) notify.u.bptaddr;
}
/* This function handles the global parts of disabling thread events.
@@ -969,6 +969,7 @@ check_for_thread_event (struct target_waitstatus *tws, int event_pid)
{
/* FIXME: to be more efficient, we should keep a static
list of threads, and update it only here (with td_ta_thr_iter). */
+ return 0;
}
static void
@@ -1044,7 +1045,7 @@ thread_db_new_objfile (struct objfile *objfile)
goto quit; /* un-interesting object file */
/* Initialize our "main prochandle" with the main inferior pid. */
- main_prochandle.pid = PIDGET (inferior_pid);
+ main_prochandle.pid = PIDGET (inferior_ptid);
/* Now attempt to open a thread_db connection to the
thread library running in the child process. */
@@ -1058,7 +1059,7 @@ thread_db_new_objfile (struct objfile *objfile)
break;
case TD_OK: /* libthread detected in child: we go live now! */
thread_db_push_target ();
- event_pid = inferior_pid; /* for resume */
+ event_pid = PIDGET (inferior_ptid); /* for resume */
/* Now stop everyone else, and attach any new threads you find. */
p_td_ta_thr_iter (main_threadagent,
@@ -1105,14 +1106,14 @@ quit:
*/
static int
-thread_db_alive (int pid)
+thread_db_alive (ptid_t ptid)
{
- if (is_thread (pid)) /* user-space (non-kernel) thread */
+ if (is_thread (ptid)) /* user-space (non-kernel) thread */
{
td_thrhandle_t th;
td_err_e ret;
+ int pid = GET_THREAD (ptid);
- pid = GET_THREAD (pid);
if ((ret = p_td_ta_map_id2thr (main_threadagent, pid, &th)) != TD_OK)
return 0; /* thread not found */
if ((ret = p_td_thr_validate (&th)) != TD_OK)
@@ -1120,7 +1121,7 @@ thread_db_alive (int pid)
return 1; /* known thread: return true */
}
else if (target_beneath->to_thread_alive)
- return target_beneath->to_thread_alive (pid);
+ return target_beneath->to_thread_alive (ptid);
else
return 0; /* default to "not alive" (shouldn't happen anyway) */
}
@@ -1166,17 +1167,17 @@ get_lwp_from_thread_id (int tid /* thread_t? */)
*/
static char *
-thread_db_pid_to_str (int pid)
+thread_db_pid_to_str (ptid_t ptid)
{
static char buf[100];
td_thrhandle_t th;
td_thrinfo_t ti;
td_err_e ret;
- if (is_thread (pid))
+ if (is_thread (ptid))
{
if ((ret = p_td_ta_map_id2thr (main_threadagent,
- GET_THREAD (pid),
+ GET_THREAD (ptid),
&th)) != TD_OK)
error ("thread_db: map_id2thr failed: %s", thr_err_string (ret));
@@ -1185,14 +1186,14 @@ thread_db_pid_to_str (int pid)
if (ti.ti_state == TD_THR_ACTIVE &&
ti.ti_lid != 0)
- sprintf (buf, "Thread %d (LWP %d)", ti.ti_tid, ti.ti_lid);
+ sprintf (buf, "Thread %ld (LWP %d)", ti.ti_tid, ti.ti_lid);
else
- sprintf (buf, "Thread %d (%s)", ti.ti_tid,
+ sprintf (buf, "Thread %ld (%s)", ti.ti_tid,
thr_state_string (ti.ti_state));
}
- else if (GET_LWP (pid))
- sprintf (buf, "LWP %d", GET_LWP (pid));
- else return normal_pid_to_str (pid);
+ else if (GET_LWP (ptid))
+ sprintf (buf, "LWP %ld", GET_LWP (ptid));
+ else return normal_pid_to_str (ptid);
return buf;
}
@@ -1210,7 +1211,7 @@ thread_db_files_info (struct target_ops *tgt_vector)
}
/*
- * xfer_memory has to munge the inferior_pid before passing the call
+ * xfer_memory has to munge the inferior_ptid before passing the call
* down to the target layer.
*/
@@ -1222,14 +1223,14 @@ thread_db_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int dowrite,
struct cleanup *old_chain;
int ret;
- old_chain = save_inferior_pid ();
+ old_chain = save_inferior_ptid ();
- if (is_thread (inferior_pid) ||
- !target_thread_alive (inferior_pid))
+ if (is_thread (inferior_ptid) ||
+ !target_thread_alive (inferior_ptid))
{
/* FIXME: use the LID/LWP, so that underlying process layer
can read memory from specific threads? */
- inferior_pid = main_prochandle.pid;
+ inferior_ptid = pid_to_ptid (main_prochandle.pid);
}
ret = target_beneath->to_xfer_memory (memaddr, myaddr, len,
@@ -1239,7 +1240,7 @@ thread_db_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int dowrite,
}
/*
- * fetch_registers has to determine if inferior_pid is a user-space thread.
+ * fetch_registers has to determine if inferior_ptid is a user-space thread.
* If so, we use the thread_db API to get the registers.
* And if not, we call the underlying process stratum.
*/
@@ -1253,15 +1254,15 @@ thread_db_fetch_registers (int regno)
thread_t thread;
td_err_e ret;
- if (!is_thread (inferior_pid)) /* kernel thread */
+ if (!is_thread (inferior_ptid)) /* kernel thread */
{ /* pass the request on to the target underneath. */
target_beneath->to_fetch_registers (regno);
return;
}
- /* convert inferior_pid into a td_thrhandle_t */
+ /* convert inferior_ptid into a td_thrhandle_t */
- if ((thread = GET_THREAD (inferior_pid)) == 0)
+ if ((thread = GET_THREAD (inferior_ptid)) == 0)
error ("fetch_registers: thread == 0");
if ((ret = p_td_ta_map_id2thr (main_threadagent, thread, &thandle)) != TD_OK)
@@ -1283,13 +1284,13 @@ thread_db_fetch_registers (int regno)
because the td routines call ps_lget* which affect the values stored in the
registers array. */
- supply_gregset (gregset);
+ supply_gregset ((gdb_gregset_t *) gregset);
supply_fpregset (&fpregset);
}
/*
- * store_registers has to determine if inferior_pid is a user-space thread.
+ * store_registers has to determine if inferior_ptid is a user-space thread.
* If so, we use the thread_db API to get the registers.
* And if not, we call the underlying process stratum.
*/
@@ -1303,15 +1304,15 @@ thread_db_store_registers (int regno)
thread_t thread;
td_err_e ret;
- if (!is_thread (inferior_pid)) /* Kernel thread: */
+ if (!is_thread (inferior_ptid)) /* Kernel thread: */
{ /* pass the request on to the underlying target vector. */
target_beneath->to_store_registers (regno);
return;
}
- /* convert inferior_pid into a td_thrhandle_t */
+ /* convert inferior_ptid into a td_thrhandle_t */
- if ((thread = GET_THREAD (inferior_pid)) == 0)
+ if ((thread = GET_THREAD (inferior_ptid)) == 0)
error ("store_registers: thread == 0");
if ((ret = p_td_ta_map_id2thr (main_threadagent, thread, &thandle)) != TD_OK)
@@ -1335,7 +1336,7 @@ thread_db_store_registers (int regno)
}
- fill_gregset (gregset, regno);
+ fill_gregset ((gdb_gregset_t *) gregset, regno);
fill_fpregset (&fpregset, regno);
if ((ret = p_td_thr_setgregs (&thandle, gregset)) != TD_OK)
@@ -1350,12 +1351,12 @@ handle_new_thread (int tid, /* user thread id */
int lid, /* kernel thread id */
int verbose)
{
- int gdb_pid = BUILD_THREAD (tid, main_prochandle.pid);
+ ptid_t gdb_ptid = BUILD_THREAD (tid, main_prochandle.pid);
int wait_pid, wait_status;
if (verbose)
- printf_filtered ("[New %s]\n", target_pid_to_str (gdb_pid));
- add_thread (gdb_pid);
+ printf_filtered ("[New %s]\n", target_pid_to_str (gdb_ptid));
+ add_thread (gdb_ptid);
if (lid != main_prochandle.pid)
{
@@ -1408,7 +1409,7 @@ find_new_threads_callback (const td_thrhandle_t *th, void *ignored)
static void
thread_db_find_new_threads (void)
{
- if (inferior_pid == -1) /* FIXME: still necessary? */
+ if (PIDGET (inferior_ptid) == -1) /* FIXME: still necessary? */
{
printf_filtered ("No process.\n");
return;
@@ -1427,7 +1428,7 @@ thread_db_find_new_threads (void)
/*
* Resume all threads, or resume a single thread.
* If step is true, then single-step the appropriate thread
- * (or single-step inferior_pid, but continue everyone else).
+ * (or single-step inferior_ptid, but continue everyone else).
* If signo is true, then send that signal to at least one thread.
*/
@@ -1467,7 +1468,7 @@ resume_thread_callback (const td_thrhandle_t *th, void *data)
/* Unconditionally continue the thread with no signal.
Only the event thread will get a signal of any kind. */
- target_beneath->to_resume (ti.ti_lid, 0, 0);
+ target_beneath->to_resume (pid_to_ptid (ti.ti_lid), 0, 0);
}
return 0;
}
@@ -1480,7 +1481,7 @@ new_resume_thread_callback (threadinfo *thread, void *data)
{
/* Unconditionally continue the thread with no signal (for now). */
- target_beneath->to_resume (thread->lid, 0, 0);
+ target_beneath->to_resume (pid_to_ptid (thread->lid), 0, 0);
}
return 0;
}
@@ -1490,29 +1491,29 @@ static int last_resume_step;
static int last_resume_signo;
static void
-thread_db_resume (int pid, int step, enum target_signal signo)
+thread_db_resume (ptid_t ptid, int step, enum target_signal signo)
{
- last_resume_pid = pid;
+ last_resume_pid = PIDGET (ptid);
last_resume_step = step;
last_resume_signo = signo;
/* resuming a specific pid? */
- if (pid != -1)
+ if (PIDGET (ptid) != -1)
{
- if (is_thread (pid))
- pid = get_lwp_from_thread_id (GET_THREAD (pid));
- else if (GET_LWP (pid))
- pid = GET_LWP (pid);
+ if (is_thread (ptid))
+ ptid = pid_to_ptid (get_lwp_from_thread_id (GET_THREAD (ptid)));
+ else if (GET_LWP (ptid))
+ ptid = pid_to_ptid (GET_LWP (ptid));
}
/* Apparently the interpretation of 'pid' is dependent on 'step':
If step is true, then a specific pid means 'step only this pid'.
But if step is not true, then pid means 'continue ALL pids, but
give the signal only to this one'. */
- if (pid != -1 && step)
+ if (PIDGET (ptid) != -1 && step)
{
/* FIXME: is this gonna work in all circumstances? */
- target_beneath->to_resume (pid, step, signo);
+ target_beneath->to_resume (ptid, step, signo);
}
else
{
@@ -1529,11 +1530,11 @@ thread_db_resume (int pid, int step, enum target_signal signo)
/* now resume event thread, and if necessary also main thread. */
if (event_pid)
{
- target_beneath->to_resume (event_pid, step, signo);
+ target_beneath->to_resume (pid_to_ptid (event_pid), step, signo);
}
if (event_pid != main_prochandle.pid)
{
- target_beneath->to_resume (main_prochandle.pid, 0, 0);
+ target_beneath->to_resume (pid_to_ptid (main_prochandle.pid), 0, 0);
}
}
}
@@ -1546,7 +1547,7 @@ stop_or_attach_thread_callback (const td_thrhandle_t *th, void *data)
{
td_thrinfo_t ti;
td_err_e ret;
- int gdb_pid;
+ ptid_t gdb_ptid;
int on_off = 1;
if ((ret = p_td_thr_get_info (th, &ti)) != TD_OK)
@@ -1559,8 +1560,8 @@ stop_or_attach_thread_callback (const td_thrhandle_t *th, void *data)
We build this list anew at every wait event. */
insert_thread (ti.ti_tid, ti.ti_lid, ti.ti_state, ti.ti_type);
/* Now: if we've already seen it, stop it, else add it and attach it. */
- gdb_pid = BUILD_THREAD (ti.ti_tid, main_prochandle.pid);
- if (!in_thread_list (gdb_pid)) /* new thread */
+ gdb_ptid = BUILD_THREAD (ti.ti_tid, main_prochandle.pid);
+ if (!in_thread_list (gdb_ptid)) /* new thread */
{
handle_new_thread (ti.ti_tid, ti.ti_lid, 1);
/* Enable thread events */
@@ -1655,13 +1656,14 @@ wait_for_stop (int pid)
if (retpid != event_pid &&
signo == SIGTRAP &&
- breakpoint_inserted_here_p (read_pc_pid (retpid) -
+ breakpoint_inserted_here_p (read_pc_pid (pid_to_ptid (retpid)) -
DECR_PC_AFTER_BREAK))
{
/* Set the pc to before the trap and DO NOT re-send the signal */
if (DECR_PC_AFTER_BREAK)
- write_pc_pid (read_pc_pid (retpid) - DECR_PC_AFTER_BREAK,
- retpid);
+ write_pc_pid (read_pc_pid (pid_to_ptid (retpid))
+ - DECR_PC_AFTER_BREAK,
+ pid_to_ptid (retpid));
}
/* Since SIGINT gets forwarded to the entire process group
@@ -1676,7 +1678,7 @@ wait_for_stop (int pid)
{
wstatus [signo] = 1;
}
- child_resume (retpid, 0, TARGET_SIGNAL_0);
+ child_resume (pid_to_ptid (retpid), 0, TARGET_SIGNAL_0);
continue;
}
@@ -1732,14 +1734,15 @@ new_wait_thread_callback (threadinfo *thread, void *data)
* user-space thread.
*/
-static int
-thread_db_wait (int pid, struct target_waitstatus *ourstatus)
+static ptid_t
+thread_db_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
{
td_thrhandle_t thandle;
td_thrinfo_t ti;
td_err_e ret;
lwpid_t lwp;
int retpid;
+ ptid_t retptid;
int status;
int save_errno;
@@ -1753,10 +1756,10 @@ thread_db_wait (int pid, struct target_waitstatus *ourstatus)
/* FIXME: should I do the wait right here inline? */
#if 0
- if (pid == -1)
+ if (PIDGET (ptid) == -1)
lwp = -1;
else
- lwp = get_lwp_from_thread_id (GET_THREAD (pid));
+ lwp = get_lwp_from_thread_id (GET_THREAD (ptid));
#endif
@@ -1767,7 +1770,7 @@ thread_db_wait (int pid, struct target_waitstatus *ourstatus)
FIXME: do I have any killing to do?
Can I get this event mistakenly from a thread? */
if (ourstatus->kind == TARGET_WAITKIND_EXITED)
- return retpid;
+ return pid_to_ptid (retpid);
/* OK, we got an event of interest.
Go stop all threads and look for new ones.
@@ -1809,44 +1812,46 @@ thread_db_wait (int pid, struct target_waitstatus *ourstatus)
/* If the process layer does not furnish an lwp,
then perhaps the returned pid IS the lwp... */
- if ((lwp = GET_LWP (retpid)) == 0)
+#if 0 /* Always true (if it'd compile...) */
+ if ((lwp = GET_LWP (pid_to_ptid (retpid))) == 0)
+#endif
lwp = retpid;
if ((ret = p_td_ta_map_lwp2thr (main_threadagent, lwp, &thandle)) != TD_OK)
- return retpid; /* LWP is not mapped onto a user-space thread. */
+ return pid_to_ptid (retpid); /* LWP is not mapped onto a user-space thread. */
if ((ret = p_td_thr_validate (&thandle)) != TD_OK)
- return retpid; /* LWP is not mapped onto a valid thread. */
+ return pid_to_ptid (retpid); /* LWP is not mapped onto a valid thread. */
if ((ret = p_td_thr_get_info (&thandle, &ti)) != TD_OK)
{
warning ("thread_db: thr_get_info failed ('%s')", thr_err_string (ret));
- return retpid;
+ return pid_to_ptid (retpid);
}
- retpid = BUILD_THREAD (ti.ti_tid, main_prochandle.pid);
+ retptid = BUILD_THREAD (ti.ti_tid, main_prochandle.pid);
/* If this is a new user thread, notify GDB about it. */
- if (!in_thread_list (retpid))
+ if (!in_thread_list (retptid))
{
- printf_filtered ("[New %s]\n", target_pid_to_str (retpid));
- add_thread (retpid);
+ printf_filtered ("[New %s]\n", target_pid_to_str (retptid));
+ add_thread (retptid);
}
#if 0
/* Now detect if this is a thread creation/deletion event: */
check_for_thread_event (ourstatus, retpid);
#endif
- return retpid;
+ return retptid;
}
/*
* kill has to call the underlying kill.
- * FIXME: I'm not sure if it's necessary to check inferior_pid any more,
- * but we might need to fix inferior_pid up if it's a user thread.
+ * FIXME: I'm not sure if it's necessary to check inferior_ptid any more,
+ * but we might need to fix inferior_ptid up if it's a user thread.
*/
static int
-kill_thread_callback (td_thrhandle_t *th, void *data)
+kill_thread_callback (const td_thrhandle_t *th, void *data)
{
td_thrinfo_t ti;
td_err_e ret;
@@ -1874,7 +1879,7 @@ static void thread_db_kill (void)
/* Fixme:
For Linux, threads may need to be waited. */
- if (inferior_pid != 0)
+ if (! ptid_equal (inferior_ptid, null_ptid))
{
/* Go kill the children first. Save the main thread for last. */
p_td_ta_thr_iter (main_threadagent,
@@ -1891,7 +1896,7 @@ static void thread_db_kill (void)
detach would not work. */
disable_thread_event_reporting (main_threadagent);
- inferior_pid = main_prochandle.pid;
+ inferior_ptid = pid_to_ptid (main_prochandle.pid);
/*
* Since both procfs_kill and ptrace_kill call target_mourn,
@@ -1936,7 +1941,7 @@ static void thread_db_mourn_inferior (void)
*/
static int
-detach_thread_callback (td_thrhandle_t *th, void *data)
+detach_thread_callback (const td_thrhandle_t *th, void *data)
{
/* Called once per thread. */
td_thrinfo_t ti;
@@ -1969,8 +1974,8 @@ detach_thread_callback (td_thrhandle_t *th, void *data)
/* Now cancel any pending SIGTRAPS. FIXME! */
/* Call underlying detach method. FIXME just detach it. */
- old_chain = save_inferior_pid ();
- inferior_pid = ti.ti_lid;
+ old_chain = save_inferior_ptid ();
+ inferior_ptid = pid_to_ptid (ti.ti_lid);
detach (TARGET_SIGNAL_0);
do_cleanups (old_chain);
}
@@ -1999,7 +2004,7 @@ thread_db_detach (char *args, int from_tty)
thread_db_unpush_target ();
/* above call nullifies target_beneath, so don't use that! */
- inferior_pid = PIDGET (inferior_pid);
+ inferior_ptid = pid_to_ptid (PIDGET (inferior_ptid));
target_detach (args, from_tty);
}