From 8a769f816f8af7a8aac6f16874011c3e15280e38 Mon Sep 17 00:00:00 2001 From: Matthew Malcomson Date: Wed, 25 Nov 2020 16:31:39 +0000 Subject: [PATCH] libsanitizer: Only build libhwasan when targeting AArch64 Though the library has limited support for x86, we don't have any support for generating code targeting x86 so there is no point building for that target. Ensure we build for AArch64 but not for AArch64 ilp32. libsanitizer/ChangeLog: * Makefile.am: Condition Build hwasan directory. * Makefile.in: Regenerate. * configure: Regenerate. * configure.ac: Set HWASAN_SUPPORTED based on target architecture. * configure.tgt: Likewise. --- libsanitizer/Makefile.am | 5 +++- libsanitizer/Makefile.in | 5 ++-- libsanitizer/configure | 48 +++++++++++++++++++++++++++----------- libsanitizer/configure.ac | 19 ++++++++++++++- libsanitizer/configure.tgt | 1 + 5 files changed, 60 insertions(+), 18 deletions(-) diff --git a/libsanitizer/Makefile.am b/libsanitizer/Makefile.am index 2a7e8e1debe..065a65e78d4 100644 --- a/libsanitizer/Makefile.am +++ b/libsanitizer/Makefile.am @@ -14,7 +14,7 @@ endif if LIBBACKTRACE_SUPPORTED SUBDIRS += libbacktrace endif -SUBDIRS += lsan asan ubsan hwasan +SUBDIRS += lsan asan ubsan nodist_saninclude_HEADERS += \ include/sanitizer/lsan_interface.h \ include/sanitizer/asan_interface.h \ @@ -23,6 +23,9 @@ nodist_saninclude_HEADERS += \ if TSAN_SUPPORTED SUBDIRS += tsan endif +if HWASAN_SUPPORTED +SUBDIRS += hwasan +endif endif ## May be used by toolexeclibdir. diff --git a/libsanitizer/Makefile.in b/libsanitizer/Makefile.in index 2c57d49cbff..3873ea4d705 100644 --- a/libsanitizer/Makefile.in +++ b/libsanitizer/Makefile.in @@ -97,6 +97,7 @@ target_triplet = @target@ @SANITIZER_SUPPORTED_TRUE@@USING_MAC_INTERPOSE_FALSE@am__append_2 = interception @LIBBACKTRACE_SUPPORTED_TRUE@@SANITIZER_SUPPORTED_TRUE@am__append_3 = libbacktrace @SANITIZER_SUPPORTED_TRUE@@TSAN_SUPPORTED_TRUE@am__append_4 = tsan +@HWASAN_SUPPORTED_TRUE@@SANITIZER_SUPPORTED_TRUE@am__append_5 = hwasan subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ @@ -208,7 +209,7 @@ ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = sanitizer_common interception libbacktrace lsan asan \ - ubsan hwasan tsan + ubsan tsan hwasan ACLOCAL = @ACLOCAL@ ALLOC_FILE = @ALLOC_FILE@ AMTAR = @AMTAR@ @@ -364,7 +365,7 @@ sanincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include/sanitizer nodist_saninclude_HEADERS = $(am__append_1) @SANITIZER_SUPPORTED_TRUE@SUBDIRS = sanitizer_common $(am__append_2) \ @SANITIZER_SUPPORTED_TRUE@ $(am__append_3) lsan asan ubsan \ -@SANITIZER_SUPPORTED_TRUE@ hwasan $(am__append_4) +@SANITIZER_SUPPORTED_TRUE@ $(am__append_4) $(am__append_5) gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) # Work around what appears to be a GNU make bug handling MAKEFLAGS diff --git a/libsanitizer/configure b/libsanitizer/configure index 27e72c089cb..720d4e17044 100755 --- a/libsanitizer/configure +++ b/libsanitizer/configure @@ -659,6 +659,8 @@ link_libubsan link_libtsan link_libhwasan link_libasan +HWASAN_SUPPORTED_FALSE +HWASAN_SUPPORTED_TRUE LSAN_SUPPORTED_FALSE LSAN_SUPPORTED_TRUE TSAN_SUPPORTED_FALSE @@ -12362,7 +12364,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12365 "configure" +#line 12367 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12468,7 +12470,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12471 "configure" +#line 12473 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -15819,6 +15821,7 @@ fi # Get target configury. unset TSAN_SUPPORTED unset LSAN_SUPPORTED +unset HWASAN_SUPPORTED . ${srcdir}/configure.tgt if test "x$TSAN_SUPPORTED" = "xyes"; then TSAN_SUPPORTED_TRUE= @@ -15836,6 +15839,14 @@ else LSAN_SUPPORTED_FALSE= fi + if test "x$HWASAN_SUPPORTED" = "xyes"; then + HWASAN_SUPPORTED_TRUE= + HWASAN_SUPPORTED_FALSE='#' +else + HWASAN_SUPPORTED_TRUE='#' + HWASAN_SUPPORTED_FALSE= +fi + # Check for functions needed. for ac_func in clock_getres clock_gettime clock_settime lstat readlink @@ -16818,7 +16829,7 @@ ac_config_files="$ac_config_files Makefile libsanitizer.spec libbacktrace/backtr ac_config_headers="$ac_config_headers config.h" -ac_config_files="$ac_config_files interception/Makefile sanitizer_common/Makefile libbacktrace/Makefile lsan/Makefile asan/Makefile hwasan/Makefile ubsan/Makefile" +ac_config_files="$ac_config_files interception/Makefile sanitizer_common/Makefile libbacktrace/Makefile lsan/Makefile asan/Makefile ubsan/Makefile" if test "x$TSAN_SUPPORTED" = "xyes"; then @@ -16826,6 +16837,11 @@ if test "x$TSAN_SUPPORTED" = "xyes"; then fi +if test "x$HWASAN_SUPPORTED" = "xyes"; then + ac_config_files="$ac_config_files hwasan/Makefile" + +fi + @@ -17090,6 +17106,10 @@ if test -z "${LSAN_SUPPORTED_TRUE}" && test -z "${LSAN_SUPPORTED_FALSE}"; then as_fn_error $? "conditional \"LSAN_SUPPORTED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HWASAN_SUPPORTED_TRUE}" && test -z "${HWASAN_SUPPORTED_FALSE}"; then + as_fn_error $? "conditional \"HWASAN_SUPPORTED\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${USING_MAC_INTERPOSE_TRUE}" && test -z "${USING_MAC_INTERPOSE_FALSE}"; then as_fn_error $? "conditional \"USING_MAC_INTERPOSE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -18099,9 +18119,9 @@ do "libbacktrace/Makefile") CONFIG_FILES="$CONFIG_FILES libbacktrace/Makefile" ;; "lsan/Makefile") CONFIG_FILES="$CONFIG_FILES lsan/Makefile" ;; "asan/Makefile") CONFIG_FILES="$CONFIG_FILES asan/Makefile" ;; - "hwasan/Makefile") CONFIG_FILES="$CONFIG_FILES hwasan/Makefile" ;; "ubsan/Makefile") CONFIG_FILES="$CONFIG_FILES ubsan/Makefile" ;; "tsan/Makefile") CONFIG_FILES="$CONFIG_FILES tsan/Makefile" ;; + "hwasan/Makefile") CONFIG_FILES="$CONFIG_FILES hwasan/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac @@ -20035,7 +20055,7 @@ _EOF . ${multi_basedir}/config-ml.in { ml_norecursion=; unset ml_norecursion;} ;; - "hwasan/Makefile":F) cat > vpsed$$ << \_EOF + "ubsan/Makefile":F) cat > vpsed$$ << \_EOF s!`test -f '$<' || echo '$(srcdir)/'`!! _EOF sed -f vpsed$$ $ac_file > tmp$$ @@ -20046,18 +20066,18 @@ _EOF . ${multi_basedir}/config-ml.in { ml_norecursion=; unset ml_norecursion;} ;; - "ubsan/Makefile":F) cat > vpsed$$ << \_EOF + "tsan/Makefile":F) cat > vpsed$$ << \_EOF s!`test -f '$<' || echo '$(srcdir)/'`!! _EOF - sed -f vpsed$$ $ac_file > tmp$$ - mv tmp$$ $ac_file - rm vpsed$$ - echo 'MULTISUBDIR =' >> $ac_file - ml_norecursion=yes - . ${multi_basedir}/config-ml.in - { ml_norecursion=; unset ml_norecursion;} + sed -f vpsed$$ $ac_file > tmp$$ + mv tmp$$ $ac_file + rm vpsed$$ + echo 'MULTISUBDIR =' >> $ac_file + ml_norecursion=yes + . ${multi_basedir}/config-ml.in + { ml_norecursion=; unset ml_norecursion;} ;; - "tsan/Makefile":F) cat > vpsed$$ << \_EOF + "hwasan/Makefile":F) cat > vpsed$$ << \_EOF s!`test -f '$<' || echo '$(srcdir)/'`!! _EOF sed -f vpsed$$ $ac_file > tmp$$ diff --git a/libsanitizer/configure.ac b/libsanitizer/configure.ac index f0d526c5296..13cd302030d 100644 --- a/libsanitizer/configure.ac +++ b/libsanitizer/configure.ac @@ -96,9 +96,11 @@ fi # Get target configury. unset TSAN_SUPPORTED unset LSAN_SUPPORTED +unset HWASAN_SUPPORTED . ${srcdir}/configure.tgt AM_CONDITIONAL(TSAN_SUPPORTED, [test "x$TSAN_SUPPORTED" = "xyes"]) AM_CONDITIONAL(LSAN_SUPPORTED, [test "x$LSAN_SUPPORTED" = "xyes"]) +AM_CONDITIONAL(HWASAN_SUPPORTED, [test "x$HWASAN_SUPPORTED" = "xyes"]) # Check for functions needed. AC_CHECK_FUNCS(clock_getres clock_gettime clock_settime lstat readlink) @@ -352,7 +354,7 @@ AH_BOTTOM([#include "libbacktrace/backtrace-rename.h"]) AC_CONFIG_FILES([Makefile libsanitizer.spec libbacktrace/backtrace-supported.h]) AC_CONFIG_HEADER(config.h) -AC_CONFIG_FILES(AC_FOREACH([DIR], [interception sanitizer_common libbacktrace lsan asan hwasan ubsan], [DIR/Makefile ]), +AC_CONFIG_FILES(AC_FOREACH([DIR], [interception sanitizer_common libbacktrace lsan asan ubsan], [DIR/Makefile ]), [cat > vpsed$$ << \_EOF s!`test -f '$<' || echo '$(srcdir)/'`!! _EOF @@ -380,6 +382,21 @@ _EOF ]) fi +if test "x$HWASAN_SUPPORTED" = "xyes"; then + AC_CONFIG_FILES(AC_FOREACH([DIR], [hwasan], [DIR/Makefile ]), + [cat > vpsed$$ << \_EOF +s!`test -f '$<' || echo '$(srcdir)/'`!! +_EOF + sed -f vpsed$$ $ac_file > tmp$$ + mv tmp$$ $ac_file + rm vpsed$$ + echo 'MULTISUBDIR =' >> $ac_file + ml_norecursion=yes + . ${multi_basedir}/config-ml.in + AS_UNSET([ml_norecursion]) +]) +fi + AC_SUBST([TSAN_TARGET_DEPENDENT_OBJECTS]) AC_SUBST([SANITIZER_COMMON_TARGET_DEPENDENT_OBJECTS]) diff --git a/libsanitizer/configure.tgt b/libsanitizer/configure.tgt index ef9150209c4..5d1dba18266 100644 --- a/libsanitizer/configure.tgt +++ b/libsanitizer/configure.tgt @@ -60,6 +60,7 @@ case "${target}" in TSAN_SUPPORTED=yes LSAN_SUPPORTED=yes TSAN_TARGET_DEPENDENT_OBJECTS=tsan_rtl_aarch64.lo + HWASAN_SUPPORTED=yes fi ;; x86_64-*-darwin2* | x86_64-*-darwin1[2-9]* | i?86-*-darwin1[2-9]*) -- 2.30.2