glibc/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
Joseph Myers d7a68734f7 Fix futimesat for older MicroBlaze kernels (bug 16648).
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).

	[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.
2014-03-31 12:51:45 +00:00

56 lines
1.9 KiB
C

/* Copyright (C) 2011-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 uses socketcall. */
#define __ASSUME_SOCKETCALL 1
/* MicroBlaze glibc support starts with 2.6.30, guaranteeing many kernel features. */
#define __ASSUME_UTIMES 1
#define __ASSUME_O_CLOEXEC 1
#define __ASSUME_SOCK_CLOEXEC 1
#define __ASSUME_IN_NONBLOCK 1
#define __ASSUME_PIPE2 1
#define __ASSUME_EVENTFD2 1
#define __ASSUME_SIGNALFD4 1
#define __ASSUME_DUP3 1
/* Support for the accept4 and recvmmsg syscalls was added in 2.6.33. */
#if __LINUX_KERNEL_VERSION >= 0x020621
# define __ASSUME_ACCEPT4_SYSCALL 1
# define __ASSUME_RECVMMSG_SYSCALL 1
#endif
#define __ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL 1
/* Support for the sendmmsg syscall was added in 3.3. */
#if __LINUX_KERNEL_VERSION >= 0x030300
# 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
pwritev syscalls. */
#undef __ASSUME_PSELECT
#undef __ASSUME_PREADV
#undef __ASSUME_PWRITEV