X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Fc-stack.m4;h=0f89fd348c729db4382e7e5ab4992b4243d659c3;hb=db0f2ae452a6827f01474b79b55080e700afb974;hp=01c9a884c23f8bd36ae493a7cc2c1a8718303f2e;hpb=a55efbd0d21a7d9f5ccb338120cd5e29bcff9a0a;p=gnulib.git diff --git a/m4/c-stack.m4 b/m4/c-stack.m4 index 01c9a884c..0f89fd348 100644 --- a/m4/c-stack.m4 +++ b/m4/c-stack.m4 @@ -1,34 +1,29 @@ # Check prerequisites for compiling lib/c-stack.c. -# Copyright (C) 2002 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 -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program 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. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. +# Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. 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 #include #include + #if HAVE_SETRLIMIT + # include + # include + # include + #endif static union { @@ -101,6 +96,16 @@ AC_DEFUN([AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC], 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"); } @@ -121,7 +126,7 @@ AC_DEFUN([AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC], fi]) -AC_DEFUN([jm_PREREQ_C_STACK], +AC_DEFUN([gl_PREREQ_C_STACK], [AC_REQUIRE([AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC]) # for STACK_DIRECTION @@ -131,6 +136,15 @@ AC_DEFUN([jm_PREREQ_C_STACK], AC_CHECK_DECLS([getcontext], , , [#include ]) AC_CHECK_DECLS([sigaltstack], , , [#include ]) - 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 ]) AC_CHECK_TYPES([stack_t], , , [#include ])]) + +AC_DEFUN([gl_C_STACK], +[ + dnl Prerequisites of lib/c-stack.c. + gl_PREREQ_C_STACK +])