Jelajahi Sumber

configure: check whether leak detection is supported

Leak detection is not supported on some platforms. Added check to avoid
having all tests failing on such platforms.
Evgeny Grin (Karlson2k) 4 tahun lalu
induk
melakukan
cc2d26ef3d
1 mengubah file dengan 21 tambahan dan 1 penghapusan
  1. 21 1
      configure.ac

+ 21 - 1
configure.ac

@@ -2609,6 +2609,9 @@ AM_TESTS_ENVIRONMENT=""
 AM_ASAN_OPTIONS=""
 AM_UBSAN_OPTIONS=""
 AM_LSAN_OPTIONS=""
+AS_UNSET([ASAN_OPTIONS])
+AS_UNSET([UBSAN_OPTIONS])
+AS_UNSET([LSAN_OPTIONS])
 AC_ARG_ENABLE([sanitizers],
   [AS_HELP_STRING([--enable-sanitizers], [enable run-time sanitizers])],
   [], [enable_sanitizers=no])
@@ -2638,6 +2641,21 @@ AS_VAR_IF([enable_sanitizers], ["yes"],
          [
            AX_APPEND_FLAG([-fsanitize=address], [san_FLAGS])
            enabled_sanitizers="${enabled_sanitizers}${enabled_sanitizers:+, }address"
+           AC_CACHE_CHECK([whether leak detect is supported], [mhd_cv_cc_sanitizer_address_leak],
+             [
+               CFLAGS="${saved_CFLAGS} ${san_CFLAGS} ${san_FLAGS}"
+               ASAN_OPTIONS="exitcode=88:detect_leaks=1:halt_on_error=1"
+               export ASAN_OPTIONS
+               AC_RUN_IFELSE([AC_LANG_PROGRAM([],[])],
+                 [mhd_cv_cc_sanitizer_address_leak=yes], [mhd_cv_cc_sanitizer_address_leak=no],
+                 [
+                   # Cross-compiling with sanitizers?
+                   mhd_cv_cc_sanitizer_address_leak=yes
+                 ]
+               )
+               AS_UNSET([ASAN_OPTIONS])
+             ]
+           )
            AC_CACHE_CHECK([for pointer compare sanitizer], [mhd_cv_cc_sanitizer_pointer_compare],
              [
                CFLAGS="${saved_CFLAGS} ${san_CFLAGS} ${san_FLAGS} -fsanitize=pointer-compare"
@@ -2799,10 +2817,12 @@ int main(void)
        # Get better output for sanitizers error reporting
        AX_APPEND_COMPILE_FLAGS([-fno-omit-frame-pointer -fno-common -fno-optimize-sibling-calls],
          [san_CFLAGS])
-       AM_ASAN_OPTIONS="exitcode=88:detect_leaks=1:strict_string_checks=1:detect_stack_use_after_return=1"
+       AM_ASAN_OPTIONS="exitcode=88:strict_string_checks=1:detect_stack_use_after_return=1"
        AM_ASAN_OPTIONS="${AM_ASAN_OPTIONS}:check_initialization_order=1:strict_init_order=1:redzone=64"
        AM_ASAN_OPTIONS="${AM_ASAN_OPTIONS}:max_free_fill_size=1024:detect_invalid_pointer_pairs=3"
        AM_ASAN_OPTIONS="${AM_ASAN_OPTIONS}:handle_ioctl=1:halt_on_error=1"
+       AS_VAR_IF([mhd_cv_cc_sanitizer_address_leak], ["yes"],
+         [AM_ASAN_OPTIONS="${AM_ASAN_OPTIONS}:detect_leaks=1"])
        AM_UBSAN_OPTIONS="exitcode=87:print_stacktrace=1:halt_on_error=1"
        AM_LSAN_OPTIONS="use_unaligned=1"
        AM_TESTS_ENVIRONMENT='\