diff options
author | John Baldwin <jhb@FreeBSD.org> | 2019-03-12 13:39:02 -0700 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2019-03-12 13:45:47 -0700 |
commit | 6e056c817845f3d736a1be6b68c69b439c6c6d25 (patch) | |
tree | c5757ebd000ccd8a2d63440d6ef19db9e8c89d8d /gdb/gdbarch.h | |
parent | cd250a1898bb6fdb41f4a1063dbcfac04affcd11 (diff) | |
download | gdb-6e056c817845f3d736a1be6b68c69b439c6c6d25.zip gdb-6e056c817845f3d736a1be6b68c69b439c6c6d25.tar.gz gdb-6e056c817845f3d736a1be6b68c69b439c6c6d25.tar.bz2 |
Add a new gdbarch method to resolve the address of TLS variables.
Permit TLS variable addresses to be resolved purely by an ABI rather
than requiring a target method. This doesn't try the target method if
the ABI function is present (even if the ABI function fails) to
simplify error handling.
gdb/ChangeLog:
* gdbarch.sh (get_thread_local_address): New method.
* gdbarch.h, gdbarch.c: Regenerate.
* target.c (target_translate_tls_address): Use
gdbarch_get_thread_local_address if present instead of
target::get_thread_local_address.
Diffstat (limited to 'gdb/gdbarch.h')
-rw-r--r-- | gdb/gdbarch.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h index 7561837..abb72e7 100644 --- a/gdb/gdbarch.h +++ b/gdb/gdbarch.h @@ -649,6 +649,18 @@ typedef CORE_ADDR (gdbarch_fetch_tls_load_module_address_ftype) (struct objfile extern CORE_ADDR gdbarch_fetch_tls_load_module_address (struct gdbarch *gdbarch, struct objfile *objfile); extern void set_gdbarch_fetch_tls_load_module_address (struct gdbarch *gdbarch, gdbarch_fetch_tls_load_module_address_ftype *fetch_tls_load_module_address); +/* Return the thread-local address at OFFSET in the thread-local + storage for the thread PTID and the shared library or executable + file given by LM_ADDR. If that block of thread-local storage hasn't + been allocated yet, this function may throw an error. LM_ADDR may + be zero for statically linked multithreaded inferiors. */ + +extern int gdbarch_get_thread_local_address_p (struct gdbarch *gdbarch); + +typedef CORE_ADDR (gdbarch_get_thread_local_address_ftype) (struct gdbarch *gdbarch, ptid_t ptid, CORE_ADDR lm_addr, CORE_ADDR offset); +extern CORE_ADDR gdbarch_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid, CORE_ADDR lm_addr, CORE_ADDR offset); +extern void set_gdbarch_get_thread_local_address (struct gdbarch *gdbarch, gdbarch_get_thread_local_address_ftype *get_thread_local_address); + extern CORE_ADDR gdbarch_frame_args_skip (struct gdbarch *gdbarch); extern void set_gdbarch_frame_args_skip (struct gdbarch *gdbarch, CORE_ADDR frame_args_skip); |