glibc/include
Lukasz Majewski 258c242128 y2038: linux: Provide __ppoll64 implementation
This patch provides new __ppoll64 explicit 64 bit function for handling polling
events (with struct timespec specified timeout) for a set of file descriptors.
Moreover, a 32 bit version - __ppoll has been refactored to internally use
__ppoll64.

The __ppoll is now supposed to be used on systems still supporting 32 bit time
(__TIMESIZE != 64) - hence the necessary conversion to 64 bit struct
__timespec64.

The new ppoll_time64 syscall available from Linux 5.1+ has been used, when
applicable.

The Linux kernel checks if passed tv_nsec value overflows, so there is no need
to repeat it in the glibc.

When ppoll syscall on systems supporting 32 bit time ABI is used, the check is
performed if passed data (which may have 64 bit tv_sec) fits into 32 bit range.

Build tests:
- The code has been tested on x86_64/x86 (native compilation):
make PARALLELMFLAGS="-j8" && make check PARALLELMFLAGS="-j8" && \\
make xcheck PARALLELMFLAGS="-j8"

- The glibc has been build tested (make PARALLELMFLAGS="-j8") for
x86 (i386), x86_64-x32, and armv7

Run-time tests:
- Run specific tests on ARM/x86 32bit systems (qemu):
  https://github.com/lmajewski/meta-y2038 and run tests:
  https://github.com/lmajewski/y2038-tests/commits/master

- Use of cross-test-ssh.sh for ARM (armv7):
  make PARALLELMFLAGS="-j8" test-wrapper='./cross-test-ssh.sh root@192.168.7.2' xcheck

Linux kernel, headers and minimal kernel version for glibc build test
matrix:
- Linux v5.1 (with ppoll_time64) and glibc build with v5.1 as
  minimal kernel version (--enable-kernel="5.1.0")
  The __ASSUME_TIME64_SYSCALLS flag defined.

- Linux v5.1 and default minimal kernel version
  The __ASSUME_TIME64_SYSCALLS not defined, but kernel supports ppoll_time64
  syscall.

- Linux v4.19 (no ppoll_time64 support) with default minimal kernel version for
  contemporary glibc
  This kernel doesn't support ppoll_time64 syscall, so the fallback to ppoll is
  tested.

Above tests were performed with Y2038 redirection applied as well as without
(so the __TIMESIZE != 64 execution path is checked as well).

