aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/dec-thread.c29
2 files changed, 29 insertions, 10 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index f220340..a939f74 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,15 @@
2010-04-20 Joel Brobecker <brobecker@adacore.com>
+ Implement thread support with core files on alpha-tru64.
+ * dec-thread.c (dec_thread_find_new_threads): New function,
+ extracted from resync_thread_list.
+ (resync_thread_list): Add OPS parameter. Replace extracted-out
+ code by call to dec_thread_find_new_threads.
+ (dec_thread_wait): Update call to resync_thread_list.
+ (init_dec_thread_ops): Set dec_thread_ops.to_find_new_threads.
+
+2010-04-20 Joel Brobecker <brobecker@adacore.com>
+
* ada-lang.c (value_pointer): New function.
(make_array_descriptor): Call value_pointer to convert addresses to
pointers.
diff --git a/gdb/dec-thread.c b/gdb/dec-thread.c
index 01191ea..4aba779 100644
--- a/gdb/dec-thread.c
+++ b/gdb/dec-thread.c
@@ -394,22 +394,15 @@ dec_thread_add_gdb_thread (struct thread_info *info, void *context)
return 0;
}
-/* Resynchronize the list of threads known by GDB with the actual
- list of threads reported by libpthread_debug. */
+/* Implement the find_new_thread target_ops method. */
static void
-resync_thread_list (void)
+dec_thread_find_new_threads (struct target_ops *ops)
{
int i;
struct dec_thread_info *info;
- int num_gdb_threads = 0;
- struct thread_info **gdb_thread_list;
- struct thread_info **next_thread_info;
update_dec_thread_list ();
-
- /* Add new threads. */
-
for (i = 0; VEC_iterate (dec_thread_info_s, dec_thread_list, i, info); i++)
{
ptid_t ptid = ptid_build_from_info (*info);
@@ -417,6 +410,21 @@ resync_thread_list (void)
if (!in_thread_list (ptid))
add_thread (ptid);
}
+}
+
+/* Resynchronize the list of threads known by GDB with the actual
+ list of threads reported by libpthread_debug. */
+
+static void
+resync_thread_list (struct target_ops *ops)
+{
+ int i;
+ int num_gdb_threads = 0;
+ struct thread_info **gdb_thread_list;
+ struct thread_info **next_thread_info;
+
+ /* Add new threads. */
+ dec_thread_find_new_threads (ops);
/* Remove threads that no longer exist. To help with the search,
we build an array of GDB threads, and then iterate over this
@@ -479,7 +487,7 @@ dec_thread_wait (struct target_ops *ops,
/* The ptid returned by the target beneath us is the ptid of the process.
We need to find which thread is currently active and return its ptid. */
- resync_thread_list ();
+ resync_thread_list (ops);
active_ptid = get_active_ptid ();
if (ptid_equal (active_ptid, null_ptid))
return ptid;
@@ -708,6 +716,7 @@ init_dec_thread_ops (void)
dec_thread_ops.to_store_registers = dec_thread_store_registers;
dec_thread_ops.to_mourn_inferior = dec_thread_mourn_inferior;
dec_thread_ops.to_thread_alive = dec_thread_thread_alive;
+ dec_thread_ops.to_find_new_threads = dec_thread_find_new_threads;
dec_thread_ops.to_pid_to_str = dec_thread_pid_to_str;
dec_thread_ops.to_stratum = thread_stratum;
dec_thread_ops.to_get_ada_task_ptid = dec_thread_get_ada_task_ptid;