about summary refs log tree commit diff
Commit message (Collapse)AuthorAgeFilesLines
* Mark fegetround pure (bug 16296).Joseph Myers2015-09-154-8/+12
| | | | | | | | | | | | Bug 16296 notes that fegetround is a pure function and should be marked as such in fenv.h. This patch implements that. Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by this patch). [BZ #16296] * math/fenv.h (fegetround): Use __attribute_pure__. * include/fenv.h (__fegetround): Likewise.
* Fix ctan, ctanh missing underflows (bug 18595).Joseph Myers2015-09-1510-214/+923
| | | | | | | | | | | | | | | | | | | | Similar to various other bugs in this area, ctan and ctanh can fail to raise the underflow exception for some cases of results that are tiny and inexact. This patch forces the exception in a similar way to previous fixes. Tested for x86_64 and x86. [BZ #18595] * math/s_ctan.c (__ctan): Force underflow exception for results whose real or imaginary part has small absolute value. * math/s_ctanf.c (__ctanf): Likewise. * math/s_ctanh.c (__ctanh): Likewise. * math/s_ctanhf.c (__ctanhf): Likewise. * math/s_ctanhl.c (__ctanhl): Likewise. * math/s_ctanl.c (__ctanl): Likewise. * math/auto-libm-test-in: Do not allow missing underflow for ctan and ctanh. Add more tests of ctan and ctanh.
* Simplify hypotf infinity handling (bug 15918).Joseph Myers2015-09-153-16/+12
| | | | | | | | | | | | | | Bug 15918 points out that the handling of infinities in hypotf can be simplified: it's enough to return the absolute value of the infinite argument without first comparing it to the other argument and possibly returning that other argument's absolute value. This patch makes that cleanup (which should not change how hypotf behaves on any input). Tested for x86_64. [BZ #15918] * sysdeps/ieee754/flt-32/e_hypotf.c (__ieee754_hypotf): Simplify handling of cases where one argument is an infinity.
* Fix i386 exp10 missing underflows (bug 18966).Joseph Myers2015-09-156-3/+249
| | | | | | | | | | | | | | | | | | | | | | | | | | | On i386, the double version of exp10 can miss underflow exceptions if the result is in the subnormal range for double but the last 11 bits of the 64-bit extended-precision mantissa happen to be zero. This patch forces the exception in a similar way to previous fixes. As with the exp2 and exp fixes, the exp10f changes may in fact not be needed to ensure underflow exceptions, but are included for consistency and to fix the exp10 part of bug 18875 by ensuring that excess range and precision is removed from underflowing return values. Tested for x86_64 and x86. [BZ #18875] [BZ #18966] * sysdeps/i386/fpu/e_exp10.S (dbl_min): New object. (MO): New macro. (__ieee754_exp10): For small results, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_exp10f.S (flt_min): New object. (MO): New macro. (__ieee754_exp10f): For small results, force underflow exception and remove excess range and precision from return value. * math/auto-libm-test-in: Add more tests of exp10. * math/auto-libm-test-out: Regenerated.
* Fix typoSamuel Thibault2015-09-151-1/+1
| | | | | * sysdeps/mach/hurd/Makefile ($(patsubst %,$(hurd-objpfx)hurd/%.%,auth io fs process)): Fix bogus %.% pattern into %.h.
* Fix i386 exp missing underflows (bug 18961).Joseph Myers2015-09-146-5/+712
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | On i386, the double version of exp can miss underflow exceptions if the result is in the subnormal range for double but the last 11 bits of the 64-bit extended-precision mantissa happen to be zero. This patch forces the exception in a similar way to previous fixes. As with the exp2 fixes, the expf changes may in fact not be needed to ensure underflow exceptions, but are included for consistency and to fix the exp part of bug 18875 by ensuring that excess range and precision is removed from underflowing return values. Tested for x86_64 and x86. [BZ #18875] [BZ #18961] * sysdeps/i386/fpu/e_exp.S (dbl_min): New object. (MO): New macro. (__ieee754_exp): For small results, force underflow exception and remove excess range and precision from return value. (__exp_finite): Likewise. * sysdeps/i386/fpu/e_expf.S (flt_min): New object. (MO): New macro. (__ieee754_expf): For small results, force underflow exception and remove excess range and precision from return value. (__expf_finite): Likewise. * math/auto-libm-test-in: Add more tests of exp. * math/auto-libm-test-out: Regenerated.
* Fix exp2 missing underflows (bug 16521).Joseph Myers2015-09-1411-12/+773
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Various exp2 implementations in glibc can miss underflow exceptions when the scaling down part of the calculation is exact (or, in the x86 case, when the conversion from extended precision to the target precision is exact). This patch forces the exception in a similar way to previous fixes. The x86 exp2f changes may in fact not be needed for this purpose - it's likely to be the case that no argument of type float has an exp2 result so close to an exact subnormal float value that it equals that value when rounded to 64 bits (even taking account of variation between different x86 implementations). However, they are included for consistency with the changes to exp2 and so as to fix the exp2f part of bug 18875 by ensuring that excess range and precision is removed from underflowing return values. Tested for x86_64, x86 and mips64. [BZ #16521] [BZ #18875] * math/e_exp2l.c (__ieee754_exp2l): Force underflow exception for small results. * sysdeps/i386/fpu/e_exp2.S (dbl_min): New object. (MO): New macro. (__ieee754_exp2): For small results, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_exp2f.S (flt_min): New object. (MO): New macro. (__ieee754_exp2f): For small results, force underflow exception and remove excess range and precision from return value. * sysdeps/i386/fpu/e_exp2l.S (ldbl_min): New object. (MO): New macro. (__ieee754_exp2l): Force underflow exception for small results. * sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Likewise. * sysdeps/ieee754/flt-32/e_exp2f.c (__ieee754_exp2f): Likewise. * sysdeps/x86_64/fpu/e_exp2l.S (ldbl_min): New object. (MO): New macro. (__ieee754_exp2l): Force underflow exception for small results. * math/auto-libm-test-in: Add more tests or exp2. * math/auto-libm-test-out: Regenerated.
* Use ALIGN_DOWN in systrim.Carlos O'Donell2015-09-142-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | While doing code review I converted another bespoke round down, and corrected a comment. The comment spoke about keeping at least one page allocated even during systrim, which is not correct. The code does nothing to keep a page allocated. The code does attempt to keep PAD padding as documented in comments and MINSIZE as required by design. Historically in 2002 when Ulrich wrote the code (fa8d436c) the math was inlined into one statement which did reserve an extra page: extra = ((top_size - pad - MINSIZE + (pagesz-1)) / pagesz - 1) * pagesz; There is no reason given for this extra page. In 2010 Anton Branchard's change (b9b42ee0) from division to shifts removed the extra page by dropping the "+ (pagesiz-1), which mean we might have attempted to return -0 via MORECORE. The fix by Will Newton in 2014 added a check for extra being zero (51a7380b). From first principles I see no reason why we should keep an extra page of memory from being trimmed back to the OS. The only sensible interface is to honour PAD padding as the function is documented, with the caveat the MINSIZE is maintained for the top chunk. Given that we've been using this code for 5+ years with no extra page allocated is sufficient evidence that the comment should be changed to match the code that I'm touching. Tested on x86_64 and i686, no regressions.
* Prevent check-local-headers.sh hang.Carlos O'Donell2015-09-142-1/+6
| | | | | | | | | | | | Consensus in [1] was that the right way to fix this was simply to redirect from /dev/null to terminate the test if no inputs was found by the tests own globbing e.g. "*/*.{o,os,oS}.d" This can happen when the build is incomplete and the tests are started. This failure causes check-local-headers.sh to hang forever waiting for input from stdin. This change makes the test terminate immediately if the glob doesn't return any files. [1] https://sourceware.org/ml/libc-alpha/2014-12/msg00337.html
* Fix typoSamuel Thibault2015-09-132-1/+6
| | | | | * sysdeps/mach/hurd/Makefile ($(patsubst %,$(hurd-objpfx)hurd/%.%,auth io fs process)): Drop spurious backslash.
* linux/getsysstats.c: use sysinfo() instead of parsing /proc/meminfoRasmus Villemoes2015-09-124-59/+64
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Profiling git's test suite, Linus noted [1] that a disproportionately large amount of time was spent reading /proc/meminfo. This is done by the glibc functions get_phys_pages and get_avphys_pages, but they only need the MemTotal and MemFree fields, respectively. That same information can be obtained with a single syscall, sysinfo, instead of six: open, fstat, mmap, read, close, munmap. While sysinfo also provides more than necessary, it does a lot less work than what the kernel needs to do to provide the entire /proc/meminfo. Both strace -T and in-app microbenchmarks shows that the sysinfo() approach is roughly an order of magnitude faster. sysinfo() is much older than what glibc currently requires, so I don't think there's any reason to keep the old parsing code. Moreover, this makes get_[av]phys_pages work even in the absence of /proc. Linus noted that something as simple as 'bash -c "echo"' would trigger the reading of /proc/meminfo, but gdb says that many more applications than just bash are affected: Starting program: /bin/bash "-c" "echo" Breakpoint 1, __get_phys_pages () at ../sysdeps/unix/sysv/linux/getsysstats.c:283 283 ../sysdeps/unix/sysv/linux/getsysstats.c: No such file or directory. (gdb) bt So it seems that any application that uses qsort on a moderately sized array will incur this cost (once), which is obviously proportionately more expensive for lots of short-lived processes (such as the git test suite). [1] http://thread.gmane.org/gmane.linux.kernel/2019285 Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk> * sysdeps/unix/sysv/linux/getsysstats.c (__get_phys_pages): Use sysinfo system call instead of parsing /proc/meminfo. * sysdeps/unix/sysv/linux/getsysstats.c (__get_avphys_pages): Likewise.
* localedef: improve error message [BZ #16985]Mike Frysinger2015-09-113-5/+11
| | | | | | | | If you pass in a path that fails to be opened, then output_path is set to NULL, and an error is flagged. Then at the end, we use both of those: cannot write output files to `(null)': No such file or directory Tweak the message to use the user's input when output_path is NULL.
* Add more random libm test inputs (mainly for ldbl-128).Joseph Myers2015-09-127-106/+3586
| | | | | | | | | | | | | | | | | | | | | This patch adds more libm test inputs found through random test generation to increase previously known ulps. This particular test generation was run for mips64, so most of the increased ulps are for ldbl-128 (float and double having been fairly well covered by such testing for x86_64), but there's the odd ulps increase for other formats. Tested for x86_64, x86 and mips64. * math/auto-libm-test-in: Add more tests of acos, acosh, asin, asinh, atan, atan2, atanh, cabs, carg, cos, csqrt, erfc, exp, exp10, exp2, log, log1p, log2, pow, sin, sincos, sinh, tan and tanh. * math/auto-libm-test-out: Regenerated. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
* NaCl: Do not install <sys/mtio.h>.Roland McGrath2015-09-112-0/+15
|
* Move bits/atomic.h to atomic-machine.h (bug 14912).Joseph Myers2015-09-1129-44/+119
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It was noted in <https://sourceware.org/ml/libc-alpha/2012-09/msg00305.html> that the bits/*.h naming scheme should only be used for installed headers. This patch renames bits/atomic.h to atomic-machine.h to follow that convention. This is the only change in this series that needs to change the filename rather than simply removing a directory level (because both atomic.h and bits/atomic.h exist at present). Tested for x86_64 (testsuite, and that installed stripped shared libraries are unchanged by the patch). [BZ #14912] * sysdeps/aarch64/bits/atomic.h: Move to ... * sysdeps/aarch64/atomic-machine.h: ...here. (_AARCH64_BITS_ATOMIC_H): Rename macro to _AARCH64_ATOMIC_MACHINE_H. * sysdeps/alpha/bits/atomic.h: Move to ... * sysdeps/alpha/atomic-machine.h: ...here. * sysdeps/arm/bits/atomic.h: Move to ... * sysdeps/arm/atomic-machine.h: ...here. Update comments. * bits/atomic.h: Move to ... * sysdeps/generic/atomic-machine.h: ...here. (_BITS_ATOMIC_H): Rename macro to _ATOMIC_MACHINE_H. * sysdeps/i386/bits/atomic.h: Move to ... * sysdeps/i386/atomic-machine.h: ...here. * sysdeps/ia64/bits/atomic.h: Move to ... * sysdeps/ia64/atomic-machine.h: ...here. * sysdeps/m68k/coldfire/bits/atomic.h: Move to ... * sysdeps/m68k/coldfire/atomic-machine.h: ...here. (_BITS_ATOMIC_H): Rename macro to _ATOMIC_MACHINE_H. * sysdeps/m68k/m680x0/m68020/bits/atomic.h: Move to ... * sysdeps/m68k/m680x0/m68020/atomic-machine.h: ...here. * sysdeps/microblaze/bits/atomic.h: Move to ... * sysdeps/microblaze/atomic-machine.h: ...here. * sysdeps/mips/bits/atomic.h: Move to ... * sysdeps/mips/atomic-machine.h: ...here. (_MIPS_BITS_ATOMIC_H): Rename macro to _MIPS_ATOMIC_MACHINE_H. * sysdeps/powerpc/bits/atomic.h: Move to ... * sysdeps/powerpc/atomic-machine.h: ...here. Update comments. * sysdeps/powerpc/powerpc32/bits/atomic.h: Move to ... * sysdeps/powerpc/powerpc32/atomic-machine.h: ...here. Update comments. Include <atomic-machine.h> instead of <bits/atomic.h>. * sysdeps/powerpc/powerpc64/bits/atomic.h: Move to ... * sysdeps/powerpc/powerpc64/atomic-machine.h: ...here. Include <atomic-machine.h> instead of <bits/atomic.h>. * sysdeps/s390/bits/atomic.h: Move to ... * sysdeps/s390/atomic-machine.h: ...here. * sysdeps/sparc/sparc32/bits/atomic.h: Move to ... * sysdeps/sparc/sparc32/atomic-machine.h: ...here. (_BITS_ATOMIC_H): Rename macro to _ATOMIC_MACHINE_H. * sysdeps/sparc/sparc32/sparcv9/bits/atomic.h: Move to ... * sysdeps/sparc/sparc32/sparcv9/atomic-machine.h: ...here. * sysdeps/sparc/sparc64/bits/atomic.h: Move to ... * sysdeps/sparc/sparc64/atomic-machine.h: ...here. * sysdeps/tile/bits/atomic.h: Move to ... * sysdeps/tile/atomic-machine.h: ...here. * sysdeps/tile/tilegx/bits/atomic.h: Move to ... * sysdeps/tile/tilegx/atomic-machine.h: ...here. Include <sysdeps/tile/atomic-machine.h> instead of <sysdeps/tile/bits/atomic.h>. (_BITS_ATOMIC_H): Rename macro to _ATOMIC_MACHINE_H. * sysdeps/tile/tilepro/bits/atomic.h: Move to ... * sysdeps/tile/tilepro/atomic-machine.h: ...here. Include <sysdeps/tile/atomic-machine.h> instead of <sysdeps/tile/bits/atomic.h>. (_BITS_ATOMIC_H): Rename macro to _ATOMIC_MACHINE_H. * sysdeps/unix/sysv/linux/arm/bits/atomic.h: Move to ... * sysdeps/unix/sysv/linux/arm/atomic-machine.h: ...here. Include <sysdeps/arm/atomic-machine.h> instead of <sysdeps/arm/bits/atomic.h>. * sysdeps/unix/sysv/linux/hppa/bits/atomic.h: Move to ... * sysdeps/unix/sysv/linux/hppa/atomic-machine.h: ...here. (_BITS_ATOMIC_H): Rename macro to _ATOMIC_MACHINE_H. * sysdeps/unix/sysv/linux/m68k/coldfire/bits/atomic.h: Move to ... * sysdeps/unix/sysv/linux/m68k/coldfire/atomic-machine.h: ...here. (_BITS_ATOMIC_H): Rename macro to _ATOMIC_MACHINE_H. * sysdeps/unix/sysv/linux/nios2/bits/atomic.h: Move to ... * sysdeps/unix/sysv/linux/nios2/atomic-machine.h: ...here. (_NIOS2_BITS_ATOMIC_H): Rename macro to _NIOS2_ATOMIC_MACHINE_H. * sysdeps/unix/sysv/linux/sh/bits/atomic.h: Move to ... * sysdeps/unix/sysv/linux/sh/atomic-machine.h: ...here. * sysdeps/x86_64/bits/atomic.h: Move to ... * sysdeps/x86_64/atomic-machine.h: ...here. * include/atomic.h: Include <atomic-machine.h> instead of <bits/atomic.h>.
* Update libm-test-ulps for MIPS.Joseph Myers2015-09-113-182/+185
| | | | | * sysdeps/mips/mips32/libm-test-ulps: Update. * sysdeps/mips/mips64/libm-test-ulps: Likewise.
* Fix ldbl-128/ldbl-128ibm lgamma spurious "invalid", incorrect signgam (bug ↵Joseph Myers2015-09-115-3/+55
| | | | | | | | | | | | | | | | | | | | 18952). The ldbl-128 / ldbl-128ibm implementation of lgammal converts (the floor of minus) non-integer negative arguments to int to determine the value of signgam. When those values are outside the range of int, this produces spurious "invalid" exceptions and incorrect values of signgam. This patch fixes this by instead determining signgam through comparing half the integer in question to floor of half the integer. Tested for mips64, x86_64 and x86. [BZ #18952] * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (__ieee754_lgammal_r): Do not convert non-integer negative arguments to int to determine the value of signgam. * math/auto-libm-test-in: Add more tests of lgamma. * math/auto-libm-test-out: Regenerated.
* Add more randomly-generated libm tests.Joseph Myers2015-09-115-39/+631
| | | | | | | | | | | | | This patch adds more libm test inputs found through random test generation to increase observed ulps on x86_64. Tested for x86_64 and x86. * math/auto-libm-test-in: Add more tests of acosh, atanh, cbrt, cosh, csqrt, erfc, expm1 and lgamma. * math/auto-libm-test-out: Regenerated. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
* Fix lgamma (negative) inaccuracy (bug 2542, bug 2543, bug 2558).Joseph Myers2015-09-1023-128/+24427
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The existing implementations of lgamma functions (except for the ia64 versions) use the reflection formula for negative arguments. This suffers large inaccuracy from cancellation near zeros of lgamma (near where the gamma function is +/- 1). This patch fixes this inaccuracy. For arguments above -2, there are no zeros and no large cancellation, while for sufficiently large negative arguments the zeros are so close to integers that even for integers +/- 1ulp the log(gamma(1-x)) term dominates and cancellation is not significant. Thus, it is only necessary to take special care about cancellation for arguments around a limited number of zeros. Accordingly, this patch uses precomputed tables of relevant zeros, expressed as the sum of two floating-point values. The log of the ratio of two sines can be computed accurately using log1p in cases where log would lose accuracy. The log of the ratio of two gamma(1-x) values can be computed using Stirling's approximation (the difference between two values of that approximation to lgamma being computable without computing the two values and then subtracting), with appropriate adjustments (which don't reduce accuracy too much) in cases where 1-x is too small to use Stirling's approximation directly. In the interval from -3 to -2, using the ratios of sines and of gamma(1-x) can still produce too much cancellation between those two parts of the computation (and that interval is also the worst interval for computing the ratio between gamma(1-x) values, which computation becomes more accurate, while being less critical for the final result, for larger 1-x). Because this can result in errors slightly above those accepted in glibc, this interval is instead dealt with by polynomial approximations. Separate polynomial approximations to (|gamma(x)|-1)(x-n)/(x-x0) are used for each interval of length 1/8 from -3 to -2, where n (-3 or -2) is the nearest integer to the 1/8-interval and x0 is the zero of lgamma in the relevant half-integer interval (-3 to -2.5 or -2.5 to -2). Together, the two approaches are intended to give sufficient accuracy for all negative arguments in the problem range. Outside that range, the previous implementation continues to be used. Tested for x86_64, x86, mips64 and powerpc. The mips64 and powerpc testing shows up pre-existing problems for ldbl-128 and ldbl-128ibm with large negative arguments giving spurious "invalid" exceptions (exposed by newly added tests for cases this patch doesn't affect the logic for); I'll address those problems separately. [BZ #2542] [BZ #2543] [BZ #2558] * sysdeps/ieee754/dbl-64/e_lgamma_r.c (__ieee754_lgamma_r): Call __lgamma_neg for arguments from -28.0 to -2.0. * sysdeps/ieee754/flt-32/e_lgammaf_r.c (__ieee754_lgammaf_r): Call __lgamma_negf for arguments from -15.0 to -2.0. * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (__ieee754_lgammal_r): Call __lgamma_negl for arguments from -48.0 or -50.0 to -2.0. * sysdeps/ieee754/ldbl-96/e_lgammal_r.c (__ieee754_lgammal_r): Call __lgamma_negl for arguments from -33.0 to -2.0. * sysdeps/ieee754/dbl-64/lgamma_neg.c: New file. * sysdeps/ieee754/dbl-64/lgamma_product.c: Likewise. * sysdeps/ieee754/flt-32/lgamma_negf.c: Likewise. * sysdeps/ieee754/flt-32/lgamma_productf.c: Likewise. * sysdeps/ieee754/ldbl-128/lgamma_negl.c: Likewise. * sysdeps/ieee754/ldbl-128/lgamma_productl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/lgamma_negl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/lgamma_productl.c: Likewise. * sysdeps/ieee754/ldbl-96/lgamma_negl.c: Likewise. * sysdeps/ieee754/ldbl-96/lgamma_product.c: Likewise. * sysdeps/ieee754/ldbl-96/lgamma_productl.c: Likewise. * sysdeps/generic/math_private.h (__lgamma_negf): New prototype. (__lgamma_neg): Likewise. (__lgamma_negl): Likewise. (__lgamma_product): Likewise. (__lgamma_productl): Likewise. * math/Makefile (libm-calls): Add lgamma_neg and lgamma_product. * math/auto-libm-test-in: Add more tests of lgamma. * math/auto-libm-test-out: Regenerated. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
* To fix BZ #18675, use __fstatvfs64 in __fpathconf.Paul Pluzhnikov2015-09-093-14/+11
|
* Move bits/libc-lock.h and bits/libc-lockP.h out of bits/ (bug 14912).Joseph Myers2015-09-08148-160/+324
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It was noted in <https://sourceware.org/ml/libc-alpha/2012-09/msg00305.html> that the bits/*.h naming scheme should only be used for installed headers. This patch renames bits/libc-lock.h to plain libc-lock.h and bits/libc-lockP.h to plain libc-lockP.h to follow that convention. Note that I don't know where libc-lockP.h comes from for Hurd (the Hurd libc-lock.h includes libc-lockP.h, but the only libc-lockP.h in the glibc source tree is for NPTL) - some unmerged patch? - but I updated the #include in the Hurd libc-lock.h anyway. Tested for x86_64 (testsuite, and that installed stripped shared libraries are unchanged by the patch). [BZ #14912] * bits/libc-lock.h: Move to ... * sysdeps/generic/libc-lock.h: ...here. (_BITS_LIBC_LOCK_H): Rename macro to _LIBC_LOCK_H. * sysdeps/mach/hurd/bits/libc-lock.h: Move to ... * sysdeps/mach/hurd/libc-lock.h: ...here. (_BITS_LIBC_LOCK_H): Rename macro to _LIBC_LOCK_H. [_LIBC]: Include <libc-lockP.h> instead of <bits/libc-lockP.h>. * sysdeps/mach/bits/libc-lock.h: Move to ... * sysdeps/mach/libc-lock.h: ...here. (_BITS_LIBC_LOCK_H): Rename macro to _LIBC_LOCK_H. * sysdeps/nptl/bits/libc-lock.h: Move to ... * sysdeps/nptl/libc-lock.h: ...here. (_BITS_LIBC_LOCK_H): Rename macro to _LIBC_LOCK_H. * sysdeps/nptl/bits/libc-lockP.h: Move to ... * sysdeps/nptl/libc-lockP.h: ...here. (_BITS_LIBC_LOCKP_H): Rename macro to _LIBC_LOCKP_H. * crypt/crypt_util.c: Include <libc-lock.h> instead of <bits/libc-lock.h>. * dirent/scandir-tail.c: Likewise. * dlfcn/dlerror.c: Likewise. * elf/dl-close.c: Likewise. * elf/dl-iteratephdr.c: Likewise. * elf/dl-lookup.c: Likewise. * elf/dl-open.c: Likewise. * elf/dl-support.c: Likewise. * elf/dl-writev.h: Likewise. * elf/rtld.c: Likewise. * grp/fgetgrent.c: Likewise. * gshadow/fgetsgent.c: Likewise. * gshadow/sgetsgent.c: Likewise. * iconv/gconv_conf.c: Likewise. * iconv/gconv_db.c: Likewise. * iconv/gconv_dl.c: Likewise. * iconv/gconv_int.h: Likewise. * iconv/gconv_trans.c: Likewise. * include/link.h: Likewise. * inet/getnameinfo.c: Likewise. * inet/getnetgrent.c: Likewise. * inet/getnetgrent_r.c: Likewise. * intl/bindtextdom.c: Likewise. * intl/dcigettext.c: Likewise. * intl/finddomain.c: Likewise. * intl/gettextP.h: Likewise. * intl/loadmsgcat.c: Likewise. * intl/localealias.c: Likewise. * intl/textdomain.c: Likewise. * libidn/idn-stub.c: Likewise. * libio/libioP.h: Likewise. * locale/duplocale.c: Likewise. * locale/freelocale.c: Likewise. * locale/newlocale.c: Likewise. * locale/setlocale.c: Likewise. * login/getutent_r.c: Likewise. * login/getutid_r.c: Likewise. * login/getutline_r.c: Likewise. * login/utmp-private.h: Likewise. * login/utmpname.c: Likewise. * malloc/mtrace.c: Likewise. * misc/efgcvt.c: Likewise. * misc/error.c: Likewise. * misc/fstab.c: Likewise. * misc/getpass.c: Likewise. * misc/mntent.c: Likewise. * misc/syslog.c: Likewise. * nis/nis_call.c: Likewise. * nis/nis_callback.c: Likewise. * nis/nss-default.c: Likewise. * nis/nss_compat/compat-grp.c: Likewise. * nis/nss_compat/compat-initgroups.c: Likewise. * nis/nss_compat/compat-pwd.c: Likewise. * nis/nss_compat/compat-spwd.c: Likewise. * nis/nss_nis/nis-alias.c: Likewise. * nis/nss_nis/nis-ethers.c: Likewise. * nis/nss_nis/nis-grp.c: Likewise. * nis/nss_nis/nis-hosts.c: Likewise. * nis/nss_nis/nis-network.c: Likewise. * nis/nss_nis/nis-proto.c: Likewise. * nis/nss_nis/nis-pwd.c: Likewise. * nis/nss_nis/nis-rpc.c: Likewise. * nis/nss_nis/nis-service.c: Likewise. * nis/nss_nis/nis-spwd.c: Likewise. * nis/nss_nisplus/nisplus-alias.c: Likewise. * nis/nss_nisplus/nisplus-ethers.c: Likewise. * nis/nss_nisplus/nisplus-grp.c: Likewise. * nis/nss_nisplus/nisplus-hosts.c: Likewise. * nis/nss_nisplus/nisplus-initgroups.c: Likewise. * nis/nss_nisplus/nisplus-network.c: Likewise. * nis/nss_nisplus/nisplus-proto.c: Likewise. * nis/nss_nisplus/nisplus-pwd.c: Likewise. * nis/nss_nisplus/nisplus-rpc.c: Likewise. * nis/nss_nisplus/nisplus-service.c: Likewise. * nis/nss_nisplus/nisplus-spwd.c: Likewise. * nis/ypclnt.c: Likewise. * nptl/libc_pthread_init.c: Likewise. * nss/getXXbyYY.c: Likewise. * nss/getXXent.c: Likewise. * nss/getXXent_r.c: Likewise. * nss/nss_db/db-XXX.c: Likewise. * nss/nss_db/db-netgrp.c: Likewise. * nss/nss_db/nss_db.h: Likewise. * nss/nss_files/files-XXX.c: Likewise. * nss/nss_files/files-alias.c: Likewise. * nss/nsswitch.c: Likewise. * posix/regex_internal.h: Likewise. * posix/wordexp.c: Likewise. * pwd/fgetpwent.c: Likewise. * resolv/res_hconf.c: Likewise. * resolv/res_libc.c: Likewise. * shadow/fgetspent.c: Likewise. * shadow/lckpwdf.c: Likewise. * shadow/sgetspent.c: Likewise. * socket/opensock.c: Likewise. * stdio-common/reg-modifier.c: Likewise. * stdio-common/reg-printf.c: Likewise. * stdio-common/reg-type.c: Likewise. * stdio-common/vfprintf.c: Likewise. * stdio-common/vfscanf.c: Likewise. * stdlib/abort.c: Likewise. * stdlib/cxa_atexit.c: Likewise. * stdlib/fmtmsg.c: Likewise. * stdlib/random.c: Likewise. * stdlib/setenv.c: Likewise. * string/strsignal.c: Likewise. * sunrpc/auth_none.c: Likewise. * sunrpc/bindrsvprt.c: Likewise. * sunrpc/create_xid.c: Likewise. * sunrpc/key_call.c: Likewise. * sunrpc/rpc_thread.c: Likewise. * sysdeps/arm/backtrace.c: Likewise. * sysdeps/generic/ldsodefs.h: Likewise. * sysdeps/generic/stdio-lock.h: Likewise. * sysdeps/generic/unwind-dw2-fde.c: Likewise. * sysdeps/i386/backtrace.c: Likewise. * sysdeps/ieee754/ldbl-opt/nldbl-compat.c: Likewise. * sysdeps/m68k/backtrace.c: Likewise. * sysdeps/mach/hurd/cthreads.c: Likewise. * sysdeps/mach/hurd/dirstream.h: Likewise. * sysdeps/mach/hurd/malloc-machine.h: Likewise. * sysdeps/nptl/malloc-machine.h: Likewise. * sysdeps/nptl/stdio-lock.h: Likewise. * sysdeps/posix/dirstream.h: Likewise. * sysdeps/posix/getaddrinfo.c: Likewise. * sysdeps/posix/system.c: Likewise. * sysdeps/pthread/aio_suspend.c: Likewise. * sysdeps/s390/s390-32/backtrace.c: Likewise. * sysdeps/s390/s390-64/backtrace.c: Likewise. * sysdeps/unix/sysv/linux/check_pf.c: Likewise. * sysdeps/unix/sysv/linux/if_index.c: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/getutent_r.c: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/getutid_r.c: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/getutline_r.c: Likewise. * sysdeps/unix/sysv/linux/shm-directory.c: Likewise. * sysdeps/unix/sysv/linux/system.c: Likewise. * sysdeps/x86_64/backtrace.c: Likewise. * time/alt_digit.c: Likewise. * time/era.c: Likewise. * time/tzset.c: Likewise. * wcsmbs/wcsmbsload.c: Likewise. * nptl/tst-initializers1.c (do_test): Refer to <libc-lock.h> instead of <bits/libc-lock.h> in comment.
* BZ#18921: Mark fixed in NEWS.Roland McGrath2015-09-081-2/+2
|
* MIPS: Only use .set mips* assembler directives when necessaryAndrew Bennett2015-09-086-23/+54
| | | | | | | | | | | | | | | | | | | | | | There are a few .set mips* assembler directives used in the MIPS specific sysdep code that force an instruction to be assembled for a specific ISA. The reason for these is to allow an instruction to be encoded when it might not be supported in the current ISA (when the code is run the Linux kernel will trap and emulate any unsupported instructions). Unfortunately forcing a specific ISA means that when assembling for a newer ISA, where the instruction has a different encoding, the wrong encoding will be used. * sysdeps/mips/bits/atomic.h [_MIPS_SIM == _ABIO32] (MIPS_PUSH_MIPS2): Only use .set mips2 if the current ISA is below mips2. * sysdeps/mips/sys/tas.h [_MIPS_SIM == _ABIO32] (_test_and_set): Likewise. * sysdeps/mips/nptl/tls.h (READ_THREAD_POINTER): Only use .set mips32r2 if the current ISA is below mips32r2. * sysdeps/mips/tls-macros.h (TLS_RDHWR): New define. (TLS_IE): Updated to use the TLD_RDHWR macro. (TLS_LE): Likewise. * sysdeps/unix/mips/sysdep.h (__mips_isa_rev): Moved out of #ifdef __ASSEMBLER__ condition.
* Fix parallel build of before-compile targets.Samuel Thibault2015-09-083-3/+16
| | | | | | | | * sysdeps/mach/Makefile ($(patsubst mach%,m\%h%,$(mach-before-compile))): Move rule to dedicated mach-before-compile target. * sysdeps/mach/hurd/Makefile ($(patsubst %,$(hurd-objpfx)hurd/%.%,auth io fs process)): Move rule to dedicated hurd-before-compile target.
* Fix rules generating headers in hurd/ and mach/Samuel Thibault2015-09-063-4/+17
| | | | | | | | | | | | when initial make call has subdir= explicitly set. * sysdeps/mach/Makefile ($(patsubst mach%,m\%h%,$(mach-before-compile))): Force subdir to mach when calling $(MAKE). * sysdeps/mach/hurd/Makefile ($(patsubst %,$(hurd-objpfx)hurd/%.%,auth io fs process)): Force subdir to hurd when calling $(MAKE). ($(common-objpfx)hurd/../mach/RPC_task_get_sampled_pcs.c): Force subdir to mach when calling $(MAKE).
* Check sysheaders when looking for Mach and Hurd headersManolis Ragkousis2015-09-065-0/+45
| | | | | | | * sysdeps/mach/configure.ac: Add sysheaders check. * sysdeps/mach/configure: Regenerate. * sysdeps/mach/hurd/configure.ac: Add sysheaders check. * sysdeps/mach/hurd/configure: Regenerate.
* BZ#18921: Fix opendir inverted o_directory_works test.Roland McGrath2015-09-042-1/+9
|
* Rename bits/linkmap.h to linkmap.h (bug 14912).Joseph Myers2015-09-0411-1/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It was noted in <https://sourceware.org/ml/libc-alpha/2012-09/msg00305.html> that the bits/*.h naming scheme should only be used for installed headers. This patch renames bits/linkmap.h to plain linkmap.h to follow that convention. Tested for x86_64 (testsuite, and that installed stripped shared libraries are unchanged by the patch). [BZ #14912] * bits/linkmap.h: Move to ... * sysdeps/generic/linkmap.h: ...here. * sysdeps/aarch64/bits/linkmap.h: Move to ... * sysdeps/aarch64/linkmap.h: ...here. * sysdeps/arm/bits/linkmap.h: Move to ... * sysdeps/arm/linkmap.h: ...here. * sysdeps/hppa/bits/linkmap.h: Move to ... * sysdeps/hppa/linkmap.h: ...here. * sysdeps/ia64/bits/linkmap.h: Move to ... * sysdeps/ia64/linkmap.h: ...here. * sysdeps/mips/bits/linkmap.h: Move to ... * sysdeps/mips/linkmap.h: ...here. * sysdeps/s390/bits/linkmap.h: Move to ... * sysdeps/s390/linkmap.h: ...here. * sysdeps/sh/bits/linkmap.h: Move to ... * sysdeps/sh/linkmap.h: ...here. * sysdeps/x86/bits/linkmap.h: Move to ... * sysdeps/x86/linkmap.h: ...here. * include/link.h: Include <linkmap.h> instead of <bits/linkmap.h>.
* Terminate FDE before return trampoline in makecontext for powerpc (bug 18635)Andreas Schwab2015-09-042-0/+13
| | | | | | | | | This fixes tst-makecontext for PowerPC. [BZ #18635] * sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S (__makecontext): Terminate FDE before return label. (__novec_makecontext): Likewise.
* powerpc: Fix compiler warning in some syscalls.Carlos Eduardo Seo2015-09-042-1/+6
| | | | | | | | | Commit f4491417cc80b4a01e72e9d218af137765ee5918 introduced some warnings when building GLIBC with GCC 5.x. similar to those fixed by commit dd6e8af6ba1b8a95a7f1dc7422e5ea4ccc7fbd93. This patch fixes those warnings. * sysdeps/unix/sysv/linux/socketpair.c: Use the address of the first member of struct sv in syscall macro.
* Rename bits/stdio-lock.h to stdio-lock.h (bug 14912).Joseph Myers2015-09-048-11/+25
| | | | | | | | | | | | | | | | | | | | | | | | | It was noted in <https://sourceware.org/ml/libc-alpha/2012-09/msg00305.html> that the bits/*.h naming scheme should only be used for installed headers. This patch renames bits/stdio-lock.h to plain stdio-lock.h to follow that convention. Tested for x86_64 (testsuite, and that installed stripped shared libraries are unchanged by the patch). [BZ #14912] * bits/stdio-lock.h: Move to ... * sysdeps/generic/stdio-lock.h: ...here. (_BITS_STDIO_LOCK_H): Rename macro to _STDIO_LOCK_H. * sysdeps/nptl/bits/stdio-lock.h: Move to ... * sysdeps/nptl/stdio-lock.h: ...here. (_BITS_STDIO_LOCK_H): Rename macro to _STDIO_LOCK_H. * include/libio.h: Include <stdio-lock.h> instead of <bits/stdio-lock.h>. * sysdeps/nptl/fork.c: Likewise. * sysdeps/pthread/flockfile.c: Likewise. * sysdeps/pthread/ftrylockfile.c: Likewise. * sysdeps/pthread/funlockfile.c: Likewise.
* Rename bits/m68k-vdso.h to m68k-vdso.h (bug 14912).Joseph Myers2015-09-046-4/+15
| | | | | | | | | | | | | | | | | It was noted in <https://sourceware.org/ml/libc-alpha/2012-09/msg00305.html> that the bits/*.h naming scheme should only be used for installed headers. This patch renames bits/m68k-vdso.h to plain m68k-vdso.h to follow that convention. [BZ #14912] * sysdeps/unix/sysv/linux/m68k/bits/m68k-vdso.h: Move to ... * sysdeps/unix/sysv/linux/m68k/m68k-vdso.h: ...here. * sysdeps/unix/sysv/linux/m68k/coldfire/bits/atomic.h: Include <m68k-vdso.h> instead of <bits/m68k-vdso.h>. * sysdeps/unix/sysv/linux/m68k/init-first.c: Likewise. * sysdeps/unix/sysv/linux/m68k/m68k-helpers.S: Likewise. * sysdeps/unix/sysv/linux/m68k/m68k-vdso.c: Likewise.
* Amend ChangeLog to reflect deletion of elf/tst-znodelete-zlib.ccFlorian Weimer2015-09-041-0/+1
| | | | | Commit f25238ffe0455013174438376b3ee88df496f9d1 deleted this file because it was noted during review that it was unused.
* Mark elf/tst-protected1[ab] as XFAIL.Roland McGrath2015-09-032-0/+12
|
* Rename bits/libc-tsd.h to libc-tsd.h (bug 14912).Joseph Myers2015-09-039-12/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | It was noted in <https://sourceware.org/ml/libc-alpha/2012-09/msg00305.html> that the bits/*.h naming scheme should only be used for installed headers. This patch renames bits/libc-tsd.h to plain libc-tsd.h to follow that convention. Tested for x86_64 (testing, and that installed stripped shared libraries are unchanged by the patch). [BZ #14912] * bits/libc-tsd.h: Move to ... * sysdeps/generic/libc-tsd.h: ...here. (_GENERIC_BITS_LIBC_TSD_H): Rename macro to _GENERIC_LIBC_TSD_H. * sysdeps/mach/hurd/bits/libc-tsd.h: Move to ... * sysdeps/mach/hurd/libc-tsd.h: ...here. (_BITS_LIBC_TSD_H): Rename macro to _LIBC_TSD_H. * include/ctype.h: Include <libc-tsd.h> instead of <bits/libc-tsd.h>. * include/rpc/rpc.h: Likewise. * locale/localeinfo.h: Likewise. * sunrpc/rpc_thread.c: Likewise. * sysdeps/mach/hurd/malloc-machine.h: Likewise. * sysdeps/nptl/malloc-machine.h: Likewise.
* Don't install bits/libc-lock.h or bits/stdio-lock.h.Joseph Myers2015-09-033-2/+5
| | | | | | | | | | | | | | The bits/libc-lock.h and bits/stdio-lock.h headers are installed, but not used by any other installed header. Accordingly, this patch stops these headers from being installed. A followup is intended to move these headers out of the bits/ namespace. Tested for x86_64 (testsuite, and that installed stripped shared libraries are unchanged by the patch). * Makefile (headers): Remove bits/libc-lock.h. * libio/Makefile (headers): Remove bits/stdio-lock.h.
* Don't include <bits/stdio-lock.h> from installed <libio.h>.Joseph Myers2015-09-035-5/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Every so often someone gets confused by the fact that the installed <bits/stdio-lock.h> header includes the non-installed <lowlevellock.h> header. This inclusion is not in fact a bug, because <bits/stdio-lock.h> only gets included by any header that users should include directly if _IO_MTSAFE_IO is defined, and that's an internal define used when building libio, not a feature test macro it's valid for users to define. However, on general principles it's best to have as little as possible in the installed headers that is inapplicable for valid uses of the installed glibc. This patch moves the include of <bits/stdio-lock.h> to the internal header include/libio.h, so that even if someone defines _IO_MTSAFE_IO it won't get included. This is intended as preparation for stopping <bits/stdio-lock.h> and <bits/libc-lock.h> from being installed at all (after this patch they aren't used in any installed header; formally of course they don't need to be installed even before this patch, but stopping them being installed before removing the #include would just exacerbate the confusion described above), and then moving those out of the bits/ namespace in accordance with the principle that that namespace is only for installed headers. The tests scanf15.c and scanf17.c avoid the internal headers; after this patch that means they need to undefine _IO_MTSAFE_IO as well as _LIBC so as to get a working _IO_lock_t definition for libio.h. This brings them closer to using the headers as an installed program would, which clearly accords with the intent of those tests. Tested for x86_64 (testsuite, and that installed stripped shared libraries are unchanged by the patch). * libio/libio.h [_IO_MTSAFE_IO]: Remove include of <bits/stdio-lock.h> and commented-out include of <comthread.h>. * include/libio.h [!_ISOMAC && _IO_MTSAFE_IO]: Include <bits/stdio-lock.h>. * stdio-common/scanf15.c (_IO_MTSAFE_IO): Undefine. * stdio-common/scanf17.c (_IO_MTSAFE_IO): Likewise.
* Fix BZ #18757.Paul Pluzhnikov2015-09-014-2/+32
|
* Filter out NULL entries.Paul Pluzhnikov2015-09-012-1/+5
|
* Add netinet/in.h values from Linux 4.2.Joseph Myers2015-09-013-0/+7
| | | | | | | | | | | | | | This patch adds new constants from Linux 4.2 to netinet/in.h: IPPROTO_MPLS and IP_BIND_ADDRESS_NO_PORT (both in include/uapi/linux/in.h in Linux; one directly in netinet/in.h, one in bits/in.h in glibc). Tested for x86_64 (testsuite, and that installed stripped shared libraries are unchanged by the patch). * inet/netinet/in.h (IPPROTO_MPLS): New enum value and macro. * sysdeps/unix/sysv/linux/bits/in.h (IP_BIND_ADDRESS_NO_PORT): New macro.
* Add more TCP_* values to netinet/tcp.h.Joseph Myers2015-09-012-0/+15
| | | | | | | | | | | | | | | | | This patch adds move TCP_* values to sysdeps/gnu/netinet/tcp.h to bring it up to date with Linux 4.2. TCP_SAVE_SYN and TCP_SAVED_SYN are new in 4.2, TCP_NOTSENT_LOWAT and TCP_CC_INFO are older (Szabolcs previously noted in <https://sourceware.org/ml/libc-alpha/2015-06/msg00938.html> that this header was out of date in glibc). Tested for x86_64 (testsuite, and that installed stripped shared libraries are unchanged by the patch). * sysdeps/gnu/netinet/tcp.h (TCP_NOTSENT_LOWAT): New macro. (TCP_CC_INFO): Likewise. (TCP_SAVE_SYN): Likewise. (TCP_SAVED_SYN): Likewise.
* Fix non-v9 32-bit sparc build.Brett Neumeier2015-08-313-1/+7
| | | | | [BZ #18870] * sysdeps/sparc/sparc32/sem_open.c: Add missing #include
* Fix broken overflow check in posix_fallocate [BZ 18873]Paul Eggert2015-08-314-3/+11
| | | | | | * sysdeps/posix/posix_fallocate.c (posix_fallocate): * sysdeps/posix/posix_fallocate64.c (__posix_fallocate64_l64): Fix parenthesization typo.
* NEWS: add #18887Mike Frysinger2015-08-291-1/+1
|
* getmntent: fix memory corruption w/blank lines [BZ #18887]Mike Frysinger2015-08-296-22/+113
| | | | | | | | | | | | | | | | | The fix for BZ #17273 introduced a single byte of memory corruption when the line is entirely blank. It would walk back past the start of the buffer if the heap happened to be 0x20 or 0x09 and then write a NUL byte. buffer = '\n'; end_ptr = buffer; while (end_ptr[-1] == ' ' || end_ptr[-1] == '\t') end_ptr--; *end_ptr = '\0'; Fix that and rework the tests. Adding the testcase for BZ #17273 to the existing \040 parser does not really make sense as it's unrelated, and leads to confusing behavior: it implicitly relies on the new entry being longer than the previous entry (since it just rewinds the FILE*). Split it out into its own dedicated testcase instead.
* de.po: fix SIGALRM typo [BZ #4404]Mike Frysinger2015-08-292-1/+6
|
* time/tst-strptime2.c: test full input range +/- 0-9999James Perkins2015-08-282-53/+185
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | strptime's %z specifier parses a string consisting of a sign ('+' or '-'), two hours digits, and optionally two minutes digits, into a tm.tm_gmtoff field containing the signed number of seconds the time zone is offset from UTC time. The time/tst-strptime2.c program passes a short list of strings through strptime, validating that either the gmtoff value returned matches an expected value, or that strptime returns an expected NULL for invalid strings (for example, when the minutes portion of the string is outside of the range 00 to 59, or the sign is missing before the hours digits). In review of strptime fixes, Carlos O'Donell expressed a wish that the test function iterate through the entire range of all possible numeric strings (-9999 to +9999) which could be passed to strptime %z, and validate the correct response. Specifically, the test will look for a NULL response from strptime when: * sign ('+' or '-') is not present before the first digit (invalid format). * A sign and no digits are found (invalid format). * A sign and one digit are found (invalid format). * A sign and three digits are found (invalid format). * A sign and four digits (-9999 to +9999) are found but the last two digits (minutes) are in the range 60 to 99. The test will look for a success response from strptime with tm.tm_gmtoff matching the calculated tm_gmtoff value when: * A sign and four digits are found (-9999 to +9999), and the last two digits (minutes) are in the range 00 to 59. * A sign and two digit strings are found (-99 to +99). The test's iteration over the possible digit values results in 22223 test strings prepared, tested, and passed by strptime. The test supports a --verbose command line option which will show the test results of every test input, and a final summary of all tests. Here is some sample output: PASS: input "1113472456 1030", expected: invalid, return value NULL PASS: input "1113472456 +", expected: invalid, return value NULL PASS: input "1113472456 -", expected: invalid, return value NULL PASS: input "1113472456 +0", expected: invalid, return value NULL PASS: input "1113472456 -0", expected: invalid, return value NULL PASS: input "1113472456 +1", expected: invalid, return value NULL ... PASS: input "1113472456 +9", expected: invalid, return value NULL PASS: input "1113472456 -9", expected: invalid, return value NULL PASS: input "1113472456 +00", expected: valid, tm.tm_gmtoff 0 PASS: input "1113472456 -00", expected: valid, tm.tm_gmtoff 0 PASS: input "1113472456 +01", expected: valid, tm.tm_gmtoff 3600 PASS: input "1113472456 -01", expected: valid, tm.tm_gmtoff -3600 PASS: input "1113472456 +02", expected: valid, tm.tm_gmtoff 7200 ... PASS: input "1113472456 +99", expected: valid, tm.tm_gmtoff 356400 PASS: input "1113472456 -99", expected: valid, tm.tm_gmtoff -356400 PASS: input "1113472456 +000", expected: invalid, return value NULL PASS: input "1113472456 -000", expected: invalid, return value NULL PASS: input "1113472456 +001", expected: invalid, return value NULL ... PASS: input "1113472456 +999", expected: invalid, return value NULL PASS: input "1113472456 -999", expected: invalid, return value NULL PASS: input "1113472456 +0000", expected: valid, tm.tm_gmtoff 0 PASS: input "1113472456 -0000", expected: valid, tm.tm_gmtoff 0 PASS: input "1113472456 +0001", expected: valid, tm.tm_gmtoff 60 PASS: input "1113472456 -0001", expected: valid, tm.tm_gmtoff -60 ... PASS: input "1113472456 +0059", expected: valid, tm.tm_gmtoff 3540 PASS: input "1113472456 -0059", expected: valid, tm.tm_gmtoff -3540 PASS: input "1113472456 +0060", expected: invalid, return value NULL PASS: input "1113472456 -0060", expected: invalid, return value NULL ... PASS: input "1113472456 +0099", expected: invalid, return value NULL PASS: input "1113472456 -0099", expected: invalid, return value NULL PASS: input "1113472456 +0100", expected: valid, tm.tm_gmtoff 3600 PASS: input "1113472456 -0100", expected: valid, tm.tm_gmtoff -3600 PASS: input "1113472456 +0101", expected: valid, tm.tm_gmtoff 3660 ... PASS: input "1113472456 +9999", expected: invalid, return value NULL PASS: input "1113472456 -9999", expected: invalid, return value NULL PASS: 22223 input strings: 0 fail, 22223 pass Any failing test will result in printing the failed line to stdout, and will trigger the printing of the summary line at the of all tests. For example: FAIL: input "1113472456 1030", expected: invalid, return value NULL, got: valid, tm.tm_gmtoff 37800 FAIL: 22223 input strings: 1 fail, 22222 pass
* strptime %z: fix rounding, extend range to +/-9959 [BZ #16141]James Perkins2015-08-284-15/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Topic: strptime supports a %z input field descriptor, which parses a time zone offset from UTC time into the broken-out time field tm_gmtoff. Problems: 1) In the current implementation, the minutes portion calculation is correct only for minutes evenly divisible by 3. This is because the minutes value is converted to decimal time, but inadequate precision leads to rounding which calculates results that are too low for some values. For example, due to rounding, a +1159 offset string results in an incorrect tm_gmtoff of 43128 (== 11 * 3600 + 58.8 * 60) seconds, instead of 43140 (== 11 * 3600 + 59 * 60) seconds. In contrast, a +1157 offset (minutes divisible by 3) does not cause the bug, and results in a correct tm_gmtoff of 43020. 2) strptime's %z specifier will not parse time offsets less than -1200 or greater than +1200, or if only hour digits are present, less than -12 or greater than +12. It will return NULL for offsets outside that range. These limits do not meet historical and modern use cases: * Present day exceeds the +1200 limit: - Pacific/Auckland (New Zealand) summer time is +1300. - Pacific/Kiritimati (Christmas Island) is +1400. - Pacific/Apia (Samoa) summer time is +1400. * Historical offsets exceeded +1500/-1500. * POSIX supports -2459 to +2559. * Offsets up to +/-9959 may occasionally be useful. * Paul Eggert's notes provide additional detail: - https://sourceware.org/ml/libc-alpha/2014-12/msg00068.html - https://sourceware.org/ml/libc-alpha/2014-12/msg00072.html 3) tst-strptime2, part of the 'make check' test suite, does not test for the above problems. Corrective actions: 1) In time/strptime_l.c, calculate the offset from the hour and minute portions directly, without the rounding errors introduced by decimal time. 2) Remove the +/-1200 range limit, permitting strptime to parse offsets from -9959 through +9959. 3) Add zone offset values to time/tst-strptime2.c. * Test minutes evenly divisible by three (+1157) and not evenly divisible by three (+1158 and +1159). * Test offsets near the old and new range limits (-1201, -1330, -2459, -2500, -99, -9959, +1201, +1330, +1400, +1401, +2559, +2600, +99, and +9959) The revised strptime passes all old and new tst-strptime2 tests.
* Mention 15786 in NEWSH.J. Lu2015-08-281-4/+4
| | | | | | | | | | | | commit f3dcae82d54e5097e18e1d6ef4ff55c2ea4e621e Author: H.J. Lu <hjl.tools@gmail.com> Date: Tue Aug 25 04:33:54 2015 -0700 Save and restore vector registers in x86-64 ld.so also fixed https://sourceware.org/bugzilla/show_bug.cgi?id=15786
* Fix wordsize-32 mmap offset for negative value (BZ#18877)Adhemerval Zanella2015-08-285-6/+82
| | | | | | | | | | | | | | | | This patch fixes the default wordsize-32 mmap implementation offset calculation for negative values. Current code uses signed shift operation to calculate the multiple size to use with syscall and it is implementation defined. Change it to use a division base on mmap page size (default being as before, 4096). Tested on armv7hf. [BZ #18877] * posix/Makefile (tests): Add tst-mmap-offset. * posix/tst-mmap.c: New file. * sysdeps/unix/sysv/linux/generic/wordsize-32/mmap.c (__mmap): Fix offset calculation for negative values.