aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linuxthreads_db/td_thr_tls_get_addr.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/linuxthreads_db/td_thr_tls_get_addr.c b/linuxthreads_db/td_thr_tls_get_addr.c
index f6e356b339..cfe821f707 100644
--- a/linuxthreads_db/td_thr_tls_get_addr.c
+++ b/linuxthreads_db/td_thr_tls_get_addr.c
@@ -28,13 +28,14 @@
td_err_e
td_thr_tls_get_addr (const td_thrhandle_t *th __attribute__ ((unused)),
- struct link_map *map __attribute__ ((unused)),
+ void *map_address __attribute__ ((unused)),
size_t offset __attribute__ ((unused)),
void **address __attribute__ ((unused)))
{
#if USE_TLS
struct _pthread_descr_struct pds;
size_t modid;
+ struct link_map map;
union dtv pdtv;
LOG ("td_thr_tls_get_addr");
@@ -44,12 +45,14 @@ td_thr_tls_get_addr (const td_thrhandle_t *th __attribute__ ((unused)),
th->th_ta_p->sizeof_descr) != PS_OK)
return TD_ERR; /* XXX Other error value? */
- /* The module ID. */
- modid = map->l_tls_modid;
+ /* Get the link_map, so we gan get the module ID. */
+ if (ps_pdread (th->th_ta_p->ph, map_address, &map,
+ sizeof (struct link_map)) != PS_OK)
+ return TD_ERR; /* XXX Other error value? */
/* Get the corresponding entry in the DTV. */
- if (ps_pdread (th->th_ta_p->ph, pds.p_header.data.dtvp + modid, &pdtv,
- sizeof (union dtv)) != PS_OK)
+ if (ps_pdread (th->th_ta_p->ph, pds.p_header.data.dtvp + map.l_tls_modid,
+ &pdtv, sizeof (union dtv)) != PS_OK)
return TD_ERR; /* XXX Other error value? */
/* It could be that the memory for this module is not allocated for