changeset 30277:f816a8c44924

allow build to succeed when address sanitizer is enabled (bug #61415) * configure.ac, Makefile.am: Explicitly substitute ADDRESS_SANITIZER_ENABLED and ADDRESS_SANITIZER_OPTIONS. * subst-script-vals.in.sh: Also substitute ADDRESS_SANITIZER_ENABLED. * run-octave.in: New option, -disable-asan, to suppress address sanitizer output and disable leak checks on exit. * graphics_properties.mk, images.awk, doc/interpreter/module.mk: Invoke run-octave with -disable-asan.
author John W. Eaton <jwe@octave.org>
date Wed, 10 Nov 2021 11:50:31 -0500
parents 63147d7d53a0
children cc2330cd31e0
files Makefile.am build-aux/subst-script-vals.in.sh configure.ac doc/interpreter/graphics_properties.mk doc/interpreter/images.awk doc/interpreter/module.mk run-octave.in
diffstat 7 files changed, 25 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile.am	Wed Nov 10 10:38:12 2021 -0500
+++ b/Makefile.am	Wed Nov 10 11:50:31 2021 -0500
@@ -76,6 +76,9 @@
 
 AM_CXXFLAGS = ${CXXPICFLAG} ${XTRA_CXXFLAGS} ${WARN_CXXFLAGS} $(OCTAVE_VISIBILITY_FLAGS)
 
+ADDRESS_SANITIZER_ENABLED = @ADDRESS_SANITIZER_ENABLED@
+ADDRESS_SANITIZER_OPTIONS = @ADDRESS_SANITIZER_OPTIONS@
+
 FFTW_XCPPFLAGS = @FFTW_XCPPFLAGS@
 FFTW_XLDFLAGS = @FFTW_XLDFLAGS@
 FFTW_XLIBS = @FFTW_XLIBS@
--- a/build-aux/subst-script-vals.in.sh	Wed Nov 10 10:38:12 2021 -0500
+++ b/build-aux/subst-script-vals.in.sh	Wed Nov 10 11:50:31 2021 -0500
@@ -30,6 +30,7 @@
 AWK="@AWK@"
 FIND="@FIND@"
 SED="@SED@"
+ADDRESS_SANITIZER_ENABLED="@ADDRESS_SANITIZER_ENABLED@"
 ADDRESS_SANITIZER_OPTIONS="@ADDRESS_SANITIZER_OPTIONS@"
 abs_top_srcdir="@abs_top_srcdir@"
 abs_top_builddir="@abs_top_builddir@"
@@ -38,6 +39,7 @@
   -e "s|%AWK%|${AWK}|g" \
   -e "s|%FIND%|${FIND}|g" \
   -e "s|%SED%|${SED}|g" \
+  -e "s|%ADDRESS_SANITIZER_ENABLED%|${ADDRESS_SANITIZER_ENABLED}|g" \
   -e "s|%ADDRESS_SANITIZER_OPTIONS%|${ADDRESS_SANITIZER_OPTIONS}|g" \
   -e "s|%abs_top_srcdir%|${abs_top_srcdir}|" \
   -e "s|%builddir%|${abs_top_builddir}|"
--- a/configure.ac	Wed Nov 10 10:38:12 2021 -0500
+++ b/configure.ac	Wed Nov 10 11:50:31 2021 -0500
@@ -2775,7 +2775,9 @@
 AM_CONDITIONAL([AMCOND_ADDRESS_SANITIZER_ENABLED],
   [test $try_address_sanitizer_flags = yes])
 
+ADDRESS_SANITIZER_ENABLED=no
 if test $try_address_sanitizer_flags = yes; then
+  ADDRESS_SANITIZER_ENABLED=yes
   for flag in $GCC_ADDRESS_SANITIZER_FLAGS; do
     OCTAVE_CC_FLAG([$flag], [
       WARN_CFLAGS="$WARN_CFLAGS $flag";
@@ -2793,6 +2795,7 @@
       AC_MSG_RESULT([adding $flag to WARN_LDFLAGS])])
   done
 fi
+AC_SUBST(ADDRESS_SANITIZER_ENABLED)
 
 AC_SUBST(WARN_CFLAGS)
 AC_SUBST(WARN_CXXFLAGS)
--- a/doc/interpreter/graphics_properties.mk	Wed Nov 10 10:38:12 2021 -0500
+++ b/doc/interpreter/graphics_properties.mk	Wed Nov 10 11:50:31 2021 -0500
@@ -11,7 +11,7 @@
 
 define gen-propdoc-texi
   rm -f $@-t $@ && \
-  $(top_builddir)/run-octave -f -q -H -p $(srcdir)/interpreter --eval "genpropdoc ('$(1)');" > $@-t && \
+  $(top_builddir)/run-octave -disable-asan --norc --silent --no-history --path $(srcdir)/interpreter --eval "genpropdoc ('$(1)');" > $@-t && \
   mv $@-t $@
 endef
 
--- a/doc/interpreter/images.awk	Wed Nov 10 10:38:12 2021 -0500
+++ b/doc/interpreter/images.awk	Wed Nov 10 11:50:31 2021 -0500
@@ -54,7 +54,7 @@
 
     for (j = 2; j <= NF; j++) {
       printf ("%s%s.%s: %s%s\n", dir, $j, ext, dir, script);
-      printf ("\t$(AM_V_GEN)$(SHELL) run-octave --norc --silent --no-history --path $(abs_top_srcdir)/%s --eval \"%s ('%s', '%s', '%s');\"\n",
+      printf ("\t$(AM_V_GEN)$(SHELL) run-octave -disable-asan --norc --silent --no-history --path $(abs_top_srcdir)/%s --eval \"%s ('%s', '%s', '%s');\"\n",
               dir, basename, dir, $j, ext);
     }
   }
--- a/doc/interpreter/module.mk	Wed Nov 10 10:38:12 2021 -0500
+++ b/doc/interpreter/module.mk	Wed Nov 10 11:50:31 2021 -0500
@@ -26,7 +26,7 @@
 
 define gen-propdoc-texi
   rm -f $@-t $@ && \
-  $(SHELL) run-octave --norc --silent --no-history --path $(srcdir)/doc/interpreter --eval "genpropdoc ('$(1)');" > $@-t && \
+  $(SHELL) run-octave -disable-asan --norc --silent --no-history --path $(srcdir)/doc/interpreter --eval "genpropdoc ('$(1)');" > $@-t && \
   mv $@-t $@
 endef
 
--- a/run-octave.in	Wed Nov 10 10:38:12 2021 -0500
+++ b/run-octave.in	Wed Nov 10 11:50:31 2021 -0500
@@ -30,7 +30,8 @@
 : ${AWK=%AWK%}
 : ${FIND=%FIND%}
 : ${SED=%SED%}
-: ${ADDRESS_SANITIZER_OPTIONS="%ADRESS_SANITIZER_OPTIONS%"}
+: ${ADDRESS_SANITIZER_ENABLED="%ADDRESS_SANITIZER_ENABLED%"}
+: ${ADDRESS_SANITIZER_OPTIONS="%ADDRESS_SANITIZER_OPTIONS%"}
 
 # FIXME: is there a better way to handle the possibility of spaces
 #        in these names?
@@ -90,6 +91,9 @@
   elif [ "x$1" = "x-cli" ]; then
     octave_executable="$builddir/src/octave-cli"
     shift
+  elif [ "x$1" = "x-disable-asan" ]; then
+    disable_asan=yes
+    shift
   else
     break
   fi
@@ -119,7 +123,15 @@
 OCTAVE_VERSION_INITFILE="$top_srcdir/scripts/startup/version-rcfile"; export OCTAVE_VERSION_INITFILE
 
 if [ "$ADDRESS_SANITIZER_ENABLED" = yes ]; then
-  ASAN_OPTIONS=symbolize=1; export ASAN_OPTIONS
+  if [ "$disable_asan" = yes ]; then
+    ## Is there a better way to do this so that we don't fill /tmp
+    ## with junk files?  Using /dev/null won't work because asan
+    ## appends the process ID to the file name.
+    ASAN_OPTIONS="leak_check_at_exit=0:log_path=/tmp/oct-asan-log:verbosity=0"
+  else
+    ASAN_OPTIONS="$ADDRESS_SANITIZER_OPTIONS"
+  fi
+  export ASAN_OPTIONS
 fi
 
 exec $builddir/libtool --mode=execute $driver \