From: Zbigniew Jędrzejewski-Szmek Date: Thu, 26 Sep 2013 08:31:44 +0000 (+0200) Subject: build-sys: add ./configure --enable-address-sanitizer X-Git-Tag: v208~50 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=732bfe09aeffc3cd78b80ee9e20c9c3babd944d6;hp=5843c5ebb4341382ae9c87e93c2c87467e573548;p=elogind.git build-sys: add ./configure --enable-address-sanitizer Enabling address sanitizer seems like a useful thing, but is quite tricky. Proper flags have to be passed to CPPFLAGS, CFLAGS and LDFLAGS, but passing them on the commandline doesn't work because we tests are done with ld directly, and not with libtool like in real linking. We might want to fix this, but let's add a handy way to enable address checking anyway. --- diff --git a/configure.ac b/configure.ac index 156cc96e0..af0dbbeee 100644 --- a/configure.ac +++ b/configure.ac @@ -101,6 +101,20 @@ if test -z "$GPERF" ; then AC_MSG_ERROR([*** gperf not found]) fi +# ------------------------------------------------------------------------------ +address_sanitizer_cflags= +address_sanitizer_cppflags= +address_sanitizer_ldflags= +AC_ARG_ENABLE(address-sanitizer, AS_HELP_STRING([--enable-address-sanitizer], [enable -fsanitize=address])) +AS_IF([test "x$enable_address_sanitizer" = "xyes"], [ + CC_CHECK_FLAG_APPEND([with_as_cflags], [CFLAGS], [-fsanitize=address]) + AS_IF([test -z "$with_as_cflags"], + [AC_MSG_ERROR([*** -fsanitize=address is not supported])]) + address_sanitizer_cflags="$with_as_cflags -fno-omit-frame-pointer -DVALGRIND=1" + address_sanitizer_cppflags="-DVALGRIND=1" + address_sanitizer_ldflags="-Wc,-fsanitize=address" + ]) + CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\ -pipe \ -Wall \ @@ -142,13 +156,13 @@ CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\ -fdata-sections \ -fstack-protector \ --param=ssp-buffer-size=4]) -AC_SUBST([OUR_CFLAGS], $with_cflags) +AC_SUBST([OUR_CFLAGS], "$with_cflags $address_sanitizer_cflags") AS_CASE([$CFLAGS], [*-O[[12345g\ ]]*], [CC_CHECK_FLAGS_APPEND([with_cppflags], [CPPFLAGS], [\ -Wp,-D_FORTIFY_SOURCE=2])], [AC_MSG_RESULT([skipping -D_FORTIFY_SOURCE, optimization not enabled])]) -AC_SUBST([OUR_CPPFLAGS], $with_cppflags) +AC_SUBST([OUR_CPPFLAGS], "$with_cppflags $address_sanitizer_cppflags") CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\ -Wl,--as-needed \ @@ -156,7 +170,7 @@ CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\ -Wl,--gc-sections \ -Wl,-z,relro \ -Wl,-z,now]) -AC_SUBST([OUR_LDFLAGS], $with_ldflags) +AC_SUBST([OUR_LDFLAGS], "$with_ldflags $address_sanitizer_ldflags") # ------------------------------------------------------------------------------ # we use python to build the man page index, and for systemd-python