summaryrefslogtreecommitdiffstats
path: root/libpthread/nptl/sysdeps/unix/sysv
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/nptl/sysdeps/unix/sysv
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/nptl/sysdeps/unix/sysv')
-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
5 files changed, 129 insertions, 13 deletions
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)