Fix futimesat for older MicroBlaze kernels (bug 16648)
Joseph S. Myers
joseph@codesourcery.com
Wed Mar 19 15:27:00 GMT 2014
(CC:ing MicroBlaze maintainer for this patch.)
> Continuing the fixes for __ASSUME_* issues in preparation for moving
> to a 2.6.32 minimum kernel version, this *untested* patch fixes bug
> 16648, the definition of __ASSUME_ATFCTS meaning that the futimesat
> syscall is assumed for all MicroBlaze kernels despite not being
> present until 2.6.33.
>
> __ASSUME_ATFCTS controls conditionals relating to a lot of different
> syscalls in Linux-specific code (fstatat64 faccessat fchmodat fchownat
> futimesat newfstatat linkat mkdirat openat readlinkat renameat
> symlinkat unlinkat mknodat), where whether newfstatat fstatat64
> futimesat are used depends on the architecture, as well as controlling
> whether openat64_not_cancel_3 is expected to work in
> sysdeps/posix/getcwd.c. The assumptions are all OK as of 2.6.32
> except for this MicroBlaze case, and it's generally desirable to get
> rid of as many of the __ASSUME_ATFCTS conditionals as possible, to
> simplify the code (the fallbacks include potential unbounded dynamic
> stack allocations). Thus, rather than the simplest approach of
> undefining __ASSUME_ATFCTS for older kernels on MicroBlaze, this patch
> takes the approach of using the linux-generic implementation of
> futimesat for MicroBlaze kernels before 2.6.33 (all such kernels have
> the utimensat syscall).
>
> 2014-03-19 Joseph Myers <joseph@codesourcery.com>
>
> [BZ #16648]
> * sysdeps/unix/sysv/linux/microblaze/kernel-features.h
> [__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_FUTIMESAT): Define.
> * sysdeps/unix/sysv/linux/microblaze/futimesat.c: New file.
>
> diff --git a/sysdeps/unix/sysv/linux/microblaze/futimesat.c b/sysdeps/unix/sysv/linux/microblaze/futimesat.c
> new file mode 100644
> index 0000000..7037c04
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/microblaze/futimesat.c
> @@ -0,0 +1,30 @@
> +/* Implement futimesat for MicroBlaze.
> + Copyright (C) 2014 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/>. */
> +
> +/* MicroBlaze always had the utimensat syscall but gained the
> + futimesat syscall later, so use the linux-generic implementation of
> + futimesat in terms of the utimensat syscall unless the futimesat
> + syscall is known to be available. */
> +
> +#include <kernel-features.h>
> +
> +#ifdef __ASSUME_FUTIMESAT
> +# include <sysdeps/unix/sysv/linux/futimesat.c>
> +#else
> +# include <sysdeps/unix/sysv/linux/generic/futimesat.c>
> +#endif
> diff --git a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
> index f9a61a9..e7f6db2 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
> +++ b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
> @@ -41,6 +41,11 @@
> # define __ASSUME_SENDMMSG_SYSCALL 1
> #endif
>
> +/* Support for the futimesat syscall was added in 2.6.33. */
> +#if __LINUX_KERNEL_VERSION >= 0x020621
> +# define __ASSUME_FUTIMESAT 1
> +#endif
> +
> #include_next <kernel-features.h>
>
> /* The MicroBlaze kernel does not support the pselect6, preadv and
>
> --
> Joseph S. Myers
> joseph@codesourcery.com
More information about the Libc-alpha
mailing list