Hi Arnd,
On Fri, May 26, 2023 at 11:21:02AM +0200, Arnd Bergmann wrote:
On Wed, May 24, 2023, at 19:48, Zhangjin Wu wrote:
+static int test_syscall_args(void) +{ +#ifdef __NR_fstat
- return syscall(__NR_fstat, 0, NULL);
+#elif defined(__NR_statx)
- return syscall(__NR_statx, 0, NULL, 0, 0, NULL);
+#else +#error Neither __NR_fstat nor __NR_statx defined, cannot implement syscall_args test +#endif +}
Does this need to work on old kernels? My impression was that this is only intended to be used with the kernel that ships the copy, so you can just rely on statx to be defined and drop the old fallbacks (same as for pselect6_time64 as I commented).
Yes, as much as possible this is desirable because the purpose is clearly to simplify the build of applications. The reason is that some applications might want to run as well on older kernels, but may miss some syscalls on the nolibc shipped with these older ones. Since the project is quite young, it lags a lot behind what each kernel supports, so it's expected that users will take the most recent nolibc version to benefit from support of syscalls that were already present in older ones.
The alternative would be to take the project out of the kernel as it was before but this would likely complicate contributions.
However the selftest code is clearly specific to a kernel IMHO, since its goal is to be used to check that the shipped version of nolibc works on this kernel.
As such, my view on this is that as long as it doesn't require unreasonable efforts to support older kernels for the userland code, we should try. If sometimes it's a big pain, we should not insist too much, but at least making sure that only the feature in question will not work would be desirable.
Thanks, Willy