summaryrefslogtreecommitdiffstats
path: root/libpthread
diff options
context:
space:
mode:
author"Steven J. Hill" <sjhill@realitydiluted.com>2006-02-05 05:08:14 +0000
committer"Steven J. Hill" <sjhill@realitydiluted.com>2006-02-05 05:08:14 +0000
commit1e0b249c0b41a07e163abedc465a616fc47a4b99 (patch)
tree9b7ead0e02cab8fbe2a9e388d1f87198205a2be7 /libpthread
parent2992466eb586db5728301219c365193559636439 (diff)
downloaduClibc-alpine-1e0b249c0b41a07e163abedc465a616fc47a4b99.tar.bz2
uClibc-alpine-1e0b249c0b41a07e163abedc465a616fc47a4b99.tar.xz
Add in files and necessary make targets to autogenerate header files for various offsets needed for TLS storage access and low level locking which be used by architectures other than MIPS. (HINT: maybe I'm working other architectures for NPTL, maybe I'm not. I'll never tell.)
Diffstat (limited to 'libpthread')
-rw-r--r--libpthread/nptl/Makefile.in59
-rw-r--r--libpthread/nptl/pthread-errnos.sym12
-rw-r--r--libpthread/nptl/sysdeps/mips/Makefile.arch48
-rw-r--r--libpthread/nptl/sysdeps/mips/tcb-offsets.h3
-rw-r--r--libpthread/nptl/sysdeps/mips/tcb-offsets.sym11
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in94
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelbarrier.sym11
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelcond.sym16
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelrwlock.sym14
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/unwindbuf.sym7
10 files changed, 221 insertions, 54 deletions
diff --git a/libpthread/nptl/Makefile.in b/libpthread/nptl/Makefile.in
index 45f3bd1f2..84a1cd124 100644
--- a/libpthread/nptl/Makefile.in
+++ b/libpthread/nptl/Makefile.in
@@ -44,9 +44,6 @@ libpthread-routines = init vars events version \
pthread_cond_init pthread_cond_destroy \
pthread_cond_wait pthread_cond_timedwait \
pthread_cond_signal pthread_cond_broadcast \
- old_pthread_cond_init old_pthread_cond_destroy \
- old_pthread_cond_wait old_pthread_cond_timedwait \
- old_pthread_cond_signal old_pthread_cond_broadcast \
pthread_condattr_init pthread_condattr_destroy \
pthread_condattr_getpshared pthread_condattr_setpshared \
pthread_condattr_getclock pthread_condattr_setclock \
@@ -223,42 +220,42 @@ endif
libpthread_FULL_NAME := libpthread-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so
-libpthread_DIR := $(top_srcdir)libpthread/nptl
-libpthread_OUT := $(top_builddir)libpthread/nptl
+PTHREAD_DIR := $(top_srcdir)libpthread/nptl
+PTHREAD_OUT := $(top_builddir)libpthread/nptl
-libpthread_a_SRC = $(patsubst %, $(libpthread_DIR)/%.c, \
+libpthread_a_SRC = $(patsubst %, $(PTHREAD_DIR)/%.c, \
$(filter-out $(libpthread-os-routines) \
$(libpthread-misc-routines) \
$(libpthread-shared-only-routines), \
$(libpthread-routines)))
-libpthread_so_SRC = $(patsubst %, $(libpthread_DIR)/%.c, \
+libpthread_so_SRC = $(patsubst %, $(PTHREAD_DIR)/%.c, \
$(filter-out $(libpthread-os-routines) \
$(libpthread-misc-routines), $(libpthread-routines)))
-libc-a-y += $(patsubst %.c, $(libpthread_OUT)/%.o, alloca_cutoff.c \
+libc-a-y += $(patsubst %.c, $(PTHREAD_OUT)/%.o, alloca_cutoff.c \
forward.c libc-cancellation.c)
-libc-so-y += $(patsubst %.c, $(libpthread_OUT)/%.oS, forward.c \
+libc-so-y += $(patsubst %.c, $(PTHREAD_OUT)/%.oS, forward.c \
libc-cancellation.c)
-libpthread-a-y := $(patsubst $(libpthread_DIR)/%.c,$(libpthread_OUT)/%.o,$(libpthread_a_SRC))
-libpthread-so-y := $(patsubst $(libpthread_DIR)/%.c,$(libpthread_OUT)/%.oS,$(libpthread_so_SRC))
+libpthread-a-y := $(patsubst $(PTHREAD_DIR)/%.c,$(PTHREAD_OUT)/%.o,$(libpthread_a_SRC))
+libpthread-so-y := $(patsubst $(PTHREAD_DIR)/%.c,$(PTHREAD_OUT)/%.oS,$(libpthread_so_SRC))
--include $(libpthread_DIR)/sysdeps/pthread/Makefile.in
--include $(libpthread_DIR)/sysdeps/$(TARGET_ARCH)/Makefile.arch
--include $(libpthread_DIR)/sysdeps/unix/sysv/linux/Makefile.in
--include $(libpthread_DIR)/sysdeps/unix/sysv/linux/$(TARGET_ARCH)/Makefile.arch
+objclean-y += libpthread_clean
+headers_clean-y += nptl_headers_clean
+
+-include $(PTHREAD_DIR)/sysdeps/generic/Makefile.in
+-include $(PTHREAD_DIR)/sysdeps/pthread/Makefile.in
+-include $(PTHREAD_DIR)/sysdeps/$(TARGET_ARCH)/Makefile.arch
+-include $(PTHREAD_DIR)/sysdeps/unix/sysv/linux/Makefile.in
+-include $(PTHREAD_DIR)/sysdeps/unix/sysv/linux/$(TARGET_ARCH)/Makefile.arch
lib-a-y += $(top_builddir)lib/libpthread.a
lib-so-y += $(top_builddir)lib/libpthread.so
-objclean-y += libpthread_clean
-headers-y += nptl_headers
-headers_clean-y += nptl_headers_clean
-
-$(top_builddir)lib/libpthread.so: $(libpthread_OUT)/libpthread_so.a
+$(top_builddir)lib/libpthread.so: $(PTHREAD_OUT)/libpthread_so.a
$(call link.so,$(libpthread_FULL_NAME),$(MAJOR_VERSION))
-$(libpthread_OUT)/libpthread_so.a: $(libpthread-so-y)
+$(PTHREAD_OUT)/libpthread_so.a: $(libpthread-so-y)
$(Q)$(RM) $@
ifeq ($(PTHREADS_DEBUG_SUPPORT),y)
$(do_strip:-x=-X --strip-debug)
@@ -277,6 +274,20 @@ endif
$(do_strip)
$(do_ar)
+#
+# Create 'pthread-errnos.h' header file.
+#
+CFLAGS-pthread-errnos.c = -S
+
+$(PTHREAD_OUT)/pthread-errnos.c: $(PTHREAD_DIR)/pthread-errnos.sym
+ awk -f $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@
+
+$(PTHREAD_OUT)/pthread-errnos.s: $(PTHREAD_OUT)/pthread-errnos.c
+ $(compile.c)
+
+$(PTHREAD_OUT)/pthread-errnos.h: $(PTHREAD_OUT)/pthread-errnos.s
+ @sed -n "s/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$\/#define \1 \2/p" $< > $(PTHREAD_OUT)/pthread-errnos.h
+
nptl_headers:
@sed 's/\(.*\)/"\1\\n"/' $(PTDIR)/Banner > $(PTDIR)/banner.h
@echo "#define VERSION \""$(VERSION)"\"" > $(PTDIR)/version.h
@@ -287,10 +298,12 @@ nptl_headers:
$(LN) -sf ../../$(PTDIR)/sysdeps/unix/sysv/linux/$(TARGET_ARCH)/bits/pthreadtypes.h $(top_builddir)include/bits/
$(LN) -sf ../../$(PTDIR)/sysdeps/pthread/bits/libc-lock.h $(top_builddir)include/bits/
$(LN) -sf ../../$(PTDIR)/sysdeps/pthread/bits/stdio-lock.h $(top_builddir)include/bits/
+ $(MAKE) $(PTHREAD_OUT)/pthread-errnos.h
nptl_headers_clean:
$(RM) $(PTDIR)/banner.h $(top_builddir)include/pthread.h \
- $(PTDIR)/version.h $(top_builddir)include/semaphore.h
+ $(PTDIR)/version.h $(top_builddir)include/semaphore.h \
+ $(PTHREAD_OUT)/pthread-errnos.{c,h,s}
libpthread_clean:
- $(RM) $(libpthread_OUT)/*.{o,os,oS}
+ $(RM) $(PTHREAD_OUT)/*.{o,os,oS}
diff --git a/libpthread/nptl/pthread-errnos.sym b/libpthread/nptl/pthread-errnos.sym
new file mode 100644
index 000000000..2bb4d0d3c
--- /dev/null
+++ b/libpthread/nptl/pthread-errnos.sym
@@ -0,0 +1,12 @@
+#include <errno.h>
+
+-- These errno codes are used by some assembly code.
+
+EAGAIN EAGAIN
+EBUSY EBUSY
+EDEADLK EDEADLK
+EINTR EINTR
+EINVAL EINVAL
+ENOSYS ENOSYS
+ETIMEDOUT ETIMEDOUT
+EWOULDBLOCK EWOULDBLOCK
diff --git a/libpthread/nptl/sysdeps/mips/Makefile.arch b/libpthread/nptl/sysdeps/mips/Makefile.arch
index 4c73ef583..fa22a5454 100644
--- a/libpthread/nptl/sysdeps/mips/Makefile.arch
+++ b/libpthread/nptl/sysdeps/mips/Makefile.arch
@@ -6,38 +6,56 @@
#
libpthread_SSRC = pthread_spin_lock.S pthread_spin_trylock.S \
- nptl-syscall_error.S
+ nptl-sysdep.S
-libc_a_CSRC = dl-support.c dl-tls.c libc-tls.c
+libc_a_CSRC = libc-tls.c
CFLAGS-pt-raise.c = -DNOT_IN_libc=1 -DIS_IN_libpthread=1
-CFLAGS-dl-support.c = -D_GNU_SOURCE
ASFLAGS-pthread_spin_lock.S = -DNOT_IN_libc=1 -DIS_IN_libpthread=1
ASFLAGS-pthread_spin_trylock.S = -DNOT_IN_libc=1 -DIS_IN_libpthread=1
-ASFLAGS-nptl-syscall_error.S = -DNOT_IN_libc=1 -DIS_IN_libpthread=1 \
- -I$(top_srcdir)libc/sysdeps/linux/mips
+ASFLAGS-nptl-sysdep.S = -DNOT_IN_libc=1 -DIS_IN_libpthread=1 \
+ -I$(top_srcdir)libc/sysdeps/linux/mips
CFLAGS-mips = $(SSP_ALL_CFLAGS)
#CFLAGS:=$(CFLAGS:-O1=-O2)
-PTHREAD_ARCH_DIR:=$(top_srcdir)libpthread/nptl/sysdeps/mips
-PTHREAD_ARCH_OUT:=$(top_builddir)libpthread/nptl/sysdeps/mips
-
-PTHREAD_ARCH_OBJ:=$(patsubst %.S,$(PTHREAD_ARCH_OUT)/%.o,$(libpthread_SSRC))
+PTHREAD_ARCH_DIR := $(top_srcdir)libpthread/nptl/sysdeps/mips
+PTHREAD_ARCH_OUT := $(top_builddir)libpthread/nptl/sysdeps/mips
+PTHREAD_ARCH_OBJ := $(patsubst %.S,$(PTHREAD_ARCH_OUT)/%.o,$(libpthread_SSRC))
libpthread-a-y += $(PTHREAD_ARCH_OBJ)
libpthread-so-y += $(PTHREAD_ARCH_OBJ:.o=.oS)
-libpthread-nomulti-y+=$(PTHREAD_ARCH_OBJ)
+libpthread-nomulti-y += $(PTHREAD_ARCH_OBJ)
+
+LIBC_ARCH_OBJ := $(patsubst %.c,$(PTHREAD_ARCH_OUT)/%.o,$(libc_a_CSRC))
+
+libc-a-y += $(LIBC_ARCH_OBJ)
+
+libc-nomulti-y += $(LIBC_ARCH_OBJ)
+
+objclean-y += nptl_arch_objclean
+headers_clean-y += nptl_arch_headers_clean
+
+#
+# Create 'tcb-offsets.h' header file.
+#
+CFLAGS-tcb-offsets.c = -S
-LIBC_ARCH_OBJ:=$(patsubst %.c,$(PTHREAD_ARCH_OUT)/%.o,$(libc_a_CSRC))
+$(PTHREAD_ARCH_OUT)/tcb-offsets.c: $(PTHREAD_ARCH_DIR)/tcb-offsets.sym
+ awk -f $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@
-libc-a-y+=$(LIBC_ARCH_OBJ)
+$(PTHREAD_ARCH_OUT)/tcb-offsets.s: $(PTHREAD_ARCH_OUT)/tcb-offsets.c
+ $(compile.c)
-libc-nomulti-y+=$(LIBC_ARCH_OBJ)
+nptl_arch_headers: $(PTHREAD_ARCH_OUT)/tcb-offsets.s
+ @sed -n "s/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$\/#define \1 \2/p" $< > $(PTHREAD_ARCH_OUT)/tcb-offsets.h
-objclean-y+=pthread_arch_objclean
+nptl_arch_headers_clean:
+ $(RM) $(PTHREAD_ARCH_OUT)/tcb-offsets.c \
+ $(PTHREAD_ARCH_OUT)/tcb-offsets.s \
+ $(PTHREAD_ARCH_OUT)/tcb-offsets.h
-pthread_arch_objclean:
+nptl_arch_objclean:
$(RM) $(PTHREAD_ARCH_OUT)/*.{o,os,oS}
diff --git a/libpthread/nptl/sysdeps/mips/tcb-offsets.h b/libpthread/nptl/sysdeps/mips/tcb-offsets.h
deleted file mode 100644
index 3ba80c55d..000000000
--- a/libpthread/nptl/sysdeps/mips/tcb-offsets.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#define MULTIPLE_THREADS_OFFSET -29776
-#define PID_OFFSET -29700
-#define TID_OFFSET -29704
diff --git a/libpthread/nptl/sysdeps/mips/tcb-offsets.sym b/libpthread/nptl/sysdeps/mips/tcb-offsets.sym
new file mode 100644
index 000000000..e0e71dc43
--- /dev/null
+++ b/libpthread/nptl/sysdeps/mips/tcb-offsets.sym
@@ -0,0 +1,11 @@
+#include <sysdep.h>
+#include <tls.h>
+
+--
+
+-- Abuse tls.h macros to derive offsets relative to the thread register.
+#define thread_offsetof(mem) (long)(offsetof(struct pthread, mem) - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)
+
+MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads)
+PID_OFFSET thread_offsetof (pid)
+TID_OFFSET thread_offsetof (tid)
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in b/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in
index 8bd512731..a39ada190 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in
@@ -1,6 +1,6 @@
# Makefile for uClibc NPTL
#
-# Copyright (C) 2005 Steven J. Hill <sjhill@uclibc.org>
+# Copyright (C) 2006 Steven J. Hill <sjhill@uclibc.org>
#
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
@@ -13,10 +13,14 @@ libpthread_CSRC = pt-raise.c pthread_attr_getaffinity.c \
sem_trywait.c sem_wait.c pt-fork.c \
sigtimedwait.c sigwaitinfo.c sigwait.c sleep.c
+libpthread_SSRC = #ptw-close.S ptw-open.S ptw-waitid.S ptw-waidpid.S ptw-write.S
+
libc_CSRC = libc_pthread_init.c libc_multiple_threads.c \
register-atfork.c unregister-atfork.c getpid.c \
raise.c sleep.c
+libc_SSRC = #close.S open.S waitid.S waidpid.S write.S
+
ifeq ($(TARGET_ARCH),alpha)
libpthread_CSRC += lowlevellock.c
libc_CSRC += libc-lowlevellock.c
@@ -52,24 +56,88 @@ CFLAGS-OMIT-raise.c = -DNOT_IN_libc=1 -DIS_IN_libpthread=1
CFLAGS-OMIT-sleep.c = -DNOT_IN_libc=1 -DIS_IN_libpthread=1
CFLAGS-OMIT-libc-lowlevellock.c = -DNOT_IN_libc=1 -DIS_IN_libpthread=1
-linux_DIR := $(top_srcdir)/libpthread/nptl/sysdeps/unix/sysv/linux
-linux_OUT := $(top_builddir)/libpthread/nptl/sysdeps/unix/sysv/linux
+PTHREAD_LINUX_DIR := $(top_srcdir)/libpthread/nptl/sysdeps/unix/sysv/linux
+PTHREAD_LINUX_OUT := $(top_builddir)/libpthread/nptl/sysdeps/unix/sysv/linux
+
+PTHREAD_LINUX_OBJ := $(patsubst %.c,$(PTHREAD_LINUX_OUT)/%.o,$(libpthread_CSRC))
+PTHREAD_LINUX_OBJ += $(patsubst %.S,$(PTHREAD_LINUX_OUT)/%.o,$(libpthread_SSRC))
+
+libpthread-a-y += $(PTHREAD_LINUX_OBJ)
+libpthread-so-y += $(PTHREAD_LINUX_OBJ:.o=.oS)
+
+libpthread-nomulti-y += $(PTHREAD_LINUX_OBJ)
-PTHREAD_OBJ = $(patsubst %.c, $(linux_OUT)/%.o, $(libpthread_CSRC))
+LIBC_LINUX_OBJ := $(patsubst %.c,$(PTHREAD_LINUX_OUT)/%.o,$(libc_CSRC))
+LIBC_LINUX_OBJ += $(patsubst %.S,$(PTHREAD_LINUX_OUT)/%.o,$(libc_SSRC))
-libpthread-a-y += $(PTHREAD_OBJ)
-libpthread-so-y += $(PTHREAD_OBJ:.o=.oS)
+libc-a-y += $(LIBC_LINUX_OBJ)
+libc-so-y += $(LIBC_LINUX_OBJ:.o=.oS)
+
+libc-nomulti-y += $(LIBC_LINUX_OBJ)
+
+objclean-y += nptl_linux_objclean
+headers_clean-y += nptl_linux_headers_clean
#
-# Special suffix rules.
+# Create header files.
#
-LIBC_OBJ = $(patsubst %.c, $(linux_OUT)/%.o, $(libc_CSRC))
+CFLAGS-lowlevelbarrier.c = -S
+CFLAGS-lowlevelcond.c = -S
+CFLAGS-lowlevelrwlock.c = -S
+CFLAGS-unwindbuf.c = -S
+
+$(PTHREAD_LINUX_OUT)/lowlevelbarrier.c: $(PTHREAD_LINUX_DIR)/lowlevelbarrier.sym
+ awk -f $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@
+
+$(PTHREAD_LINUX_OUT)/lowlevelcond.c: $(PTHREAD_LINUX_DIR)/lowlevelcond.sym
+ awk -f $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@
+
+$(PTHREAD_LINUX_OUT)/lowlevelrwlock.c: $(PTHREAD_LINUX_DIR)/lowlevelrwlock.sym
+ awk -f $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@
+
+$(PTHREAD_LINUX_OUT)/unwindbuf.c: $(PTHREAD_LINUX_DIR)/unwindbuf.sym
+ awk -f $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@
+
+$(PTHREAD_LINUX_OUT)/lowlevelbarrier.s: $(PTHREAD_LINUX_OUT)/lowlevelbarrier.c
+ $(compile.c)
+
+$(PTHREAD_LINUX_OUT)/lowlevelcond.s: $(PTHREAD_LINUX_OUT)/lowlevelcond.c
+ $(compile.c)
+
+$(PTHREAD_LINUX_OUT)/lowlevelrwlock.s: $(PTHREAD_LINUX_OUT)/lowlevelrwlock.c
+ $(compile.c)
+
+$(PTHREAD_LINUX_OUT)/unwindbuf.s: $(PTHREAD_LINUX_OUT)/unwindbuf.c
+ $(compile.c)
+
+$(PTHREAD_LINUX_OUT)/lowlevelbarrier.h: $(PTHREAD_LINUX_OUT)/lowlevelbarrier.s
+ @sed -n "s/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$\/#define \1 \2/p" $< > $@
+
+$(PTHREAD_LINUX_OUT)/lowlevelcond.h: $(PTHREAD_LINUX_OUT)/lowlevelcond.s
+ @sed -n "s/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$\/#define \1 \2/p" $< > $@
+
+$(PTHREAD_LINUX_OUT)/lowlevelrwlock.h: $(PTHREAD_LINUX_OUT)/lowlevelrwlock.s
+ @sed -n "s/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$\/#define \1 \2/p" $< > $@
+
+$(PTHREAD_LINUX_OUT)/unwindbuf.h: $(PTHREAD_LINUX_OUT)/unwindbuf.s
+ @sed -n "s/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$\/#define \1 \2/p" $< > $@
+ptw-%.oS:
+ $(PTHREAD_LINUX_OUT)/sjh.sh $* > $(PTHREAD_LINUX_OUT)/tmp.S
+ $(compile.S) -x assembler-with-cpp tmp.S
-libc-a-y += $(LIBC_OBJ)
-libc-so-y += $(LIBC_OBJ:.o=.oS)
+nptl_linux_headers:
+ $(MAKE) $(PTHREAD_LINUX_OUT)/lowlevelbarrier.h
+ $(MAKE) $(PTHREAD_LINUX_OUT)/lowlevelcond.h
+ $(MAKE) $(PTHREAD_LINUX_OUT)/lowlevelrwlock.h
+ $(MAKE) $(PTHREAD_LINUX_OUT)/unwindbuf.h
+ $(LN) -sf ../../$(PTHREAD_LINUX_DIR)/bits/local_lim.h $(top_builddir)include/bits
-objclean-y += pthread_linux_objclean
+nptl_linux_headers_clean:
+ $(RM) $(PTHREAD_LINUX_OUT)/lowlevelbarrier.{c,h,s} \
+ $(RM) $(PTHREAD_LINUX_OUT)/lowlevelcond.{c,h,s} \
+ $(RM) $(PTHREAD_LINUX_OUT)/lowlevelrwlock.{c,h,s} \
+ $(RM) $(PTHREAD_LINUX_OUT)/unwindbuf.{c,h,s}
-pthread_linux_objclean:
- $(RM) $(linux_OUT)/*.{o,os,oS}
+nptl_linux_objclean:
+ $(RM) $(PTHREAD_LINUX_OUT)/*.{o,os,oS}
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelbarrier.sym b/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelbarrier.sym
new file mode 100644
index 000000000..36e28eb2a
--- /dev/null
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelbarrier.sym
@@ -0,0 +1,11 @@
+#include <stddef.h>
+#include <sched.h>
+#include <bits/pthreadtypes.h>
+#include "internaltypes.h"
+
+--
+
+CURR_EVENT offsetof (struct pthread_barrier, curr_event)
+MUTEX offsetof (struct pthread_barrier, lock)
+LEFT offsetof (struct pthread_barrier, left)
+INIT_COUNT offsetof (struct pthread_barrier, init_count)
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelcond.sym b/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelcond.sym
new file mode 100644
index 000000000..c5e797806
--- /dev/null
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelcond.sym
@@ -0,0 +1,16 @@
+#include <stddef.h>
+#include <sched.h>
+#include <bits/pthreadtypes.h>
+#include <internaltypes.h>
+
+--
+
+cond_lock offsetof (pthread_cond_t, __data.__lock)
+cond_futex offsetof (pthread_cond_t, __data.__futex)
+cond_nwaiters offsetof (pthread_cond_t, __data.__nwaiters)
+total_seq offsetof (pthread_cond_t, __data.__total_seq)
+wakeup_seq offsetof (pthread_cond_t, __data.__wakeup_seq)
+woken_seq offsetof (pthread_cond_t, __data.__woken_seq)
+dep_mutex offsetof (pthread_cond_t, __data.__mutex)
+broadcast_seq offsetof (pthread_cond_t, __data.__broadcast_seq)
+clock_bits COND_CLOCK_BITS
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelrwlock.sym b/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelrwlock.sym
new file mode 100644
index 000000000..e82c878d3
--- /dev/null
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevelrwlock.sym
@@ -0,0 +1,14 @@
+#include <stddef.h>
+#include <stdio.h>
+#include <bits/pthreadtypes.h>
+
+--
+
+MUTEX offsetof (pthread_rwlock_t, __data.__lock)
+NR_READERS offsetof (pthread_rwlock_t, __data.__nr_readers)
+READERS_WAKEUP offsetof (pthread_rwlock_t, __data.__readers_wakeup)
+WRITERS_WAKEUP offsetof (pthread_rwlock_t, __data.__writer_wakeup)
+READERS_QUEUED offsetof (pthread_rwlock_t, __data.__nr_readers_queued)
+WRITERS_QUEUED offsetof (pthread_rwlock_t, __data.__nr_writers_queued)
+FLAGS offsetof (pthread_rwlock_t, __data.__flags)
+WRITER offsetof (pthread_rwlock_t, __data.__writer)
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/unwindbuf.sym b/libpthread/nptl/sysdeps/unix/sysv/linux/unwindbuf.sym
new file mode 100644
index 000000000..8044b4078
--- /dev/null
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/unwindbuf.sym
@@ -0,0 +1,7 @@
+#include <pthread.h>
+#include <stddef.h>
+
+--
+
+UNWINDBUFSIZE sizeof (__pthread_unwind_buf_t)
+UWJMPBUF offsetof (__pthread_unwind_buf_t, __cancel_jmp_buf)