build-sys: add --enable-sanitizers

Typical slowdown introduced by AddressSanitizer is 2x.
UBSan shouldn't have much impact on runtime cost.

Enable it by default when --enable-debug, unless --disable-sanitizers.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20180116151152.4040-3-marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Marc-André Lureau 2018-01-16 16:11:51 +01:00 committed by Paolo Bonzini
parent 6c549dc141
commit 247724cb30

30
configure vendored
View File

@ -342,6 +342,7 @@ rdma=""
gprof="no" gprof="no"
debug_tcg="no" debug_tcg="no"
debug="no" debug="no"
sanitizers="no"
fortify_source="" fortify_source=""
strip_opt="yes" strip_opt="yes"
tcg_interpreter="no" tcg_interpreter="no"
@ -993,6 +994,10 @@ for opt do
strip_opt="no" strip_opt="no"
fortify_source="no" fortify_source="no"
;; ;;
--enable-sanitizers) sanitizers="yes"
;;
--disable-sanitizers) sanitizers="no"
;;
--enable-sparse) sparse="yes" --enable-sparse) sparse="yes"
;; ;;
--disable-sparse) sparse="no" --disable-sparse) sparse="no"
@ -1474,6 +1479,7 @@ Advanced options (experts only):
--firmwarepath=PATH search PATH for firmware files --firmwarepath=PATH search PATH for firmware files
--with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix] --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
--enable-debug enable common debug build options --enable-debug enable common debug build options
--enable-sanitizers enable default sanitizers
--disable-strip disable stripping binaries --disable-strip disable stripping binaries
--disable-werror disable compilation abort on warning --disable-werror disable compilation abort on warning
--disable-stack-protector disable compiler-provided stack protection --disable-stack-protector disable compiler-provided stack protection
@ -5200,6 +5206,23 @@ if compile_prog "" "" ; then
have_utmpx=yes have_utmpx=yes
fi fi
##########################################
# checks for sanitizers
write_c_skeleton
have_asan=no
have_ubsan=no
if test "$sanitizers" = "yes" ; then
if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
have_asan=yes
fi
if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
have_ubsan=yes
fi
fi
########################################## ##########################################
# End of CC checks # End of CC checks
# After here, no more $cc or $ld runs # After here, no more $cc or $ld runs
@ -5224,6 +5247,13 @@ else
CFLAGS="-O2 $CFLAGS" CFLAGS="-O2 $CFLAGS"
fi fi
if test "$have_asan" = "yes"; then
CFLAGS="-fsanitize=address $CFLAGS"
fi
if test "$have_ubsan" = "yes"; then
CFLAGS="-fsanitize=undefined $CFLAGS"
fi
########################################## ##########################################
# Do we have libnfs # Do we have libnfs
if test "$libnfs" != "no" ; then if test "$libnfs" != "no" ; then