From patchwork Fri Dec 4 23:36:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukasz Majewski X-Patchwork-Id: 41321 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4F91F398242E; Fri, 4 Dec 2020 23:37:22 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-out.m-online.net (mail-out.m-online.net [212.18.0.9]) by sourceware.org (Postfix) with ESMTPS id 176213870874 for ; Fri, 4 Dec 2020 23:37:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 176213870874 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: sourceware.org; spf=none smtp.mailfrom=lukma@denx.de Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 4Cnpyk0qtVz1qs49; Sat, 5 Dec 2020 00:37:18 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 4Cnpyk0Prcz1qqkk; Sat, 5 Dec 2020 00:37:18 +0100 (CET) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id lFUYaO_ROYz5; Sat, 5 Dec 2020 00:37:16 +0100 (CET) X-Auth-Info: sJIhXnoPX7nWcqnXW1gjT6K8otKpK4xbExvVz+Qpjkg= Received: from localhost.localdomain (89-64-5-98.dynamic.chello.pl [89.64.5.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Sat, 5 Dec 2020 00:37:16 +0100 (CET) From: Lukasz Majewski To: Joseph Myers , Paul Eggert , Adhemerval Zanella Subject: [RFC 5/6] msqid: Provide internal copy of struct __msqid64_ds Date: Sat, 5 Dec 2020 00:36:03 +0100 Message-Id: <20201204233604.7430-6-lukma@denx.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201204233604.7430-1-lukma@denx.de> References: <20201204233604.7430-1-lukma@denx.de> MIME-Version: 1.0 X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Florian Weimer , GNU C Library , Siddhesh Poyarekar , Andreas Schwab , Stepan Golosunov , Alistair Francis Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" After the commit SHA1: 3283f711132eaadc4f04bd8c1d84c910c29ba "sysv: linux: Add 64-bit time_t variant for msgctl" The glibc internal, 64 bit supporting version of struct __msqid64_ds has been exported. This approach has issue when one would like to add Y2038 support to glibc. The problem is that both struct msqid_ds and __msqid64_ds rely on exported implementation of the msg.h header (./sysvipc/sys/msg.h) which unconditionally includes ./sysdeps/unix/sysv/linux/bits/msq.h which in turn includes ./sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h As a result the externally exported struct msqid_ds.h is used internally by glibc. Problem starts when one wants to extend this struct with 64 bit time support: | In file included from ../sysdeps/unix/sysv/linux/bits/msq.h:28, | from ../sysvipc/sys/msg.h:30, | from ../sysdeps/unix/sysv/linux/include/sys/msg.h:2, | from ../include/sys/msg.h:1, | from ../sysdeps/unix/sysv/linux/msgctl.c:19: | ../sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h:31:6: error: "__USE_TIME_BITS64" is not defined, evaluates to 0 [-Werror=undef] | # if __USE_TIME_BITS64 | ^~~~~~~~~~~~~~~~~ To fix this issue - the internal,for glibc, copy of struct __msqid64_ds has been re-introduced. This will allow clear separation between exported and internal glibc types. Moreover, the __TIMESIZE based alias shall be internal to glibc. Build tests: ./src/scripts/build-many-glibcs.py glibcs --- include/bits/types/struct_msqid64_ds.h | 36 +++++++++++++++++++ .../sysv/linux/bits/types/struct_msqid64_ds.h | 4 --- 2 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 include/bits/types/struct_msqid64_ds.h diff --git a/include/bits/types/struct_msqid64_ds.h b/include/bits/types/struct_msqid64_ds.h new file mode 100644 index 0000000000..8c39a2a872 --- /dev/null +++ b/include/bits/types/struct_msqid64_ds.h @@ -0,0 +1,36 @@ +/* Internal for glibc implementation of the SysV message struct msqid64_ds. + Copyright (C) 2020 Free Software Foundation, Inc. + 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 + . */ + +#include + +#if __TIMESIZE == 64 +# define __msqid64_ds msqid_ds +#else +struct __msqid64_ds +{ + struct ipc_perm msg_perm; /* structure describing operation permission */ + __time64_t msg_stime; /* time of last msgsnd command */ + __time64_t msg_rtime; /* time of last msgsnd command */ + __time64_t msg_ctime; /* time of last change */ + __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */ + msgqnum_t msg_qnum; /* number of messages currently on queue */ + msglen_t msg_qbytes; /* max number of bytes allowed on queue */ + __pid_t msg_lspid; /* pid of last msgsnd() */ + __pid_t msg_lrpid; /* pid of last msgrcv() */ +}; +#endif diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds.h index 3536c8ea62..07cc1036ab 100644 --- a/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds.h +++ b/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds.h @@ -20,9 +20,6 @@ # error "Never use directly; include instead." #endif -#if __TIMESIZE == 64 -# define __msqid64_ds msqid_ds -#else struct __msqid64_ds { struct ipc_perm msg_perm; /* structure describing operation permission */ @@ -35,4 +32,3 @@ struct __msqid64_ds __pid_t msg_lspid; /* pid of last msgsnd() */ __pid_t msg_lrpid; /* pid of last msgrcv() */ }; -#endif