summaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2019-04-16 16:11:39 +0200
committerStephan Bergmann <sbergman@redhat.com>2019-05-03 13:46:25 +0200
commit9a7aa3326d087c79879e435179e359dd76aa5e0a (patch)
tree444364cd0af0a8741b2ec206e29a8cb5cda1ef57 /configure.ac
parentc0038f61aff45595c962911f16dfdef93f41924e (diff)
The -fvisibility-ms-compat hack is no longer needed for UBSan on Linux...
...with latest Clang trunk towards Clang 9. All the no-longer necessary hacks are made conditional on new NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY, which is still set for UBSan builds with older Clang on Linux (but which should eventually be purged). Various classes needed additional SAL_DLLPUBLIC_RTTI annotations, as building with UBSan instrumentation can generate references to RTTI symbols from additional places like outside a dynamic library that used to hide those symbols by default (but used to not hide them for old UBSan builds thanks to the -fvisibility-ms-compat hack). The odr-violation suppressions in solenv/sanitizers/asan-suppressions (which is not referenced from anywhere in the code base, but meant to be included in an ASan/UBSan build's ASAN_OPTIONS env var) are also no longer needed when NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY is false. Change-Id: I24ec3e388b0cbab50dbe2bf008d9569bff7bf25a Reviewed-on: https://gerrit.libreoffice.org/70829 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac35
1 files changed, 24 insertions, 11 deletions
diff --git a/configure.ac b/configure.ac
index 9d010de28280..36e0c359dedf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3864,6 +3864,28 @@ else
fi
AC_SUBST(ENABLE_DEBUG)
+AC_MSG_CHECKING([whether special RTTI visibility flags are needed for Clang Linux UBSan])
+NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY=
+dnl Clang 9 is known fixed since
+dnl <https://github.com/llvm/llvm-project/commit/5745eccef54ddd3caca278d1d292a88b2281528b> "Adapt
+dnl -fsanitize=function to SANITIZER_NON_UNIQUE_TYPEINFO":
+if test "$COM_IS_CLANG" = TRUE && test "$CLANGVER" -lt 90000 && test "$_os" = Linux; then
+ for i in $CC; do
+ case $i in
+ -fsanitize=*)
+ NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY=TRUE
+ break
+ ;;
+ esac
+ done
+fi
+if test "$NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY" = TRUE; then
+ AC_MSG_RESULT([yes])
+else
+ AC_MSG_RESULT([no])
+fi
+AC_SUBST([NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY])
+
dnl ===================================================================
dnl Select the linker to use (gold/lld/ld.bfd).
dnl This is done only after compiler checks (need to know if Clang is
@@ -3889,17 +3911,8 @@ printf ("hello world\n");
AC_MSG_RESULT( yes )
use_ld_ok=yes
dnl For obscure reasons, unxgcc.mk uses the --dynamic-list-cpp-typeinfo linker option
- dnl if sanitizers are used, and lld doesn't support this option.
- use_ld_has_sanitizers=
- for i in $CC; do
- case $i in
- -fsanitize=*)
- use_ld_has_sanitizers=yes
- break
- ;;
- esac
- done
- if test -n "$use_ld_has_sanitizers"; then
+ dnl if NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY, and lld doesn't support this option.
+ if test -n "$NEED_CLANG_LINUX_UBSAN_RTTI_VISIBILITY"; then
AC_MSG_CHECKING([for --dynamic-list-cpp-typeinfo linker support (-fuse-ld=$use_ld)])
use_ld_ldflags_save_2="$LDFLAGS"
LDFLAGS="$LDFLAGS -Wl,--dynamic-list-cpp-typeinfo"