From: Lukasz Majewski <lukma@denx.de>
To: Vineet Gupta <Vineet.Gupta1@synopsys.com>
Cc: Florian Weimer <fweimer@redhat.com>,
GNU C Library <libc-alpha@sourceware.org>,
Arnd Bergmann <arnd@arndb.de>,
Palmer Dabbelt <palmerdabbelt@google.com>,
Zong Li <zongbox@gmail.com>,
Alistair Francis <alistair.francis@wdc.com>,
Adhemerval Zanella <adhemerval.zanella@linaro.org>,
"Maciej W. Rozycki" <macro@wdc.com>,
Alistair Francis <alistair23@gmail.com>,
arcml <linux-snps-arc@lists.infradead.org>,
Joseph Myers <joseph@codesourcery.com>
Subject: Re: 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)
Date: Thu, 20 Feb 2020 00:11:36 +0100 [thread overview]
Message-ID: <20200220001136.2f14236e@jawa> (raw)
In-Reply-To: <8a9784b3-fc52-adc3-4595-33142b059388@synopsys.com>
[-- Attachment #1.1: Type: text/plain, Size: 5379 bytes --]
Hi Vineet,
> Hi Alistair, Arnd
>
> On 2/14/20 2:39 PM, Alistair Francis wrote:
> > On Tue, Feb 11, 2020 at 5:30 PM Joseph Myers
> > <joseph@codesourcery.com> wrote:
> >> On Tue, 11 Feb 2020, Alistair Francis wrote:
> >>
> >>>>> 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 ?
> >>>>
> >>> We need to specify that RV32 uses a 64-bit time_t. The generic
> >>> ones don't do that for 32-bit arches.
> >> Since it seems we'd like future 32-bit ports of glibc to use
> >> 64-bit time and offsets, we should make that as easy as possible.
> >>
> >> That is, you need an RISC-V-specific bits/timesize.h. But you
> >> shouldn't need an RISC-V-specific bits/typesizes.h - rather, make
> >> the linux/generic one do the right thing for __TIME_T_TYPE based
> >> on bits/timesize.h. And have some other header that 32-bit
> >> linux/generic ports can use to say whether they use the 64-bit
> >> offset/stat/statfs interface, that bits/typesizes.h can use
> >> together with its existing __LP64__ check, and make the
> >> definitions of __OFF_T_TYPE etc. check that as well, and then you
> >> shouldn't need an RISC-V-specific bits/typesizes.h - the
> >> RISC-V-specific headers should be strictly minimal. (No
> >> architecture-specific bits/time64.h headers should be needed in
> >> any case.)
> > Ok, I have updated this. I'll send the patch once my "Always use
> > 32-bit time_t for certain syscalls" series is in (the headers are
> > changed in that series).
>
> I guess you haven't pushed changes yet, which don't make full copy of
> typesizes.h ?
>
> Anyhow I have a version based on your prior next branch where I
> switched ARC to 64-bit time_t - things work fine in general but I see
> some additional failures with the testsuite.
>
> Consider io/test-stat2.c which calls stat() and stat64() and compares
> the results: it now fails for ctime mismatch
>
> | ...
> | st_atime: [72] 644245094405576070 vs [72] 644245094405576070 OK
> | st_mtime: [88] 1975684956160000000 vs [88] 1975684956160000000 OK
> | st_ctime: [104] 0 vs [104] 2306351876938924035 FAIL
>
>
> In kernel asm-generic stat64 has 32-bit ctime (secs)
>
> struct stat64 {
> ...
> int st_atime; <-- offset 72
> unsigned int st_atime_nsec;
> int st_mtime; <-- offset *80*
> unsigned int st_mtime_nsec;
> int st_ctime; <-- offset 92
> unsigned int st_ctime_nsec;
> ...
> };
>
> In glibc, we have 64-bit time_t based timestamps so the structure
> diverges with kernel counterpart from time fields onwards.
>
> __extension__ typedef __int64_t __time_t; <-- ARC switched
> to 64-bit time_t
>
> struct timespec
> {
> __time_t tv_sec; <-- 8
> long int tv_nsec; <-- 4
> int: 32; <-- 4
> };
>
> struct stat64
> {
> ...
> struct timespec st_atim; <-- offset 72
> struct timespec st_mtim; <-- offset *88*
> struct timespec st_ctim; <-- offset 104
> int __glibc_reserved[2];
> };
>
> However glibc stat64()wrapper calls
> sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c
>
> which for ARC is just doing a pass thru syscall because we do have
> __NR_fstatat64
> - hence the issues I see.
>
> It needs itemized copy
>
> __xstat64 (int vers, const char *name, struct stat64 *buf)
> {
> #ifdef __NR_fstatat64
> return INLINE_SYSCALL (fstatat64, 4, AT_FDCWD, name, buf,
> 0); #else
> ....
> int rc = INLINE_SYSCALL (statx, 5, AT_FDCWD, name,
> AT_NO_AUTOMOUNT, STATX_BASIC_STATS, &tmp);
> __cp_stat64_statx (buf, &tmp);
> #endif
>
> An the reason this all works on RISCV is that your kernel doesn't
> define __ARCH_WANT_STAT64 -> lacks __NR_statat64 and instead uses the
> statx call which does itemized copy and would work fine when copying
> from 32-bits time (in kernel) to 64-bits container in glibc. Is this
> is right understanding or am I missing something here.
>
> How do I build a latest RISCV 32-bit kernel + userland - do you have
> a buildroot branch somewhere that I can build / test with qemu ?
Maybe a bit off topic - there is such QEMU and Yocto/OE based test
sandbox for ARM32:
https://github.com/lmajewski/meta-y2038
(the README provides steps for setup).
>
> Thx,
> -Vineet
>
>
>
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
[-- Attachment #2: Type: text/plain, Size: 170 bytes --]
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
next prev parent reply other threads:[~2020-02-19 23:11 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 ` [RFC v6 07/23] RISC-V: Use 64-bit time_t and off_t for RV32 and RV64 Vineet Gupta
2020-02-12 0:14 ` 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 [this message]
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=20200220001136.2f14236e@jawa \
--to=lukma@denx.de \
--cc=Vineet.Gupta1@synopsys.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.