aboutsummaryrefslogtreecommitdiff
path: root/gdb/linux-thread-db.c
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@gnat.com>2008-10-22 19:45:05 +0000
committerJoel Brobecker <brobecker@gnat.com>2008-10-22 19:45:05 +0000
commit0ef643c89ca385cfed451d2135cbd4e4d10c46b7 (patch)
tree1873de06e0e1c39586bcdbe69b7a6e182757bb89 /gdb/linux-thread-db.c
parentc209f8472e7d7ea6abb109945f2c53a0b9a92d53 (diff)
downloadgdb-0ef643c89ca385cfed451d2135cbd4e4d10c46b7.zip
gdb-0ef643c89ca385cfed451d2135cbd4e4d10c46b7.tar.gz
gdb-0ef643c89ca385cfed451d2135cbd4e4d10c46b7.tar.bz2
* 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.
Diffstat (limited to 'gdb/linux-thread-db.c')
-rw-r--r--gdb/linux-thread-db.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c
index 650cbaa..fc85be5 100644
--- a/gdb/linux-thread-db.c
+++ b/gdb/linux-thread-db.c
@@ -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;
}