Back to index

glibc  2.9
Classes | Defines | Typedefs | Functions
tls.h File Reference
#include <dl-sysdep.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <list.h>
#include <sysdep.h>
#include <nptl/descr.h>

Go to the source code of this file.

Classes

union  dtv
struct  tcbhead_t
struct  dtv.pointer

Defines

#define TLS_MULTIPLE_THREADS_IN_TCB   1
#define STACK_ALIGN   16
#define TLS_INIT_TCB_SIZE   sizeof (tcbhead_t)
#define TLS_INIT_TCB_ALIGN   __alignof__ (tcbhead_t)
#define TLS_TCB_SIZE   sizeof (tcbhead_t)
#define TLS_PRE_TCB_SIZE
#define TLS_TCB_ALIGN   __alignof__ (struct pthread)
#define TLS_DTV_AT_TP   1
#define INSTALL_DTV(descr, dtvp)   ((tcbhead_t *) (descr))->dtv = (dtvp) + 1
#define INSTALL_NEW_DTV(DTV)   (((tcbhead_t *)__thread_self)->dtv = (DTV))
#define GET_DTV(descr)   (((tcbhead_t *) (descr))->dtv)
#define THREAD_SELF_SYSINFO   (((tcbhead_t *) __thread_self)->__private)
#define THREAD_SYSINFO(pd)   (((tcbhead_t *) ((char *) (pd) + TLS_PRE_TCB_SIZE))->__private)
#define INIT_SYSINFO   NULL
#define TLS_INIT_TP(thrdescr, secondcall)   (__thread_self = (thrdescr), INIT_SYSINFO, NULL)
#define THREAD_DTV()   (((tcbhead_t *)__thread_self)->dtv)
#define THREAD_SELF   ((struct pthread *) ((char *) __thread_self - TLS_PRE_TCB_SIZE))
#define DB_THREAD_SELF   REGISTER (64, 64, 13 * 8, -TLS_PRE_TCB_SIZE)
#define THREAD_GETMEM(descr, member)   descr->member
#define THREAD_GETMEM_NC(descr, member, idx)   descr->member[idx]
#define THREAD_SETMEM(descr, member, value)   descr->member = (value)
#define THREAD_SETMEM_NC(descr, member, idx, value)   descr->member[idx] = (value)
#define THREAD_SET_STACK_GUARD(value)   (((uintptr_t *) __thread_self)[-1] = (value))
#define THREAD_COPY_STACK_GUARD(descr)
#define THREAD_GET_POINTER_GUARD()   (((uintptr_t *) __thread_self)[-2])
#define THREAD_SET_POINTER_GUARD(value)   (((uintptr_t *) __thread_self)[-2] = (value))
#define THREAD_COPY_POINTER_GUARD(descr)
#define THREAD_GSCOPE_FLAG_UNUSED   0
#define THREAD_GSCOPE_FLAG_USED   1
#define THREAD_GSCOPE_FLAG_WAIT   2
#define THREAD_GSCOPE_RESET_FLAG()
#define THREAD_GSCOPE_SET_FLAG()
#define THREAD_GSCOPE_WAIT()   GL(dl_wait_lookup_done) ()

Typedefs

typedef union dtv dtv_t

Functions

register struct pthread
*__thread_self 
__asm__ ("r13")

Class Documentation

union dtv

Definition at line 30 of file tls.h.

Class Members
size_t counter
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct dtv pointer
struct tcbhead_t

Definition at line 41 of file tls.h.

Collaboration diagram for tcbhead_t:
Class Members
void * __private
dtv_t * dtv
int gscope_flag
int multiple_threads
uintptr_t pointer_guard
void * private
int private_futex
void * self
uintptr_t stack_guard
uintptr_t sysinfo
void * tcb
unsigned long int vgetcpu_cache
struct dtv.pointer

Definition at line 36 of file tls.h.

Class Members
bool is_static
void * val

Define Documentation

#define DB_THREAD_SELF   REGISTER (64, 64, 13 * 8, -TLS_PRE_TCB_SIZE)

Definition at line 138 of file tls.h.

#define GET_DTV (   descr)    (((tcbhead_t *) (descr))->dtv)

Definition at line 110 of file tls.h.

#define INIT_SYSINFO   NULL

Definition at line 120 of file tls.h.

#define INSTALL_DTV (   descr,
  dtvp 
)    ((tcbhead_t *) (descr))->dtv = (dtvp) + 1

Definition at line 102 of file tls.h.

#define INSTALL_NEW_DTV (   DTV)    (((tcbhead_t *)__thread_self)->dtv = (DTV))

Definition at line 106 of file tls.h.

#define STACK_ALIGN   16

Definition at line 65 of file tls.h.

#define THREAD_COPY_POINTER_GUARD (   descr)
Value:
(((uintptr_t *) ((char *) (descr) + TLS_PRE_TCB_SIZE))[-2] \
   = THREAD_GET_POINTER_GUARD ())

Definition at line 162 of file tls.h.

#define THREAD_COPY_STACK_GUARD (   descr)
Value:
(((uintptr_t *) ((char *) (descr) + TLS_PRE_TCB_SIZE))[-1] \
   = ((uintptr_t *) __thread_self)[-1])

Definition at line 153 of file tls.h.

#define THREAD_DTV ( )    (((tcbhead_t *)__thread_self)->dtv)

Definition at line 130 of file tls.h.

#define THREAD_GET_POINTER_GUARD ( )    (((uintptr_t *) __thread_self)[-2])

Definition at line 158 of file tls.h.

#define THREAD_GETMEM (   descr,
  member 
)    descr->member

Definition at line 141 of file tls.h.

#define THREAD_GETMEM_NC (   descr,
  member,
  idx 
)    descr->member[idx]

Definition at line 143 of file tls.h.

#define THREAD_GSCOPE_FLAG_UNUSED   0

Definition at line 167 of file tls.h.

#define THREAD_GSCOPE_FLAG_USED   1

Definition at line 168 of file tls.h.

#define THREAD_GSCOPE_FLAG_WAIT   2

Definition at line 169 of file tls.h.

Value:
do                                                                  \
    { int __res                                                            \
       = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag,            \
                            THREAD_GSCOPE_FLAG_UNUSED);             \
      if (__res == THREAD_GSCOPE_FLAG_WAIT)                                \
       lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE);   \
    }                                                               \
  while (0)

Definition at line 170 of file tls.h.

Value:
do                                                                  \
    {                                                               \
      THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED;           \
      atomic_write_barrier ();                                             \
    }                                                               \
  while (0)

Definition at line 179 of file tls.h.

#define THREAD_GSCOPE_WAIT ( )    GL(dl_wait_lookup_done) ()

Definition at line 186 of file tls.h.

#define THREAD_SELF   ((struct pthread *) ((char *) __thread_self - TLS_PRE_TCB_SIZE))

Definition at line 134 of file tls.h.

#define THREAD_SELF_SYSINFO   (((tcbhead_t *) __thread_self)->__private)

Definition at line 113 of file tls.h.

#define THREAD_SET_POINTER_GUARD (   value)    (((uintptr_t *) __thread_self)[-2] = (value))

Definition at line 160 of file tls.h.

#define THREAD_SET_STACK_GUARD (   value)    (((uintptr_t *) __thread_self)[-1] = (value))

Definition at line 151 of file tls.h.

#define THREAD_SETMEM (   descr,
  member,
  value 
)    descr->member = (value)

Definition at line 145 of file tls.h.

#define THREAD_SETMEM_NC (   descr,
  member,
  idx,
  value 
)    descr->member[idx] = (value)

Definition at line 147 of file tls.h.

#define THREAD_SYSINFO (   pd)    (((tcbhead_t *) ((char *) (pd) + TLS_PRE_TCB_SIZE))->__private)

Definition at line 114 of file tls.h.

#define TLS_DTV_AT_TP   1

Definition at line 95 of file tls.h.

#define TLS_INIT_TCB_ALIGN   __alignof__ (tcbhead_t)

Definition at line 75 of file tls.h.

#define TLS_INIT_TCB_SIZE   sizeof (tcbhead_t)

Definition at line 72 of file tls.h.

#define TLS_INIT_TP (   thrdescr,
  secondcall 
)    (__thread_self = (thrdescr), INIT_SYSINFO, NULL)

Definition at line 126 of file tls.h.

Definition at line 52 of file tls.h.

Value:
(sizeof (struct pthread)                                       \
   + (PTHREAD_STRUCT_END_PADDING < 2 * sizeof (uintptr_t)             \
      ? ((2 * sizeof (uintptr_t) + __alignof__ (struct pthread) - 1)  \
        & ~(__alignof__ (struct pthread) - 1))                        \
      : 0))

Definition at line 84 of file tls.h.

#define TLS_TCB_ALIGN   __alignof__ (struct pthread)

Definition at line 92 of file tls.h.

#define TLS_TCB_SIZE   sizeof (tcbhead_t)

Definition at line 78 of file tls.h.


Typedef Documentation

typedef union dtv dtv_t

Function Documentation

register struct pthread* __thread_self __asm__ ( "r13"  ) [read]