diff options
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 |
commit | 1e0b249c0b41a07e163abedc465a616fc47a4b99 (patch) | |
tree | 9b7ead0e02cab8fbe2a9e388d1f87198205a2be7 /libpthread/nptl/sysdeps/unix/sysv/linux | |
parent | 2992466eb586db5728301219c365193559636439 (diff) | |
download | uClibc-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/linux')
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) |