mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-26 04:31:03 +00:00
y2038: Introduce struct __timex64 - new internal glibc type
The introduced glibc's 'internal' struct __timex64 is a copy of Linux kernel's struct __kernel_timex (v5.6) introduced for properly handling data for clock_adjtime64 syscall. As the struct's __kernel_timex size is the same as for archs with __WORDSIZE == 64, proper padding and data types conversion (i.e. long to long long) had to be added for architectures with __WORDSIZE == 32 && __TIMESIZE != 64. Moreover, it stores time in struct __timeval64 rather than struct timeval, which makes it Y2038-proof. Build tests: ./src/scripts/build-many-glibcs.py glibcs Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
a308615f7c
commit
dbf8178fdc
@ -25,5 +25,51 @@
|
||||
|
||||
libc_hidden_proto (__adjtimex)
|
||||
|
||||
# include <struct___timeval64.h>
|
||||
/* Local definition of 64 bit time supporting timex struct */
|
||||
# if __TIMESIZE == 64
|
||||
# define __timex64 timex
|
||||
# else
|
||||
|
||||
struct __timex64
|
||||
{
|
||||
unsigned int modes; /* mode selector */
|
||||
int :32; /* pad */
|
||||
long long int offset; /* time offset (usec) */
|
||||
long long int freq; /* frequency offset (scaled ppm) */
|
||||
long long int maxerror; /* maximum error (usec) */
|
||||
long long int esterror; /* estimated error (usec) */
|
||||
int status; /* clock command/status */
|
||||
int :32; /* pad */
|
||||
long long int constant; /* pll time constant */
|
||||
long long int precision; /* clock precision (usec) (read only) */
|
||||
long long int tolerance; /* clock frequency tolerance (ppm) (ro) */
|
||||
struct __timeval64 time; /* (read only, except for ADJ_SETOFFSET) */
|
||||
long long int tick; /* (modified) usecs between clock ticks */
|
||||
long long int ppsfreq; /* pps frequency (scaled ppm) (ro) */
|
||||
long long int jitter; /* pps jitter (us) (ro) */
|
||||
int shift; /* interval duration (s) (shift) (ro) */
|
||||
int :32; /* pad */
|
||||
long long int stabil; /* pps stability (scaled ppm) (ro) */
|
||||
long long int jitcnt; /* jitter limit exceeded (ro) */
|
||||
long long int calcnt; /* calibration intervals (ro) */
|
||||
long long int errcnt; /* calibration errors (ro) */
|
||||
long long int stbcnt; /* stability limit exceeded (ro) */
|
||||
|
||||
int tai; /* TAI offset (ro) */
|
||||
|
||||
int :32;
|
||||
int :32;
|
||||
int :32;
|
||||
int :32;
|
||||
int :32;
|
||||
int :32;
|
||||
int :32;
|
||||
int :32;
|
||||
int :32;
|
||||
int :32;
|
||||
int :32;
|
||||
};
|
||||
# endif
|
||||
# endif /* _ISOMAC */
|
||||
#endif /* sys/timex.h */
|
||||
|
Loading…
Reference in New Issue
Block a user