This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix futimesat for older MicroBlaze kernels (bug 16648)


(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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]