mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
Update and correct SPARC configuration for supported socket syscalls (bug 23848).
Looking at kernel-features.h files, I saw that SPARC was missing full information on when it gained separate socket syscalls. This patch adds such information to the SPARC kernel-features.h. It also corrects what appear to be bugs in the existing code (that would cause syscalls to be assumed to be present when not actually present). Various __ASSUME_* macros, defined by default, were not undefined for 32-bit despite those syscalls only being added for 32-bit in Linux 4.4. Some syscalls were used in the SPARC64 syscalls.list but only added in 4.4; this was harmless before the __NR_* macros were defined at all, but once the macros were defined it means a build with post-4.4 headers would assume the syscalls to be present regardless of --enable-kernel version. Then, various __ASSUME_* macros were previously not defined in cases where they could be defined (this part of the patch is just an optimization, not a bug fix). Note the observation in a comment in the patch that even the latest Linux kernel for SPARC does not have getpeername and getsockname syscalls in the compat syscall table for 32-bit binaries on 64-bit kernels (so glibc can't assume those syscalls to be present for 32-bit at all, although the 32-bit syscall table gained them in 4.4). Tested (compilation only) for SPARC with build-many-glibcs.py. [BZ #23848] * sysdeps/unix/sysv/linux/sparc/kernel-features.h [!__arch64__ && __LINUX_KERNEL_VERSION < 0x040400] (__ASSUME_SENDMSG_SYSCALL): Undefine. [!__arch64__ && __LINUX_KERNEL_VERSION < 0x040400] (__ASSUME_RECVMSG_SYSCALL): Likewise. [!__arch64__ && __LINUX_KERNEL_VERSION < 0x040400] (__ASSUME_SENDTO_SYSCALL): Likewise. [!__arch64__ && __LINUX_KERNEL_VERSION < 0x040400] (__ASSUME_ACCEPT_SYSCALL): Undefine under this condition, not just [!__arch64__]. [!__arch64__ && __LINUX_KERNEL_VERSION < 0x040400] (__ASSUME_CONNECT_SYSCALL): Likewise. [!__arch64__ && __LINUX_KERNEL_VERSION < 0x040400] (__ASSUME_RECVFROM_SYSCALL): Likewise. [__LINUX_KERNEL_VERSION >= 0x040400] (__ASSUME_BIND_SYSCALL): Define. [__LINUX_KERNEL_VERSION >= 0x040400] (__ASSUME_LISTEN_SYSCALL): Likewise. [__LINUX_KERNEL_VERSION >= 0x040400] (__ASSUME_SETSOCKOPT_SYSCALL): Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list (bind): Remove. (listen): Likewise. (setsockopt): Likewise.
This commit is contained in:
parent
8e3c00db16
commit
daea71c2e4
28
ChangeLog
28
ChangeLog
@ -1,3 +1,31 @@
|
||||
2018-11-01 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
[BZ #23848]
|
||||
* sysdeps/unix/sysv/linux/sparc/kernel-features.h [!__arch64__ &&
|
||||
__LINUX_KERNEL_VERSION < 0x040400] (__ASSUME_SENDMSG_SYSCALL):
|
||||
Undefine.
|
||||
[!__arch64__ && __LINUX_KERNEL_VERSION < 0x040400]
|
||||
(__ASSUME_RECVMSG_SYSCALL): Likewise.
|
||||
[!__arch64__ && __LINUX_KERNEL_VERSION < 0x040400]
|
||||
(__ASSUME_SENDTO_SYSCALL): Likewise.
|
||||
[!__arch64__ && __LINUX_KERNEL_VERSION < 0x040400]
|
||||
(__ASSUME_ACCEPT_SYSCALL): Undefine under this condition, not just
|
||||
[!__arch64__].
|
||||
[!__arch64__ && __LINUX_KERNEL_VERSION < 0x040400]
|
||||
(__ASSUME_CONNECT_SYSCALL): Likewise.
|
||||
[!__arch64__ && __LINUX_KERNEL_VERSION < 0x040400]
|
||||
(__ASSUME_RECVFROM_SYSCALL): Likewise.
|
||||
[__LINUX_KERNEL_VERSION >= 0x040400] (__ASSUME_BIND_SYSCALL):
|
||||
Define.
|
||||
[__LINUX_KERNEL_VERSION >= 0x040400] (__ASSUME_LISTEN_SYSCALL):
|
||||
Likewise.
|
||||
[__LINUX_KERNEL_VERSION >= 0x040400]
|
||||
(__ASSUME_SETSOCKOPT_SYSCALL): Likewise.
|
||||
* sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list (bind):
|
||||
Remove.
|
||||
(listen): Likewise.
|
||||
(setsockopt): Likewise.
|
||||
|
||||
2018-11-01 Fredrik Noring <noring@nocrew.org>
|
||||
|
||||
* sysdeps/mips/sys/tas.h (_test_and_set): Handle the R5900 CPU
|
||||
|
@ -28,11 +28,34 @@
|
||||
# undef __ASSUME_SET_ROBUST_LIST
|
||||
#endif
|
||||
|
||||
#if !defined __arch64__
|
||||
/* 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
|
||||
# undef __ASSUME_ACCEPT_SYSCALL
|
||||
# undef __ASSUME_CONNECT_SYSCALL
|
||||
# undef __ASSUME_RECVFROM_SYSCALL
|
||||
# undef __ASSUME_SENDTO_SYSCALL
|
||||
#else
|
||||
# define __ASSUME_SOCKET_SYSCALL 1
|
||||
# define __ASSUME_SOCKETPAIR_SYSCALL 1
|
||||
# define __ASSUME_GETSOCKOPT_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
|
||||
# define __ASSUME_SETSOCKOPT_SYSCALL 1
|
||||
#endif
|
||||
|
||||
#ifdef __arch64__
|
||||
/* sparc64 defines __NR_pause, however it is not supported (ENOSYS).
|
||||
Undefine so pause.c can use a correct alternative. */
|
||||
# undef __NR_pause
|
||||
|
@ -1,10 +1,7 @@
|
||||
# File name Caller Syscall name # args Strong name Weak names
|
||||
|
||||
bind - bind 3 __bind bind
|
||||
getpeername - getpeername 3 __getpeername getpeername
|
||||
getsockname - getsockname 3 __getsockname getsockname
|
||||
getsockopt - getsockopt 5 __getsockopt getsockopt
|
||||
listen - listen 2 __listen listen
|
||||
setsockopt - setsockopt 5 __setsockopt setsockopt
|
||||
shutdown - shutdown 2 __shutdown shutdown
|
||||
socketpair - socketpair 4 __socketpair socketpair
|
||||
|
Loading…
Reference in New Issue
Block a user