diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-09-26 10:31:44 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-09-26 11:12:04 +0200 |
commit | 732bfe09aeffc3cd78b80ee9e20c9c3babd944d6 (patch) | |
tree | 2f7dbf894a52d632a98e5396efa5be33e98c6137 | |
parent | 5843c5ebb4341382ae9c87e93c2c87467e573548 (diff) |
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.
-rw-r--r-- | configure.ac | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac index 156cc96e07..af0dbbeeee 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 |