summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bridges/Library_cpp_uno.mk7
-rw-r--r--config_host.mk.in1
-rw-r--r--configure.ac11
3 files changed, 18 insertions, 1 deletions
diff --git a/bridges/Library_cpp_uno.mk b/bridges/Library_cpp_uno.mk
index f9e573bd7ff2..277c54cf79dc 100644
--- a/bridges/Library_cpp_uno.mk
+++ b/bridges/Library_cpp_uno.mk
@@ -30,7 +30,12 @@ else ifeq ($(CPUNAME),AARCH64)
ifneq ($(filter ANDROID DRAGONFLY FREEBSD LINUX NETBSD OPENBSD,$(OS)),)
bridges_SELECTED_BRIDGE := gcc3_linux_aarch64
-bridge_exception_objects := abi callvirtualfunction uno2cpp
+bridge_exception_objects := abi uno2cpp
+
+$(eval $(call gb_Library_add_exception_objects,$(gb_CPPU_ENV)_uno, \
+ bridges/source/cpp_uno/$(bridges_SELECTED_BRIDGE)/callvirtualfunction, \
+ $(if $(HAVE_GCC_STACK_CLASH_PROTECTION),-fno-stack-clash-protection) \
+))
$(eval $(call gb_Library_add_exception_objects,$(gb_CPPU_ENV)_uno, \
bridges/source/cpp_uno/$(bridges_SELECTED_BRIDGE)/cpp2uno, \
diff --git a/config_host.mk.in b/config_host.mk.in
index cbfa19f0e7b4..e621a4e03845 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -250,6 +250,7 @@ export HAVE_GCC_FNO_ENFORCE_EH_SPECS=@HAVE_GCC_FNO_ENFORCE_EH_SPECS@
export HAVE_GCC_FNO_SIZED_DEALLOCATION=@HAVE_GCC_FNO_SIZED_DEALLOCATION@
export HAVE_GCC_GGDB2=@HAVE_GCC_GGDB2@
export HAVE_GCC_SPLIT_DWARF=@HAVE_GCC_SPLIT_DWARF@
+export HAVE_GCC_STACK_CLASH_PROTECTION=@HAVE_GCC_STACK_CLASH_PROTECTION@
export HAVE_GNUMAKE_FILE_FUNC=@HAVE_GNUMAKE_FILE_FUNC@
export HAVE_LD_BSYMBOLIC_FUNCTIONS=@HAVE_LD_BSYMBOLIC_FUNCTIONS@
export HAVE_LD_HASH_STYLE=@HAVE_LD_HASH_STYLE@
diff --git a/configure.ac b/configure.ac
index 809ed94733a2..717dafe71648 100644
--- a/configure.ac
+++ b/configure.ac
@@ -6155,7 +6155,17 @@ AC_CONFIG_HEADERS([config_host/config_probes.h])
dnl ===================================================================
dnl GCC features
dnl ===================================================================
+HAVE_GCC_STACK_CLASH_PROTECTION=
if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
+ AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
+ save_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -fstack-clash-protection"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(, [[return 0;]])],
+ [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
+ [AC_MSG_RESULT([no])])
+ CFLAGS=$save_CFLAGS
+
AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
save_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -Werror -mno-avx"
@@ -6340,6 +6350,7 @@ fi
AC_SUBST(HAVE_GCC_AVX)
AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
AC_SUBST(HAVE_GCC_BUILTIN_FFS)
+AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
dnl ===================================================================
dnl Identify the C++ library