From b1bf2671b237e0d31352f20798702da8db707205 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 20 Sep 2016 11:09:01 +0200 Subject: [PATCH] build: fix build with address sanitizer Every program run during the build which loads a NM library must preload libasan.so if the address sanitizer is enabled. Add a macro to set the needed environment variables and use it when performing the shared object link tests. --- libnm/Makefile.am | 12 ++++-------- nm.mk | 9 ++++++++- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/libnm/Makefile.am b/libnm/Makefile.am index ee64d4eb0c..4d17dd1790 100644 --- a/libnm/Makefile.am +++ b/libnm/Makefile.am @@ -1,5 +1,7 @@ include $(GLIB_MAKEFILE) +include $(top_srcdir)/nm.mk + @GNOME_CODE_COVERAGE_RULES@ SUBDIRS = . tests @@ -222,10 +224,7 @@ nm-setting-docs-overrides.xml: generate-plugin-docs.pl $(docs_sources) nm-property-docs.xml: generate-setting-docs.py $(docs_sources) | NM-1.0.gir NM-1.0.typelib libnm.la export GI_TYPELIB_PATH=$(abs_builddir)$${GI_TYPELIB_PATH:+:$$GI_TYPELIB_PATH}; \ export LD_LIBRARY_PATH=$(abs_builddir)/.libs$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH}; \ - if echo $(CFLAGS) | grep -e -fsanitize=address; then \ - export LD_PRELOAD="$${LD_PRELOAD} $$(ldd $(abs_builddir)/.libs/libnm.so | grep libasan\.so\.. -o | head -n 1)"; \ - fi; \ - [ -n "$(SANITIZER_ENV)" ] && export $(SANITIZER_ENV) ; \ + $(call set_sanitizer_env,$(abs_builddir)/.libs/libnm.so); \ $(srcdir)/generate-setting-docs.py \ --gir $(builddir)/NM-1.0.gir \ --output $@ @@ -233,10 +232,7 @@ nm-property-docs.xml: generate-setting-docs.py $(docs_sources) | NM-1.0.gir NM-1 nm-setting-docs.xml: generate-setting-docs.py $(docs_sources) nm-setting-docs-overrides.xml | NM-1.0.gir NM-1.0.typelib libnm.la export GI_TYPELIB_PATH=$(abs_builddir)$${GI_TYPELIB_PATH:+:$$GI_TYPELIB_PATH}; \ export LD_LIBRARY_PATH=$(abs_builddir)/.libs$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH}; \ - if echo $(CFLAGS) | grep -e -fsanitize=address; then \ - export LD_PRELOAD="$${LD_PRELOAD} $$(ldd $(abs_builddir)/.libs/libnm.so | grep libasan\.so\.. -o | head -n 1)"; \ - fi; \ - [ -n "$(SANITIZER_ENV)" ] && export $(SANITIZER_ENV) ; \ + $(call set_sanitizer_env,$(abs_builddir)/.libs/libnm.so); \ $(srcdir)/generate-setting-docs.py \ --gir $(builddir)/NM-1.0.gir \ --overrides $(builddir)/nm-setting-docs-overrides.xml \ diff --git a/nm.mk b/nm.mk index b97fa4bfe3..23f5a647cc 100644 --- a/nm.mk +++ b/nm.mk @@ -1,4 +1,11 @@ # NetworkManager Makefile helpers +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)"; \ + fi + check_so_symbols = \ - LD_BIND_NOW=1 LD_PRELOAD=$(1) $(top_builddir)/src/NetworkManager --version >/dev/null + $(call set_sanitizer_env,$(1)); \ + LD_BIND_NOW=1 LD_PRELOAD=$${LD_PRELOAD}:$(1) $(top_builddir)/src/NetworkManager --version >/dev/null