diff options
author | Daniel Jacobowitz <drow@false.org> | 2006-10-17 16:02:27 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2006-10-17 16:02:27 +0000 |
commit | dae5f5cf4b47e0c8b81c090316093ecf5777f770 (patch) | |
tree | 7a7f4edbdd4892beda9c8424dc6445c998aeb2a4 /gdb/gdbserver/thread-db.c | |
parent | 5bd2f6e2a6179014300f75f86231e0e37736eb6b (diff) | |
download | gdb-dae5f5cf4b47e0c8b81c090316093ecf5777f770.zip gdb-dae5f5cf4b47e0c8b81c090316093ecf5777f770.tar.gz gdb-dae5f5cf4b47e0c8b81c090316093ecf5777f770.tar.bz2 |
* acinclude.m4 (SRV_CHECK_TLS_GET_ADDR): New.
* configure.ac: Use it. Define HAVE_TD_THR_TLS_GET_ADDR.
* config.in, configure: Regenerated.
* inferiors.c (gdb_id_to_thread): New function.
(gdb_id_to_thread_id): Use it.
* linux-low.c (linux_target_ops): Use thread_db_get_tls_address.
* linux-low.h (struct process_info): Add th member.
(thread_db_get_tls_address): New prototype.
* remote-utils.c (decode_address): Make non-static.
* server.c (handle_query): Handle qGetTLSAddr.
* server.h (gdb_id_to_thread, decode_address): New prototypes.
* target.h (struct target_ops): Add get_tls_address.
* thread-db.c (maybe_attach_thread): Save the thread handle.
(thread_db_get_tls_address): New.
Diffstat (limited to 'gdb/gdbserver/thread-db.c')
-rw-r--r-- | gdb/gdbserver/thread-db.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/gdb/gdbserver/thread-db.c b/gdb/gdbserver/thread-db.c index 24531bf..78bc6434 100644 --- a/gdb/gdbserver/thread-db.c +++ b/gdb/gdbserver/thread-db.c @@ -266,6 +266,7 @@ found: process->lwpid = ti_p->ti_lid; process->thread_known = 1; + process->th = *th_p; err = td_thr_event_enable (th_p, 1); if (err != TD_OK) error ("Cannot enable thread event reporting for %d: %s", @@ -320,6 +321,33 @@ thread_db_look_up_symbols (void) } int +thread_db_get_tls_address (struct thread_info *thread, CORE_ADDR offset, + CORE_ADDR load_module, CORE_ADDR *address) +{ +#if HAVE_TD_THR_TLS_GET_ADDR + psaddr_t addr; + td_err_e err; + struct process_info *process; + + process = get_thread_process (thread); + if (!process->thread_known) + return TD_NOTHR; + + err = td_thr_tls_get_addr (&process->th, (psaddr_t) load_module, offset, + &addr); + if (err == TD_OK) + { + *address = (CORE_ADDR) addr; + return 0; + } + else + return err; +#else + return -1; +#endif +} + +int thread_db_init () { int err; |