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