Update and correct SPARC configuration for supported socket syscalls (bug 23848).
authorJoseph Myers <joseph@codesourcery.com>
Thu, 1 Nov 2018 16:30:15 +0000 (16:30 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Thu, 1 Nov 2018 16:30:15 +0000 (16:30 +0000)
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.

ChangeLog
sysdeps/unix/sysv/linux/sparc/kernel-features.h
sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list

index 67abf14..96f6ce5 100644 (file)
--- a/ChangeLog
+++ b/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
index 91990a7..fd48081 100644 (file)
 # 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
index 33082f3..d30d7f2 100644 (file)
@@ -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