mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-03 13:23:00 +08:00
2008-03-21 Daniel Jacobowitz <dan@codesourcery.com>
* gdbthread.h (add_thread_with_info): New. * linux-thread-db.c: Add some documentation. (GET_LWP, GET_PID, GET_THREAD, is_lwp, is_thread, BUILD_LWP): Delete. (struct private_thread_info): Remove th_valid and ti_valid. Replace ti with tid. (thread_get_info_callback): Do not add TID to the new ptid. Do not cache th or ti. (thread_db_map_id2thr, lwp_from_thread): Delete functions. (thread_from_lwp): Assert that the LWP is set. Do not add TID to the new PTID. (attach_thread): Handle an already-existing thread. Use add_thread_with_info. Cache the th and tid. (detach_thread): Verify that private was set. Remove verbose argument and printing. Update caller. (thread_db_detach): Do not adjust inferior_ptid. (clear_lwpid_callback, thread_db_resume, thread_db_kill): Delete. (check_event, find_new_threads_callback): Do not add TID to the new PTID. (thread_db_wait): Do not use lwp_from_thread. (thread_db_pid_to_str): Use the cached TID. (thread_db_extra_thread_info): Check that private is set. (same_ptid_callback): Delete. (thread_db_get_thread_local_address): Do not use it or check is_thread. Check that private is set. Assume that the thread handle is already cached. (init_thread_db_ops): Remove to_resume and to_kill. * thread.c (add_thread_with_info): New. (add_thread): Use it. * linux-nat.c (find_thread_from_lwp): Delete. (exit_lwp): Do not use it. Check print_thread_events. Print before deleting the thread. (GET_PID, GET_LWP, BUILD_LWP, is_lwp): Move to... * linux-nat.h (GET_PID, GET_LWP, BUILD_LWP, is_lwp): ...here. * inf-ttrace.c (inf_ttrace_wait): Use print_thread_events and printf_unfiltered for thread exits. * procfs.c (procfs_wait): Likewise. 2008-03-21 Pedro Alves <pedro@codesourcery.com> * gdb.threads/fork-child-threads.exp: Test next over fork.
This commit is contained in:
@ -588,11 +588,6 @@ struct lwp_info *lwp_list;
|
||||
static int num_lwps;
|
||||
|
||||
|
||||
#define GET_LWP(ptid) ptid_get_lwp (ptid)
|
||||
#define GET_PID(ptid) ptid_get_pid (ptid)
|
||||
#define is_lwp(ptid) (GET_LWP (ptid) != 0)
|
||||
#define BUILD_LWP(lwp, pid) ptid_build (pid, lwp, 0)
|
||||
|
||||
/* If the last reported event was a SIGTRAP, this variable is set to
|
||||
the process id of the LWP/thread that got it. */
|
||||
ptid_t trap_ptid;
|
||||
@ -813,20 +808,6 @@ prune_lwps (void)
|
||||
p = &(*p)->next;
|
||||
}
|
||||
|
||||
/* Callback for iterate_over_threads that finds a thread corresponding
|
||||
to the given LWP. */
|
||||
|
||||
static int
|
||||
find_thread_from_lwp (struct thread_info *thr, void *dummy)
|
||||
{
|
||||
ptid_t *ptid_p = dummy;
|
||||
|
||||
if (GET_LWP (thr->ptid) && GET_LWP (thr->ptid) == GET_LWP (*ptid_p))
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Handle the exit of a single thread LP. */
|
||||
|
||||
static void
|
||||
@ -834,32 +815,14 @@ exit_lwp (struct lwp_info *lp)
|
||||
{
|
||||
if (in_thread_list (lp->ptid))
|
||||
{
|
||||
if (print_thread_events)
|
||||
printf_unfiltered (_("[%s exited]\n"), target_pid_to_str (lp->ptid));
|
||||
|
||||
/* Core GDB cannot deal with us deleting the current thread. */
|
||||
if (!ptid_equal (lp->ptid, inferior_ptid))
|
||||
delete_thread (lp->ptid);
|
||||
else
|
||||
record_dead_thread (lp->ptid);
|
||||
printf_unfiltered (_("[%s exited]\n"),
|
||||
target_pid_to_str (lp->ptid));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Even if LP->PTID is not in the global GDB thread list, the
|
||||
LWP may be - with an additional thread ID. We don't need
|
||||
to print anything in this case; thread_db is in use and
|
||||
already took care of that. But it didn't delete the thread
|
||||
in order to handle zombies correctly. */
|
||||
|
||||
struct thread_info *thr;
|
||||
|
||||
thr = iterate_over_threads (find_thread_from_lwp, &lp->ptid);
|
||||
if (thr)
|
||||
{
|
||||
if (!ptid_equal (thr->ptid, inferior_ptid))
|
||||
delete_thread (thr->ptid);
|
||||
else
|
||||
record_dead_thread (thr->ptid);
|
||||
}
|
||||
}
|
||||
|
||||
delete_lwp (lp->ptid);
|
||||
|
Reference in New Issue
Block a user