]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - ChangeLog
Fix mktime localtime offset confusion
[thirdparty/glibc.git] / ChangeLog
index 5bbf568a2761d88849ff45ed635859e9aaf1715a..e15ac3bdb1286429884344a75785705f2ed798a3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,348 @@
+2018-09-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix mktime localtime offset confusion
+       [BZ #23603]
+       * include/time.h (__mktime_internal): The localtime offset is now
+       of type long int instead of time_t.  This is the longstanding type
+       in glibc, and it is more than enough to represent difference
+       between localtime and gmtime even if it is 32 bits and time_t is
+       64.  Changing it now will let us avoid an unnecessary change when
+       time_t is widened to 64 bits on 32-bit platforms.
+       * time/mktime-internal.h (mktime_offset_t): Now long int.
+
+       Merge mktime, timegm from upstream Gnulib
+       [BZ #23603][BZ #16346]
+       This fixes some obscure problems with integer overflow.
+       Although it looks scary, it is almost all a byte-for-byte copy
+       from Gnulib, and the Gnulib code has been tested reasonably well.
+       * include/intprops.h: New file, copied from Gnulib.
+       * include/verify.h, time/mktime-internal.h:
+       New tiny files, simplified from Gnulib.
+       * time/mktime.c: Copy from Gnulib.  This has the following changes:
+       Do not include config.h if DEBUG_MKTIME is nonzero.
+       Include stdbool.h, intprops.h, verify.h.
+       Include string.h only if needed.
+       Include stdlib.h on MS-Windows.
+       Include mktime-internal.h.
+       (DEBUG_MKTIME): Default to 0, and simplify later uses.
+       (NEED_MKTIME_INTERNAL, NEED_MKTIME_WINDOWS)
+       (NEED_MKTIME_WORKING): Give default values to pacify -Wundef,
+       which glibc uses.  Default NEED_MKTIME_WORKING to DEBUG_MKTIME, to
+       simplify later conditionals; default the others to zero.  Use
+       these conditionals to express only the code needed on the current
+       platform.  In uses of these conditionals, explicitly spell out how
+       _LIBC affects things, so it’s easier to review from a glibc
+       viewpoint.
+       (WRAPV): Remove; no longer needed now that we have
+       systematic overflow checking.
+       (my_tzset, __tzset) [!_LIBC]: New function and macro, to better
+       compartmentalize tzset issues.  Move system-dependent tzsettish
+       code here from mktime.
+       (verify): Remove; now done by verify.h.  All uses changed.
+       (long_int): Use a more-conservative definition, to avoid
+       integer overflow.
+       (SHR): Remove, replacing with ...
+       (shr): New function, which means we needn’t worry about side
+       effects in args, and conversion analysis is simpler.
+       (TYPE_IS_INTEGER, TYPE_TWOS_COMPLEMENT, TYPE_SIGNED, TYPE_MINIMUM)
+       (TYPE_MAXIMUM, TIME_T_MIN, TIME_T_MAX, TIME_T_MIDPOINT)
+       (time_t_avg, time_t_add_ok): Remove.
+       (mktime_min, mktime_max): New constants.
+       (leapyear, isdst_differ): Use bool for booleans.
+       (ydhms_diff, guess_time_tm, ranged_convert, __mktime_internal):
+       Use long_int, not time_t, for mktime differences.
+       (long_int_avg): New function, replacing time_t_avg.
+       INT_ADD_WRAPV replaces time_t_add_ok.
+       (guess_time_tm): 6th arg is now long_int, not time_t const *.
+       All uses changed.
+       (convert_time): New function.
+       (ranged_convert): Use it.
+       (__mktime_internal): Last arg now points to mktime_offset_t, not
+       time_t.  All uses changed.  This is a no-op on glibc, where
+       mktime_offset_t is always time_t.  Use int, not time_t, for UTC
+       offset guess.  Directly check for integer overflow instead of
+       using a heuristic that works only 99.9...% of the time.
+       Access *OFFSET only once, to avoid an unlikely race if the
+       compiler delays a load and if this cascades into a signed integer
+       overflow.
+       (mktime): Move tzsettish code to my_tzset, and move
+       localtime_offset to within mktime so that it doesn’t
+       need a separate ifdef.
+       (main) [DEBUG_MKTIME]: Speed up by using localtime_r
+       instead of localtime.
+       * time/timegm.c: Copy from Gnulib.  This has the following changes:
+       Include mktime-internal.h.
+       [!_LIBC]: Include config.h and time.h.  Do not include
+       timegm.h or time_r.h.  Make __mktime_internal a macro,
+       and include mktime-internal.h to get its declaration.
+       (timegm): Temporary is now mktime_offset_t, not time_t.
+       This affects only Gnulib.
+
+2018-09-19  Wilco Dijkstra  <wdijkstr@arm.com>
+
+       [BZ #23637]
+       * string/test-strstr.c (pr23637): New function.
+       (test_main): Add tests with longer needles.
+       * string/strcasestr.c (AVAILABLE): Fix readahead distance.
+       * string/strstr.c (AVAILABLE): Likewise.
+
+2018-09-19  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+       * sysdeps/ieee754/flt-32/e_powf.c (checkint): Fix documentation.
+
+2018-09-19  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+       * NEWS: Mention pow improvements.
+       * math/Makefile (type-double-routines): Add e_pow_log_data.
+       * sysdeps/generic/math_private.h (__exp1): Remove.
+       * sysdeps/i386/fpu/e_pow_log_data.c: New file.
+       * sysdeps/ia64/fpu/e_pow_log_data.c: New file.
+       * sysdeps/ieee754/dbl-64/Makefile (CFLAGS-e_pow.c): Allow fma
+       contraction.
+       * sysdeps/ieee754/dbl-64/e_exp.c (__exp1): Remove.
+       (exp_inline): Remove.
+       (__ieee754_exp): Only single double input is handled.
+       * sysdeps/ieee754/dbl-64/e_pow.c: Rewrite.
+       * sysdeps/ieee754/dbl-64/e_pow_log_data.c: New file.
+       * sysdeps/ieee754/dbl-64/math_config.h (issignaling_inline): Define.
+       (__pow_log_data): Define.
+       * sysdeps/ieee754/dbl-64/upow.h: Remove.
+       * sysdeps/ieee754/dbl-64/upow.tbl: Remove.
+       * sysdeps/m68k/m680x0/fpu/e_pow_log_data.c: New file.
+       * sysdeps/x86_64/fpu/multiarch/Makefile (CFLAGS-e_pow-fma.c): Allow fma
+       contraction.
+       (CFLAGS-e_pow-fma4.c): Likewise.
+
+2018-09-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Simplify tzfile fstat failure code
+       [BZ #21716]
+       * time/tzfile.c (__tzfile_read): Simplify slightly.
+
+       Fix tzfile low-memory assertion failure
+       [BZ #21716]
+       * time/tzfile.c (__tzfile_read): Check for memory exhaustion
+       when registering time zone abbreviations.
+
+2018-09-18  Joseph Myers  <joseph@codesourcery.com>
+
+       * sysdeps/unix/sysv/linux/bits/mman.h: New file.
+       * sysdeps/unix/sysv/linux/aarch64/bits/mman.h: Remove.
+       * sysdeps/unix/sysv/linux/arm/bits/mman.h: Likewise.
+       * sysdeps/unix/sysv/linux/m68k/bits/mman.h: Likewise.
+       * sysdeps/unix/sysv/linux/microblaze/bits/mman.h: Likewise.
+       * sysdeps/unix/sysv/linux/nios2/bits/mman.h: Likewise.
+       * sysdeps/unix/sysv/linux/riscv/bits/mman.h: Likewise.
+       * sysdeps/unix/sysv/linux/s390/bits/mman.h: Likewise.
+       * sysdeps/unix/sysv/linux/sh/bits/mman.h: Likewise.
+
+       * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (ceil): Redirect to
+       __ceil.
+       (__ceill): Call ceil instead of __ceil.
+       * sysdeps/ieee754/ldbl-128ibm/s_floorl.c (floor): Redirect to
+       __floor.
+       (__floorl): Call floor instead of __floor.
+
+2018-09-17  Joseph Myers  <joseph@codesourcery.com>
+
+       * include/math.h [!_ISOMAC && !(__FINITE_MATH_ONLY__ &&
+       __FINITE_MATH_ONLY__ > 0) && !NO_MATH_REDIRECT] (ceil): Redirect
+       using MATH_REDIRECT.
+       * sysdeps/aarch64/fpu/s_ceil.c: Define NO_MATH_REDIRECT before
+       header inclusion.
+       * sysdeps/aarch64/fpu/s_ceilf.c: Likewise.
+       * sysdeps/ieee754/dbl-64/s_ceil.c: Likewise.
+       * sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c: Likewise.
+       * sysdeps/ieee754/float128/s_ceilf128.c: Likewise.
+       * sysdeps/ieee754/flt-32/s_ceilf.c: Likewise.
+       * sysdeps/ieee754/ldbl-128/s_ceill.c: Likewise.
+       * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: Likewise.
+       * sysdeps/m68k/m680x0/fpu/s_ceil_template.c: Likewise.
+       * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceil.c: Likewise.
+       * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceilf.c: Likewise.
+       * sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil.c: Likewise.
+       * sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceilf.c: Likewise.
+       * sysdeps/riscv/rv64/rvd/s_ceil.c: Likewise.
+       * sysdeps/riscv/rvf/s_ceilf.c: Likewise.
+       * sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.c: Likewise.
+       * sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_ceil.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_ceilf.c: Likewise.
+       * sysdeps/powerpc/fpu/math_private.h [_ARCH_PWR5X] (__ceil):
+       Remove macro.
+       * sysdeps/ieee754/dbl-64/e_gamma_r.c (gamma_positive): Use ceil
+       functions instead of __ceil variants.
+       * sysdeps/ieee754/flt-32/e_gammaf_r.c (gammaf_positive): Likewise.
+       * sysdeps/ieee754/ldbl-128/e_gammal_r.c (gammal_positive):
+       Likewise.
+       * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (gammal_positive):
+       Likewise.
+       * sysdeps/ieee754/ldbl-128ibm/s_truncl.c (__truncl): Likewise.
+       * sysdeps/ieee754/ldbl-96/e_gammal_r.c (gammal_positive):
+       Likewise.
+       * sysdeps/powerpc/power5+/fpu/s_modf.c (__modf): Likewise.
+       * sysdeps/powerpc/power5+/fpu/s_modff.c (__modff): Likewise.
+
+       [BZ #21286]
+       * sysdeps/unix/sysv/linux/bits/siginfo-consts.h (SI_DETHREAD): New
+       constant.
+       [__USE_XOPEN_EXTENDED || __USE_XOPEN2K8] (ILL_BADIADDR): Likewise.
+       [__USE_XOPEN_EXTENDED || __USE_XOPEN2K8] (FPE_FLTUNK): Likewise.
+       [__USE_XOPEN_EXTENDED || __USE_XOPEN2K8] (FPE_CONDTRAP): Likewise.
+       [__USE_XOPEN_EXTENDED || __USE_XOPEN2K8] (SEGV_ACCADI): Likewise.
+       [__USE_XOPEN_EXTENDED || __USE_XOPEN2K8] (SEGV_ADIDERR): Likewise.
+       [__USE_XOPEN_EXTENDED || __USE_XOPEN2K8] (SEGV_ADIPERR): Likewise.
+       [__USE_XOPEN_EXTENDED] (TRAP_BRANCH): Likewise.
+       [__USE_XOPEN_EXTENDED] (TRAP_HWBKPT): Likewise.
+       [__USE_XOPEN_EXTENDED] (TRAP_UNK): Likweise.
+       * sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h
+       (ILL_BADIADDR): Remove constant.
+       (TRAP_BRANCH): Likewise.
+       (TRAP_HWBKPT): Likewise.
+
+2018-09-14  Joseph Myers  <joseph@codesourcery.com>
+
+       [BZ #23656]
+       * sysdeps/unix/sysv/linux/mips/sys/procfs.h (struct elf_prstatus):
+       Remove [_MIPS_SIM = _ABIN32] conditional case.
+       (struct elf_prpsinfo): Likewise.
+
+       [BZ #23649]
+       * sysdeps/unix/sysv/linux/microblaze/sys/procfs.h (struct
+       elf_prpsinfo): Use unsigned int for pr_uid and pr_gid.
+       * sysdeps/unix/sysv/linux/mips/sys/procfs.h (struct elf_prpsinfo):
+       Likewise.
+       * sysdeps/unix/sysv/linux/nios2/sys/procfs.h (struct
+       elf_prpsinfo): Likewise.
+       * sysdeps/unix/sysv/linux/riscv/sys/procfs.h (struct
+       elf_prpsinfo): Likewise.
+       * sysdeps/unix/sysv/linux/sys/procfs.h (struct elf_prpsinfo):
+       Likewise.
+
+       * include/math.h [!_ISOMAC && !(__FINITE_MATH_ONLY__ &&
+       __FINITE_MATH_ONLY__ > 0) && !NO_MATH_REDIRECT] (rint): Redirect
+       using MATH_REDIRECT.
+       * sysdeps/aarch64/fpu/s_rint.c: Define NO_MATH_REDIRECT before
+       header inclusion.
+       * sysdeps/aarch64/fpu/s_rintf.c: Likewise.
+       * sysdeps/alpha/fpu/s_rint.c: Likewise.
+       * sysdeps/alpha/fpu/s_rintf.c: Likewise.
+       * sysdeps/i386/fpu/s_rintl.c: Likewise.
+       * sysdeps/ieee754/dbl-64/s_rint.c: Likewise.
+       * sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c: Likewise.
+       * sysdeps/ieee754/float128/s_rintf128.c: Likewise.
+       * sysdeps/ieee754/flt-32/s_rintf.c: Likewise.
+       * sysdeps/ieee754/ldbl-128/s_rintl.c: Likewise.
+       * sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise.
+       * sysdeps/m68k/coldfire/fpu/s_rint.c: Likewise.
+       * sysdeps/m68k/coldfire/fpu/s_rintf.c: Likewise.
+       * sysdeps/m68k/m680x0/fpu/s_rint.c: Likewise.
+       * sysdeps/m68k/m680x0/fpu/s_rintf.c: Likewise.
+       * sysdeps/m68k/m680x0/fpu/s_rintl.c: Likewise.
+       * sysdeps/powerpc/fpu/s_rint.c: Likewise.
+       * sysdeps/powerpc/fpu/s_rintf.c: Likewise.
+       * sysdeps/riscv/rv64/rvd/s_rint.c: Likewise.
+       * sysdeps/riscv/rvf/s_rintf.c: Likewise.
+       * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint.c: Likewise.
+       * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf.c: Likewise.
+       * sysdeps/sparc/sparc64/fpu/multiarch/s_rint.c: Likewise.
+       * sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_rint.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_rintf.c: Likewise.
+       * sysdeps/x86_64/fpu/math_private.h: Remove file.
+       * math/e_scalb.c (invalid_fn): Use rint functions instead of
+       __rint variants.
+       * math/e_scalbf.c (invalid_fn): Likewise.
+       * math/e_scalbl.c (invalid_fn): Likewise.
+       * sysdeps/ieee754/dbl-64/e_gamma_r.c (__ieee754_gamma_r):
+       Likewise.
+       * sysdeps/ieee754/flt-32/e_gammaf_r.c (__ieee754_gammaf_r):
+       Likewise.
+       * sysdeps/ieee754/k_standard.c (__kernel_standard): Likewise.
+       * sysdeps/ieee754/k_standardl.c (__kernel_standard_l): Likewise.
+       * sysdeps/ieee754/ldbl-128/e_gammal_r.c (__ieee754_gammal_r):
+       Likewise.
+       * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (__ieee754_gammal_r):
+       Likewise.
+       * sysdeps/ieee754/ldbl-96/e_gammal_r.c (__ieee754_gammal_r):
+       Likewise.
+       * sysdeps/powerpc/powerpc32/fpu/s_llrint.c (__llrint): Likewise.
+       * sysdeps/powerpc/powerpc32/fpu/s_llrintf.c (__llrintf): Likewise.
+
+       * include/math.h [!_ISOMAC && !(__FINITE_MATH_ONLY__ &&
+       __FINITE_MATH_ONLY__ > 0) && !NO_MATH_REDIRECT] (MATH_REDIRECT):
+       New macro.
+       [!_ISOMAC && !(__FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0)
+       && !NO_MATH_REDIRECT] (MATH_REDIRECT_LDBL): Likewise.
+       [!_ISOMAC && !(__FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0)
+       && !NO_MATH_REDIRECT] (MATH_REDIRECT_F128): Likewise.
+       [!_ISOMAC && !(__FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0)
+       && !NO_MATH_REDIRECT] (MATH_REDIRECT_UNARY_ARGS): Likewise.
+       [!_ISOMAC && !(__FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0)
+       && !NO_MATH_REDIRECT] (sqrt): Redirect using MATH_REDIRECT.
+       [!_ISOMAC && !(__FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0)
+       && !NO_MATH_REDIRECT] (floor): Likewise.
+       * sysdeps/aarch64/fpu/s_floor.c: Define NO_MATH_REDIRECT before
+       header inclusion.
+       * sysdeps/aarch64/fpu/s_floorf.c: Likewise.
+       * sysdeps/ieee754/dbl-64/s_floor.c: Likewise.
+       * sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c: Likewise.
+       * sysdeps/ieee754/float128/s_floorf128.c: Likewise.
+       * sysdeps/ieee754/flt-32/s_floorf.c: Likewise.
+       * sysdeps/ieee754/ldbl-128/s_floorl.c: Likewise.
+       * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise.
+       * sysdeps/m68k/m680x0/fpu/s_floor_template.c: Likewise.
+       * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floor.c: Likewise.
+       * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floorf.c: Likewise.
+       * sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor.c: Likewise.
+       * sysdeps/powerpc/powerpc64/fpu/multiarch/s_floorf.c: Likewise.
+       * sysdeps/riscv/rv64/rvd/s_floor.c: Likewise.
+       * sysdeps/riscv/rvf/s_floorf.c: Likewise.
+       * sysdeps/sparc/sparc64/fpu/multiarch/s_floor.c: Likewise.
+       * sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_floor.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_floorf.c: Likewise.
+       * sysdeps/powerpc/fpu/math_private.h [_ARCH_PWR5X] (__floor):
+       Remove macro.
+       [_ARCH_PWR5X] (__floorf): Likewise.
+       * sysdeps/x86_64/fpu/math_private.h [__SSE4_1__] (__floor): Remove
+       inline function.
+       [__SSE4_1__] (__floorf): Likewise.
+       * math/w_lgamma_main.c (LGFUNC (__lgamma)): Use floor functions
+       instead of __floor variants.
+       * math/w_lgamma_r_compat.c (__lgamma_r): Likewise.
+       * math/w_lgammaf_main.c (LGFUNC (__lgammaf)): Likewise.
+       * math/w_lgammaf_r_compat.c (__lgammaf_r): Likewise.
+       * math/w_lgammal_main.c (LGFUNC (__lgammal)): Likewise.
+       * math/w_lgammal_r_compat.c (__lgammal_r): Likewise.
+       * math/w_tgamma_compat.c (__tgamma): Likewise.
+       * math/w_tgamma_template.c (M_DECL_FUNC (__tgamma)): Likewise.
+       * math/w_tgammaf_compat.c (__tgammaf): Likewise.
+       * math/w_tgammal_compat.c (__tgammal): Likewise.
+       * sysdeps/ieee754/dbl-64/e_lgamma_r.c (sin_pi): Likewise.
+       * sysdeps/ieee754/dbl-64/k_rem_pio2.c (__kernel_rem_pio2):
+       Likewise.
+       * sysdeps/ieee754/dbl-64/lgamma_neg.c (__lgamma_neg): Likewise.
+       * sysdeps/ieee754/flt-32/e_lgammaf_r.c (sin_pif): Likewise.
+       * sysdeps/ieee754/flt-32/lgamma_negf.c (__lgamma_negf): Likewise.
+       * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (__ieee754_lgammal_r):
+       Likewise.
+       * sysdeps/ieee754/ldbl-128/e_powl.c (__ieee754_powl): Likewise.
+       * sysdeps/ieee754/ldbl-128/lgamma_negl.c (__lgamma_negl):
+       Likewise.
+       * sysdeps/ieee754/ldbl-128/s_expm1l.c (__expm1l): Likewise.
+       * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c (__ieee754_lgammal_r):
+       Likewise.
+       * sysdeps/ieee754/ldbl-128ibm/e_powl.c (__ieee754_powl): Likewise.
+       * sysdeps/ieee754/ldbl-128ibm/lgamma_negl.c (__lgamma_negl):
+       Likewise.
+       * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c (__expm1l): Likewise.
+       * sysdeps/ieee754/ldbl-128ibm/s_truncl.c (__truncl): Likewise.
+       * sysdeps/ieee754/ldbl-96/e_lgammal_r.c (sin_pi): Likewise.
+       * sysdeps/ieee754/ldbl-96/lgamma_negl.c (__lgamma_negl): Likewise.
+       * sysdeps/powerpc/power5+/fpu/s_modf.c (__modf): Likewise.
+       * sysdeps/powerpc/power5+/fpu/s_modff.c (__modff): Likewise.
+
 2018-09-12  Joseph Myers  <joseph@codesourcery.com>
 
        * elf/Makefile (modules-names-tests): New variable.