# Check prerequisites for compiling lib/c-stack.c.
-# Copyright (C) 2002 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
AC_DEFUN([AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC],
[# for STACK_DIRECTION
AC_REQUIRE([AC_FUNC_ALLOCA])
+ AC_CHECK_FUNCS(setrlimit)
AC_CACHE_CHECK([for working C stack overflow detection],
ac_cv_sys_xsi_stack_overflow_heuristic,
[AC_TRY_RUN(
[
+ #include <unistd.h>
#include <signal.h>
#include <ucontext.h>
+ #if HAVE_SETRLIMIT
+ # include <sys/types.h>
+ # include <sys/time.h>
+ # include <sys/resource.h>
+ #endif
static union
{
int
main (void)
{
+ #if HAVE_SETRLIMIT && defined RLIMIT_STACK
+ /* Before starting the endless recursion, try to be friendly
+ to the user's machine. On some Linux 2.2.x systems, there
+ is no stack limit for user processes at all. We don't want
+ to kill such systems. */
+ struct rlimit rl;
+ rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */
+ setrlimit (RLIMIT_STACK, &rl);
+ #endif
+
c_stack_action ();
return recurse ("\1");
}
fi])
-AC_DEFUN([jm_PREREQ_C_STACK],
+AC_DEFUN([gl_PREREQ_C_STACK],
[AC_REQUIRE([AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC])
# for STACK_DIRECTION
AC_CHECK_DECLS([getcontext], , , [#include <ucontext.h>])
AC_CHECK_DECLS([sigaltstack], , , [#include <signal.h>])
- AC_CHECK_HEADERS(sys/resource.h ucontext.h unistd.h)
+ AC_CHECK_HEADERS_ONCE(sys/time.h unistd.h)
+ AC_CHECK_HEADERS(sys/resource.h ucontext.h)
+
+ AC_CHECK_MEMBERS([struct sigaction.sa_sigaction], , , [#include <signal.h>])
AC_CHECK_TYPES([stack_t], , , [#include <signal.h>])])
+
+AC_DEFUN([gl_C_STACK],
+[
+ dnl Prerequisites of lib/c-stack.c.
+ gl_PREREQ_C_STACK
+])