This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[PATCH] Only define slow_pthread_self on non-FLOATING_STACKS linuxthreads
- From: Jakub Jelinek <jakub at redhat dot com>
- To: tromey at redhat dot com
- Cc: gcc-patches at gcc dot gnu dot org, java-patches at gcc dot gnu dot org
- Date: Tue, 8 Apr 2003 14:15:06 +0200
- Subject: [PATCH] Only define slow_pthread_self on non-FLOATING_STACKS linuxthreads
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
Hi!
When running libgcj against IA-32, x86_64, powerpc and powerpc64
linuxthreads using FLOATING_STACKS or NPTL there is no point to
cache pthread_self returned values - pthread_self is quite cheap.
The following test should succeed on LT-FS and NPTL and fail on LT-nonFS
(where the ulimit is not honoured and all threads get by default STACK_SIZE
big stacks. Unfortunately, this cannot be tested with
pthread_attr_setstacksize, since LT-nonFS will return what has been set
back, although the area occupied by the thread stack is bigger than that).
2003-04-08 Jakub Jelinek <jakub at redhat dot com>
* configure.host (*-linux*): Don't set slow_pthread_self if primary
installed libpthread is either linuxthreads with floating stacks or
NPTL.
--- libjava/configure.host.jj 2003-02-14 17:21:20.000000000 -0500
+++ libjava/configure.host 2003-04-08 08:03:03.000000000 -0400
@@ -164,6 +164,54 @@ case "${host}" in
x86_64*-linux* | \
sh-linux* | sh[34]*-linux*)
can_unwind_signal=yes
+ if test x$slow_pthread_self = xyes \
+ && test x$cross_compiling != xyes; then
+ cat > conftest.c <<EOF
+#define _GNU_SOURCE 1
+#include <pthread.h>
+#include <stdlib.h>
+#include <sys/resource.h>
+#include <limits.h>
+
+void *
+tf (void *arg __attribute__ ((unused)))
+{
+ pthread_attr_t a;
+ size_t s;
+
+ if (pthread_getattr_np (pthread_self (), &a)
+ || pthread_attr_getstacksize (&a, &s)
+ || s > 2 * PTHREAD_STACK_MIN)
+ exit (1);
+ exit (0);
+}
+
+int
+main (int argc, char **argv)
+{
+ pthread_t p;
+ void *ret;
+ struct rlimit r;
+
+ if (argc == 2)
+ {
+ r.rlim_cur = 2 * PTHREAD_STACK_MIN;
+ r.rlim_max = 2 * PTHREAD_STACK_MIN;
+ if (setrlimit (RLIMIT_STACK, &r))
+ exit (1);
+ execl (argv[1], argv[0], NULL);
+ exit (1);
+ }
+
+ if (pthread_create (&p, NULL, tf, NULL)
+ || pthread_join (p, &ret))
+ exit (1);
+ exit (1);
+}
+ EOF
+ $CC -o conftest conftest.c -lpthread > /dev/null 2>&1 && \
+ ./conftest ./conftest && slow_pthread_self=
+ rm -f conftest conftest.c
;;
*-*-darwin*)
enable_hash_synchronization_default=no
Jakub