Blame SOURCES/libsodium-1.0.18/m4/ax_check_catchable_segv.m4
Branch: 77578435c5d4664a1caf811b19b0353ae5f5f564
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
])