https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79876

--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Dominique d'Humieres from comment #9)
> > I have read people complaining about very low OMP stack sizes
> > on OSX.
> 
> What is setting the limit?

Probably OSX thread library?

Can you try something like:
#define _GNU_SOURCE
#include <limits.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <pthread.h>

static void *
tf (void *arg)
{
#ifdef __APPLE__
  fprintf (stderr, "other thread pthread_get_stacksize_np %lld\n",
           pthread_get_stacksize_np (pthread_self ()));
#else
  pthread_attr_t at;
  pthread_getattr_np (pthread_self (), &at);
  size_t sz;
  pthread_attr_getstacksize (&at, &sz);
  fprintf (stderr, "other thread pthread_getattr_np + "
           "pthread_attr_getstacksize %zd\n", sz);
  pthread_attr_destroy (&at);
#endif
  return NULL;
}

int
main ()
{
  struct rlimit rl;
  if (getrlimit (RLIMIT_STACK, &rl))
    fprintf (stderr, "err1\n");
  else
    fprintf (stderr, "RLIMIT_STACK cur %lld max %lld\n",
             (long long) rl.rlim_cur, (long long) rl.rlim_max);
  fprintf (stderr, "PTHREAD_STACK_MIN %lld\n", (long long) PTHREAD_STACK_MIN);
#ifdef __APPLE__
  fprintf (stderr, "main thread pthread_get_stacksize_np %lld\n",
           pthread_get_stacksize_np (pthread_self ()));
#else
  pthread_attr_t at;
  pthread_getattr_np (pthread_self (), &at);
  size_t sz;
  pthread_attr_getstacksize (&at, &sz);
  fprintf (stderr, "main thread pthread_getattr_np + "
           "pthread_attr_getstacksize %zd\n", sz);
  pthread_attr_destroy (&at);
#endif
  pthread_t th;
  pthread_create (&th, NULL, tf, NULL);
  pthread_join (th, NULL);
  pthread_attr_t at2;
  pthread_attr_init (&at2);
  pthread_attr_setstacksize (&at2, 2048 * 1024);
  pthread_create (&th, &at2, tf, NULL);
  pthread_join (th, NULL);
  pthread_attr_destroy (&at2);
  return 0;
}

and see what it prints?

Reply via email to