Message ID | 1478114813-3526-2-git-send-email-adhemerval.zanella@linaro.org |
---|---|
State | Superseded |
Headers | show |
On Wed, 2 Nov 2016, Adhemerval Zanella wrote: > The architectures that only supports ipc syscall are: > > - i386, m68k, microblaze, mips32, powerpc (powerpc32, powerpc64, and > powerpc64le), s390 (32 and 64 bits), sh, sparc32, and sparc64. You list microblaze in this list, but I don't see a corresponding kernel-features.h #undef for it. -- Joseph S. Myers joseph@codesourcery.com
On 02/11/2016 19:10, Joseph Myers wrote: > On Wed, 2 Nov 2016, Adhemerval Zanella wrote: > >> The architectures that only supports ipc syscall are: >> >> - i386, m68k, microblaze, mips32, powerpc (powerpc32, powerpc64, and >> powerpc64le), s390 (32 and 64 bits), sh, sparc32, and sparc64. > > You list microblaze in this list, but I don't see a corresponding > kernel-features.h #undef for it. > It is indeed a mistake from the script I used to check various kernel syscall table list. On 3.2, microblaze code [1] in fact defines the old ipc syscall as 'sys_ni_syscall', so the architecture only supports wire ones. I am rechecking all architectures to see I missed something related. [1] arch/microblaze/kernel/syscall_table.S
On 02/11/2016 20:27, Adhemerval Zanella wrote: > > > On 02/11/2016 19:10, Joseph Myers wrote: >> On Wed, 2 Nov 2016, Adhemerval Zanella wrote: >> >>> The architectures that only supports ipc syscall are: >>> >>> - i386, m68k, microblaze, mips32, powerpc (powerpc32, powerpc64, and >>> powerpc64le), s390 (32 and 64 bits), sh, sparc32, and sparc64. >> >> You list microblaze in this list, but I don't see a corresponding >> kernel-features.h #undef for it. >> > > It is indeed a mistake from the script I used to check various kernel > syscall table list. On 3.2, microblaze code [1] in fact defines > the old ipc syscall as 'sys_ni_syscall', so the architecture only > supports wire ones. > > I am rechecking all architectures to see I missed something related. Microblaze seems the only one that I got a wrong result (basically my script was grepping a comment about sys_ipc without checking if it was defined as sys_ni_syscall).
On Wed, Nov 02, 2016 at 05:26:38PM -0200, Adhemerval Zanella wrote: > Changes from previous version: > > - Use __ASSUME_SYSVIPC_SYSCALL instead of __NR_syscall to issue the > wired syscall or the ipc one. > > -- > > On current minimum supported kernels, the SysV IPC on Linux is provided > by either the ipc syscalls or correspondent wire syscalls. Also, for > architectures that supports wire syscalls all syscalls are supported > in a set (msgct, msgrcv, msgsnd, msgget, semctl, semget, semop, semtimedop, > shmctl, shmat, shmget, shmdt). > > The architectures that only supports ipc syscall are: > > - i386, m68k, microblaze, mips32, powerpc (powerpc32, powerpc64, and > powerpc64le), s390 (32 and 64 bits), sh, sparc32, and sparc64. > > And the architectures that only supports wired syscalls are: > > - aarch64, alpha, hppa, ia64, mips64, mips64n32, nios2, tile > (tilepro, tilegx, and tilegx64), and x86_64 > > Also arm is the only one that supports both wire syscalls and the > ipc, although the ipc one is deprecated. > > This patch adds a new define, __ASSUME_SYSVIPC_SYSCALL, that wired > syscalls are supported on the system and the general idea is to use > it where possible. > > I also checked the syscall table for all architectures on Linux 4.9 > and there is no change on described support for Linux 2.6.32/3.2. > > * sysdeps/unix/sysv/linux/kernel-features.h > (__ASSUME_SYSVIPC_SYSCALL): New define. > * sysdeps/unix/sysv/linux/i386/kernel-features.h > (__ASSUME_SYSVIPC_SYSCALL): Undef. > * sysdeps/unix/sysv/linux/m68k/kernel-features.h > (__ASSUME_SYSVIPC_SYSCALL): Likewise. > * sysdeps/unix/sysv/linux/mips/kernel-features.h > (__ASSUME_SYSVIPC_SYSCALL): Likewise. > * sysdeps/unix/sysv/linux/powerpc/kernel-features.h > (__ASSUME_SYSVIPC_SYSCALL): Likewise. > * sysdeps/unix/sysv/linux/s390/kernel-features.h > (__ASSUME_SYSVIPC_SYSCALL): Likewise. > * sysdeps/unix/sysv/linux/sh/kernel-features.h > (__ASSUME_SYSVIPC_SYSCALL): Likewise. > * sysdeps/unix/sysv/linux/sparc/kernel-features.h > (__ASSUME_SYSVIPC_SYSCALL): Likewise. > --- > ChangeLog | 19 +++++++++++++++++++ > sysdeps/unix/sysv/linux/i386/kernel-features.h | 3 +++ > sysdeps/unix/sysv/linux/kernel-features.h | 4 ++++ > sysdeps/unix/sysv/linux/m68k/kernel-features.h | 3 +++ > sysdeps/unix/sysv/linux/mips/kernel-features.h | 2 ++ > sysdeps/unix/sysv/linux/powerpc/kernel-features.h | 3 +++ > sysdeps/unix/sysv/linux/s390/kernel-features.h | 3 +++ > sysdeps/unix/sysv/linux/sh/kernel-features.h | 3 +++ > sysdeps/unix/sysv/linux/sparc/kernel-features.h | 3 +++ > 9 files changed, 43 insertions(+) > > diff --git a/sysdeps/unix/sysv/linux/i386/kernel-features.h b/sysdeps/unix/sysv/linux/i386/kernel-features.h > index 148963c..3da13d4 100644 > --- a/sysdeps/unix/sysv/linux/i386/kernel-features.h > +++ b/sysdeps/unix/sysv/linux/i386/kernel-features.h > @@ -52,3 +52,6 @@ > # undef __ASSUME_SENDMSG_SYSCALL > # undef __ASSUME_RECVMSG_SYSCALL > #endif > + > +/* i686 only supports ipc syscall. */ > +#undef __ASSUME_SYSVIPC_SYSCALL > diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h > index 1d3b554..cb0bc28 100644 > --- a/sysdeps/unix/sysv/linux/kernel-features.h > +++ b/sysdeps/unix/sysv/linux/kernel-features.h > @@ -147,3 +147,7 @@ > separate syscalls were only added later. */ > #define __ASSUME_SENDMSG_SYSCALL 1 > #define __ASSUME_RECVMSG_SYSCALL 1 > + > +/* Support for SysV IPC through wired syscalls. All supported architectures > + either support ipc syscall and/or all the ipc correspondent syscalls. */ > +#define __ASSUME_SYSVIPC_SYSCALL 1 > diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h > index 46ec601..f0fd7ce 100644 > --- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h > +++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h > @@ -54,3 +54,6 @@ > # undef __ASSUME_REQUEUE_PI > # undef __ASSUME_SET_ROBUST_LIST > #endif > + > +/* m68k only supports ipc syscall. */ > +#undef __ASSUME_SYSVIPC_SYSCALL > diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h > index b486d90..5e88c8e 100644 > --- a/sysdeps/unix/sysv/linux/mips/kernel-features.h > +++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h > @@ -32,6 +32,8 @@ > pairs to start with an even-number register. */ > #if _MIPS_SIM == _ABIO32 > # define __ASSUME_ALIGNED_REGISTER_PAIRS 1 > +/* mips32 only supports ipc syscall. */ > +# undef __ASSUME_SYSVIPC_SYSCALL > #endif > > /* Define that mips64-n32 is a ILP32 ABI to set the correct interface to > diff --git a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h > index 42a53f2..a81caf3 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h > +++ b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h > @@ -52,3 +52,6 @@ > #endif > > #include_next <kernel-features.h> > + > +/* powerpc only supports ipc syscall. */ > +#undef __ASSUME_SYSVIPC_SYSCALL > diff --git a/sysdeps/unix/sysv/linux/s390/kernel-features.h b/sysdeps/unix/sysv/linux/s390/kernel-features.h > index b3edee4..8fd7853 100644 > --- a/sysdeps/unix/sysv/linux/s390/kernel-features.h > +++ b/sysdeps/unix/sysv/linux/s390/kernel-features.h > @@ -48,3 +48,6 @@ > # undef __ASSUME_SENDMSG_SYSCALL > # undef __ASSUME_RECVMSG_SYSCALL > #endif > + Trailing whitespace > +/* s390 only supports ipc syscall. */ > +#undef __ASSUME_SYSVIPC_SYSCALL > diff --git a/sysdeps/unix/sysv/linux/sh/kernel-features.h b/sysdeps/unix/sysv/linux/sh/kernel-features.h > index c5240fa..cb09603 100644 > --- a/sysdeps/unix/sysv/linux/sh/kernel-features.h > +++ b/sysdeps/unix/sysv/linux/sh/kernel-features.h > @@ -49,3 +49,6 @@ > the kernel interface for p{read,write}64 adds a dummy long argument > before the offset. */ > #define __ASSUME_PRW_DUMMY_ARG 1 > + > +/* sh only supports ipc syscall. */ > +#undef __ASSUME_SYSVIPC_SYSCALL > diff --git a/sysdeps/unix/sysv/linux/sparc/kernel-features.h b/sysdeps/unix/sysv/linux/sparc/kernel-features.h > index 69c9c7c..20578bb 100644 > --- a/sysdeps/unix/sysv/linux/sparc/kernel-features.h > +++ b/sysdeps/unix/sysv/linux/sparc/kernel-features.h > @@ -37,3 +37,6 @@ > # undef __ASSUME_REQUEUE_PI > # undef __ASSUME_SET_ROBUST_LIST > #endif > + > +/* sparc only supports ipc syscall. */ > +#undef __ASSUME_SYSVIPC_SYSCALL > -- > 2.7.4
On 03/11/2016 15:06, Yury Norov wrote: >> diff --git a/sysdeps/unix/sysv/linux/s390/kernel-features.h b/sysdeps/unix/sysv/linux/s390/kernel-features.h >> index b3edee4..8fd7853 100644 >> --- a/sysdeps/unix/sysv/linux/s390/kernel-features.h >> +++ b/sysdeps/unix/sysv/linux/s390/kernel-features.h >> @@ -48,3 +48,6 @@ >> # undef __ASSUME_SENDMSG_SYSCALL >> # undef __ASSUME_RECVMSG_SYSCALL >> #endif >> + > > Trailing whitespace Ack, I fixed it in my local branch.
On Wednesday, November 2, 2016 5:26:38 PM CET Adhemerval Zanella wrote: > The architectures that only supports ipc syscall are: > - i386, m68k, microblaze, mips32, powerpc (powerpc32, powerpc64, and > powerpc64le), s390 (32 and 64 bits), sh, sparc32, and sparc64. If you want to mention the architectures not supported by glibc, this also includes cris, frv, m32r, and mn10300 > And the architectures that only supports wired syscalls are: > - aarch64, alpha, hppa, ia64, mips64, mips64n32, nios2, tile > (tilepro, tilegx, and tilegx64), and x86_64 similarly, this also includes arc, avr32, blackfin, c6x, h8300, hexagon, metag, openrisc, score, unicore32, and xtensa > Also arm is the only one that supports both wire syscalls and the > ipc, although the ipc one is deprecated. AFAICT, ipc syscall on ARM is only defined for OABI, which glibc no longer has. From the kernel sources, I also see sh64 and microblaze define both __NR_ipc and the individual numbers, although microblaze returns -ENOSYS for ipc(). > This patch adds a new define, __ASSUME_SYSVIPC_SYSCALL, that wired > syscalls are supported on the system and the general idea is to use > it where possible. We might add the individual syscalls on all architectures at some point in the kernel, including the ones that currently use the combined ipc call. A patch series for this has been discussed in the past, but I think we never fully resolved the handling of the IPC_64 flag, so it did not get merged so far. With your current approach, this won't cause problems as architectures that don't have the individual calls with old kernel versions will still use the ipc() wrapper in the kernel. Arnd
On 07/11/2016 09:28, Arnd Bergmann wrote: > On Wednesday, November 2, 2016 5:26:38 PM CET Adhemerval Zanella wrote: > >> The architectures that only supports ipc syscall are: >> - i386, m68k, microblaze, mips32, powerpc (powerpc32, powerpc64, and >> powerpc64le), s390 (32 and 64 bits), sh, sparc32, and sparc64. > > If you want to mention the architectures not supported by glibc, this > also includes > > cris, frv, m32r, and mn10300 > I think for commit/code comment mentioning only the supported archs should be suffice. >> And the architectures that only supports wired syscalls are: >> - aarch64, alpha, hppa, ia64, mips64, mips64n32, nios2, tile >> (tilepro, tilegx, and tilegx64), and x86_64 > > similarly, this also includes > > arc, avr32, blackfin, c6x, h8300, hexagon, metag, openrisc, score, > unicore32, and xtensa > >> Also arm is the only one that supports both wire syscalls and the >> ipc, although the ipc one is deprecated. > > AFAICT, ipc syscall on ARM is only defined for OABI, which glibc > no longer has. Indeed, I think I should note that glibc's supported arm eabi should use wire syscalls (although for a source standpoint it will still see __NR_ipc defined). > > From the kernel sources, I also see sh64 and microblaze define > both __NR_ipc and the individual numbers, although microblaze > returns -ENOSYS for ipc(). Indeed, in my first analysis I did not filter 'sys_ni_syscall' while checking the syscall table in kernel files. With this checked microblaze should that ipc is defined as 'sys_ni_syscall'. > >> This patch adds a new define, __ASSUME_SYSVIPC_SYSCALL, that wired >> syscalls are supported on the system and the general idea is to use >> it where possible. > > We might add the individual syscalls on all architectures at some point > in the kernel, including the ones that currently use the combined > ipc call. A patch series for this has been discussed in the past, > but I think we never fully resolved the handling of the IPC_64 > flag, so it did not get merged so far. > > With your current approach, this won't cause problems as architectures > that don't have the individual calls with old kernel versions will > still use the ipc() wrapper in the kernel. > That's the idea and if a architecture eventually adds wire ipc support it just need to correct undefine __ASSUME_SYSVIPC_SYSCALL within correct kernel header version. > > Arnd >
diff --git a/sysdeps/unix/sysv/linux/i386/kernel-features.h b/sysdeps/unix/sysv/linux/i386/kernel-features.h index 148963c..3da13d4 100644 --- a/sysdeps/unix/sysv/linux/i386/kernel-features.h +++ b/sysdeps/unix/sysv/linux/i386/kernel-features.h @@ -52,3 +52,6 @@ # undef __ASSUME_SENDMSG_SYSCALL # undef __ASSUME_RECVMSG_SYSCALL #endif + +/* i686 only supports ipc syscall. */ +#undef __ASSUME_SYSVIPC_SYSCALL diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h index 1d3b554..cb0bc28 100644 --- a/sysdeps/unix/sysv/linux/kernel-features.h +++ b/sysdeps/unix/sysv/linux/kernel-features.h @@ -147,3 +147,7 @@ separate syscalls were only added later. */ #define __ASSUME_SENDMSG_SYSCALL 1 #define __ASSUME_RECVMSG_SYSCALL 1 + +/* Support for SysV IPC through wired syscalls. All supported architectures + either support ipc syscall and/or all the ipc correspondent syscalls. */ +#define __ASSUME_SYSVIPC_SYSCALL 1 diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h index 46ec601..f0fd7ce 100644 --- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h +++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h @@ -54,3 +54,6 @@ # undef __ASSUME_REQUEUE_PI # undef __ASSUME_SET_ROBUST_LIST #endif + +/* m68k only supports ipc syscall. */ +#undef __ASSUME_SYSVIPC_SYSCALL diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h index b486d90..5e88c8e 100644 --- a/sysdeps/unix/sysv/linux/mips/kernel-features.h +++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h @@ -32,6 +32,8 @@ pairs to start with an even-number register. */ #if _MIPS_SIM == _ABIO32 # define __ASSUME_ALIGNED_REGISTER_PAIRS 1 +/* mips32 only supports ipc syscall. */ +# undef __ASSUME_SYSVIPC_SYSCALL #endif /* Define that mips64-n32 is a ILP32 ABI to set the correct interface to diff --git a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h index 42a53f2..a81caf3 100644 --- a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h +++ b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h @@ -52,3 +52,6 @@ #endif #include_next <kernel-features.h> + +/* powerpc only supports ipc syscall. */ +#undef __ASSUME_SYSVIPC_SYSCALL diff --git a/sysdeps/unix/sysv/linux/s390/kernel-features.h b/sysdeps/unix/sysv/linux/s390/kernel-features.h index b3edee4..8fd7853 100644 --- a/sysdeps/unix/sysv/linux/s390/kernel-features.h +++ b/sysdeps/unix/sysv/linux/s390/kernel-features.h @@ -48,3 +48,6 @@ # undef __ASSUME_SENDMSG_SYSCALL # undef __ASSUME_RECVMSG_SYSCALL #endif + +/* s390 only supports ipc syscall. */ +#undef __ASSUME_SYSVIPC_SYSCALL diff --git a/sysdeps/unix/sysv/linux/sh/kernel-features.h b/sysdeps/unix/sysv/linux/sh/kernel-features.h index c5240fa..cb09603 100644 --- a/sysdeps/unix/sysv/linux/sh/kernel-features.h +++ b/sysdeps/unix/sysv/linux/sh/kernel-features.h @@ -49,3 +49,6 @@ the kernel interface for p{read,write}64 adds a dummy long argument before the offset. */ #define __ASSUME_PRW_DUMMY_ARG 1 + +/* sh only supports ipc syscall. */ +#undef __ASSUME_SYSVIPC_SYSCALL diff --git a/sysdeps/unix/sysv/linux/sparc/kernel-features.h b/sysdeps/unix/sysv/linux/sparc/kernel-features.h index 69c9c7c..20578bb 100644 --- a/sysdeps/unix/sysv/linux/sparc/kernel-features.h +++ b/sysdeps/unix/sysv/linux/sparc/kernel-features.h @@ -37,3 +37,6 @@ # undef __ASSUME_REQUEUE_PI # undef __ASSUME_SET_ROBUST_LIST #endif + +/* sparc only supports ipc syscall. */ +#undef __ASSUME_SYSVIPC_SYSCALL