diff options
author | Niels Möller <nisse@lysator.liu.se> | 2015-01-13 09:57:29 +0100 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2015-01-13 09:57:29 +0100 |
commit | 2185ed0d8d707b310fc289fb4ce263157480b615 (patch) | |
tree | 99211e38d764ab7c5c5bd177a93d6ff461a54694 | |
parent | 343be0b5877bd7773fe684b1fd913c241b48d75b (diff) | |
download | nettle-2185ed0d8d707b310fc289fb4ce263157480b615.tar.gz |
Autoconf check for ifunc support.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | aclocal.m4 | 35 | ||||
-rw-r--r-- | configure.ac | 2 |
3 files changed, 43 insertions, 0 deletions
@@ -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. @@ -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 80fdd79f..49c52f6d 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 |