]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
Add ifunc check to configure.ac
authorHans Jansen <hansjansen162@outlook.com>
Thu, 22 Jun 2023 17:46:55 +0000 (19:46 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Tue, 27 Jun 2023 12:33:15 +0000 (15:33 +0300)
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.

configure.ac

index 9ab921e149e8870fc300dd7c04ee05dd2ebb7374..5b764fce6071b433edd9328821512349c2a7f663 100644 (file)
@@ -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.