summaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-09-26 10:31:44 +0200
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-09-26 11:12:04 +0200
commit732bfe09aeffc3cd78b80ee9e20c9c3babd944d6 (patch)
tree2f7dbf894a52d632a98e5396efa5be33e98c6137 /configure.ac
parent5843c5ebb4341382ae9c87e93c2c87467e573548 (diff)
downloadsystemd-732bfe09aeffc3cd78b80ee9e20c9c3babd944d6.tar.gz
systemd-732bfe09aeffc3cd78b80ee9e20c9c3babd944d6.tar.bz2
systemd-732bfe09aeffc3cd78b80ee9e20c9c3babd944d6.zip
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.
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac20
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