mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-25 22:40:05 +00:00
c3f9aef063
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 settimeoday syscall is enabled on Linux by the flag COMPAT_32BIT_TIME, which is an option to either 32-bits ABIs or COMPAT builds (defined usually by 64-bit kernels that want to support 32-bit ABIs, such as x86). The idea to future 64-bit time_t only ABIs is to not provide settimeofday syscall. 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. Checked on x86_64-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu, powerpc64-linux-gnu, powerpc-linux-gnu, and aarch64-linux-gnu. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> Reviewed-by: Lukasz Majewski <lukma@denx.de>
87 lines
3.1 KiB
Makefile
87 lines
3.1 KiB
Makefile
# Copyright (C) 1991-2019 Free Software Foundation, Inc.
|
|
# This file is part of the GNU C Library.
|
|
|
|
# The GNU C Library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|
|
|
# The GNU C Library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Lesser General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with the GNU C Library; if not, see
|
|
# <https://www.gnu.org/licenses/>.
|
|
|
|
#
|
|
# Makefile for time routines
|
|
#
|
|
subdir := time
|
|
|
|
include ../Makeconfig
|
|
|
|
headers := time.h sys/time.h sys/timeb.h bits/time.h \
|
|
bits/types/clockid_t.h bits/types/clock_t.h \
|
|
bits/types/struct_itimerspec.h \
|
|
bits/types/struct_timespec.h bits/types/struct_timeval.h \
|
|
bits/types/struct_tm.h bits/types/timer_t.h \
|
|
bits/types/time_t.h
|
|
|
|
routines := offtime asctime clock ctime ctime_r difftime \
|
|
gmtime localtime mktime time \
|
|
gettimeofday settimeofday settimezone \
|
|
adjtime tzset tzfile getitimer setitimer \
|
|
stime dysize timegm ftime \
|
|
getdate strptime strptime_l \
|
|
strftime wcsftime strftime_l wcsftime_l \
|
|
timespec_get \
|
|
clock_getcpuclockid clock_getres \
|
|
clock_gettime clock_settime clock_nanosleep
|
|
|
|
aux := era alt_digit lc-time-cleanup
|
|
|
|
tests := test_time clocktest tst-posixtz tst-strptime tst_wcsftime \
|
|
tst-getdate tst-mktime tst-mktime2 tst-ftime_l tst-strftime \
|
|
tst-mktime3 tst-strptime2 bug-asctime bug-asctime_r bug-mktime1 \
|
|
tst-strptime3 bug-getdate1 tst-strptime-whitespace tst-ftime \
|
|
tst-tzname tst-y2039 bug-mktime4 tst-strftime2 tst-strftime3 \
|
|
tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1
|
|
|
|
include ../Rules
|
|
|
|
ifeq ($(run-built-tests),yes)
|
|
LOCALES := de_DE.ISO-8859-1 en_US.ISO-8859-1 ja_JP.EUC-JP fr_FR.UTF-8 \
|
|
es_ES.UTF-8 pl_PL.UTF-8 ru_RU.UTF-8 \
|
|
ja_JP.UTF-8 lo_LA.UTF-8 th_TH.UTF-8 \
|
|
zh_TW.UTF-8 cmn_TW.UTF-8 hak_TW.UTF-8 \
|
|
nan_TW.UTF-8 lzh_TW.UTF-8
|
|
include ../gen-locales.mk
|
|
|
|
$(objpfx)tst-ftime_l.out: $(gen-locales)
|
|
$(objpfx)tst-strptime.out: $(gen-locales)
|
|
$(objpfx)tst-strftime2.out: $(gen-locales)
|
|
$(objpfx)tst-strftime3.out: $(gen-locales)
|
|
endif
|
|
|
|
tz-cflags = -DTZDIR='"$(zonedir)"' \
|
|
-DTZDEFAULT='"$(localtime-file)"' \
|
|
-DTZDEFRULES='"$(posixrules-file)"'
|
|
|
|
CFLAGS-tzfile.c += $(tz-cflags)
|
|
CFLAGS-tzset.c += $(tz-cflags)
|
|
CFLAGS-getdate.c += -fexceptions
|
|
CFLAGS-clock_nanosleep.c += -fexceptions -fasynchronous-unwind-tables
|
|
|
|
# Don't warn about Y2k problem in strftime format string.
|
|
CFLAGS-test_time.c += -Wno-format
|
|
|
|
tst-getdate-ENV= DATEMSK=datemsk TZDIR=${common-objpfx}timezone/testdata
|
|
test_time-ARGS= EST5EDT CST
|
|
|
|
tst-tzname-ENV = TZDIR=${common-objpfx}timezone/testdata
|
|
CPPFLAGS-tst-tzname.c += -DTZDEFRULES='"$(posixrules-file)"'
|
|
|
|
bug-getdate1-ARGS = ${objpfx}bug-getdate1-fmt
|