summaryrefslogtreecommitdiffstats
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 d4e942496830..7074b042ba0a 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_cxxobjects,$(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 b05ad09efed0..aa34ecefd1b0 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -259,6 +259,7 @@ export HAVE_GCC_FNO_INLINE=@HAVE_GCC_FNO_INLINE@
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 95ee51cbec11..10bf82f583f4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5975,7 +5975,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 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 supports -mno-avx])
save_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -Werror -mno-avx"
@@ -6172,6 +6182,7 @@ AC_SUBST(HAVE_GCC_AVX)
AC_SUBST(HAVE_GCC_STACK_PROTECTOR_STRONG)
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