diff --git a/ChangeLog b/ChangeLog
index e67fae1974d8e9f5e45fd16bb26c7cca1f083814..2425c82d27ddf74e6ddfd69b88ed8ec4372c6c8f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-09-02  Niels Möller  <nisse@lysator.liu.se>
+
+	* fat-setup.h: Disable use of ifunc, since it breaks dlopen with
+	RTLD_NOW.
+
 2015-08-25  Niels Möller  <nisse@lysator.liu.se>
 
 	* NEWS: Started on entries for Nettle-3.2.
diff --git a/fat-setup.h b/fat-setup.h
index 09e8c3715c9b2725c3a75a0f725ff75563cbd951..eb7166a7f0c92b64552b9ddc12c76db020f1b864 100644
--- a/fat-setup.h
+++ b/fat-setup.h
@@ -77,6 +77,15 @@
 # endif
 #endif
 
+/* Disable use of ifunc for now. Problem is, there's no guarantee that
+   one can call any libc functions from the ifunc resolver. On x86 and
+   x86_64, the corresponding IRELATIVE relocs are supposed to be
+   processed last, but that doesn't seem to happen, and its a
+   platform-specific feature. To trigger problems, simply try dlopen
+   ("libnettle.so", RTLD_NOW), which crashes in an uninitialized plt
+   entry. */
+#undef HAVE_LINK_IFUNC
+
 #if !HAVE_SECURE_GETENV
 #define secure_getenv(s) NULL
 #endif