0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.2.2550: signal stack size is wrong with latest glibc 2.34

Problem:    Signal stack size is wrong with latest glibc 2.34.
Solution:   Use sysconf(_SC_SIGSTKSZ) if available. (Zdenek Dohnal, closes
            #7895)
This commit is contained in:
Bram Moolenaar
2021-02-25 17:17:56 +01:00
parent 1bd3cb2019
commit 0e62a6742b
5 changed files with 51 additions and 1 deletions

24
src/auto/configure vendored
View File

@@ -13943,6 +13943,30 @@ $as_echo "not usable" >&6; }
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _SC_SIGSTKSZ via sysconf()" >&5
$as_echo_n "checking for _SC_SIGSTKSZ via sysconf()... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <unistd.h>
int
main ()
{
(void)sysconf(_SC_SIGSTKSZ);
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }; $as_echo "#define HAVE_SYSCONF_SIGSTKSZ 1" >>confdefs.h
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not usable" >&5
$as_echo "not usable" >&6; }
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.

View File

@@ -496,3 +496,6 @@
/* Define to inline symbol or empty */
#undef inline
/* Define if _SC_SIGSTKSZ is available via sysconf() */
#undef HAVE_SYSCONF_SIGSTKSZ

View File

@@ -4105,6 +4105,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])

View File

@@ -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
}

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
2550,
/**/
2549,
/**/