diff options
Diffstat (limited to 'sysdeps/powerpc')
-rw-r--r-- | sysdeps/powerpc/dl-tls.h | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/sysdeps/powerpc/dl-tls.h b/sysdeps/powerpc/dl-tls.h index 37b9674..2f84a57 100644 --- a/sysdeps/powerpc/dl-tls.h +++ b/sysdeps/powerpc/dl-tls.h @@ -25,19 +25,25 @@ typedef struct unsigned long int ti_offset; } tls_index; - -#ifdef SHARED - -extern void *__tls_get_addr (tls_index *ti); - /* The thread pointer points 0x7000 past the first static TLS block. */ -# define TLS_TP_OFFSET 0x7000 +#define TLS_TP_OFFSET 0x7000 /* Dynamic thread vector pointers point 0x8000 past the start of each TLS block. */ -# define TLS_DTV_OFFSET 0x8000 +#define TLS_DTV_OFFSET 0x8000 + +/* Compute the value for a @tprel reloc. */ +#define TLS_TPREL_VALUE(sym_map, sym, reloc) \ + ((sym_map)->l_tls_offset + (sym)->st_value + (reloc)->r_addend \ + - TLS_TCB_SIZE - TLS_TP_OFFSET) + +/* Compute the value for a @dtprel reloc. */ +#define TLS_DTPREL_VALUE(sym, reloc) \ + ((sym)->st_value + (reloc)->r_addend - TLS_DTV_OFFSET) + +#ifdef SHARED +extern void *__tls_get_addr (tls_index *ti); # define GET_ADDR_OFFSET (ti->ti_offset + TLS_DTV_OFFSET) # define __TLS_GET_ADDR(__ti) (__tls_get_addr (__ti) - TLS_DTV_OFFSET) - #endif |