[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230715103941.341262-1-falcon@tinylab.org>
Date: Sat, 15 Jul 2023 18:39:41 +0800
From: Zhangjin Wu <falcon@...ylab.org>
To: w@....eu
Cc: arnd@...db.de, falcon@...ylab.org, linux-kernel@...r.kernel.org,
linux-kselftest@...r.kernel.org, thomas@...ch.de
Subject: Re: [PATCH v3 01/11] tools/nolibc: remove the old sys_stat support
> Hi Zhangjin,
>
> On Wed, Jul 12, 2023 at 05:16:34PM +0800, Zhangjin Wu wrote:
> > __NR_statx has been added from v4.10:
> >
> > commit a528d35e8bfc ("statx: Add a system call to make enhanced file info available")
> >
> > It has been supported by all of the platforms since at least from v4.20
> > and glibc 2.28.
> >
> > Let's remove the old arch related and dependent sys_stat support
> > completely.
> >
> > This is friendly to the future new architecture porting.
>
> As I previously said, I'd like that we at least preserve compatibility
> with supported stable branches. 4.14 and 4.19 are still supported, so
> does this mean that if I rebuild my preinit against the updated nolibc
> it will fail to boot on such older systems for the archs that we support?
>
> Because if it means that in order to support all currently active
> kernels, one must only build from an older copy of the lib, that becomes
> a disservice to its development and usage. Thus if you checked that aarch64,
> arm, i386, mips, riscv, s390 and x86_64 had already adopted statx by 4.14,
> then I'm fine and we can drop stat(), but then it must be mentioned in
> the commit message, because here it's not explicit.
>
Yeah, we used 'git blame' before and found the last related change is
v4.20, but it is not really the first change.
Just read the statx manpage again:
https://man7.org/linux/man-pages/man2/statx.2.html
It shows something about "Linux 4.11, glibc 2.28.
And 'git grep' shows it is true:
$ git grep -r statx v4.11 arch/ include/uapi/asm-generic/unistd.h | grep -E "aarch64|arm|mips|s390|x86|:include/uapi"
v4.11:arch/arm/tools/syscall.tbl:397 common statx sys_statx
v4.11:arch/arm64/include/asm/unistd32.h:#define __NR_statx 397
v4.11:arch/arm64/include/asm/unistd32.h:__SYSCALL(__NR_statx, sys_statx)
v4.11:arch/mips/include/uapi/asm/unistd.h:#define __NR_statx (__NR_Linux + 366)
v4.11:arch/mips/include/uapi/asm/unistd.h:#define __NR_statx (__NR_Linux + 326)
v4.11:arch/mips/include/uapi/asm/unistd.h:#define __NR_statx (__NR_Linux + 330)
v4.11:arch/mips/kernel/scall32-o32.S: PTR sys_statx
v4.11:arch/mips/kernel/scall64-64.S: PTR sys_statx
v4.11:arch/mips/kernel/scall64-n32.S: PTR sys_statx /* 6330 */
v4.11:arch/mips/kernel/scall64-o32.S: PTR sys_statx
v4.11:arch/s390/include/uapi/asm/unistd.h:#define __NR_statx 379
v4.11:arch/s390/kernel/compat_wrapper.c:COMPAT_SYSCALL_WRAP5(statx, int, dfd, const char __user *, path, unsigned, flags, unsigned, mask, struct statx __user *, buffer);
v4.11:arch/s390/kernel/syscalls.S:SYSCALL(sys_statx,compat_sys_statx)
v4.11:arch/x86/entry/syscalls/syscall_32.tbl:383 i386 statx sys_statx
v4.11:arch/x86/entry/syscalls/syscall_64.tbl:332 common statx sys_statx
v4.11:include/uapi/asm-generic/unistd.h:#define __NR_statx 291
v4.11:include/uapi/asm-generic/unistd.h:__SYSCALL(__NR_statx, sys_statx)
both riscv and loongarch use the generic unistd.h, so, all of our
supported archs should work as-is. riscv itself is added from v4.15,
loongarch itself is added from v5.19.
The powerpc we plan to support is from v4.11:
$ git grep -r statx v4.11 arch/powerpc/
v4.11:arch/powerpc/include/asm/systbl.h:SYSCALL(statx)
v4.11:arch/powerpc/include/uapi/asm/unistd.h:#define __NR_statx 383
So, let's simply correct the commit message (the old v4.10 has a wrong -1
offset, I wrongly used 'git show a528d35e8bfc:Makefile' before).
sys_statx has been supported from Linux v4.11 and glibc 2.28:
$ git grep -r statx v4.11 arch/ include/uapi/asm-generic/unistd.h
Both riscv (firstly added from v4.15) and loongarch (firstly added from
v5.19) use the generic unistd.h, the others are supported from arch/.
Let's remove the old arch related and dependent sys_stat support
completely.
Since the current oldest stable branch is v4.14, so, using statx
instead of sys_stat preserves compatibility with all of the
supported stable branches.
This is friendly to the future new architecture porting.
Best regards,
Zhangjin
> Thanks!
> Willy
Powered by blists - more mailing lists