diff options
author | Sergei Trofimovich <slyfox@gentoo.org> | 2017-12-20 09:35:00 +0000 |
---|---|---|
committer | Sergei Trofimovich <slyfox@gentoo.org> | 2017-12-20 09:52:55 +0000 |
commit | ac450135f29ef850303589af998373d936955476 (patch) | |
tree | 64a8796ea47de503bc596e73cbdc6919695364d2 /eclass/toolchain-glibc.eclass | |
parent | mail-mta/exim: version bump to 4.90 (diff) | |
download | gentoo-ac450135f29ef850303589af998373d936955476.tar.gz gentoo-ac450135f29ef850303589af998373d936955476.tar.bz2 gentoo-ac450135f29ef850303589af998373d936955476.zip |
sys-libs/glibc: enable IFUNC support only on whitelisted ARCHes, bug #641216
We explicitly disable IFUNC support on the following targets:
alpha/hppa/ia64/mips/m68k/nios2/riscv/sh
to workaround weak IFUNC detection on binutils/glibc side.
Otherwise at least on ia64 glibc generates IFUNC entries against
compat librt.so.1 symbols (to redirect them back to libc.so.6)
but linker does not produce correct relocations. As a result all
IFUNC-backed functions don't work.
Reported-by: Émeric Maschino
Bug: https://sourceware.org/PR22634
Closes: https://bugs.gentoo.org/641216
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Diffstat (limited to 'eclass/toolchain-glibc.eclass')
-rw-r--r-- | eclass/toolchain-glibc.eclass | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/eclass/toolchain-glibc.eclass b/eclass/toolchain-glibc.eclass index 6580be2fb1e0..d9c692f2ad8f 100644 --- a/eclass/toolchain-glibc.eclass +++ b/eclass/toolchain-glibc.eclass @@ -815,6 +815,17 @@ glibc_do_configure() { esac fi + # Keep a whitelist of targets supporing IFUNC. glibc's ./configure + # is not robust enough to detect proper support: + # https://bugs.gentoo.org/641216 + # https://sourceware.org/PR22634#c0 + case $(tc-arch ${CTARGET}) in + # Keep whitelist of targets where autodetection mostly works. + amd64|x86|sparc|ppc|ppc64|arm|arm64|s390) ;; + # Blacklist everywhere else + *) myconf+=( libc_cv_ld_gnu_indirect_function=no ) ;; + esac + if version_is_at_least 2.25 ; then myconf+=( --enable-stackguard-randomization ) else |