external/libabw/UnpackedTarball_libabw.mk | 10 ++++++++++ external/libabw/ubsan-visibility.patch | 11 +++++++++++ external/libcdr/UnpackedTarball_libcdr.mk | 10 ++++++++++ external/libcdr/ubsan-visibility.patch | 11 +++++++++++ external/libebook/UnpackedTarball_libebook.mk | 8 ++++++++ external/libebook/ubsan-visibility.patch | 11 +++++++++++ external/libmspub/UnpackedTarball_libmspub.mk | 8 ++++++++ external/libmspub/ubsan-visibility.patch | 11 +++++++++++ external/libmwaw/UnpackedTarball_libmwaw.mk | 8 ++++++++ external/libmwaw/ubsan-visibility.patch.0 | 11 +++++++++++ external/libodfgen/UnpackedTarball_libodfgen.mk | 8 ++++++++ external/libodfgen/ubsan-visibility.patch | 11 +++++++++++ external/libpagemaker/UnpackedTarball_libpagemaker.mk | 10 ++++++++++ external/libpagemaker/ubsan-visibility.patch | 11 +++++++++++ external/librevenge/UnpackedTarball_librevenge.mk | 10 +++++++++- external/librevenge/ubsan-visibility.patch | 11 +++++++++++ external/libvisio/UnpackedTarball_libvisio.mk | 8 ++++++++ external/libvisio/ubsan-visibility.patch | 11 +++++++++++ solenv/gbuild/platform/com_GCC_defs.mk | 8 +++++++- 19 files changed, 185 insertions(+), 2 deletions(-)
New commits: commit f0aa1a78fb209310e8baef53c02f365fca518d11 Author: Stephan Bergmann <sberg...@redhat.com> Date: Fri Feb 27 10:05:22 2015 +0100 For Clang -fsanitize=vptr use -fvisibility-ms-compat, not -fvisibility=hidden As discussed in b4f6b26b5a1a78fecfa95ec2eb7ac8b80495d8aa "SAL_DLLPUBLIC_RTTI for proper RTTI visibility for LLVM," RTTI-based -fsanitize= checks with Clang on Linux need special precautions to make RTTI symbols visible across DSOs. The approach taken there, as well as in 598d8194b0ea1a64e0ebba28a86c128bafa57c7c "Visible function type RTTI for Clang -fsanitize=function," was to add explicit SAL_DLLPUBLIC_RTTI annontations to relevant type definitions. However, for -fsanitize=vptr that would have required many more of those, so it appears easier to "misuse" -fsanitize-ms-compat in that case, which happens to give all RTTI symbols default visibility (while otherwise still honoring our SAL_DLLPUBLIC/PRIVATE annotations). The SAL_DLLPUBLIC_RTTI annotations from 598d8194b0ea1a64e0ebba28a86c128bafa57c7c "Visible function type RTTI for Clang -fsanitize=function" can likely be removed again. Change-Id: Ibeff7ab8c908111a7dc66ff0677204f112b24db8 diff --git a/external/libabw/UnpackedTarball_libabw.mk b/external/libabw/UnpackedTarball_libabw.mk index 6288b0e..eb6b75c 100644 --- a/external/libabw/UnpackedTarball_libabw.mk +++ b/external/libabw/UnpackedTarball_libabw.mk @@ -11,4 +11,14 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,libabw)) $(eval $(call gb_UnpackedTarball_set_tarball,libabw,$(ABW_TARBALL))) +$(eval $(call gb_UnpackedTarball_set_patchlevel,libabw,0)) + +ifeq ($(COM_GCC_IS_CLANG),TRUE) +ifneq ($(filter -fsanitize=%,$(CC)),) +$(eval $(call gb_UnpackedTarball_add_patches,libabw, \ + external/libabw/ubsan-visibility.patch \ +)) +endif +endif + # vim: set noet sw=4 ts=4: diff --git a/external/libabw/ubsan-visibility.patch b/external/libabw/ubsan-visibility.patch new file mode 100644 index 0000000..2285ef8 --- /dev/null +++ b/external/libabw/ubsan-visibility.patch @@ -0,0 +1,11 @@ +--- configure ++++ configure +@@ -16635,7 +16635,7 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fvisibility=hidden compiler flag" >&5 + $as_echo_n "checking for -fvisibility=hidden compiler flag... " >&6; } + saved_CXXFLAGS="$CXXFLAGS" +- CXXFLAGS="$CXXFLAGS -fvisibility=hidden" ++ CXXFLAGS="$CXXFLAGS -fvisibility-ms-compat" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + diff --git a/external/libcdr/UnpackedTarball_libcdr.mk b/external/libcdr/UnpackedTarball_libcdr.mk index a91bc8e..f43bd1b 100644 --- a/external/libcdr/UnpackedTarball_libcdr.mk +++ b/external/libcdr/UnpackedTarball_libcdr.mk @@ -11,4 +11,14 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,libcdr)) $(eval $(call gb_UnpackedTarball_set_tarball,libcdr,$(CDR_TARBALL))) +$(eval $(call gb_UnpackedTarball_set_patchlevel,libcdr,0)) + +ifeq ($(COM_GCC_IS_CLANG),TRUE) +ifneq ($(filter -fsanitize=%,$(CC)),) +$(eval $(call gb_UnpackedTarball_add_patches,libcdr, \ + external/libcdr/ubsan-visibility.patch \ +)) +endif +endif + # vim: set noet sw=4 ts=4: diff --git a/external/libcdr/ubsan-visibility.patch b/external/libcdr/ubsan-visibility.patch new file mode 100644 index 0000000..2581786 --- /dev/null +++ b/external/libcdr/ubsan-visibility.patch @@ -0,0 +1,11 @@ +--- configure ++++ configure +@@ -17651,7 +17641,7 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fvisibility=hidden compiler flag" >&5 + $as_echo_n "checking for -fvisibility=hidden compiler flag... " >&6; } + saved_CXXFLAGS="$CXXFLAGS" +- CXXFLAGS="$CXXFLAGS -fvisibility=hidden" ++ CXXFLAGS="$CXXFLAGS -fvisibility-ms-compat" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + diff --git a/external/libebook/UnpackedTarball_libebook.mk b/external/libebook/UnpackedTarball_libebook.mk index 02c17db..4d8622e 100644 --- a/external/libebook/UnpackedTarball_libebook.mk +++ b/external/libebook/UnpackedTarball_libebook.mk @@ -18,4 +18,12 @@ $(eval $(call gb_UnpackedTarball_add_patches,libebook, \ external/libebook/0001-lrf-compute-color-interpolation-coeff.-correctly.patch.1 \ )) +ifeq ($(COM_GCC_IS_CLANG),TRUE) +ifneq ($(filter -fsanitize=%,$(CC)),) +$(eval $(call gb_UnpackedTarball_add_patches,libebook, \ + external/libebook/ubsan-visibility.patch \ +)) +endif +endif + # vim: set noet sw=4 ts=4: diff --git a/external/libebook/ubsan-visibility.patch b/external/libebook/ubsan-visibility.patch new file mode 100644 index 0000000..b18f6a4 --- /dev/null +++ b/external/libebook/ubsan-visibility.patch @@ -0,0 +1,11 @@ +--- configure ++++ configure +@@ -17254,7 +17254,7 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fvisibility=hidden compiler flag" >&5 + $as_echo_n "checking for -fvisibility=hidden compiler flag... " >&6; } + saved_CXXFLAGS="$CXXFLAGS" +- CXXFLAGS="$CXXFLAGS -fvisibility=hidden" ++ CXXFLAGS="$CXXFLAGS -fvisibility-ms-compat" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + diff --git a/external/libmspub/UnpackedTarball_libmspub.mk b/external/libmspub/UnpackedTarball_libmspub.mk index cce7b54..a8c673c 100644 --- a/external/libmspub/UnpackedTarball_libmspub.mk +++ b/external/libmspub/UnpackedTarball_libmspub.mk @@ -17,4 +17,12 @@ $(eval $(call gb_UnpackedTarball_add_patches,libmspub,\ external/libmspub/ubsan.patch \ )) +ifeq ($(COM_GCC_IS_CLANG),TRUE) +ifneq ($(filter -fsanitize=%,$(CC)),) +$(eval $(call gb_UnpackedTarball_add_patches,libmspub, \ + external/libmspub/ubsan-visibility.patch \ +)) +endif +endif + # vim: set noet sw=4 ts=4: diff --git a/external/libmspub/ubsan-visibility.patch b/external/libmspub/ubsan-visibility.patch new file mode 100644 index 0000000..edaa1d0 --- /dev/null +++ b/external/libmspub/ubsan-visibility.patch @@ -0,0 +1,11 @@ +--- configure ++++ configure +@@ -17060,7 +17060,7 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fvisibility=hidden compiler flag" >&5 + $as_echo_n "checking for -fvisibility=hidden compiler flag... " >&6; } + saved_CXXFLAGS="$CXXFLAGS" +- CXXFLAGS="$CXXFLAGS -fvisibility=hidden" ++ CXXFLAGS="$CXXFLAGS -fvisibility-ms-compat" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + diff --git a/external/libmwaw/UnpackedTarball_libmwaw.mk b/external/libmwaw/UnpackedTarball_libmwaw.mk index 5338ce5..f88842a 100644 --- a/external/libmwaw/UnpackedTarball_libmwaw.mk +++ b/external/libmwaw/UnpackedTarball_libmwaw.mk @@ -19,4 +19,12 @@ $(eval $(call gb_UnpackedTarball_add_patches,libmwaw,\ external/libmwaw/ubsan.patch.0 \ )) +ifeq ($(COM_GCC_IS_CLANG),TRUE) +ifneq ($(filter -fsanitize=%,$(CC)),) +$(eval $(call gb_UnpackedTarball_add_patches,libmwaw, \ + external/libmwaw/ubsan-visibility.patch.0 \ +)) +endif +endif + # vim: set noet sw=4 ts=4: diff --git a/external/libmwaw/ubsan-visibility.patch.0 b/external/libmwaw/ubsan-visibility.patch.0 new file mode 100644 index 0000000..a14d201 --- /dev/null +++ b/external/libmwaw/ubsan-visibility.patch.0 @@ -0,0 +1,11 @@ +--- configure ++++ configure +@@ -17225,7 +17225,7 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fvisibility=hidden compiler flag" >&5 + $as_echo_n "checking for -fvisibility=hidden compiler flag... " >&6; } + saved_CXXFLAGS="$CXXFLAGS" +- CXXFLAGS="$CXXFLAGS -fvisibility=hidden" ++ CXXFLAGS="$CXXFLAGS -fvisibility-ms-compat" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + diff --git a/external/libodfgen/UnpackedTarball_libodfgen.mk b/external/libodfgen/UnpackedTarball_libodfgen.mk index 965a278..1aa716f 100644 --- a/external/libodfgen/UnpackedTarball_libodfgen.mk +++ b/external/libodfgen/UnpackedTarball_libodfgen.mk @@ -18,4 +18,12 @@ $(eval $(call gb_UnpackedTarball_add_patches,libodfgen, \ external/libodfgen/rtti.patch \ )) +ifeq ($(COM_GCC_IS_CLANG),TRUE) +ifneq ($(filter -fsanitize=%,$(CC)),) +$(eval $(call gb_UnpackedTarball_add_patches,libodfgen, \ + external/libodfgen/ubsan-visibility.patch \ +)) +endif +endif + # vim: set noet sw=4 ts=4: diff --git a/external/libodfgen/ubsan-visibility.patch b/external/libodfgen/ubsan-visibility.patch new file mode 100644 index 0000000..5dcae64 --- /dev/null +++ b/external/libodfgen/ubsan-visibility.patch @@ -0,0 +1,11 @@ +--- configure ++++ configure +@@ -15721,7 +15721,7 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fvisibility=hidden compiler flag" >&5 + $as_echo_n "checking for -fvisibility=hidden compiler flag... " >&6; } + saved_CXXFLAGS="$CXXFLAGS" +- CXXFLAGS="$CXXFLAGS -fvisibility=hidden" ++ CXXFLAGS="$CXXFLAGS -fvisibility-ms-compat" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + diff --git a/external/libpagemaker/UnpackedTarball_libpagemaker.mk b/external/libpagemaker/UnpackedTarball_libpagemaker.mk index fec1c03..6322c2e 100644 --- a/external/libpagemaker/UnpackedTarball_libpagemaker.mk +++ b/external/libpagemaker/UnpackedTarball_libpagemaker.mk @@ -11,4 +11,14 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,libpagemaker)) $(eval $(call gb_UnpackedTarball_set_tarball,libpagemaker,$(PAGEMAKER_TARBALL))) +$(eval $(call gb_UnpackedTarball_set_patchlevel,libpagemaker,0)) + +ifeq ($(COM_GCC_IS_CLANG),TRUE) +ifneq ($(filter -fsanitize=%,$(CC)),) +$(eval $(call gb_UnpackedTarball_add_patches,libpagemaker, \ + external/libpagemaker/ubsan-visibility.patch \ +)) +endif +endif + # vim: set noet sw=4 ts=4: diff --git a/external/libpagemaker/ubsan-visibility.patch b/external/libpagemaker/ubsan-visibility.patch new file mode 100644 index 0000000..90ead2b --- /dev/null +++ b/external/libpagemaker/ubsan-visibility.patch @@ -0,0 +1,11 @@ +--- configure ++++ configure +@@ -16787,7 +16787,7 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fvisibility=hidden compiler flag" >&5 + $as_echo_n "checking for -fvisibility=hidden compiler flag... " >&6; } + saved_CXXFLAGS="$CXXFLAGS" +- CXXFLAGS="$CXXFLAGS -fvisibility=hidden" ++ CXXFLAGS="$CXXFLAGS -fvisibility-ms-compat" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + diff --git a/external/librevenge/UnpackedTarball_librevenge.mk b/external/librevenge/UnpackedTarball_librevenge.mk index 470f58f..dabad6a 100644 --- a/external/librevenge/UnpackedTarball_librevenge.mk +++ b/external/librevenge/UnpackedTarball_librevenge.mk @@ -11,6 +11,14 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,librevenge)) $(eval $(call gb_UnpackedTarball_set_tarball,librevenge,$(REVENGE_TARBALL))) -$(eval $(call gb_UnpackedTarball_set_patchlevel,librevenge,1)) +$(eval $(call gb_UnpackedTarball_set_patchlevel,librevenge,0)) + +ifeq ($(COM_GCC_IS_CLANG),TRUE) +ifneq ($(filter -fsanitize=%,$(CC)),) +$(eval $(call gb_UnpackedTarball_add_patches,librevenge, \ + external/librevenge/ubsan-visibility.patch \ +)) +endif +endif # vim: set noet sw=4 ts=4: diff --git a/external/librevenge/ubsan-visibility.patch b/external/librevenge/ubsan-visibility.patch new file mode 100644 index 0000000..ede44d4 --- /dev/null +++ b/external/librevenge/ubsan-visibility.patch @@ -0,0 +1,11 @@ +--- src/lib/Makefile.in ++++ src/lib/Makefile.in +@@ -79,7 +79,7 @@ + POST_UNINSTALL = : + build_triplet = @build@ + host_triplet = @host@ +-@HAVE_VISIBILITY_TRUE@am__append_1 = -fvisibility=hidden ++@HAVE_VISIBILITY_TRUE@am__append_1 = -fvisibility-ms-compat + @HAVE_VISIBILITY_TRUE@am__append_2 = -DLIBREVENGE_VISIBILITY + @BUILD_GENERATORS_TRUE@am__append_3 = librevenge-generators-@RVNG_MAJOR_VERSION@.@RVNG_MINOR_VERSION@.la + @BUILD_GENERATORS_TRUE@@HAVE_VISIBILITY_TRUE@am__append_4 = -DLIBREVENGE_GENERATORS_VISIBILITY diff --git a/external/libvisio/UnpackedTarball_libvisio.mk b/external/libvisio/UnpackedTarball_libvisio.mk index caae903..4c55ece 100644 --- a/external/libvisio/UnpackedTarball_libvisio.mk +++ b/external/libvisio/UnpackedTarball_libvisio.mk @@ -18,4 +18,12 @@ $(eval $(call gb_UnpackedTarball_add_patches,libvisio,\ external/libvisio/ubsan.patch \ )) +ifeq ($(COM_GCC_IS_CLANG),TRUE) +ifneq ($(filter -fsanitize=%,$(CC)),) +$(eval $(call gb_UnpackedTarball_add_patches,libvisio, \ + external/libvisio/ubsan-visibility.patch \ +)) +endif +endif + # vim: set noet sw=4 ts=4: diff --git a/external/libvisio/ubsan-visibility.patch b/external/libvisio/ubsan-visibility.patch new file mode 100644 index 0000000..1855c73 --- /dev/null +++ b/external/libvisio/ubsan-visibility.patch @@ -0,0 +1,11 @@ +--- configure ++++ configure +@@ -17847,7 +17847,7 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fvisibility=hidden compiler flag" >&5 + $as_echo_n "checking for -fvisibility=hidden compiler flag... " >&6; } + saved_CXXFLAGS="$CXXFLAGS" +- CXXFLAGS="$CXXFLAGS -fvisibility=hidden" ++ CXXFLAGS="$CXXFLAGS -fvisibility-ms-compat" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + diff --git a/solenv/gbuild/platform/com_GCC_defs.mk b/solenv/gbuild/platform/com_GCC_defs.mk index 7f8b617..319ea9f 100644 --- a/solenv/gbuild/platform/com_GCC_defs.mk +++ b/solenv/gbuild/platform/com_GCC_defs.mk @@ -89,7 +89,13 @@ ifeq ($(HAVE_GCC_VISIBILITY_FEATURE),TRUE) gb_VISIBILITY_FLAGS := -DHAVE_GCC_VISIBILITY_FEATURE # If CC or CXX already include -fvisibility=hidden, don't duplicate it ifeq (,$(filter -fvisibility=hidden,$(CC))) -gb_VISIBILITY_FLAGS += -fvisibility=hidden +gb__visibility_hidden := -fvisibility=hidden +ifeq ($(COM_GCC_IS_CLANG),TRUE) +ifneq ($(filter -fsanitize=%,$(CC)),) +gb__visibility_hidden := -fvisibility-ms-compat +endif +endif +gb_VISIBILITY_FLAGS += $(gb__visibility_hidden) endif ifneq ($(HAVE_GCC_VISIBILITY_BROKEN),TRUE) gb_VISIBILITY_FLAGS_CXX := -fvisibility-inlines-hidden _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits