static void sol_thread_resume (ptid_t ptid, int step, enum target_signal signo) { struct cleanup *old_chain; old_chain = save_inferior_ptid (); inferior_ptid = thread_to_lwp (inferior_ptid, PIDGET (main_ph.ptid)); if (PIDGET (inferior_ptid) == -1) inferior_ptid = procfs_first_available (); if (PIDGET (ptid) != -1) { ptid_t save_ptid = ptid; ptid = thread_to_lwp (ptid, -2); if (PIDGET (ptid) == -2) /* Inactive thread */ error ("This version of Solaris can't start inactive threads."); if (info_verbose && PIDGET (ptid) == -1) warning ("Specified thread %ld seems to have terminated", GET_THREAD (save_ptid)); } procfs_ops.to_resume (ptid, step, signo); do_cleanups (old_chain); }
static ptid_t sol_thread_wait (ptid_t ptid, struct target_waitstatus *ourstatus) { ptid_t rtnval; ptid_t save_ptid; struct cleanup *old_chain; save_ptid = inferior_ptid; old_chain = save_inferior_ptid (); inferior_ptid = thread_to_lwp (inferior_ptid, PIDGET (main_ph.ptid)); if (PIDGET (inferior_ptid) == -1) inferior_ptid = procfs_first_available (); if (PIDGET (ptid) != -1) { ptid_t save_ptid = ptid; ptid = thread_to_lwp (ptid, -2); if (PIDGET (ptid) == -2) /* Inactive thread */ error ("This version of Solaris can't start inactive threads."); if (info_verbose && PIDGET (ptid) == -1) warning ("Specified thread %ld seems to have terminated", GET_THREAD (save_ptid)); } rtnval = procfs_ops.to_wait (ptid, ourstatus); if (ourstatus->kind != TARGET_WAITKIND_EXITED) { /* Map the LWP of interest back to the appropriate thread ID */ rtnval = lwp_to_thread (rtnval); if (PIDGET (rtnval) == -1) rtnval = save_ptid; /* See if we have a new thread */ if (is_thread (rtnval) && !ptid_equal (rtnval, save_ptid) && !in_thread_list (rtnval)) { printf_filtered ("[New %s]\n", target_pid_to_str (rtnval)); add_thread (rtnval); } } /* During process initialization, we may get here without the thread package being initialized, since that can only happen after we've found the shared libs. */ do_cleanups (old_chain); return rtnval; }
static void hpux_thread_resume (ptid_t ptid, int step, enum target_signal signo) { struct cleanup *old_chain; old_chain = save_inferior_ptid (); ptid = main_ptid; inferior_ptid = main_ptid; #if 0 if (pid != -1) { pid = thread_to_lwp (pid, -2); if (pid == -2) /* Inactive thread */ error (_("This version of Solaris can't start inactive threads.")); } #endif deprecated_child_ops.to_resume (ptid, step, signo); cached_thread = 0; do_cleanups (old_chain); }
char * solaris_pid_to_str (ptid_t ptid) { static char buf[100]; /* in case init failed to resolve the libthread_db library */ if (!procfs_suppress_run) return procfs_pid_to_str (ptid); if (is_thread (ptid)) { ptid_t lwp; lwp = thread_to_lwp (ptid, -2); if (PIDGET (lwp) == -1) sprintf (buf, "Thread %ld (defunct)", GET_THREAD (ptid)); else if (PIDGET (lwp) != -2) sprintf (buf, "Thread %ld (LWP %ld)", GET_THREAD (ptid), GET_LWP (lwp)); else sprintf (buf, "Thread %ld ", GET_THREAD (ptid)); } else if (GET_LWP (ptid) != 0) sprintf (buf, "LWP %ld ", GET_LWP (ptid)); else sprintf (buf, "process %d ", PIDGET (ptid)); return buf; }