diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2015-02-27 10:05:22 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2015-02-27 10:05:22 +0100 |
commit | f0aa1a78fb209310e8baef53c02f365fca518d11 (patch) | |
tree | 043698b26212189e0a0baa3626e6a56c5225fa58 /external/libmspub/UnpackedTarball_libmspub.mk | |
parent | fc6f894d2211cee7b28cb93345e90297ec04fe06 (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/UnpackedTarball_libmspub.mk')
-rw-r--r-- | external/libmspub/UnpackedTarball_libmspub.mk | 8 |
1 files changed, 8 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: |