powerpc-nofpu libc exports __sqrtsf2 and __sqrtdf2 symbols. The
export of these soft-fp symbols is a mistake; they aren't part of the
libgcc interface and GCC will never generate code that calls them.
This patch makes them into compat symbols (no code built for static
libc), moving their sources from the generic soft-fp sources to
sysdeps/powerpc/nofpu (the underlying soft-fp FP_SQRT functionality
remains of use to implement actual sqrt public interfaces, such as
sqrtl / sqrtf128 for which it is used on various platforms, but
__sqrt[sdt]f2 are not such interfaces).
Tested with build-many-glibcs.py for relevant platforms.
[BZ #18473]
* soft-fp/sqrttf2.c: Remove file.
* soft-fp/sqrtdf2.c: Move to ....
* sysdeps/powerpc/nofpu/sqrtdf2.c: ... here. Include
<shlib-compat.h>.
(__sqrtdf2): Make conditional on
[SHLIB_COMPAT (libc, GLIBC_2_3_2, GLIBC_2_28)]. Define as compat
symbol.
* soft-fp/sqrtsf2.c: Move to ....
* sysdeps/powerpc/nofpu/sqrtsf2.c: ... here. Include
<shlib-compat.h>.
(__sqrtsf2): Make conditional on
[SHLIB_COMPAT (libc, GLIBC_2_3_2, GLIBC_2_28)]. Define as compat
symbol.
* soft-fp/Makefile (gcc-single-routines): Remove sqrtsf2.
(gcc-double-routines): Remove sqrtdf2.
(gcc-quad-routines): Remove sqrttf2.
* sysdeps/nios2/Makefile [$(subdir) = soft-fp] (sysdep_routines):
Do not filter out sqrtsf2 and sqrtdf2.
* sysdeps/powerpc/nofpu/Makefile [$(subdir) = soft-fp]
(sysdep_routines): Add sqrtsf2 and sqrtdf2.
These unmangled function pointers reside on the heap and could
be targeted by exploit writers, effectively bypassing libio vtable
validation. Instead, we ignore these pointers and always call
malloc or free.
In theory, this is a backwards-incompatible change, but using the
global heap instead of the user-supplied callback functions should
have little application impact. (The old libstdc++ implementation
exposed this functionality via a public, undocumented constructor
in its strstreambuf class.)
This patch creates ifunc for sqrtf128() to make use of new xssqrtqp
instruction for POWER9 when --enable-multi-arch and --with-cpu=power8
options are used on power9 system. This is achieved by explicitly
adding -mcpu=power9 flag for sqrtf128-power9.
This is needed to support debugging dlopened shared libraries in static
PIE.
[BZ #23206]
* elf/dl-reloc-static-pie.c (_dl_relocate_static_pie): Initialize
_r_debug and update DT_DEBUG for debugger.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
As per <https://sourceware.org/ml/libc-alpha/2014-10/msg00369.html>,
there should not be separate sysdeps/<arch>/soft-fp directories when
those are used by all configurations that use sysdeps/<arch>, and,
more generally, should not be sysdeps/foo/Implies files pointing to a
subdirectory foo/bar. This patch eliminates the
sysdeps/sparc/sparc64/soft-fp directory accordingly, merging its
contents into sysdeps/sparc/sparc64. This completes removing the
unnecessary <arch>/soft-fp sysdeps directories.
sysdeps/sparc/sparc64/soft-fp/e_ilogbl.c is removed rather than moved.
It was not in fact used previously - the ldbl-128 version of
e_ilogbl.c was used instead - and moving it into sysdeps/sparc/sparc64
results in it being used, but causing a build failure because of
FP_DECL_EX declaring an unused variable (as I noted in
<https://sourceware.org/ml/libc-alpha/2013-10/msg00457.html> that file
doesn't appear to use FP_DECL_EX). Given that the file was previously
unused and so presumably not tested recently, removing it is the safe
way to avoid this patch changing what actually gets built into glibc
(if this file should turn out more efficient than the ldbl-128
e_ilogbl.c, it can always be added back in future with the build
failure fixed).
Tested with build-many-glibcs.py that installed stripped shared
libraries for sparc configurations are unchanged by this patch.
* sysdeps/sparc/sparc64/Implies: Remove sparc/sparc64/soft-fp.
* sysdeps/sparc/sparc64/Makefile [$(subdir) = soft-fp]
(sparc64-quad-routines): New variable. Moved from ....
[$(subdir) = soft-fp] (sysdep_routines): Add
$(sparc64-quad-routines). Moved from ....
[$(subdir) = math] (CPPFLAGS): Add -I../soft-fp/. Moved from ....
* sysdeps/sparc/sparc64/soft-fp/Makefile: ... here. Remove file.
* sysdeps/sparc/sparc64/Versions (libc): Add GLIBC_2.2 symbols
moved from ....
* sysdeps/sparc/sparc64/soft-fp/Versions: ... here. Remove file.
* sysdeps/sparc/sparc64/soft-fp/e_ilogbl.c: Remove file.
* sysdeps/sparc/sparc64/soft-fp/qp_add.c: Move to ....
* sysdeps/sparc/sparc64/qp_add.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_cmp.c: Move to ....
* sysdeps/sparc/sparc64/qp_cmp.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_cmpe.c: Move to ....
* sysdeps/sparc/sparc64/qp_cmpe.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_div.c: Move to ....
* sysdeps/sparc/sparc64/qp_div.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c: Move to ....
* sysdeps/sparc/sparc64/qp_dtoq.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_feq.c: Move to ....
* sysdeps/sparc/sparc64/qp_feq.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_fge.c: Move to ....
* sysdeps/sparc/sparc64/qp_fge.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_fgt.c: Move to ....
* sysdeps/sparc/sparc64/qp_fgt.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_fle.c: Move to ....
* sysdeps/sparc/sparc64/qp_fle.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_flt.c: Move to ....
* sysdeps/sparc/sparc64/qp_flt.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_fne.c: Move to ....
* sysdeps/sparc/sparc64/qp_fne.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_itoq.c: Move to ....
* sysdeps/sparc/sparc64/qp_itoq.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_mul.c: Move to ....
* sysdeps/sparc/sparc64/qp_mul.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_neg.S: Move to ....
* sysdeps/sparc/sparc64/qp_neg.S: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_qtod.c: Move to ....
* sysdeps/sparc/sparc64/qp_qtod.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c: Move to ....
* sysdeps/sparc/sparc64/qp_qtoi.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_qtos.c: Move to ....
* sysdeps/sparc/sparc64/qp_qtos.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c: Move to ....
* sysdeps/sparc/sparc64/qp_qtoui.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c: Move to ....
* sysdeps/sparc/sparc64/qp_qtoux.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_qtox.c: Move to ....
* sysdeps/sparc/sparc64/qp_qtox.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_sqrt.c: Move to ....
* sysdeps/sparc/sparc64/qp_sqrt.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_stoq.c: Move to ....
* sysdeps/sparc/sparc64/qp_stoq.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_sub.c: Move to ....
* sysdeps/sparc/sparc64/qp_sub.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c: Move to ....
* sysdeps/sparc/sparc64/qp_uitoq.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_util.c: Move to ....
* sysdeps/sparc/sparc64/qp_util.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c: Move to ....
* sysdeps/sparc/sparc64/qp_uxtoq.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c: Move to ....
* sysdeps/sparc/sparc64/qp_xtoq.c: ... here.
* sysdeps/sparc/sparc64/soft-fp/sfp-machine.h: Move to ....
* sysdeps/sparc/sparc64/sfp-machine.h: ... here.
Currently, powerpc, powerpc64, and powerpc64le imply the same set of
subdirectories from sysdeps/ieee754: flt-32, dbl-64, ldbl-128ibm, and
ldbl-opt. In preparation for the transition of the long double format -
from IBM Extended Precision to IEEE 754 128-bits floating-point - on
powerpc64le, this patch splits the shared Implies file into three
separate files (one for each of the powerpc architectures), without
changing their contents. Future patches will modify powerpc64le.
* sysdeps/powerpc/Implies: Removed. Previous contents copied to...
* sysdeps/powerpc/powerpc32/Implies-after: ... here.
* sysdeps/powerpc/powerpc64/be/Implies-after: ... here.
* sysdeps/powerpc/powerpc64/le/Implies-before: ... and here.
As per <https://sourceware.org/ml/libc-alpha/2014-10/msg00369.html>,
there should not be separate sysdeps/<arch>/soft-fp directories when
those are used by all configurations that use sysdeps/<arch>, and,
more generally, should not be sysdeps/foo/Implies files pointing to a
subdirectory foo/bar.
sysdeps/powerpc/soft-fp isn't quite such a case, as the Implies files
pointing to it are
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/Implies and
sysdeps/unix/sysv/linux/powerpc/powerpc32/e500/nofpu/Implies (and
indeed there is a different sfp-machine.h used for powerpc64le).
However, the same principle applies: there is no need for this
directory because sfp-machine.h, the only file in it, can most
naturally go in sysdeps/powerpc/nofpu, which is used by exactly the
same configurations (and there is a close dependence between the files
there and the sfp-machine.h implementation). This patch eliminates
the sysdeps/powerpc/soft-fp directory accordingly.
Tested with build-many-glibcs.py that installed stripped shared
libraries for powerpc configurations are unchanged by this patch.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/Implies: Remove
powerpc/soft-fp.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/e500/nofpu/Implies:
Likewise.
* sysdeps/powerpc/soft-fp/sfp-machine.h: Move to ....
* sysdeps/powerpc/nofpu/sfp-machine.h: ... here.
The commit
commit c85e54ac6c
Author: Gabriel F. T. Gomes <gabriel@inconstante.eti.br>
Date: Fri Nov 3 10:44:36 2017 -0200
Provide a C++ version of iseqsig (bug 22377)
mistakenly used double parameters in the long double version of iseqsig,
thus causing spurious conversions to double, as reported on bug 23171.
Tested for powerpc64le and x86_64.
As per <https://sourceware.org/ml/libc-alpha/2014-10/msg00369.html>,
there should not be separate sysdeps/<arch>/soft-fp directories when
those are used by all configurations that use sysdeps/<arch>, and,
more generally, should not be sysdeps/foo/Implies files pointing to a
subdirectory foo/bar. This patch eliminates the sysdeps/sh/soft-fp
directory accordingly, merging its contents into sysdeps/sh.
Tested with build-many-glibcs.py that installed stripped shared
libraries for sh configurations are unchanged by this patch.
* sysdeps/sh/Implies: Remove sh/soft-fp.
* sysdeps/sh/soft-fp/sfp-machine.h: Move to ....
* sysdeps/sh/sfp-machine.h: ... here.
This patch skips zero length in __mempcpy_erms, __memmove_erms and
__memset_erms.
Tested on x86-64.
* sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S
(__mempcpy_erms): Skip zero length.
(__memmove_erms): Likewise.
* sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S
(__memset_erms): Likewise.
As per <https://sourceware.org/ml/libc-alpha/2014-10/msg00369.html>,
there should not be separate sysdeps/<arch>/soft-fp directories when
those are used by all configurations that use sysdeps/<arch>, and,
more generally, should not be sysdeps/foo/Implies files pointing to a
subdirectory foo/bar. This patch eliminates the
sysdeps/alpha/soft-fp directory accordingly, merging its contents
into sysdeps/alpha.
Tested with build-many-glibcs.py that installed stripped shared
libraries for alpha-linux-gnu are unchanged by this patch.
* sysdeps/alpha/Implies: Remove alpha/soft-fp.
* sysdeps/alpha/Makefile [$(subdir) = soft-fp] (sysdep_routines):
Add functions moved from ....
[$(subdir) = math] (CPPFLAGS): Add -I../soft-fp. Moved from ....
* sysdeps/alpha/soft-fp/Makefile: ... here. Remove file.
* sysdeps/alpha/Versions (libc): Add GLIBC_2.3.4 symbols moved
from ....
* sysdeps/alpha/soft-fp/Versions: ... here. Remove file.
* sysdeps/alpha/soft-fp/e_sqrtl.c: Move to ....
* sysdeps/alpha/e_sqrtl.c: ... here.
* sysdeps/alpha/soft-fp/local-soft-fp.h: Move to ....
* sysdeps/alpha/local-soft-fp.h: ... here.
* sysdeps/alpha/soft-fp/ots_add.c: Move to ....
* sysdeps/alpha/ots_add.c: ... here.
* sysdeps/alpha/soft-fp/ots_cmp.c: Move to ....
* sysdeps/alpha/ots_cmp.c: ... here.
* sysdeps/alpha/soft-fp/ots_cmpe.c: Move to ....
* sysdeps/alpha/ots_cmpe.c: ... here.
* sysdeps/alpha/soft-fp/ots_cvtqux.c: Move to ....
* sysdeps/alpha/ots_cvtqux.c: ... here.
* sysdeps/alpha/soft-fp/ots_cvtqx.c: Move to ....
* sysdeps/alpha/ots_cvtqx.c: ... here.
* sysdeps/alpha/soft-fp/ots_cvttx.c: Move to ....
* sysdeps/alpha/ots_cvttx.c: ... here.
* sysdeps/alpha/soft-fp/ots_cvtxq.c: Move to ....
* sysdeps/alpha/ots_cvtxq.c: ... here.
* sysdeps/alpha/soft-fp/ots_cvtxt.c: Move to ....
* sysdeps/alpha/ots_cvtxt.c: ... here.
* sysdeps/alpha/soft-fp/ots_div.c: Move to ....
* sysdeps/alpha/ots_div.c: ... here.
* sysdeps/alpha/soft-fp/ots_mul.c: Move to ....
* sysdeps/alpha/ots_mul.c: ... here.
* sysdeps/alpha/soft-fp/ots_nintxq.c: Move to ....
* sysdeps/alpha/ots_nintxq.c: ... here.
* sysdeps/alpha/soft-fp/ots_sub.c: Move to ....
* sysdeps/alpha/ots_sub.c: ... here.
* sysdeps/alpha/soft-fp/sfp-machine.h: Move to ....
* sysdeps/alpha/sfp-machine.h: ... here.
As per <https://sourceware.org/ml/libc-alpha/2014-10/msg00369.html>,
there should not be separate sysdeps/<arch>/soft-fp directories when
those are used by all configurations that use sysdeps/<arch>, and,
more generally, should not be sysdeps/foo/Implies files pointing to a
subdirectory foo/bar. This patch eliminates the
sysdeps/aarch64/soft-fp directory accordingly, merging its contents
into sysdeps/aarch64.
Tested with build-many-glibcs.py that installed stripped shared
libraries for aarch64 configurations are unchanged by this patch.
* sysdeps/aarch64/Implies: Remove aarch64/soft-fp.
* sysdeps/aarch64/Makefile [$(subdir) = math] (CPPFLAGS): Add
-I../soft-fp. Moved from ....
* sysdeps/aarch64/soft-fp/Makefile: ... here. Remove file.
* sysdeps/aarch64/soft-fp/e_sqrtl.c: Move to ....
* sysdeps/aarch64/e_sqrtl.c: ... here.
* sysdeps/aarch64/soft-fp/sfp-machine.h: Move to ....
* sysdeps/aarch64/sfp-machine.h: ... here.
Building with recent GCC mainline for i686-linux-gnu is failing with:
../sysdeps/ieee754/flt-32/k_rem_pio2f.c: In function '__kernel_rem_pio2f':
../sysdeps/ieee754/flt-32/k_rem_pio2f.c:186:28: error: 'fq[0]' may be used uninitialized in this function [-Werror=maybe-uninitialized]
fv = math_narrow_eval (fq[0]-fv);
^
and
../sysdeps/ieee754/dbl-64/k_rem_pio2.c: In function '__kernel_rem_pio2':
../sysdeps/ieee754/dbl-64/k_rem_pio2.c:333:32: error: 'fq[0]' may be used uninitialized in this function [-Werror=maybe-uninitialized]
fv = math_narrow_eval (fq[0] - fv);
^
These are similar to -Warray-bounds cases for which the DIAG_* macros
are already used in those files: the array element is in fact always
initialized, but the reasoning that it is depends on another array not
having been all zero at an earlier point, which depends on the
functions not being called with zero arguments. Thus, this patch uses
DIAG_* to disable -Wmaybe-uninitialized for this code.
(The warning may be i686-specific because of math_narrow_eval somehow
perturbing what the compiler does with this code enough to cause the
warning. I don't know why it doesn't appear for i686-gnu.)
Tested with build-many-glibcs.py that this fixes the i686 build in
this configuration.
* sysdeps/ieee754/dbl-64/k_rem_pio2.c (__kernel_rem_pio2): Ignore
-Wmaybe-uninitialized around access to fq[0].
* sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
Likewise.
The llseek function name is an obsolete, Linux-specific, unprototyped
name for lseek64 with a link-time warning. This patch completes the
obsoletion of this function name by making it into a compat symbol,
not available for newly linked programs and not included in the ABI
for new ports.
When a compat symbol is defined in syscalls.list, the code for that
function is not built at all for static linking unless some non-compat
symbol for that function is also defined with an explicit symbol
version, so an explicit symbol version for lseek64 is added to the
MIPS n32 syscalls.list. The case in make-syscalls.sh that handles
such explicit non-compat symbol versions then needs to be changed to
use weak_alias instead of strong_alias when the syscall is built
outside of libc, to avoid linknamespace failures from a strong lseek64
symbol in static libpthread.
The x32 llseek.S was as far as I could tell already unused (nothing
builds an llseek.* source file, at least since the lseek / lseek64 /
llseek consolidation), so is removed in this patch as well.
Tested for x86_64 and x86, and with build-many-glibcs.py.
[BZ #18471]
* sysdeps/unix/make-syscalls.sh (emit_weak_aliases): Use weak
aliases for non-libc case of versioned symbols.
* sysdeps/unix/sysv/linux/lseek64.c: Include <shlib-compat.h>.
(llseek): Define as compat symbol if
[SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_28)], not as weak alias
with link warning.
* sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list (llseek):
Make into a compat symbol, disabled for minimum symbol version
GLIBC_2.28 and later.
* sysdeps/unix/sysv/linux/x86_64/x32/llseek.S: Remove file.
Although the REP MOVSB implementations of memmove, memcpy and mempcpy
aren't used by the current processors, this patch adds Prefer_FSRM
check in ifunc-memmove.h so that they can be used in the future.
* sysdeps/x86/cpu-features.h (bit_arch_Prefer_FSRM): New.
(index_arch_Prefer_FSRM): Likewise.
* sysdeps/x86/cpu-tunables.c (TUNABLE_CALLBACK (set_hwcaps)):
Also check Prefer_FSRM.
* sysdeps/x86_64/multiarch/ifunc-memmove.h (IFUNC_SELECTOR):
Also return OPTIMIZE (erms) for Prefer_FSRM.
The newer Intel processors support Fast Short REP MOVSB which has a
feature bit in CPUID. This patch adds the Fast Short REP MOVSB (FSRM)
bit to x86 cpu-features.
* sysdeps/x86/cpu-features.h (bit_cpu_FSRM): New.
(index_cpu_FSRM): Likewise.
(reg_FSRM): Likewise.
It has been noted that test-tgmath3 is slow to compile, and to link on
some systems
<https://sourceware.org/ml/libc-alpha/2018-02/msg00477.html>, because
of the size of the test.
I'm working on tgmath.h support for the TS 18661-1 / 18661-3 functions
that round their results to a narrower type. For the functions
already present in glibc, this wouldn't make test-tgmath3 much bigger,
because those functions only have two arguments. For the narrowing
versions of fma (for which I've not yet added the functions to glibc),
however, it would result in many configurations building tests of the
type-generic macros f32fma, f64fma, f32xfma, f64xfma, each with 21
possible types for each of three arguments (float, double, long double
aren't valid argument types for these macros when they return a
_FloatN / _FloatNx type), so substantially increasing the size of the
testcase.
To avoid further increasing the size of a single test when adding the
type-generic narrowing fma macros, this patch arranges for the
test-tgmath3 tests to be run separately for each function tested. The
fma tests are still by far the largest (next is pow, as that has two
arguments that can be real or complex; after that, the two-argument
real-only functions), but each type-generic fma macro for a different
return type would end up with its tests being run separately, rather
than increasing the size of a single test.
To avoid accidentally missing testing a macro because
gen-tgmath-tests.py supports testing it but the makefile fails to call
it for that function, a test is also added that verifies that the
lists of macros in the makefile and gen-tgmath-tests.py agree.
Tested for x86_64.
* math/gen-tgmath-tests.py: Import sys.
(Tests.__init__): Initialize macros_seen.
(Tests.add_tests): Add macro to macros_seen. Only generate tests
if requested to do so for this macro.
(Tests.add_all_tests): Take argument for macro for which to
generate tests.
(Tests.check_macro_list): New function.
(main): Handle check-list argument and argument specifying macro
for which to generate tests.
* math/Makefile [PYTHON] (tgmath3-macros): New variable.
[PYTHON] (tgmath3-macro-tests): Likewise.
[PYTHON] (tests): Add $(tgmath3-macro-tests) not test-tgmath3.
[PYTHON] (generated): Add $(addsuffix .c,$(tgmath3-macro-tests))
not test-tgmath3.c.
[PYTHON] (CFLAGS-test-tgmath3.c): Remove.
[PYTHON] ($(tgmath3-macro-tests:%=$(objpfx)%.o): Add -fno-builtin
to CFLAGS.
[PYTHON] ($(objpfx)test-tgmath3.c): Replace rule by....
[PYTHON] ($(foreach
m,$(tgmath3-macros),$(objpfx)test-tgmath3-$(m).c): ... this. New
rule.
[PYTHON] (tests-special): Add
$(objpfx)test-tgmath3-macro-list.out.
[PYTHON] ($(objpfx)test-tgmath3-macro-list.out): New rule.
The Linux nfsservctl syscall was removed in Linux 3.1. Since the
minimum kernel version for use with glibc is 3.2, the glibc wrapper
for this syscall can no longer usefully be called. This patch makes
it into a compat symbol, not provided at all for static linking or new
ports. (It was already the case that there was no header declaration
of this function.)
Tested for x86_64.
* sysdeps/unix/sysv/linux/syscalls.list (nfsservctl): Make into a
compat symbol, disabled for minimum symbol version GLIBC_2.28 and
later.
Bug 22639 reports localtime failing to handle time offset transitions
correctly in 2039 and later on platforms with 64-bit time_t.
The problem is the use of SECSPERDAY (constant 86400) in calculations
such as
t = ((year - 1970) * 365
+ /* Compute the number of leapdays between 1970 and YEAR
(exclusive). There is a leapday every 4th year ... */
+ ((year - 1) / 4 - 1970 / 4)
/* ... except every 100th year ... */
- ((year - 1) / 100 - 1970 / 100)
/* ... but still every 400th year. */
+ ((year - 1) / 400 - 1970 / 400)) * SECSPERDAY;
where t is of type time_t and year is of type int. Before my commit
92bd70fb85 (an update from tzcode,
included in 2.26 and later releases), SECSPERDAY was obtained from a
file imported from tzcode, where the value included a cast to
int_fast32_t. On 64-bit platforms, glibc defines int_fast32_t to be
long int, so 64-bit, but my patch resulted in it changing to int.
(The bug would probably have existed even before my patch for x32,
which has 64-bit time_t but 32-bit int_fast32_t, but I haven't
verified that.)
This patch fixes the problem by including a cast to time_t in the
definition of SECSPERDAY. (64-bit time support for 32-bit systems
should move such code that isn't a public interface to using the
internal 64-bit version of time_t throughout.)
Tested for x86_64 and x86.
[BZ #22639]
* time/tzset.c (SECSPERDAY): Cast to time_t.
* time/tst-y2039.c: New file.
* time/Makefile (tests): Add tst-y2039.
_Float128 is defined for certain compilers indirectly from
<libm-alias-double.h>, and <ieee754_float128.h> (included from
<math-nan-payload-float128.h>) needs this definition.
As indicated by BZ#23178, concurrent access on some files read by nscd
may result non expected data send through service requisition. This is
due 'sendfile' Linux implementation where for sockets with zero-copy
support, callers must ensure the transferred portions of the the file
reffered by input file descriptor remain unmodified until the reader
on the other end of socket has consumed the transferred data.
I could not find any explicit documentation stating this behaviour on
Linux kernel documentation. However man-pages sendfile entry [1] states
in NOTES the aforementioned remark. It was initially pushed on man-pages
with an explicit testcase [2] that shows changing the file used in
'sendfile' call prior the socket input data consumption results in
previous data being lost.
From commit message it stated on tested Linux version (3.15) only TCP
socket showed this issues, however on recent kernels (4.4) I noticed the
same behaviour for local sockets as well.
Since sendfile on HURD is a read/write operation and the underlying
issue on Linux, the straightforward fix is just remove sendfile use
altogether. I am really skeptical it is hitting some hotstop (there
are indication over internet that sendfile is helpfull only for large
files, more than 10kb) here to justify that extra code complexity or
to pursuit other possible fix (through memory or file locks for
instance, which I am not sure it is doable).
Checked on x86_64-linux-gnu.
[BZ #23178]
* nscd/nscd-client.h (sendfileall): Remove prototype.
* nscd/connections.c [HAVE_SENDFILE] (sendfileall): Remove function.
(handle_request): Use writeall instead of sendfileall.
* nscd/aicache.c (addhstaiX): Likewise.
* nscd/grpcache.c (cache_addgr): Likewise.
* nscd/hstcache.c (cache_addhst): Likewise.
* nscd/initgrcache.c (addinitgroupsX): Likewise.
* nscd/netgroupcache.c (addgetnetgrentX, addinnetgrX): Likewise.
* nscd/pwdcache.c (cache_addpw): Likewise.
* nscd/servicescache.c (cache_addserv): Likewise.
* sysdeps/unix/sysv/linux/Makefile [$(subdir) == nscd]
(sysdep-CFLAGS): Remove -DHAVE_SENDFILE.
* sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_SENDFILE):
Remove define.
[1] http://man7.org/linux/man-pages/man2/sendfile.2.html
[2] 7b6a329977 (diff-efd6af3a70f0f07c578e85b51e83b3c3)
Unlike i386, we can call hidden IFUNC functions inside libc.so since
x86-64 PLT is always PIC.
Tested on x86-64.
* sysdeps/x86_64/multiarch/strncat-c.c (STRNCAT_PRIMARY): Removed.
Include <string/strncat.c>.
* sysdeps/x86_64/multiarch/strncat.c (__strncat): New strong
alias.
(__GI___strncat): New hidden alias.
Since we have loaded address of PREINIT_FUNCTION into %eax, we can
avoid extra branch to PLT slot.
* sysdeps/i386/crti.S (_init): Replace PREINIT_FUNCTION@PLT
with *%eax in call.
Acked-by: Christian Brauner (Ubuntu) <christian@brauner.io>
Since the result of testl is never used, this patch removes it.
Tested on 64-bit AVX2 machine.
* sysdeps/x86_64/multiarch/strlen-avx2.S (STRLEN): Remove the
unnecessary testl.
When compiling C++ code with -mabi=ieeelongdouble, KCtype is
unavailable and the long double type should be used instead.
This is also providing macro __HAVE_FLOAT128_UNLIKE_LDBL in order to
identify the kind of long double type is being used in the current
compilation unit.
Notice that bits/floatn.h cannot benefit from the new macro due to order
of header inclusion.
* bits/floatn-common.h: Define __HAVE_FLOAT128_UNLIKE_LDBL.
* math/math.h: Restrict the prototype definition for the functions
issignaling(_Float128) and iszero(_Float128); and template
__iseqsig_type<_Float128>, from __HAVE_DISTINCT_FLOAT128 to
__HAVE_FLOAT128_UNLIKE_LDBL.
* sysdeps/powerpc/bits/floatn.h [__HAVE_FLOAT128
&& (!__GNUC_PREREQ (7, 0) || defined __cplusplus)
&& __LDBL_MANT_DIG__ == 113]: Use long double suffix for
__f128() constants; define the type _Float128 as long double;
and reuse long double in __CFLOAT128.
Signed-off-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
This patch continues the math_private.h cleanup by stopping
math_private.h from including math-barriers.h and making the users of
the barrier macros include the latter header directly. No attempt is
made to remove any math_private.h includes that are now unused, except
in strtod_l.c where that is done to avoid line number changes in
assertions, so that installed stripped shared libraries can be
compared before and after the patch. (I think the floating-point
environment support in math_private.h should also move out - some
architectures already have fenv_private.h as an architecture-internal
header included from their math_private.h - and after moving that out
might be a better time to identify unused math_private.h includes.)
Tested for x86_64 and x86, and tested with build-many-glibcs.py that
installed stripped shared libraries are unchanged by the patch.
* sysdeps/generic/math_private.h: Do not include
<math-barriers.h>.
* stdlib/strtod_l.c: Include <math-barriers.h> instead of
<math_private.h>.
* math/fromfp.h: Include <math-barriers.h>.
* math/math-narrow.h: Likewise.
* math/s_nextafter.c: Likewise.
* math/s_nexttowardf.c: Likewise.
* sysdeps/aarch64/fpu/s_llrint.c: Likewise.
* sysdeps/aarch64/fpu/s_llrintf.c: Likewise.
* sysdeps/aarch64/fpu/s_lrint.c: Likewise.
* sysdeps/aarch64/fpu/s_lrintf.c: Likewise.
* sysdeps/i386/fpu/s_nextafterl.c: Likewise.
* sysdeps/i386/fpu/s_nexttoward.c: Likewise.
* sysdeps/i386/fpu/s_nexttowardf.c: Likewise.
* sysdeps/ieee754/dbl-64/e_atan2.c: Likewise.
* sysdeps/ieee754/dbl-64/e_atanh.c: Likewise.
* sysdeps/ieee754/dbl-64/e_exp.c: Likewise.
* sysdeps/ieee754/dbl-64/e_exp2.c: Likewise.
* sysdeps/ieee754/dbl-64/e_j0.c: Likewise.
* sysdeps/ieee754/dbl-64/e_sqrt.c: Likewise.
* sysdeps/ieee754/dbl-64/s_expm1.c: Likewise.
* sysdeps/ieee754/dbl-64/s_fma.c: Likewise.
* sysdeps/ieee754/dbl-64/s_fmaf.c: Likewise.
* sysdeps/ieee754/dbl-64/s_log1p.c: Likewise.
* sysdeps/ieee754/dbl-64/s_nearbyint.c: Likewise.
* sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c: Likewise.
* sysdeps/ieee754/flt-32/e_atanhf.c: Likewise.
* sysdeps/ieee754/flt-32/e_j0f.c: Likewise.
* sysdeps/ieee754/flt-32/s_expm1f.c: Likewise.
* sysdeps/ieee754/flt-32/s_log1pf.c: Likewise.
* sysdeps/ieee754/flt-32/s_nearbyintf.c: Likewise.
* sysdeps/ieee754/flt-32/s_nextafterf.c: Likewise.
* sysdeps/ieee754/k_standardl.c: Likewise.
* sysdeps/ieee754/ldbl-128/e_asinl.c: Likewise.
* sysdeps/ieee754/ldbl-128/e_expl.c: Likewise.
* sysdeps/ieee754/ldbl-128/e_powl.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_fmal.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_nearbyintl.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_nextafterl.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_nexttoward.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_nexttowardf.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/e_asinl.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_fmal.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise.
* sysdeps/ieee754/ldbl-96/e_atanhl.c: Likewise.
* sysdeps/ieee754/ldbl-96/e_j0l.c: Likewise.
* sysdeps/ieee754/ldbl-96/s_fma.c: Likewise.
* sysdeps/ieee754/ldbl-96/s_fmal.c: Likewise.
* sysdeps/ieee754/ldbl-96/s_nexttoward.c: Likewise.
* sysdeps/ieee754/ldbl-96/s_nexttowardf.c: Likewise.
* sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c: Likewise.
* sysdeps/m68k/m680x0/fpu/s_nextafterl.c: Likewise.
This is needed to avoid a warning when linking against libtirpc:
/lib64/libc.so.6: warning: common of `rpc_createerr@@TIRPC_0.3.0' overridden by definition
/usr/lib64/libtirpc.so: warning: defined here
This ld warning is not enabled by default; -Wl,--warn-common enables it.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>