| Index: gdb/sol-thread.c
|
| diff --git a/gdb/sol-thread.c b/gdb/sol-thread.c
|
| index 3577b5affd0fa833fdb634221fbdb6039fe17011..b480b58df682127f835061618dc431736c08e00b 100644
|
| --- a/gdb/sol-thread.c
|
| +++ b/gdb/sol-thread.c
|
| @@ -1,6 +1,6 @@
|
| /* Solaris threads debugging interface.
|
|
|
| - Copyright (C) 1996-2005, 2007-2012 Free Software Foundation, Inc.
|
| + Copyright (C) 1996-2013 Free Software Foundation, Inc.
|
|
|
| This file is part of GDB.
|
|
|
| @@ -56,7 +56,7 @@
|
| #include "target.h"
|
| #include "inferior.h"
|
| #include <fcntl.h>
|
| -#include "gdb_stat.h"
|
| +#include <sys/stat.h>
|
| #include <dlfcn.h>
|
| #include "gdbcmd.h"
|
| #include "gdbcore.h"
|
| @@ -64,7 +64,7 @@
|
| #include "solib.h"
|
| #include "symfile.h"
|
| #include "observer.h"
|
| -#include "gdb_string.h"
|
| +#include <string.h>
|
| #include "procfs.h"
|
|
|
| struct target_ops sol_thread_ops;
|
| @@ -96,16 +96,6 @@ static void init_sol_thread_ops (void);
|
| /* Default definitions: These must be defined in tm.h if they are to
|
| be shared with a process module such as procfs. */
|
|
|
| -#define GET_PID(ptid) ptid_get_pid (ptid)
|
| -#define GET_LWP(ptid) ptid_get_lwp (ptid)
|
| -#define GET_THREAD(ptid) ptid_get_tid (ptid)
|
| -
|
| -#define is_lwp(ptid) (GET_LWP (ptid) != 0)
|
| -#define is_thread(ptid) (GET_THREAD (ptid) != 0)
|
| -
|
| -#define BUILD_LWP(lwp, pid) ptid_build (pid, lwp, 0)
|
| -#define BUILD_THREAD(tid, pid) ptid_build (pid, 0, tid)
|
| -
|
| /* Pointers to routines from libthread_db resolved by dlopen(). */
|
|
|
| static void (*p_td_log)(const int on_off);
|
| @@ -196,7 +186,8 @@ td_err_string (td_err_e errcode)
|
| if (td_err_table[i].num == errcode)
|
| return td_err_table[i].str;
|
|
|
| - sprintf (buf, "Unknown libthread_db error code: %d", errcode);
|
| + xsnprintf (buf, sizeof (buf), "Unknown libthread_db error code: %d",
|
| + errcode);
|
|
|
| return buf;
|
| }
|
| @@ -227,7 +218,8 @@ td_state_string (td_thr_state_e statecode)
|
| if (td_thr_state_table[i].num == statecode)
|
| return td_thr_state_table[i].str;
|
|
|
| - sprintf (buf, "Unknown libthread_db state code: %d", statecode);
|
| + xsnprintf (buf, sizeof (buf), "Unknown libthread_db state code: %d",
|
| + statecode);
|
|
|
| return buf;
|
| }
|
| @@ -246,12 +238,12 @@ thread_to_lwp (ptid_t thread_id, int default_lwp)
|
| td_thrhandle_t th;
|
| td_err_e val;
|
|
|
| - if (is_lwp (thread_id))
|
| + if (ptid_lwp_p (thread_id))
|
| return thread_id; /* It's already an LWP ID. */
|
|
|
| /* It's a thread. Convert to LWP. */
|
|
|
| - val = p_td_ta_map_id2thr (main_ta, GET_THREAD (thread_id), &th);
|
| + val = p_td_ta_map_id2thr (main_ta, ptid_get_tid (thread_id), &th);
|
| if (val == TD_NOTHR)
|
| return pid_to_ptid (-1); /* Thread must have terminated. */
|
| else if (val != TD_OK)
|
| @@ -271,7 +263,7 @@ thread_to_lwp (ptid_t thread_id, int default_lwp)
|
| td_state_string (ti.ti_state));
|
| }
|
|
|
| - return BUILD_LWP (ti.ti_lid, PIDGET (thread_id));
|
| + return ptid_build (ptid_get_pid (thread_id), ti.ti_lid, 0);
|
| }
|
|
|
| /* Convert an LWP ID into a POSIX or Solaris thread ID. If LWP_ID
|
| @@ -286,7 +278,7 @@ lwp_to_thread (ptid_t lwp)
|
| td_thrhandle_t th;
|
| td_err_e val;
|
|
|
| - if (is_thread (lwp))
|
| + if (ptid_tid_p (lwp))
|
| return lwp; /* It's already a thread ID. */
|
|
|
| /* It's an LWP. Convert it to a thread ID. */
|
| @@ -294,7 +286,7 @@ lwp_to_thread (ptid_t lwp)
|
| if (!target_thread_alive (lwp))
|
| return pid_to_ptid (-1); /* Must be a defunct LPW. */
|
|
|
| - val = p_td_ta_map_lwp2thr (main_ta, GET_LWP (lwp), &th);
|
| + val = p_td_ta_map_lwp2thr (main_ta, ptid_get_lwp (lwp), &th);
|
| if (val == TD_NOTHR)
|
| return pid_to_ptid (-1); /* Thread must have terminated. */
|
| else if (val != TD_OK)
|
| @@ -312,7 +304,7 @@ lwp_to_thread (ptid_t lwp)
|
| else if (val != TD_OK)
|
| error (_("lwp_to_thread: td_thr_get_info: %s."), td_err_string (val));
|
|
|
| - return BUILD_THREAD (ti.ti_tid, PIDGET (lwp));
|
| + return ptid_build (ptid_get_pid (lwp), 0 , ti.ti_tid);
|
| }
|
|
|
|
|
| @@ -328,12 +320,12 @@ lwp_to_thread (ptid_t lwp)
|
| program was started via the normal ptrace (PTRACE_TRACEME). */
|
|
|
| static void
|
| -sol_thread_detach (struct target_ops *ops, char *args, int from_tty)
|
| +sol_thread_detach (struct target_ops *ops, const char *args, int from_tty)
|
| {
|
| struct target_ops *beneath = find_target_beneath (ops);
|
|
|
| sol_thread_active = 0;
|
| - inferior_ptid = pid_to_ptid (PIDGET (main_ph.ptid));
|
| + inferior_ptid = pid_to_ptid (ptid_get_pid (main_ph.ptid));
|
| unpush_target (ops);
|
| beneath->to_detach (beneath, args, from_tty);
|
| }
|
| @@ -352,20 +344,20 @@ sol_thread_resume (struct target_ops *ops,
|
|
|
| old_chain = save_inferior_ptid ();
|
|
|
| - inferior_ptid = thread_to_lwp (inferior_ptid, PIDGET (main_ph.ptid));
|
| - if (PIDGET (inferior_ptid) == -1)
|
| + inferior_ptid = thread_to_lwp (inferior_ptid, ptid_get_pid (main_ph.ptid));
|
| + if (ptid_get_pid (inferior_ptid) == -1)
|
| inferior_ptid = procfs_first_available ();
|
|
|
| - if (PIDGET (ptid) != -1)
|
| + if (ptid_get_pid (ptid) != -1)
|
| {
|
| ptid_t save_ptid = ptid;
|
|
|
| ptid = thread_to_lwp (ptid, -2);
|
| - if (PIDGET (ptid) == -2) /* Inactive thread. */
|
| + if (ptid_get_pid (ptid) == -2) /* Inactive thread. */
|
| error (_("This version of Solaris can't start inactive threads."));
|
| - if (info_verbose && PIDGET (ptid) == -1)
|
| + if (info_verbose && ptid_get_pid (ptid) == -1)
|
| warning (_("Specified thread %ld seems to have terminated"),
|
| - GET_THREAD (save_ptid));
|
| + ptid_get_tid (save_ptid));
|
| }
|
|
|
| beneath->to_resume (beneath, ptid, step, signo);
|
| @@ -388,20 +380,20 @@ sol_thread_wait (struct target_ops *ops,
|
| 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 = thread_to_lwp (inferior_ptid, ptid_get_pid (main_ph.ptid));
|
| + if (ptid_get_pid (inferior_ptid) == -1)
|
| inferior_ptid = procfs_first_available ();
|
|
|
| - if (PIDGET (ptid) != -1)
|
| + if (ptid_get_pid (ptid) != -1)
|
| {
|
| ptid_t save_ptid = ptid;
|
|
|
| ptid = thread_to_lwp (ptid, -2);
|
| - if (PIDGET (ptid) == -2) /* Inactive thread. */
|
| + if (ptid_get_pid (ptid) == -2) /* Inactive thread. */
|
| error (_("This version of Solaris can't start inactive threads."));
|
| - if (info_verbose && PIDGET (ptid) == -1)
|
| + if (info_verbose && ptid_get_pid (ptid) == -1)
|
| warning (_("Specified thread %ld seems to have terminated"),
|
| - GET_THREAD (save_ptid));
|
| + ptid_get_tid (save_ptid));
|
| }
|
|
|
| rtnval = beneath->to_wait (beneath, ptid, ourstatus, options);
|
| @@ -410,11 +402,11 @@ sol_thread_wait (struct target_ops *ops,
|
| {
|
| /* Map the LWP of interest back to the appropriate thread ID. */
|
| rtnval = lwp_to_thread (rtnval);
|
| - if (PIDGET (rtnval) == -1)
|
| + if (ptid_get_pid (rtnval) == -1)
|
| rtnval = save_ptid;
|
|
|
| /* See if we have a new thread. */
|
| - if (is_thread (rtnval)
|
| + if (ptid_tid_p (rtnval)
|
| && !ptid_equal (rtnval, save_ptid)
|
| && (!in_thread_list (rtnval)
|
| || is_exited (rtnval)))
|
| @@ -443,12 +435,7 @@ sol_thread_fetch_registers (struct target_ops *ops,
|
| gdb_fpregset_t *fpregset_p = &fpregset;
|
| struct target_ops *beneath = find_target_beneath (ops);
|
|
|
| -#if 0
|
| - int xregsize;
|
| - caddr_t xregset;
|
| -#endif
|
| -
|
| - if (!is_thread (inferior_ptid))
|
| + if (!ptid_tid_p (inferior_ptid))
|
| {
|
| /* It's an LWP; pass the request on to the layer beneath. */
|
| beneath->to_fetch_registers (beneath, regcache, regnum);
|
| @@ -456,7 +443,7 @@ sol_thread_fetch_registers (struct target_ops *ops,
|
| }
|
|
|
| /* Solaris thread: convert INFERIOR_PTID into a td_thrhandle_t. */
|
| - thread = GET_THREAD (inferior_ptid);
|
| + thread = ptid_get_tid (inferior_ptid);
|
| if (thread == 0)
|
| error (_("sol_thread_fetch_registers: thread == 0"));
|
|
|
| @@ -488,23 +475,6 @@ sol_thread_fetch_registers (struct target_ops *ops,
|
|
|
| supply_gregset (regcache, (const gdb_gregset_t *) gregset_p);
|
| supply_fpregset (regcache, (const gdb_fpregset_t *) fpregset_p);
|
| -
|
| -#if 0
|
| - /* FIXME: libthread_db doesn't seem to handle this right. */
|
| - val = td_thr_getxregsize (&thandle, &xregsize);
|
| - if (val != TD_OK && val != TD_NOXREGS)
|
| - error (_("sol_thread_fetch_registers: td_thr_getxregsize %s"),
|
| - td_err_string (val));
|
| -
|
| - if (val == TD_OK)
|
| - {
|
| - xregset = alloca (xregsize);
|
| - val = td_thr_getxregs (&thandle, xregset);
|
| - if (val != TD_OK)
|
| - error (_("sol_thread_fetch_registers: td_thr_getxregs %s"),
|
| - td_err_string (val));
|
| - }
|
| -#endif
|
| }
|
|
|
| static void
|
| @@ -516,12 +486,8 @@ sol_thread_store_registers (struct target_ops *ops,
|
| td_err_e val;
|
| prgregset_t gregset;
|
| prfpregset_t fpregset;
|
| -#if 0
|
| - int xregsize;
|
| - caddr_t xregset;
|
| -#endif
|
|
|
| - if (!is_thread (inferior_ptid))
|
| + if (!ptid_tid_p (inferior_ptid))
|
| {
|
| struct target_ops *beneath = find_target_beneath (ops);
|
|
|
| @@ -531,7 +497,7 @@ sol_thread_store_registers (struct target_ops *ops,
|
| }
|
|
|
| /* Solaris thread: convert INFERIOR_PTID into a td_thrhandle_t. */
|
| - thread = GET_THREAD (inferior_ptid);
|
| + thread = ptid_get_tid (inferior_ptid);
|
|
|
| val = p_td_ta_map_id2thr (main_ta, thread, &thandle);
|
| if (val != TD_OK)
|
| @@ -557,23 +523,6 @@ sol_thread_store_registers (struct target_ops *ops,
|
|
|
| /* Restore new register value. */
|
| regcache_raw_supply (regcache, regnum, old_value);
|
| -
|
| -#if 0
|
| - /* FIXME: libthread_db doesn't seem to handle this right. */
|
| - val = td_thr_getxregsize (&thandle, &xregsize);
|
| - if (val != TD_OK && val != TD_NOXREGS)
|
| - error (_("sol_thread_store_registers: td_thr_getxregsize %s"),
|
| - td_err_string (val));
|
| -
|
| - if (val == TD_OK)
|
| - {
|
| - xregset = alloca (xregsize);
|
| - val = td_thr_getxregs (&thandle, xregset);
|
| - if (val != TD_OK)
|
| - error (_("sol_thread_store_registers: td_thr_getxregs %s"),
|
| - td_err_string (val));
|
| - }
|
| -#endif
|
| }
|
|
|
| fill_gregset (regcache, (gdb_gregset_t *) &gregset, regnum);
|
| @@ -587,17 +536,6 @@ sol_thread_store_registers (struct target_ops *ops,
|
| if (val != TD_OK)
|
| error (_("sol_thread_store_registers: td_thr_setfpregs %s"),
|
| td_err_string (val));
|
| -
|
| -#if 0
|
| - /* FIXME: libthread_db doesn't seem to handle this right. */
|
| - val = td_thr_getxregsize (&thandle, &xregsize);
|
| - if (val != TD_OK && val != TD_NOXREGS)
|
| - error (_("sol_thread_store_registers: td_thr_getxregsize %s"),
|
| - td_err_string (val));
|
| -
|
| - /* ??? Should probably do something about writing the xregs here,
|
| - but what are they? */
|
| -#endif
|
| }
|
|
|
| /* Perform partial transfers on OBJECT. See target_read_partial and
|
| @@ -616,7 +554,7 @@ sol_thread_xfer_partial (struct target_ops *ops, enum target_object object,
|
|
|
| old_chain = save_inferior_ptid ();
|
|
|
| - if (is_thread (inferior_ptid) || !target_thread_alive (inferior_ptid))
|
| + if (ptid_tid_p (inferior_ptid) || !target_thread_alive (inferior_ptid))
|
| {
|
| /* It's either a thread or an LWP that isn't alive. Any live
|
| LWP will do so use the first available.
|
| @@ -677,7 +615,7 @@ check_for_thread_db (void)
|
|
|
| main_ph.ptid = inferior_ptid; /* Save for xfer_memory. */
|
| ptid = lwp_to_thread (inferior_ptid);
|
| - if (PIDGET (ptid) != -1)
|
| + if (ptid_get_pid (ptid) != -1)
|
| inferior_ptid = ptid;
|
|
|
| target_find_new_threads ();
|
| @@ -722,14 +660,14 @@ sol_thread_mourn_inferior (struct target_ops *ops)
|
| static int
|
| sol_thread_alive (struct target_ops *ops, ptid_t ptid)
|
| {
|
| - if (is_thread (ptid))
|
| + if (ptid_tid_p (ptid))
|
| {
|
| /* It's a (user-level) thread. */
|
| td_err_e val;
|
| td_thrhandle_t th;
|
| int pid;
|
|
|
| - pid = GET_THREAD (ptid);
|
| + pid = ptid_get_tid (ptid);
|
| if ((val = p_td_ta_map_id2thr (main_ta, pid, &th)) != TD_OK)
|
| return 0; /* Thread not found. */
|
| if ((val = p_td_thr_validate (&th)) != TD_OK)
|
| @@ -834,14 +772,14 @@ ps_pglobal_lookup (gdb_ps_prochandle_t ph, const char *ld_object_name,
|
|
|
| static ps_err_e
|
| rw_common (int dowrite, const struct ps_prochandle *ph, gdb_ps_addr_t addr,
|
| - char *buf, int size)
|
| + gdb_byte *buf, int size)
|
| {
|
| int ret;
|
| struct cleanup *old_chain;
|
|
|
| old_chain = save_inferior_ptid ();
|
|
|
| - if (is_thread (inferior_ptid) || !target_thread_alive (inferior_ptid))
|
| + if (ptid_tid_p (inferior_ptid) || !target_thread_alive (inferior_ptid))
|
| {
|
| /* It's either a thread or an LWP that isn't alive. Any live
|
| LWP will do so use the first available.
|
| @@ -859,9 +797,9 @@ rw_common (int dowrite, const struct ps_prochandle *ph, gdb_ps_addr_t addr,
|
| #endif
|
|
|
| if (dowrite)
|
| - ret = target_write_memory (addr, buf, size);
|
| + ret = target_write_memory (addr, (gdb_byte *) buf, size);
|
| else
|
| - ret = target_read_memory (addr, buf, size);
|
| + ret = target_read_memory (addr, (gdb_byte *) buf, size);
|
|
|
| do_cleanups (old_chain);
|
|
|
| @@ -883,7 +821,7 @@ ps_err_e
|
| ps_pdwrite (gdb_ps_prochandle_t ph, gdb_ps_addr_t addr,
|
| gdb_ps_write_buf_t buf, gdb_ps_size_t size)
|
| {
|
| - return rw_common (1, ph, addr, (char *) buf, size);
|
| + return rw_common (1, ph, addr, (gdb_byte *) buf, size);
|
| }
|
|
|
| /* Copies SIZE bytes from target process .text segment to debugger memory. */
|
| @@ -901,7 +839,7 @@ ps_err_e
|
| ps_ptwrite (gdb_ps_prochandle_t ph, gdb_ps_addr_t addr,
|
| gdb_ps_write_buf_t buf, gdb_ps_size_t size)
|
| {
|
| - return rw_common (1, ph, addr, (char *) buf, size);
|
| + return rw_common (1, ph, addr, (gdb_byte *) buf, size);
|
| }
|
|
|
| /* Get general-purpose registers for LWP. */
|
| @@ -914,8 +852,8 @@ ps_lgetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, prgregset_t gregset)
|
|
|
| old_chain = save_inferior_ptid ();
|
|
|
| - inferior_ptid = BUILD_LWP (lwpid, PIDGET (inferior_ptid));
|
| - regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch);
|
| + inferior_ptid = ptid_build (ptid_get_pid (inferior_ptid), lwpid, 0);
|
| + regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
|
|
|
| target_fetch_registers (regcache, -1);
|
| fill_gregset (regcache, (gdb_gregset_t *) gregset, -1);
|
| @@ -936,8 +874,8 @@ ps_lsetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
|
|
| old_chain = save_inferior_ptid ();
|
|
|
| - inferior_ptid = BUILD_LWP (lwpid, PIDGET (inferior_ptid));
|
| - regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch);
|
| + inferior_ptid = ptid_build (ptid_get_pid (inferior_ptid), lwpid, 0);
|
| + regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
|
|
|
| supply_gregset (regcache, (const gdb_gregset_t *) gregset);
|
| target_store_registers (regcache, -1);
|
| @@ -964,26 +902,6 @@ ps_plog (const char *fmt, ...)
|
| ps_err_e
|
| ps_lgetxregsize (gdb_ps_prochandle_t ph, lwpid_t lwpid, int *xregsize)
|
| {
|
| -#if 0
|
| - int lwp_fd;
|
| - int regsize;
|
| - ps_err_e val;
|
| -
|
| - val = get_lwp_fd (ph, lwpid, &lwp_fd);
|
| - if (val != PS_OK)
|
| - return val;
|
| -
|
| - if (ioctl (lwp_fd, PIOCGXREGSIZE, ®size))
|
| - {
|
| - if (errno == EINVAL)
|
| - return PS_NOFREGS; /* XXX Wrong code, but this is the closest
|
| - thing in proc_service.h */
|
| -
|
| - print_sys_errmsg ("ps_lgetxregsize (): PIOCGXREGSIZE", errno);
|
| - return PS_ERR;
|
| - }
|
| -#endif
|
| -
|
| return PS_OK;
|
| }
|
|
|
| @@ -992,21 +910,6 @@ ps_lgetxregsize (gdb_ps_prochandle_t ph, lwpid_t lwpid, int *xregsize)
|
| ps_err_e
|
| ps_lgetxregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, caddr_t xregset)
|
| {
|
| -#if 0
|
| - int lwp_fd;
|
| - ps_err_e val;
|
| -
|
| - val = get_lwp_fd (ph, lwpid, &lwp_fd);
|
| - if (val != PS_OK)
|
| - return val;
|
| -
|
| - if (ioctl (lwp_fd, PIOCGXREG, xregset))
|
| - {
|
| - print_sys_errmsg ("ps_lgetxregs (): PIOCGXREG", errno);
|
| - return PS_ERR;
|
| - }
|
| -#endif
|
| -
|
| return PS_OK;
|
| }
|
|
|
| @@ -1015,21 +918,6 @@ ps_lgetxregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, caddr_t xregset)
|
| ps_err_e
|
| ps_lsetxregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, caddr_t xregset)
|
| {
|
| -#if 0
|
| - int lwp_fd;
|
| - ps_err_e val;
|
| -
|
| - val = get_lwp_fd (ph, lwpid, &lwp_fd);
|
| - if (val != PS_OK)
|
| - return val;
|
| -
|
| - if (ioctl (lwp_fd, PIOCSXREG, xregset))
|
| - {
|
| - print_sys_errmsg ("ps_lsetxregs (): PIOCSXREG", errno);
|
| - return PS_ERR;
|
| - }
|
| -#endif
|
| -
|
| return PS_OK;
|
| }
|
|
|
| @@ -1044,8 +932,8 @@ ps_lgetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
|
|
| old_chain = save_inferior_ptid ();
|
|
|
| - inferior_ptid = BUILD_LWP (lwpid, PIDGET (inferior_ptid));
|
| - regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch);
|
| + inferior_ptid = ptid_build (ptid_get_pid (inferior_ptid), lwpid, 0);
|
| + regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
|
|
|
| target_fetch_registers (regcache, -1);
|
| fill_fpregset (regcache, (gdb_fpregset_t *) fpregset, -1);
|
| @@ -1066,8 +954,8 @@ ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
|
|
| old_chain = save_inferior_ptid ();
|
|
|
| - inferior_ptid = BUILD_LWP (lwpid, PIDGET (inferior_ptid));
|
| - regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch);
|
| + inferior_ptid = ptid_build (ptid_get_pid (inferior_ptid), lwpid, 0);
|
| + regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
|
|
|
| supply_fpregset (regcache, (const gdb_fpregset_t *) fpregset);
|
| target_store_registers (regcache, -1);
|
| @@ -1108,16 +996,16 @@ ps_lgetLDT (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
| struct ssd *pldt)
|
| {
|
| /* NOTE: only used on Solaris, therefore OK to refer to procfs.c. */
|
| - extern struct ssd *procfs_find_LDT_entry (ptid_t);
|
| struct ssd *ret;
|
|
|
| /* FIXME: can't I get the process ID from the prochandle or
|
| something? */
|
|
|
| - if (PIDGET (inferior_ptid) <= 0 || lwpid <= 0)
|
| + if (ptid_get_pid (inferior_ptid) <= 0 || lwpid <= 0)
|
| return PS_BADLID;
|
|
|
| - ret = procfs_find_LDT_entry (BUILD_LWP (lwpid, PIDGET (inferior_ptid)));
|
| + ret = procfs_find_LDT_entry (ptid_build (ptid_get_pid (inferior_ptid),
|
| + lwpid, 0));
|
| if (ret)
|
| {
|
| memcpy (pldt, ret, sizeof (struct ssd));
|
| @@ -1137,24 +1025,26 @@ solaris_pid_to_str (struct target_ops *ops, ptid_t ptid)
|
| {
|
| static char buf[100];
|
|
|
| - if (is_thread (ptid))
|
| + if (ptid_tid_p (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));
|
| + if (ptid_get_pid (lwp) == -1)
|
| + xsnprintf (buf, sizeof (buf), "Thread %ld (defunct)",
|
| + ptid_get_tid (ptid));
|
| + else if (ptid_get_pid (lwp) != -2)
|
| + xsnprintf (buf, sizeof (buf), "Thread %ld (LWP %ld)",
|
| + ptid_get_tid (ptid), ptid_get_lwp (lwp));
|
| else
|
| - sprintf (buf, "Thread %ld ", GET_THREAD (ptid));
|
| + xsnprintf (buf, sizeof (buf), "Thread %ld ",
|
| + ptid_get_tid (ptid));
|
| }
|
| - else if (GET_LWP (ptid) != 0)
|
| - sprintf (buf, "LWP %ld ", GET_LWP (ptid));
|
| + else if (ptid_get_lwp (ptid) != 0)
|
| + xsnprintf (buf, sizeof (buf), "LWP %ld ", ptid_get_lwp (ptid));
|
| else
|
| - sprintf (buf, "process %d ", PIDGET (ptid));
|
| + xsnprintf (buf, sizeof (buf), "process %d ", ptid_get_pid (ptid));
|
|
|
| return buf;
|
| }
|
| @@ -1174,7 +1064,7 @@ sol_find_new_threads_callback (const td_thrhandle_t *th, void *ignored)
|
| if (retval != TD_OK)
|
| return -1;
|
|
|
| - ptid = BUILD_THREAD (ti.ti_tid, PIDGET (inferior_ptid));
|
| + ptid = ptid_build (ptid_get_pid (inferior_ptid), 0, ti.ti_tid);
|
| if (!in_thread_list (ptid) || is_exited (ptid))
|
| add_thread (ptid);
|
|
|
| @@ -1241,32 +1131,28 @@ info_cb (const td_thrhandle_t *th, void *s)
|
| /* Print thr_create start function. */
|
| if (ti.ti_startfunc != 0)
|
| {
|
| - struct minimal_symbol *msym;
|
| - msym = lookup_minimal_symbol_by_pc (ti.ti_startfunc);
|
| - if (msym)
|
| - printf_filtered (" startfunc: %s\n",
|
| - SYMBOL_PRINT_NAME (msym));
|
| - else
|
| - printf_filtered (" startfunc: %s\n",
|
| - paddress (target_gdbarch, ti.ti_startfunc));
|
| + const struct bound_minimal_symbol msym
|
| + = lookup_minimal_symbol_by_pc (ti.ti_startfunc);
|
| +
|
| + printf_filtered (" startfunc=%s",
|
| + msym.minsym
|
| + ? SYMBOL_PRINT_NAME (msym.minsym)
|
| + : paddress (target_gdbarch (), ti.ti_startfunc));
|
| }
|
|
|
| /* If thread is asleep, print function that went to sleep. */
|
| if (ti.ti_state == TD_THR_SLEEP)
|
| {
|
| - struct minimal_symbol *msym;
|
| - msym = lookup_minimal_symbol_by_pc (ti.ti_pc);
|
| - if (msym)
|
| - printf_filtered (" - Sleep func: %s\n",
|
| - SYMBOL_PRINT_NAME (msym));
|
| - else
|
| - printf_filtered (" - Sleep func: %s\n",
|
| - paddress (target_gdbarch, ti.ti_startfunc));
|
| + const struct bound_minimal_symbol msym
|
| + = lookup_minimal_symbol_by_pc (ti.ti_pc);
|
| +
|
| + printf_filtered (" sleepfunc=%s",
|
| + msym.minsym
|
| + ? SYMBOL_PRINT_NAME (msym.minsym)
|
| + : paddress (target_gdbarch (), ti.ti_pc));
|
| }
|
|
|
| - /* Wrap up line, if necessary. */
|
| - if (ti.ti_state != TD_THR_SLEEP && ti.ti_startfunc == 0)
|
| - printf_filtered ("\n"); /* don't you hate counting newlines? */
|
| + printf_filtered ("\n");
|
| }
|
| else
|
| warning (_("info sol-thread: failed to get info for thread."));
|
| @@ -1382,7 +1268,7 @@ _initialize_sol_thread (void)
|
| resolve (td_thr_getgregs);
|
| resolve (td_thr_setgregs);
|
|
|
| - add_target (&sol_thread_ops);
|
| + complete_target_initialization (&sol_thread_ops);
|
|
|
| add_cmd ("sol-threads", class_maintenance, info_solthreads,
|
| _("Show info on Solaris user threads."), &maintenanceinfolist);
|
|
|