From: Vineet Gupta <vineetg76@gmail.com>
To: Alistair Francis <alistair.francis@wdc.com>, libc-alpha@sourceware.org
Cc: fweimer@redhat.com, arnd@arndb.de, palmerdabbelt@google.com,
zongbox@gmail.com, adhemerval.zanella@linaro.org, macro@wdc.com,
alistair23@gmail.com, arcml <linux-snps-arc@lists.infradead.org>,
joseph@codesourcery.com
Subject: Re: [RFC v6 07/23] RISC-V: Use 64-bit time_t and off_t for RV32 and RV64
Date: Tue, 11 Feb 2020 16:14:06 -0800 [thread overview]
Message-ID: <00574bfb-981a-3a1c-cbdf-b2fee4eddc32@gmail.com> (raw)
In-Reply-To: <4e95f95966d8d7c6a8339160dc62d81c1f6a1bfb.1578824547.git.alistair.francis@wdc.com>
Hi Alistair,
On 1/12/20 2:33 AM, Alistair Francis wrote:
> Using the original glibc headers under bits/ let's make small
> modifications to use 64-bit time_t and off_t for both RV32 and RV64.
>
> For the typesizes.h, here are justifications for the changes from the
> generic version (based on Arnd's very helpful feedback):
> - All the !__USE_FILE_OFFSET64 types (__off_t, __ino_t, __rlim_t, ...) are
> changed to match the 64-bit replacements.
>
> - __time_t is defined to 64 bit, but no __time64_t is added. This makes sense
> as we don't have the time64 support for other 32-bit architectures yet, and
> it will be easy to change when that happens.
>
> - __suseconds_t is 64-bit. This matches what we use the kerne ABI for the
> few drivers that are relying on 'struct timeval' input arguments in
> ioctl, as well as the adjtimex system call. It means that timeval has to
> be defined without the padding, unlike timespec, which needs padding.
> ---
> .../unix/sysv/linux/riscv/bits/environments.h | 85 ++++++++++++++++++
> sysdeps/unix/sysv/linux/riscv/bits/time64.h | 36 ++++++++
> sysdeps/unix/sysv/linux/riscv/bits/timesize.h | 22 +++++
> .../unix/sysv/linux/riscv/bits/typesizes.h | 90 +++++++++++++++++++
> sysdeps/unix/sysv/linux/riscv/kernel_stat.h | 23 +++++
> 5 files changed, 256 insertions(+)
> create mode 100644 sysdeps/unix/sysv/linux/riscv/bits/environments.h
> create mode 100644 sysdeps/unix/sysv/linux/riscv/bits/time64.h
> create mode 100644 sysdeps/unix/sysv/linux/riscv/bits/timesize.h
> create mode 100644 sysdeps/unix/sysv/linux/riscv/bits/typesizes.h
> create mode 100644 sysdeps/unix/sysv/linux/riscv/kernel_stat.h
>
> diff --git a/sysdeps/unix/sysv/linux/riscv/bits/environments.h b/sysdeps/unix/sysv/linux/riscv/bits/environments.h
> new file mode 100644
> index 0000000000..8d401d1976
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/riscv/bits/environments.h
> @@ -0,0 +1,85 @@
> +/* Copyright (C) 1999-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
> + <http://www.gnu.org/licenses/>. */
> +
> +#ifndef _UNISTD_H
> +# error "Never include this file directly. Use <unistd.h> instead"
> +#endif
> +
> +#include <bits/wordsize.h>
> +
> +/* This header should define the following symbols under the described
> + situations. A value `1' means that the model is always supported,
> + `-1' means it is never supported. Undefined means it cannot be
> + statically decided.
> +
> + _POSIX_V7_ILP32_OFF32 32bit int, long, pointers, and off_t type
> + _POSIX_V7_ILP32_OFFBIG 32bit int, long, and pointers and larger off_t type
> +
> + _POSIX_V7_LP64_OFF32 64bit long and pointers and 32bit off_t type
> + _POSIX_V7_LPBIG_OFFBIG 64bit long and pointers and large off_t type
> +
> + The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG,
> + _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32,
> + _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were
> + used in previous versions of the Unix standard and are available
> + only for compatibility.
> +*/
> +
> +#if __WORDSIZE == 64
> +
> +/* We can never provide environments with 32-bit wide pointers. */
> +# define _POSIX_V7_ILP32_OFF32 -1
> +# define _POSIX_V7_ILP32_OFFBIG -1
> +# define _POSIX_V6_ILP32_OFF32 -1
> +# define _POSIX_V6_ILP32_OFFBIG -1
> +# define _XBS5_ILP32_OFF32 -1
> +# define _XBS5_ILP32_OFFBIG -1
> +/* We also have no use (for now) for an environment with bigger pointers
> + and offsets. */
> +# define _POSIX_V7_LPBIG_OFFBIG -1
> +# define _POSIX_V6_LPBIG_OFFBIG -1
> +# define _XBS5_LPBIG_OFFBIG -1
> +
> +/* By default we have 64-bit wide `long int', pointers and `off_t'. */
> +# define _POSIX_V7_LP64_OFF64 1
> +# define _POSIX_V6_LP64_OFF64 1
> +# define _XBS5_LP64_OFF64 1
> +
> +#else /* __WORDSIZE == 32 */
> +
> +/* RISC-V requires 64-bit off_t
> + # undef _POSIX_V7_ILP32_OFF32
> + # undef _POSIX_V6_ILP32_OFF32
> + # undef _XBS5_ILP32_OFF32
> + */
> +
> +# define _POSIX_V7_ILP32_OFFBIG 1
> +# define _POSIX_V6_ILP32_OFFBIG 1
> +# define _XBS5_ILP32_OFFBIG 1
> +
> +/* We can never provide environments with 64-bit wide pointers. */
> +# define _POSIX_V7_LP64_OFF64 -1
> +# define _POSIX_V7_LPBIG_OFFBIG -1
> +# define _POSIX_V6_LP64_OFF64 -1
> +# define _POSIX_V6_LPBIG_OFFBIG -1
> +# define _XBS5_LP64_OFF64 -1
> +# define _XBS5_LPBIG_OFFBIG -1
> +
> +/* CFLAGS. */
> +#define __ILP32_OFFBIG_CFLAGS "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
> +
> +#endif /* __WORDSIZE == 32 */
> diff --git a/sysdeps/unix/sysv/linux/riscv/bits/time64.h b/sysdeps/unix/sysv/linux/riscv/bits/time64.h
> new file mode 100644
> index 0000000000..cc21b45ef1
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/riscv/bits/time64.h
> @@ -0,0 +1,36 @@
> +/* bits/time64.h -- underlying types for __time64_t. Generic version.
> + Copyright (C) 2018-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
> + <http://www.gnu.org/licenses/>. */
> +
> +#ifndef _BITS_TYPES_H
> +# error "Never include <bits/time64.h> directly; use <sys/types.h> instead."
> +#endif
> +
> +#ifndef _BITS_TIME64_H
> +#define _BITS_TIME64_H 1
> +
> +/* Define __TIME64_T_TYPE so that it is always a 64-bit type. */
> +
> +#if __WORDSIZE == 64
> +/* If we already have 64-bit time type then use it. */
> +# define __TIME64_T_TYPE __TIME_T_TYPE
> +#else
> +/* Define a 64-bit time type alongsize the 32-bit one. */
> +# define __TIME64_T_TYPE __SQUAD_TYPE
> +#endif
> +
> +#endif /* bits/time64.h */
> diff --git a/sysdeps/unix/sysv/linux/riscv/bits/timesize.h b/sysdeps/unix/sysv/linux/riscv/bits/timesize.h
> new file mode 100644
> index 0000000000..afb5d86b2b
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/riscv/bits/timesize.h
> @@ -0,0 +1,22 @@
> +/* Bit size of the time_t type at glibc build time, general case.
> + Copyright (C) 2018-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
> + <http://www.gnu.org/licenses/>. */
> +
> +#include <bits/wordsize.h>
> +
> +/* RV32 and RV64 both use 64-bit time_t */
> +#define __TIMESIZE 64
> diff --git a/sysdeps/unix/sysv/linux/riscv/bits/typesizes.h b/sysdeps/unix/sysv/linux/riscv/bits/typesizes.h
> new file mode 100644
> index 0000000000..0da3bdeb5d
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/riscv/bits/typesizes.h
I was hoping newer arches could simply use the asm-generic one ?
> +/* Tell the libc code that off_t and off64_t are actually the same type
> + for all ABI purposes, even if possibly expressed as different base types
> + for C type-checking purposes. */
> +# define __OFF_T_MATCHES_OFF64_T 1
This is orthogonal to time_t but since we are on topic of newer ports, how are you
doing this. The asm-generic uapi defines
typedef __kernel_long_t __kernel_off_t;
and types.h defines
typedef __kernel_off_t off_t;
And I presume long on RV32 is 32-bits
> +
> +/* Same for ino_t and ino64_t. */
> +# define __INO_T_MATCHES_INO64_T 1
> +
> +/* And for rlim_t and rlim64_t. */
> +# define __RLIM_T_MATCHES_RLIM64_T 1
> +
> +/* And for fsblkcnt_t and fsfilcnt_t */
> +# define __STATFS_MATCHES_STATFS64 1
> +
> +/* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */
> +# define __STATFS_MATCHES_STATFS64 1
> +
> +/* Define these as RV32 requires 64-bit syscall. */
> +#if __riscv_xlen == 32
> +#define __ASSUME_TIME64_SYSCALLS 1
From the POV of newer arches needing 64-bit time_t support, this need not be
forced as it is set automatically for kernel >= 5.1
> +#define __ASSUME_RLIM64_SYSCALLS 1
Is this used anywhere ?
Thx,
-Vineet
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
next parent reply other threads:[~2020-02-12 0:14 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <cover.1578824547.git.alistair.francis@wdc.com>
[not found] ` <4e95f95966d8d7c6a8339160dc62d81c1f6a1bfb.1578824547.git.alistair.francis@wdc.com>
2020-02-12 0:14 ` Vineet Gupta [this message]
2020-02-12 0:14 ` [RFC v6 07/23] RISC-V: Use 64-bit time_t and off_t for RV32 and RV64 Alistair Francis
2020-02-12 1:30 ` Joseph Myers
2020-02-14 22:39 ` Alistair Francis
2020-02-18 23:05 ` switching ARC to 64-bit time_t (Re: [RFC v6 07/23] RISC-V: Use 64-bit time_t and off_t for RV32 and RV64) Vineet Gupta
2020-02-18 23:13 ` Joseph Myers
2020-02-19 23:09 ` Lukasz Majewski
2020-02-19 23:11 ` Lukasz Majewski
2020-02-20 8:31 ` Arnd Bergmann
2020-02-20 9:37 ` Lukasz Majewski
2020-02-20 12:37 ` Arnd Bergmann
2020-02-20 13:14 ` Lukasz Majewski
2020-02-20 14:44 ` Arnd Bergmann
2020-02-20 15:42 ` Lukasz Majewski
2020-02-20 16:08 ` Arnd Bergmann
2020-02-20 16:31 ` Lukasz Majewski
2020-02-24 2:48 ` Viresh Kumar
2020-02-21 19:56 ` Alistair Francis
2020-02-22 8:42 ` Arnd Bergmann
2020-02-24 9:00 ` Lukasz Majewski
2020-02-24 9:46 ` Andreas Schwab
2020-02-24 10:14 ` Lukasz Majewski
2020-02-24 10:23 ` Andreas Schwab
2020-02-24 10:36 ` Lukasz Majewski
2020-02-24 10:42 ` Andreas Schwab
2020-02-24 11:13 ` Lukasz Majewski
2020-02-24 12:41 ` Lukasz Majewski
2020-02-25 0:03 ` Joseph Myers
2020-02-25 11:39 ` Lukasz Majewski
2020-02-25 14:36 ` Joseph Myers
2020-02-26 13:18 ` Lukasz Majewski
2020-02-26 14:48 ` Joseph Myers
2020-02-26 16:28 ` Lukasz Majewski
2020-02-25 9:03 ` Arnd Bergmann
2020-02-20 16:27 ` Helmut Grohne
2020-03-26 0:25 ` ARC rebootstrap prereq (was Re: switching ARC to 64-bit time_t ) Vineet Gupta
2020-03-26 5:54 ` Helmut Grohne
2020-03-26 11:51 ` Alexey Brodkin
2020-03-26 12:24 ` Helmut Grohne
2020-03-26 12:53 ` Alexey Brodkin
2020-03-26 14:28 ` Helmut Grohne
2020-03-26 19:04 ` Lennart Sorensen
2020-08-26 14:39 ` Vineet Gupta
2020-08-26 15:43 ` Helmut Grohne
2020-08-26 21:16 ` Aurelien Jarno
2021-02-24 20:17 ` Vineet Gupta
2021-02-26 9:47 ` Helmut Grohne
2021-02-26 15:58 ` Vineet Gupta
2021-08-21 17:36 ` Aurelien Jarno
2020-02-12 1:42 ` [RFC v6 07/23] RISC-V: Use 64-bit time_t and off_t for RV32 and RV64 Vineet Gupta
2020-02-12 12:58 ` Arnd Bergmann
2020-02-19 0:56 ` Vineet Gupta
2020-02-19 1:03 ` Alistair Francis
2020-02-19 1:31 ` Vineet Gupta
2020-02-19 8:30 ` Andreas Schwab
2020-02-19 18:42 ` Vineet Gupta
2020-02-19 23:18 ` Lukasz Majewski
2020-02-20 0:26 ` Vineet Gupta
2020-02-20 0:46 ` Joseph Myers
2020-02-20 8:24 ` Arnd Bergmann
2020-02-20 10:28 ` Lukasz Majewski
2020-02-20 14:14 ` Joseph Myers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=00574bfb-981a-3a1c-cbdf-b2fee4eddc32@gmail.com \
--to=vineetg76@gmail.com \
--cc=adhemerval.zanella@linaro.org \
--cc=alistair.francis@wdc.com \
--cc=alistair23@gmail.com \
--cc=arnd@arndb.de \
--cc=fweimer@redhat.com \
--cc=joseph@codesourcery.com \
--cc=libc-alpha@sourceware.org \
--cc=linux-snps-arc@lists.infradead.org \
--cc=macro@wdc.com \
--cc=palmerdabbelt@google.com \
--cc=zongbox@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.