From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 9FCF139A0037 for ; Fri, 4 Jun 2021 19:38:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9FCF139A0037 Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-527-uBhJZGSPNDijk7nWcCX6Sg-1; Fri, 04 Jun 2021 15:38:29 -0400 X-MC-Unique: uBhJZGSPNDijk7nWcCX6Sg-1 Received: by mail-qt1-f199.google.com with SMTP id w1-20020ac87a610000b02902433332a0easo5870400qtt.0 for ; Fri, 04 Jun 2021 12:38:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:cc:references:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=VF3Cv0yKreVgRWM4nK6f613wUGdqXJ8VAtdY0zqp9ic=; b=TmZqYZEHTi8AwlridFMwYCk8mur0FS+hTzCkNmC8T64dGfwRlgOXXz1h8NsAWN4c1/ REF3p0rhFqsdymv5Ud2RADyzMV5Ccn3aH1z119VYaS8Mha5SkKd1cNpRpyet6OKD6VoZ yjau9Ms5qARSoTa+3xyLR4n/pQvkrCO5C+TxR9iZ3PvY3pTjQ+38AzJ+3gvCFPDn4FyF zFXxzjlgp0i0mvNsX8JbL2hVMdtK1o/Vm85R/Sh+M/xOa0BGp7TSqbtlUEoRuA57WGHI o9KlyJ8XxfJdgQHiNhQLdG0BWzctHcKBMPv64y3xwRknpbpRl6JNaTvfBypd4wiVz7NI hf6Q== X-Gm-Message-State: AOAM532f+IU/alU1mTXbHsB4Tyzda03XA6lDfIHuYiu0WpE0AiMM1Ce3 n4kNQj5MdtEFl8icPt2zANzrhMnWDZ8/HVYUs6yqVmDCUPKVWqP9ObzDQ7cmTaFVUYU5iLxMiKG 9fuMBwdt5HjSAL2RzwVyg X-Received: by 2002:aed:3167:: with SMTP id 94mr1898303qtg.126.1622835508921; Fri, 04 Jun 2021 12:38:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwlPJJAQei4CZhJcfuC3pzNNA9wtOCMHsU5Qcy10AEvZD5IIhOl0XCG88kVP9boHz5kEM/gUw== X-Received: by 2002:aed:3167:: with SMTP id 94mr1898285qtg.126.1622835508639; Fri, 04 Jun 2021 12:38:28 -0700 (PDT) Received: from [192.168.1.16] (198-84-214-74.cpe.teksavvy.com. [198.84.214.74]) by smtp.gmail.com with ESMTPSA id p199sm4577228qka.128.2021.06.04.12.38.27 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 04 Jun 2021 12:38:28 -0700 (PDT) From: Carlos O'Donell Subject: Re: [PATCH v2 16/25] y2038: Use a common definition for shmid_ds To: Adhemerval Zanella , libc-alpha@sourceware.org References: <20210518205613.1487824-1-adhemerval.zanella@linaro.org> <20210518205613.1487824-17-adhemerval.zanella@linaro.org> Organization: Red Hat Message-ID: Date: Fri, 4 Jun 2021 15:38:27 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <20210518205613.1487824-17-adhemerval.zanella@linaro.org> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, NICE_REPLY_A, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, 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: , X-List-Received-Date: Fri, 04 Jun 2021 19:38:35 -0000 On 5/18/21 4:56 PM, Adhemerval Zanella wrote: > Instead of replicate the same definitions from struct_shmid64_ds.h > on the multiple struct_shmid_ds.h, use a common header which is included > when required (struct_shmid64_ds_helper.h). > > The __USE_TIME_BITS64 is not defined internally yet, although the > internal header is used when building the 64-bit semctl implementation. Requesting a v3 please. Similar to 14/25, we should add the __glibc_reserved* members to the structures to preserve maximum compatibility with the kernel structure. Before adding the reserved members the 64-bit time_t struct shmid_ds is only 76 bytes on i686, and 84 bytes in the original when the types should not really change in size. Adding the reserved entries makes them match again. We could add some static asserts if we really want to be thorough about the alignment of __time64_t. > --- > sysdeps/unix/sysv/linux/Makefile | 3 ++- > .../sysv/linux/bits/types/struct_shmid64_ds.h | 9 +------ > .../bits/types/struct_shmid64_ds_helper.h | 26 +++++++++++++++++++ > .../sysv/linux/bits/types/struct_shmid_ds.h | 10 ++++--- > .../linux/hppa/bits/types/struct_shmid_ds.h | 10 ++++--- > .../linux/mips/bits/types/struct_shmid_ds.h | 14 ++++++---- > .../powerpc/bits/types/struct_shmid_ds.h | 10 ++++--- > .../linux/sparc/bits/types/struct_shmid_ds.h | 10 ++++--- > 8 files changed, 66 insertions(+), 26 deletions(-) > create mode 100644 sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds_helper.h > > diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile > index b599c423ed..747d1083e0 100644 > --- a/sysdeps/unix/sysv/linux/Makefile > +++ b/sysdeps/unix/sysv/linux/Makefile > @@ -103,7 +103,8 @@ sysdep_headers += sys/mount.h sys/acct.h \ > bits/struct_stat.h \ > bits/struct_stat_time64_helper.h \ > bits/types/struct_msqid64_ds_helper.h \ > - bits/types/struct_semid64_ds_helper.h > + bits/types/struct_semid64_ds_helper.h \ > + bits/types/struct_shmid64_ds_helper.h OK. Add new helper. > > tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \ > tst-quota tst-sync_file_range tst-sysconf-iov_max tst-ttyname \ > diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds.h > index 71100db1b5..a4af8cc5f4 100644 > --- a/sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds.h > +++ b/sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds.h > @@ -25,13 +25,6 @@ > #else > struct __shmid64_ds > { > - struct ipc_perm shm_perm; /* operation permission struct */ > - size_t shm_segsz; /* size of segment in bytes */ > - __time64_t shm_atime; /* time of last shmat() */ > - __time64_t shm_dtime; /* time of last shmdt() */ > - __time64_t shm_ctime; /* time of last change by shmctl() */ > - __pid_t shm_cpid; /* pid of creator */ > - __pid_t shm_lpid; /* pid of last shmop */ > - shmatt_t shm_nattch; /* number of current attaches */ > +# include OK. Use helper. > }; > #endif > diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds_helper.h b/sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds_helper.h > new file mode 100644 > index 0000000000..8ab0937c4d > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds_helper.h > @@ -0,0 +1,26 @@ > +/* Common definitions for struct semid_ds with 64 bit time. > + Copyright (C) 2020-2021 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 > + . */ > + > + struct ipc_perm shm_perm; /* operation permission struct */ > + size_t shm_segsz; /* size of segment in bytes */ > + __time64_t shm_atime; /* time of last shmat() */ > + __time64_t shm_dtime; /* time of last shmdt() */ > + __time64_t shm_ctime; /* time of last change by shmctl() */ > + __pid_t shm_cpid; /* pid of creator */ > + __pid_t shm_lpid; /* pid of last shmop */ > + shmatt_t shm_nattch; /* number of current attaches */ This looks good but needs __glibc_reserved5 and __glibc_reserved6 entries. > diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h > index 2bd587d2b0..5f8ac6257b 100644 > --- a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h > +++ b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h > @@ -23,23 +23,27 @@ > /* Data structure describing a shared memory segment. */ > struct shmid_ds > { > +#ifdef __USE_TIME_BITS64 > +# include OK. Use helper. > +#else > struct ipc_perm shm_perm; /* operation permission struct */ > size_t shm_segsz; /* size of segment in bytes */ > -#if __TIMESIZE == 32 > +# if __TIMESIZE == 32 > __time_t shm_atime; /* time of last shmat() */ > unsigned long int __shm_atime_high; > __time_t shm_dtime; /* time of last shmdt() */ > unsigned long int __shm_dtime_high; > __time_t shm_ctime; /* time of last change by shmctl() */ > unsigned long int __shm_ctime_high; > -#else > +# else > __time_t shm_atime; /* time of last shmat() */ > __time_t shm_dtime; /* time of last shmdt() */ > __time_t shm_ctime; /* time of last change by shmctl() */ > -#endif > +# endif > __pid_t shm_cpid; /* pid of creator */ > __pid_t shm_lpid; /* pid of last shmop */ > shmatt_t shm_nattch; /* number of current attaches */ > __syscall_ulong_t __glibc_reserved5; > __syscall_ulong_t __glibc_reserved6; > +#endif > }; > diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h > index 47ff80ebb0..7831fd7340 100644 > --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h > +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h > @@ -23,8 +23,11 @@ > /* Data structure describing a shared memory segment. */ > struct shmid_ds > { > +#ifdef __USE_TIME_BITS64 > +# include OK. Use helper. > +#else > struct ipc_perm shm_perm; /* operation permission struct */ > -#if __TIMESIZE == 32 > +# if __TIMESIZE == 32 > unsigned long int __shm_atime_high; > __time_t shm_atime; /* time of last shmat() */ > unsigned long int __shm_dtime_high; > @@ -32,15 +35,16 @@ struct shmid_ds > unsigned long int __shm_ctime_high; > __time_t shm_ctime; /* time of last change by shmctl() */ > unsigned long int __glibc_reserved4; > -#else > +# else > __time_t shm_atime; /* time of last shmat() */ > __time_t shm_dtime; /* time of last shmdt() */ > __time_t shm_ctime; /* time of last change by shmctl() */ > -#endif > +# endif > size_t shm_segsz; /* size of segment in bytes */ > __pid_t shm_cpid; /* pid of creator */ > __pid_t shm_lpid; /* pid of last shmop */ > shmatt_t shm_nattch; /* number of current attaches */ > __syscall_ulong_t __glibc_reserved5; > __syscall_ulong_t __glibc_reserved6; > +#endif > }; > diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h > index 7f8f3b9c51..0691a610ae 100644 > --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h > +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h > @@ -23,27 +23,31 @@ > /* Data structure describing a shared memory segment. */ > struct shmid_ds > { > +#ifdef __USE_TIME_BITS64 > +# include OK. Use helper. > +#else > struct ipc_perm shm_perm; /* operation permission struct */ > size_t shm_segsz; /* size of segment in bytes */ > -#if __TIMESIZE == 32 > +# if __TIMESIZE == 32 > __time_t shm_atime; /* time of last shmat() */ > __time_t shm_dtime; /* time of last shmdt() */ > __time_t shm_ctime; /* time of last change by shmctl() */ > -#else > +# else > __time_t shm_atime; /* time of last shmat() */ > __time_t shm_dtime; /* time of last shmdt() */ > __time_t shm_ctime; /* time of last change by shmctl() */ > -#endif > +# endif > __pid_t shm_cpid; /* pid of creator */ > __pid_t shm_lpid; /* pid of last shmop */ > shmatt_t shm_nattch; /* number of current attaches */ > -#if __TIMESIZE == 32 > +# if __TIMESIZE == 32 > unsigned short int __shm_atime_high; > unsigned short int __shm_dtime_high; > unsigned short int __shm_ctime_high; > unsigned short int __glibc_reserved4; > -#else > +# else > __syscall_ulong_t __glibc_reserved5; > __syscall_ulong_t __glibc_reserved6; > +# endif > #endif > }; > diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h > index d71bdf1ecf..316d43ec99 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h > +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h > @@ -23,8 +23,11 @@ > /* Data structure describing a shared memory segment. */ > struct shmid_ds > { > +#ifdef __USE_TIME_BITS64 > +# include OK. Use helper. > +#else > struct ipc_perm shm_perm; /* operation permission struct */ > -#if __TIMESIZE == 32 > +# if __TIMESIZE == 32 > unsigned long int __shm_atime_high; > __time_t shm_atime; /* time of last shmat() */ > unsigned long int __shm_dtime_high; > @@ -32,15 +35,16 @@ struct shmid_ds > unsigned long int __shm_ctime_high; > __time_t shm_ctime; /* time of last change by shmctl() */ > unsigned long int __glibc_reserved4; > -#else > +# else > __time_t shm_atime; /* time of last shmat() */ > __time_t shm_dtime; /* time of last shmdt() */ > __time_t shm_ctime; /* time of last change by shmctl() */ > -#endif > +# endif > size_t shm_segsz; /* size of segment in bytes */ > __pid_t shm_cpid; /* pid of creator */ > __pid_t shm_lpid; /* pid of last shmop */ > shmatt_t shm_nattch; /* number of current attaches */ > __syscall_ulong_t __glibc_reserved5; > __syscall_ulong_t __glibc_reserved6; > +#endif > }; > diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h > index 767099803f..86f0cedac3 100644 > --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h > +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h > @@ -23,23 +23,27 @@ > /* Data structure describing a shared memory segment. */ > struct shmid_ds > { > +#ifdef __USE_TIME_BITS64 > +# include OK. Use helper. > +#else > struct ipc_perm shm_perm; /* operation permission struct */ > -#if __TIMESIZE == 32 > +# if __TIMESIZE == 32 > unsigned long int __shm_atime_high; > __time_t shm_atime; /* time of last shmat() */ > unsigned long int __shm_dtime_high; > __time_t shm_dtime; /* time of last shmdt() */ > unsigned long int __shm_ctime_high; > __time_t shm_ctime; /* time of last change by shmctl() */ > -#else > +# else > __time_t shm_atime; /* time of last shmat() */ > __time_t shm_dtime; /* time of last shmdt() */ > __time_t shm_ctime; /* time of last change by shmctl() */ > -#endif > +# endif > size_t shm_segsz; /* size of segment in bytes */ > __pid_t shm_cpid; /* pid of creator */ > __pid_t shm_lpid; /* pid of last shmop */ > shmatt_t shm_nattch; /* number of current attaches */ > __syscall_ulong_t __glibc_reserved5; > __syscall_ulong_t __glibc_reserved6; > +#endif > }; > -- Cheers, Carlos.