[PATCH] solaris thread tweak

msnyder@cygnus.com msnyder@cygnus.com
Mon May 8 15:36:00 GMT 2000


Guard against adding the main thread to the thread list twice.
Also pretty up the declarations for the thread_db function pointers.

2000-05-08  Michael Snyder  <msnyder@seadog.cygnus.com>

        * sol-thread.c (sol_thread_create_inferior): only add the thread
        to the thread list if it is not already in there.
        (prototypes for thread_db func ptrs): pretty up formatting.

Index: sol-thread.c
===================================================================
RCS file: /cvs/src/src/gdb/sol-thread.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -p -r1.6 -r1.7
*** sol-thread.c	2000/04/13 16:31:50	1.6
--- sol-thread.c	2000/05/08 22:34:38	1.7
*************** static void init_sol_core_ops PARAMS ((v
*** 133,186 ****
  
  /* Pointers to routines from lithread_db resolved by dlopen() */
  
! static void
!   (*p_td_log) (const int on_off);
! static td_err_e
!   (*p_td_ta_new) (const struct ps_prochandle * ph_p, td_thragent_t ** ta_pp);
! static td_err_e
!   (*p_td_ta_delete) (td_thragent_t * ta_p);
! static td_err_e
!   (*p_td_init) (void);
! static td_err_e
!   (*p_td_ta_get_ph) (const td_thragent_t * ta_p, struct ps_prochandle ** ph_pp);
! static td_err_e
!   (*p_td_ta_get_nthreads) (const td_thragent_t * ta_p, int *nthread_p);
! static td_err_e
!   (*p_td_ta_tsd_iter) (const td_thragent_t * ta_p, td_key_iter_f * cb, void *cbdata_p);
! static td_err_e
!   (*p_td_ta_thr_iter) (const td_thragent_t * ta_p, td_thr_iter_f * cb, void *cbdata_p, td_thr_state_e state,
! 	       int ti_pri, sigset_t * ti_sigmask_p, unsigned ti_user_flags);
! static td_err_e
!   (*p_td_thr_validate) (const td_thrhandle_t * th_p);
! static td_err_e
!   (*p_td_thr_tsd) (const td_thrhandle_t * th_p, const thread_key_t key, void **data_pp);
! static td_err_e
!   (*p_td_thr_get_info) (const td_thrhandle_t * th_p, td_thrinfo_t * ti_p);
! static td_err_e
!   (*p_td_thr_getfpregs) (const td_thrhandle_t * th_p, prfpregset_t * fpregset);
! static td_err_e
!   (*p_td_thr_getxregsize) (const td_thrhandle_t * th_p, int *xregsize);
! static td_err_e
!   (*p_td_thr_getxregs) (const td_thrhandle_t * th_p, const caddr_t xregset);
! static td_err_e
!   (*p_td_thr_sigsetmask) (const td_thrhandle_t * th_p, const sigset_t ti_sigmask);
! static td_err_e
!   (*p_td_thr_setprio) (const td_thrhandle_t * th_p, const int ti_pri);
! static td_err_e
!   (*p_td_thr_setsigpending) (const td_thrhandle_t * th_p, const uchar_t ti_pending_flag, const sigset_t ti_pending);
! static td_err_e
!   (*p_td_thr_setfpregs) (const td_thrhandle_t * th_p, const prfpregset_t * fpregset);
! static td_err_e
!   (*p_td_thr_setxregs) (const td_thrhandle_t * th_p, const caddr_t xregset);
! static td_err_e
!   (*p_td_ta_map_id2thr) (const td_thragent_t * ta_p, thread_t tid, td_thrhandle_t * th_p);
! static td_err_e
!   (*p_td_ta_map_lwp2thr) (const td_thragent_t * ta_p, lwpid_t lwpid, td_thrhandle_t * th_p);
! static td_err_e
!   (*p_td_thr_getgregs) (const td_thrhandle_t * th_p, prgregset_t regset);
! static td_err_e
!   (*p_td_thr_setgregs) (const td_thrhandle_t * th_p, const prgregset_t regset);
! 
  /*
  
     LOCAL FUNCTION
--- 133,191 ----
  
  /* Pointers to routines from lithread_db resolved by dlopen() */
  
! static void     (*p_td_log)               (const int on_off);
! static td_err_e (*p_td_ta_new)            (const struct ps_prochandle * ph_p, 
! 					   td_thragent_t ** ta_pp);
! static td_err_e (*p_td_ta_delete)         (td_thragent_t * ta_p);
! static td_err_e (*p_td_init)              (void);
! static td_err_e (*p_td_ta_get_ph)         (const td_thragent_t * ta_p, 
! 					   struct ps_prochandle ** ph_pp);
! static td_err_e (*p_td_ta_get_nthreads)   (const td_thragent_t * ta_p, 
! 					   int *nthread_p);
! static td_err_e (*p_td_ta_tsd_iter)       (const td_thragent_t * ta_p, 
! 					   td_key_iter_f * cb, 
! 					   void *cbdata_p);
! static td_err_e (*p_td_ta_thr_iter)       (const td_thragent_t * ta_p, 
! 					   td_thr_iter_f * cb, 
! 					   void *cbdata_p, 
! 					   td_thr_state_e state,
! 					   int ti_pri, 
! 					   sigset_t * ti_sigmask_p, 
! 					   unsigned ti_user_flags);
! static td_err_e (*p_td_thr_validate)      (const td_thrhandle_t * th_p);
! static td_err_e (*p_td_thr_tsd)           (const td_thrhandle_t * th_p, 
! 					   const thread_key_t key, 
! 					   void **data_pp);
! static td_err_e (*p_td_thr_get_info)      (const td_thrhandle_t * th_p, 
! 					   td_thrinfo_t * ti_p);
! static td_err_e (*p_td_thr_getfpregs)     (const td_thrhandle_t * th_p, 
! 					   prfpregset_t * fpregset);
! static td_err_e (*p_td_thr_getxregsize)   (const td_thrhandle_t * th_p, 
! 					   int *xregsize);
! static td_err_e (*p_td_thr_getxregs)      (const td_thrhandle_t * th_p, 
! 					   const caddr_t xregset);
! static td_err_e (*p_td_thr_sigsetmask)    (const td_thrhandle_t * th_p, 
! 					   const sigset_t ti_sigmask);
! static td_err_e (*p_td_thr_setprio)       (const td_thrhandle_t * th_p, 
! 					   const int ti_pri);
! static td_err_e (*p_td_thr_setsigpending) (const td_thrhandle_t * th_p, 
! 					   const uchar_t ti_pending_flag, 
! 					   const sigset_t ti_pending);
! static td_err_e (*p_td_thr_setfpregs)     (const td_thrhandle_t * th_p, 
! 					   const prfpregset_t * fpregset);
! static td_err_e (*p_td_thr_setxregs)      (const td_thrhandle_t * th_p, 
! 					   const caddr_t xregset);
! static td_err_e (*p_td_ta_map_id2thr)     (const td_thragent_t * ta_p, 
! 					   thread_t tid, 
! 					   td_thrhandle_t * th_p);
! static td_err_e (*p_td_ta_map_lwp2thr)    (const td_thragent_t * ta_p, 
! 					   lwpid_t lwpid, 
! 					   td_thrhandle_t * th_p);
! static td_err_e (*p_td_thr_getgregs)      (const td_thrhandle_t * th_p, 
! 					   prgregset_t regset);
! static td_err_e (*p_td_thr_setgregs)      (const td_thrhandle_t * th_p, 
! 					   const prgregset_t regset);
! 
  /*
  
     LOCAL FUNCTION
*************** lwp_to_thread (lwp)
*** 390,396 ****
  
    val = p_td_thr_validate (&th);
    if (val == TD_NOTHR)
!     return lwp;			/* libthread doesn't know about it, just return lwp */
    else if (val != TD_OK)
      error ("lwp_to_thread: td_thr_validate: %s.", td_err_string (val));
  
--- 395,402 ----
  
    val = p_td_thr_validate (&th);
    if (val == TD_NOTHR)
!     return lwp;			/* libthread doesn't know about it;
! 				   just return lwp */
    else if (val != TD_OK)
      error ("lwp_to_thread: td_thr_validate: %s.", td_err_string (val));
  
*************** sol_thread_create_inferior (exec_file, a
*** 847,853 ****
        if (inferior_pid == -1)
  	inferior_pid = main_ph.pid;
  
!       add_thread (inferior_pid);
      }
  }
  
--- 853,860 ----
        if (inferior_pid == -1)
  	inferior_pid = main_ph.pid;
  
!       if (!in_thread_list (inferior_pid))
! 	add_thread (inferior_pid);
      }
  }
  


More information about the Gdb-patches mailing list