From patchwork Wed Oct 31 21:41:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Myers X-Patchwork-Id: 991715 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-96880-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="qXGr12dw"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 42lhcV3nCCz9s3C for ; Thu, 1 Nov 2018 08:41:45 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:cc:subject:message-id :mime-version:content-type; q=dns; s=default; b=Oc4dywdTkh+0RkZ1 0D2Bb/Egl902gnpnrb4Mw6iwDMkVFixwPMm44acfbxwu5BpQIshJsq+RmuheQIcu i7cjcQVsYpFgNphXexFH8wBqv8IftW1W9iQ36t3n6l5W/T7LzdJ/E51sIEvEAPDf rWoIcGTlgG/8/K9X5IJBPP8+KzY= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:cc:subject:message-id :mime-version:content-type; s=default; bh=SeaZQD62ko7S2+v3RJBtXF VGu38=; b=qXGr12dw6s9Y75JZaoLWlgnPNQPZOjMrBzaA3g1t3waGGQbg3cPMTk phSGeuTzaSo70NQsVJ6vzvLFz1iS4+eDsmRUuXp0jjLSYyWe3Z4OlSv0FWzqm+ad 7+5MuPqzesCVgdw/HlVjp32cFOJv81kU/wIkivT2yc5OVC6GYfp8k= Received: (qmail 26846 invoked by alias); 31 Oct 2018 21:41:39 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 26828 invoked by uid 89); 31 Oct 2018 21:41:39 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-24.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=observation X-HELO: relay1.mentorg.com Date: Wed, 31 Oct 2018 21:41:31 +0000 From: Joseph Myers To: CC: Subject: Update and correct SPARC configuration for supported socket syscalls Message-ID: User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 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); if the reviewer agrees with my analysis I'll file a bug in Bugzilla accordingly. 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 (this is a SPARC version of bug 19682 which was the corresponding S/390 issue). 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. 2018-10-31 Joseph Myers * 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. Reported-by: Joseph Myers Signed-off-by: David S. Miller diff --git a/sysdeps/unix/sysv/linux/sparc/kernel-features.h b/sysdeps/unix/sysv/linux/sparc/kernel-features.h index 91990a716f..fd48081a77 100644 --- a/sysdeps/unix/sysv/linux/sparc/kernel-features.h +++ b/sysdeps/unix/sysv/linux/sparc/kernel-features.h @@ -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 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list index 33082f31eb..d30d7f2b96 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list @@ -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