diff options
author | Hans Jansen <hansjansen162@outlook.com> | 2023-06-22 19:46:55 +0200 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2023-06-27 15:33:15 +0300 |
commit | 23b5c36fb71904bfbe16bb20f976da38dadf6c3b (patch) | |
tree | 7c6a838b7ea0c32247c8066d7b27ce6b56fa0f4e /configure.ac | |
parent | CI: Add apt update command before installing dependencies. (diff) | |
download | xz-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.
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 28 |
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. |