This is the mail archive of the libc-ports@sources.redhat.com mailing list for the libc-ports 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]

Restore MIPS n64 posix_fadvise64 export at GLIBC_2.3.3 (bug 14044)


Similar to the ABI comparisons I did for ARM with old binaries, I also did 
such comparisons for MIPS.  This showed that n64's export of 
posix_fadvise64 at version GLIBC_2.3.3 had disappeared as a result of my 
patch <http://sourceware.org/ml/libc-ports/2009-12/msg00001.html>.  The 
ABI was to export posix_fadvise64 at both GLIBC_2.2 and GLIBC_2.3.3 (with 
identical semantics - there was no need for the two symbol versions on 
n64, but given that glibc was released with them they should both stay as 
part of the ABI), so I've applied this patch to restore the GLIBC_2.3.3 
export.

The other ABI changes seen in the comparison I don't think we can do 
anything about now: the __p_type_syms size change I mentioned for ARM, and 
my PTHREAD_STACK_MIN change 
<http://sourceware.org/ml/libc-ports/2007-06/msg00006.html> wrongly caused 
new versions of pthread_attr_setstack and pthread_attr_setstacksize to be 
added to libpthread at version GLIBC_2.3.3 instead of a newer version 
(this last one won't break any binaries, it's just not what the symbol 
version ought to have been at that date).

diff --git a/ChangeLog.mips b/ChangeLog.mips
index f487d39..21d48cf 100644
--- a/ChangeLog.mips
+++ b/ChangeLog.mips
@@ -1,3 +1,11 @@
+2012-05-01  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #14044]
+	* sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise.c: Copy
+	from libc version and add symbol versions.
+	* sysdeps/unix/sysv/linux/mips/mips64/n64/nptl/libc.abilis
+	(GLIBC_2.3.3): Add posix_fadvise64.
+
 2012-04-28  Joseph Myers  <joseph@codesourcery.com>
 
 	* sysdeps/unix/sysv/linux/mips/mips32/nptl/ld.abilist: New file.
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/nptl/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/nptl/libc.abilist
index 1deec22..12c15d3 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/nptl/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/nptl/libc.abilist
@@ -2045,6 +2045,7 @@ GLIBC_2.3.3
  inet6_option_space F
  nftw F
  nftw64 F
+ posix_fadvise64 F
  remap_file_pages F
  sched_getaffinity F
  sched_setaffinity F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise.c
index 0287b83..2b7c0e2 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise.c
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise.c
@@ -1 +1,50 @@
-#include <sysdeps/unix/sysv/linux/wordsize-64/posix_fadvise.c>
+/* Copyright (C) 2003-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/>.  */
+
+#define posix_fadvise64 __no_posix_fadvise64
+#include <errno.h>
+#include <fcntl.h>
+#include <sysdep.h>
+#undef posix_fadvise64
+
+/* 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)
+{
+#ifdef __NR_fadvise64
+  INTERNAL_SYSCALL_DECL (err);
+  int ret = INTERNAL_SYSCALL (fadvise64, err, 4, fd, offset, len, advise);
+  if (INTERNAL_SYSCALL_ERROR_P (ret, err))
+    return INTERNAL_SYSCALL_ERRNO (ret, err);
+  return 0;
+#else
+  return ENOSYS;
+#endif
+}
+
+#include <shlib-compat.h>
+
+#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3)
+strong_alias (posix_fadvise, __posix_fadvise64_l32);
+compat_symbol (libc, __posix_fadvise64_l32, posix_fadvise64, GLIBC_2_2);
+strong_alias (posix_fadvise, __posix_fadvise64_l64);
+versioned_symbol (libc, __posix_fadvise64_l64, posix_fadvise64, GLIBC_2_3_3);
+#else
+strong_alias (posix_fadvise, posix_fadvise64);
+#endif

-- 
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]