diff options
author | Kevin Buettner <kevinb@redhat.com> | 2019-02-07 19:16:04 -0700 |
---|---|---|
committer | Kevin Buettner <kevinb@redhat.com> | 2019-04-08 20:09:37 -0700 |
commit | 3d6c62048d8408fbfb6c66830e0c650e36259637 (patch) | |
tree | dc8bd93aae61f80fab0ea589241021691a733035 /gdb/linux-thread-db.c | |
parent | 462cac5884ed4c38e6180b2e2769aaa5225e695b (diff) | |
download | gdb-3d6c62048d8408fbfb6c66830e0c650e36259637.zip gdb-3d6c62048d8408fbfb6c66830e0c650e36259637.tar.gz gdb-3d6c62048d8408fbfb6c66830e0c650e36259637.tar.bz2 |
Introduce target_ops method thread_info_to_thread_handle
This patch adds a thread_info_to_thread_handle method to the target_ops
struct. It also implements this functionality for remote targets and
linux native threads.
gdb/ChangeLog:
* gdbthread.h (thread_to_thread_handle): Declare.
* thread.c (gdbtypes.h): Include.
(thread_to_thread_handle): New function.
* target.h (struct target_ops): Add thread_info_to_thread_handle.
(target_thread_info_to_thread_handle): Declare.
* target.c (target_thread_info_to_thread_handle): New function.
* target-debug.h (target_debug_print_gdb_byte_vector): Define.
* target-delegates.c: Regenerate.
* linux-thread-db.c (class thread_db_target): Add method
thread_info_to_thread_handle.
(thread_db_target::thread_info_to_thread_handle): Define.
* remote.c (class remote_target): Add new method
thread_info_to_thread_handle.
(remote_target::thread_info_to_thread_handle): Define.
Diffstat (limited to 'gdb/linux-thread-db.c')
-rw-r--r-- | gdb/linux-thread-db.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c index b3e1a24..a67f9b9 100644 --- a/gdb/linux-thread-db.c +++ b/gdb/linux-thread-db.c @@ -105,6 +105,7 @@ public: thread_info *thread_handle_to_thread_info (const gdb_byte *thread_handle, int handle_len, inferior *inf) override; + gdb::byte_vector thread_info_to_thread_handle (struct thread_info *) override; }; static char *libthread_db_search_path; @@ -1692,6 +1693,24 @@ thread_db_target::thread_handle_to_thread_info (const gdb_byte *thread_handle, return NULL; } +/* Return the thread handle associated the thread_info pointer TP. */ + +gdb::byte_vector +thread_db_target::thread_info_to_thread_handle (struct thread_info *tp) +{ + thread_db_thread_info *priv = get_thread_db_thread_info (tp); + + if (priv == NULL) + return gdb::byte_vector (); + + int handle_size = sizeof (priv->tid); + gdb::byte_vector rv (handle_size); + + memcpy (rv.data (), &priv->tid, handle_size); + + return rv; +} + /* Get the address of the thread local variable in load module LM which is stored at OFFSET within the thread local storage for thread PTID. */ |