summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pthread/pt-internal.h5
-rw-r--r--sysdeps/generic/pt-attr.c3
-rw-r--r--sysdeps/mach/hurd/pt-sysdep.c14
3 files changed, 19 insertions, 3 deletions
diff --git a/pthread/pt-internal.h b/pthread/pt-internal.h
index 067fb73..291baf5 100644
--- a/pthread/pt-internal.h
+++ b/pthread/pt-internal.h
@@ -292,8 +292,9 @@ extern error_t __pthread_sigstate (struct __pthread *__restrict thread, int how,
int clear_pending);
-/* Default thread attributes. */
-extern const struct __pthread_attr __pthread_default_attr;
+/* Default thread attributes.
+ FIXME Normally const, see sysdeps/mach/hurd/pt-sysdep.c. */
+extern struct __pthread_attr __pthread_default_attr;
/* Default barrier attributes. */
extern const struct __pthread_barrierattr __pthread_default_barrierattr;
diff --git a/sysdeps/generic/pt-attr.c b/sysdeps/generic/pt-attr.c
index e501dc7..4f95918 100644
--- a/sysdeps/generic/pt-attr.c
+++ b/sysdeps/generic/pt-attr.c
@@ -24,7 +24,8 @@
#include <pt-internal.h>
-const struct __pthread_attr __pthread_default_attr =
+/* FIXME Normally const, see sysdeps/mach/hurd/pt-sysdep.c. */
+struct __pthread_attr __pthread_default_attr =
{
schedparam: { sched_priority: 0 },
stacksize: PTHREAD_STACK_DEFAULT,
diff --git a/sysdeps/mach/hurd/pt-sysdep.c b/sysdeps/mach/hurd/pt-sysdep.c
index f40fee5..882af69 100644
--- a/sysdeps/mach/hurd/pt-sysdep.c
+++ b/sysdeps/mach/hurd/pt-sysdep.c
@@ -30,6 +30,16 @@
__thread struct __pthread *___pthread_self;
+/* Allow programs that know about this library to override the default stack
+ size.
+
+ FIXME Stack sizes should normally be set at thread creation time using the
+ standard interface, but Hurd threadvars have special alignment constraints.
+ Until they are completely replaced with correct TLS, make this hack
+ available. */
+extern size_t __pthread_stack_default_size;
+weak_extern(__pthread_stack_default_size);
+
/* Forward. */
static void *init_routine (void);
@@ -46,6 +56,10 @@ init_routine (void)
struct __pthread *thread;
int err;
+ /* FIXME */
+ if (&__pthread_stack_default_size != NULL)
+ __pthread_default_attr.stacksize = __pthread_stack_default_size;
+
/* Initialize the library. */
__pthread_init ();