From patchwork Tue Aug 20 13:21:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Zack Weinberg X-Patchwork-Id: 34193 Received: (qmail 10082 invoked by alias); 20 Aug 2019 13:37:06 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 9993 invoked by uid 89); 20 Aug 2019 13:37:06 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-17.8 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.1 spammy=iii X-HELO: l2mail1.panix.com From: Zack Weinberg To: libc-alpha@sourceware.org Cc: Joseph Myers , Florian Weimer , Lukasz Majewski , Alistair Francis , Stepan Golosunov , Arnd Bergmann Subject: [PATCH 08/12] Use clock_gettime to implement gettimeofday. Date: Tue, 20 Aug 2019 09:21:48 -0400 Message-Id: <20190820132152.24100-9-zackw@panix.com> In-Reply-To: <20190820132152.24100-1-zackw@panix.com> References: <20190820132152.24100-1-zackw@panix.com> MIME-Version: 1.0 Abstractly, this is the same change as using clock_gettime to implement time, but the vestigial “get time zone” feature of gettimeofday complicates matters a little. Unlike settimeofday, there are *no* known uses of this feature that are not bugs, so it is simply dummied out. (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.) 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. Hurd having already been converted, this patch only affects Linux and hypothetical future ports. Most Linux ports supplied a vDSO symbol for gettimeofday, and some wrapped that with an ifunc, so this patch deletes a lot of code. For ease of future edits to the many copies of _libc_vdso_platform_setup, the variable ‘p’ in each is now declared separately from any use of it. As with settimeofday, the alpha-linux-gnu configuration has two versions, GLIBC_2.0 and GLIBC_2.1, with the older symbol using 32-bit time_t (yes, really) and the same solution is implemented here. __gettimeofday is no longer called by anyone, so remove its internal prototype and its entries in Versions and .abilist files. (It would have been a GLIBC_PRIVATE symbol if the GLIBC_PRIVATE convention had been invented back in the days of 2.0.) * 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_def for __gettimeofday and libc_hidden_weak for gettimeofday. Optionally override the default symbol version for gettimeofday. * include/sys/time.h: Remove internal prototype and libc_hidden_proto for __gettimeofday, and libc_hidden_proto for gettimeofday. * time/Versions * sysdeps/unix/sysv/linux/alpha/Versions * sysdeps/**/libc.abilist: Remove entry for __gettimeofday. * sysdeps/unix/sysv/linux/aarch64/init-first.c * sysdeps/unix/sysv/linux/arm/init-first.c * sysdeps/unix/sysv/linux/mips/init-first.c * sysdeps/unix/sysv/linux/powerpc/init-first.c * sysdeps/unix/sysv/linux/riscv/init-first.c * sysdeps/unix/sysv/linux/s390/init-first.c * sysdeps/unix/sysv/linux/sparc/init-first.c: Do not define nor initialize VDSO_SYMBOL(gettimeofday). * sysdeps/unix/sysv/linux/aarch64/libc-vdso.h * sysdeps/unix/sysv/linux/arm/libc-vdso.h * sysdeps/unix/sysv/linux/mips/libc-vdso.h * sysdeps/unix/sysv/linux/powerpc/libc-vdso.h * sysdeps/unix/sysv/linux/riscv/libc-vdso.h * sysdeps/unix/sysv/linux/s390/libc-vdso.h * sysdeps/unix/sysv/linux/sparc/libc-vdso.h: Do not declare VDSO_SYMBOL(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/x86_64/x32/syscalls.list: Remove entry for gettimeofday. * sysdeps/posix/gettimeofday.c * sysdeps/unix/sysv/linux/aarch64/gettimeofday.c * sysdeps/unix/sysv/linux/gettimeofday.c * sysdeps/unix/sysv/linux/i386/gettimeofday.c * sysdeps/unix/sysv/linux/powerpc/gettimeofday.c * sysdeps/unix/sysv/linux/x86/gettimeofday.c: Delete file. * sysdeps/unix/sysv/linux/alpha/osf_gettimeofday.c: New file, defines gettimeofday@GLIBC_2.0. * sysdeps/unix/sysv/linux/alpha/gettimeofday.c New file, defines gettimeofday@@GLIBC_2.1. * sysdeps/unix/make-syscalls.sh: Change an example in a comment from referring to gettimeofday, to referring to sigaction. --- include/sys/time.h | 4 - sysdeps/mach/hurd/i386/libc.abilist | 1 - sysdeps/posix/gettimeofday.c | 67 --------------- sysdeps/unix/make-syscalls.sh | 2 +- sysdeps/unix/syscalls.list | 1 - .../unix/sysv/linux/aarch64/gettimeofday.c | 71 ---------------- sysdeps/unix/sysv/linux/aarch64/init-first.c | 7 +- sysdeps/unix/sysv/linux/aarch64/libc-vdso.h | 2 - sysdeps/unix/sysv/linux/aarch64/libc.abilist | 1 - sysdeps/unix/sysv/linux/alpha/Versions | 1 - .../sysv/linux/{i386 => alpha}/gettimeofday.c | 25 ++---- sysdeps/unix/sysv/linux/alpha/libc.abilist | 2 - .../unix/sysv/linux/alpha/osf_gettimeofday.c | 66 ++++++++++++++ sysdeps/unix/sysv/linux/alpha/syscalls.list | 2 - sysdeps/unix/sysv/linux/arm/init-first.c | 7 +- sysdeps/unix/sysv/linux/arm/libc-vdso.h | 2 - sysdeps/unix/sysv/linux/arm/libc.abilist | 1 - sysdeps/unix/sysv/linux/csky/libc.abilist | 1 - sysdeps/unix/sysv/linux/gettimeofday.c | 39 --------- sysdeps/unix/sysv/linux/hppa/libc.abilist | 1 - sysdeps/unix/sysv/linux/i386/libc.abilist | 1 - sysdeps/unix/sysv/linux/ia64/libc.abilist | 1 - .../sysv/linux/m68k/coldfire/libc.abilist | 1 - .../unix/sysv/linux/m68k/m680x0/libc.abilist | 1 - .../unix/sysv/linux/microblaze/libc.abilist | 1 - sysdeps/unix/sysv/linux/mips/init-first.c | 7 +- sysdeps/unix/sysv/linux/mips/libc-vdso.h | 2 - .../sysv/linux/mips/mips32/fpu/libc.abilist | 1 - .../sysv/linux/mips/mips32/nofpu/libc.abilist | 1 - .../sysv/linux/mips/mips64/n32/libc.abilist | 1 - .../sysv/linux/mips/mips64/n64/libc.abilist | 1 - sysdeps/unix/sysv/linux/nios2/libc.abilist | 1 - .../unix/sysv/linux/powerpc/gettimeofday.c | 85 ------------------- sysdeps/unix/sysv/linux/powerpc/init-first.c | 8 +- sysdeps/unix/sysv/linux/powerpc/libc-vdso.h | 2 - .../linux/powerpc/powerpc32/fpu/libc.abilist | 1 - .../powerpc/powerpc32/nofpu/libc.abilist | 1 - .../linux/powerpc/powerpc64/be/libc.abilist | 1 - .../linux/powerpc/powerpc64/le/libc.abilist | 1 - sysdeps/unix/sysv/linux/riscv/init-first.c | 10 +-- sysdeps/unix/sysv/linux/riscv/libc-vdso.h | 2 - .../unix/sysv/linux/riscv/rv64/libc.abilist | 1 - sysdeps/unix/sysv/linux/s390/init-first.c | 9 +- sysdeps/unix/sysv/linux/s390/libc-vdso.h | 3 - .../unix/sysv/linux/s390/s390-32/libc.abilist | 1 - .../unix/sysv/linux/s390/s390-64/libc.abilist | 1 - sysdeps/unix/sysv/linux/sh/libc.abilist | 1 - sysdeps/unix/sysv/linux/sparc/init-first.c | 8 +- sysdeps/unix/sysv/linux/sparc/libc-vdso.h | 2 - .../sysv/linux/sparc/sparc32/libc.abilist | 1 - .../sysv/linux/sparc/sparc64/libc.abilist | 1 - sysdeps/unix/sysv/linux/x86/gettimeofday.c | 61 ------------- .../unix/sysv/linux/x86_64/64/libc.abilist | 1 - .../unix/sysv/linux/x86_64/x32/libc.abilist | 1 - .../unix/sysv/linux/x86_64/x32/syscalls.list | 1 - time/Versions | 2 +- time/gettimeofday.c | 28 ++++-- 57 files changed, 108 insertions(+), 447 deletions(-) delete mode 100644 sysdeps/posix/gettimeofday.c delete mode 100644 sysdeps/unix/sysv/linux/aarch64/gettimeofday.c rename sysdeps/unix/sysv/linux/{i386 => alpha}/gettimeofday.c (58%) create mode 100644 sysdeps/unix/sysv/linux/alpha/osf_gettimeofday.c delete mode 100644 sysdeps/unix/sysv/linux/gettimeofday.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/gettimeofday.c delete mode 100644 sysdeps/unix/sysv/linux/x86/gettimeofday.c diff --git a/include/sys/time.h b/include/sys/time.h index a57752e8c7..4a91622096 100644 --- a/include/sys/time.h +++ b/include/sys/time.h @@ -20,10 +20,6 @@ # include