This is the mail archive of the glibc-cvs@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]

GNU C Library master sources branch master updated. glibc-2.25-2-g841a67a


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  841a67a0ade3ea9e3d10c044524a199fa608cc7e (commit)
      from  58557c229319a3b8d2eefdb62e7df95089eabe37 (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://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=841a67a0ade3ea9e3d10c044524a199fa608cc7e

commit 841a67a0ade3ea9e3d10c044524a199fa608cc7e
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Fri Jan 13 15:24:53 2017 -0200

    Consolidate arm and mips posix_fadvise implementations
    
    As noted by c1f0601389db64d9, previous posix_fadvise consolidation
    broke on mips o32.  As stated in commit message, MIPS o32 only defines
    __NR_fadvise64 and it is behaves like __NR_fadvise64_64.
    
    This patches consolidates both ARM and mips o32 version by fixing
    the ARM used option (__NR_fadvise64_64 withouth the alignment required
    by abi) and added another option, __ASSUME_FADVISE64_AS_64_64,
    which is used on mips o32.
    
    When this option is used, posix_fadvise will use __NR_fadvise64_64
    behavior (by defining or not __ASSUME_FADVISE64_64_6ARG).  For
    mips, if __NR_fadvise64_64 is not defined, __NR_fadvise will be used.
    
    I also updated the posix_fadvise comments to explain better the
    different kernel abi used in the supported architectures.
    
    I checked with a mips o32 and verified that posix_fadvise.o is
    indeed using 7 argument syscall with the expected argument position.
    I also checked on i686-linux-gnu and arm-gnu-eabihf.
    
    	* sysdeps/unix/sysv/linux/arm/posix_fadvise.c: Remove file.
    	* sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c: Likewise.
    	* sysdeps/unix/sysv/linux/mips/kernel-features.h
    	(__ASSUME_FADVISE64_AS_64_64): Define.
    	* sysdeps/unix/sysv/linux/posix_fadvise.c [__NR_fadvise64]: Add
    	!defined __ASSUME_FADVISE64_AS_64_64 to use syscall issue.
    	[!__NR_fadvise64 && __ASSUME_FADVISE64_64_6ARG]: Remove
    	__ALIGNMENT_ARG usage.
    	[!__NR_fadvise64 && !__ASSUME_FADVISE64_64_6ARG]: Define
    	__NR_fadvise64_64 if it is not defined.

diff --git a/ChangeLog b/ChangeLog
index 6037fef..d4888b4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2017-02-06  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
+
+	* sysdeps/unix/sysv/linux/arm/posix_fadvise.c: Remove file.
+	* sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c: Likewise.
+	* sysdeps/unix/sysv/linux/mips/kernel-features.h
+	(__ASSUME_FADVISE64_AS_64_64): Define.
+	* sysdeps/unix/sysv/linux/posix_fadvise.c [__NR_fadvise64]: Add
+	!defined __ASSUME_FADVISE64_AS_64_64 to use syscall issue.
+	[!__NR_fadvise64 && __ASSUME_FADVISE64_64_6ARG]: Remove
+	__ALIGNMENT_ARG usage.
+	[!__NR_fadvise64 && !__ASSUME_FADVISE64_64_6ARG]: Define
+	__NR_fadvise64_64 if it is not defined.
+
 2017-02-05  Siddhesh Poyarekar  <siddhesh@sourceware.org>
 
 	* version.h (RELEASE): Set to "development"
diff --git a/sysdeps/unix/sysv/linux/arm/posix_fadvise.c b/sysdeps/unix/sysv/linux/arm/posix_fadvise.c
deleted file mode 100644
index fafcde5..0000000
--- a/sysdeps/unix/sysv/linux/arm/posix_fadvise.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright (C) 2005-2017 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 <fcntl.h>
-
-int __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise);
-
-/* Advice the system about the expected behaviour of the application with
-   respect to the file associated with FD.  */
-
-int
-posix_fadvise (int fd, off_t offset, off_t len, int advise)
-{
-  /* ARM only has a syscall for fadvise64_64.  */
-  return __posix_fadvise64_l64 (fd, offset, len, advise);
-}
diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h
index 83a5c8f..7db5338 100644
--- a/sysdeps/unix/sysv/linux/mips/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h
@@ -34,6 +34,9 @@
 # define __ASSUME_ALIGNED_REGISTER_PAIRS	1
 /* mips32 only supports ipc syscall.  */
 # undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+
