Thread support currently does not work with core files. Note that,
in order to thread support to work on tru64, one need to allow GDB
to write in the core file (this is because the thread debug library
needs to write).
An obvious visible symptom of the problem is that "info threads" does
not list the various threads:
(gdb) info threads
* 1 <main task> 0x000003ff805c0918 in __nxm_thread_kill ()
from /usr/shlib/libpthread.so
One other noticeable consequence is that GDB generates some warnings
when using "info tasks":
(gdb) info tasks
warning: Could not find thread id from THREAD = 0x3ffc01b6000
warning: Could not find thread id from THREAD = 0x20000e2b4c0
ID TID P-ID Pri State Name
* 1 140051000 0 30 Runnable main_task
* 2 14005c000 1 30 Accept or Select Term my_t
(notice also how both tasks are marked as being the active task,
which cannot be true).
The problem is that the dec-thread module has not updated its thread list
after the core file got loaded. In fact, the list only gets resync'ed
at the end of each target-wait. The solution was to implement the
find_new_threads target_ops method.
gdb/ChangeLog:
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.
* dec-thread.c (dec_thread_ptid_is_alive): New function.
(dec_thread_count_gdb_threads): Fix counter increment.
(dec_thread_add_gdb_thread): Fix *listp increment.
(resync_thread_list): Fix bug in deletion of dead threads that
caused all threads to be deleted, instead of just the dead ones.
to find the underlying target.
* dec-thread.c (base_target): Delete.
(enable_dec_thread): Remove assignement to base_target.
(dec_thread_detach, dec_thread_wait, dec_thread_wait)
(dec_thread_fetch_registers, dec_thread_store_registers)
(dec_thread_mourn_inferior, dec_thread_pid_to_str):
Update the function profile if necessary.
Use find_target_beneath to call the same method but from
the underlying target, removing the need for "base_target".
* dec-thread.c (dec_thread_get_regsets, dec_thread_set_regsets):
Fix a copy/paste error in a few debug traces...
* solib-osf.c (init_so): Use a simpler method for computing
the size of lm_info structure. This also gets rid of warning
emitted by the compiler.