From patchwork Wed Oct 23 21:07:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 35266 Received: (qmail 33305 invoked by alias); 23 Oct 2019 21:12:36 -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 33295 invoked by uid 89); 23 Oct 2019 21:12:36 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_NUMSUBJECT autolearn=ham version=3.3.1 spammy= X-HELO: esa4.hgst.iphmx.com DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1571865154; x=1603401154; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=ADOJN039qjm0zTd4qkDx49E9QHvDknx6Hk1PYT0XI28=; b=ZGDR/ewsall8dHzYAjUDZHUUIhXg0Q3O5iuv6XBdqzTOq7oU8Df0wxvV GlnPXO4V3VwJ1Ima0WPsslnTv1vB8Hc6w6k0T7vbjiw2+DDw74weqUhwa 8Qe3o+Q3sO/F8y4h7Gxco0ZJukcxUdc36UprVrzDwYW7CyBbbL9F7ZU62 6e7YKNfRyWoHIh/hI8ND0ILZpz/hVrf966AQSThjnb8qMojR/ZlMkxgoP eg2d1oGeFk97rN3+V3LEgAeWxxdc7WAEOSBo0JStZmidvRtFZLiirKfBa WA+xXXs8fkpCq2nrZ00elv3fKo3YnqwTprarj3hpHRracQedTBsEYWCOC Q==; IronPort-SDR: rP2Ek8gVFfm4tetzlTfaDsyKmnnWrnEGS0E442b2khrM0R49tESXU9fFnlyxAUqYO3ZdS3fXl9 2N3I8qQBexN+ZZ43IrTSpot1hfAw05UdjMsb9VTFP1pU4590xoheEtwi07fprGcJWy5SBfaSUY fhb7HPwIy/KY13/wowh4K+PiyXdyjwGe2x1eXXMMhfL9eHDuExEnGEwZUJ9gXReS4IKsla26WE 90vIw3R5myGnYWG4Y9o24je2Y78vh1eQDjncx7y047Z0C3+i0QribsMgnwNKuBxfvBHqcwdvgw vkk= IronPort-SDR: /AxbynPPL6x41c3YJx/UM/RfJzEU15++5EkGyl1b1leOMDL1GTJ/cnuvmO8yNdQ0Tu6Fnb0r9H 8hBWaWSD2F1cMUR25PqDWDY2IDlCSBDS09KEa98Td3bKkrH1+kTRrDpNc1qqckss8fc/bz7V// e7ouvXOsw40+Y58m48iBpb9QDGBdeuMIgbm3PzZhttJhVbhCWiS8G67tZy1FSI9qTPgxJsyHDp VXqADUy0TmvQEjoLnXzwWp9+gw5S1oHlwEYHr23e2AqISRTQ091wgxj6b55HSNXfRBrIjhY1qS QMgRGV6phSJAyPaiq1wbiX9m IronPort-SDR: V0ndXOpXYGZnXNGBtdMxMpN9Du7MWtRno9mKJUHUb59YTuyZmpRNI91vaEDCjfHhIgzVmgRfLP m/ahu4Q6Ol/SzHbhm7o7kZszkPlLtroy/64piGKqkx7OXCuR8pISdM1J096DVw3m0OCgoE94xR e6CO1kHlLGvvCM8ujZlGPUisdpvTommsTYfRAG4UVTv3EEXKdFVhk9HYdev9lqZ9RcyDPUXa4R AAy/ILmaR4g8X7AYLDr1jK552/UKVJ1epKwgTCXGo+cvPeCXMcaBU1VxU6taV/W7R076/6zBs3 0vc= WDCIronportException: Internal From: Alistair Francis To: libc-alpha@sourceware.org Cc: alistair23@gmail.com, Alistair Francis Subject: [PATCH v6] Define __STATFS_MATCHES_STATFS64 Date: Wed, 23 Oct 2019 14:07:39 -0700 Message-Id: <20191023210739.31432-1-alistair.francis@wdc.com> MIME-Version: 1.0 Add a new macro __STATFS_MATCHES_STATFS64 that specifies if fsblkcnt_t matches fsblkcnt64_t and if fsfilcnt_t matches fsfilcnt64_t. As we don't have the padding we also need to update the overflow checker to not access the undefined members. --- This change was tested by running user space tests for RV32 and RV64. This patch doesn't use the new macro. The RV32 port uses the macro, this is a preperation patch. v6: - Drop paragraph from commit - Fix Alpha and Hurd configuration v5: - Add missing changed to : - sysdeps/unix/sysv/linux/alpha/bits/typesizes.h - sysdeps/mach/hurd/bits/typesizes.h v4: - Convert to 0/1 convention instead of defined/not - Move "|| defined __STATFS_MATCHES_STATFS64" in the __WORDSIZE == 64 v2: - Change to if defined instead of if == 1 - Introduce __STATFS_MATCHES_STATFS64 bits/typesizes.h | 5 +++++ sysdeps/mach/hurd/bits/typesizes.h | 4 ++++ sysdeps/unix/sysv/linux/alpha/bits/typesizes.h | 3 +++ sysdeps/unix/sysv/linux/generic/bits/statfs.h | 2 +- sysdeps/unix/sysv/linux/generic/bits/typesizes.h | 6 +++++- sysdeps/unix/sysv/linux/generic/wordsize-32/overflow.h | 4 ++++ sysdeps/unix/sysv/linux/s390/bits/typesizes.h | 5 +++++ sysdeps/unix/sysv/linux/sparc/bits/typesizes.h | 5 +++++ sysdeps/unix/sysv/linux/x86/bits/typesizes.h | 5 +++++ 9 files changed, 37 insertions(+), 2 deletions(-) diff --git a/bits/typesizes.h b/bits/typesizes.h index 779945bf099..ae6eff5fc5f 100644 --- a/bits/typesizes.h +++ b/bits/typesizes.h @@ -72,8 +72,13 @@ /* And for rlim_t and rlim64_t. */ # define __RLIM_T_MATCHES_RLIM64_T 1 + +/* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */ +# define __STATFS_MATCHES_STATFS64 1 #else # define __RLIM_T_MATCHES_RLIM64_T 0 + +# define __STATFS_MATCHES_STATFS64 0 #endif /* Number of descriptors that can fit in an `fd_set'. */ diff --git a/sysdeps/mach/hurd/bits/typesizes.h b/sysdeps/mach/hurd/bits/typesizes.h index c30de12d1d4..3600137f501 100644 --- a/sysdeps/mach/hurd/bits/typesizes.h +++ b/sysdeps/mach/hurd/bits/typesizes.h @@ -64,5 +64,9 @@ /* Number of descriptors that can fit in an `fd_set'. */ #define __FD_SETSIZE 256 +/* Tell the libc code that fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and + fsfilcnt64_t are not the same type for all ABI purposes. */ +# define __STATFS_MATCHES_STATFS64 0 + #endif /* bits/typesizes.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h b/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h index 20231152e33..687b4df006a 100644 --- a/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h +++ b/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h @@ -69,6 +69,9 @@ /* And for __rlim_t and __rlim64_t. */ #define __RLIM_T_MATCHES_RLIM64_T 1 +/* Not for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */ +# define __STATFS_MATCHES_STATFS64 0 + /* Number of descriptors that can fit in an `fd_set'. */ #define __FD_SETSIZE 1024 diff --git a/sysdeps/unix/sysv/linux/generic/bits/statfs.h b/sysdeps/unix/sysv/linux/generic/bits/statfs.h index c4069aba620..e622daf2240 100644 --- a/sysdeps/unix/sysv/linux/generic/bits/statfs.h +++ b/sysdeps/unix/sysv/linux/generic/bits/statfs.h @@ -34,7 +34,7 @@ #if defined __USE_FILE_OFFSET64 # define __field64(type, type64, name) type64 name -#elif __WORDSIZE == 64 +#elif __WORDSIZE == 64 || __STATFS_MATCHES_STATFS64 # define __field64(type, type64, name) type name #elif __BYTE_ORDER == __LITTLE_ENDIAN # define __field64(type, type64, name) \ diff --git a/sysdeps/unix/sysv/linux/generic/bits/typesizes.h b/sysdeps/unix/sysv/linux/generic/bits/typesizes.h index 05e3cfee454..0c8c2e0c12a 100644 --- a/sysdeps/unix/sysv/linux/generic/bits/typesizes.h +++ b/sysdeps/unix/sysv/linux/generic/bits/typesizes.h @@ -73,10 +73,14 @@ /* And for __rlim_t and __rlim64_t. */ # define __RLIM_T_MATCHES_RLIM64_T 1 + +/* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */ +# define __STATFS_MATCHES_STATFS64 1 #else # define __RLIM_T_MATCHES_RLIM64_T 0 -#endif +# define __STATFS_MATCHES_STATFS64 0 +#endif /* Number of descriptors that can fit in an `fd_set'. */ #define __FD_SETSIZE 1024 diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/overflow.h b/sysdeps/unix/sysv/linux/generic/wordsize-32/overflow.h index 66546b07ccd..f63dbfae899 100644 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/overflow.h +++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/overflow.h @@ -51,6 +51,9 @@ static inline int stat_overflow (struct stat *buf) /* Note that f_files and f_ffree may validly be a sign-extended -1. */ static inline int statfs_overflow (struct statfs *buf) { +#if __STATFS_MATCHES_STATFS64 + return 0; +#else if (buf->__f_blocks_pad == 0 && buf->__f_bfree_pad == 0 && buf->__f_bavail_pad == 0 && (buf->__f_files_pad == 0 @@ -61,4 +64,5 @@ static inline int statfs_overflow (struct statfs *buf) __set_errno (EOVERFLOW); return -1; +#endif } diff --git a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h index 94234f92427..38034e3ad40 100644 --- a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h +++ b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h @@ -78,8 +78,13 @@ /* And for __rlim_t and __rlim64_t. */ # define __RLIM_T_MATCHES_RLIM64_T 1 + +/* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */ +# define __STATFS_MATCHES_STATFS64 1 #else # define __RLIM_T_MATCHES_RLIM64_T 0 + +# define __STATFS_MATCHES_STATFS64 0 #endif /* Number of descriptors that can fit in an `fd_set'. */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h b/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h index 037f530d65b..c93f428017b 100644 --- a/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h +++ b/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h @@ -72,8 +72,13 @@ /* And for __rlim_t and __rlim64_t. */ # define __RLIM_T_MATCHES_RLIM64_T 1 + +/* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */ +# define __STATFS_MATCHES_STATFS64 1 #else # define __RLIM_T_MATCHES_RLIM64_T 0 + +# define __STATFS_MATCHES_STATFS64 0 #endif /* Number of descriptors that can fit in an `fd_set'. */ diff --git a/sysdeps/unix/sysv/linux/x86/bits/typesizes.h b/sysdeps/unix/sysv/linux/x86/bits/typesizes.h index 012651b3ab5..168990f9dda 100644 --- a/sysdeps/unix/sysv/linux/x86/bits/typesizes.h +++ b/sysdeps/unix/sysv/linux/x86/bits/typesizes.h @@ -84,8 +84,13 @@ /* And for __rlim_t and __rlim64_t. */ # define __RLIM_T_MATCHES_RLIM64_T 1 + +/* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */ +# define __STATFS_MATCHES_STATFS64 1 #else # define __RLIM_T_MATCHES_RLIM64_T 0 + +# define __STATFS_MATCHES_STATFS64 0 #endif /* Number of descriptors that can fit in an `fd_set'. */