summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2015-01-13 09:57:29 +0100
committerNiels Möller <nisse@lysator.liu.se>2015-01-13 09:57:29 +0100
commit2185ed0d8d707b310fc289fb4ce263157480b615 (patch)
tree99211e38d764ab7c5c5bd177a93d6ff461a54694
parent343be0b5877bd7773fe684b1fd913c241b48d75b (diff)
downloadnettle-2185ed0d8d707b310fc289fb4ce263157480b615.tar.gz
Autoconf check for ifunc support.
-rw-r--r--ChangeLog6
-rw-r--r--aclocal.m435
-rw-r--r--configure.ac2
3 files changed, 43 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 291b97d0..8c706595 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 b6846cae..e534f55b 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 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