|
@@ -275,9 +275,6 @@ EXTRA_OBJCFLAGS=""
|
|
EXTRA_LDFLAGS=""
|
|
EXTRA_LDFLAGS=""
|
|
|
|
|
|
debug_tcg="no"
|
|
debug_tcg="no"
|
|
-sanitizers="no"
|
|
|
|
-tsan="no"
|
|
|
|
-fortify_source="yes"
|
|
|
|
docs="auto"
|
|
docs="auto"
|
|
EXESUF=""
|
|
EXESUF=""
|
|
prefix="/usr/local"
|
|
prefix="/usr/local"
|
|
@@ -416,14 +413,6 @@ EOF
|
|
compile_object
|
|
compile_object
|
|
}
|
|
}
|
|
|
|
|
|
-check_include() {
|
|
|
|
-cat > $TMPC <<EOF
|
|
|
|
-#include <$1>
|
|
|
|
-int main(void) { return 0; }
|
|
|
|
-EOF
|
|
|
|
- compile_object
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
write_c_skeleton() {
|
|
write_c_skeleton() {
|
|
cat > $TMPC <<EOF
|
|
cat > $TMPC <<EOF
|
|
int main(void) { return 0; }
|
|
int main(void) { return 0; }
|
|
@@ -806,15 +795,6 @@ for opt do
|
|
meson_option_parse --enable-debug-graph-lock ""
|
|
meson_option_parse --enable-debug-graph-lock ""
|
|
meson_option_parse --enable-debug-mutex ""
|
|
meson_option_parse --enable-debug-mutex ""
|
|
meson_option_add -Doptimization=0
|
|
meson_option_add -Doptimization=0
|
|
- fortify_source="no"
|
|
|
|
- ;;
|
|
|
|
- --enable-sanitizers) sanitizers="yes"
|
|
|
|
- ;;
|
|
|
|
- --disable-sanitizers) sanitizers="no"
|
|
|
|
- ;;
|
|
|
|
- --enable-tsan) tsan="yes"
|
|
|
|
- ;;
|
|
|
|
- --disable-tsan) tsan="no"
|
|
|
|
;;
|
|
;;
|
|
--disable-tcg) tcg="disabled"
|
|
--disable-tcg) tcg="disabled"
|
|
plugins="no"
|
|
plugins="no"
|
|
@@ -1025,8 +1005,6 @@ Advanced options (experts only):
|
|
desired devices in configs/devices/)
|
|
desired devices in configs/devices/)
|
|
--with-devices-ARCH=NAME override default configs/devices
|
|
--with-devices-ARCH=NAME override default configs/devices
|
|
--enable-debug enable common debug build options
|
|
--enable-debug enable common debug build options
|
|
- --enable-sanitizers enable default sanitizers
|
|
|
|
- --enable-tsan enable thread sanitizer
|
|
|
|
--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
|
|
--cpu=CPU Build for host CPU [$cpu]
|
|
--cpu=CPU Build for host CPU [$cpu]
|
|
@@ -1633,87 +1611,6 @@ if ! compile_object "-Werror"; then
|
|
ccache_cpp2=yes
|
|
ccache_cpp2=yes
|
|
fi
|
|
fi
|
|
|
|
|
|
-#################################################
|
|
|
|
-# clang does not support glibc + FORTIFY_SOURCE.
|
|
|
|
-
|
|
|
|
-if test "$fortify_source" != "no"; then
|
|
|
|
- if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
|
|
|
|
- fortify_source="no";
|
|
|
|
- elif test -n "$cxx" && has $cxx &&
|
|
|
|
- echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
|
|
|
|
- fortify_source="no";
|
|
|
|
- else
|
|
|
|
- fortify_source="yes"
|
|
|
|
- fi
|
|
|
|
-fi
|
|
|
|
-
|
|
|
|
-##########################################
|
|
|
|
-# checks for sanitizers
|
|
|
|
-
|
|
|
|
-have_asan=no
|
|
|
|
-have_ubsan=no
|
|
|
|
-have_asan_iface_h=no
|
|
|
|
-have_asan_iface_fiber=no
|
|
|
|
-
|
|
|
|
-if test "$sanitizers" = "yes" ; then
|
|
|
|
- write_c_skeleton
|
|
|
|
- if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
|
|
|
|
- have_asan=yes
|
|
|
|
- fi
|
|
|
|
-
|
|
|
|
- # we could use a simple skeleton for flags checks, but this also
|
|
|
|
- # detect the static linking issue of ubsan, see also:
|
|
|
|
- # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
|
|
|
|
- cat > $TMPC << EOF
|
|
|
|
-int main(int argc, char **argv)
|
|
|
|
-{
|
|
|
|
- return argc + 1;
|
|
|
|
-}
|
|
|
|
-EOF
|
|
|
|
- if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
|
|
|
|
- have_ubsan=yes
|
|
|
|
- fi
|
|
|
|
-
|
|
|
|
- if check_include "sanitizer/asan_interface.h" ; then
|
|
|
|
- have_asan_iface_h=yes
|
|
|
|
- fi
|
|
|
|
-
|
|
|
|
- cat > $TMPC << EOF
|
|
|
|
-#include <sanitizer/asan_interface.h>
|
|
|
|
-int main(void) {
|
|
|
|
- __sanitizer_start_switch_fiber(0, 0, 0);
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-EOF
|
|
|
|
- if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
|
|
|
|
- have_asan_iface_fiber=yes
|
|
|
|
- fi
|
|
|
|
-fi
|
|
|
|
-
|
|
|
|
-# Thread sanitizer is, for now, much noisier than the other sanitizers;
|
|
|
|
-# keep it separate until that is not the case.
|
|
|
|
-if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
|
|
|
|
- error_exit "TSAN is not supported with other sanitiziers."
|
|
|
|
-fi
|
|
|
|
-have_tsan=no
|
|
|
|
-have_tsan_iface_fiber=no
|
|
|
|
-if test "$tsan" = "yes" ; then
|
|
|
|
- write_c_skeleton
|
|
|
|
- if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
|
|
|
|
- have_tsan=yes
|
|
|
|
- fi
|
|
|
|
- cat > $TMPC << EOF
|
|
|
|
-#include <sanitizer/tsan_interface.h>
|
|
|
|
-int main(void) {
|
|
|
|
- __tsan_create_fiber(0);
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-EOF
|
|
|
|
- if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
|
|
|
|
- have_tsan_iface_fiber=yes
|
|
|
|
- fi
|
|
|
|
-fi
|
|
|
|
-
|
|
|
|
##########################################
|
|
##########################################
|
|
# functions to probe cross compilers
|
|
# functions to probe cross compilers
|
|
|
|
|
|
@@ -2139,42 +2036,6 @@ case "$vfio_user_server" in
|
|
;;
|
|
;;
|
|
esac
|
|
esac
|
|
|
|
|
|
-##########################################
|
|
|
|
-# End of CC checks
|
|
|
|
-# After here, no more $cc or $ld runs
|
|
|
|
-
|
|
|
|
-write_c_skeleton
|
|
|
|
-
|
|
|
|
-if test "$fortify_source" = "yes" ; then
|
|
|
|
- QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
|
|
|
|
-fi
|
|
|
|
-
|
|
|
|
-if test "$have_asan" = "yes"; then
|
|
|
|
- QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
|
|
|
|
- QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
|
|
|
|
- if test "$have_asan_iface_h" = "no" ; then
|
|
|
|
- echo "ASAN build enabled, but ASAN header missing." \
|
|
|
|
- "Without code annotation, the report may be inferior."
|
|
|
|
- elif test "$have_asan_iface_fiber" = "no" ; then
|
|
|
|
- echo "ASAN build enabled, but ASAN header is too old." \
|
|
|
|
- "Without code annotation, the report may be inferior."
|
|
|
|
- fi
|
|
|
|
-fi
|
|
|
|
-if test "$have_tsan" = "yes" ; then
|
|
|
|
- if test "$have_tsan_iface_fiber" = "yes" ; then
|
|
|
|
- QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
|
|
|
|
- QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
|
|
|
|
- else
|
|
|
|
- error_exit "Cannot enable TSAN due to missing fiber annotation interface."
|
|
|
|
- fi
|
|
|
|
-elif test "$tsan" = "yes" ; then
|
|
|
|
- error_exit "Cannot enable TSAN due to missing sanitize thread interface."
|
|
|
|
-fi
|
|
|
|
-if test "$have_ubsan" = "yes"; then
|
|
|
|
- QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
|
|
|
|
- QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
|
|
|
|
-fi
|
|
|
|
-
|
|
|
|
#######################################
|
|
#######################################
|
|
# cross-compiled firmware targets
|
|
# cross-compiled firmware targets
|
|
|
|
|
|
@@ -2299,14 +2160,6 @@ fi
|
|
|
|
|
|
echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
|
|
echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
|
|
|
|
|
|
-if test "$have_asan_iface_fiber" = "yes" ; then
|
|
|
|
- echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
|
|
|
|
-fi
|
|
|
|
-
|
|
|
|
-if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
|
|
|
|
- echo "CONFIG_TSAN=y" >> $config_host_mak
|
|
|
|
-fi
|
|
|
|
-
|
|
|
|
if test "$plugins" = "yes" ; then
|
|
if test "$plugins" = "yes" ; then
|
|
echo "CONFIG_PLUGIN=y" >> $config_host_mak
|
|
echo "CONFIG_PLUGIN=y" >> $config_host_mak
|
|
fi
|
|
fi
|