diff options
Diffstat (limited to 'devel/linuxthreads/files')
-rw-r--r-- | devel/linuxthreads/files/README.FreeBSD | 21 | ||||
-rw-r--r-- | devel/linuxthreads/files/_pthreadtypes.h | 45 | ||||
-rw-r--r-- | devel/linuxthreads/files/patch-aa | 67 | ||||
-rw-r--r-- | devel/linuxthreads/files/wraputhread.c | 14 |
4 files changed, 135 insertions, 12 deletions
diff --git a/devel/linuxthreads/files/README.FreeBSD b/devel/linuxthreads/files/README.FreeBSD index d59a697de9d1..7aacaa3b5190 100644 --- a/devel/linuxthreads/files/README.FreeBSD +++ b/devel/linuxthreads/files/README.FreeBSD @@ -138,3 +138,24 @@ set at 20 + 16 * MAXUSERS. as if the kernel was compiled without the _KPOSIX_PRIORITY_SCHEDULING option, but limited to the linuxthread library. +7) libraries using SIGUSR2 or SIGUSR1 will conflict with linuxthreads. + SIGUSR1 is hardcoded in the FreeBSD kernel (cf. RFLINUXTHPN flag + passed to rfork()), but the linuxthreads library can be changed to use + another signal instead of SIGUSR2 by defining LINUXTHREADS_ALT_RESTARTSIG + to the alternate signal number (e.g. 32). + +8) By default, the maximum thread stack size is 2 MB, and the maximum + number of threads is 1024. Layout of stacks are based on the + maximum thread stack size. This means that 2 GB of the address space + can be used by thread stacks, limiting what is left for other + purposes (text, data, bss, heap, mmap). To shrink the address range + used for thread stacks, the maximum thread stack size can be changed + by defining LINUXTHREADS_MAX_STACK_SIZE to a suitable value, e.g. + 1048576. The maximum number of threads can be changed by defining + LINUXTHREADS_MAX_THREADS to a suitable value, e.g. 2048. + The product of the maximum thread stack size and the maximum number + of threads should not exceed 2 GB. The maximum stack size must be + a power of 2. + +9) The complete FreeBSD source code matching the installed userland + must be installed in /usr/src before building linuxthreads. diff --git a/devel/linuxthreads/files/_pthreadtypes.h b/devel/linuxthreads/files/_pthreadtypes.h new file mode 100644 index 000000000000..7b485dc568de --- /dev/null +++ b/devel/linuxthreads/files/_pthreadtypes.h @@ -0,0 +1,45 @@ +/*- + * Copyright (c) 2005 Yahoo! Technologies Norway AS + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef _LINUXTHREADS_SYS__PTHREADTYPES_H +#define _LINUXTHREADS_SYS__PTHREADTYPES_H + +#ifndef _SIZE_T_DECLARED +typedef __size_t size_t; +#define _SIZE_T_DECLARED +#endif + +#include <sched.h> + +#ifdef _BITS_TYPES_H +#include <bits/pthreadtypes.h> +#else +#define _BITS_TYPES_H +#include <bits/pthreadtypes.h> +#undef _BITS_TYPES_H +#endif + +#endif diff --git a/devel/linuxthreads/files/patch-aa b/devel/linuxthreads/files/patch-aa index 58e262ed0b75..31cb50737af6 100644 --- a/devel/linuxthreads/files/patch-aa +++ b/devel/linuxthreads/files/patch-aa @@ -13,7 +13,7 @@ diff -ru ../../work/linuxthreads-2.2.3/Examples/Makefile ./Examples/Makefile diff -ru ../../work/linuxthreads-2.2.3/Makefile ./Makefile --- ../../work/linuxthreads-2.2.3/Makefile Wed Apr 25 21:50:59 2001 +++ ./Makefile Thu Jun 7 23:13:52 2001 -@@ -1,128 +1,126 @@ +@@ -1,128 +1,143 @@ -# Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. -# This file is part of the GNU C Library. +LIB=lthread @@ -65,6 +65,12 @@ diff -ru ../../work/linuxthreads-2.2.3/Makefile ./Makefile +CFLAGS += -DLINUXTHREADS +CFLAGS += -D__USE_UNIX98 +CFLAGS += -D__USE_XOPEN2K -D_STACK_GROWS_DOWN -DNEWLIBC -D_THREAD_SAFE ++.if defined(LINUXTHREADS_MAX_STACK_SIZE) ++CFLAGS += -DSTACK_SIZE=$(LINUXTHREADS_MAX_STACK_SIZE) ++.endif ++.if defined(LINUXTHREADS_MAX_THREADS) ++CFLAGS += -DPTHREAD_THREADS_MAX=$(LINUXTHREADS_MAX_THREADS) ++.endif +.if defined(LINUXTHREADS_DETECT_UNSAFE_EXIT) +CFLAGS += -DLINUXTHREADS_DETECT_UNSAFE_EXIT +.endif @@ -78,6 +84,10 @@ diff -ru ../../work/linuxthreads-2.2.3/Makefile ./Makefile +CFLAGS += -DLINUXTHREADS_NO_POSIX_PRIORITY_SCHEDULING +.endif + ++.if defined(LINUXTHREADS_ALT_RESTARTSIG) ++CFLAGS += -DLINUXTHREADS_ALT_RESTARTSIG=${LINUXTHREADS_ALT_RESTARTSIG} ++.endif ++ +CFLAGS += -I${LIBSRC_BASE}/libc/${MACHINE_ARCH} -I${.CURDIR}/sysdeps/${MACHINE_ARCH} + +# Contents of the library. @@ -115,6 +125,13 @@ diff -ru ../../work/linuxthreads-2.2.3/Makefile ./Makefile + ${.CURDIR}/sysdeps/unix/sysv/linux/bits/$(hdr) \ + ${PREFIX}/include/pthread/linuxthreads/bits/$(hdr) +.endfor ++ ${INSTALL} -d -o ${BINOWN} -g ${BINGRP} -m 0755 \ ++ ${PREFIX}/include/pthread/linuxthreads/sys ++.for hdr in _pthreadtypes.h ++ ${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 \ ++ ${.CURDIR}/sys/$(hdr) \ ++ ${PREFIX}/include/pthread/linuxthreads/sys/$(hdr) ++.endfor +.for hdr in pt-machine.h useldt.h + ${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 \ + ${.CURDIR}/sysdeps/i386/$(hdr) \ @@ -749,13 +766,17 @@ diff -ru ../../work/linuxthreads-2.2.3/pthread.c ./pthread.c static void pthread_handle_sigcancel(int sig); static void pthread_handle_sigrestart(int sig); static void pthread_handle_sigdebug(int sig); -@@ -238,8 +246,8 @@ +@@ -238,8 +246,12 @@ #ifndef __SIGRTMIN static int current_rtmin = -1; static int current_rtmax = -1; -int __pthread_sig_restart = SIGUSR1; -int __pthread_sig_cancel = SIGUSR2; ++#ifdef LINUXTHREADS_ALT_RESTARTSIG ++int __pthread_sig_restart = LINUXTHREADS_ALT_RESTARTSIG; ++#else +int __pthread_sig_restart = SIGUSR2; ++#endif +int __pthread_sig_cancel = SIGUSR1; int __pthread_sig_debug; #else @@ -1105,7 +1126,15 @@ diff -ru ../../work/linuxthreads-2.2.3/signals.c ./signals.c { pthread_descr self; char * in_sighandler; -@@ -145,9 +144,9 @@ +@@ -130,6 +129,7 @@ + { + struct sigaction newact; + struct sigaction *newactp; ++ arch_sighandler_t user_oact; + + if (sig == __pthread_sig_restart || + sig == __pthread_sig_cancel || +@@ -145,20 +145,34 @@ && sig > 0 && sig < NSIG) { if (act->sa_flags & SA_SIGINFO) @@ -1117,12 +1146,30 @@ diff -ru ../../work/linuxthreads-2.2.3/signals.c ./signals.c } newactp = &newact; } -@@ -158,7 +157,7 @@ + else + newactp = NULL; ++ if (sig > 0 && sig < NSIG) ++ { ++ user_oact = sighandler[sig].old; ++ if (act && ++ ((__sighandler_t *) user_oact == SIG_IGN || ++ (__sighandler_t *) user_oact == SIG_DFL)) ++ /* For the assignment is does not matter whether it's a normal ++ or real-time signal. */ ++ sighandler[sig].old = (arch_sighandler_t) act->sa_handler; ++ } + if (__libc_sigaction(sig, newactp, oact) == -1) +- return -1; ++ { ++ if (act && sig > 0 && sig < NSIG) ++ sighandler[sig].old = user_oact; ++ return -1; ++ } if (sig > 0 && sig < NSIG) { if (oact != NULL) - oact->sa_handler = (__sighandler_t) sighandler[sig].old; -+ oact->sa_handler = (__sighandler_t *) sighandler[sig].old; ++ oact->sa_handler = (__sighandler_t *) user_oact; if (act) /* For the assignment is does not matter whether it's a normal or real-time signal. */ @@ -1225,6 +1272,16 @@ diff -ru ../../work/linuxthreads-2.2.3/sysdeps/unix/sysv/linux/bits/local_lim.h /* Have to remove NR_OPEN? */ #ifdef __undef_NR_OPEN +@@ -64,7 +64,9 @@ + /* The number of threads per process. */ + #define _POSIX_THREAD_THREADS_MAX 64 + /* This is the value this implementation supports. */ ++#ifndef PTHREAD_THREADS_MAX + #define PTHREAD_THREADS_MAX 1024 ++#endif + + /* Maximum amount by which a process can descrease its asynchronous I/O + priority level. */ diff -ru ../../work/linuxthreads-2.2.3/sysdeps/unix/sysv/linux/bits/sigthread.h ./sysdeps/unix/sysv/linux/bits/sigthread.h --- ../../work/linuxthreads-2.2.3/sysdeps/unix/sysv/linux/bits/sigthread.h Thu Aug 31 21:45:04 2000 +++ ./sysdeps/unix/sysv/linux/bits/sigthread.h Thu Jun 7 22:59:29 2001 diff --git a/devel/linuxthreads/files/wraputhread.c b/devel/linuxthreads/files/wraputhread.c index 0394f53ba07f..b59c2cae4a82 100644 --- a/devel/linuxthreads/files/wraputhread.c +++ b/devel/linuxthreads/files/wraputhread.c @@ -1,4 +1,6 @@ /* + * Copyright (c) 2005 Yahoo! Technologies Norway AS + * Copyright (c) 2003 Overture Services Norway AS * Copyright (c) 2001 Daniel Eischen <deischen@FreeBSD.org>. * All rights reserved. * @@ -23,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: /tmp/pcvs/ports/devel/linuxthreads/files/wraputhread.c,v 1.3 2003-06-09 03:48:31 tegge Exp $ + * $FreeBSD: /tmp/pcvs/ports/devel/linuxthreads/files/wraputhread.c,v 1.4 2005-07-22 22:20:21 tegge Exp $ */ #ifdef LINUXTHREADS_WRAP_API @@ -242,14 +244,14 @@ enum { }; enum { - UTHREAD_PTHREAD_INHERIT_SCHED = 0, - UTHREAD_PTHREAD_EXPLICIT_SCHED = 1 + UTHREAD_PTHREAD_INHERIT_SCHED = 4, + UTHREAD_PTHREAD_EXPLICIT_SCHED = 0 }; enum { - UTHREAD_PTHREAD_SCOPE_SYSTEM = 0, - UTHREAD_PTHREAD_SCOPE_PROCESS = 1 + UTHREAD_PTHREAD_SCOPE_SYSTEM = 2, + UTHREAD_PTHREAD_SCOPE_PROCESS = 0 }; enum { @@ -1050,8 +1052,6 @@ _pthread_getspecific(pthread_key_t key) int _pthread_join(pthread_t tid, void **treturn) { - if (treturn == NULL) - return EINVAL; return __pthread_join(tid, treturn); } |