summaryrefslogtreecommitdiff
path: root/external/libmspub
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2015-02-27 10:05:22 +0100
committerStephan Bergmann <sbergman@redhat.com>2015-02-27 10:05:22 +0100
commitf0aa1a78fb209310e8baef53c02f365fca518d11 (patch)
tree043698b26212189e0a0baa3626e6a56c5225fa58 /external/libmspub
parentfc6f894d2211cee7b28cb93345e90297ec04fe06 (diff)
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
Diffstat (limited to 'external/libmspub')
-rw-r--r--external/libmspub/UnpackedTarball_libmspub.mk8
-rw-r--r--external/libmspub/ubsan-visibility.patch11
2 files changed, 19 insertions, 0 deletions
diff --git a/external/libmspub/UnpackedTarball_libmspub.mk b/external/libmspub/UnpackedTarball_libmspub.mk
index cce7b5423ad0..a8c673c877f3 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 000000000000..edaa1d0249ee
--- /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. */
+