+2007-05-26 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/unix/sysv/linux/powerpc/libc-start.c: Include <sysdep.h>.
+
2007-05-25 Jakub Jelinek <jakub@redhat.com>
* io/bits/fcntl2.h (__open_2): Add nonnull attribute.
2007-05-26 Ulrich Drepper <drepper@redhat.com>
+ * sysdeps/unix/sysv/linux/sem_wait.c: Add missing break.
+ * sysdeps/unix/sysv/linux/sem_timedwait.c: Removed left-over
+ duplication of __sem_wait_cleanup.
+
+ * allocatestack.c: Revert last change.
+ * init.c: Likewise.
+ * sysdeps/i386/tls.h: Likewise.
+ * sysdeps/x86_64/tls.h: Likewise.
+ * descr.h [TLS_DTV_AT_TP] (struct pthread): Add private_futex field to
+ header structure.
+ * sysdeps/powerpc/tcb-offsets.sym: Add PRIVATE_FUTEX_OFFSET.
+
* sysdeps/unix/sysv/linux/internaltypes.h (struct pthread_barrier):
Add private field.
* sysdeps/unix/sysv/linux/lowlevelbarrier.sym: Add PRIVATE definition.
__pthread_multiple_threads = *__libc_multiple_threads_ptr = 1;
#endif
-#ifdef THREAD_COPY_PRIVATE_FUTEX
+#ifndef __ASSUME_PRIVATE_FUTEX
/* The thread must know when private futexes are supported. */
- THREAD_COPY_PRIVATE_FUTEX (pd);
+ pd->header.private_futex = THREAD_GETMEM (THREAD_SELF,
+ header.private_futex);
#endif
#ifdef NEED_DL_SYSINFO
#endif
#define __need_res_state
#include <resolv.h>
+#include <kernel-features.h>
#ifndef TCB_ALIGNMENT
# define TCB_ALIGNMENT sizeof (double)
struct
{
int multiple_threads;
+# ifndef __ASSUME_PRIVATE_FUTEX
+ int private_futex;
+# endif
} header;
#endif
res = INTERNAL_SYSCALL (futex, err, 3, &word,
FUTEX_WAKE | FUTEX_PRIVATE_FLAG, 1);
if (!INTERNAL_SYSCALL_ERROR_P (res, err))
- THREAD_SET_PRIVATE_FUTEX (FUTEX_PRIVATE_FLAG);
+ pd->header.private_futex = FUTEX_PRIVATE_FLAG;
}
#endif
#define THREAD_GSCOPE_WAIT() \
GL(dl_wait_lookup_done) ()
-
-#ifndef __ASSUME_PRIVATE_FUTEX
-# define THREAD_SET_PRIVATE_FUTEX(value) \
- THREAD_SETMEM (THREAD_SELF, header.private_futex, value)
-# define THREAD_COPY_PRIVATE_FUTEX(descr) \
- ((descr)->header.private_futex \
- = THREAD_GETMEM (THREAD_SELF, header.private_futex))
-#endif
-
-
#endif /* __ASSEMBLER__ */
#endif /* tls.h */
PID thread_offsetof (pid)
TID thread_offsetof (tid)
POINTER_GUARD (offsetof (tcbhead_t, pointer_guard) - TLS_TCB_OFFSET - sizeof (tcbhead_t))
+PRIVATE_FUTEX_OFFSET thread_offsetof (header.private_futex)
extern void __sem_wait_cleanup (void *arg) attribute_hidden;
-void
-attribute_hidden
-__sem_wait_cleanup (void *arg)
-{
- struct new_sem *isem = (struct new_sem *) arg;
-
- atomic_decrement (&isem->nwaiters);
-}
-
-
int
sem_timedwait (sem_t *sem, const struct timespec *abstime)
{
{
__set_errno (-err);
err = -1;
+ break;
}
if (atomic_decrement_if_positive (&isem->value) > 0)
#define THREAD_GSCOPE_WAIT() \
GL(dl_wait_lookup_done) ()
-#ifndef __ASSUME_PRIVATE_FUTEX
-# define THREAD_SET_PRIVATE_FUTEX(value) \
- THREAD_SETMEM (THREAD_SELF, header.private_futex, value)
-# define THREAD_COPY_PRIVATE_FUTEX(descr) \
- ((descr)->header.private_futex \
- = THREAD_GETMEM (THREAD_SELF, header.private_futex))
-#endif
-
#endif /* __ASSEMBLER__ */
#endif /* tls.h */
#include <stdlib.h>
#include <unistd.h>
#include <ldsodefs.h>
+#include <sysdep.h>
#include <bp-start.h>
#include <bp-sym.h>