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:
24
src/auto/configure
vendored
24
src/auto/configure
vendored
@@ -13943,6 +13943,30 @@ $as_echo "not usable" >&6; }
|
|||||||
fi
|
fi
|
||||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
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
|
# 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
|
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
|
||||||
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
|
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
|
||||||
|
@@ -496,3 +496,6 @@
|
|||||||
|
|
||||||
/* Define to inline symbol or empty */
|
/* Define to inline symbol or empty */
|
||||||
#undef inline
|
#undef inline
|
||||||
|
|
||||||
|
/* Define if _SC_SIGSTKSZ is available via sysconf() */
|
||||||
|
#undef HAVE_SYSCONF_SIGSTKSZ
|
||||||
|
@@ -4105,6 +4105,15 @@ AC_TRY_COMPILE(
|
|||||||
AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
|
AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
|
||||||
AC_MSG_RESULT(not usable))
|
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([int])
|
||||||
AC_CHECK_SIZEOF([long])
|
AC_CHECK_SIZEOF([long])
|
||||||
AC_CHECK_SIZEOF([time_t])
|
AC_CHECK_SIZEOF([time_t])
|
||||||
|
@@ -783,7 +783,7 @@ mch_stackcheck(char *p)
|
|||||||
* completely full.
|
* completely full.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SIGSTKSZ
|
#if !defined SIGSTKSZ && !defined(HAVE_SYSCONF_SIGSTKSZ)
|
||||||
# define SIGSTKSZ 8000 // just a guess of how much stack is needed...
|
# define SIGSTKSZ 8000 // just a guess of how much stack is needed...
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -806,13 +806,21 @@ init_signal_stack(void)
|
|||||||
# else
|
# else
|
||||||
sigstk.ss_sp = signal_stack;
|
sigstk.ss_sp = signal_stack;
|
||||||
# endif
|
# endif
|
||||||
|
# ifdef HAVE_SYSCONF_SIGSTKSZ
|
||||||
|
sigstk.ss_size = sysconf(_SC_SIGSTKSZ);
|
||||||
|
# else
|
||||||
sigstk.ss_size = SIGSTKSZ;
|
sigstk.ss_size = SIGSTKSZ;
|
||||||
|
# endif
|
||||||
sigstk.ss_flags = 0;
|
sigstk.ss_flags = 0;
|
||||||
(void)sigaltstack(&sigstk, NULL);
|
(void)sigaltstack(&sigstk, NULL);
|
||||||
# else
|
# else
|
||||||
sigstk.ss_sp = signal_stack;
|
sigstk.ss_sp = signal_stack;
|
||||||
if (stack_grows_downwards)
|
if (stack_grows_downwards)
|
||||||
|
# ifdef HAVE_SYSCONF_SIGSTKSZ
|
||||||
|
sigstk.ss_sp += sysconf(_SC_SIGSTKSZ) - 1;
|
||||||
|
# else
|
||||||
sigstk.ss_sp += SIGSTKSZ - 1;
|
sigstk.ss_sp += SIGSTKSZ - 1;
|
||||||
|
# endif
|
||||||
sigstk.ss_onstack = 0;
|
sigstk.ss_onstack = 0;
|
||||||
(void)sigstack(&sigstk, NULL);
|
(void)sigstack(&sigstk, NULL);
|
||||||
# endif
|
# endif
|
||||||
@@ -3261,7 +3269,11 @@ mch_early_init(void)
|
|||||||
* Ignore any errors.
|
* Ignore any errors.
|
||||||
*/
|
*/
|
||||||
#if defined(HAVE_SIGALTSTACK) || defined(HAVE_SIGSTACK)
|
#if defined(HAVE_SIGALTSTACK) || defined(HAVE_SIGSTACK)
|
||||||
|
# ifdef HAVE_SYSCONF_SIGSTKSZ
|
||||||
|
signal_stack = alloc(sysconf(_SC_SIGSTKSZ));
|
||||||
|
# else
|
||||||
signal_stack = alloc(SIGSTKSZ);
|
signal_stack = alloc(SIGSTKSZ);
|
||||||
|
# endif
|
||||||
init_signal_stack();
|
init_signal_stack();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2550,
|
||||||
/**/
|
/**/
|
||||||
2549,
|
2549,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user