mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 22:07:58 +08:00
2011-09-13 Pedro Alves <pedro@codesourcery.com>
* inferior.h (ALL_INFERIORS): New. * linux-thread-db.c (thread_db_find_new_threads_2): Remove check for a stopped thread. (thread_db_find_new_threads): Look for threads in all inferiors.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
2011-09-13 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
* inferior.h (ALL_INFERIORS): New.
|
||||||
|
* linux-thread-db.c (thread_db_find_new_threads_2): Remove check
|
||||||
|
for a stopped thread.
|
||||||
|
(thread_db_find_new_threads): Look for threads in all inferiors.
|
||||||
|
|
||||||
2011-09-13 Pedro Alves <pedro@codesourcery.com>
|
2011-09-13 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
* breakpoint.c (update_watchpoint): Handle the case of the
|
* breakpoint.c (update_watchpoint): Handle the case of the
|
||||||
|
@ -615,6 +615,11 @@ extern void set_current_inferior (struct inferior *);
|
|||||||
|
|
||||||
extern struct cleanup *save_current_inferior (void);
|
extern struct cleanup *save_current_inferior (void);
|
||||||
|
|
||||||
|
/* Traverse all inferiors. */
|
||||||
|
|
||||||
|
#define ALL_INFERIORS(I) \
|
||||||
|
for ((I) = inferior_list; (I); (I) = (I)->next)
|
||||||
|
|
||||||
extern struct inferior *inferior_list;
|
extern struct inferior *inferior_list;
|
||||||
|
|
||||||
/* Prune away automatically added inferiors that aren't required
|
/* Prune away automatically added inferiors that aren't required
|
||||||
|
@ -1552,20 +1552,6 @@ thread_db_find_new_threads_2 (ptid_t ptid, int until_no_new)
|
|||||||
int pid = ptid_get_pid (ptid);
|
int pid = ptid_get_pid (ptid);
|
||||||
int i, loop;
|
int i, loop;
|
||||||
|
|
||||||
if (target_has_execution)
|
|
||||||
{
|
|
||||||
struct lwp_info *lp;
|
|
||||||
|
|
||||||
/* In linux, we can only read memory through a stopped lwp. */
|
|
||||||
ALL_LWPS (lp, ptid)
|
|
||||||
if (lp->stopped && ptid_get_pid (lp->ptid) == pid)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (!lp)
|
|
||||||
/* There is no stopped thread. Bail out. */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
info = get_thread_db_info (GET_PID (ptid));
|
info = get_thread_db_info (GET_PID (ptid));
|
||||||
|
|
||||||
/* Access an lwp we know is stopped. */
|
/* Access an lwp we know is stopped. */
|
||||||
@ -1607,13 +1593,25 @@ static void
|
|||||||
thread_db_find_new_threads (struct target_ops *ops)
|
thread_db_find_new_threads (struct target_ops *ops)
|
||||||
{
|
{
|
||||||
struct thread_db_info *info;
|
struct thread_db_info *info;
|
||||||
|
struct inferior *inf;
|
||||||
|
|
||||||
info = get_thread_db_info (GET_PID (inferior_ptid));
|
ALL_INFERIORS (inf)
|
||||||
|
{
|
||||||
|
struct thread_info *thread;
|
||||||
|
|
||||||
|
if (inf->pid == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
info = get_thread_db_info (inf->pid);
|
||||||
if (info == NULL)
|
if (info == NULL)
|
||||||
return;
|
continue;
|
||||||
|
|
||||||
thread_db_find_new_threads_1 (inferior_ptid);
|
thread = any_live_thread_of_process (inf->pid);
|
||||||
|
if (thread == NULL || thread->executing)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
thread_db_find_new_threads_1 (thread->ptid);
|
||||||
|
}
|
||||||
|
|
||||||
if (target_has_execution)
|
if (target_has_execution)
|
||||||
iterate_over_lwps (minus_one_ptid /* iterate over all */,
|
iterate_over_lwps (minus_one_ptid /* iterate over all */,
|
||||||
|
Reference in New Issue
Block a user