aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Jansen <hansjansen162@outlook.com>2023-06-22 19:46:55 +0200
committerLasse Collin <lasse.collin@tukaani.org>2023-06-27 15:33:15 +0300
commit23b5c36fb71904bfbe16bb20f976da38dadf6c3b (patch)
tree7c6a838b7ea0c32247c8066d7b27ce6b56fa0f4e
parentCI: Add apt update command before installing dependencies. (diff)
downloadxz-23b5c36fb71904bfbe16bb20f976da38dadf6c3b.tar.xz
Add ifunc check to configure.ac
configure.ac will now verify if __attribute__((__ifunc__())) can be used in the build system. If so, HAVE_FUNC_ATTRIBUTE_IFUNC will be defined to 1.
-rw-r--r--configure.ac28
1 files changed, 28 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index 9ab921e1..5b764fce 100644
--- a/configure.ac
+++ b/configure.ac
@@ -859,8 +859,36 @@ AC_COMPILE_IFELSE([
], [
AC_MSG_RESULT([no])
])
+
CFLAGS="$OLD_CFLAGS"
+# __attribute__((__ifunc__())) can be used for one-time initializations,
+# similar to __attribute__((__constructor__)).
+AC_ARG_ENABLE([ifunc], [AS_HELP_STRING([--disable-ifunc],
+ [do not use __attribute__((__ifunc__()))])],
+ [], [enable_ifunc=yes])
+
+if test "x$enable_ifunc" = xyes ; then
+ OLD_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror"
+ AC_MSG_CHECKING([if __attribute__((__ifunc__())) can be used])
+ AC_COMPILE_IFELSE([
+ static void func(void) { return; }
+ static void (*resolve_func (void)) (void) { return func; }
+ void func_ifunc (void)
+ __attribute__ ((__ifunc__ ("resolve_func")));
+ ], [
+ AC_DEFINE([HAVE_FUNC_ATTRIBUTE_IFUNC], [1],
+ [Define to 1 if __attribute__((__ifunc__()))
+ is supported for functions.])
+ AC_MSG_RESULT([yes])
+ ], [
+ AC_MSG_RESULT([no])
+ ])
+
+ CFLAGS="$OLD_CFLAGS"
+fi
+
###############################################################################
# Checks for library functions.