This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH v7] y2038: Introduce __ASSUME_TIME64_SYSCALLS define
- From: Joseph Myers <joseph at codesourcery dot com>
- To: Lukasz Majewski <lukma at denx dot de>
- Cc: <libc-alpha at sourceware dot org>, Stepan Golosunov <stepan at golosunov dot pp dot ru>, Arnd Bergmann <arnd at arndb dot de>, Paul Eggert <eggert at cs dot ucla dot edu>
- Date: Thu, 13 Jun 2019 16:28:34 +0000
- Subject: Re: [PATCH v7] y2038: Introduce __ASSUME_TIME64_SYSCALLS define
- References: <20190611160243.3134-1-lukma@denx.de>
On Tue, 11 Jun 2019, Lukasz Majewski wrote:
> Syscall's ABI compatibility checking:
>
> 1. Code to check if syscalls are defined since v3.2 kernel on the
> intersection of archs supported by v3.2 kernel and contemporary glibc
> (SHA1: e6e24243905957c36596f50a22af0acfd83793e2):
>
> (Assumption: syscall ABI change require changing the name - like __NR_epoll_create
> and __NR_epoll_create1)
>
> export syscalls_table="\
> clock_gettime clock_settime clock_adjtime \
> clock_getres clock_nanosleep timer_gettime \
> timer_settime timerfd_gettime timerfd_settime \
> utimensat pselect6 ppoll io_pgetevents recvmmsg \
> mq_timedsend mq_timedreceive rt_sigtimedwait futex \
> sched_rr_get_interval"
>
> for syscall in ${syscalls_table} ; do echo -n "syscall: ${syscall} -> "; \
> grep -rnIw "__NR_${syscall}" | grep ^arch/ | \
> grep -vE "mn10300|avr32|cris|m32r|frv|blackfin|xtensa|h8300|vdso" | \
> wc -l; done
This is not quite sufficient. It's possible for a syscall to be mentioned
in an architecture's asm/unistd.h but not in the actual syscall table, for
example (or mentioned inside #if 0).
You do need to check the relevant files for each architecture. *But* only
architectures with 64-bit syscall interfaces are relevant, because those
with 32-bit syscall interfaces won't get __ASSUME_TIME64_SYSCALLS defined
for kernels before 5.1 anyway. So it doesn't matter whether a syscall was
present for arm or m68k, for example.
(For example: before 3.15, microblaze didn't have pselect6 in its syscall
table, though it had it in asm/unistd.h. But there's no reason to exclude
pselect6 from this patch, because microblaze is a 32-bit architecture, and
all 64-bit architectures / syscall ABIs had that syscall already in 3.2.)
So you care about (glibc architecture names): aarch64 alpha ia64 mips (n64
and n32 syscall ABIs) powerpc (64-bit syscall ABI) riscv (64-bit syscall
ABI) s390 (64-bit syscall ABI) sparc (64-bit syscall ABI) x86_64 (classic
and x32 syscall ABIs). The 64-bit versions of hppa and sh are not
relevant because they aren't supported by glibc.
> - 32 bit: nios2, csky, hppa (is the same as parisc?) - no need to
Yes, hppa is called parisc in the Linux kernel. There are a few such
cases where the names are different (e.g. the Linux kernel uses "arm64" as
the name for aarch64).
--
Joseph S. Myers
joseph@codesourcery.com