diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index ece8ff0b364..5beaaa7cfba 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,14 @@ +2017-04-04 Jakub Jelinek + + PR libgomp/79876 + * config/posix/thread-stacksize.h: New file. + * config/darwin/thread-stacksize.h: New file. + * config/nvptx/thread-stacksize.h: New file. + * env.c: Include thread-stacksize.h. + (initialize_env): Initialize stacksize to GOMP_DEFAULT_STACKSIZE + instead of 0. Call pthread_attr_setstacksize even if + GOMP_DEFAULT_STACKSIZE is non-zero. + 2017-03-30 Jakub Jelinek * env.c (initialize_env): Initialize stacksize to 0. diff --git a/libgomp/config/darwin/thread-stacksize.h b/libgomp/config/darwin/thread-stacksize.h new file mode 100644 index 00000000000..ae3910de845 --- /dev/null +++ b/libgomp/config/darwin/thread-stacksize.h @@ -0,0 +1,29 @@ +/* Copyright (C) 2017 Free Software Foundation, Inc. + Contributed by Jakub Jelinek + + This file is part of the GNU Offloading and Multi Processing Library + (libgomp). + + Libgomp is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + Under Section 7 of GPL version 3, you are granted additional + permissions described in the GCC Runtime Library Exception, version + 3.1, as published by the Free Software Foundation. + + You should have received a copy of the GNU General Public License and + a copy of the GCC Runtime Library Exception along with this program; + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + . */ + +/* OSX uses too small default stack size (0.5MB), use a bigger default. + Users can still override it through OMP_STACKSIZE or GOMP_STACKSIZE + environment variables. */ +#define GOMP_DEFAULT_STACKSIZE (2 * 1024 * 1024) diff --git a/libgomp/config/nvptx/thread-stacksize.h b/libgomp/config/nvptx/thread-stacksize.h new file mode 100644 index 00000000000..19da63fc515 --- /dev/null +++ b/libgomp/config/nvptx/thread-stacksize.h @@ -0,0 +1,27 @@ +/* Copyright (C) 2017 Free Software Foundation, Inc. + Contributed by Jakub Jelinek + + This file is part of the GNU Offloading and Multi Processing Library + (libgomp). + + Libgomp is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + Under Section 7 of GPL version 3, you are granted additional + permissions described in the GCC Runtime Library Exception, version + 3.1, as published by the Free Software Foundation. + + You should have received a copy of the GNU General Public License and + a copy of the GCC Runtime Library Exception along with this program; + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + . */ + +/* Not really applicable to NVPTX. */ +#define GOMP_DEFAULT_STACKSIZE 0 diff --git a/libgomp/config/posix/thread-stacksize.h b/libgomp/config/posix/thread-stacksize.h new file mode 100644 index 00000000000..570c486394b --- /dev/null +++ b/libgomp/config/posix/thread-stacksize.h @@ -0,0 +1,27 @@ +/* Copyright (C) 2017 Free Software Foundation, Inc. + Contributed by Jakub Jelinek + + This file is part of the GNU Offloading and Multi Processing Library + (libgomp). + + Libgomp is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + Under Section 7 of GPL version 3, you are granted additional + permissions described in the GCC Runtime Library Exception, version + 3.1, as published by the Free Software Foundation. + + You should have received a copy of the GNU General Public License and + a copy of the GCC Runtime Library Exception along with this program; + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + . */ + +/* 0 means use the system default. */ +#define GOMP_DEFAULT_STACKSIZE 0 diff --git a/libgomp/env.c b/libgomp/env.c index 7c6c02220b6..ced752d18e4 100644 --- a/libgomp/env.c +++ b/libgomp/env.c @@ -51,6 +51,7 @@ # endif #endif #include +#include "thread-stacksize.h" #ifndef HAVE_STRTOULL # define strtoull(ptr, eptr, base) strtoul (ptr, eptr, base) @@ -1187,7 +1188,7 @@ handle_omp_display_env (unsigned long stacksize, int wait_policy) static void __attribute__((constructor)) initialize_env (void) { - unsigned long thread_limit_var, stacksize = 0; + unsigned long thread_limit_var, stacksize = GOMP_DEFAULT_STACKSIZE; int wait_policy; /* Do a compile time check that mkomp_h.pl did good job. */ @@ -1274,7 +1275,8 @@ initialize_env (void) pthread_attr_setdetachstate (&gomp_thread_attr, PTHREAD_CREATE_DETACHED); if (parse_stacksize ("OMP_STACKSIZE", &stacksize) - || parse_stacksize ("GOMP_STACKSIZE", &stacksize)) + || parse_stacksize ("GOMP_STACKSIZE", &stacksize) + || GOMP_DEFAULT_STACKSIZE) { int err;