mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-09 19:02:18 +00:00
Support building with AddressSanitizer and UndefinedBehaviorSanitizer.
configure.ac:
Add configure option --enable-sanitizers.
Mmake.common.in:
scripts/Mercury.config.in:
Add variables to be set when --enable-sanitizers is used.
scripts/mgnuc.in:
scripts/ml.in:
Pass sanitizer options to the C compiler and the linker.
compiler/options.m:
Add options --cflags-for-sanitizers and --linker-sanitizer-flags
for receiving the configuration.
Set --linker-trace-flags and --shlib-linker-trace-flags default
values to empty instead of "-g" (likely copy error).
compiler/compile_target_code.m:
Pass sanitizer options to the C compiler, and the linker when
building an executable or shared library.
runtime/Mmakefile:
trace/Mmakefile:
Pass sanitizer options to linker when building shared libraries.
README.sanitizers:
Add instructions.
This commit is contained in:
@@ -68,6 +68,7 @@ DEFAULT_MCFLAGS=\
|
||||
--cflags-for-warnings "@CFLAGS_FOR_WARNINGS@" \
|
||||
--cflags-for-threads "@CFLAGS_FOR_THREADS@" \
|
||||
--cflags-for-debug "@CFLAGS_FOR_DEBUG@" \
|
||||
--cflags-for-sanitizers "@CFLAGS_FOR_SANITIZERS@" \
|
||||
--cflags-for-regs "@CFLAGS_FOR_REGS@" \
|
||||
--cflags-for-gotos "@CFLAGS_FOR_GOTOS@" \
|
||||
--cflags-for-pic "@CFLAGS_FOR_PIC@" \
|
||||
@@ -104,6 +105,7 @@ DEFAULT_MCFLAGS=\
|
||||
--linker-strip-flag "@LD_STRIP_FLAG@" \
|
||||
--linker-debug-flags "@LDFLAGS_FOR_DEBUG@" \
|
||||
--shlib-linker-debug-flags "@LD_LIBFLAGS_FOR_DEBUG@" \
|
||||
--linker-sanitizer-flags "@LDFLAGS_FOR_SANITIZERS@" \
|
||||
--linker-link-lib-flag "@LINK_LIB@" \
|
||||
--linker-link-lib-suffix "@LINK_LIB_SUFFIX@" \
|
||||
--shlib-linker-link-lib-flag "@LINK_LIB@" \
|
||||
|
||||
@@ -27,6 +27,7 @@ CFLAGS_FOR_GOTOS="@CFLAGS_FOR_GOTOS@"
|
||||
CFLAGS_FOR_THREADS="@CFLAGS_FOR_THREADS@"
|
||||
CFLAGS_FOR_NO_STRICT_ALIASING="@CFLAGS_FOR_NO_STRICT_ALIASING@"
|
||||
CFLAGS_FOR_ANSI="@CFLAGS_FOR_ANSI@"
|
||||
CFLAGS_FOR_SANITIZERS="@CFLAGS_FOR_SANITIZERS@"
|
||||
AS="@AS@"
|
||||
BYTES_PER_WORD="@BYTES_PER_WORD@"
|
||||
MKTEMP=@MKTEMP@
|
||||
@@ -501,6 +502,9 @@ case $non_local_gotos in
|
||||
false) ;;
|
||||
esac
|
||||
|
||||
# if sanitizers were enabled at configure time, add CFLAGS_FOR_SANITIZERS
|
||||
SANITIZER_OPTS="$CFLAGS_FOR_SANITIZERS"
|
||||
|
||||
#
|
||||
# Special case hacks for particular architectures
|
||||
# Any code here needs to be duplicated in ../configure.in.
|
||||
@@ -646,6 +650,7 @@ ALL_CC_OPTS="$MERC_ALL_C_INCL_DIRS\
|
||||
$RECORD_TERM_SIZE_OPTS\
|
||||
$MINIMAL_MODEL_OPTS\
|
||||
$PREGEN_SPF_OPTS\
|
||||
$SANITIZER_OPTS\
|
||||
$SPLIT_OPTS\
|
||||
$THREAD_OPTS\
|
||||
$THREADSCOPE_OPTS\
|
||||
|
||||
@@ -53,6 +53,7 @@ THREAD_LIBS="@THREAD_LIBS@"
|
||||
HWLOC_LIBS="@HWLOC_LIBS@"
|
||||
HWLOC_STATIC_LIBS="@HWLOC_STATIC_LIBS@"
|
||||
TRACE_BASE_LIBS_SYSTEM="@TRACE_BASE_LIBS_SYSTEM@"
|
||||
LDFLAGS_FOR_SANITIZERS="@LDFLAGS_FOR_SANITIZERS@"
|
||||
|
||||
TMPDIR=${TMPDIR=/tmp}
|
||||
MATH_LIB=${MERCURY_MATH_LIB="@MATH_LIB@"}
|
||||
@@ -426,6 +427,7 @@ case $make_shared_lib in
|
||||
ARCH_OPTS="$ARCH_OPTS $LD_LIBFLAGS_FOR_TRACE"
|
||||
;;
|
||||
esac
|
||||
SANITIZER_OPTS="$LDFLAGS_FOR_SANITIZERS"
|
||||
;;
|
||||
false)
|
||||
LINKER="$CC"
|
||||
@@ -438,6 +440,7 @@ case $make_shared_lib in
|
||||
ARCH_OPTS="$ARCH_OPTS $LDFLAGS_FOR_TRACE"
|
||||
;;
|
||||
esac
|
||||
SANITIZER_OPTS="$LDFLAGS_FOR_SANITIZERS"
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -556,7 +559,7 @@ else
|
||||
NOLOGO_OPTS=""
|
||||
fi
|
||||
|
||||
LINKER_PRE_FLAGS="$NOLOGO_OPTS $MSVCRT_OPTS $PRINT_MAP_OPT $UNDEF_OPT $STRIP_OPTS $MAYBE_STATIC_OPT $ARCH_OPTS"
|
||||
LINKER_PRE_FLAGS="$NOLOGO_OPTS $MSVCRT_OPTS $PRINT_MAP_OPT $UNDEF_OPT $STRIP_OPTS $MAYBE_STATIC_OPT $ARCH_OPTS $SANITIZER_OPTS"
|
||||
LINKER_POST_FLAGS="@LINK_OPT_SEP@ $NODEFAULTLIB_FLAG $DEBUG_FLAG $LIBDIR_OPTS $RPATH_OPT_LIST $LIBS"
|
||||
|
||||
case $verbose in
|
||||
|
||||
Reference in New Issue
Block a user