Kaydet (Commit) f0aa1a78 authored tarafından Stephan Bergmann's avatar Stephan Bergmann

For Clang -fsanitize=vptr use -fvisibility-ms-compat, not -fvisibility=hidden

As discussed in b4f6b26b "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 598d8194
"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 598d8194
"Visible function type RTTI for Clang -fsanitize=function" can likely be removed
again.

Change-Id: Ibeff7ab8c908111a7dc66ff0677204f112b24db8
üst fc6f894d
......@@ -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:
--- 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. */
......@@ -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:
--- 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. */
......@@ -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:
--- 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. */
......@@ -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:
--- 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. */
......@@ -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:
--- 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. */
......@@ -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:
--- 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. */
......@@ -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:
--- 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. */
......@@ -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:
--- 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
......@@ -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:
--- 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. */
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment