aboutsummaryrefslogtreecommitdiff
path: root/nptl/descr.h
diff options
context:
space:
mode:
Diffstat (limited to 'nptl/descr.h')
-rw-r--r--nptl/descr.h125
1 files changed, 6 insertions, 119 deletions
diff --git a/nptl/descr.h b/nptl/descr.h
index 241ba527ed..454bb2a547 100644
--- a/nptl/descr.h
+++ b/nptl/descr.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -97,28 +97,11 @@ struct pthread_unwind_buf
struct xid_command
{
int syscall_no;
- long int id[3];
+ long id[3];
volatile int cntr;
};
-/* Data structure used by the kernel to find robust futexes. */
-struct robust_list_head
-{
- void *list;
- long int futex_offset;
- void *list_op_pending;
-};
-
-
-/* Data strcture used to handle thread priority protection. */
-struct priority_protection_data
-{
- int priomax;
- unsigned int priomap[];
-};
-
-
/* Thread descriptor data structure. */
struct pthread
{
@@ -131,7 +114,6 @@ struct pthread
struct
{
int multiple_threads;
- int gscope_flag;
} header;
#endif
@@ -152,82 +134,6 @@ struct pthread
/* Process ID - thread group ID in kernel speak. */
pid_t pid;
- /* List of robust mutexes the thread is holding. */
-#ifdef __PTHREAD_MUTEX_HAVE_PREV
- void *robust_prev;
- struct robust_list_head robust_head;
-
- /* The list above is strange. It is basically a double linked list
- but the pointer to the next/previous element of the list points
- in the middle of the object, the __next element. Whenever
- casting to __pthread_list_t we need to adjust the pointer
- first. */
-# define QUEUE_PTR_ADJUST (offsetof (__pthread_list_t, __next))
-
-# define ENQUEUE_MUTEX_BOTH(mutex, val) \
- do { \
- __pthread_list_t *next = (__pthread_list_t *) \
- ((((uintptr_t) THREAD_GETMEM (THREAD_SELF, robust_head.list)) & ~1ul) \
- - QUEUE_PTR_ADJUST); \
- next->__prev = (void *) &mutex->__data.__list.__next; \
- mutex->__data.__list.__next = THREAD_GETMEM (THREAD_SELF, \
- robust_head.list); \
- mutex->__data.__list.__prev = (void *) &THREAD_SELF->robust_head; \
- THREAD_SETMEM (THREAD_SELF, robust_head.list, \
- (void *) (((uintptr_t) &mutex->__data.__list.__next) \
- | val)); \
- } while (0)
-# define DEQUEUE_MUTEX(mutex) \
- do { \
- __pthread_list_t *next = (__pthread_list_t *) \
- ((char *) (((uintptr_t) mutex->__data.__list.__next) & ~1ul) \
- - QUEUE_PTR_ADJUST); \
- next->__prev = mutex->__data.__list.__prev; \
- __pthread_list_t *prev = (__pthread_list_t *) \
- ((char *) (((uintptr_t) mutex->__data.__list.__prev) & ~1ul) \
- - QUEUE_PTR_ADJUST); \
- prev->__next = mutex->__data.__list.__next; \
- mutex->__data.__list.__prev = NULL; \
- mutex->__data.__list.__next = NULL; \
- } while (0)
-#else
- union
- {
- __pthread_slist_t robust_list;
- struct robust_list_head robust_head;
- };
-
-# define ENQUEUE_MUTEX_BOTH(mutex, val) \
- do { \
- mutex->__data.__list.__next \
- = THREAD_GETMEM (THREAD_SELF, robust_list.__next); \
- THREAD_SETMEM (THREAD_SELF, robust_list.__next, \
- (void *) (((uintptr_t) &mutex->__data.__list) | val)); \
- } while (0)
-# define DEQUEUE_MUTEX(mutex) \
- do { \
- __pthread_slist_t *runp = (__pthread_slist_t *) \
- (((uintptr_t) THREAD_GETMEM (THREAD_SELF, robust_list.__next)) & ~1ul); \
- if (runp == &mutex->__data.__list) \
- THREAD_SETMEM (THREAD_SELF, robust_list.__next, runp->__next); \
- else \
- { \
- __pthread_slist_t *next = (__pthread_slist_t *) \
- (((uintptr_t) runp->__next) & ~1ul); \
- while (next != &mutex->__data.__list) \
- { \
- runp = next; \
- next = (__pthread_slist_t *) (((uintptr_t) runp->__next) & ~1ul); \
- } \
- \
- runp->__next = next->__next; \
- mutex->__data.__list.__next = NULL; \
- } \
- } while (0)
-#endif
-#define ENQUEUE_MUTEX(mutex) ENQUEUE_MUTEX_BOTH (mutex, 0)
-#define ENQUEUE_MUTEX_PI(mutex) ENQUEUE_MUTEX_BOTH (mutex, 1)
-
/* List of cleanup buffers. */
struct _pthread_cleanup_buffer *cleanup;
@@ -255,11 +161,8 @@ struct pthread
/* Bit set if thread terminated and TCB is freed. */
#define TERMINATED_BIT 5
#define TERMINATED_BITMASK 0x20
- /* Bit set if thread is supposed to change XID. */
-#define SETXID_BIT 6
-#define SETXID_BITMASK 0x40
/* Mask for the rest. Helps the compiler to optimize. */
-#define CANCEL_RESTMASK 0xffffff80
+#define CANCEL_RESTMASK 0xffffffc0
#define CANCEL_ENABLED_AND_CANCELED(value) \
(((value) & (CANCELSTATE_BITMASK | CANCELED_BITMASK | EXITING_BITMASK \
@@ -282,12 +185,12 @@ struct pthread
void *data;
} specific_1stblock[PTHREAD_KEY_2NDLEVEL_SIZE];
- /* Two-level array for the thread-specific data. */
- struct pthread_key_data *specific[PTHREAD_KEY_1STLEVEL_SIZE];
-
/* Flag which is set when specific data is set. */
bool specific_used;
+ /* Two-level array for the thread-specific data. */
+ struct pthread_key_data *specific[PTHREAD_KEY_1STLEVEL_SIZE];
+
/* True if events must be reported. */
bool report_events;
@@ -297,16 +200,9 @@ struct pthread
/* True if thread must stop at startup time. */
bool stopped_start;
- /* The parent's cancel handling at the time of the pthread_create
- call. This might be needed to undo the effects of a cancellation. */
- int parent_cancelhandling;
-
/* Lock to synchronize access to the descriptor. */
lll_lock_t lock;
- /* Lock for synchronizing setxid calls. */
- lll_lock_t setxid_futex;
-
#if HP_TIMING_AVAIL
/* Offset of the CPU clock at start thread start time. */
hp_timing_t cpuclock_offset;
@@ -356,17 +252,8 @@ struct pthread
/* This is what the user specified and what we will report. */
size_t reported_guardsize;
- /* Thread Priority Protection data. */
- struct priority_protection_data *tpp;
-
/* Resolver state. */
struct __res_state res;
-
- /* This member must be last. */
- char end_padding[];
-
-#define PTHREAD_STRUCT_END_PADDING \
- (sizeof (struct pthread) - offsetof (struct pthread, end_padding))
} __attribute ((aligned (TCB_ALIGNMENT)));