Roland McGrath [Wed, 14 May 2014 17:53:52 +0000 (10:53 -0700)]
x86_64: Remove useless pthread_spin_{init,unlock} wrapper files.
Roland McGrath [Wed, 14 May 2014 17:43:54 +0000 (10:43 -0700)]
Move x86_64 compat-timer.h out of nptl/
Roland McGrath [Wed, 14 May 2014 17:35:39 +0000 (10:35 -0700)]
Move x86_64 timer_*.c out of nptl/
Roland McGrath [Wed, 14 May 2014 17:16:27 +0000 (10:16 -0700)]
x86: Consolidate NPTL/non versions of clone
Roland McGrath [Wed, 14 May 2014 16:44:56 +0000 (09:44 -0700)]
Move NPTL public ABI headers for x86 to sysdeps/x86/nptl/.
Roland McGrath [Wed, 14 May 2014 16:44:39 +0000 (09:44 -0700)]
x86: Consolidate NPTL/non versions of vfork
Roland McGrath [Wed, 14 May 2014 16:44:24 +0000 (09:44 -0700)]
ARM: Consolidate NPTL/non versions of vfork
Will Newton [Fri, 25 Apr 2014 14:48:48 +0000 (15:48 +0100)]
stdlib/gmp-impl.h: Silence -Wundef warning for USE_STACK_ALLOC
The upstream version of GMP has long removed this conditional
altogether in this commit:
changeset: 5254:
88618a4694ac
user: Kevin Ryde <user42@zip.com.au>
date: Sun Jun 17 01:37:27 2001 +0200
So just turn the #if into an #ifdef to silence the warning.
ChangeLog:
2014-05-14 Will Newton <will.newton@linaro.org>
* stdlib/gmp-impl.h: Test USE_STACK_ALLOC #ifdef
rather than #if.
Joseph Myers [Wed, 14 May 2014 12:38:56 +0000 (12:38 +0000)]
Fix log1pl (LDBL_MAX) in FE_UPWARD mode (bug 16564).
Bug 16564 is spurious overflow of log1pl (LDBL_MAX) in FE_UPWARD mode,
resulting from log1pl adding 1 to its argument (for arguments not
close to 0), which overflows in that mode. This patch fixes this by
avoiding adding 1 to large arguments (precisely what counts as large
depends on the floating-point format).
Tested x86_64 and x86, and spot-checked log1pl tests on mips64 and
powerpc64.
[BZ #16564]
* sysdeps/i386/fpu/s_log1pl.S (__log1pl): Do not add 1 to positive
arguments with exponent 65 or above.
* sysdeps/ieee754/ldbl-128/s_log1pl.c (__log1pl): Do not add 1 to
arguments 0x1p113L or above.
* sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (__log1pl): Do not add 1
to arguments 0x1p107L or above.
* sysdeps/x86_64/fpu/s_log1pl.S (__log1pl): Do not add 1 to
positive arguments with exponent 65 or above.
* math/auto-libm-test-in: Add more tests of log1p.
* math/auto-libm-test-out: Regenerated.
Joseph Myers [Wed, 14 May 2014 12:37:24 +0000 (12:37 +0000)]
Fix cacos (+Inf + finite*i) in round-downward mode (bug 16928).
According to C99/C11 Annex G, cacos applied to a value with real part
+Inf and finite imaginary part should produce a result with real part
+0. glibc wrongly produces a result with real part -0 in FE_DOWNWARD
mode. This patch fixes this by checking for zero results in the
relevant case of non-finite arguments (where there should never be a
result with -0 real part), and converts the tests of cacos to
ALL_RM_TEST.
Tested x86_64 and x86 and ulps updated accordingly.
[BZ #16928]
* math/s_cacos.c (__cacos): Ensure zero real part of result from
non-finite arguments is +0.
* math/s_cacosf.c (__cacosf): Likewise.
* math/s_cacosl.c (__cacosl): Likewise.
* math/libm-test.inc (cacos_test): Use ALL_RM_TEST.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Joseph Myers [Wed, 14 May 2014 12:35:40 +0000 (12:35 +0000)]
Fix acosh (1) in round-downward mode (bug 16927).
According to C99 and C11 Annex F, acosh (1) should be +0 in all
rounding modes. However, some implementations in glibc wrongly return
-0 in round-downward mode (which is what you get if you end up
computing log1p (-0), via 1 - 1 being -0 in round-downward mode).
This patch fixes the problem implementations, by correcting the test
for an exact 1 value in the ldbl-96 implementation to allow for the
explicit high bit of the mantissa, and by inserting fabs instructions
in the i386 implementations; tests of acosh are duly converted to
ALL_RM_TEST. I believe all the other sysdeps/ieee754 implementations
are already OK (I haven't checked the ia64 versions, but if buggy then
that will be obvious from the results of test runs after this patch is
in).
Tested x86_64 and x86 and ulps updated accordingly.
[BZ #16927]
* sysdeps/i386/fpu/e_acosh.S (__ieee754_acosh): Use fabs on x-1
value.
* sysdeps/i386/fpu/e_acoshf.S (__ieee754_acoshf): Likewise.
* sysdeps/i386/fpu/e_acoshl.S (__ieee754_acoshl): Likewise.
* sysdeps/ieee754/ldbl-96/e_acoshl.c (__ieee754_acoshl): Correct
for explicit high bit of mantissa when testing for argument equal
to 1.
* math/libm-test.inc (acosh_test): Use ALL_RM_TEST.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Joseph Myers [Wed, 14 May 2014 12:34:03 +0000 (12:34 +0000)]
Fix erf underflow handling near 0 (bug 16516).
Bug 16516 reports spurious underflows from erf (for all floating-point
types), when the result is close to underflowing but does not actually
underflow.
erf (x) is about (2/sqrt(pi))*x for x close to 0, so there are
subnormal arguments for which it does not underflow. The various
implementations do (x + efx*x) (for efx = 2/sqrt(pi) - 1), for greater
accuracy than if just using a single multiplication by an
approximation to 2/sqrt(pi) (effectively, this way there are a few
more bits in the approximation to 2/sqrt(pi)). This can introduce
underflows when efx*x underflows even though the final result does
not, so a scaled calculation with 8*efx is done in these cases - but 8
is not a big enough scale factor to avoid all such underflows. 16 is
(any underflows with a scale factor of 16 would only occur when the
final result underflows), so this patch changes the code to use that
factor. Rather than recomputing all the values of the efx8 variable,
it is removed, leaving it to the compiler's constant folding to
compute 16*efx. As such scaling can also lose underflows when the
final scaling down happens to be exact, appropriate checks are added
to ensure underflow exceptions occur when required in such cases.
Tested x86_64 and x86; no ulps updates needed. Also spot-checked for
powerpc32 and mips64 to verify the changes to the ldbl-128ibm and
ldbl-128 implementations.
[BZ #16516]
* sysdeps/ieee754/dbl-64/s_erf.c (efx8): Remove variable.
(__erf): Scale by 16 instead of 8 in potentially underflowing
case. Ensure exception if result actually underflows.
* sysdeps/ieee754/flt-32/s_erff.c (efx8): Remove variable.
(__erff): Scale by 16 instead of 8 in potentially underflowing
case. Ensure exception if result actually underflows.
* sysdeps/ieee754/ldbl-128/s_erfl.c: Include <float.h>.
(efx8): Remove variable.
(__erfl): Scale by 16 instead of 8 in potentially underflowing
case. Ensure exception if result actually underflows.
* sysdeps/ieee754/ldbl-128ibm/s_erfl.c: Include <float.h>.
(efx8): Remove variable.
(__erfl): Scale by 16 instead of 8 in potentially underflowing
case. Ensure exception if result actually underflows.
* sysdeps/ieee754/ldbl-96/s_erfl.c: Include <float.h>.
(efx8): Remove variable.
(__erfl): Scale by 16 instead of 8 in potentially underflowing
case. Ensure exception if result actually underflows.
* math/auto-libm-test-in: Add more tests of erf.
* math/auto-libm-test-out: Regenerated.
Andreas Schwab [Tue, 25 Mar 2014 10:55:52 +0000 (11:55 +0100)]
Remove last use of USE___THREAD
Andreas Schwab [Tue, 13 May 2014 15:04:27 +0000 (17:04 +0200)]
Fix macro warning on HAVE_PT_CHOWN
Joseph Myers [Wed, 14 May 2014 00:45:19 +0000 (00:45 +0000)]
Reduce kernel-features.h duplication.
This patch reduces duplication between different architectures'
kernel-features.h files by making the architecture-independent file
define various macros unconditionally (instead of only for a
particular list of architectures), with the architecture-specific
files then undefining the macros if necessary.
Specifically, __ASSUME_O_CLOEXEC (O_CLOEXEC flag to open) and
__ASSUME_SOCK_CLOEXEC (SOCK_NONBLOCK and SOCK_CLOEXEC flags to socket)
are supported on all architectures as of 2.6.32 or the minimum kernel
version for the architecture if later. For __ASSUME_IN_NONBLOCK,
__ASSUME_PIPE2, __ASSUME_EVENTFD2, __ASSUME_SIGNALFD4 and
__ASSUME_DUP3, the relevant syscalls were added for alpha in 2.6.33
but otherwise the features are available as of 2.6.32. For
__ASSUME_UTIMES, support is everywhere in 2.6.32 except for
asm-generic architectures and hppa.
Although those were the main cases of duplication among
kernel-features.h files, some other cases of unnecessary definitions
were also cleaned up: the hppa file defined various macros that were
either no longer used at all, or defined by the main file by default
anyway, the ia64 file had duplicative definitions of __ASSUME_PSELECT
and __ASSUME_PPOLL, while mips had such a definition of
__ASSUME_IPC64.
Really, rather than being defined in the main file then undefined for
asm-generic architectures, __ASSUME_UTIMES should become an
hppa-specific macro. Given that __ASSUME_ATFCTS and
__ASSUME_UTIMENSAT are now always true, the only live __ASSUME_UTIMES
conditional is in sysdeps/unix/sysv/linux/utimes.c, which is not used
for asm-generic architectures. I think the desired state would be an
hppa-specific file (that includes sysdeps/unix/sysv/linux/utimes.c if
__ASSUME_UTIMES, and otherwise has fallback code), with the fallback
code being removed from the main utimes.c. But I think that's most
reasonably a separate cleanup once __ASSUME_ATFCTS and
__ASSUME_UTIMESAT have both had conditional code cleaned up.
Given this patch, I think it's straightforward to move non-ex-ports
architectures to having their own kernel-features.h files, like
ex-ports architectures, rather than conditionals in the main file
(i.e., such a move won't require the architecture-specific file to
contain anything that isn't genuinely architecture-specific), and
would encourage architecture maintainers to do so.
Tested x86_64 that the installed shared libraries are unchanged by
this patch. Note that on some architectures this *will* cause
__ASSUME_* macros to be defined in cases where they weren't previously
but should have been (but this is just optimization, not a fix to a
user-visible bug, so doesn't need a bug report in Bugzilla).
* sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_UTIMES):
Define unconditionally.
(__ASSUME_O_CLOEXEC): Likewise.
(__ASSUME_SOCK_CLOEXEC): Likewise.
(__ASSUME_IN_NONBLOCK): Likewise.
(__ASSUME_PIPE2): Likewise.
(__ASSUME_EVENTFD2): Likewise.
(__ASSUME_SIGNALFD4): Likewise.
(__ASSUME_DUP3): Likewise.
* sysdeps/unix/sysv/linux/aarch64/kernel-features.h
(__ASSUME_DUP3): Do not define.
(__ASSUME_EVENTFD2): Likewise.
(__ASSUME_IN_NONBLOCK): Likewise.
(__ASSUME_O_CLOEXEC): Likewise.
(__ASSUME_PIPE2): Likewise.
(__ASSUME_SIGNALFD4): Likewise.
(__ASSUME_SOCK_CLOEXEC): Likewise.
(__ASSUME_UTIMES): Undefine.
* sysdeps/unix/sysv/linux/alpha/kernel-features.h
(__ASSUME_UTIMES): Do not define.
(__ASSUME_O_CLOEXEC): Likewise.
(__ASSUME_SOCK_CLOEXEC): Likewise.
(__ASSUME_IN_NONBLOCK): Undefine if [__LINUX_KERNEL_VERSION <
0x020621] instead of defining if [__LINUX_KERNEL_VERSION >=
0x020621].
(__ASSUME_PIPE2): Likewise.
(__ASSUME_EVENTFD2): Likewise.
(__ASSUME_SIGNALFD4): Likewise.
[__LINUX_KERNEL_VERSION < 0x020621] (__ASSUME_DUP3): Undefine.
* sysdeps/unix/sysv/linux/arm/kernel-features.h (__ASSUME_UTIMES):
Do not define.
(__ASSUME_EVENTFD2): Likewise.
(__ASSUME_SIGNALFD4): Likewise.
* sysdeps/unix/sysv/linux/hppa/kernel-features.h
(__ASSUME_32BITUIDS): Likewise.
(__ASSUME_TRUNCATE64_SYSCALL): Likewise.
(__ASSUME_IPC64): Likewise.
(__ASSUME_ST_INO_64_BIT): Likewise.
(__ASSUME_GETDENTS64_SYSCALL): Likewise.
[__LINUX_KERNEL_VERSION < 0x030e00] (__ASSUME_UTIMES): Undefine.
* sysdeps/unix/sysv/linux/ia64/kernel-features.h
(__ASSUME_UTIMES): Do not define.
(__ASSUME_PSELECT): Likewise.
(__ASSUME_PPOLL): Likewise.
(__ASSUME_O_CLOEXEC): Likewise.
(__ASSUME_SOCK_CLOEXEC): Likewise.
(__ASSUME_IN_NONBLOCK): Likewise.
(__ASSUME_PIPE2): Likewise.
(__ASSUME_EVENTFD2): Likewise.
(__ASSUME_SIGNALFD4): Likewise.
(__ASSUME_DUP3): Likewise.
* sysdeps/unix/sysv/linux/m68k/kernel-features.h
(__ASSUME_UTIMES): Likewise.
(__ASSUME_O_CLOEXEC): Likewise.
(__ASSUME_SOCK_CLOEXEC): Likewise.
(__ASSUME_IN_NONBLOCK): Likewise.
(__ASSUME_PIPE2): Likewise.
(__ASSUME_EVENTFD2): Likewise.
(__ASSUME_SIGNALFD4): Likewise.
(__ASSUME_DUP3): Likewise.
* sysdeps/unix/sysv/linux/microblaze/kernel-features.h
(__ASSUME_UTIMES): Likewise.
(__ASSUME_O_CLOEXEC): Likewise.
(__ASSUME_SOCK_CLOEXEC): Likewise.
(__ASSUME_IN_NONBLOCK): Likewise.
(__ASSUME_PIPE2): Likewise.
(__ASSUME_EVENTFD2): Likewise.
(__ASSUME_SIGNALFD4): Likewise.
(__ASSUME_DUP3): Likewise.
* sysdeps/unix/sysv/linux/mips/kernel-features.h (__ASSUME_IPC64):
Likewise.
(__ASSUME_UTIMES): Likewise.
(__ASSUME_EVENTFD2): Likewise.
(__ASSUME_SIGNALFD4): Likewise.
* sysdeps/unix/sysv/linux/tile/kernel-features.h
(__ASSUME_O_CLOEXEC): Likewise.
(__ASSUME_SOCK_CLOEXEC): Likewise.
(__ASSUME_IN_NONBLOCK): Likewise.
(__ASSUME_PIPE2): Likewise.
(__ASSUME_EVENTFD2): Likewise.
(__ASSUME_SIGNALFD4): Likewise.
(__ASSUME_DUP3): Likewise.
(__ASSUME_UTIMES): Undefine.
Joseph Myers [Wed, 14 May 2014 00:41:20 +0000 (00:41 +0000)]
Clean up ARM old-ABI symbol versioning relics.
This patch cleans up some symbol versioning code in the ARM port that
exists only as relics of the old-ABI port, which was removed some time
ago.
The minimum symbol version in the ARM port is GLIBC_2.4 (the version
where the EABI port was introduced). Thus, any SHLIB_COMPAT
conditionals where the later version is 2.4 or later are obsolete and
can be removed. In addition, there is no need to set symbol versions
before 2.4 explicitly if the symbols would have a version of 2.4 by
default anyway. This includes most of the entries in
sysdeps/unix/sysv/linux/arm/Versions: those for GLIBC_2.0 are for
libgcc unwind functions that aren't actually in ARM EABI glibc at all,
while those for GLIBC_2.2 and GLIBC_2.3.3 are for functions which for
the old-ABI port may have had versions different from the
architecture-independent default, but where for EABI the default
suffices (both the default and the version in that file map to 2.4, so
the entries in that file do nothing). The GLIBC_2.1 entries are
needed (architecture-specific functions), but it seems less confusing
for those to say GLIBC_2.4, as the actual version those symbols in
fact have.
Various cases in the <fenv.h> functions where a function is defined as
__fe* with an fe* versioned alias are cleaned up just to define fe*
directly, as done e.g. on AArch64. If in future we actually need an
__fe* name for use from C90 functions in libm as discussed recently,
of course we can add one on all architectures and make the fe* name
into a weak alias for that particular function, but for now the __fe*
names aren't needed.
In the case of posix_fadvise64, the __posix_fadvise64_l64 name and
posix_fadvise64 alias are kept as __posix_fadvise64_l64 is used in
posix_fadvise. (For that to be a namespace-clean use, posix_fadvise64
needs to be a *weak* alias not a strong one as at present, but that's
an independent preexisting bug.)
(There remain references to GLIBC_2_2 in
sysdeps/unix/sysv/linux/arm/{msgctl.c,semctl.c,shmctl.c}. As those
files are used by alpha which has a genuine 2.2 version for those
functions, I think those references need to stay as-is.)
Tested that the disassembly of installed shared libraries is unchanged
by this patch (though function names shown in disassembly change to no
longer have @@GLIBC_2.4, now those functions get versioned only by the
version map and not redundantly at assembler time) and that the ABI
tests pass.
* sysdeps/arm/fclrexcpt.c (__feclearexcept): Rename to
feclearexcept. Remove symbol versioning code.
* sysdeps/arm/fegetenv.c (__fegetenv): Rename to fegetenv. Remove
symbol versioning code.
* sysdeps/arm/fesetenv.c (__fesetenv): Rename to fesetenv. Remove
symbol versioning code.
* sysdeps/arm/feupdateenv.c (__feupdateenv): Rename to
feupdateenv. Remove symbol versioning code.
* sysdeps/arm/fgetexcptflg.c (__fegetexceptflag): Rename to
fegetexceptflag. Remove symbol versioning code.
* sysdeps/arm/fsetexcptflg.c (__fesetexceptflag): Rename to
fesetexceptflag. Remove symbol versioning code.
* sysdeps/unix/sysv/linux/arm/Versions (libc): Remove GLIBC_2.0,
GLIBC_2.2 and GLIBC_2.3.3 entries. Change GLIBC_2.1 to GLIBC_2.4.
* sysdeps/unix/sysv/linux/arm/posix_fadvise64.c
(__posix_fadvise64_l32): Remove prototype.
[SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3)]: Remove conditional
code.
Roland McGrath [Tue, 13 May 2014 17:22:21 +0000 (10:22 -0700)]
Move NPTL public ABI headers for ARM to sysdeps/arm/nptl/.
Ondřej Bílka [Tue, 13 May 2014 17:40:15 +0000 (19:40 +0200)]
fix changelog.
Sami Kerola [Tue, 13 May 2014 17:38:32 +0000 (19:38 +0200)]
tzselect: use zonedir instead of current working directory
Roland McGrath [Tue, 13 May 2014 17:04:20 +0000 (10:04 -0700)]
Verbatim NPTL file moves for ARM/Linux.
Roland McGrath [Tue, 13 May 2014 17:04:05 +0000 (10:04 -0700)]
Consolidate NPTL configury for ARM/Linux.
Roland McGrath [Tue, 13 May 2014 17:03:45 +0000 (10:03 -0700)]
Consolidate NPTL vs non clone.S for ARM.
Roland McGrath [Tue, 13 May 2014 16:49:20 +0000 (09:49 -0700)]
Clean up __exit_thread.
Andreas Schwab [Tue, 13 May 2014 15:06:58 +0000 (17:06 +0200)]
Fix typo in assertion
Joseph Myers [Mon, 12 May 2014 22:48:25 +0000 (22:48 +0000)]
Clean up kernel version conditionals for pre-2.6.32 kernels.
This patch does some initial cleanup, following the move to 2.6.32
minimum kernel version, by removing __LINUX_KERNEL_VERSION
conditionals that are now always-true or always-false. In the case of
__ASSUME_ARG_MAX_STACK_BASED, where the conditional used a kernel
version that was itself in a macro, the associated sysconf.c code is
also cleaned up and __ASSUME_ARG_MAX_STACK_BASED removed completely.
Tested x86_64 that disassembly of installed shared libraries is
unchanged by the patch.
* sysdeps/unix/sysv/linux/kernel-features.h [__s390__]
(__ASSUME_UTIMES): Do not condition on kernel version.
(__ASSUME_PSELECT): Define unconditionally.
(__ASSUME_PPOLL): Likewise.
(__ASSUME_ATFCTS): Likewise.
(__ASSUME_SET_ROBUST_LIST): Do not condition on kernel version.
(__ASSUME_COMPLETE_READV_WRITEV): Define unconditionally.
(__ASSUME_FUTEX_LOCK_PI): Do not condition on kernel version.
(__ASSUME_UTIMENSAT): Define unconditionally.
(__ASSUME_PRIVATE_FUTEX): Likewise.
(__ASSUME_FALLOCATE): Likewise.
(__ASSUME_O_CLOEXEC): Likewise.
(__LINUX_ARG_MAX_STACK_BASED_MIN_KERNEL): Remove.
(__ASSUME_ARG_MAX_STACK_BASED): Likewise.
(__ASSUME_ADJ_OFFSET_SS_READ): Define unconditionally.
(__ASSUME_SOCK_CLOEXEC): Do not condition on kernel version.
(__ASSUME_IN_NONBLOCK): Likewise.
(__ASSUME_PIPE2): Likewise.
(__ASSUME_EVENTFD2): Likewise.
(__ASSUME_SIGNALFD4): Likewise.
(__ASSUME_DUP3): Likewise.
[__x86_64__ || __sparc__] (__ASSUME_ACCEPT4_SYSCALL): Likewise.
(__ASSUME_FUTEX_CLOCK_REALTIME): Define unconditionally.
(__ASSUME_AT_RANDOM): Likewise.
(__ASSUME_PREADV): Likewise.
(__ASSUME_PWRITEV): Likewise.
(__ASSUME_REQUEUE_PI): Do not condition on kernel version.
(__ASSUME_F_GETOWN_EX): Define unconditionally.
(__ASSUME_XFS_RESTRICTED_CHOWN): Likewise.
* sysdeps/unix/sysv/linux/sysconf.c (__sysconf)
[!__ASSUME_ARG_MAX_STACK_BASED]: Remove conditional code.
* sysdeps/unix/sysv/linux/alpha/kernel-features.h
(__ASSUME_O_CLOEXEC): Define unconditionally.
(__ASSUME_PSELECT): Do not undefine conditionally.
(__ASSUME_PPOLL): Likewise.
(__ASSUME_ATFCTS): Likewise.
(__ASSUME_SET_ROBUST_LIST): Likewise.
(__ASSUME_UTIMENSAT): Likewise.
(__ASSUME_FDATASYNC): Define unconditionally.
* sysdeps/unix/sysv/linux/arm/kernel-features.h
(__ASSUME_SIGFRAME_V2): Likewise.
)__ASSUME_EVENTFD2): Likewise.
(__ASSUME_SIGNALFD4): Likewise.
(__ASSUME_PSELECT): Do not undefine conditionally.
(__ASSUME_PPOLL): Likewise.
* sysdeps/unix/sysv/linux/ia64/kernel-features.h
(__ASSUME_PSELECT): Define unconditionally.
(__ASSUME_PPOLL): Likewise.
(__ASSUME_O_CLOEXEC): Likewise.
(__ASSUME_SOCK_CLOEXEC): Likewise.
(__ASSUME_IN_NONBLOCK): Likewise.
(__ASSUME_PIPE2): Likewise.
(__ASSUME_EVENTFD2): Likewise.
(__ASSUME_SIGNALFD4): Likewise.
(__ASSUME_DUP3): Likewise.
* sysdeps/unix/sysv/linux/m68k/kernel-features.h
(__ASSUME_O_CLOEXEC): Likewise.
(__ASSUME_SOCK_CLOEXEC): Likewise.
(__ASSUME_IN_NONBLOCK): Likewise.
(__ASSUME_PIPE2): Likewise.
(__ASSUME_EVENTFD2): Likewise.
(__ASSUME_SIGNALFD4): Likewise.
(__ASSUME_DUP3): Likewise.
* sysdeps/unix/sysv/linux/mips/kernel-features.h
(__ASSUME_EVENTFD2): Likewise.
(__ASSUME_SIGNALFD4): Likewise.
(__ASSUME_ACCEPT4_SYSCALL): Likewise.
Andreas Schwab [Thu, 8 May 2014 14:53:01 +0000 (16:53 +0200)]
Fix unbound stack use in NIS NSS module
Will Newton [Mon, 19 Aug 2013 10:39:55 +0000 (11:39 +0100)]
malloc: Add mallopt test.
ChangeLog:
2014-05-12 Will Newton <will.newton@linaro.org>
* malloc/Makefile (tests): Add tst-mallopt.
* malloc/tst-mallopt.c: New file.
Roland McGrath [Fri, 9 May 2014 18:08:39 +0000 (11:08 -0700)]
Make armv7 strcmp assembly compatible with ARM mode and SFI.
Adhemerval Zanella [Fri, 9 May 2014 18:35:28 +0000 (15:35 -0300)]
Fix elf/tst-tls9-static build
This patch fixes the tst-tlsmod[5/6].so build in system that uses
-Wl,--as-needed as default in linker option. Without this option
the testing shared library that does not have libc.so in DT_NEEDED
and the tst-tls9-static fails in architecture that use the
./sysdeps/unix/sysv/linux/<arch>/dl-static.c trick.
Roland McGrath [Fri, 9 May 2014 17:05:29 +0000 (10:05 -0700)]
Silence a missing-noreturn warning for _Unwind_Resume.
Joseph Myers [Fri, 9 May 2014 16:59:56 +0000 (16:59 +0000)]
Include SSE state in i386 fenv_t (bug 16064).
This patch fixes bug 16064, i386 fenv_t not including SSE state, using
the technique suggested there of storing the state in the existing
__eip field of fenv_t to avoid needing to increase the size of fenv_t
and add new symbol versions. The included testcase, which previously
failed for i386 (but passed for x86_64), illustrates how the previous
state was buggy.
This patch causes the SSE state to be included *to the extent it is on
x86_64*. Where some state should logically be included but isn't for
x86_64 (see bug 16068), this patch does not cause it to be included
for i386 either. The idea is that any patch fixing that bug should
fix it for both x86_64 and i386 at once.
Tested i386 and x86_64. (I haven't tested the case of a CPU without
SSE2 disabling the test.)
[BZ #16064]
* sysdeps/i386/fpu/fegetenv.c: Include <unistd.h>, <ldsodefs.h>
and <dl-procinfo.h>.
(__fegetenv): Save SSE state in envp->__eip if supported.
* sysdeps/i386/fpu/feholdexcpt.c (feholdexcept): Save SSE state in
envp->__eip if supported.
* sysdeps/i386/fpu/fesetenv.c: Include <unistd.h>, <ldsodefs.h>
and <dl-procinfo.h>.
(__fesetenv): Always set __eip, __cs_selector, __opcode,
__data_offset and __data_selector in environment to 0. Set SSE
state if supported.
* sysdeps/x86/fpu/Makefile [$(subdir) = math] (tests): Add
test-fenv-sse.
[$(subdir) = math] (CFLAGS-test-fenv-sse.c): Add -msse2
-mfpmath=sse.
* sysdeps/x86/fpu/test-fenv-sse.c: New file.
Will Newton [Fri, 9 May 2014 12:53:56 +0000 (13:53 +0100)]
ARM: Allow auto-detection of linker relro feature
Set values for libc_commonpagesize and libc_relro_required for the
ARM port to enable relro by default and suppress a warning at
configure time.
ChangeLog:
2014-05-09 Will Newton <will.newton@linaro.org>
* sysdeps/arm/preconfigure.ac: Set libc_commonpagesize
and libc_relro_required for ARM.
* sysdeps/arm/preconfigure: Regenerate.
Dominik Vogt [Fri, 9 May 2014 14:58:46 +0000 (16:58 +0200)]
S/390: Port of lock elision to System/z
Added support for TX lock elision of pthread mutexes on s390 and
s390x. This may improve lock scaling of existing programs on TX
capable systems. The lock elision code is only built with
--enable-lock-elision=yes and then requires a GCC version supporting
the TX builtins. With lock elision default mutexes are elided via
__builtin_tbegin, if the cpu supports transactions. By default lock
elision is not enabled and the elision code is not built.
Will Newton [Wed, 23 Apr 2014 12:21:47 +0000 (13:21 +0100)]
ARM: Add optimized ARMv7 strcmp implementation
Add an optimized implementation of strcmp for ARMv7-A cores. This
implementation is significantly faster than the current generic C
implementation, particularly for strings of 16 bytes and longer.
Tested with the glibc string tests for arm-linux-gnueabihf and
armeb-linux-gnueabihf.
The code was written by ARM, who have agreed to assign the copyright
to the FSF for integration into glibc.
ChangeLog:
2014-05-09 Will Newton <will.newton@linaro.org>
* sysdeps/arm/armv7/strcmp.S: New file.
* NEWS: Mention addition of ARMv7 optimized strcmp.
Roland McGrath [Thu, 8 May 2014 18:27:14 +0000 (11:27 -0700)]
Some configure-related decrufting.
Roland McGrath [Thu, 8 May 2014 17:47:35 +0000 (10:47 -0700)]
Fix -Wundef for _UTSNAME_DOMAIN_LENGTH.
Steve Ellcey [Wed, 7 May 2014 20:15:52 +0000 (13:15 -0700)]
Add 16922 to list of bugs fixed.
Steve Ellcey [Wed, 7 May 2014 20:10:48 +0000 (13:10 -0700)]
2014-05-07 Steve Ellcey <sellcey@mips.com>
[BZ# 16922]
* sysdeps/mips/sys/asm.h (INT_SUB): Fix definition.
(LONG_SUB): Ditto.
(PTR_SUB): Ditto.
Andreas Schwab [Wed, 7 May 2014 09:47:20 +0000 (11:47 +0200)]
Fix parsing of getai result from nscd for IPv6-only request
Ondřej Bílka [Wed, 7 May 2014 12:08:57 +0000 (14:08 +0200)]
Fix typo in nscd/selinux.c
Ondřej Bílka [Wed, 7 May 2014 11:58:23 +0000 (13:58 +0200)]
Fix typo in nptl/sockperf.c
Roland McGrath [Tue, 6 May 2014 22:55:20 +0000 (15:55 -0700)]
Move ARM internal unwind.h header to the right sysdeps directory.
Aurelien Jarno [Tue, 6 May 2014 21:31:44 +0000 (23:31 +0200)]
SPARC: add EFD_SEMAPHORE in <bits/eventfd.h> (BZ #16916)
EFD_SEMAPHORE has been added in the main <bits/eventfd.h>, but not in
the SPARC specific version. Fix that.
Vidya Ranganathan [Tue, 6 May 2014 00:10:45 +0000 (19:10 -0500)]
PowerPC: strncpy/stpncpy optimization for PPC64/POWER7
The optimization is achieved by following techniques:
> data alignment [gain from aligned memory access on read/write]
> POWER7 gains performance with loop unrolling/unwinding
[gain by reduction of branch penalty].
> zero padding done by calling optimized memset
Andreas Schwab [Tue, 6 May 2014 09:55:24 +0000 (11:55 +0200)]
Don't use catomic functions in mcount (BZ #16912)
mcount cannot use catomic functions since it is called by
__libc_start_main before TLS is set up. This reverts the change made by
commit 8099361.
Roland McGrath [Mon, 5 May 2014 20:16:08 +0000 (13:16 -0700)]
Move rules for Linux-specific pldd program to Linux-specific Makefile.
Roland McGrath [Mon, 5 May 2014 20:06:18 +0000 (13:06 -0700)]
Fix -Wundef issues in generated errlist.c.
Adhemerval Zanella [Fri, 2 May 2014 17:00:36 +0000 (12:00 -0500)]
PowerPC: ifunc improvement for internal calls
This patch changes de default symbol redirection for internal call of
memcpy, memset, memchr, and strlen to the IFUNC resolved ones. The
performance improvement is noticeable in algorithms that uses these
symbols extensible, like the regex functions.
Adam Conrad [Sun, 4 May 2014 05:45:15 +0000 (23:45 -0600)]
Revert incorrect removal of the XDR currency from locale/iso-4217.def
In
7447ccd98ee3944a95247ae23284dfac1de6c2aa, the XDR currency was
removed from locale/iso-4217.def, despite the fact that it's both
still a part of the standard, according to the official table:
http://www.currency-iso.org/dam/downloads/table_a1.xml
... and, more importantly, is referenced from localedata/i18n, so
any quick-and-dirty locale definition that uses "copy i18n" for
LC_MONETARY wouldn't work anymore.
Allan McRae [Sun, 4 May 2014 03:35:16 +0000 (13:35 +1000)]
Update Esperanto translations
Carlos O'Donell [Sat, 3 May 2014 04:25:21 +0000 (00:25 -0400)]
Fix -Wundef warning for FEATURE_INDEX_1.
Define FEATURE_INDEX_1 and FEATURE_INDEX_MAX as macros
for use by both assembly and C code. This fixes the
-Wundef error for cases where FEATURE_INDEX_1 was not
defined but used the correct value of 0 for an undefined
macro.
Steve Ellcey [Thu, 1 May 2014 20:42:40 +0000 (13:42 -0700)]
2014-05-01 Steve Ellcey <sellcey@mips.com>
* iconvdata/ansi_x3.110.c (ONE_DIRECTION): Define.
* iconvdata/armscii-8.c (ONE_DIRECTION): Define.
* iconvdata/big5.c (ONE_DIRECTION): Define.
* iconvdata/big5hkscs.c (ONE_DIRECTION): Define.
* iconvdata/cp1255.c (ONE_DIRECTION): Define.
* iconvdata/cp1258.c (ONE_DIRECTION): Define.
* iconvdata/cp932.c (ONE_DIRECTION): Define.
* iconvdata/euc-cn.c (ONE_DIRECTION): Define.
* iconvdata/euc-jisx0213.c (ONE_DIRECTION): Define.
* iconvdata/euc-jp-ms.c (ONE_DIRECTION): Define.
* iconvdata/euc-jp.c (ONE_DIRECTION): Define.
* iconvdata/euc-kr.c (ONE_DIRECTION): Define.
* iconvdata/euc-tw.c (ONE_DIRECTION): Define.
* iconvdata/gb18030.c (ONE_DIRECTION): Define.
* iconvdata/gbbig5.c (ONE_DIRECTION): Define.
* iconvdata/gbgbk.c (ONE_DIRECTION): Define.
* iconvdata/gbk.c (ONE_DIRECTION): Define.
* iconvdata/ibm1364.c (ONE_DIRECTION): Define.
* iconvdata/ibm930.c (ONE_DIRECTION): Define.
* iconvdata/ibm932.c (ONE_DIRECTION): Define.
* iconvdata/ibm933.c (ONE_DIRECTION): Define.
* iconvdata/ibm935.c (ONE_DIRECTION): Define.
* iconvdata/ibm937.c (ONE_DIRECTION): Define.
* iconvdata/ibm939.c (ONE_DIRECTION): Define.
* iconvdata/ibm943.c (ONE_DIRECTION): Define.
* iconvdata/iso-2022-cn-ext.c (ONE_DIRECTION): Define.
* iconvdata/iso-2022-cn.c (ONE_DIRECTION): Define.
* iconvdata/iso-2022-jp-3.c (ONE_DIRECTION): Define.
* iconvdata/iso-2022-jp.c (ONE_DIRECTION): Define.
* iconvdata/iso-2022-kr.c (ONE_DIRECTION): Define.
* iconvdata/iso646.c (ONE_DIRECTION): Define.
* iconvdata/iso8859-1.c (ONE_DIRECTION): Define.
* iconvdata/iso_11548-1.c (ONE_DIRECTION): Define.
* iconvdata/iso_6937-2.c (ONE_DIRECTION): Define.
* iconvdata/iso_6937.c (ONE_DIRECTION): Define.
* iconvdata/johab.c (ONE_DIRECTION): Define.
* iconvdata/shift_jisx0213.c (ONE_DIRECTION): Define.
* iconvdata/sjis.c (ONE_DIRECTION): Define.
* iconvdata/t.61.c (ONE_DIRECTION): Define.
* iconvdata/tcvn5712-1.c (ONE_DIRECTION): Define.
* iconvdata/tscii.c (ONE_DIRECTION): Define.
* iconvdata/uhc.c (ONE_DIRECTION): Define.
* iconvdata/unicode.c (ONE_DIRECTION): Define.
* iconvdata/utf-16.c (ONE_DIRECTION): Define.
* iconvdata/utf-32.c (ONE_DIRECTION): Define.
* iconvdata/utf-7.c (ONE_DIRECTION): Define.
David S. Miller [Thu, 1 May 2014 20:35:59 +0000 (16:35 -0400)]
NEWS: Add 16885 to fixed bug list.
Roland McGrath [Thu, 1 May 2014 20:33:13 +0000 (13:33 -0700)]
Fix -Wundef warnings for _IO_JUMPS_OFFSET.
Roland McGrath [Thu, 1 May 2014 20:08:30 +0000 (13:08 -0700)]
Deconditionalize use of LLL_LOCK_INITIALIZER in bits/libc-lock.h.
Andreas Schwab [Thu, 1 May 2014 20:00:34 +0000 (22:00 +0200)]
Fix implicit declaration
David S. Miller [Wed, 30 Apr 2014 19:57:51 +0000 (12:57 -0700)]
Fix v9/64-bit strcmp when string ends in multiple zero bytes.
[BZ #16885]
* sysdeps/sparc/sparc64/strcmp.S: Fix end comparison handling when
multiple zero bytes exist at the end of a string.
Reported by Aurelien Jarno <aurelien@aurel32.net>
* string/test-strcmp.c (check): Add explicit test for situations where
there are multiple zero bytes after the first.
Andreas Schwab [Thu, 1 May 2014 13:50:27 +0000 (15:50 +0200)]
Correctly handle %p in wprintf (BZ #16890)
Steve Ellcey [Thu, 1 May 2014 17:22:35 +0000 (10:22 -0700)]
2014-05-01 Steve Ellcey <sellcey@mips.com>
* intl/iconv/skeleton.c (ONE_DIRECTION): Remove define.
* iconv/gconv_simple.c (ONE_DIRECTION): Define.
* iconvdata/8bit-gap.c (ONE_DIRECTION): Ditto.
* iconvdata/8bit-generic.c (ONE_DIRECTION): Ditto.
Steve Ellcey [Thu, 1 May 2014 17:09:04 +0000 (10:09 -0700)]
2014-05-01 Steve Ellcey <sellcey@mips.com>
* stdlib/longlong.h: Updated from GCC.
Will Newton [Thu, 1 May 2014 15:26:35 +0000 (16:26 +0100)]
NEWS: Add 15119 to fixed bug list
Will Newton [Thu, 1 May 2014 13:25:44 +0000 (14:25 +0100)]
ARM: Remove lowlevellock.c
lowlevellock.c for arm differs from the generic lowlevellock.c only in
insignificant ways, so can be removed. Happily, this fixes BZ 15119
(unnecessary busy loop in __lll_timedlock_wait on arm).
The notable differences between the arm and generic implementations are:
1) arm __lll_timedlock_wait has a fast path out if futex has been set
to 0 between since the function was called. This seems unlikely to
happen very often, so it seems at worst harmless to lose this fast
path.
2) Some function in arm's lowlevellock.c set futex to 2 if it was 1.
The generic version always sets the futex to 2. As futex can only be
0, 1 or 2 on entry into these functions, the behaviour is equivalent.
(If the futex manages to be 0 on entry then we've just lost another
unlikely fast path out.)
There are no test suite regressions.
Note that hppa and sparc also have their own lowlevellock.c. I believe
hppa can also be removed, so I'll send a separate patch for that
shortly. sparc's seems to be genuinely needed as it uses a different
locking structure.
Also note that the analysis at
https://sourceware.org/ml/libc-ports/2013-02/msg00021.html indicates a
further locking performance bug to fix - I've got a partial patch for
that which I can submit once I've finished testing.
2014-05-01 Bernard Ogden <bernie.ogden@linaro.org>
[BZ #15119]
* sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c: Remove file.
David S. Miller [Wed, 30 Apr 2014 22:14:58 +0000 (15:14 -0700)]
Add round-mode context support to sparc.
* sysdeps/sparc/fpu/fenv_private.h (HAVE_RM_CTX): Define.
(libc_feholdexcept_setround_sparc_ctx): New function.
(libc_fesetenv_sparc_ctx): Likewise.
(libc_feupdateenv_sparc_ctx): Likewise.
(libc_feholdsetround_sparc_ctx): Likewise.
(libc_feholdexcept_setround_ctx): Define.
(libc_feholdexcept_setroundf_ctx): Likewise.
(libc_feholdexcept_setroundl_ctx): Likewise.
(libc_fesetenv_ctx): Likewise.
(libc_fesetenvf_ctx): Likewise.
(libc_fesetenvl_ctx): Likewise.
(libc_feupdateenv_ctx): Likewise.
(libc_feupdateenvf_ctx): Likewise.
(libc_feupdateenvl_ctx): Likewise.
(libc_feresetround_ctx): Likewise.
(libc_feresetroundf_ctx): Likewise.
(libc_feresetroundl_ctx): Likewise.
(libc_feholdsetround_ctx): Likewise.
(libc_feholdsetroundf_ctx): Likewise.
(libc_feholdsetroundl_ctx): Likewise.
David S. Miller [Wed, 30 Apr 2014 20:37:04 +0000 (13:37 -0700)]
Correct sparc CPP guards for EMT_TAGOVF.
* sysdeps/unix/sysv/linux/sparc/bits/siginfo.h (EMT_TAGOVF): Protect
with __USE_GNU instead of XOPEN cpp guards.
David S. Miller [Wed, 30 Apr 2014 18:39:47 +0000 (11:39 -0700)]
Fix some sparc -Wundef build warnings.
* sysdeps/sparc/bits/string.h (_STRING_ARCH_unaligned): Define to
0.
David S. Miller [Wed, 30 Apr 2014 18:37:41 +0000 (11:37 -0700)]
Fix some sparc conform test failures in siginfo.h
* sysdeps/unix/sysv/linux/sparc/bits/siginfo.h (EMT_TAGOVF): Protect
with XOPEN cpp guards.
Roland McGrath [Wed, 30 Apr 2014 17:40:29 +0000 (10:40 -0700)]
Move ports/ChangeLog* files to ChangeLog.old-ports*, remove ports/ directory.
Roland McGrath [Wed, 30 Apr 2014 17:39:28 +0000 (10:39 -0700)]
Add deprecation header text to remaining ports/ChangeLog* files.
Julian Brown [Wed, 30 Apr 2014 16:17:59 +0000 (16:17 +0000)]
ARM: Fix R_ARM_IRELATIVE RELA relocations.
This patch fixes what I believe to be a bug in the handling of
R_ARM_IRELATIVE RELA relocations. At present, these are handled the
same as REL relocations: i.e. the addend is loaded from the relocation
address. Most of the time this isn't a problem because RELA relocations
aren't used on ARM (GNU/Linux at least) anyway, but it causes problems
with prelink, which uses RELA on all targets for its conflict table.
(Support for ifunc prelinking requires a prelink patch, not yet posted.)
Anyway, this patch works, though I'm not 100% sure if it is correct: I
notice that this code path received attention last year:
https://sourceware.org/ml/libc-ports/2013-07/msg00000.html
I'm not sure under what circumstances that patch would have had an
effect, nor if my patch conflicts with that case.
No regressions using Mentor's usual glibc cross-testing infrastructure.
[BZ #16888]
* sysdeps/arm/dl-machine.h (elf_machine_rela): Fix R_ARM_IRELATIVE
handling.
Joseph Myers [Wed, 30 Apr 2014 15:39:30 +0000 (15:39 +0000)]
Increase minimum Linux kernel version to 2.6.32.
This patch increases the minimum Linux kernel version for glibc to
2.6.32, as discussed in the thread starting at
<https://sourceware.org/ml/libc-alpha/2014-01/msg00511.html>.
This patch just does the minimal change to arch_minimum_kernel
settings (and LIBC_LINUX_VERSION, which determines the minimum kernel
headers version, as it doesn't make sense for that to be older than
the minimum kernel that can be used at runtime). Followups would be
expected to do, roughly and not necessarily precisely in this order:
* Remove __LINUX_KERNEL_VERSION checks in kernel-features.h files
where those checks are always true / always false for kernels 2.6.32
and above.
* Otherwise simplify/improve conditionals in those files (for example,
where defining once in the main file then undefining in
architecture-specific files makes things clearer than having lots of
separate definitions of the same macro), possibly fixing in the
process cases where a macro should optimally have been defined for a
given architecture but wasn't. (In the review in preparation for
this version increase I checked what the right conditions should be
for all macros in the main kernel-features.h whose definitions there
would have been affected by the increase - but I only fixed that
subset of the issues found where --enable-kernel=2.6.32 would have
caused a kernel feature to be wrongly assumed to be present, not any
cases where a feature is not assumed but could be assumed.)
* Remove conditionals on __ASSUME_* where they can now be taken to be
always-true, and the definitions when the macros are only used in
Linux-specific files.
* Split more architectures out of the main kernel-features.h (like
ex-ports architectures), once various of the architecture
conditionals there have been eliminated so the new
architecture-specific files are no larger than actually necessary.
Tested x86_64.
2014-03-27 Joseph Myers <joseph@codesourcery.com>
[BZ #9894]
* sysdeps/unix/sysv/linux/configure.ac (LIBC_LINUX_VERSION):
Change to 2.6.32.
(arch_minimum_kernel): Change all 2.6.16 settings to 2.6.32.
* sysdeps/unix/sysv/linux/configure: Regenerated.
* sysdeps/unix/sysv/linux/microblaze/configure.ac: Remove file.
* sysdeps/unix/sysv/linux/microblaze/configure: Likewise.
* sysdeps/unix/sysv/linux/tile/configure.ac: Likewise.
* sysdeps/unix/sysv/linux/tile/configure: Likewise.
* README: Update reference to required Linux kernel version.
* manual/install.texi (Linux): Update reference to required Linux
kernel headers version.
* INSTALL: Regenerated.
Joseph Myers [Wed, 30 Apr 2014 15:35:18 +0000 (15:35 +0000)]
conformtest: clean up POSIX expectations for stdlib.h, string.h.
Continuing the series of patches to clean up conformtest expectations
for "POSIX" (1995/6) based on review of the expectations against the
standard, this patch cleans up expectations for stdlib.h and
string.h. Tested x86_64; no new XFAILs needed.
* conform/data/stdlib.h-data [POSIX] (stddef.h): Do not allow
header inclusion.
[POSIX] (limits.h): Likewise.
[POSIX] (math.h): Likewise.
[POSIX] (sys/wait.h): Likewise.
* conform/data/string.h-data [POSIX || UNIX98] (strtok_r): Require
function.
[POSIX] (stddef.h): Do not allow header inclusion.
Andreas Schwab [Wed, 30 Apr 2014 14:23:50 +0000 (16:23 +0200)]
ChangeLog cleanup
Adhemerval Zanella [Tue, 29 Apr 2014 19:15:45 +0000 (14:15 -0500)]
More fixes for unsafe compiler optimization
GCC 4.9 -ftree-loop-distribute-patterns now may transform loops in
memcpy. Add the alias to internal GLIBC symbol to avoid PLT creation.
Yang Yingliang [Wed, 30 Apr 2014 10:16:18 +0000 (15:46 +0530)]
Fix lll_unlock twice in pthread_cond_broadcast
lll_unlock() will be called again if it goes to "wake_all" in
pthread_cond_broadcast(). This may make another thread which is
waiting for lock in pthread_cond_timedwait() unlock. So there are
more than one threads get the lock, it will break the shared data.
It's introduced by commit
8313cb997d2d("FUTEX_*_REQUEUE_PI support for
non-x86 code")
Siddhesh Poyarekar [Wed, 30 Apr 2014 06:30:39 +0000 (12:00 +0530)]
Initialize all of datahead structure in nscd (BZ #16791)
The datahead structure has an unused padding field that remains
uninitialized. Valgrind prints out a warning for it on querying a
netgroups entry. This is harmless, but is a potential data leak since
it would result in writing out an uninitialized byte to the cache
file. Besides, this happens only when there is a cache miss, so we're
not adding computation to any fast path.
Siddhesh Poyarekar [Wed, 30 Apr 2014 06:27:09 +0000 (11:57 +0530)]
Consolidate code to initialize nscd dataset header
This patch consolidates the code to initialize the header of a dataset
into a single set of functions (one for positive and another for
negative datasets) primarily to reduce repetition of code. The
secondary reason is to simplify Patch 2/2 which fixes the problem of
an uninitialized byte in the header by initializing an unused field in
the structure and hence preventing a possible data leak into the cache
file.
Siddhesh Poyarekar [Wed, 30 Apr 2014 06:18:43 +0000 (11:48 +0530)]
Do not fail if one of the two responses to AF_UNSPEC fails (BZ #14308)
[Fixes BZ #14308, #12994, #13651]
AF_UNSPEC results in sending two queries in parallel, one for the A
record and the other for the AAAA record. If one of these is a
referral, then the query fails, which is wrong. It should return at
least the one successful response.
The fix has two parts. The first part makes the referral fall back to
the SERVFAIL path, which results in using the successful response.
There is a bug in that path however, due to which the second part is
necessary. The bug here is that if the first response is a failure
and the second succeeds, __libc_res_nsearch does not detect that and
assumes a failure. The case where the first response is a success and
the second fails, works correctly.
This condition is produced by buggy routers, so here's a crude
interposable library that can simulate such a condition. The library
overrides the recvfrom syscall and modifies the header of the packet
received to reproduce this scenario. It has two key variables:
mod_packet and first_error.
The mod_packet variable when set to 0, results in odd packets being
modified to be a referral. When set to 1, even packets are modified
to be a referral.
The first_error causes the first response to be a failure so that a
domain-appended search is performed to test the second part of the
__libc_nsearch fix.
The driver for this fix is a simple getaddrinfo program that does an
AF_UNSPEC query. I have omitted this since it should be easy to
implement.
I have tested this on x86_64.
The interceptor library source:
/* Override recvfrom and modify the header of the first DNS response to make it
a referral and reproduce bz #845218. We have to resort to this ugly hack
because we cannot make bind return the buggy response of a referral for the
AAAA record and an authoritative response for the A record. */
#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdbool.h>
#include <endian.h>
#include <dlfcn.h>
#include <stdlib.h>
/* Lifted from resolv/arpa/nameser_compat.h. */
typedef struct {
unsigned id :16; /*%< query identification number */
#if BYTE_ORDER == BIG_ENDIAN
/* fields in third byte */
unsigned qr: 1; /*%< response flag */
unsigned opcode: 4; /*%< purpose of message */
unsigned aa: 1; /*%< authoritive answer */
unsigned tc: 1; /*%< truncated message */
unsigned rd: 1; /*%< recursion desired */
/* fields
* in
* fourth
* byte
* */
unsigned ra: 1; /*%< recursion available */
unsigned unused :1; /*%< unused bits (MBZ as of 4.9.3a3) */
unsigned ad: 1; /*%< authentic data from named */
unsigned cd: 1; /*%< checking disabled by resolver */
unsigned rcode :4; /*%< response code */
#endif
#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
/* fields
* in
* third
* byte
* */
unsigned rd :1; /*%< recursion desired */
unsigned tc :1; /*%< truncated message */
unsigned aa :1; /*%< authoritive answer */
unsigned opcode :4; /*%< purpose of message */
unsigned qr :1; /*%< response flag */
/* fields
* in
* fourth
* byte
* */
unsigned rcode :4; /*%< response code */
unsigned cd: 1; /*%< checking disabled by resolver */
unsigned ad: 1; /*%< authentic data from named */
unsigned unused :1; /*%< unused bits (MBZ as of 4.9.3a3) */
unsigned ra :1; /*%< recursion available */
#endif
/* remaining
* bytes
* */
unsigned qdcount :16; /*%< number of question entries */
unsigned ancount :16; /*%< number of answer entries */
unsigned nscount :16; /*%< number of authority entries */
unsigned arcount :16; /*%< number of resource entries */
} HEADER;
static int done = 0;
/* Packets to modify. 0 for the odd packets and 1 for even packets. */
static const int mod_packet = 0;
/* Set to true if the first request should result in an error, resulting in a
search query. */
static bool first_error = true;
static ssize_t (*real_recvfrom) (int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
void
__attribute__ ((constructor))
init (void)
{
real_recvfrom = dlsym (RTLD_NEXT, "recvfrom");
if (real_recvfrom == NULL)
{
printf ("Failed to get reference to recvfrom: %s\n", dlerror ());
printf ("Cannot simulate test\n");
abort ();
}
}
/* Modify the second packet that we receive to set the header in a manner as to
reproduce BZ #845218. */
static void
mod_buf (HEADER *h, int port)
{
if (done % 2 == mod_packet || (first_error && done == 1))
{
printf ("(Modifying header)");
if (first_error && done == 1)
h->rcode = 3;
else
h->rcode = 0; /* NOERROR == 0. */
h->ancount = 0;
h->aa = 0;
h->ra = 0;
h->arcount = 0;
}
done++;
}
ssize_t
recvfrom (int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen)
{
ssize_t ret = real_recvfrom (sockfd, buf, len, flags, src_addr, addrlen);
int port = htons (((struct sockaddr_in *) src_addr)->sin_port);
struct in_addr addr = ((struct sockaddr_in *) src_addr)->sin_addr;
const char *host = inet_ntoa (addr);
printf ("\n*** From %s:%d: ", host, port);
mod_buf (buf, port);
printf ("returned %zd\n", ret);
return ret;
}
Carlos O'Donell [Tue, 29 Apr 2014 17:33:08 +0000 (13:33 -0400)]
Final update to ports ChangeLog.
Indicate the removal of the README and carry out the
final update to the ports/ChangeLog.
Carlos O'Donell [Tue, 29 Apr 2014 17:31:05 +0000 (13:31 -0400)]
Remove ports README and update machine ChangeLogs.
This patch removes the ports/README now that ports is no longer
being used. It also adds a header to all ChangeLogs for all machines
that were moved to the main libc tree. The header indicates that the
ChangeLog is no longer used.
Steve Ellcey [Tue, 29 Apr 2014 17:19:30 +0000 (10:19 -0700)]
2014-04-29 Steve Ellcey <sellcey@mips.com>
* iconf/skeleton.c (ONE_DIRECTION): Set default value if not set.
Stefan Liebler [Tue, 29 Apr 2014 13:45:11 +0000 (15:45 +0200)]
Mention BZ16823 in NEWS
Stefan Liebler [Tue, 29 Apr 2014 13:43:36 +0000 (15:43 +0200)]
[BZ #16823] Fix log1pl returning wrong infinity sign
Adhemerval Zanella [Tue, 29 Apr 2014 12:45:05 +0000 (07:45 -0500)]
Fix
Adhemerval Zanella [Mon, 28 Apr 2014 19:38:24 +0000 (14:38 -0500)]
PowerPC: Suppress unnecessary FPSCR write
This patch optimizes the FPSCR update on exception and rounding change
functions by just updating its value if new value if different from
current one. It also optimizes fedisableexcept and feenableexcept by
removing an unecessary FPSCR read.
Carlos O'Donell [Tue, 29 Apr 2014 07:08:48 +0000 (03:08 -0400)]
Relocate hppa from ports to libc.
Carlos O'Donell [Tue, 29 Apr 2014 06:48:16 +0000 (02:48 -0400)]
hppa: Update lowlevellock.h.
Cleanup and remove old lll_private_futex_wake macro and add
generic support for PI-aware futexes.
Carlos O'Donell [Tue, 29 Apr 2014 06:38:50 +0000 (02:38 -0400)]
hppa: Use lll_futex_wake.
The lll_private_futex_wake function no longer exists. Instead use
lll_futex_make with LLL_PRIVATE as the last argument.
Carlos O'Donell [Tue, 29 Apr 2014 06:35:06 +0000 (02:35 -0400)]
hppa: Use r25 as second input to __longjmp.
The generated assembly is simplified if we use r25,
the expected second argument to the function given the
calling convention.
Ondřej Bílka [Mon, 28 Apr 2014 16:50:22 +0000 (18:50 +0200)]
Fix types of stream hook functions in manual.
Ondřej Bílka [Mon, 28 Apr 2014 16:08:32 +0000 (18:08 +0200)]
Fix recvmmsg comment.
Wilco Dijkstra [Mon, 28 Apr 2014 09:53:04 +0000 (10:53 +0100)]
[ARM] Add support for fenv_private on ARM.
H.J. Lu [Fri, 25 Apr 2014 16:33:41 +0000 (09:33 -0700)]
Replace __int128 with __int128_t in bits/link.h
__int128 was added in GCC 4.6 and __int128_t was added before x86-64
was supported. This patch replaces __int128 with __int128_t so that
the installed bits/link.h can be used with older GCC.
* sysdeps/x86/bits/link.h (La_x86_64_regs): Replace __int128
with __int128_t.
(La_x86_64_retval): Likewise.
Ian Bolton [Thu, 24 Apr 2014 06:15:33 +0000 (07:15 +0100)]
[AArch64] Suppress unnecessary FPSR and FPCR writes.
Siddhesh Poyarekar [Wed, 23 Apr 2014 06:51:00 +0000 (12:21 +0530)]
Use test-skeleton.c in tst-sem3 and tst-sem4
David S. Miller [Wed, 23 Apr 2014 00:47:12 +0000 (17:47 -0700)]
Fix sigaction conform test failures on sparc.
* sysdeps/unix/sysv/linux/sparc/bits/sigaction.h
(struct sigaction): New struct member __glibc_reserved0, change
type of sa_flags to int.
Yufeng Zhang [Tue, 22 Apr 2014 16:26:59 +0000 (17:26 +0100)]
[AArch64] Use GCC builtins to count leading/tailing zeros.
Siddhesh Poyarekar [Tue, 22 Apr 2014 11:27:49 +0000 (16:57 +0530)]
Include atomic.h in sem_wait.c and sem_trywait.c
Venkataramanan Kumar [Tue, 8 Apr 2014 13:11:44 +0000 (14:11 +0100)]
aarch64: Add setjmp and longjmp SystemTap probes
Add setjmp, longjmp and longjmp_target SystemTap probes.
ChangeLog:
2014-04-22 Will Newton <will.newton@linaro.org>
Venkataramanan Kumar <venkataramanan.kumar@linaro.org>
* sysdeps/aarch64/__longjmp.S: Include stap-probe.h.
(__longjmp): Add longjmp and longjmp_target SystemTap
probes.
* sysdeps/aarch64/setjmp.S: Include stap-probe.h.
(__sigsetjmp): Add setjmp SystemTap probe.
Carlos O'Donell [Thu, 17 Apr 2014 23:41:09 +0000 (19:41 -0400)]
manual: Sort overview listing by manual order.
In the glibc manual we have a "Roadmap to the manual" section at
the end of the "Introduction" chapter.
The introductory text says "Here is an overview of the contents
of the remaining chapters of this manual.", but then proceeds to
list chapters out of order and some chapter are never referenced.
This commit reorders the overview to correctly match the manual
order.
See:
https://sourceware.org/ml/libc-alpha/2014-02/msg00823.html
Adhemerval Zanella [Sun, 13 Apr 2014 23:13:42 +0000 (18:13 -0500)]
PowerPC: Sync pthread_once with default implementation
This patch removes the arch specific powerpc implementation and instead
uses the linux default one. Although the current powerpc implementation
already constains the required memory barriers for correct
initialization, the default implementation shows a better performance on
newer chips.