This patch ensures that the C99 and C11 features required by C++ are
defined according to the value of the __cplusplus macro, and not just
because G++ always defines _GNU_SOURCE. This will allow G++ to stop
defining _GNU_SOURCE some day, without causing the C99 and C11
interfaces to disappear for C++ programs.
[BZ #21326]
* include/features.h [__cplusplus >= 201103] (__USE_ISOC99): Define.
[__cplusplus >= 201703] (__USE_ISOCXX17, __USE_ISOC11): Define.
* math/Makefile (test-math-cxx11): New test.
* math/test-math-cxx11.cc: New file.
Newer kernels expose the ioctl TIOCGPTPEER [1] call to userspace which allows to
safely allocate a file descriptor for a pty slave based solely on the master
file descriptor. This allows us to avoid path-based operations and makes this
function a lot safer in the face of devpts mounts in different mount namespaces.
[1]: https://patchwork.kernel.org/patch/9760743/
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
When openpty() failed only the master fd was closed so far. Let's close the
slave fd as well. Also, let's unify the error handling.
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This patch makes the ldbl-128 and ldbl-96 implementations of fma use
libm_alias_double.
Tested for x86_64, and tested with build-many-glibcs.py that installed
stripped shared libraries are unchanged by the patch.
* sysdeps/ieee754/ldbl-128/s_fma.c: Include <libm-alias-double.h>.
[!__fma] (fma): Define using libm_alias_double.
* sysdeps/ieee754/ldbl-96/s_fma.c: Include <libm-alias-double.h>.
[!__fma] (fma): Define using libm_alias_double.
This patch makes ldbl-128 functions use libm_alias_ldouble to define
function aliases. float128_private.h is updated accordingly. Most of
the ldbl-64-128 wrappers are removed as no longer needed with this
change (leaving those that involve versioning for functions in libc or
that shouldn't be exported from libm for _Float128 / _Float64x types
with the same format as long double).
Tested for x86_64, and tested with build-many-glibcs.py that installed
stripped shared libraries are unchanged by this patch.
* sysdeps/ieee754/float128/float128_private.h: Include
<libm-alias-ldouble.h> and <libm-alias-float128.h>.
(libm_alias_ldouble_r): Undefine and redefine.
* sysdeps/ieee754/ldbl-128/s_asinhl.c: Include
<libm-alias-ldouble.h>.
(asinhl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_atanl.c: Include
<libm-alias-ldouble.h>.
(atanl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_cbrtl.c: Include
<libm-alias-ldouble.h>.
(cbrtl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_ceill.c: Include
<libm-alias-ldouble.h>.
(ceill): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_copysignl.c: Include
<libm-alias-ldouble.h>.
(copysignl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_cosl.c: Include
<libm-alias-ldouble.h>.
(cosl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_erfl.c: Include
<libm-alias-ldouble.h>.
(erfl): Define using libm_alias_ldouble.
(erfcl): Likewise.
* sysdeps/ieee754/ldbl-128/s_expm1l.c: Include
<libm-alias-ldouble.h>.
(expm1l): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_fabsl.c: Include
<libm-alias-ldouble.h>.
(fabsl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_floorl.c: Include
<libm-alias-ldouble.h>.
(floorl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_fmal.c: Include
<libm-alias-ldouble.h>.
(fmal): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_frexpl.c: Include
<libm-alias-ldouble.h>.
(frexpl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_fromfpl.c (fromfpl): Define using
libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_fromfpl_main.c: Include
<libm-alias-ldouble.h>.
* sysdeps/ieee754/ldbl-128/s_fromfpxl.c (fromfpxl): Define using
libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_getpayloadl.c: Include
<libm-alias-ldouble.h>.
(getpayloadl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_llrintl.c: Include
<libm-alias-ldouble.h>.
(llrintl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_llroundl.c: Include
<libm-alias-ldouble.h>.
(llroundl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_logbl.c: Include
<libm-alias-ldouble.h>.
(logbl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_lrintl.c: Include
<libm-alias-ldouble.h>.
(lrintl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_lroundl.c: Include
<libm-alias-ldouble.h>.
(lroundl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_modfl.c: Include
<libm-alias-ldouble.h>.
(modfl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_nearbyintl.c: Include
<libm-alias-ldouble.h>.
(nearbyintl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_nextafterl.c: Include
<libm-alias-ldouble.h>.
(nextafterl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_nextupl.c: Include
<libm-alias-ldouble.h>.
(nextupl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_remquol.c: Include
<libm-alias-ldouble.h>.
(remquol): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_rintl.c: Include
<libm-alias-ldouble.h>.
(rintl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_roundevenl.c: Include
<libm-alias-ldouble.h>.
(roundevenl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_roundl.c: Include
<libm-alias-ldouble.h>.
(roundl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_setpayloadl.c (setpayloadl): Define
using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_setpayloadl_main.c: Include
<libm-alias-ldouble.h>.
* sysdeps/ieee754/ldbl-128/s_setpayloadsigl.c (setpayloadsigl):
Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_sincosl.c: Include
<libm-alias-ldouble.h>.
(sincosl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_sinl.c: Include
<libm-alias-ldouble.h>.
(sinl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_tanhl.c: Include
<libm-alias-ldouble.h>.
(tanhl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_tanl.c: Include
<libm-alias-ldouble.h>.
(tanl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_totalorderl.c: Include
<libm-alias-ldouble.h>.
(totalorderl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_totalordermagl.c: Include
<libm-alias-ldouble.h>.
(totalordermagl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_truncl.c: Include
<libm-alias-ldouble.h>.
(truncl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_ufromfpl.c (ufromfpl): Define using
libm_alias_ldouble.
* sysdeps/ieee754/ldbl-128/s_ufromfpxl.c (ufromfpxl): Define using
libm_alias_ldouble.
* sysdeps/ieee754/ldbl-64-128/s_copysignl.c: Include
<libm-alias-ldouble.h>.
(weak_alias): Do not undefine and redefine.
[IS_IN (libc)] (libm_alias_ldouble): Undefine and redefine.
(copysignl): Define with long_double_symbol only if [IS_IN
(libc)].
* sysdeps/ieee754/ldbl-64-128/s_frexpl.c: Include
<libm-alias-ldouble.h>.
(weak_alias): Do not undefine and redefine.
[IS_IN (libc)] (libm_alias_ldouble): Undefine and redefine.
(frexpl): Define with long_double_symbol only if [IS_IN (libc)].
* sysdeps/ieee754/ldbl-64-128/s_modfl.c: Include
<libm-alias-ldouble.h>.
(weak_alias): Do not undefine and redefine.
[IS_IN (libc)] (libm_alias_ldouble): Undefine and redefine.
(modfl): Define with long_double_symbol only if [IS_IN (libc)].
* sysdeps/ieee754/ldbl-64-128/s_asinhl.c: Remove file.
* sysdeps/ieee754/ldbl-64-128/s_atanl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_cbrtl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_ceill.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_cosl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_erfl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_expm1l.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_fabsl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_floorl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_fmal.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_llrintl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_llroundl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_logbl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_lrintl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_lroundl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_nearbyintl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_remquol.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_rintl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_roundl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_sincosl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_sinl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_tanhl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_tanl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_truncl.c: Likewise.
The malloc tcache added in 2.26 will leak all of the elements remaining
in the cache and the cache structure itself when a thread exits. The
defect is that we do not set tcache_shutting_down early enough, and the
thread simply recreates the tcache and places the elements back onto a
new tcache which is subsequently lost as the thread exits (unfreed
memory). The fix is relatively simple, move the setting of
tcache_shutting_down earlier in tcache_thread_freeres. We add a test
case which uses mallinfo and some heuristics to look for unaccounted for
memory usage between the start and end of a thread start/join loop. It
is very reliable at detecting that there is a leak given the number of
iterations. Without the fix the test will consume 122MiB of leaked
memory.
Various source files in ldbl-64-128 are redundant, because they wrap
files that no longer provide public symbols that need special
versioning (those symbols having moved to separate errno-setting
wrappers), or, in the case of w_scalblnl.c, because the type-generic
template now does everything required (it deals with symbol versioning
for use in libm, and this file is never built for libc anyway - the
compat scalbln* symbols in libc, as opposed to scalbn*, are only for
i386 and m68k and are aliases to the corresponding scalbn* symbols).
This patch removes those redundant files.
Tested with build-many-glibcs.py (for all ldbl-64-128 configurations)
that installed stripped shared libraries are unchanged by this patch.
* sysdeps/ieee754/ldbl-64-128/e_ilogbl.c: Remove file.
* sysdeps/ieee754/ldbl-64-128/s_log1pl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_scalblnl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/s_scalbnl.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/w_scalblnl.c: Likewise.
Recent commit 59ba2d2b54 missed to add __memrchr_power8 in
ifunc list. Also handled discarding unwanted bytes for
unaligned inputs in power8 optimization.
2017-10-05 Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>
* sysdeps/powerpc/powerpc64/multiarch/memrchr-ppc64.c: Revert
back to powerpc32 file.
* sysdeps/powerpc/powerpc64/multiarch/memrchr.c
(memrchr): Add __memrchr_power8 to ifunc list.
* sysdeps/powerpc/powerpc64/power8/memrchr.S: Mask
extra bytes for unaligned inputs.
This patch makes ldbl-96 functions use libm_alias_ldouble to define
function aliases.
Tested for x86_64, and tested with build-many-glibcs.py that installed
stripped shared libraries are unchanged by the patch.
* sysdeps/ieee754/ldbl-96/s_asinhl.c: Include
<libm-alias-ldouble.h>.
(asinhl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_cbrtl.c: Include
<libm-alias-ldouble.h>.
(cbrtl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_copysignl.c: Include
<libm-alias-ldouble.h>.
(copysignl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_cosl.c: Include
<libm-alias-ldouble.h>.
(cosl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_erfl.c: Include
<libm-alias-ldouble.h>.
(erfl): Define using libm_alias_ldouble.
(erfcl): Likewise.
* sysdeps/ieee754/ldbl-96/s_fmal.c: Include
<libm-alias-ldouble.h>.
(fmal): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_frexpl.c: Include
<libm-alias-ldouble.h>.
(frexpl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_fromfpl.c (fromfpl): Define using
libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_fromfpl_main.c: Include
<libm-alias-ldouble.h>.
* sysdeps/ieee754/ldbl-96/s_fromfpxl.c (fromfpxl): Define using
libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_getpayloadl.c: Include
<libm-alias-ldouble.h>.
(getpayloadl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_llrintl.c: Include
<libm-alias-ldouble.h>.
(llrintl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_llroundl.c: Include
<libm-alias-ldouble.h>.
(llroundl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_lrintl.c: Include
<libm-alias-ldouble.h>.
(lrintl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_lroundl.c: Include
<libm-alias-ldouble.h>.
(lroundl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_modfl.c: Include
<libm-alias-ldouble.h>.
(modfl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_nextupl.c: Include
<libm-alias-ldouble.h>.
(nextupl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_remquol.c: Include
<libm-alias-ldouble.h>.
(remquol): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_roundevenl.c: Include
<libm-alias-ldouble.h>.
(roundevenl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_roundl.c: Include
<libm-alias-ldouble.h>.
(roundl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_setpayloadl.c (setpayloadl): Define
using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_setpayloadl_main.c: Include
<libm-alias-ldouble.h>.
* sysdeps/ieee754/ldbl-96/s_setpayloadsigl.c: Include
<libm-alias-ldouble.h>.
(setpayloadsigl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_sincosl.c: Include
<libm-alias-ldouble.h>.
(sincosl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_sinl.c: Include
<libm-alias-ldouble.h>.
(sinl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_tanhl.c: Include
<libm-alias-ldouble.h>.
(tanhl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_tanl.c: Include
<libm-alias-ldouble.h>.
(tanl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_totalorderl.c: Include
<libm-alias-ldouble.h>.
(totalorderl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_totalordermagl.c: Include
<libm-alias-ldouble.h>.
(totalordermagl): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_ufromfpl.c (ufromfpl): Define using
libm_alias_ldouble.
* sysdeps/ieee754/ldbl-96/s_ufromfpxl.c (ufromfpxl): Define using
libm_alias_ldouble.
This is an optimized memmove implementation for the Qualcomm Falkor
processor core. Due to the way the falkor memcpy needs to be written,
code cannot be easily shared between memmove and memcpy like in case
of other aarch64 memcpy implementations due to which this routine is
separate. The underlying principle is the same as that of memcpy
where it tries to use registers with the same lower 4 bits for
fetching the same stream, thus optimizing hardware prefetcher
performance.
The memcpy copy loop copies 64 bytes at a time using the same register
pair since that's the way to train the hardware prefetcher on the
falkor core. memmove cannot quite do that since it needs to avoid
overlaps, so it does the next best thing, i.e. has a 32 byte loop with
a 32 byte end (prefetch a loop ahead to account for overlapping
locations) with register pairs that alias so that they hit the same
prefetcher. Due to this difference in loop size, they have to
currently be separate implementations but efforts are on to try and
get memmove to fall back into memcpy whenever it can without simply
duplicating all of the code.
Performance:
The routine fares around 20-25% better than the generic memmove for
most medium to large sizes (i.e. > 128 bytes) for the new walking
memmove benchmark (memmove-walk) with an unexplained regression
between 1K and 2K. The minor regression is something worth looking
into for us, but the remaining gains are significant enough that we
would like this included upstream as we looking into the cause for the
regression. Here is a snippet of the numbers as generated from the
microbenchmark by the compare_strings script. Comparisons are against
__memmove_generic:
Function: memmove
Variant: walk
__memmove_thunderx __memmove_falkor __memmove_generic
========================================================================================================================
<snip>
length=16384: 12508800.00 ( 6.09%) 11486800.00 ( 13.76%) 13319600.00
length=16400: 13614200.00 ( -0.67%) 11585000.00 ( 14.33%) 13523600.00
length=16385: 13448400.00 ( 0.10%) 11732700.00 ( 12.84%) 13461200.00
length=16399: 13594100.00 ( -0.22%) 11859600.00 ( 12.57%) 13564400.00
length=16386: 13211600.00 ( 1.13%) 11503800.00 ( 13.91%) 13362400.00
length=16398: 13218600.00 ( 2.12%) 11573200.00 ( 14.30%) 13504700.00
length=16387: 13510900.00 ( -0.37%) 11744200.00 ( 12.76%) 13461300.00
length=16397: 13603700.00 ( -0.15%) 11878200.00 ( 12.55%) 13583200.00
length=16388: 13461700.00 ( -0.13%) 11558000.00 ( 14.03%) 13444100.00
length=16396: 13517500.00 ( -0.03%) 11561300.00 ( 14.45%) 13513900.00
length=16389: 13534100.00 ( 0.17%) 11756800.00 ( 13.28%) 13556900.00
length=16395: 13585600.00 ( 0.11%) 11791800.00 ( 13.30%) 13601200.00
length=16390: 13480100.00 ( -0.13%) 11685500.00 ( 13.20%) 13462100.00
length=16394: 13529900.00 ( -0.23%) 11549800.00 ( 14.43%) 13498200.00
length=16391: 13595400.00 ( -0.26%) 11768200.00 ( 13.22%) 13560600.00
length=16393: 13567000.00 ( 0.20%) 11779700.00 ( 13.35%) 13594700.00
length=32768: 71308800.00 ( -6.53%) 50220800.00 ( 24.98%) 66939200.00
length=32784: 72100800.00 (-11.55%) 50114100.00 ( 22.47%) 64636300.00
length=32769: 71767000.00 ( -7.10%) 51238400.00 ( 23.54%) 67010000.00
length=32783: 70113700.00 (-40.95%) 51129000.00 ( -2.78%) 49744400.00
length=32770: 71367600.00 ( -6.52%) 50244700.00 ( 25.01%) 67000900.00
length=32782: 64366700.00 ( 4.71%) 50101400.00 ( 25.83%) 67545600.00
length=32771: 71440100.00 ( -6.51%) 51263900.00 ( 23.57%) 67074900.00
length=32781: 66993000.00 ( 0.34%) 51108300.00 ( 23.97%) 67220300.00
length=32772: 71443900.00 (-60.50%) 50062100.00 (-12.47%) 44512600.00
length=32780: 71759100.00 ( -6.58%) 50263200.00 ( 25.35%) 67328600.00
length=32773: 71714900.00 (-33.21%) 51076600.00 ( 5.12%) 53835400.00
length=32779: 71756900.00 ( -6.56%) 51290800.00 ( 23.83%) 67337800.00
length=32774: 59689300.00 (-34.55%) 50068400.00 (-12.86%) 44363300.00
length=32778: 71847500.00 (-18.20%) 50084100.00 ( 17.61%) 60786500.00
length=32775: 71599300.00 ( -6.54%) 51278200.00 ( 23.70%) 67204800.00
length=32777: 71862900.00 (-60.85%) 51094000.00 (-14.36%) 44677900.00
length=65536: 282848000.00 ( -6.60%) 199187000.00 ( 24.93%) 265325000.00
length=65552: 243285000.00 (-41.61%) 198512000.00 (-15.54%) 171805000.00
length=65537: 255415000.00 (-23.47%) 202499000.00 ( 2.11%) 206858000.00
length=65551: 280122000.00 (-62.95%) 203349000.00 (-18.29%) 171911000.00
length=65538: 283676000.00 (-14.46%) 198368000.00 ( 19.96%) 247848000.00
length=65550: 275566000.00 (-51.76%) 198494000.00 ( -9.31%) 181581000.00
length=65539: 283699000.00 ( -6.58%) 203453000.00 ( 23.57%) 266195000.00
length=65549: 286572000.00 ( -6.65%) 202607000.00 ( 24.60%) 268712000.00
length=65540: 283710000.00 ( -6.59%) 199161000.00 ( 25.17%) 266160000.00
length=65548: 237573000.00 ( 11.48%) 198462000.00 ( 26.06%) 268395000.00
length=65541: 284150000.00 ( -6.58%) 203273000.00 ( 23.75%) 266600000.00
length=65547: 286250000.00 ( -6.70%) 202594000.00 ( 24.48%) 268263000.00
length=65542: 284167000.00 ( -6.60%) 199122000.00 ( 25.31%) 266584000.00
length=65546: 285656000.00 ( -6.59%) 198443000.00 ( 25.95%) 268002000.00
length=65543: 284600000.00 ( -6.58%) 203247000.00 ( 23.89%) 267030000.00
length=65545: 285665000.00 ( -6.40%) 202575000.00 ( 24.55%) 268472000.00
<snip>
* sysdeps/aarch64/multiarch/Makefile (sysdep_routines): Add
memmove_falkor.
* sysdeps/aarch64/multiarch/ifunc-impl-list.c
(__libc_ifunc_impl_list): Likewise.
* sysdeps/aarch64/multiarch/memmove.c: Likewise.
* sysdeps/aarch64/multiarch/memmove_falkor.S: New file.
This benchmark is an attempt to eliminate cache effects from string
benchmarks. The benchmark walks both ways through a large memory area
and copies different sizes of memory and alignments one at a time
instead of looping around in the same memory area. This is a good
metric to have alongside the simple memmove benchmark (which is only
really useful for smaller sizes) especially for larger sizes where the
likelihood of the call being done only once is pretty high.
This benchmark is different from memcpy in that it also tests
overlapping copies.
* benchtests/bench-memmove-walk.c: New file.
* benchtests/Makefile (string-benchset): Add it.
This benchmark is an attempt to eliminate cache effects from string
benchmarks. The benchmark walks backward through a large memory area
and sets different sizes of memory and alignments one at a time
instead of looping around in the same memory area. This is a good
metric to have alongside the simple memset benchmark (which is only
really useful for smaller sizes) especially for larger sizes where the
likelihood of the call being done only once is pretty high.
* benchtests/bench-memset-walk.c: New file.
* benchtests/Makefile (string-benchset): Add it.
This benchmark is an attempt to eliminate cache effects from string
benchmarks. The benchmark walks both ways through a large memory area
and copies different sizes of memory and alignments one at a time
instead of looping around in the same memory area. This is a good
metric to have alongside the other memcpy benchmarks, especially for
larger sizes where the likelihood of the call being done only once is
pretty high.
* benchtests/bench-memcpy-walk.c: New file.
* benchtests/Makefile (string-benchset): Add it.
glibc has an add-ons mechanism to allow additional software to be
integrated into the glibc build. Such add-ons may be within the glibc
source tree, or outside it at a path passed to the --enable-add-ons
configure option.
localedata and crypt were once add-ons, distributed in separate
release tarballs, but long since stopped using that mechanism.
Linuxthreads was always an add-on. Ports spent some time as an add-on
with separate release tarballs, then was first moved into the glibc
source tree, then had its sysdeps files moved into the main sysdeps
hierarchy so the add-ons mechanism was no longer used. NPTL spent
some time as an add-on in the main glibc tree before stopping using
the add-on mechanism. libidn used to have separate release tarballs
but no longer does so, but still uses the add-ons mechanism within the
glibc source tree. Various other software has supported building with
the add-ons mechanism at times in the past, but I don't think any is
still widely used.
Add-ons involve significant, little-used complexity in the glibc build
system, and make it hard to understand what the space of possible
glibc configurations is. This patch removes the add-ons mechanism.
libidn is now built via the Subdirs mechanism to cause any
configuration using sysdeps/unix/inet to build libidn; HAVE_LIBIDN
(which effectively means shared libraries are available) is now
defined via sysdeps/unix/inet/configure. Various references to
add-ons around the source tree are removed (in the case of maint.texi,
the example list of sysdeps directories is still very out of date).
Externally maintained ports should now put their files in the normal
sysdeps directory structure rather than being arranged as add-ons;
they probably need to change e.g. elf.h anyway, rather than actually
being able to work just as a drop-in subtree. Hurd libpthread should
be arranged similarly to NPTL, so some files might go in a
hurd-pthreads (or similar) top-level directory in glibc, while sysdeps
files should go in the normal sysdeps directory structure (possibly in
hurd or hurd-pthreads subdirectories, just as there are nptl
subdirectories in the sysdeps tree).
Tested for x86_64, and with build-many-glibcs.py.
* configure.ac (--enable-add-ons): Remove option.
(machine): Do not mention add-ons in comment.
(LIBC_PRECONFIGURE): Likewise.
(add_ons): Remove variable and sanity checks and logic to locate
add-ons.
(add_ons_automatic): Remove variable.
(configured_add_ons): Likewise.
(add_ons_sfx): Likewise.
(add_ons_pfx): Likewise.
(add_on_subdirs): Likewise.
(sysnames_add_ons): Likewise. Remove loop over add-ons and
consideration of add-ons in Implies handling.
(sysdeps_add_ons): Likewise.
* configure: Regenerated.
* libidn/configure.ac: Remove.
* libidn/configure: Likewise.
* sysdeps/unix/inet/configure.ac: New file.
* sysdeps/unix/inet/configure: New generated file.
* sysdeps/unix/inet/Subdirs: Add libidn.
* Makeconfig (sysdeps-srcdirs): Remove variable.
(+sysdep_dirs): Do not include $(sysdeps-srcdirs).
($(common-objpfx)config.status): Do not depend on add-on files.
($(common-objpfx)shlib-versions.v.i): Do not mention add-ons in
comment.
(all-subdirs): Do not include $(add-on-subdirs).
* Makefile (dist-prepare): Do not use $(sysdeps-add-ons).
* config.make.in (add-ons): Remove variable.
(add-on-subdirs): Likewise.
(sysdeps-add-ons): Likewise.
* manual/Makefile (add-chapters): Remove.
($(objpfx)texis): Do not depend on $(add-chapters).
(nonexamples): Do not handle $(add-chapters).
(examples): Do not handle $(add-ons).
(chapters.% top-menu.%): Do not pass '$(add-chapters)' to
libc-texinfo.sh.
* manual/install.texi (Installation): Do not mention add-ons.
(--enable-add-ons): Do not document configure option.
* INSTALL: Regenerated.
* manual/libc-texinfo.sh: Do not handle $2 add-ons argument.
* manual/maint.texi (Hierarchy Conventions): Do not mention
add-ons.
* scripts/build-many-glibcs.py (Glibc.build_glibc): Do not use
--enable-add-ons.
* scripts/gen-sorted.awk: Do not handle Subdirs files from
add-ons.
* scripts/test-installation.pl: Do not handle glibc-compat add-on.
* sysdeps/nptl/Makeconfig: Do not mention add-ons in comment.
If glibc is built with -fomit-frame-pointer to undo the effect of
configuring GCC with --enable-frame-pointer, using -pg by itself results
in a build failure:
gcc: error: -pg and -fomit-frame-pointer are incompatible
On i386, when multi-arch is enabled, all external functions must be
called via PIC PLT in PIE, which requires setting up EBX register,
since they may be IFUNC functions.
* config.h.in (NO_HIDDEN_EXTERN_FUNC_IN_PIE): New.
* include/libc-symbols.h (__hidden_proto_hiddenattr): Add check
for PIC and NO_HIDDEN_EXTERN_FUNC_IN_PIE.
* sysdeps/i386/configure.ac (NO_HIDDEN_EXTERN_FUNC_IN_PIE): New
AC_DEFINE if multi-arch is enabled.
* sysdeps/i386/configure: Regenerated.
Use $(LDFLAGS-$(@F)) with tst-tls1-static-non-pie may not be sufficient
when static PIE is built by default. Use $(DEFAULT-LDFLAGS-$(@F)) in
+link-static-before-libc to make sure that tst-tls1-static-non-pie is
always built as non-PIE static executable and make sure that crt1.o is
used with tst-tls1-static-non-pie.
* Makeconfig (+link-static-before-libc): Use
$(DEFAULT-LDFLAGS-$(@F)).
* elf/Makefile (CRT-tst-tls1-static-non-pie): New.
(LDFLAGS-tst-tls1-static-non-pie): Renamed to ...
(DEFAULT-LDFLAGS-tst-tls1-static-non-pie): This.
Verify that crt1.o can be used with main () in a shared object.
* elf/Makefile (tests): Add tst-main1.
(modules-names): Add tst-main1mod.
($(objpfx)tst-main1): New.
(CRT-tst-main1): Likewise.
(LDFLAGS-tst-main1): Likewise.
(LDLIBS-tst-main1): Likewise.
(tst-main1mod.so-no-z-defs): Likewise.
* elf/tst-main1.c: New file.
* elf/tst-main1mod.c: Likewise.
This patch makes dbl-64 fma use libm_alias_double. The ldbl-opt
version is removed. The sparc32 version no longer needs to handle
compat symbols, while alpha needs a new wrapper to avoid getting the
ldbl-128 version (where ldbl-opt is earlier in the list of sysdeps
directories, so previously fma came from there).
Tested for x86_64, and tested with build-many-glibcs.py that installed
stripped shared libraries are unchanged by the patch.
* sysdeps/ieee754/dbl-64/s_fma.c: Include <libm-alias-double.h>.
(fma): Define using libm_alias_double.
* sysdeps/ieee754/ldbl-opt/s_fma.c: Remove file.
* sysdeps/sparc/sparc32/fpu/s_fma.c: Do not include
<math_ldbl_opt.h>.
(fmal): Do not define as compat symbol here.
* sysdeps/alpha/fpu/s_fma.c: New file.
32-bit SPARC libm should have compat symbols for copysignl
(GLIBC_2.0), fabsl (GLIBC_2.0), fmal (GLIBC_2.1), pointing to the
double functions; they were present in glibc 2.8, for example, but are
now missing, probably when optimized SPARC function implementations
were added without appropriate compat symbol handling. The same
applies to copysignl in libc. This patch restores those compat
symbols.
Tested with build-many-glibcs.py for sparcv9-linux-gnu.
[BZ #22229]
* sysdeps/sparc/sparc32/fpu/s_copysign.S: Include
<math_ldbl_opt.h>
(copysignl): Define as compat symbol at version GLIBC_2_0 for libm
and libc.
* sysdeps/sparc/sparc32/fpu/s_fabs.S: Include <math_ldbl_opt.h>.
(fabsl): Define as compat symbol at version GLIBC_2_0 for libm.
* sysdeps/sparc/sparc32/fpu/s_fma.c: Include <math_ldbl_opt.h>.
(fmal): Define as compat symbol at version GLIBC_2_1 for libm.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S:
Include <math_ldbl_opt.h>
(copysignl): Define as compat symbol at version GLIBC_2_0 for libm
and libc.
(compat_symbol): Undefine and redefine.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S: Include
<math_ldbl_opt.h>
(fabsl): Define as compat symbol at version GLIBC_2_0 for libm.
(compat_symbol): Undefine and redefine.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c
[HAVE_AS_VIS3_SUPPORT]: Include <math_ldbl_opt.h>.
[HAVE_AS_VIS3_SUPPORT] (fmal): Define as compat symbol at version
GLIBC_2_1 for libm.
* sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Add
GLIBC_2.0 copysignl symbol.
* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Add
GLIBC_2.0 copysignl and fabsl and GLIBC_2.1 fmal symbols.
Given my recent changes, sysdeps/alpha/fpu/s_nearbyint.c is no longer
needed: it just includes the dbl-64/wordsize-64 version, which is the
one that would be used anyway, and defines a compat symbol,
duplicating the same compat symbol defined by the dbl-64/wordsize-64
version through use of libm_alias_double. Thus, this patch removes
the redundant wrapper.
Tested with build-many-glibcs.py that installed stripped shared
libraries are unchanged for alpha.
* sysdeps/alpha/fpu/s_nearbyint.c: Remove file.
When configuring and building GNU libc using the Mozilla NSS library
for cryptography (--enable-nss-crypt option), also include the
NSPR header files along with the Mozilla NSS library header files.
Finally, when running the check-local-headers test, ignore the
Mozilla NSPR library header files (used by the Mozilla NSS library).
Without SVID compat wrapper yn(n,0) and ynf(n,0) does not raise
the divide-by-zero excpetion and it may return inf with the wrong
sign for n < 0.
[BZ #22244]
* sysdeps/ieee754/dbl-64/e_jn.c (__ieee754_yn): Fix x == 0 case.
* sysdeps/ieee754/flt-32/e_jnf.c (__ieee754_ynf): Likewise.
On 64bit targets if the SVID compat wrapper is suppressed (e.g. static linking)
then log2(0) and log10(0) returned inf instead of -inf.
[BZ #22243]
* sysdeps/ieee754/dbl-64/wordsize-64/e_log10.c (__ieee754_log10): Use fabs.
* sysdeps/ieee754/dbl-64/wordsize-64/e_log2.c (__ieee754_log2): Likewise.
Don't use "leal main@GOTOFF(%ebx), %eax" since main may be in a
shared object. Linker will convert "movl main@GOT(%ebx), %eax"
to "leal main@GOTOFF(%ebx), %eax" if main is defined locally.
* sysdeps/i386/start.S: Replace "leal main@GOT(%ebx), %eax" with
"movl main@GOTOFF(%ebx), %eax".
This code is used in non-PIE static executable and static PIE. It checks
if _DYNAMIC is undefined before using it to compute load address. But
not all targets can convert access _DYNAMIC via GOT, which needs dynamic
relocation, to PC-relative at link-time.
* sysdeps/i386/dl-machine.h (elf_machine_load_address): Don't
allow undefined _DYNAMIC in PIE libc.a.
* sysdeps/x86_64/dl-machine.h (elf_machine_load_address):
Likewse.
Since mips can't convert access _DYNAMIC via GOT, which needs dynamic
relocation, to PC-relative at link-time, don't check _DYNAMIC in
elf_machine_load_address.
* sysdeps/mips/dl-machine.h (elf_machine_load_address): Don't
check _DYNAMIC.
Since arm can't convert access _DYNAMIC via GOT, which needs dynamic
relocation, to PC-relative at link-time, don't check _DYNAMIC in
elf_machine_load_address.
* sysdeps/arm/dl-machine.h (elf_machine_load_address): Don't
check _DYNAMIC.
Fix GCC 7 compilation error:
test-math-iscanonical.cc: In function ‘void check_type()’:
test-math-iscanonical.cc:33:11: error: use of an operand of type ‘bool’ in ‘operator++’ is deprecated [-Werror=deprecated]
errors++;
^~
* math/test-math-iscanonical.cc (error): Replace bool with int.
This patch makes dbl-64 modf use libm_alias_double. Both the dbl-64
and dbl-64/wordsize-64 versions are changed, and the ldbl-opt version
is changed to define the libc compat symbol only. Because of
multiarch wrappers, the changed implementations are made not to define
aliases at all if __modf is defined as a macro, as with other
functions, so avoiding duplicate compat symbols while allowing those
wrappers to be simplified.
Tested for x86_64, and verified with build-many-glibcs.py that
installed stripped shared libraries are unchanged by the patch.
* sysdeps/ieee754/dbl-64/s_modf.c: Include <libm-alias-double.h>.
(modf): Define using libm_alias_double, only if [!__modf].
* sysdeps/ieee754/dbl-64/wordsize-64/s_modf.c: Include
<libm-alias-double.h>.
(modf): Define using libm_alias_double, only if [!__modf].
* sysdeps/ieee754/ldbl-opt/s_modf.c (modfl): Only define libc
compat symbol here.
* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf-ppc32.c
(weak_alias): Do not undefine and redefine.
(strong_alias): Likewise.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf-ppc64.c
(weak_alias): Likewise.
(strong_alias): Likewise.
This patch makes dbl-64 logb use libm_alias_double. Both the dbl-64
and dbl-64/wordsize-64 versions are changed, and the ldbl-opt version
is removed. Because of multiarch wrappers, the changed
implementations are made not to define aliases at all if __logb is
defined as a macro, as with other functions, so avoiding duplicate
compat symbols while allowing those wrappers to be simplified.
Tested for x86_64, and verified with build-many-glibcs.py that
installed stripped shared libraries are unchanged (except on alpha
where changes from using the wordsize-64 version are expected).
* sysdeps/ieee754/dbl-64/s_logb.c: Include <libm-alias-double.h>.
(logb): Define using libm_alias_double, only if [!__logb].
* sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c: Include
<libm-alias-double.h>.
(logb): Define using libm_alias_double, only if [!__logb].
* sysdeps/ieee754/ldbl-opt/s_logb.c: Remove file.
* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-ppc32.c
(weak_alias): Do not undefine and redefine.
(strong_alias): Likewise.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c
(weak_alias): Likewise.
(strong_alias): Likewise.
For static PIE code, PIC is defined and SHARED is undefined. We
should check SHARED instead PIC for SYSCALL_ERROR_NAME.
* sysdeps/unix/sysv/linux/tile/sysdep.h (SYSCALL_ERROR_NAME):
Check SHARED instead PIC.
This patch makes the implementation of fmaf in the dbl-64 directory
use libm_alias float.
Tested for x86_64, and verified with build-many-glibcs.py that
installed stripped shared libraries are unchanged by this patch.
* sysdeps/ieee754/dbl-64/s_fmaf.c: Include <libm-alias-float.h>.
[!__fmaf] (fmaf): Define using libm_alias_float.
This patch makes dbl-64 frexp use libm_alias_double. Both the dbl-64
and dbl-64/wordsize-64 versions are changed; the ldbl-opt version is
made to define only the libc frexpl compat symbol, now the generic
code handles the libm compat symbol automatically.
Tested for x86_64, and verified with build-many-glibcs.py that
installed stripped shared libraries are unchanged by this patch.
* sysdeps/ieee754/dbl-64/s_frexp.c: Include <libm-alias-double.h>.
(frexp): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/wordsize-64/s_frexp.c: Include
<libm-alias-double.h>.
(frexp): Define using libm_alias_double.
* sysdeps/ieee754/ldbl-opt/s_frexp.c (frexpl): Only define libc
compat symbol here.
All representations of floating-point numbers in types with IEC 60559
binary exchange format are canonical. On the other hand, types with IEC
60559 extended formats, such as those implemented under ldbl-96 and
ldbl-128ibm, contain representations that are not canonical.
TS 18661-1 introduced the type-generic macro iscanonical, which returns
whether a floating-point value is canonical or not. In Glibc, this
type-generic macro is implemented using the macro __MATH_TG, which, when
support for float128 is enabled, relies on __builtin_types_compatible_p
to select between floating-point types. However, this use of
iscanonical breaks C++ applications, because the builtin is only
available in C mode.
This patch provides a C++ implementation of iscanonical that relies on
function overloading, rather than builtins, to select between
floating-point types.
Unlike the C++ implementations for iszero and issignaling, this
implementation ignores __NO_LONG_DOUBLE_MATH. The double type always
matches IEC 60559 double format, which is always canonical. Thus, when
double and long double are the same (__NO_LONG_DOUBLE_MATH), iscanonical
always returns 1 and is not implemented with __MATH_TG.
Tested for powerpc64, powerpc64le and x86_64.
[BZ #22235]
* math/math.h: Trivial fix for unbalanced parentheses in comment.
* math/Makefile [CXX] (tests): Add test-math-iscanonical.cc.
(CFLAGS-test-math-iscanonical.cc): New variable.
* math/test-math-iscanonical.cc: New file.
* sysdeps/ieee754/ldbl-96/bits/iscanonical.h (iscanonical):
Provide a C++ implementation based on function overloading,
rather than using __MATH_TG, which uses C-only builtins.
* sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h (iscanonical):
Likewise.
* sysdeps/powerpc/powerpc64le/Makefile
(CFLAGS-test-math-iscanonical.cc): New variable.
This patch makes more dbl-64 functions use libm_alias_double to define
function aliases. Specifically, it makes the change for functions
with dbl-64/wordsize-64 versions, changing both the dbl-64 and
dbl-64/wordsize-64 versions and removing the ldbl-opt wrappers.
Functions are excluded from this patch if there are complications
because of versions of those functions also present in libc, or
architecture-specific wrappers round these files.
Tested for x86_64, and with build-many-glibcs.py. Installed stripped
shared libraries are unchanged except for alpha (where increased use
of dbl-64/wordsize-64 files, where previously ldbl-opt files that
wrapped dbl-64 files were used, was expected to result in different,
better code).
* sysdeps/ieee754/dbl-64/s_ceil.c: Include <libm-alias-double.h>.
(ceil): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/s_floor.c: Include <libm-alias-double.h>.
(floor): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/s_llround.c: Include
<libm-alias-double.h>.
(llround): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/s_lround.c: Include
<libm-alias-double.h>.
(lround): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/s_nearbyint.c: Include
<libm-alias-double.h>.
(nearbyint): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/s_remquo.c: Include
<libm-alias-double.h>.
(remquo): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/s_rint.c: Include <libm-alias-double.h>.
(rint): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/s_round.c: Include <libm-alias-double.h>.
(round): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/s_trunc.c: Include <libm-alias-double.h>.
(trunc): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c: Include
<libm-alias-double.h>.
(ceil): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c: Include
<libm-alias-double.h>.
(floor): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/wordsize-64/s_llround.c: Include
<libm-alias-double.h>.
(llround): Define using libm_alias_double.
[_LP64] (lround): Likewise.
* sysdeps/ieee754/dbl-64/wordsize-64/s_lround.c: Include
<libm-alias-double.h>.
[!_LP64] (lround): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c: Include
<libm-alias-double.h>.
(nearbyint): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c: Include
<libm-alias-double.h>.
(remquo): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c: Include
<libm-alias-double.h>.
(rint): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/wordsize-64/s_round.c: Include
<libm-alias-double.h>.
(round): Define using libm_alias_double.
* sysdeps/ieee754/dbl-64/wordsize-64/s_trunc.c: Include
<libm-alias-double.h>.
(trunc): Define using libm_alias_double.
* sysdeps/ieee754/ldbl-opt/s_ceil.c: Remove file.
* sysdeps/ieee754/ldbl-opt/s_floor.c: Likewise.
* sysdeps/ieee754/ldbl-opt/s_llround.c: Likewise.
* sysdeps/ieee754/ldbl-opt/s_lround.c: Likewise.
* sysdeps/ieee754/ldbl-opt/s_nearbyint.c: Likewise.
* sysdeps/ieee754/ldbl-opt/s_remquo.c: Likewise.
* sysdeps/ieee754/ldbl-opt/s_rint.c: Likewise.
* sysdeps/ieee754/ldbl-opt/s_round.c: Likewise.
* sysdeps/ieee754/ldbl-opt/s_trunc.c: Likewise.
The compat remainder code is no longer built for !LIBM_SVID_COMPAT targets,
but the legacy drem, dremf and dreml symbols should be still defined since
removing them may break existing code, so keep them as aliases in the
non-compat remainder code.
* math/w_remainder.c: New file.
* math/w_remainderf.c: New file.
* math/w_remainderl.c: New file.
(&_dl_main_map) is used instead of (&bootstrap_map) to bootstrap static
PIE. Define BOOTSTRAP_MAP with (&_dl_main_map) to avoid hardcode to
(&bootstrap_map).
* elf/rtld.c (BOOTSTRAP_MAP): New.
(RESOLVE_MAP): Replace (&bootstrap_map) with BOOTSTRAP_MAP.
* sysdeps/hppa/dl-machine.h (ELF_MACHINE_BEFORE_RTLD_RELOC):
Likewise.
* sysdeps/ia64/dl-machine.h (ELF_MACHINE_BEFORE_RTLD_RELOC):
Likewise.
* sysdeps/mips/dl-machine.h (ELF_MACHINE_BEFORE_RTLD_RELOC):
Likewise.