+/* The o32 MIPS fadvise64 syscall behaves as fadvise64_64.  */
+# define __ASSUME_FADVISE64_AS_64_64		1
 #endif
 
 /* Define that mips64-n32 is a ILP32 ABI to set the correct interface to
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c b/sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c
deleted file mode 100644
index 6e9c3f9..0000000
--- a/sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c
+++ /dev/null
@@ -1,4 +0,0 @@
-/* The o32 MIPS fadvise64 syscall behaves as fadvise64_64.  The ARM
-   implementation of posix_fadvise works correctly for this case; the
-   generic implementation mishandles it.  */
-#include <sysdeps/unix/sysv/linux/arm/posix_fadvise.c>
diff --git a/sysdeps/unix/sysv/linux/posix_fadvise.c b/sysdeps/unix/sysv/linux/posix_fadvise.c
index 15d72d4..222ac97 100644
--- a/sysdeps/unix/sysv/linux/posix_fadvise.c
+++ b/sysdeps/unix/sysv/linux/posix_fadvise.c
@@ -24,12 +24,16 @@
 
 #ifndef __OFF_T_MATCHES_OFF64_T
 
-/* Both arm and powerpc implements fadvise64_64 with last 'advise' argument
-   just after 'fd' to avoid the requirement of implementing 7-arg syscalls.
-   ARM also defines __NR_fadvise64_64 as __NR_arm_fadvise64_64.
+/* Default implementation will use __NR_fadvise64 with expected argument
+   positions (for instance i386 and powerpc32 that uses __ALIGNMENT_ARG).
 
-   tile requires __ASSUME_ALIGNED_REGISTER_PAIRS but implements the 32-bit
-   fadvise64_64 without the padding 0 after fd.
+   Second option will be used by arm which define __NR_arm_fadvise64_64
+   (redefined to __NR_fadvise64_64 in kernel-features.h) that behaves as
+   __NR_fadvise64_64 (without the aligment argument required for the ABI).
+
+   Third option will be used by both tile 32-bits and mips o32.  Tile
+   will set __ASSUME_FADVISE64_64_NO_ALIGN to issue a 6 argument syscall,
+   while mips will use a 7 argument one with __NR_fadvise64.
 
    s390 implements fadvice64_64 using a specific struct with arguments
    packed inside.  This is the only implementation handled in arch-specific
@@ -39,15 +43,14 @@ int
 posix_fadvise (int fd, off_t offset, off_t len, int advise)
 {
   INTERNAL_SYSCALL_DECL (err);
-# ifdef __NR_fadvise64
+# if defined (__NR_fadvise64) && !defined (__ASSUME_FADVISE64_AS_64_64)
   int ret = INTERNAL_SYSCALL_CALL (fadvise64, err, fd,
 				   __ALIGNMENT_ARG SYSCALL_LL (offset),
 				   len, advise);
 # else
 #  ifdef __ASSUME_FADVISE64_64_6ARG
   int ret = INTERNAL_SYSCALL_CALL (fadvise64_64, err, fd, advise,
-				   __ALIGNMENT_ARG SYSCALL_LL (offset),
-				   SYSCALL_LL (len));
+				   SYSCALL_LL (offset), SYSCALL_LL (len));
 #  else
 
 #   ifdef __ASSUME_FADVISE64_64_NO_ALIGN
@@ -55,6 +58,10 @@ posix_fadvise (int fd, off_t offset, off_t len, int advise)
 #    define __ALIGNMENT_ARG
 #   endif
 
+#   ifndef __NR_fadvise64_64
+#    define __NR_fadvise64_64 __NR_fadvise64
+#   endif
+
   int ret = INTERNAL_SYSCALL_CALL (fadvise64_64, err, fd,
 				   __ALIGNMENT_ARG SYSCALL_LL (offset),
 				   SYSCALL_LL (len), advise);

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   13 ++++++++
 sysdeps/unix/sysv/linux/arm/posix_fadvise.c        |   30 --------------------
 sysdeps/unix/sysv/linux/mips/kernel-features.h     |    3 ++
 .../unix/sysv/linux/mips/mips32/posix_fadvise.c    |    4 --
 sysdeps/unix/sysv/linux/posix_fadvise.c            |   23 ++++++++++-----
 5 files changed, 31 insertions(+), 42 deletions(-)
 delete mode 100644 sysdeps/unix/sysv/linux/arm/posix_fadvise.c
 delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c


hooks/post-receive
-- 
GNU C Library master sources


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