endif
AM_CFLAGS = -fsigned-char $(WARN_CFLAGS)
-AM_LDFLAGS = $(ASAN_LDFLAGS)
+AM_LDFLAGS = $(ASAN_LDFLAGS) $(UBSAN_LDFLAGS)
# Add gettext stuff to the global LDADD for systems with separate libintl
# library. The LTLIBINTL is generated by AM_GNU_GETTEXT macro.
])
AC_SUBST([ASAN_LDFLAGS])
+AC_ARG_ENABLE([ubsan],
+ AS_HELP_STRING([--enable-ubsan], [compile with UBsan]),
+ [], [enable_ubsan=no]
+)
+AS_IF([test "x$enable_ubsan" = xyes], [
+ UL_WARN_ADD([-fsanitize=undefined])
+ UBSAN_LDFLAGS="-fsanitize=undefined"
+])
+AC_SUBST([UBSAN_LDFLAGS])
+
dnl libtool-2
LT_INIT
LC_ALL="POSIX"
CHARSET="UTF-8"
ASAN_OPTIONS="detect_leaks=0"
+ UBSAN_OPTIONS="print_stacktrace=1:print_summary=1:halt_on_error=1"
- export LANG LANGUAGE LC_ALL CHARSET ASAN_OPTIONS
+ export LANG LANGUAGE LC_ALL CHARSET ASAN_OPTIONS UBSAN_OPTIONS
mydir=$(ts_canonicalize "$mydir")
if [ "$tmp" == "yes" ]; then
TS_ENABLE_ASAN="yes"
fi
+ tmp=$( ts_has_option "memcheck-ubsan" "$*")
+ if [ "$tmp" == "yes" ]; then
+ TS_ENABLE_UBSAN="yes"
+ fi
BLKID_FILE="$TS_OUTDIR/${TS_TESTNAME}.blkidtab"
#
# ASAN mode
#
- if [ "$TS_ENABLE_ASAN" == "yes" ]; then
- args+=(env ASAN_OPTIONS=detect_leaks=1)
+ if [ "$TS_ENABLE_ASAN" == "yes" -o "$TS_ENABLE_UBSAN" == "yes" ]; then
+ args+=(env)
+ if [ "$TS_ENABLE_ASAN" == "yes" ]; then
+ args+=(ASAN_OPTIONS=detect_leaks=1)
+ fi
+ if [ "$TS_ENABLE_UBSAN" == "yes" ]; then
+ args+=(UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1)
+ fi
fi
#
top_builddir=
paraller_jobs=1
has_asan_opt=
+has_ubsan_opt=
function num_cpus()
{
OPTS="$OPTS $1"
has_asan_opt="yes"
;;
+ --memcheck-ubsan)
+ OPTS="$OPTS $1"
+ has_ubsan_opt="yes"
+ ;;
--use-system-commands)
OPTS="$OPTS $1"
SYSCOMMANDS="yes"
fi
fi
+if [ -z "$has_ubsan_opt" ]; then
+ ubsan=$(awk '/^UBSAN_LDFLAGS/ { print $3 }' $top_builddir/Makefile)
+ if [ -n "$ubsan" ]; then
+ OPTS="$OPTS --memcheck-ubsan"
+ fi
+fi
+
declare -a comps
if [ -n "$SUBTESTS" ]; then
# selected tests only