No regressions were observed.
2019-11-11 14:41:43 +01:00
..
arpa CVE-2016-10739: getaddrinfo: Fully parse IPv4 address strings [BZ #20018] 2019-01-21 21:26:03 +01:00
bits Split up endian.h to minimize exposure of BYTE_ORDER. 2019-10-01 14:54:46 -07:00
gnu Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
net Fix resolver if_* namespace (bug 17717). 2014-12-16 18:18:49 +00:00
netinet Add missing header wrappers under include/ 2019-02-16 08:25:16 +01:00
programs Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
protocols (abmon): Remove spaces. 1998-11-12 18:03:43 +00:00
rpc Run thread shutdown functions in an explicit order 2018-06-26 15:27:12 +02:00
rpcsvc Add missing header wrappers under include/ 2019-02-16 08:25:16 +01:00
sys y2038: linux: Provide __ppoll64 implementation 2019-11-11 14:41:43 +01:00
aio.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
aliases.h Mark internal getXXXbyYYY functions with attribute_hidden [BZ #18822] 2017-10-01 15:21:00 -07:00
alloc_buffer.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
alloca.h Remove macros extend_alloca, extend_alloca_account [BZ #18023] 2018-06-27 19:20:37 +02:00
allocate_once.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
ar.h Add missing header wrappers under include/ 2019-02-16 08:25:16 +01:00
argp-fmtstream.h Mark internal argp functions with attribute_hidden [BZ #18822] 2017-10-01 15:10:27 -07:00
argp.h ldbl-opt: Add argp_error and argp_failure (bug 23983) 2019-03-01 15:21:32 -03:00
argz.h Use libc_hidden_* for argz_next, __argz_next (bug 15105). 2018-02-15 21:00:02 +00:00
array_length.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
assert.h Introduce NO_RTLD_HIDDEN, make hurd use it instead of NO_HIDDEN 2017-10-03 01:33:38 +02:00
atomic.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
byteswap.h Update. 1998-04-10 10:52:25 +00:00
complex.h float128: Add private _Float128 declarations for libm. 2017-05-15 10:23:28 -03:00
cpio.h Add more headers to include/ for conform tests. 2014-12-11 21:41:30 +00:00
crypt.h Add include/crypt.h. 2016-10-28 22:40:16 -04:00
ctype.h Use libc_hidden_* for tolower, toupper (bug 15105). 2018-02-23 13:54:53 +00:00
des.h Update. 1998-03-24 10:39:42 +00:00
dirent.h <dirent.h>: Remove wrong comment about getdents64 declaration 2019-10-09 11:31:03 +02:00
dlfcn.h dlfcn: Remove remnants of caller sensitivity from dlinfo 2019-10-16 18:21:30 +02:00
dso_handle.h Mark __dso_handle as hidden [BZ #18822] 2017-09-26 16:53:44 -07:00
elf.h elf: Refuse to dlopen PIE objects [BZ #24323] 2019-06-18 16:42:10 +02:00
endian.h Update. 2001-03-30 05:34:59 +00:00
envz.h Installed header hygiene (BZ#20366): Test of installed headers. 2016-09-23 08:43:56 -04:00
err.h ldbl-opt: Add err, errx, verr, verrx, warn, warnx, vwarn, and vwarnx (bug 23984) 2019-03-01 15:24:51 -03:00
errno.h hurd: Fix accessing errno from rtld 2018-03-25 00:48:01 +01:00
error.h ldbl-opt: Add error and error_at_line (bug 23984) 2019-03-01 15:26:36 -03:00
execinfo.h Installed header hygiene (BZ#20366): Test of installed headers. 2016-09-23 08:43:56 -04:00
fcntl.h Fix Linux fcntl OFD locks for non-LFS architectures (BZ#20251) 2018-06-26 13:22:53 -03:00
features.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
fenv.h Move fenv.h soft-float inlines from fenv_private.h to include/fenv.h. 2018-09-04 19:52:06 +00:00
float.h Make totalorder and totalordermag functions take pointer arguments. 2019-08-15 15:18:34 +00:00
fmtmsg.h Add more headers to include/ for conform tests. 2014-12-11 21:41:30 +00:00
fnmatch.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
fpu_control.h Hide internal __setfpucw function [BZ #18822] 2017-10-01 17:52:15 -07:00
fstab.h Add missing header wrappers under include/ 2019-02-16 08:25:16 +01:00
fts.h Add missing header wrappers under include/ 2019-02-16 08:25:16 +01:00
ftw.h Update. 1997-06-21 02:59:26 +00:00
gconv.h Update. 1997-11-18 02:50:07 +00:00
getopt_int.h Update. 2004-03-09 10:36:53 +00:00
getopt.h getopt: remove USE_NONOPTION_FLAGS 2017-04-07 07:45:53 -04:00
glob.h Hide internal __glob64 function [BZ #18822] 2017-10-01 18:02:10 -07:00
gmp.h Mark internal gmp functions with attribute_hidden [BZ #18822] 2017-10-01 15:15:30 -07:00
gnu-versions.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
grp-merge.h NSS: Implement group merging support. 2016-04-29 22:18:21 -04:00
grp.h Mark internal grp/pwd/shadow functions with attribute_hidden [BZ #18822] 2017-10-01 15:13:13 -07:00
gshadow.h Mark internal gshadow functions with attribute_hidden [BZ #18822] 2017-10-01 15:19:17 -07:00
iconv.h Update. 1999-08-21 00:38:15 +00:00
ifaddrs.h hurd: Fix getifaddrs' and freeifaddrs' symbol exposition 2017-09-28 01:05:18 +02:00
ifreq.h Hide internal __ifreq function [BZ #18822] 2017-10-01 17:35:46 -07:00
ifunc-impl-list.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
inline-hashtab.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
intprops.h Sync intprops.h with gnulib 2019-10-31 17:02:49 -03:00
inttypes.h Move inttypes.h and stdint.h to stdlib. 2019-03-13 09:42:09 -04:00
langinfo.h Add first fixes for conformtest for POSIX2008 2012-02-26 21:32:56 -05:00
lastlog.h Add missing header wrappers under include/ 2019-02-16 08:25:16 +01:00
libc-diag.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
libc-internal.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
libc-pointer-arith.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
libc-symbols.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
libgen.h Update. 1997-06-21 02:59:26 +00:00
libintl.h Installed header hygiene (BZ#20366): Test of installed headers. 2016-09-23 08:43:56 -04:00
limits.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
link.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
list_t.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
list.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
locale.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
loop_unroll.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
malloc.h Don't declare __malloc_check_init in <malloc.h> (bug 23352) 2019-07-10 15:04:05 +02:00
math-narrow-eval.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
math.h Use copysign functions not __copysign functions in glibc libm. 2018-09-27 20:04:48 +00:00
mcheck.h Installed header hygiene (BZ#20366): Test of installed headers. 2016-09-23 08:43:56 -04:00
memory.h Update. 1997-06-21 02:59:26 +00:00
mntent.h Hide internal __hasmntopt function [BZ #18822] 2017-10-01 17:37:42 -07:00
monetary.h Use STRFMON_LDBL_IS_DBL instead of __ldbl_is_dbl. 2018-11-16 09:21:14 -02:00
mqueue.h Fix mq_receive, mq_send mq_timed* namespace (bug 18545). 2015-06-17 20:19:04 +00:00
netdb.h Mark internal getXXXbyYYY functions with attribute_hidden [BZ #18822] 2017-10-01 15:21:00 -07:00
netgroup.h Update. 1997-06-21 02:59:26 +00:00
nl_types.h Update. 1997-12-22 20:53:38 +00:00
nss.h nss: Export nscd hash function as __nss_hash [BZ #22459] 2017-11-23 14:08:11 +01:00
nsswitch.h Update. 1997-06-21 02:59:26 +00:00
obstack.h Installed header hygiene (BZ#20366): Test of installed headers. 2016-09-23 08:43:56 -04:00
plural-exp.h Hide internal __gettextparse function [BZ #18822] 2017-10-01 17:31:05 -07:00
poll.h Update. 2000-08-21 16:02:48 +00:00
printf.h Hide internal printf functions [BZ #18822/21986] 2017-08-22 07:50:57 -07:00
pthread.h Fix mq_notify pthread_barrier_* namespace (bug 18544). 2015-06-17 20:16:56 +00:00
pty.h Installed header hygiene (BZ#20366): Test of installed headers. 2016-09-23 08:43:56 -04:00
pwd.h Mark internal grp/pwd/shadow functions with attribute_hidden [BZ #18822] 2017-10-01 15:13:13 -07:00
random-bits.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
re_comp.h Add missing header wrappers under include/ 2019-02-16 08:25:16 +01:00
regex.h Hide internal regex functions [BZ #18822] 2017-10-01 15:53:15 -07:00
regexp.h Add missing header wrappers under include/ 2019-02-16 08:25:16 +01:00
resolv.h Obsolete p_secstodate. 2017-11-22 22:21:10 +00:00
rounding-mode.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
sched.h Don't use __typeof__ (getcpu) 2018-12-07 12:47:41 -08:00
scratch_buffer.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
search.h misc: Add twalk_r function 2019-05-02 11:42:51 +02:00
set-hooks.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
setjmp.h Make totalorder and totalordermag functions take pointer arguments. 2019-08-15 15:18:34 +00:00
sgtty.h Update. 1997-06-21 02:59:26 +00:00
shadow.h Mark internal grp/pwd/shadow functions with attribute_hidden [BZ #18822] 2017-10-01 15:13:13 -07:00
shlib-compat.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
signal.h Introduce NO_RTLD_HIDDEN, make hurd use it instead of NO_HIDDEN 2017-10-03 01:33:38 +02:00
spawn.h posix: Use posix_spawn for wordexp 2019-10-09 17:48:41 -03:00
stab.h Update. 1997-06-21 02:59:26 +00:00
stackinfo.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
stap-probe.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
stdc-predef.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
stdint.h Move inttypes.h and stdint.h to stdlib. 2019-03-13 09:42:09 -04:00
stdio_ext.h Installed header hygiene (BZ#20366): Test of installed headers. 2016-09-23 08:43:56 -04:00
stdio.h Do not print backtraces on fatal glibc errors 2019-08-19 15:41:29 +02:00
stdlib.h Use libc_hidden_* for atoi (bug 15105). 2018-02-26 18:17:47 +00:00
string.h Run thread shutdown functions in an explicit order 2018-06-26 15:27:12 +02:00
strings.h Update. 1997-06-21 02:59:26 +00:00
stubs-prologue.h * sysdeps/generic/bits/libc-tsd.h [USE___THREAD]: Conditional 2002-10-11 10:52:20 +00:00
syscall.h Update. 1997-06-21 02:59:26 +00:00
sysexits.h Update. 1997-06-21 02:59:26 +00:00
syslog.h Update. 1997-06-21 02:59:26 +00:00
tar.h Update. 1997-06-21 02:59:26 +00:00
termios.h Hide internal __tcgetattr function [BZ #18822] 2017-10-01 17:48:24 -07:00
tgmath.h Update. 1998-09-06 23:45:24 +00:00
time.h sysdeps/clock_nanosleep: Use clock_nanosleep_time64 if avaliable 2019-11-08 12:06:17 -08:00
ttyent.h Installed header hygiene (BZ#20366): Test of installed headers. 2016-09-23 08:43:56 -04:00
uchar.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
ucontext.h Update. 1999-10-12 18:17:41 +00:00
ulimit.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
unistd.h hurd: Fix linknamespace of spawni 2018-12-07 20:21:45 +01:00
utime.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00
utmp.h Mark internal utmp functions with attribute_hidden [BZ #18822] 2017-10-01 15:51:56 -07:00
values.h Prefer https to http for gnu.org and fsf.org URLs 2019-09-07 02:43:31 -07:00
verify.h posix: Sync regex with gnulib 2019-11-06 09:20:52 -03:00
wait.h Add missing header wrappers under include/ 2019-02-16 08:25:16 +01:00
wchar.h wcsmbs: optimize wcscat 2019-02-27 10:00:37 -03:00
wctype.h Remove __need macros from stdio.h and wchar.h. 2017-06-08 13:58:17 -04:00
wordexp.h First steps to get conformtest fully working 2012-02-25 23:18:39 -05:00