From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 115155 invoked by alias); 25 Oct 2019 11:25:08 -0000 Mailing-List: contact glibc-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: , Sender: glibc-cvs-owner@sourceware.org List-Subscribe: Received: (qmail 114550 invoked by uid 9943); 25 Oct 2019 11:24:48 -0000 Date: Fri, 25 Oct 2019 11:25:00 -0000 Message-ID: <20191025112448.114549.qmail@sourceware.org> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Adhemerval Zanella To: glibc-cvs@sourceware.org Subject: [glibc] Deleted branch azanella/y2038-preliminaries X-Act-Checkin: glibc X-Git-Author: Adhemerval Zanella X-Git-Refname: refs/heads/azanella/y2038-preliminaries X-Git-Oldrev: 4589d9ddc5298f2897d11830fed2bfe38ecda7cc X-Git-Newrev: 0000000000000000000000000000000000000000 X-SW-Source: 2019-q4/txt/msg00128.txt.bz2 The branch 'azanella/y2038-preliminaries' was deleted. It previously pointed to: 4589d9d... Revise the documentation of simple calendar time. Diff: !!! WARNING: THE FOLLOWING COMMITS ARE NO LONGER ACCESSIBLE (LOST): ------------------------------------------------------------------- 4589d9d... Revise the documentation of simple calendar time. 3a123f1... Make second argument of gettimeofday as 'void *' b30d257... Use clock_gettime to implement gettimeofday. 6274fd5... Use clock_gettime to implement timespec_get. bf49c54... Consolidate and deprecate ftime 95062eb... Use clock_gettime to implement time. 6870041... Use clock_settime to implement settimeofday. 310c0d5... Use clock_settime to implement stime; withdraw stime. 7c21cd0... Change most internal uses of __gettimeofday to __clock_gett 928c86c... Linux/Alpha: don't use timeval32 system calls. commit 4589d9ddc5298f2897d11830fed2bfe38ecda7cc Author: Zack Weinberg Date: Mon Aug 19 10:31:07 2019 -0400 Revise the documentation of simple calendar time. This is a thorough revision of all the material relating to the functions time, stime, gettimeofday, settimeofday, clock_gettime, clock_getres, clock_settime, and difftime, spilling over into the discussion of time-related data types (which now get their own section) and touching the adjtime family as well (which deserves its own thorough revision, but I'd have to do a bunch of research first). Substantive changes are: * Document clock_gettime, clock_getres, and clock_settime. (Only CLOCK_REALTIME and CLOCK_MONOTONIC are documented; the others are either a bit too Linux-specific, or have more to do with measuring CPU/processor time. That section _also_ deserves its own thorough revision but again I'd have to do a bunch of research first.) * Present gettimeofday, settimeofday, and struct timeval as obsolete relative to clock_*. * Remove the documentation of struct timezone. Matching POSIX, say that the type of the second argument to gettimeofday and settimeofday is [const] void *. * Clarify ISO C and POSIX's requirements on time_t. Clarify the circumstances under which difftime is equivalent to simple subtraction. * Consolidate documentation of most of the time-related data types into a new section "Time Types," right after "Time Basics." (The exceptions are struct tm, which stays in "Broken-down Time," and struct times, which stays in "Processor And CPU Time." * The "Elapsed Time" section is now called "Calculating Elapsed Time" and includes only difftime and the discussion of how to compute timeval differences by hand. * Fold the "Simple Calendar Time," "High Resolution Calendar," and "High Accuracy Clock" sections together into two new sections titled "Getting the Time" and "Setting and Adjusting the Time." ChangeLog: * manual/time.texi: Major revision of text related to simple calendar time. clock_gettime, clock_getres, and clock_settime are now documented. * manual/filesys.texi, manual/llio.texi, manual/threads.texi: Update cross-references to renamed sections in time.texi. commit 3a123f1a0681dcf7f7f2f5f4f3cc9aeefb8adc3f Author: Zack Weinberg Date: Mon Aug 19 13:51:25 2019 -0400 Make second argument of gettimeofday as 'void *' Also make the public prototype of gettimeofday declare its second argument with type "void *" unconditionally, consistent with POSIX. It is also consistent with POSIX. * time/sys/time.h (__timezone_ptr_t): Delete. (gettimeofday): Always declare second argument with type "void *". (settimeofday): Improve commentary. * include/sys/time.h (__gettimeofday) * sysdeps/unix/sysv/linux/aarch64/gettimeofday.c * sysdeps/unix/sysv/linux/powerpc/gettimeofday.c * sysdeps/unix/sysv/linux/x86/gettimeofday.c * time/gettimeofday.c (gettimeofday): Declare second argument with type "void *". commit b30d257ea8f557bdadca09f5b112538e7b807eb9 Author: Adhemerval Zanella Date: Wed Sep 4 19:56:10 2019 +0000 Use clock_gettime to implement gettimeofday. Consolidate generic gettimeofday implementation to use clock_gettime. Linux ports that still provide gettimeofday through vDSO are not changed. Remove sysdeps/unix/clock_gettime.c, which implemented clock_gettime using gettimeofday; new OS ports must provide a real implementation of clock_gettime. Rename sysdeps/mach/gettimeofday.c to sysdeps/mach/clock_gettime.c and convert into an implementation of clock_gettime. It only supports CLOCK_REALTIME; Mach does not appear to have any support for monotonic clocks. It uses __host_get_time, which provides at best microsecond resolution. Hurd is currently using sysdeps/posix/clock_getres.c for clock_getres; its output for CLOCK_REALTIME is based on sysconf (_SC_CLK_TCK), and I do not know whether that gives the correct result. Unlike settimeofday, there are no known uses of gettimeofday's vestigial "get time zone" feature that are not bugs. (The per-process timezone support in localtime and friends is unrelated, and the programs that set the kernel's offset between the hardware clock and UTC do not need to read it back.) Therefore, this feature is dummied out. Henceforth, if gettimeofday's "struct timezone" argument is not NULL, it will write zeroes to both fields. Any program that is actually looking at this data will thus think it is running in UTC, which is probably more correct than whatever it was doing before. [__]gettimeofday no longer has any internal callers, so we can now remove its internal prototype and PLT bypass aliases. The __gettimeofday@GLIBC_2.0 export remains, in case it is used by any third-party code. * time/gettimeofday.c: No longer a stub implementation. Call __clock_gettime. If tz argument is not NULL, clear the object it points to. Remove libc_hidden_* for __gettimeofday and gettimeofday. Optionally override the default symbol version for gettimeofday and __gettimeofday. * include/sys/time.h: Remove libc_hidden_proto for __gettimeofday, and for gettimeofday. * sysdeps/unix/syscalls.list: Remove entry for gettimeofday. * sysdeps/unix/sysv/linux/alpha/syscalls.list: Remove entries for gettimeofday and osf_gettimeofday. * sysdeps/unix/sysv/linux/alpha/gettimeofday.c: Switch to including time/gettimeofday.c. * sysdeps/unix/sysv/linux/alpha/osf_gettimeofday.c (gettimeofday@GLIBC_2.0): Use __clock_gettime instead of __gettimeofday. If tz argument is not NULL, clear the object it points to. * sysdeps/unix/sysv/linux/aarch64/gettimeofday.c * sysdeps/unix/sysv/linux/powerpc/gettimeofday.c * sysdeps/unix/sysv/linux/x86/gettimeofday.c: Remove internal alias and simplify implementation. * sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list: Remove gettimeofday. * sysdeps/unix/clock_gettime.c * sysdeps/unix/sysv/linux/gettimeofday.c * sysdeps/unix/sysv/linux/i386/gettimeofday.c * sysdeps/posix/gettimeofday.c: Delete file. * sysdeps/mach/gettimeofday.c: Rename to sysdeps/mach/clock_gettime.c and convert into an implementation of clock_gettime. commit 6274fd520b91d687793c3589a61c287350595e4a Author: Zack Weinberg Date: Thu Aug 22 17:10:35 2019 -0400 Use clock_gettime to implement timespec_get. timespec_get is the same function as clock_gettime, with an obnoxious coating of NIH painted on it by the ISO C committee. In addition to the rename, it takes its arguments in a different order, it returns 0 on *failure* or a positive number on *success*, and it requires that all of its TIME_* constants be positive. This last means we cannot directly reuse the existing CLOCK_* constants for it, because those have been allocated starting with CLOCK_REALTIME = 0 on all existing platforms. This patch simply promotes the sysdeps/posix implementation to universal, and removes the Linux-specific implementation, whose apparent reason for existing was to cut out one function call's worth of overhead. * sysdeps/posix/timespec_get.c * sysdeps/unix/sysv/linux/timespec_get.c: Delete file. * time/timespec_get.c: No longer a stub. Replace implementation with the code formerly in sysdeps/posix/timespec_get.c. commit bf49c54dab20abe5f0a5efc73f934e475af10233 Author: Adhemerval Zanella Date: Wed Sep 4 16:51:23 2019 +0000 Consolidate and deprecate ftime ftime is an obsolete variation on gettimeofday, offering only millisecond time resolution; it was probably a system call in ooold versions of BSD Unix. For historic reasons, we had three implementations of it. These are all consolidated into time/ftime.c, and then the function is deprecated. For some reason, the implementation of ftime in terms of gettimeofday was rounding rather than truncating microseconds to milliseconds. In all the other places where we use a higher-resolution time function to implement a lower-resolution one, we truncate. ftime is changed to match, just for tidiness' sake. Like gettimeofday, ftime tries to report the time zone, and using that information is always a bug. This patch dummies out the reported timezone information; the timezone and dstflag fields of the returned "struct timeb" will always be zero. * sysdeps/unix/bsd/ftime.c * sysdeps/unix/sysv/linux/ftime.c: Remove file. * time/ftime.c (ftime): Replace implementation with the code formerly in sysdeps/unix/bsd/ftime.c, then change that code to use __clock_gettime instead of __gettimeofday and to truncate rather than rounding. Always set the timezone and dstflag fields of the timebuf argument to zero. * time/sys/timeb.h (ftime): Add nonnull and deprecate attribute. * time/tst-ftime.c (do_test): Handle ftime deprecation. commit 95062ebe070a05a9afd2bfa76f13af47128dec15 Author: Adhemerval Zanella Date: Wed Sep 4 18:12:24 2019 +0000 Use clock_gettime to implement time. Consolidate generic time implementation to use clock_gettime. Linux ports that still use either time or gettime syscall or vDSO are not changed. * time/time.c (time): No longer a stub implementation. Call __clock_gettime. * sysdeps/unix/sysv/linux/powerpc/time.c: Use new generic implementation. * sysdeps/posix/time.c * sysdeps/unix/sysv/linux/sparc/sparc64/time.c * sysdeps/unix/sysv/linux/time.c: Remove file. commit 68700415e7c8fac44c730dc315f3832bf4f6c041 Author: Zack Weinberg Date: Wed Aug 28 08:25:49 2019 -0400 Use clock_settime to implement settimeofday. Unconditionally, on all ports, use clock_settime to implement settimeofday. Remove sysdeps/unix/clock_settime.c, which implemented clock_settime by calling settimeofday; new OS ports must henceforth provide a real implementation of clock_settime. Hurd had a real implementation of settimeofday but not of clock_settime; this patch converts it into an implementation of clock_settime. It only supports CLOCK_REALTIME and microsecond resolution; Hurd/Mach does not appear to have any support for finer-resolution clocks. The vestigial "set time zone" feature of settimeofday complicates the generic settimeofday implementation a little. The only remaining uses of this feature that aren't just bugs, are using it to inform the Linux kernel of the offset between the hardware clock and UTC, on systems where the hardware clock doesn't run in UTC (usually because of dual-booting with Windows). There currently isn't any other way to do this. However, the callers that do this call settimeofday with _only_ the timezone argument non-NULL. Therefore, glibc's new behavior is: callers of settimeofday must supply one and only one of the two arguments. If both arguments are non-NULL, or both arguments are NULL, the call fails and sets errno to EINVAL. When only the timeval argument is supplied, settimeofday calls __clock_settime(CLOCK_REALTIME), same as stime. When only the timezone argument is supplied, settimeofday calls a new internal function called __settimezone. On Linux, only, this function will pass the timezone structure to the settimeofday system call. On all other operating systems, and on Linux architectures that don't define __NR_settimeofday, __settimezone is a stub that always sets errno to ENOSYS and returns -1. The same semantics are implemented for Linux/Alpha's GLIBC_2.0 compat symbol for settimeofday. There are no longer any internal callers of __settimeofday, so the internal prototype is removed. * time/settimeofday.c (settimeofday): No longer a stub implementation. Call __clock_settime or __settimezone depending on arguments. Optionally override the default symbol version for settimeofday. * include/sys/time.h: Remove prototype for __settimeofday. Add prototype for __settimezone. * sysdeps/unix/syscalls.list: Remove entry for settimeofday. * time/settimezone.c: New file. (__settimezone): New stub implementation. * sysdeps/unix/sysv/linux/settimezone.c: New file. (__settimezone): Implement using settimeofday system call, if available. * time/Makefile (routines): Add settimezone. * sysdeps/unix/sysv/linux/alpha/syscalls.list: Remove entries for settimeofday and osf_settimeofday. * sysdeps/unix/sysv/linux/alpha/osf_settimeofday.c New file, defines settimeofday@GLIBC_2.0. * sysdeps/unix/sysv/linux/alpha/settimeofday.c: New file, defines settimeofday@@GLIBC_2.1. * sysdeps/unix/clock_gettime.c: Delete file. * sysdeps/mach/hurd/settimeofday.c: Rename to sysdeps/mach/hurd/clock_settime.c and convert into an implementation of clock_settime. commit 310c0d50df06d41d2605288deaec31c578bf1780 Author: Zack Weinberg Date: Fri Aug 16 15:03:16 2019 -0400 Use clock_settime to implement stime; withdraw stime. Unconditionally, on all ports, use clock_settime to implement stime, not settimeofday or a direct syscall. Then convert stime into a compatibility symbol and remove its prototype from time.h. * time/stime.c (stime): No longer a stub implementation. Call __clock_settime. Demote to a compatibility symbol. * sysdeps/unix/stime.c: Delete file. * sysdeps/unix/sysv/linux/syscalls.list: Remove entry for stime. * time/time.h: Remove prototype for stime. commit 7c21cd098fcc767f7cce4f644def3896fabe3fb4 Author: Zack Weinberg Date: Fri Aug 16 20:38:22 2019 -0400 Change most internal uses of __gettimeofday to __clock_gettime. Since gettimeofday will shortly be implemented in terms of clock_gettime on all platforms, internal code should use clock_gettime directly; in addition to removing a layer of indirection, this will allow us to remove the PLT-bypass gunk for gettimeofday. (We can't quite do that yet, but it'll be coming later in this patch series.) In many cases, the changed code does fewer conversions. The changed code always assumes __clock_gettime (CLOCK_REALTIME) cannot fail. Most of the call sites were assuming gettimeofday could not fail, but a few places were checking for errors. POSIX says clock_gettime can only fail if the clock constant is invalid or unsupported, and CLOCK_REALTIME is the one and only clock constant that's required to be supported. For consistency I grepped the entire source tree for any other places that checked for errors from __clock_gettime (CLOCK_REALTIME), found one, and changed it too. (For the record, POSIX also says gettimeofday can never fail.) (It would be nice if we could declare that GNU systems will always support CLOCK_MONOTONIC as well as CLOCK_REALTIME; there are several places where we are using CLOCK_REALTIME where _MONOTONIC would be more appropriate, and/or trying to use _MONOTONIC and then falling back to _REALTIME. But the Hurd doesn't support CLOCK_MONOTONIC yet, and it looks like adding it would involve substantial changes to gnumach's internals and API. Oh well.) A few Hurd-specific files were changed to use __host_get_time instead of __clock_gettime, as this seemed tidier. We also assume this cannot fail. Skimming the code in gnumach leads me to believe the only way it could fail is if __mach_host_self also failed, and our Hurd-specific code consistently assumes that can't happen, so I'm going with that. With the exception of support/support_test_main.c, test cases are not modified, mainly because I didn't want to have to figure out which test cases were testing gettimeofday specifically. The definition of GETTIME in sysdeps/generic/memusage.h had a typo and was not reading tv_sec at all. I fixed this. It appears nobody has been generating malloc traces on a machine that doesn't have a superseding definition. There are a whole bunch of places where the code could be simplified by factoring out timespec subtraction and/or comparison logic, but I want to keep this patch as mechanical as possible. * inet/deadline.c (__deadline_current_time) * login/logout.c (logout) * login/logwtmp.c (logwtmp) * nis/nis_call.c (__nisfind_server) * nptl/pthread_join_common.c (timedwait_tid) * nptl/pthread_mutex_timedlock.c (__pthread_mutex_clocklock_common) * nscd/nscd_helper.c (wait_on_socket, open_socket) * resolv/gai_misc.c (handle_requests) * resolv/gai_suspend.c (gai_suspend) * resolv/res_send.c (evNowTime) * sunrpc/auth_des.c (authdes_marshal, authdes_destroy) * sunrpc/auth_unix.c (authunix_create, authunix_refresh) * sunrpc/create_xid.c (_create_xid) * sunrpc/svcauth_des.c (_svcauth_des) * sysdeps/generic/memusage.h (GETTIME) * sysdeps/mach/nanosleep.c (__libc_nanosleep) * sysdeps/posix/tempname.c (RANDOM_BITS) * sysdeps/pthread/aio_misc.c (handle_fildes_io) * sysdeps/pthread/aio_suspend.c (aio_suspend): Use __clock_gettime (CLOCK_REALTIME) instead of __gettimeofday. Assume __clock_gettime (CLOCK_REALTIME) cannot fail. Include time.h if necessary. * sysdeps/posix/timespec_get.c (timespec_get): Assume __clock_gettime (CLOCK_REALTIME) cannot fail. * sysdeps/mach/hurd/getitimer.c (__getitimer) * sysdeps/mach/hurd/setitimer.c (setitimer_locked) * sysdeps/mach/hurd/times.c (__times): Use __host_get_time instead of __gettimeofday. Include mach.h if necessary. Assume __host_get_time (__mach_host_self ()) cannot fail. * sysdeps/mach/usleep.c (usleep): Remove unnecessary calls to __gettimeofday. * support/support_test_main.c (print_timestamp): Take a struct timespec argument, not a struct timeval. (signal_handler): Update to match. Use clock_gettime (CLOCK_REALTIME) instead of gettimeofday. Assume clock_gettime (CLOCK_REALTIME) cannot fail. * sysdeps/generic/memusage.h (GETTIME): Correct typo causing the seconds field of each timestamp to be ignored. * sysdeps/unix/make-syscall.sh: Change an example in a comment from referring to gettimeofday, to referring to sigaction. commit 928c86cae76f23add74e44c5540cc73f57cf4412 Author: Zack Weinberg Date: Mon Aug 19 14:18:08 2019 -0400 Linux/Alpha: don't use timeval32 system calls. Linux/Alpha has two versions of several system call wrappers that take or return data of type "struct timeval" (possibly nested inside a larger structure). The GLIBC_2.0 version is a compat symbol that calls __NR_osf_foo or __NR_old_foo and uses a struct timeval with a 32-bit tv_sec field. The GLIBC_2.1 version is used for current code, calls __NR_foo, and uses a struct timeval with a 64-bit tv_sec field. This patch changes all of the compat symbols of this type to be wrappers around their GLIBC_2.1 counterparts; the compatibility system calls will no longer be used. It serves as a proposal for part of how we do the transition to 64-bit time_t on systems that currently use 32-bit time_t: * The patched glibc will NOT use system calls that involve 32-bit time_t to implement its compatibility symbols. This will make both our lives and the kernel maintainers' lives easier. The primary argument I've seen against it is that the kernel could warn about uses of the old system calls, helping people find old binaries that need to be recompiled. I think there are several other ways we could accomplish this, e.g. scripts to scan the filesystem for binaries with references to the old symbol versions, or issuing diagnostics ourselves. * The compat symbols do NOT report failure after the Y2038 deadline. An earlier revision of this patch had them return -1 and set errno to EOVERFLOW, but Adhemerval pointed out that many of them have already performed side effects at the point where we discover the overflow, so that would break more than it fixes. Also, we don't want people to be _checking_ for EOVERFLOW from these functions; we want them to recompile with 64-bit time_t. So it's not actually useful for them to report failure to the calling code. * What they do do, when they encounter overflow, is saturate the overflowed "struct timeval"(s): tv_sec is set to INT32_MAX and tv_nsec is set to 999999. That means time stops advancing for programs with 32-bit time_t when they reach the deadline. That's obviously going to break stuff, but I think wrapping around is probably going to break _more_ stuff. I'd be interested to hear arguments against, if anyone has one. The new header file tv32-compat.h is currently Alpha-specific but I mean for it to be reused to aid in writing wrappers for all affected architectures. I only put it in sysdeps/unix/sysv/linux/alpha for now because I haven't checked whether the various "foo32" structures it defines agree with the ABI for ports other than Linux/Alpha. * sysdeps/unix/sysv/linux/alpha/tv32-compat.h: New file declaring types and helper functions for 32/64-bit time_t conversion. * sysdeps/unix/sysv/linux/syscalls.list: Remove entry for adjtimex. * sysdeps/unix/sysv/linux/adjtimex.c: New file, allow overriding the version at which adjtimex and ntp_adjtime are defined. * sysdeps/unix/sysv/linux/adjtime.c: Allow overriding the version at which adjtime is defined. (MOD_OFFSET, TIMEVAL, TIMEX, ADJTIME, ADJTIMEX, NO_LOCAL_ADJTIME) (LINKAGE): Remove macros that are no longer needed. * sysdeps/unix/sysv/linux/Makefile (sysdep_routines) [subdir=misc]: Add adjtimex. * sysdeps/unix/sysv/linux/alpha/syscalls.list: Remove entries for osf_gettimeofday, osf_settimeofday, osf_getitimer, osf_setitimer, osf_utimes, osf_getrusage, and osf_wait4. Change entries for gettimeofday, settimeofday, getitimer, setitimer, utimes, getrusage, and wait4 to use argument type codes. * sysdeps/unix/sysv/linux/alpha/adjtime.c: Replace contents; use the generic Linux implementation but override the version of adjtime. * sysdeps/unix/sysv/linux/alpha/adjtimex.c: New file, use the generic Linux implementation but override the versions of adjtimex and ntp_adjtime. * sysdeps/unix/sysv/linux/alpha/osf_adjtime.c * sysdeps/unix/sysv/linux/alpha/osf_getitimer.c * sysdeps/unix/sysv/linux/alpha/osf_getrusage.c * sysdeps/unix/sysv/linux/alpha/osf_gettimeofday.c * sysdeps/unix/sysv/linux/alpha/osf_setitimer.c * sysdeps/unix/sysv/linux/alpha/osf_settimeofday.c * sysdeps/unix/sysv/linux/alpha/osf_utimes.c * sysdeps/unix/sysv/linux/alpha/osf_wait4.c: New files defining compatibility symbols formerly defined by alpha/syscalls.list and alpha/adjtime.c. * sysdeps/unix/sysv/linux/alpha/Makefile (sysdep_routines) [subdir=misc]: Add osf_adjtime.