This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.16-ports-merge-263-g563c840
- From: vapier at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 27 Aug 2012 16:16:29 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.16-ports-merge-263-g563c840
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 563c840564dce77de47b3912a741baa93bdd3b67 (commit)
from 7efb4737dd729326e5339facbd785cee43fb53b3 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=563c840564dce77de47b3912a741baa93bdd3b67
commit 563c840564dce77de47b3912a741baa93bdd3b67
Author: Mike Frysinger <vapier@gentoo.org>
Date: Fri Aug 17 13:01:28 2012 -0400
alpha: add conditional fdatasync support
While most arches have had the fdatasync syscall for a long time, the
alpha port didn't add it until the 2.6.22 release.
This is heavily based on Aurelien Jarno's initial work.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
diff --git a/ports/ChangeLog.alpha b/ports/ChangeLog.alpha
index 266f42d..19edf6f 100644
--- a/ports/ChangeLog.alpha
+++ b/ports/ChangeLog.alpha
@@ -1,3 +1,11 @@
+2012-08-27 Mike Frysinger <vapier@gentoo.org>
+
+ [BZ #5400]
+ * sysdeps/unix/sysv/linux/alpha/Makefile (CFLAGS-fdatasync.c): Define.
+ * sysdeps/unix/sysv/linux/alpha/fdatasync.c: New file
+ * sysdeps/unix/sysv/linux/alpha/kernel-features.h
+ (__ASSUME_FDATASYNC): Define.
+
2012-08-16 Carlos O'Donell <carlos_odonell@mentor.com>
* sysdeps/alpha/ldsodefs.h (ARCH_PLTENTER_MEMBERS)
diff --git a/ports/sysdeps/unix/sysv/linux/alpha/Makefile b/ports/sysdeps/unix/sysv/linux/alpha/Makefile
index f64f23f..9676fee 100644
--- a/ports/sysdeps/unix/sysv/linux/alpha/Makefile
+++ b/ports/sysdeps/unix/sysv/linux/alpha/Makefile
@@ -20,6 +20,7 @@ sysdep_routines += osf_select osf_gettimeofday osf_settimeofday \
# Support old ipc control
sysdep_routines += oldmsgctl oldsemctl oldshmctl
+CFLAGS-fdatasync.c = -fexceptions
CFLAGS-ioperm.c = -Wa,-mev6
endif
diff --git a/ports/sysdeps/unix/sysv/linux/alpha/fdatasync.c b/ports/sysdeps/unix/sysv/linux/alpha/fdatasync.c
new file mode 100644
index 0000000..10f5035
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/alpha/fdatasync.c
@@ -0,0 +1,65 @@
+/* fdatasync -- synchronize at least the data part of a file with
+ the underlying media. Linux version.
+
+ Copyright (C) 2007-2012 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/>. */
+
+#include <errno.h>
+#include <unistd.h>
+
+#include <sysdep-cancel.h>
+#include <sys/syscall.h>
+#include <bp-checks.h>
+
+#include <kernel-features.h>
+
+static int
+do_fdatasync (int fd)
+{
+#ifdef __ASSUME_FDATASYNC
+ return INLINE_SYSCALL (fdatasync, 1, fd);
+#elif defined __NR_fdatasync
+ static int __have_no_fdatasync;
+
+ if (!__builtin_expect (__have_no_fdatasync, 0))
+ {
+ int result = INLINE_SYSCALL (fdatasync, 1, fd);
+ if (__builtin_expect (result, 0) != -1 || errno != ENOSYS)
+ return result;
+
+ __have_no_fdatasync = 1;
+ }
+#endif
+ return INLINE_SYSCALL (fsync, 1, fd);
+}
+
+int
+__fdatasync (int fd)
+{
+ if (SINGLE_THREAD_P)
+ return do_fdatasync (fd);
+
+ int oldtype = LIBC_CANCEL_ASYNC ();
+
+ int result = do_fdatasync (fd);
+
+ LIBC_CANCEL_RESET (oldtype);
+
+ return result;
+}
+
+weak_alias (__fdatasync, fdatasync)
diff --git a/ports/sysdeps/unix/sysv/linux/alpha/kernel-features.h b/ports/sysdeps/unix/sysv/linux/alpha/kernel-features.h
index ee349bc..9fb5379 100644
--- a/ports/sysdeps/unix/sysv/linux/alpha/kernel-features.h
+++ b/ports/sysdeps/unix/sysv/linux/alpha/kernel-features.h
@@ -82,4 +82,9 @@
#undef __ASSUME_STATFS64
#define __ASSUME_STATFS64 0
+/* Support for fsyncdata was added for alpha after 2.6.21. */
+#if __LINUX_KERNEL_VERSION >= 0x020616
+# define __ASSUME_FDATASYNC 1
+#endif
+
#endif /* _KERNEL_FEATURES_H */
-----------------------------------------------------------------------
Summary of changes:
ports/ChangeLog.alpha | 8 ++++
ports/sysdeps/unix/sysv/linux/alpha/Makefile | 1 +
.../linux/{generic/poll.c => alpha/fdatasync.c} | 44 ++++++++++++-------
.../unix/sysv/linux/alpha/kernel-features.h | 5 ++
4 files changed, 42 insertions(+), 16 deletions(-)
copy ports/sysdeps/unix/sysv/linux/{generic/poll.c => alpha/fdatasync.c} (55%)
hooks/post-receive
--
GNU C Library master sources