81 lines
2.1 KiB
Diff
81 lines
2.1 KiB
Diff
diff --git a/src/config.h.in b/src/config.h.in
|
|
index 1b01633..9657556 100644
|
|
--- a/src/config.h.in
|
|
+++ b/src/config.h.in
|
|
@@ -497,6 +497,9 @@
|
|
/* Define to inline symbol or empty */
|
|
#undef inline
|
|
|
|
+/* Define if _SC_SIGSTKSZ is available via sysconf() */
|
|
+#undef HAVE_SYSCONF_SIGSTKSZ
|
|
+
|
|
/* Do we need FIPS warning? */
|
|
#undef HAVE_FIPS_WARNING
|
|
|
|
diff --git a/src/configure.ac b/src/configure.ac
|
|
index aba4e1b..8a14a55 100644
|
|
--- a/src/configure.ac
|
|
+++ b/src/configure.ac
|
|
@@ -4137,6 +4137,15 @@ AC_TRY_COMPILE(
|
|
AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
|
|
AC_MSG_RESULT(not usable))
|
|
|
|
+dnl check if we have _SC_SIGSTKSZ via sysconf()
|
|
+AC_MSG_CHECKING(for _SC_SIGSTKSZ via sysconf())
|
|
+AC_TRY_COMPILE(
|
|
+[#include <unistd.h>],
|
|
+[ (void)sysconf(_SC_SIGSTKSZ);
|
|
+ ],
|
|
+ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF_SIGSTKSZ),
|
|
+ AC_MSG_RESULT(not usable))
|
|
+
|
|
AC_CHECK_SIZEOF([int])
|
|
AC_CHECK_SIZEOF([long])
|
|
AC_CHECK_SIZEOF([time_t])
|
|
diff --git a/src/os_unix.c b/src/os_unix.c
|
|
index 1edc7e6..fe12aba 100644
|
|
--- a/src/os_unix.c
|
|
+++ b/src/os_unix.c
|
|
@@ -783,7 +783,7 @@ mch_stackcheck(char *p)
|
|
* completely full.
|
|
*/
|
|
|
|
-#ifndef SIGSTKSZ
|
|
+#if !defined SIGSTKSZ && !defined(HAVE_SYSCONF_SIGSTKSZ)
|
|
# define SIGSTKSZ 8000 // just a guess of how much stack is needed...
|
|
#endif
|
|
|
|
@@ -806,13 +806,21 @@ init_signal_stack(void)
|
|
# else
|
|
sigstk.ss_sp = signal_stack;
|
|
# endif
|
|
+# ifdef HAVE_SYSCONF_SIGSTKSZ
|
|
+ sigstk.ss_size = sysconf(_SC_SIGSTKSZ);
|
|
+# else
|
|
sigstk.ss_size = SIGSTKSZ;
|
|
+# endif
|
|
sigstk.ss_flags = 0;
|
|
(void)sigaltstack(&sigstk, NULL);
|
|
# else
|
|
sigstk.ss_sp = signal_stack;
|
|
if (stack_grows_downwards)
|
|
+# ifdef HAVE_SYSCONF_SIGSTKSZ
|
|
+ sigstk.ss_sp += sysconf(_SC_SIGSTKSZ) - 1;
|
|
+# else
|
|
sigstk.ss_sp += SIGSTKSZ - 1;
|
|
+# endif
|
|
sigstk.ss_onstack = 0;
|
|
(void)sigstack(&sigstk, NULL);
|
|
# endif
|
|
@@ -3261,7 +3269,11 @@ mch_early_init(void)
|
|
* Ignore any errors.
|
|
*/
|
|
#if defined(HAVE_SIGALTSTACK) || defined(HAVE_SIGSTACK)
|
|
+# ifdef HAVE_SYSCONF_SIGSTKSZ
|
|
+ signal_stack = alloc(sysconf(_SC_SIGSTKSZ));
|
|
+# else
|
|
signal_stack = alloc(SIGSTKSZ);
|
|
+# endif
|
|
init_signal_stack();
|
|
#endif
|
|
}
|