forked from Imagelibrary/binutils-gdb
* target.h (struct target_ops): Add new field to_get_ada_task_ptid.
(target_get_ada_task_ptid): New macro.
* target.c (default_get_ada_task_ptid): New function.
(update_current_target): Inherit field default_get_ada_task_ptid.
(update_current_target): Make default_get_ada_task_ptid the default
value for field to_get_ada_task_ptid.
* ada-lang.h (struct task_control_block): Delete. Never used.
(struct task_ptid, task_ptid_t, struct task_entry, task_list):
Likewise.
(struct ada_task_info): New.
(ada_task_is_alive, ada_find_printable_frame)
(ada_task_list_iterator_ftype, iterate_over_live_ada_tasks): Add
declarations.
(ada_build_task_list): Update prototype.
(init_task_list, ada_is_exception_breakpoint): Remove prototypes.
* ada-lang.c (ada_find_printable_frame): Make non-static.
* ada-tasks.c: New file.
* Makefile.in (SFILES): Add ada-tasks.c.
(COMMON_OBS): Add ada-tasks.o.
* linux-thread-db.c (thread_db_find_thread_from_tid)
(thread_db_get_ada_task_ptid): New functions.
(init_thread_db_ops): Set thread_db_ops.to_get_ada_task_ptid.
This commit is contained in:
@@ -1143,6 +1143,35 @@ thread_db_get_thread_local_address (ptid_t ptid,
|
||||
_("TLS not supported on this target"));
|
||||
}
|
||||
|
||||
/* Callback routine used to find a thread based on the TID part of
|
||||
its PTID. */
|
||||
|
||||
static int
|
||||
thread_db_find_thread_from_tid (struct thread_info *thread, void *data)
|
||||
{
|
||||
long *tid = (long *) data;
|
||||
|
||||
if (thread->private->tid == *tid)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Implement the to_get_ada_task_ptid target method for this target. */
|
||||
|
||||
static ptid_t
|
||||
thread_db_get_ada_task_ptid (long lwp, long thread)
|
||||
{
|
||||
struct thread_info *thread_info;
|
||||
|
||||
thread_db_find_new_threads ();
|
||||
thread_info = iterate_over_threads (thread_db_find_thread_from_tid, &thread);
|
||||
|
||||
gdb_assert (thread_info != NULL);
|
||||
|
||||
return (thread_info->ptid);
|
||||
}
|
||||
|
||||
static void
|
||||
init_thread_db_ops (void)
|
||||
{
|
||||
@@ -1163,6 +1192,7 @@ init_thread_db_ops (void)
|
||||
thread_db_ops.to_is_async_p = thread_db_is_async_p;
|
||||
thread_db_ops.to_async = thread_db_async;
|
||||
thread_db_ops.to_async_mask = thread_db_async_mask;
|
||||
thread_db_ops.to_get_ada_task_ptid = thread_db_get_ada_task_ptid;
|
||||
thread_db_ops.to_magic = OPS_MAGIC;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user