From ca8dd9f2745d6931f70b7a5f7e46f8e2032d5912 Mon Sep 17 00:00:00 2001 From: Maxim Ostapenko Date: Wed, 4 Jul 2018 19:49:06 +0000 Subject: [PATCH] re PR sanitizer/84250 (Symbol collision when using both Address and Undefined Behavior sanitizers (-fsanitize=address,undefined)) gcc/ 2018-07-04 Maxim Ostapenko PR sanitizer/84250 * config/gnu-user.h (LIBASAN_EARLY_SPEC): Pass -lstdc++ for static libasan. * gcc.c: Do not pass LIBUBSAN_SPEC if ASan is enabled with UBSan. libsanitizer/ 2018-07-04 Maxim Ostapenko PR sanitizer/84250 * Makefile.am: Reorder libs. * Makefile.in: Regenerate. * asan/Makefile.am: Define DCAN_SANITIZE_UB=1, add dependancy from libsanitizer_ubsan.la. * asan/Makefile.in: Regenerate. * ubsan/Makefile.am: Define new libsanitizer_ubsan.la library. * ubsan/Makefile.in: Regenerate. From-SVN: r262421 --- gcc/ChangeLog | 7 ++++ gcc/config/gnu-user.h | 2 +- gcc/gcc.c | 2 +- libsanitizer/ChangeLog | 11 +++++++ libsanitizer/Makefile.am | 2 +- libsanitizer/Makefile.in | 6 ++-- libsanitizer/asan/Makefile.am | 4 +-- libsanitizer/asan/Makefile.in | 8 +++-- libsanitizer/ubsan/Makefile.am | 6 +++- libsanitizer/ubsan/Makefile.in | 58 ++++++++++++++++++++++------------ 10 files changed, 74 insertions(+), 32 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b8989153504..2a609fe6110 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-07-04 Maxim Ostapenko + + PR sanitizer/84250 + * config/gnu-user.h (LIBASAN_EARLY_SPEC): Pass -lstdc++ for static + libasan. + * gcc.c: Do not pass LIBUBSAN_SPEC if ASan is enabled with UBSan. + 2018-07-04 Eric Botcazou PR middle-end/86380 diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h index cba3c0b92e3..ccae9575499 100644 --- a/gcc/config/gnu-user.h +++ b/gcc/config/gnu-user.h @@ -161,7 +161,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #define LIBASAN_EARLY_SPEC "%{!shared:libasan_preinit%O%s} " \ "%{static-libasan:%{!shared:" \ LD_STATIC_OPTION " --whole-archive -lasan --no-whole-archive " \ - LD_DYNAMIC_OPTION "}}%{!static-libasan:-lasan}" + LD_DYNAMIC_OPTION " -lstdc++ }}%{!static-libasan:-lasan}" #undef LIBTSAN_EARLY_SPEC #define LIBTSAN_EARLY_SPEC "%{!shared:libtsan_preinit%O%s} " \ "%{static-libtsan:%{!shared:" \ diff --git a/gcc/gcc.c b/gcc/gcc.c index 9ed8a03af0a..51b7a556877 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -993,7 +993,7 @@ proper position among the other output files. */ %{static:%ecannot specify -static with -fsanitize=address}}\ %{%:sanitize(thread):" LIBTSAN_SPEC "\ %{static:%ecannot specify -static with -fsanitize=thread}}\ - %{%:sanitize(undefined):" LIBUBSAN_SPEC "}\ + %{!%:sanitize(address):%{%:sanitize(undefined):" LIBUBSAN_SPEC "}}\ %{%:sanitize(leak):" LIBLSAN_SPEC "}}}" #endif diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog index 8a1f74ba079..51a8de5a8bf 100644 --- a/libsanitizer/ChangeLog +++ b/libsanitizer/ChangeLog @@ -1,3 +1,14 @@ +2018-07-04 Maxim Ostapenko + + PR sanitizer/84250 + * Makefile.am: Reorder libs. + * Makefile.in: Regenerate. + * asan/Makefile.am: Define DCAN_SANITIZE_UB=1, add dependancy from + libsanitizer_ubsan.la. + * asan/Makefile.in: Regenerate. + * ubsan/Makefile.am: Define new libsanitizer_ubsan.la library. + * ubsan/Makefile.in: Regenerate. + 2018-06-13 Denis Khalikov PR sanitizer/86090 diff --git a/libsanitizer/Makefile.am b/libsanitizer/Makefile.am index 018f0b06823..08d952b0182 100644 --- a/libsanitizer/Makefile.am +++ b/libsanitizer/Makefile.am @@ -14,7 +14,7 @@ endif if LIBBACKTRACE_SUPPORTED SUBDIRS += libbacktrace endif -SUBDIRS += lsan asan ubsan +SUBDIRS += lsan ubsan asan nodist_saninclude_HEADERS += \ include/sanitizer/lsan_interface.h \ include/sanitizer/asan_interface.h \ diff --git a/libsanitizer/Makefile.in b/libsanitizer/Makefile.in index a9fea21eaf8..9074292764b 100644 --- a/libsanitizer/Makefile.in +++ b/libsanitizer/Makefile.in @@ -140,8 +140,8 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS ETAGS = etags CTAGS = ctags -DIST_SUBDIRS = sanitizer_common interception libbacktrace lsan asan \ - ubsan tsan +DIST_SUBDIRS = sanitizer_common interception libbacktrace lsan ubsan \ + asan tsan ACLOCAL = @ACLOCAL@ ALLOC_FILE = @ALLOC_FILE@ AMTAR = @AMTAR@ @@ -294,7 +294,7 @@ ACLOCAL_AMFLAGS = -I .. -I ../config 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@ $(am__append_3) lsan ubsan asan \ @SANITIZER_SUPPORTED_TRUE@ $(am__append_4) gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) diff --git a/libsanitizer/asan/Makefile.am b/libsanitizer/asan/Makefile.am index f105b035796..3ac49eed3b6 100644 --- a/libsanitizer/asan/Makefile.am +++ b/libsanitizer/asan/Makefile.am @@ -3,7 +3,7 @@ AM_CPPFLAGS = -I $(top_srcdir)/include -I $(top_srcdir) # May be used by toolexeclibdir. gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) -DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DASAN_HAS_EXCEPTIONS=1 -DASAN_NEEDS_SEGV=1 -DCAN_SANITIZE_UB=0 +DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DASAN_HAS_EXCEPTIONS=1 -DASAN_NEEDS_SEGV=1 -DCAN_SANITIZE_UB=1 if USING_MAC_INTERPOSE DEFS += -DMAC_INTERPOSE_FUNCTIONS -DMISSING_BLOCKS_SUPPORT endif @@ -48,7 +48,7 @@ asan_files = \ asan_win_dynamic_runtime_thunk.cc libasan_la_SOURCES = $(asan_files) -libasan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/lsan/libsanitizer_lsan.la +libasan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/lsan/libsanitizer_lsan.la $(top_builddir)/ubsan/libsanitizer_ubsan.la if !USING_MAC_INTERPOSE libasan_la_LIBADD += $(top_builddir)/interception/libinterception.la endif diff --git a/libsanitizer/asan/Makefile.in b/libsanitizer/asan/Makefile.in index 4cf27e712f7..8ce2362a8d0 100644 --- a/libsanitizer/asan/Makefile.in +++ b/libsanitizer/asan/Makefile.in @@ -110,7 +110,8 @@ LTLIBRARIES = $(toolexeclib_LTLIBRARIES) am__DEPENDENCIES_1 = libasan_la_DEPENDENCIES = \ $(top_builddir)/sanitizer_common/libsanitizer_common.la \ - $(top_builddir)/lsan/libsanitizer_lsan.la $(am__append_2) \ + $(top_builddir)/lsan/libsanitizer_lsan.la \ + $(top_builddir)/ubsan/libsanitizer_ubsan.la $(am__append_2) \ $(am__append_3) $(am__DEPENDENCIES_1) am__objects_1 = asan_activation.lo asan_allocator.lo asan_debugging.lo \ asan_descriptions.lo asan_errors.lo asan_fake_stack.lo \ @@ -176,7 +177,7 @@ CYGPATH_W = @CYGPATH_W@ DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS \ -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS \ -DASAN_HAS_EXCEPTIONS=1 -DASAN_NEEDS_SEGV=1 \ - -DCAN_SANITIZE_UB=0 $(am__append_1) + -DCAN_SANITIZE_UB=1 $(am__append_1) DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ @@ -346,7 +347,8 @@ asan_files = \ libasan_la_SOURCES = $(asan_files) libasan_la_LIBADD = \ $(top_builddir)/sanitizer_common/libsanitizer_common.la \ - $(top_builddir)/lsan/libsanitizer_lsan.la $(am__append_2) \ + $(top_builddir)/lsan/libsanitizer_lsan.la \ + $(top_builddir)/ubsan/libsanitizer_ubsan.la $(am__append_2) \ $(am__append_3) $(LIBSTDCXX_RAW_CXX_LDFLAGS) libasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libasan) diff --git a/libsanitizer/ubsan/Makefile.am b/libsanitizer/ubsan/Makefile.am index 2bff6be93b7..1bb40bdadad 100644 --- a/libsanitizer/ubsan/Makefile.am +++ b/libsanitizer/ubsan/Makefile.am @@ -11,6 +11,7 @@ AM_CXXFLAGS += $(EXTRA_CXXFLAGS) ACLOCAL_AMFLAGS = -I m4 toolexeclib_LTLIBRARIES = libubsan.la +noinst_LTLIBRARIES = libsanitizer_ubsan.la ubsan_plugin_files = \ ubsan_diag.cc \ @@ -25,7 +26,10 @@ ubsan_plugin_files = \ ubsan_files = $(ubsan_plugin_files) -libubsan_la_SOURCES = $(ubsan_files) +libsanitizer_ubsan_la_SOURCES = $(ubsan_plugin_files) +libsanitizer_ubsan_la_LIBADD = $(LIBSTDCXX_RAW_CXX_LDFLAGS) + +libubsan_la_SOURCES = $(ubsan_files) libubsan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la if !USING_MAC_INTERPOSE libubsan_la_LIBADD += $(top_builddir)/interception/libinterception.la diff --git a/libsanitizer/ubsan/Makefile.in b/libsanitizer/ubsan/Makefile.in index d75260f1ef7..2102deffc2c 100644 --- a/libsanitizer/ubsan/Makefile.in +++ b/libsanitizer/ubsan/Makefile.in @@ -103,15 +103,18 @@ am__uninstall_files_from_dir = { \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(toolexeclibdir)" -LTLIBRARIES = $(toolexeclib_LTLIBRARIES) +LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES) am__DEPENDENCIES_1 = -libubsan_la_DEPENDENCIES = \ - $(top_builddir)/sanitizer_common/libsanitizer_common.la \ - $(am__append_1) $(am__append_2) $(am__DEPENDENCIES_1) +libsanitizer_ubsan_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_1 = ubsan_diag.lo ubsan_flags.lo ubsan_handlers.lo \ ubsan_handlers_cxx.lo ubsan_init.lo ubsan_type_hash.lo \ ubsan_type_hash_itanium.lo ubsan_type_hash_win.lo \ ubsan_value.lo +am_libsanitizer_ubsan_la_OBJECTS = $(am__objects_1) +libsanitizer_ubsan_la_OBJECTS = $(am_libsanitizer_ubsan_la_OBJECTS) +libubsan_la_DEPENDENCIES = \ + $(top_builddir)/sanitizer_common/libsanitizer_common.la \ + $(am__append_1) $(am__append_2) $(am__DEPENDENCIES_1) am__objects_2 = $(am__objects_1) am_libubsan_la_OBJECTS = $(am__objects_2) libubsan_la_OBJECTS = $(am_libubsan_la_OBJECTS) @@ -131,7 +134,7 @@ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ -SOURCES = $(libubsan_la_SOURCES) +SOURCES = $(libsanitizer_ubsan_la_SOURCES) $(libubsan_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -298,6 +301,7 @@ AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic \ -std=gnu++11 $(EXTRA_CXXFLAGS) ACLOCAL_AMFLAGS = -I m4 toolexeclib_LTLIBRARIES = libubsan.la +noinst_LTLIBRARIES = libsanitizer_ubsan.la ubsan_plugin_files = \ ubsan_diag.cc \ ubsan_flags.cc \ @@ -310,7 +314,9 @@ ubsan_plugin_files = \ ubsan_value.cc ubsan_files = $(ubsan_plugin_files) -libubsan_la_SOURCES = $(ubsan_files) +libsanitizer_ubsan_la_SOURCES = $(ubsan_plugin_files) +libsanitizer_ubsan_la_LIBADD = $(LIBSTDCXX_RAW_CXX_LDFLAGS) +libubsan_la_SOURCES = $(ubsan_files) libubsan_la_LIBADD = \ $(top_builddir)/sanitizer_common/libsanitizer_common.la \ $(am__append_1) $(am__append_2) $(LIBSTDCXX_RAW_CXX_LDFLAGS) @@ -389,6 +395,15 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(toolexeclib_LTLIBRARIES)'; test -n "$(toolexeclibdir)" || list=; \ @@ -421,6 +436,8 @@ clean-toolexeclibLTLIBRARIES: echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done +libsanitizer_ubsan.la: $(libsanitizer_ubsan_la_OBJECTS) $(libsanitizer_ubsan_la_DEPENDENCIES) $(EXTRA_libsanitizer_ubsan_la_DEPENDENCIES) + $(CXXLINK) $(libsanitizer_ubsan_la_OBJECTS) $(libsanitizer_ubsan_la_LIBADD) $(LIBS) libubsan.la: $(libubsan_la_OBJECTS) $(libubsan_la_DEPENDENCIES) $(EXTRA_libubsan_la_DEPENDENCIES) $(libubsan_la_LINK) -rpath $(toolexeclibdir) $(libubsan_la_OBJECTS) $(libubsan_la_LIBADD) $(LIBS) @@ -557,8 +574,8 @@ maintainer-clean-generic: @echo "it deletes files that may require special tools to rebuild." clean: clean-am -clean-am: clean-generic clean-libtool clean-toolexeclibLTLIBRARIES \ - mostlyclean-am +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + clean-toolexeclibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) @@ -629,18 +646,19 @@ uninstall-am: uninstall-toolexeclibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-toolexeclibLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip install-toolexeclibLTLIBRARIES installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-toolexeclibLTLIBRARIES + clean-libtool clean-noinstLTLIBRARIES \ + clean-toolexeclibLTLIBRARIES ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags dvi dvi-am \ + html html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip \ + install-toolexeclibLTLIBRARIES installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-toolexeclibLTLIBRARIES # Use special rules for files that require RTTI support. -- 2.30.2