From 7b1bb3292d2527c73faa7b192dec86e13346467d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= Date: Wed, 2 Sep 2015 22:09:01 +0200 Subject: Disable use of ifunc. --- ChangeLog | 5 +++++ fat-setup.h | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/ChangeLog b/ChangeLog index e67fae19..2425c82d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2015-09-02 Niels Möller + + * fat-setup.h: Disable use of ifunc, since it breaks dlopen with + RTLD_NOW. + 2015-08-25 Niels Möller * NEWS: Started on entries for Nettle-3.2. diff --git a/fat-setup.h b/fat-setup.h index 09e8c371..eb7166a7 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 -- cgit v1.2.1