#
# The Win95 threading lacks thread-safe one-time initialization
# function.
- if (ENABLE_SMALL)
+ if(ENABLE_SMALL)
message(SEND_ERROR "Threading method win95 and ENABLE_SMALL "
"cannot be used at the same time")
endif()
set(CMAKE_REQUIRED_FLAGS "-Werror")
check_c_source_compiles("
static void func(void) { return; }
- static void (*resolve_func (void)) (void) { return func; }
- void func_ifunc (void)
- __attribute__ ((__ifunc__ (\"resolve_func\")));
+ static void (*resolve_func(void)) (void) { return func; }
+ void func_ifunc(void)
+ __attribute__((__ifunc__(\"resolve_func\")));
int main(void) { return 0; }
"
HAVE_FUNC_ATTRIBUTE_IFUNC)
], [
AC_MSG_RESULT([no])
])
-
CFLAGS="$OLD_CFLAGS"
-# __attribute__((__ifunc__())) can be used for one-time initializations,
-# similar to __attribute__((__constructor__)).
+# __attribute__((__ifunc__())) can be used to choose between different
+# implementations of the same function at runtime. This is slightly more
+# efficient than using __attribute__((__constructor__)) and setting
+# a function pointer.
AC_ARG_ENABLE([ifunc], [AS_HELP_STRING([--disable-ifunc],
[do not use __attribute__((__ifunc__()))])],
[], [enable_ifunc=yes])
static void func(void) { return; }
static void (*resolve_func (void)) (void) { return func; }
void func_ifunc (void)
- __attribute__ ((__ifunc__ ("resolve_func")));
+ __attribute__((__ifunc__("resolve_func")));
], [
AC_DEFINE([HAVE_FUNC_ATTRIBUTE_IFUNC], [1],
[Define to 1 if __attribute__((__ifunc__()))