Message ID | Pine.LNX.4.64.1403191521120.14867@digraph.polyomino.org.uk |
---|---|
State | New |
Headers | show |
(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
Ping. This patch <https://sourceware.org/ml/libc-alpha/2014-03/msg00585.html> is pending review. Together with the MicroBlaze parts of <https://sourceware.org/ml/libc-alpha/2014-03/msg00835.html> that completes the fixes needed in preparation to increase the minimum kernel version to 2.6.32.
> -----Original Message----- > From: Joseph Myers [mailto:joseph@codesourcery.com] > Sent: Wednesday, 26 March 2014 10:41 am > To: libc-alpha@sourceware.org > Cc: David Holsgrove > Subject: Ping Re: Fix futimesat for older MicroBlaze kernels (bug 16648) > > Ping. This patch > <https://sourceware.org/ml/libc-alpha/2014-03/msg00585.html> is pending > review. Together with the MicroBlaze parts of > <https://sourceware.org/ml/libc-alpha/2014-03/msg00835.html> that > completes the fixes needed in preparation to increase the minimum kernel > version to 2.6.32. > Apologies for the delay, I've tested and the patch looks good for Microblaze - please apply. thanks Joseph, David > -- > Joseph S. Myers > joseph@codesourcery.com
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