Do not redirect calls to __GI_* symbols, when redirecting to *ieee128
commit1ef9b6e0bf1268050e74087c4f6bd056263a28c7
authorTulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
Sun, 20 Oct 2019 21:00:30 +0000 (20 16:00 -0500)
committerGabriel F. T. Gomes <gabrielftg@linux.ibm.com>
Fri, 27 Dec 2019 18:02:10 +0000 (27 15:02 -0300)
tree3b3f7905c03c4890473ab9da3e7fdc5dbb42241e
parent863d775c481704baaa41855fc93e5a1ca2dc6bf6
Do not redirect calls to __GI_* symbols, when redirecting to *ieee128

On platforms where long double has IEEE binary128 format as a third
option (initially, only powerpc64le), many exported functions are
redirected to their __*ieee128 equivalents.  This redirection is
provided by installed headers such as stdio-ldbl.h, and is supposed to
work correctly with user code.

However, during the build of glibc, similar redirections are employed,
in internal headers, such as include/stdio.h, in order to avoid extra
PLT entries.  These redirections conflict with the redirections to
__*ieee128, and must be avoided during the build.  This patch protects
the second redirections with a test for __LONG_DOUBLE_USES_FLOAT128, a
new macro that is defined to 1 when functions that deal with long double
typed values reuses the _Float128 implementation (this is currently only
true for powerpc64le).

Tested for powerpc64le, x86_64, and with build-many-glibcs.py.

Co-authored-by: Gabriel F. T. Gomes <gabrielftg@linux.ibm.com>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
bits/long-double.h
include/stdio.h
include/stdlib.h
sysdeps/ieee754/ldbl-128/bits/long-double.h
sysdeps/ieee754/ldbl-128ibm-compat/bits/long-double.h [copied from sysdeps/ieee754/ldbl-opt/bits/long-double.h with 70% similarity]
sysdeps/ieee754/ldbl-96/bits/long-double.h
sysdeps/ieee754/ldbl-opt/bits/long-double.h
sysdeps/mips/ieee754/bits/long-double.h
sysdeps/unix/sysv/linux/sparc/sparc32/bits/long-double.h
sysdeps/unix/sysv/linux/sparc/sparc64/bits/long-double.h