Blame SOURCES/libsodium-1.0.18/m4/ax_check_catchable_segv.m4

rdobuilder 775784
# SYNOPSIS
rdobuilder 775784
#
rdobuilder 775784
#   AX_CHECK_CATCHABLE_SEGV
rdobuilder 775784
#
rdobuilder 775784
# DESCRIPTION
rdobuilder 775784
#
rdobuilder 775784
#  Check whether segmentation violations can be caught using signal handlers.
rdobuilder 775784
rdobuilder 775784
#serial 1
rdobuilder 775784
rdobuilder 775784
AC_DEFUN([AX_CHECK_CATCHABLE_SEGV], [dnl
rdobuilder 775784
    AC_PREREQ(2.64)
rdobuilder 775784
    AS_VAR_PUSHDEF([CACHEVAR], [ax_cv_check_[]_AC_LANG_ABBREV[]CATCHABLE_SEGV])dnl
rdobuilder 775784
    AC_CACHE_CHECK([whether segmentation violations can be caught when using the _AC_LANG compiler], CACHEVAR, [
rdobuilder 775784
        AC_RUN_IFELSE([
rdobuilder 775784
            AC_LANG_PROGRAM([[
rdobuilder 775784
#include <signal.h>
rdobuilder 775784
#include <stdlib.h>
rdobuilder 775784
static void sig(int _) { exit(0); }
rdobuilder 775784
            ]], [[
rdobuilder 775784
volatile unsigned char * volatile x = (volatile unsigned char *) malloc(8);
rdobuilder 775784
size_t i;
rdobuilder 775784
rdobuilder 775784
signal(SIGSEGV, sig);
rdobuilder 775784
signal(SIGBUS, sig);
rdobuilder 775784
#if !defined(__SANITIZE_ADDRESS__) && !defined(__EMSCRIPTEN__)
rdobuilder 775784
for (i = 0; i < 10000000; i += 1024) { x[-i] = x[i] = (unsigned char) i; }
rdobuilder 775784
#endif
rdobuilder 775784
free((void *) x);
rdobuilder 775784
exit(1)
rdobuilder 775784
            ]])],
rdobuilder 775784
            [AS_VAR_SET(CACHEVAR, [yes])],
rdobuilder 775784
            [AS_VAR_SET(CACHEVAR, [no])],
rdobuilder 775784
            [AS_VAR_SET(CACHEVAR, [unknown])]
rdobuilder 775784
        )
rdobuilder 775784
    ])
rdobuilder 775784
    AS_VAR_IF(CACHEVAR, yes,
rdobuilder 775784
        [AC_DEFINE([HAVE_CATCHABLE_SEGV], [1], [Define if segmentation violations can be caught using signal handlers])],
rdobuilder 775784
        [AC_MSG_WARN([On this platform, segmentation violations cannot be caught using signal handlers. This is expected if you enabled a tool such as Address Sanitizer (-fsanitize=address), but be aware that using Address Sanitizer may also significantly reduce performance.])]
rdobuilder 775784
    )
rdobuilder 775784
    AS_VAR_POPDEF([CACHEVAR])dnl
rdobuilder 775784
])