summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2018-02-07 11:10:31 +0100
committerBeniamino Galvani <bgalvani@redhat.com>2018-02-15 15:34:03 +0100
commit0af2762cbf439507c4a31f538f2e476a8f5e118d (patch)
treea6edb1e88f3e4ccb3e7d29c9fac4e54c2ac59090
parent23e4ef50927a24f599bfe13b6059a3b6a78d1f3c (diff)
downloadNetworkManager-0af2762cbf439507c4a31f538f2e476a8f5e118d.tar.gz
build: allow building with address sanitizer only for executables
Shared libraries built with sanitizers are a bit inconvenient to use because they require that any application linking to them is run with libasan preloaded using LD_PRELOAD. This limitation makes the sanitizer support less useful because applications will refuse to start unless there is a special environment variable set. Let's turn the --enable-address-sanitizer configure flag into --with-address-sanitizer=yes|no|exec so that is possible to enable asan only for executables.
-rw-r--r--Makefile.am125
-rw-r--r--configure.ac38
-rw-r--r--docs/libnm/Makefile.am6
3 files changed, 128 insertions, 41 deletions
diff --git a/Makefile.am b/Makefile.am
index 325a7a428f..e3e58f7639 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -53,7 +53,7 @@ INTROSPECTION_SCANNER_ARGS =
INTROSPECTION_COMPILER_ARGS =
# Pass SANITIZER_ENV where a command that uses built libraries is
# executed, to suppress possible errors
-INTROSPECTION_SCANNER_ENV = $(SANITIZER_ENV)
+INTROSPECTION_SCANNER_ENV = $(SANITIZER_ENV) LDFLAGS="$(SANITIZER_LIB_LDFLAGS)"
libnmincludedir = $(includedir)/libnm
libnminclude_HEADERS =
@@ -104,12 +104,13 @@ endif
set_sanitizer_env = \
[ -n "$(SANITIZER_ENV)" ] && export $(SANITIZER_ENV) ; \
- if [ -n "$(1)" ] && echo $(CFLAGS) | grep -e -fsanitize=address ; then \
- export LD_PRELOAD="$${LD_PRELOAD}:$$(ldd $(1) | grep libasan\.so\.. -o | head -n 1)"; \
+ if echo $(SANITIZER_LIB_CFLAGS) $(SANITIZER_EXEC_CFLAGS) | grep -e -fsanitize=address > /dev/null; then \
+ [ -n "$(1)" ] && export LD_PRELOAD="$${LD_PRELOAD}:$$(ldd $(1) | grep libasan\.so\.. -o | head -n 1)"; \
+ [ -n "$(2)" ] && export LD_PRELOAD="$${LD_PRELOAD}:$$(ldd $(2) | grep libasan\.so\.. -o | head -n 1)"; \
fi
check_so_symbols = \
- $(call set_sanitizer_env,$(1)); \
+ $(call set_sanitizer_env,$(1),$(builddir)/src/NetworkManager); \
LD_BIND_NOW=1 LD_PRELOAD=$${LD_PRELOAD}:$(1) $(builddir)/src/NetworkManager --version >/dev/null
###############################################################################
@@ -545,7 +546,8 @@ dflt_cppflags_libnm_core = \
-I$(builddir)/libnm-core \
$(CODE_COVERAGE_CFLAGS) \
$(GLIB_CFLAGS) \
- $(LIBUDEV_CFLAGS)
+ $(LIBUDEV_CFLAGS) \
+ $(SANITIZER_LIB_CFLAGS)
if WITH_GNUTLS
dflt_cppflags_libnm_core += $(GNUTLS_CFLAGS)
@@ -609,7 +611,8 @@ libnm_core_libnm_core_la_LIBADD = \
$(LIBUDEV_LIBS)
libnm_core_libnm_core_la_LDFLAGS = \
- $(CODE_COVERAGE_LDFLAGS)
+ $(CODE_COVERAGE_LDFLAGS) \
+ $(SANITIZER_LIB_LDFLAGS)
if WITH_GNUTLS
libnm_core_lib_c_real += libnm-core/crypto_gnutls.c
@@ -693,6 +696,9 @@ libnm_core_tests_ldadd = \
libnm-core/libnm-core.la \
$(GLIB_LIBS)
+libnm_core_tests_ldflags = \
+ $(SANITIZER_LIB_LDFLAGS)
+
libnm_core_tests_test_compare_LDADD = $(libnm_core_tests_ldadd)
libnm_core_tests_test_crypto_LDADD = $(libnm_core_tests_ldadd)
libnm_core_tests_test_general_LDADD = $(libnm_core_tests_ldadd)
@@ -701,6 +707,14 @@ libnm_core_tests_test_secrets_LDADD = $(libnm_core_tests_ldadd)
libnm_core_tests_test_setting_LDADD = $(libnm_core_tests_ldadd)
libnm_core_tests_test_settings_defaults_LDADD = $(libnm_core_tests_ldadd)
+libnm_core_tests_test_compare_LDFLAGS = $(libnm_core_tests_ldflags)
+libnm_core_tests_test_crypto_LDFLAGS = $(libnm_core_tests_ldflags)
+libnm_core_tests_test_general_LDFLAGS = $(libnm_core_tests_ldflags)
+libnm_core_tests_test_keyfile_LDFLAGS = $(libnm_core_tests_ldflags)
+libnm_core_tests_test_secrets_LDFLAGS = $(libnm_core_tests_ldflags)
+libnm_core_tests_test_setting_LDFLAGS = $(libnm_core_tests_ldflags)
+libnm_core_tests_test_settings_defaults_LDFLAGS = $(libnm_core_tests_ldflags)
+
$(libnm_core_tests_test_compare_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
$(libnm_core_tests_test_crypto_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
$(libnm_core_tests_test_general_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
@@ -901,7 +915,8 @@ $(libnm_tests_libnm_vpn_plugin_utils_test_la_OBJECTS): $(libnm_core_lib_h_pub_m
libnm_libnm_la_CPPFLAGS = \
$(libnm_lib_cppflags) \
- $(LIBUDEV_CFLAGS)
+ $(LIBUDEV_CFLAGS) \
+ $(SANITIZER_LIB_CFLAGS)
libnm_libnm_la_SOURCES = \
$(libnm_lib_h_pub_real) \
@@ -925,6 +940,7 @@ libnm_libnm_la_LIBADD = \
libnm_libnm_la_LDFLAGS = \
-Wl,--version-script="$(srcdir)/libnm/libnm.ver" \
$(CODE_COVERAGE_LDFLAGS) \
+ $(SANITIZER_LIB_LDFLAGS) \
-version-info "1:0:1"
check-local-exports-libnm: libnm/libnm.la
@@ -1071,6 +1087,9 @@ libnm_tests_ldadd = \
libnm/libnm.la \
$(GLIB_LIBS)
+libnm_tests_ldflags = \
+ $(SANITIZER_LIB_LDFLAGS)
+
libnm_tests_test_general_CPPFLAGS = $(libnm_tests_cppflags)
libnm_tests_test_nm_client_CPPFLAGS = $(libnm_tests_cppflags)
libnm_tests_test_remote_settings_client_CPPFLAGS = $(libnm_tests_cppflags)
@@ -1102,6 +1121,11 @@ libnm_tests_test_nm_client_LDADD = $(libnm_tests_ldadd)
libnm_tests_test_remote_settings_client_LDADD = $(libnm_tests_ldadd)
libnm_tests_test_secret_agent_LDADD = $(libnm_tests_ldadd)
+libnm_tests_test_general_LDFLAGS = $(libnm_tests_ldflags)
+libnm_tests_test_nm_client_LDFLAGS = $(libnm_tests_ldflags)
+libnm_tests_test_remote_settings_client_LDFLAGS = $(libnm_tests_ldflags)
+libnm_tests_test_secret_agent_LDFLAGS = $(libnm_tests_ldflags)
+
$(libnm_tests_test_general_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
$(libnm_tests_test_nm_client_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
$(libnm_tests_test_remote_settings_client_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
@@ -1125,6 +1149,7 @@ libnm_tests_libnm_vpn_plugin_utils_test_la_CFLAGS = \
-I$(srcdir)/libnm \
-I$(builddir)/libnm \
$(GLIB_CFLAGS) \
+ $(SANITIZER_EXEC_CFLAGS) \
-DNETWORKMANAGER_COMPILATION_TEST \
-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT
@@ -1175,6 +1200,7 @@ src_cppflags = \
$(LIBAUDIT_CFLAGS) \
$(SYSTEMD_LOGIN_CFLAGS) \
$(SYSTEMD_JOURNAL_CFLAGS) \
+ $(SANITIZER_EXEC_CFLAGS) \
\
$(NULL)
@@ -1640,6 +1666,7 @@ check_ltlibraries += src/libNetworkManagerTest.la
src_tests_cppflags = \
$(src_cppflags) \
+ $(SANITIZER_EXEC_CFLAGS) \
-DNETWORKMANAGER_COMPILATION_TEST
if REQUIRE_ROOT_TESTS
@@ -1688,7 +1715,8 @@ src_NetworkManager_LDADD = \
src_NetworkManager_LDFLAGS = \
-rdynamic \
- -Wl,--version-script="src/NetworkManager.ver"
+ -Wl,--version-script="src/NetworkManager.ver" \
+ $(SANITIZER_EXEC_LDFLAGS)
$(src_NetworkManager_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
@@ -1709,7 +1737,8 @@ src_nm_iface_helper_LDADD = \
$(DL_LIBS)
src_nm_iface_helper_LDFLAGS = \
- -Wl,--version-script="$(srcdir)/linker-script-binary.ver"
+ -Wl,--version-script="$(srcdir)/linker-script-binary.ver" \
+ $(SANITIZER_EXEC_LDFLAGS)
$(src_nm_iface_helper_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
@@ -1768,6 +1797,9 @@ src_dhcp_tests_test_dhcp_utils_CPPFLAGS = $(src_dhcp_tests_cppflags)
src_dhcp_tests_test_dhcp_dhclient_LDADD = $(src_dhcp_tests_ldadd)
src_dhcp_tests_test_dhcp_utils_LDADD = $(src_dhcp_tests_ldadd)
+src_dhcp_tests_test_dhcp_dhclient_LDFLAGS = $(src_tests_ldflags)
+src_dhcp_tests_test_dhcp_utils_LDFLAGS = $(src_tests_ldflags)
+
$(src_dhcp_tests_test_dhcp_dhclient_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
$(src_dhcp_tests_test_dhcp_utils_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
@@ -1861,7 +1893,8 @@ src_settings_plugins_keyfile_tests_test_keyfile_CPPFLAGS = \
src_settings_plugins_keyfile_tests_test_keyfile_LDFLAGS = \
$(GLIB_LIBS) \
- $(CODE_COVERAGE_LDFLAGS)
+ $(CODE_COVERAGE_LDFLAGS) \
+ $(SANITIZER_EXEC_LDFLAGS)
src_settings_plugins_keyfile_tests_test_keyfile_LDADD = \
src/libNetworkManagerTest.la
@@ -1973,7 +2006,8 @@ src_settings_plugins_ibft_tests_test_ibft_CPPFLAGS = \
src_settings_plugins_ibft_tests_test_ibft_LDFLAGS = \
$(GLIB_LIBS) \
- $(CODE_COVERAGE_LDFLAGS)
+ $(CODE_COVERAGE_LDFLAGS) \
+ $(SANITIZER_EXEC_LDFLAGS)
src_settings_plugins_ibft_tests_test_ibft_LDADD = \
src/settings/plugins/ibft/libnms-ibft-core.la \
@@ -2024,6 +2058,7 @@ src_settings_plugins_ifcfg_rh_cppflags = \
-I$(builddir)/libnm-core \
$(GLIB_CFLAGS) \
$(NSS_CFLAGS) \
+ $(SANITIZER_EXEC_CFLAGS) \
-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_DAEMON \
-DSYSCONFDIR=\"$(sysconfdir)\" \
-DSBINDIR=\"$(sbindir)\"
@@ -2080,7 +2115,8 @@ src_settings_plugins_ifcfg_rh_libnm_settings_plugin_ifcfg_rh_la_CPPFLAGS = $(src
src_settings_plugins_ifcfg_rh_libnm_settings_plugin_ifcfg_rh_la_LDFLAGS = \
-module -avoid-version \
- -Wl,--version-script="$(srcdir)/linker-script-settings.ver"
+ -Wl,--version-script="$(srcdir)/linker-script-settings.ver" \
+ $(SANITIZER_EXEC_LDFLAGS)
src_settings_plugins_ifcfg_rh_libnm_settings_plugin_ifcfg_rh_la_LIBADD = \
src/settings/plugins/ifcfg-rh/libnms-ifcfg-rh-core.la
@@ -2109,7 +2145,8 @@ src_settings_plugins_ifcfg_rh_tests_test_ifcfg_rh_CPPFLAGS = \
src_settings_plugins_ifcfg_rh_tests_test_ifcfg_rh_LDFLAGS = \
$(GLIB_LIBS) \
- $(CODE_COVERAGE_LDFLAGS)
+ $(CODE_COVERAGE_LDFLAGS) \
+ $(SANITIZER_EXEC_LDFLAGS)
src_settings_plugins_ifcfg_rh_tests_test_ifcfg_rh_LDADD = \
src/settings/plugins/ifcfg-rh/libnms-ifcfg-rh-core.la \
@@ -2416,7 +2453,8 @@ src_settings_plugins_ifupdown_tests_test_ifupdown_CPPFLAGS = \
src_settings_plugins_ifupdown_tests_test_ifupdown_LDFLAGS = \
$(GLIB_LDFLAGS) \
- $(CODE_COVERAGE_LDFLAGS)
+ $(CODE_COVERAGE_LDFLAGS) \
+ $(SANITIZER_EXEC_LDFLAGS)
src_settings_plugins_ifupdown_tests_test_ifupdown_LDADD = \
src/settings/plugins/ifupdown/libnms-ifupdown-core.la \
@@ -2718,6 +2756,7 @@ src_devices_wifi_tests_test_general_CPPFLAGS = \
$(GLIB_CFLAGS)
src_devices_wifi_tests_test_general_LDADD = src/libNetworkManagerTest.la
+src_devices_wifi_tests_test_general_LDFLAGS = $(SANITIZER_EXEC_LDFLAGS)
$(src_devices_wifi_tests_test_general_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
@@ -2846,6 +2885,9 @@ src_dnsmasq_tests_test_dnsmasq_utils_CPPFLAGS = \
src_dnsmasq_tests_test_dnsmasq_utils_LDADD = \
src/libNetworkManagerTest.la
+src_dnsmasq_tests_test_dnsmasq_utils_LDFLAGS = \
+ $(SANITIZER_EXEC_LDFLAGS)
+
$(src_dnsmasq_tests_test_dnsmasq_utils_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
EXTRA_DIST += \
@@ -2856,7 +2898,8 @@ EXTRA_DIST += \
###############################################################################
src_platform_tests_ldflags = \
- $(CODE_COVERAGE_LDFLAGS)
+ $(CODE_COVERAGE_LDFLAGS) \
+ $(SANITIZER_EXEC_LDFLAGS)
src_platform_tests_libadd = \
src/libNetworkManagerTest.la \
@@ -2951,7 +2994,8 @@ EXTRA_DIST += \
###############################################################################
src_devices_tests_ldflags = \
- $(CODE_COVERAGE_LDFLAGS)
+ $(CODE_COVERAGE_LDFLAGS) \
+ $(SANITIZER_EXEC_LDFLAGS)
check_programs += \
src/devices/tests/test-lldp \
@@ -2978,7 +3022,8 @@ EXTRA_DIST += \
###############################################################################
src_ndisc_tests_ldflags = \
- $(CODE_COVERAGE_LDFLAGS)
+ $(CODE_COVERAGE_LDFLAGS) \
+ $(SANITIZER_EXEC_LDFLAGS)
src_ndisc_tests_ldadd = \
src/libNetworkManagerTest.la \
@@ -2988,11 +3033,11 @@ check_programs += src/ndisc/tests/test-ndisc-fake
check_programs_norun += src/ndisc/tests/test-ndisc-linux
src_ndisc_tests_test_ndisc_linux_CPPFLAGS = $(src_tests_cppflags)
-src_ndisc_tests_test_ndisc_linux_LDFLAGS = $(src_ndisc_tests_flags)
+src_ndisc_tests_test_ndisc_linux_LDFLAGS = $(src_ndisc_tests_ldflags)
src_ndisc_tests_test_ndisc_linux_LDADD = $(src_ndisc_tests_ldadd)
src_ndisc_tests_test_ndisc_fake_CPPFLAGS = $(src_tests_cppflags)
-src_ndisc_tests_test_ndisc_fake_LDFLAGS = $(src_ndisc_tests_flags)
+src_ndisc_tests_test_ndisc_fake_LDFLAGS = $(src_ndisc_tests_ldflags)
src_ndisc_tests_test_ndisc_fake_LDADD = $(src_ndisc_tests_ldadd)
$(src_ndisc_tests_test_ndisc_linux_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
@@ -3014,6 +3059,9 @@ src_supplicant_tests_test_supplicant_config_CPPFLAGS = \
src_supplicant_tests_test_supplicant_config_LDADD = \
src/libNetworkManagerTest.la
+src_supplicant_tests_test_supplicant_config_LDFLAGS = \
+ $(SANITIZER_EXEC_LDFLAGS)
+
$(src_supplicant_tests_test_supplicant_config_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
EXTRA_DIST += \
@@ -3040,6 +3088,9 @@ src_tests_config_test_config_CPPFLAGS = \
src_tests_config_test_config_LDADD = \
src/libNetworkManagerTest.la
+src_tests_config_test_config_LDFLAGS = \
+ $(SANITIZER_EXEC_LDFLAGS)
+
$(src_tests_config_test_config_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
EXTRA_DIST += \
@@ -3058,7 +3109,8 @@ EXTRA_DIST += \
###############################################################################
src_tests_ldflags = \
- $(CODE_COVERAGE_LDFLAGS)
+ $(CODE_COVERAGE_LDFLAGS) \
+ $(SANITIZER_EXEC_LDFLAGS)
src_tests_ldadd = \
src/libNetworkManagerTest.la
@@ -3251,7 +3303,11 @@ dispatcher_tests_test_dispatcher_envp_CPPFLAGS = \
-DSRCDIR=\"$(abs_srcdir)/dispatcher/tests\" \
-DNETWORKMANAGER_COMPILATION_TEST \
-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \
- $(GLIB_CFLAGS)
+ $(GLIB_CFLAGS) \
+ $(SANITIZER_EXEC_CFLAGS)
+
+dispatcher_tests_test_dispatcher_envp_LDFLAGS = \
+ $(SANITIZER_EXEC_LDFLAGS)
dispatcher_tests_test_dispatcher_envp_LDADD = \
libnm/libnm.la \
@@ -3413,7 +3469,11 @@ clients_common_tests_test_general_CPPFLAGS = \
-I$(srcdir)/clients/common/tests \
$(clients_cppflags) \
-DNETWORKMANAGER_COMPILATION_TEST \
- -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT
+ -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \
+ $(SANITIZER_EXEC_CFLAGS)
+
+clients_common_tests_test_general_LDFLAGS = \
+ $(SANITIZER_EXEC_LDFLAGS)
clients_common_tests_test_general_LDADD = \
libnm/libnm.la \
@@ -3455,6 +3515,7 @@ clients_cli_nmcli_SOURCES = \
clients_cli_nmcli_CPPFLAGS = \
-I$(srcdir)/clients/cli \
$(clients_cppflags) \
+ $(SANITIZER_EXEC_CFLAGS) \
-DG_LOG_DOMAIN=\""nmcli"\" \
-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \
-DNMCLI_LOCALEDIR=\"$(datadir)/locale\"
@@ -3475,7 +3536,8 @@ clients_cli_nmcli_LDADD += $(POLKIT_LIBS)
endif
clients_cli_nmcli_LDFLAGS = \
- -Wl,--version-script="$(srcdir)/linker-script-binary.ver"
+ -Wl,--version-script="$(srcdir)/linker-script-binary.ver" \
+ $(SANITIZER_EXEC_LDFLAGS)
$(clients_cli_nmcli_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
@@ -3563,6 +3625,7 @@ clients_tui_newt_libnmt_newt_a_CPPFLAGS = \
-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \
$(GLIB_CFLAGS) \
$(NEWT_CFLAGS) \
+ $(SANITIZER_EXEC_CFLAGS) \
$(NULL)
bin_PROGRAMS += clients/tui/nmtui
@@ -3661,7 +3724,8 @@ clients_tui_nmtui_CPPFLAGS = \
-DLOCALEDIR=\""$(localedir)"\"
clients_tui_nmtui_LDFLAGS = \
- -Wl,--version-script="$(srcdir)/linker-script-binary.ver"
+ -Wl,--version-script="$(srcdir)/linker-script-binary.ver" \
+ $(SANITIZER_EXEC_LDFLAGS)
clients_tui_nmtui_LDADD = \
libnm/libnm.la \
@@ -4005,13 +4069,17 @@ libnm_util_tests_cppflags = \
-DBUILD_DIR=\"$(abs_builddir)/libnm-util/tests\" \
-DTEST_CERT_DIR=\"$(abs_srcdir)/libnm-core/tests/certs\" \
-DNETWORKMANAGER_COMPILATION_TEST \
- -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM_UTIL
+ -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM_UTIL \
+ $(SANITIZER_EXEC_CFLAGS)
libnm_util_tests_ldadd = \
libnm-util/libnm-util.la \
$(GLIB_LIBS) \
$(DBUS_LIBS)
+libnm_util_tests_ldflags = \
+ $(SANITIZER_EXEC_LDFLAGS)
+
check_programs += \
libnm-util/tests/test-settings-defaults \
libnm-util/tests/test-crypto \
@@ -4025,29 +4093,36 @@ check_programs_norun += \
libnm_util_tests_test_settings_defaults_CPPFLAGS = $(libnm_util_tests_cppflags)
libnm_util_tests_test_settings_defaults_LDADD = $(libnm_util_tests_ldadd)
+libnm_util_tests_test_settings_defaults_LDFLAGS = $(libnm_util_tests_ldflags)
libnm_util_tests_test_crypto_CPPFLAGS = $(libnm_util_tests_cppflags)
libnm_util_tests_test_crypto_LDADD = \
libnm-util/libtest-crypto.la \
$(libnm_util_tests_ldadd)
+libnm_util_tests_test_crypto_LDFLAGS = $(libnm_util_tests_ldflags)
libnm_util_tests_test_secrets_CPPFLAGS = $(libnm_util_tests_cppflags)
libnm_util_tests_test_secrets_LDADD = $(libnm_util_tests_ldadd)
+libnm_util_tests_test_secrets_LDFLAGS = $(libnm_util_tests_ldflags)
libnm_util_tests_test_general_DEPENDENCIES = libnm-util/tests/test-libnm-linking
libnm_util_tests_test_general_CPPFLAGS = $(libnm_util_tests_cppflags)
libnm_util_tests_test_general_LDADD = $(libnm_util_tests_ldadd)
+libnm_util_tests_test_general_LDFLAGS = $(libnm_util_tests_ldflags)
libnm_util_tests_test_setting_8021x_CPPFLAGS = $(libnm_util_tests_cppflags)
libnm_util_tests_test_setting_8021x_LDADD = $(libnm_util_tests_ldadd)
+libnm_util_tests_test_setting_8021x_LDFLAGS = $(libnm_util_tests_ldflags)
libnm_util_tests_test_setting_dcb_CPPFLAGS = $(libnm_util_tests_cppflags)
libnm_util_tests_test_setting_dcb_LDADD = $(libnm_util_tests_ldadd)
+libnm_util_tests_test_setting_dcb_LDFLAGS = $(libnm_util_tests_ldflags)
libnm_util_tests_test_libnm_linking_CPPFLAGS = $(libnm_util_tests_cppflags)
libnm_util_tests_test_libnm_linking_LDADD = \
libnm/libnm.la \
$(libnm_util_tests_ldadd)
+libnm_util_tests_test_libnm_linking_LDFLAGS = $(libnm_util_tests_ldflags)
$(libnm_util_tests_test_settings_defaults_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
$(libnm_util_tests_test_crypto_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
diff --git a/configure.ac b/configure.ac
index f7a1eea937..62dae15eef 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1139,16 +1139,24 @@ fi
NM_LTO
NM_LD_GC
-AC_ARG_ENABLE(address-sanitizer,
- AS_HELP_STRING([--enable-address-sanitizer], [Compile with address sanitizer (default: no)]))
-if (test "${enable_address_sanitizer}" = "yes"); then
+AC_ARG_WITH(address-sanitizer,
+ AS_HELP_STRING([--with-address-sanitizer=yes|no|exec], [Enable address sanitizer (default: no)]))
+if test "$with_address_sanitizer" = yes -o "$with_address_sanitizer" = "exec"; then
CC_CHECK_FLAGS_APPEND([asan_cflags], [CFLAGS], [-fsanitize=address])
AS_IF([test -z "$asan_cflags"],
[AC_MSG_ERROR([*** -fsanitize=address is not supported])])
- sanitizer_cflags="$sanitizer_cflags -fsanitize=address"
- sanitizer_ldflags="$sanitizer_ldflags -Wc,-fsanitize=address"
- sanitizers="${sanitizers}asan "
+ sanitizer_exec_cflags="$sanitizer_exec_cflags -fsanitize=address"
+ sanitizer_exec_ldflags="$sanitizer_exec_ldflags -Wc,-fsanitize=address"
+
+ if test "$with_address_sanitizer" = "yes"; then
+ sanitizer_lib_cflags="$sanitizer_lib_cflags -fsanitize=address"
+ sanitizer_lib_ldflags="$sanitizer_lib_ldflags -Wc,-fsanitize=address"
+ sanitizers="${sanitizers}address "
+ asan_options="ASAN_OPTIONS=detect_leaks=0"
+ else
+ sanitizers="${sanitizers}address(executables-only) "
+ fi
fi
AC_ARG_ENABLE(undefined-sanitizer,
@@ -1159,20 +1167,22 @@ if (test "${enable_undefined_sanitizer}" = "yes"); then
AS_IF([test -z "$ubsan_cflags"],
[AC_MSG_ERROR([*** -fsanitize=undefined is not supported])])
- sanitizer_cflags="$sanitizer_cflags -fsanitize=undefined"
- sanitizer_ldflags="$sanitizer_ldflags -Wc,-fsanitize=undefined"
- sanitizers="${sanitizers}ubsan "
+ sanitizer_exec_cflags="$sanitizer_exec_cflags -fsanitize=undefined"
+ sanitizer_lib_cflags="$sanitizer_lib_cflags -fsanitize=undefined"
+ sanitizer_exec_ldflags="$sanitizer_exec_ldflags -Wc,-fsanitize=undefined"
+ sanitizer_lib_ldflags="$sanitizer_lib_ldflags -Wc,-fsanitize=undefined"
+ sanitizers="${sanitizers}undefined-behavior "
fi
if test -n "$sanitizers"; then
- CFLAGS="$CFLAGS $sanitizer_cflags -DVALGRIND=1 -fno-omit-frame-pointer"
- LDFLAGS="$LDFLAGS $sanitizer_ldflags"
sanitizers="${sanitizers% }"
- AC_SUBST(SANITIZER_ENV, [ASAN_OPTIONS=detect_leaks=0])
+ AC_SUBST(SANITIZER_ENV, ["$asan_options"])
+ AC_SUBST(SANITIZER_EXEC_CFLAGS, ["$sanitizer_exec_cflags -DVALGRIND=1 -fno-omit-frame-pointer"])
+ AC_SUBST(SANITIZER_LIB_CFLAGS, ["$sanitizer_lib_cflags -DVALGRIND=1 -fno-omit-frame-pointer"])
+ AC_SUBST(SANITIZER_EXEC_LDFLAGS, [$sanitizer_exec_ldflags])
+ AC_SUBST(SANITIZER_LIB_LDFLAGS, [$sanitizer_lib_ldflags])
fi
-AC_SUBST(SANITIZERS, [$sanitizers])
-
AC_MSG_CHECKING([CC support C11 _Generic()])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int foo(void); int foo() { int a = 0; int b = _Generic (a, int: 4); return b + a; }]],
[[foo();]])],
diff --git a/docs/libnm/Makefile.am b/docs/libnm/Makefile.am
index 89784967fa..c2bcff1be5 100644
--- a/docs/libnm/Makefile.am
+++ b/docs/libnm/Makefile.am
@@ -72,11 +72,13 @@ GTKDOC_CFLAGS = \
-I$(top_srcdir)/libnm \
-I$(top_builddir)/libnm \
-DNM_VERSION_MIN_REQUIRED=NM_VERSION_0_9_8 \
- $(GLIB_CFLAGS)
+ $(GLIB_CFLAGS) \
+ $(SANITIZER_EXEC_CFLAGS)
GTKDOC_LIBS = \
$(top_builddir)/libnm/libnm.la \
- $(GLIB_LIBS)
+ $(GLIB_LIBS) \
+ $(SANITIZER_EXEC_LDFLAGS)
# include common portion ...