diff --git a/ChangeLog b/ChangeLog index 291b97d0b991992f027053fc85a1af09d93fed9c..8c70659504e3df645bd1206dbc78f1732c28d38e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2015-01-13 Niels Möller <nisse@lysator.liu.se> + + * aclocal.m4 (NETTLE_CHECK_IFUNC): New macro, checking for ifunc + and settting HAVE_LINK_IFUNC if working. + * configure.ac: Use it. + 2015-01-12 Niels Möller <nisse@lysator.liu.se> * asm.m4 (DECLARE_FUNC): New macro, extracted from PROLOGUE. diff --git a/aclocal.m4 b/aclocal.m4 index b6846caee2579f72f5e7845cc44eb51b4075ea79..e534f55bdb036ab565cd9d837c1d2896dca7efef 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -643,6 +643,41 @@ foo: fi ]) +dnl NETTLE_CHECK_IFUNC +dnl ------------------ +dnl Check if __attribute__ ((ifunc(...))) works +AC_DEFUN([NETTLE_CHECK_IFUNC], +[AC_REQUIRE([AC_PROG_CC]) +AC_CACHE_CHECK([for ifunc support], + nettle_cv_link_ifunc, + AC_LINK_IFELSE([AC_LANG_PROGRAM([ +static int +foo_imp(int x) +{ + return 1; +} + +typedef void void_func (void); + +static void_func * +foo_resolv(void) +{ + return (void_func *) foo_imp; +} + +int foo (int x) __attribute__ ((ifunc("foo_resolv"))); +],[ + return foo(0); + +])], +[nettle_cv_link_ifunc=yes], +[nettle_cv_link_ifunc=no])) +AH_TEMPLATE([HAVE_LINK_IFUNC], [Define if compiler and linker supports __attribute__ ifunc]) +if test "x$nettle_cv_link_ifunc" = xyes ; then + AC_DEFINE(HAVE_LINK_IFUNC) +fi +]) + dnl @synopsis AX_CREATE_STDINT_H [( HEADER-TO-GENERATE [, HEADERS-TO-CHECK])] dnl dnl the "ISO C9X: 7.18 Integer types <stdint.h>" section requires the diff --git a/configure.ac b/configure.ac index 80fdd79f3b0bcee709f4caf2696579d079fb38ae..49c52f6db5a4d1b0923bd30f5dc55117029d3d8c 100644 --- a/configure.ac +++ b/configure.ac @@ -95,6 +95,8 @@ LSH_RPATH_INIT([`echo $with_lib_path | sed 's/:/ /g'` \ # Checks for programs. AC_PROG_CC +NETTLE_CHECK_IFUNC + # When $CC foo.c -o foo creates both foo and foo.exe, autoconf picks # up the foo.exe and sets exeext to .exe. That is correct for cygwin, # which has some kind of magic link from foo to foo.exe, but not for