2014-07-17 17:52:58 +00:00
|
|
|
/* Set flags signalling availability of kernel features based on given
|
|
|
|
kernel version number. SPARC version.
|
2022-01-01 18:54:23 +00:00
|
|
|
Copyright (C) 1999-2022 Free Software Foundation, Inc.
|
2014-07-17 17:52:58 +00:00
|
|
|
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
|
Prefer https to http for gnu.org and fsf.org URLs
Also, change sources.redhat.com to sourceware.org.
This patch was automatically generated by running the following shell
script, which uses GNU sed, and which avoids modifying files imported
from upstream:
sed -ri '
s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g
s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g
' \
$(find $(git ls-files) -prune -type f \
! -name '*.po' \
! -name 'ChangeLog*' \
! -path COPYING ! -path COPYING.LIB \
! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \
! -path manual/texinfo.tex ! -path scripts/config.guess \
! -path scripts/config.sub ! -path scripts/install-sh \
! -path scripts/mkinstalldirs ! -path scripts/move-if-change \
! -path INSTALL ! -path locale/programs/charmap-kw.h \
! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \
! '(' -name configure \
-execdir test -f configure.ac -o -f configure.in ';' ')' \
! '(' -name preconfigure \
-execdir test -f preconfigure.ac ';' ')' \
-print)
and then by running 'make dist-prepare' to regenerate files built
from the altered files, and then executing the following to cleanup:
chmod a+x sysdeps/unix/sysv/linux/riscv/configure
# Omit irrelevant whitespace and comment-only changes,
# perhaps from a slightly-different Autoconf version.
git checkout -f \
sysdeps/csky/configure \
sysdeps/hppa/configure \
sysdeps/riscv/configure \
sysdeps/unix/sysv/linux/csky/configure
# Omit changes that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines
git checkout -f \
sysdeps/powerpc/powerpc64/ppc-mcount.S \
sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
# Omit change that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline
git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-09-07 05:40:42 +00:00
|
|
|
<https://www.gnu.org/licenses/>. */
|
2014-07-17 17:52:58 +00:00
|
|
|
|
|
|
|
#include_next <kernel-features.h>
|
|
|
|
|
|
|
|
/* 32-bit SPARC kernels do not support
|
|
|
|
futex_atomic_cmpxchg_inatomic. */
|
|
|
|
#if !defined __arch64__ && !defined __sparc_v9__
|
|
|
|
# undef __ASSUME_SET_ROBUST_LIST
|
|
|
|
#endif
|
Add __ASSUME_DIRECT_SYSVIPC_SYSCALL for Linux
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_DIRECT_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_DIRECT_SYSVIPC_SYSCALL): New define.
* sysdeps/unix/sysv/linux/i386/kernel-features.h
(__ASSUME_DIRECT_SYSVIPC_SYSCALL): Undef.
* sysdeps/unix/sysv/linux/m68k/kernel-features.h
(__ASSUME_DIRECT_SYSVIPC_SYSCALL): Likewise.
* sysdeps/unix/sysv/linux/mips/kernel-features.h
(__ASSUME_DIRECT_SYSVIPC_SYSCALL): Likewise.
* sysdeps/unix/sysv/linux/powerpc/kernel-features.h
(__ASSUME_DIRECT_SYSVIPC_SYSCALL): Likewise.
* sysdeps/unix/sysv/linux/s390/kernel-features.h
(__ASSUME_DIRECT_SYSVIPC_SYSCALL): Likewise.
* sysdeps/unix/sysv/linux/sh/kernel-features.h
(__ASSUME_DIRECT_SYSVIPC_SYSCALL): Likewise.
* sysdeps/unix/sysv/linux/sparc/kernel-features.h
(__ASSUME_DIRECT_SYSVIPC_SYSCALL): Likewise.
2016-11-02 17:41:15 +00:00
|
|
|
|
2018-11-01 16:30:15 +00:00
|
|
|
/* These syscalls were added for 32-bit in 4.4 (but present for 64-bit
|
|
|
|
in all supported kernel versions); the architecture-independent
|
|
|
|
kernel-features.h assumes some of them to be present by default.
|
|
|
|
getpeername and getsockname syscalls were also added for 32-bit in
|
|
|
|
4.4, but only for 32-bit kernels, not in the compat syscall table
|
|
|
|
for 64-bit kernels. */
|
|
|
|
#if !defined __arch64__ && __LINUX_KERNEL_VERSION < 0x040400
|
|
|
|
# undef __ASSUME_SENDMSG_SYSCALL
|
|
|
|
# undef __ASSUME_RECVMSG_SYSCALL
|
2016-11-17 20:13:44 +00:00
|
|
|
# undef __ASSUME_ACCEPT_SYSCALL
|
2016-11-17 20:15:52 +00:00
|
|
|
# undef __ASSUME_CONNECT_SYSCALL
|
2017-03-06 11:53:14 +00:00
|
|
|
# undef __ASSUME_RECVFROM_SYSCALL
|
2018-11-01 16:30:15 +00:00
|
|
|
# undef __ASSUME_SENDTO_SYSCALL
|
2021-07-05 16:44:26 +00:00
|
|
|
# undef __ASSUME_GETSOCKOPT_SYSCALL
|
2021-07-05 13:01:24 +00:00
|
|
|
# undef __ASSUME_SETSOCKOPT_SYSCALL
|
2016-11-21 19:26:35 +00:00
|
|
|
#else
|
2018-11-01 16:30:15 +00:00
|
|
|
# define __ASSUME_SOCKET_SYSCALL 1
|
|
|
|
# define __ASSUME_SOCKETPAIR_SYSCALL 1
|
|
|
|
# define __ASSUME_SHUTDOWN_SYSCALL 1
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* These syscalls were added for both 32-bit and 64-bit in 4.4. */
|
|
|
|
#if __LINUX_KERNEL_VERSION >= 0x040400
|
|
|
|
# define __ASSUME_BIND_SYSCALL 1
|
|
|
|
# define __ASSUME_LISTEN_SYSCALL 1
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef __arch64__
|
2016-11-21 19:26:35 +00:00
|
|
|
/* sparc64 defines __NR_pause, however it is not supported (ENOSYS).
|
|
|
|
Undefine so pause.c can use a correct alternative. */
|
|
|
|
# undef __NR_pause
|
2016-11-17 20:13:44 +00:00
|
|
|
#endif
|
|
|
|
|
2019-05-20 15:17:46 +00:00
|
|
|
/* sparc only supports ipc syscall before 5.1. */
|
|
|
|
#if __LINUX_KERNEL_VERSION < 0x050100
|
|
|
|
# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
|
|
|
# if !defined __arch64__
|
|
|
|
# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
|
|
|
# endif
|
2019-05-15 18:20:58 +00:00
|
|
|
#endif
|
2018-03-28 00:23:52 +00:00
|
|
|
|
2018-07-05 16:59:02 +00:00
|
|
|
/* Support for the renameat2 syscall was added in 3.16. */
|
|
|
|
#if __LINUX_KERNEL_VERSION < 0x031000
|
|
|
|
# undef __ASSUME_RENAMEAT2
|
|
|
|
#endif
|
|
|
|
|
2018-03-28 00:23:52 +00:00
|
|
|
/* SPARC kernel Kconfig does not define CONFIG_CLONE_BACKWARDS, however it
|
|
|
|
has the same ABI as if it did, implemented by sparc-specific code
|
|
|
|
(sparc_do_fork).
|
|
|
|
|
|
|
|
It also has a unique return value convention:
|
|
|
|
|
|
|
|
Parent --> %o0 == child's pid, %o1 == 0
|
|
|
|
Child --> %o0 == parent's pid, %o1 == 1
|
|
|
|
|
|
|
|
Which required a special macro to correct issue the syscall
|
|
|
|
(INLINE_CLONE_SYSCALL). */
|
|
|
|
#undef __ASSUME_CLONE_DEFAULT
|
|
|
|
#define __ASSUME_CLONE_BACKWARDS 1
|