aboutsummaryrefslogtreecommitdiffstats
path: root/libsigsegv/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to 'libsigsegv/configure.ac')
-rw-r--r--libsigsegv/configure.ac912
1 files changed, 0 insertions, 912 deletions
diff --git a/libsigsegv/configure.ac b/libsigsegv/configure.ac
deleted file mode 100644
index 468991d8..00000000
--- a/libsigsegv/configure.ac
+++ /dev/null
@@ -1,912 +0,0 @@
-dnl Autoconf configuration for libsigsegv.
-dnl Process this file with autoconf to produce a configure script.
-dnl
-dnl Copyright (C) 2002-2009 Bruno Haible <bruno@clisp.org>
-dnl
-dnl This program is free software; you can redistribute it and/or modify
-dnl it under the terms of the GNU General Public License as published by
-dnl the Free Software Foundation; either version 2, or (at your option)
-dnl any later version.
-dnl
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-dnl GNU General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU General Public License
-dnl along with this program; if not, write to the Free Software Foundation,
-dnl Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-AC_PREREQ([2.62])
-AC_INIT
-AC_CONFIG_MACRO_DIR([m4])
-AC_CONFIG_SRCDIR([src/sigsegv.h.in])
-AC_CONFIG_AUX_DIR([build-aux])
-
-RSE_BOLD
-
-{ echo; echo "${term_bold}Build Tools:${term_norm}"; } >& AS_MESSAGE_FD
-
-AM_INIT_AUTOMAKE(libsigsegv, 2.7-pre1)
-AM_CONFIG_HEADER(config.h)
-
-AC_PROG_CC
-AC_PROG_CPP
-
-AC_CANONICAL_HOST
-AC_MSG_CHECKING([host platform])
-sv_cv_host="$host"
-changequote(,)dnl Autoconf 2.52 brokenness
-case "$host_os" in
- linux | linux-*)
- kernelversion=`uname -r | sed -e 's/^\([0-9.]*\).*/\1/'`
- sv_cv_host=`echo $sv_cv_host | sed -e "s/linux/linux$kernelversion/"`
- ;;
-esac
-changequote([,])dnl Autoconf 2.52 brokenness
-cat > conftest.c << EOF
-#include <features.h>
-#ifdef __GNU_LIBRARY__
-Version __GLIBC__ . __GLIBC_MINOR__
-#endif
-EOF
-glibcversion=`$CPP $CPPFLAGS conftest.c 2>/dev/null | grep Version | sed -e 's/Version//' -e 's/ //g'`
-if test -n "$glibcversion"; then
- sv_cv_host="$sv_cv_host-glibc$glibcversion"
-fi
-AC_MSG_RESULT([$sv_cv_host])
-PLATFORM="$sv_cv_host"
-AC_SUBST([PLATFORM])
-
-AC_PROG_INSTALL
-
-LT_INIT([disable-shared])
-
-# For testing cross-compilation behaviour.
-#cross_compiling=yes
-
-{ echo; echo "${term_bold}Optional Platform Environment:${term_norm}"; } >& AS_MESSAGE_FD
-
-dnl Headers to be included with <signal.h>. On MacOS X (Darwin) one also
-dnl needs <sys/signal.h>.
-AC_CHECK_HEADERS([sys/signal.h])
-
-dnl List of signals that are sent when an invalid virtual memory address
-dnl is accessed, or when the stack overflows.
-case "$host_os" in
- sunos4* | freebsd* | dragonfly* | openbsd* | netbsd* | kfreebsd* | knetbsd*)
- CFG_SIGNALS=signals-bsd.h ;;
- hpux*)
- CFG_SIGNALS=signals-hpux.h ;;
- macos* | darwin*)
- CFG_SIGNALS=signals-macos.h ;;
- gnu*)
- CFG_SIGNALS=signals-hurd.h ;;
- *)
- CFG_SIGNALS=signals.h ;;
-esac
-AC_DEFINE_UNQUOTED([CFG_SIGNALS], ["$CFG_SIGNALS"],
- [The name of the include file describing the fault signals.])
-
-# How to determine the memory page size.
-SV_GETPAGESIZE
-
-# How to allocate fresh memory using mmap.
-# (We need mmap, because mprotect() doesn't work on malloc()ed memory on
-# some systems.)
-SV_MMAP_ANON
-
-# How to write a SIGSEGV handler with access to the fault address.
-
-# On MacOS X 10.2 or newer, we don't need these tests, because we'll end up
-# using handler-macos.c anyway. If we were to perform the tests, 5 Crash Report
-# dialog windows would pop up.
-case "$host_os" in
- macos* | darwin[[6-9]]* | darwin[[1-9]][[0-9]]*) ;;
- *)
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_FAULT([POSIX], sv_cv_fault_posix,
- [*-*-solaris2.[7-9] | i?86-*-linux2.[4-9]* | i?86-*-freebsd[4-9]* | i?86-*-mirbsd1[0-9] | alpha*-dec-osf[4-9]* | *-*-hpux11* | mips-sgi-irix6*],
- [],
- [int sig, siginfo_t *sip, void *ucp],
- [sip->si_addr],
- [action.sa_sigaction = &sigsegv_handler;
- action.sa_flags = SA_SIGINFO;])
-
-SV_TRY_FAULT([Linux/i386], sv_cv_fault_linux_i386, [i?86-*-linux2.[2-9]*],
- [#include <asm/sigcontext.h>],
- [int sig, struct sigcontext sc],
- [sc.cr2])
-
-SV_TRY_FAULT([old Linux/i386], sv_cv_fault_linux_i386_old,
- [i?86-*-linux2.[2-9]*],
- [],
- [int sig, unsigned int more],
- [((unsigned long *) &more) [21]])
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_FAULT([Linux/m68k], sv_cv_fault_linux_m68k, [],
- [#include <asm/sigcontext.h>
-#include "$srcdir/src/fault-linux-m68k.c"],
- [int sig, int code, struct sigcontext *scp],
- [get_fault_addr (scp)])
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_FAULT([Linux/PowerPC], sv_cv_fault_linux_powerpc, [],
- [#include <asm/sigcontext.h>],
- [int sig, struct sigcontext *scp],
- [scp->regs->dar])
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_FAULT([Linux/HPPA], sv_cv_fault_linux_hppa, [],
- [],
- [int sig, siginfo_t *sip, void *ucp],
- [sip->si_ptr],
- [action.sa_sigaction = &sigsegv_handler;
- action.sa_flags = SA_SIGINFO;])
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_FAULT([BSD], sv_cv_fault_bsd, [i?86-*-freebsd[4-9]*],
- [],
- [int sig, int code, struct sigcontext *scp, void *addr],
- [addr])
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_FAULT([IRIX], sv_cv_fault_irix, [mips-sgi-irix6*],
- [],
- [int sig, int code, struct sigcontext *scp],
- [(unsigned long) scp->sc_badvaddr])
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_FAULT([HP-UX HPPA], sv_cv_fault_hpux_hppa, [hppa*-*-hpux11*],
- [
-#define USE_64BIT_REGS(mc) \
- (((mc).ss_flags & SS_WIDEREGS) && ((mc).ss_flags & SS_NARROWISINVALID))
-#define GET_CR21(mc) \
- (USE_64BIT_REGS(mc) ? (mc).ss_wide.ss_64.ss_cr21 : (mc).ss_narrow.ss_cr21)
-],
- [int sig, int code, struct sigcontext *scp],
- [GET_CR21 (scp->sc_sl.sl_ss)])
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_FAULT([OSF/1 Alpha], sv_cv_fault_osf_alpha,
- [alpha*-*-osf[4-9]* | alpha*-*-linux2.[4-9]*],
- [],
- [int sig, int code, struct sigcontext *scp],
- [scp->sc_traparg_a0])
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_FAULT([NetBSD Alpha], sv_cv_fault_netbsd_alpha,
- [alpha*-*-osf[4-9]* | alpha-*-*bsd*],
- [#include "$srcdir/src/fault-netbsd-alpha.c"],
- [int sig, int code, struct sigcontext *scp],
- [get_fault_addr (scp)])
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_FAULT([AIX], sv_cv_fault_aix, [*-*-aix[34]*],
- [],
- [int sig, int code, struct sigcontext *scp],
- [scp->sc_jmpbuf.jmp_context.o_vaddr])
-
-SV_TRY_FAULT([MacOSX/Darwin7 PowerPC], sv_cv_fault_macosdarwin7_ppc,
- [powerpc-*-darwin7*],
- [#include "$srcdir/src/fault-macosdarwin7-powerpc.c"],
- [int sig, siginfo_t *sip, ucontext_t *ucp],
- [get_fault_addr (sip, ucp)],
- [action.sa_sigaction = &sigsegv_handler;
- action.sa_flags = SA_SIGINFO;])
-
-if test "$sv_cv_fault_macosdarwin7_ppc" != yes; then
-SV_TRY_FAULT([MacOSX/Darwin5 PowerPC], sv_cv_fault_macosdarwin5_ppc,
- [powerpc-*-darwin5*],
- [#include "$srcdir/src/fault-macosdarwin5-powerpc.c"],
- [int sig, int code, struct sigcontext *scp],
- [get_fault_addr (scp)])
-fi
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_FAULT([Hurd], sv_cv_fault_hurd, [],
- [],
- [int sig, int code, struct sigcontext *scp],
- [code])
-
-# End of MacOS X special casing.
- ;;
-esac
-
-dnl Now determine the fault handler include file.
-dnl We prefer the platform specific include files to the generic fault-posix.h
-dnl because the former often defines SIGSEGV_FAULT_STACKPOINTER.
-dnl Also we put the BSD test second-to-last, because the test may produce
-dnl false positives.
-CFG_HANDLER=
-CFG_FAULT=
-CFG_MACHFAULT=
-FAULT_CONTEXT=void
-FAULT_CONTEXT_INCLUDE=
-dnl
-dnl First the cases where the OS provides the fault address.
-dnl
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_aix" = yes; then
- case "$host_cpu" in
- powerpc* | rs6000) CFG_FAULT=fault-aix3-powerpc.h ;;
- *) CFG_FAULT=fault-aix3.h ;;
- esac
- FAULT_CONTEXT='struct sigcontext'
-fi
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_irix" = yes; then
- case "$host_cpu" in
- mips*) CFG_FAULT=fault-irix-mips.h ;;
- *) CFG_FAULT=fault-irix.h ;;
- esac
- FAULT_CONTEXT='struct sigcontext'
-fi
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_hpux_hppa" = yes; then
- case "$host_cpu" in
- hppa* | parisc*) CFG_FAULT=fault-hpux-hppa.h ;;
- *) CFG_FAULT=fault-hpux.h ;;
- esac
- FAULT_CONTEXT='struct sigcontext'
-fi
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_osf_alpha" = yes; then
- case "$host_cpu" in
- alpha*) CFG_FAULT=fault-osf-alpha.h ;;
- *) CFG_FAULT=fault-osf.h ;;
- esac
- FAULT_CONTEXT='struct sigcontext'
-fi
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_netbsd_alpha" = yes; then
- case "$host_cpu" in
- alpha*) CFG_FAULT=fault-netbsd-alpha.h ;;
- esac
- FAULT_CONTEXT='struct sigcontext'
-fi
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_linux_i386" = yes; then
- case "$host_cpu" in
- i?86 | x86_64) CFG_FAULT=fault-linux-i386.h ;;
- esac
- FAULT_CONTEXT='struct sigcontext'
-fi
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_linux_i386_old" = yes; then
- case "$host_cpu" in
- i?86 | x86_64) CFG_FAULT=fault-linux-i386-old.h ;;
- esac
- FAULT_CONTEXT='struct sigcontext'
-fi
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_linux_powerpc" = yes; then
- case "$host_cpu" in
- powerpc* | rs6000) CFG_FAULT=fault-linux-powerpc.h ;;
- esac
- FAULT_CONTEXT='struct sigcontext'
-fi
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_linux_hppa" = yes; then
- case "$host_cpu" in
- hppa* | parisc*) CFG_FAULT=fault-linux-hppa.h ;;
- esac
-fi
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_hurd" = yes; then
- case "$host_os" in
- netbsd*) # A false positive.
- ;;
- *)
- CFG_FAULT=fault-hurd.h
- FAULT_CONTEXT='struct sigcontext'
- ;;
- esac
-fi
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_bsd" = yes; then
- case "$host_os" in
- freebsd* | dragonfly* | kfreebsd*)
- case "$host_cpu" in
- i?86 | x86_64)
- CFG_FAULT=fault-freebsd-i386.h
- FAULT_CONTEXT='struct sigcontext'
- ;;
- *)
- CFG_FAULT=fault-bsd.h
- FAULT_CONTEXT='void'
- ;;
- esac
- ;;
- *)
- CFG_FAULT=fault-bsd.h
- FAULT_CONTEXT='void'
- ;;
- esac
-fi
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_posix" = yes; then
- case "$host_os" in
- openbsd*)
- case "$host_cpu" in
- i?86 | x86_64) CFG_FAULT=fault-openbsd-i386.h ;;
- *) CFG_FAULT=fault-openbsd.h ;;
- esac
- FAULT_CONTEXT='struct sigcontext'
- ;;
- mirbsd*)
- case "$host_cpu" in
- i?86 | x86_64)
- CFG_FAULT=fault-openbsd-i386.h
- FAULT_CONTEXT='struct sigcontext'
- ;;
- esac
- ;;
- linux*)
- case "$host_cpu" in
- ia64)
- CFG_FAULT=fault-linux-ia64.h
- FAULT_CONTEXT='struct sigcontext'
- ;;
- esac
- ;;
- esac
- if test -z "$CFG_FAULT"; then
- dnl <ucontext.h> was required by POSIX:2001, and many systems have it. But
- dnl POSIX:2008 does not require it any more, and MirBSD does not have it.
- AC_CHECK_HEADERS([ucontext.h])
- if test $ac_cv_header_ucontext_h = yes; then
- case "$host_os" in
- solaris*)
- case "$host_cpu" in
- i?86 | x86_64) CFG_FAULT=fault-solaris-i386.h ;;
- sparc*) CFG_FAULT=fault-solaris-sparc.h ;;
- *) CFG_FAULT=fault-solaris.h ;;
- esac
- ;;
- aix*)
- case "$host_cpu" in
- powerpc* | rs6000) CFG_FAULT=fault-aix5-powerpc.h ;;
- *) CFG_FAULT=fault-aix5.h ;;
- esac
- ;;
- netbsd*)
- CFG_FAULT=fault-netbsd.h
- ;;
- *)
- CFG_FAULT=fault-posix-ucontext.h
- ;;
- esac
- FAULT_CONTEXT='ucontext_t'
- FAULT_CONTEXT_INCLUDE='#include <ucontext.h>'
- else
- CFG_FAULT=fault-posix.h
- FAULT_CONTEXT='void'
- fi
- fi
-fi
-if test -z "$CFG_FAULT"; then
- case "$host_os" in
- macos* | darwin[[6-9]]* | darwin[[1-9]][[0-9]]*)
- case "$host_cpu" in
- powerpc* | rs6000 | i?86 | x86_64)
- CFG_MACHFAULT=machfault-macos.h
- FAULT_CONTEXT_INCLUDE='#include <signal.h>
-#include <mach/thread_status.h>
-#if defined __ppc64__
-#define sigsegv_thread_state_t ppc_thread_state64_t
-#elif defined __ppc__
-#define sigsegv_thread_state_t ppc_thread_state_t
-#endif
-#if defined __x86_64__
-#define sigsegv_thread_state_t x86_thread_state64_t
-#elif defined __i386__
-#if defined x86_THREAD_STATE32
-#define sigsegv_thread_state_t x86_thread_state32_t
-#else
-#define sigsegv_thread_state_t i386_thread_state_t
-#endif
-#endif'
- FAULT_CONTEXT='sigsegv_thread_state_t'
- ;;
- esac
- if test -n "$CFG_MACHFAULT"; then
- CFG_HANDLER=handler-macos.c
- CFG_FAULT=fault-macos.h # nonexistent, just a dummy
- fi
- ;;
- esac
-fi
-dnl
-dnl Next, the cases where there is a hairy CPU dependent way to get the
-dnl fault address.
-dnl
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_linux_m68k" = yes; then
- case "$host_cpu" in
- m68*)
- CFG_FAULT=fault-linux-m68k.h
- FAULT_CONTEXT='struct sigcontext'
- ;;
- esac
-fi
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_macosdarwin7_ppc" = yes; then
- case "$host_cpu" in
- powerpc* | rs6000)
- CFG_FAULT=fault-macosdarwin7-powerpc.h
- FAULT_CONTEXT='ucontext_t'
- FAULT_CONTEXT_INCLUDE='#include <signal.h>
-#include <ucontext.h>'
- ;;
- esac
-fi
-if test -z "$CFG_FAULT" && test "$sv_cv_fault_macosdarwin5_ppc" = yes; then
- case "$host_cpu" in
- powerpc* | rs6000)
- CFG_FAULT=fault-macosdarwin5-powerpc.h
- FAULT_CONTEXT='struct sigcontext'
- ;;
- esac
-fi
-if test -z "$CFG_FAULT"; then
- case "$host_os" in
- mingw* | cygwin*)
- FAULT_CONTEXT='CONTEXT'
- FAULT_CONTEXT_INCLUDE='#include <windows.h>'
- CFG_FAULT=fault-win32.h # nonexistent, just a dummy
- ;;
- esac
-fi
-if test -n "$CFG_FAULT"; then
- sv_cv_have_sigsegv_recovery=yes
-else
- sv_cv_have_sigsegv_recovery=no
- dnl
- dnl No way to get the fault address. But other information is available.
- dnl
- case "$host_os" in
- linux*)
- case "$host_cpu" in
- alpha*)
- CFG_FAULT=fault-linux-alpha.h
- FAULT_CONTEXT='struct sigcontext'
- ;;
- arm* | strongarm* | xscale*)
- CFG_FAULT=fault-linux-arm.h
- FAULT_CONTEXT='struct sigcontext'
- ;;
- cris)
- CFG_FAULT=fault-linux-cris.h
- FAULT_CONTEXT='struct sigcontext'
- ;;
- mips*)
- CFG_FAULT=fault-linux-mips.h
- FAULT_CONTEXT='struct sigcontext'
- ;;
- s390*)
- CFG_FAULT=fault-linux-s390.h
- FAULT_CONTEXT='struct sigcontext'
- ;;
- sh*)
- CFG_FAULT=fault-linux-sh.h
- FAULT_CONTEXT='struct sigcontext'
- ;;
- sparc*)
- CFG_FAULT=fault-linux-sparc.h
- FAULT_CONTEXT='struct sigcontext'
- ;;
- x86_64)
- CFG_FAULT=fault-linux-x86_64.h
- FAULT_CONTEXT='struct sigcontext'
- ;;
- esac
- ;;
- beos*)
- case "$host_cpu" in
- i?86 | x86_64) CFG_FAULT=fault-beos-i386.h ;;
- *) CFG_FAULT=fault-beos.h ;;
- esac
- FAULT_CONTEXT='struct vregs'
- ;;
- macos* | darwin*)
- case "$host_cpu" in
- i?86 | x86_64) CFG_FAULT=fault-macos-i386.h ;;
- esac
- FAULT_CONTEXT='struct sigcontext'
- ;;
- esac
-fi
-AC_MSG_CHECKING([for the fault handler specifics])
-if test -n "$CFG_FAULT"; then
- sv_cv_fault_include=$CFG_FAULT
-else
- if test -n "$CFG_MACHFAULT"; then
- sv_cv_fault_include=$CFG_MACHFAULT
- else
- sv_cv_fault_include=none
- fi
-fi
-AC_MSG_RESULT([$sv_cv_fault_include])
-if test -z "$CFG_FAULT"; then
- CFG_FAULT=fault-none.h
-fi
-AC_DEFINE_UNQUOTED([CFG_FAULT], ["$CFG_FAULT"],
- [The name of the include file describing the fault handler.])
-if test -z "$CFG_MACHFAULT"; then
- CFG_MACHFAULT=fault-none.h
-fi
-AC_DEFINE_UNQUOTED([CFG_MACHFAULT], ["$CFG_MACHFAULT"],
- [The name of the include file describing the Mach fault handler.])
-AC_SUBST([FAULT_CONTEXT])
-AC_SUBST([FAULT_CONTEXT_INCLUDE])
-dnl AM_SUBST_NOTMAKE, because FAULT_CONTEXT_INCLUDE may have a multiline value.
-AM_SUBST_NOTMAKE([FAULT_CONTEXT_INCLUDE])
-
-AC_MSG_CHECKING([if the system supports catching SIGSEGV])
-AC_MSG_RESULT([$sv_cv_have_sigsegv_recovery])
-if test $sv_cv_have_sigsegv_recovery != no; then
- HAVE_SIGSEGV_RECOVERY=1
-else
- HAVE_SIGSEGV_RECOVERY=0
-fi
-AC_SUBST([HAVE_SIGSEGV_RECOVERY])
-
-dnl The stackoverflow_context_t type depends on the CFG_FAULT include file.
-
-dnl Stack direction.
-AC_CACHE_CHECK([for stack direction], sv_cv_stack_direction_msg, [
- case "$host_cpu" in
- dnl See the #define STACK_GROWS_DOWNWARD in gcc-3.1/gcc/config/*/*.h.
- a29k | \
- alpha* | \
- arc | \
- arm* | strongarm* | xscale* | \
- avr | \
- c1 | c2 | c32 | c34 | c38 | \
- clipper | \
- cris | \
- d30v | \
- elxsi | \
- fr30 | \
- h8300 | \
- i?86 | x86_64 | \
- i860 | \
- ia64 | \
- m32r | \
- m68* | \
- m88k | \
- mcore | \
- mips* | \
- mmix | \
- mn10200 | \
- mn10300 | \
- ns32k | \
- pdp11 | \
- pj* | \
- powerpc* | rs6000 | \
- romp | \
- s390* | \
- sh* | \
- sparc* | \
- v850 | \
- vax | \
- xtensa)
- sv_cv_stack_direction=-1 ;;
- c4x | \
- dsp16xx | \
- i960 | \
- hppa* | parisc* | \
- stormy16 | \
- we32k)
- sv_cv_stack_direction=1 ;;
- *)
- if test $cross_compiling = no; then
- cat > conftest.c <<EOF
-#include <stdio.h>
-int
-get_stack_direction ()
-{
- auto char dummy;
- static char *dummyaddr = (char *)0;
- if (dummyaddr != (char *)0)
- return &dummy > dummyaddr ? 1 : &dummy < dummyaddr ? -1 : 0;
- else
- {
- dummyaddr = &dummy;
- {
- int result = get_stack_direction ();
- /* The next assignment avoids tail recursion elimination
- (IRIX 6.4 CC). */
- dummyaddr = (char *)0;
- return result;
- }
- }
-}
-int
-main ()
-{
- printf ("%d\n", get_stack_direction ());
- return 0;
-}
-EOF
- AC_TRY_EVAL([ac_link])
- sv_cv_stack_direction=`./conftest`
- else
- sv_cv_stack_direction=0
- fi
- ;;
- esac
- case $sv_cv_stack_direction in
- 1) sv_cv_stack_direction_msg="grows up";;
- -1) sv_cv_stack_direction_msg="grows down";;
- *) sv_cv_stack_direction_msg="unknown";;
- esac
-])
-AC_DEFINE_UNQUOTED([STACK_DIRECTION], [$sv_cv_stack_direction],
- [Define as the direction of stack growth for your system.
- STACK_DIRECTION > 0 => grows toward higher addresses
- STACK_DIRECTION < 0 => grows toward lower addresses
- STACK_DIRECTION = 0 => spaghetti stack.])
-
-dnl Determination of the stack's virtual memory area.
-AC_CACHE_CHECK([for PIOCMAP in sys/procfs.h], [sv_cv_procfsvma], [
- AC_TRY_LINK([#include <sys/procfs.h>],
- [int x = PIOCNMAP + PIOCMAP; prmap_t y;],
- [sv_cv_procfsvma=yes], [sv_cv_procfsvma=no])
-])
-AC_CHECK_FUNCS([mincore])
-CFG_STACKVMA=
-if test $sv_cv_procfsvma = yes; then
- CFG_STACKVMA=stackvma-procfs.c
-else
- case "$host_os" in
- linux*) CFG_STACKVMA=stackvma-linux.c ;;
- freebsd* | dragonfly*) CFG_STACKVMA=stackvma-freebsd.c ;;
- beos*) CFG_STACKVMA=stackvma-beos.c ;;
- macos* | darwin*) CFG_STACKVMA=stackvma-mach.c ;;
- esac
-fi
-if test -z "$CFG_STACKVMA" && test $ac_cv_func_mincore = yes; then
- CFG_STACKVMA=stackvma-mincore.c
-fi
-if test -n "$CFG_STACKVMA"; then
- AC_DEFINE([HAVE_STACKVMA], [1],
- [Define if CFG_STACKVMA is set to a nontrivial source file.])
-else
- CFG_STACKVMA=stackvma-none.c
-fi
-AC_DEFINE_UNQUOTED([CFG_STACKVMA], ["$CFG_STACKVMA"],
- [The name of the file determining the stack virtual memory area.])
-AC_SUBST([CFG_STACKVMA])
-
-AC_CHECK_FUNCS([getrlimit setrlimit])
-
-dnl Catching stack overflow requires an alternate signal stack.
-dnl The old "install a guard page" trick would be unreliable, because
-dnl we don't know where exactly to place the guard page.
-SV_SIGALTSTACK
-
-AC_CACHE_CHECK([if the system supports catching stack overflow],
- [sv_cv_have_stack_overflow_recovery],
-[
- dnl On Mach, it requires a machfault-*.h (see src/handler-macos.c).
- dnl On Unix, it requires either sigaltstack() or the BeOS set_signal_stack()
- dnl function, and on Unix it requires a fault-*.h or a stackvma-*.c with
- dnl certain properties (see src/handler-unix.c).
- if test "$CFG_MACHFAULT" != fault-none.h; then
- sv_cv_have_stack_overflow_recovery=yes
- else
- if test "$sv_cv_sigaltstack" != no; then
- sv_cv_have_stack_overflow_recovery=maybe
- else
- case "$host_os" in
- beos*) sv_cv_have_stack_overflow_recovery=maybe ;;
- mingw* | cygwin*) sv_cv_have_stack_overflow_recovery=yes ;;
- *) sv_cv_have_stack_overflow_recovery=no ;;
- esac
- fi
- fi
- if test $sv_cv_have_stack_overflow_recovery = maybe; then
- if test -n "$CFG_FAULT"; then
- AC_EGREP_CPP([xyzzy], [
-#include "$srcdir/src/$CFG_FAULT"
-#ifdef SIGSEGV_FAULT_HANDLER_ARGLIST
-#ifdef SIGSEGV_FAULT_ADDRESS
-xyzzy
-#endif
-#endif
-], [condA=true], [condA=false])
- else
- condA=false
- fi
- if test -n "$CFG_FAULT"; then
- AC_EGREP_CPP([xyzzy], [
-#include "$srcdir/src/$CFG_FAULT"
-#ifdef SIGSEGV_FAULT_HANDLER_ARGLIST
-#ifdef SIGSEGV_FAULT_STACKPOINTER
-xyzzy
-#endif
-#endif
-], [condB=true], [condB=false])
- else
- condB=false
- fi
- if test "$CFG_STACKVMA" != "stackvma-none.c"; then
- condC=true
- else
- condC=false
- fi
- if { $condA && $condB; } || { $condA && $condC; } || { $condB && $condC; }; then
- sv_cv_have_stack_overflow_recovery=yes
- else
- sv_cv_have_stack_overflow_recovery=no
- fi
- fi
-])
-if test $sv_cv_have_stack_overflow_recovery != no; then
- HAVE_STACK_OVERFLOW_RECOVERY=1
-else
- HAVE_STACK_OVERFLOW_RECOVERY=0
-fi
-AC_SUBST([HAVE_STACK_OVERFLOW_RECOVERY])
-
-# How to longjmp out of a signal handler, in such a way that the
-# alternate signal stack remains functional.
-
-# On MacOS X 10.2 or newer, we don't need these tests, because we'll end up
-# using handler-macos.c anyway. If we were to perform the tests, 2 Crash Report
-# dialog windows would pop up.
-case "$host_os" in
- macos* | darwin[[6-9]]* | darwin[[1-9]][[0-9]]*) ;;
- *)
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_LEAVE_HANDLER_LONGJMP([], sv_cv_leave_handler_longjmp,
- [*-*-osf[4-9]* | *-*-hpux11* | *-*-linux2.[2-9]*],
- [], [])
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_LEAVE_HANDLER_LONGJMP([ and sigaltstack],
- sv_cv_leave_handler_longjmp_sigaltstack,
- [*-*-freebsd*],
- [
-#ifndef SS_ONSTACK
-#define SS_ONSTACK SA_ONSTACK
-#endif
- ],
- [stack_t ss;
- if (sigaltstack (NULL, &ss) >= 0)
- {
- ss.ss_flags &= ~SS_ONSTACK;
- sigaltstack (&ss, NULL);
- }
- ])
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_LEAVE_HANDLER_LONGJMP([ and setcontext],
- sv_cv_leave_handler_longjmp_setcontext,
- [*-*-irix* | *-*-solaris*],
- [#include <ucontext.h>
-#ifndef SS_ONSTACK
-#define SS_ONSTACK SA_ONSTACK
-#endif
- ],
- [static int fl;
- static ucontext_t uc;
- fl = 0;
- if (getcontext (&uc) >= 0)
- if (fl == 0)
- if (uc.uc_stack.ss_flags & SS_ONSTACK)
- {
- uc.uc_stack.ss_flags &= ~SS_ONSTACK;
- fl = 1;
- setcontext (&uc);
- }
- ])
-
-# End of MacOS X special casing.
- ;;
-esac
-
-# How to siglongjmp out of a signal handler, in such a way that the
-# alternate signal stack remains functional.
-
-# On MacOS X 10.2 or newer, we don't need these tests, because we'll end up
-# using handler-macos.c anyway. If we were to perform the tests, 2 Crash Report
-# dialog windows would pop up.
-case "$host_os" in
- macos* | darwin[[6-9]]* | darwin[[1-9]][[0-9]]*) ;;
- *)
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_LEAVE_HANDLER_SIGLONGJMP([], sv_cv_leave_handler_siglongjmp,
- [*-*-osf[4-9]* | *-*-hpux11* | *-*-linux2.[2-9]* | *-*-irix* | *-*-solaris*],
- [], [])
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_LEAVE_HANDLER_SIGLONGJMP([ and sigaltstack],
- sv_cv_leave_handler_siglongjmp_sigaltstack,
- [*-*-freebsd*],
- [
-#ifndef SS_ONSTACK
-#define SS_ONSTACK SA_ONSTACK
-#endif
- ],
- [stack_t ss;
- if (sigaltstack (NULL, &ss) >= 0)
- {
- ss.ss_flags &= ~SS_ONSTACK;
- sigaltstack (&ss, NULL);
- }
- ])
-
-dnl FIXME: Put in some more known values into the third argument.
-SV_TRY_LEAVE_HANDLER_SIGLONGJMP([ and setcontext],
- sv_cv_leave_handler_siglongjmp_setcontext,
- [],
- [#include <ucontext.h>
-#ifndef SS_ONSTACK
-#define SS_ONSTACK SA_ONSTACK
-#endif
- ],
- [static int fl;
- static ucontext_t uc;
- fl = 0;
- if (getcontext(&uc) >= 0)
- if (fl == 0)
- if (uc.uc_stack.ss_flags & SS_ONSTACK)
- {
- uc.uc_stack.ss_flags &= ~SS_ONSTACK;
- fl = 1;
- setcontext(&uc);
- }
- ])
-
-# End of MacOS X special casing.
- ;;
-esac
-
-CFG_LEAVE=
-if test "$sv_cv_leave_handler_longjmp" != no; then
- CFG_LEAVE=leave-nop.c
-else
- if test "$sv_cv_leave_handler_longjmp_sigaltstack" != no; then
- CFG_LEAVE=leave-sigaltstack.c
- else
- if test "$sv_cv_leave_handler_longjmp_setcontext" != no; then
- CFG_LEAVE=leave-setcontext.c
- fi
- fi
-fi
-case "$host_os" in
- # On BeOS, the 6 tests fail because sigaltstack() doesn't exist.
- # If one uses set_signal_stack() instead of sigaltstack(), the first
- # test actually works. i.e. sv_cv_leave_handler_longjmp would be 'yes'.
- beos*) CFG_LEAVE=leave-nop.c ;;
-esac
-if test -z "$CFG_LEAVE"; then
- CFG_LEAVE=leave-none.c
-fi
-AC_DEFINE_UNQUOTED([CFG_LEAVE], ["$CFG_LEAVE"],
- [The name of the file implementing sigsegv_reset_onstack_flag.])
-AC_SUBST([CFG_LEAVE])
-
-case "$host_os" in
- mingw* | cygwin*) CFG_HANDLER=handler-win32.c ;;
- *)
- if test -z "$CFG_HANDLER"; then
- if test $sv_cv_have_sigsegv_recovery = no \
- && test $sv_cv_have_stack_overflow_recovery = no; then
- CFG_HANDLER=handler-none.c
- else
- CFG_HANDLER=handler-unix.c
- fi
- fi
- ;;
-esac
-AC_DEFINE_UNQUOTED([CFG_HANDLER], ["$CFG_HANDLER"],
- [The name of the file implementing the handler functionality.])
-AC_SUBST([CFG_HANDLER])
-
-{ echo; echo "${term_bold}Build Parameters:${term_norm}"; } >& AS_MESSAGE_FD
-
-dnl Relocatability is a nop for this package.
-AC_RELOCATABLE_NOP
-
-{ echo; echo "${term_bold}Output Substitution:${term_norm}"; } >& AS_MESSAGE_FD
-
-dnl AC_OUTPUT([Makefile])
-AC_OUTPUT([Makefile
- src/Makefile src/sigsegv.h
- tests/Makefile])
-
-{ echo; echo "Now please type '${term_bold}make${term_norm}' to compile. Good luck."; echo; } >& AS_MESSAGE_FD