about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog50
-rw-r--r--bits/typesizes.h7
-rw-r--r--io/lockf.c16
-rw-r--r--io/lockf64.c7
-rw-r--r--libio/fseeko.c6
-rw-r--r--libio/fseeko64.c7
-rw-r--r--libio/ftello.c7
-rw-r--r--libio/ftello64.c6
-rw-r--r--libio/iofgetpos.c20
-rw-r--r--libio/iofgetpos64.c6
-rw-r--r--libio/iofsetpos.c20
-rw-r--r--libio/iofsetpos64.c7
-rw-r--r--ports/ChangeLog.alpha5
-rw-r--r--ports/ChangeLog.linux-generic5
-rw-r--r--ports/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h6
-rw-r--r--ports/sysdeps/unix/sysv/linux/generic/bits/typesizes.h7
-rw-r--r--sysdeps/unix/bsd/bsd4.4/freebsd/bits/typesizes.h5
-rw-r--r--sysdeps/unix/sysv/linux/s390/bits/typesizes.h7
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/typesizes.h7
-rw-r--r--sysdeps/unix/sysv/linux/x86/bits/typesizes.h7
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/fseeko.c1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/fseeko64.c1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/ftello.c1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/ftello64.c1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/iofgetpos.c1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/iofgetpos64.c1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/iofsetpos.c1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/iofsetpos64.c1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/lockf.c1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/lockf64.c1
-rw-r--r--sysdeps/wordsize-64/fseeko.c3
-rw-r--r--sysdeps/wordsize-64/fseeko64.c1
-rw-r--r--sysdeps/wordsize-64/ftello.c3
-rw-r--r--sysdeps/wordsize-64/ftello64.c1
-rw-r--r--sysdeps/wordsize-64/iofgetpos.c12
-rw-r--r--sysdeps/wordsize-64/iofgetpos64.c1
-rw-r--r--sysdeps/wordsize-64/iofsetpos.c12
-rw-r--r--sysdeps/wordsize-64/iofsetpos64.c1
-rw-r--r--sysdeps/wordsize-64/lockf.c3
-rw-r--r--sysdeps/wordsize-64/lockf64.c1
40 files changed, 190 insertions, 66 deletions
diff --git a/ChangeLog b/ChangeLog
index 81bc264ab6..a631c00e02 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,53 @@
+2012-08-06  Roland McGrath  <roland@hack.frob.com>
+
+	* io/lockf.c [__OFF_T_MATCHES_OFF64_T]:
+	Define lockf64 as an alias.
+	* libio/fseeko.c [__OFF_T_MATCHES_OFF64_T]:
+	Define fseeko64 as an alias.
+	* libio/ftello.c [__OFF_T_MATCHES_OFF64_T]:
+	Define ftello64 as an alias.
+	* libio/iofgetpos.c [__OFF_T_MATCHES_OFF64_T]:
+	Define _IO_fgetpos64 and fgetpos64 as aliases.
+	* libio/iofsetpos.c [__OFF_T_MATCHES_OFF64_T]:
+	Define _IO_fsetpos64 and fsetpos64 as aliases.
+	* io/lockf64.c [!__OFF_T_MATCHES_OFF64_T]:
+	Conditionalize body on this.
+	* libio/fseeko64.c: Likewise.
+	* libio/ftello64.c: Likewise.
+	* libio/iofgetpos64.c: Likewise.
+	* libio/iofsetpos64.c: Likewise.
+	* sysdeps/wordsize-64/lockf.c: File removed.
+	* sysdeps/wordsize-64/lockf64.c: File removed.
+	* sysdeps/wordsize-64/fseeko.c: File removed.
+	* sysdeps/wordsize-64/fseeko64.c: File removed.
+	* sysdeps/wordsize-64/ftello.c: File removed.
+	* sysdeps/wordsize-64/ftello64.c: File removed.
+	* sysdeps/wordsize-64/iofgetpos.c: File removed.
+	* sysdeps/wordsize-64/iofgetpos64.c: File removed.
+	* sysdeps/wordsize-64/iofsetpos.c: File removed.
+	* sysdeps/wordsize-64/iofsetpos64.c: File removed.
+	* sysdeps/unix/sysv/linux/x86_64/x32/lockf.c: File removed.
+	* sysdeps/unix/sysv/linux/x86_64/x32/lockf64.c: File removed.
+	* sysdeps/unix/sysv/linux/x86_64/x32/fseeko.c: File removed.
+	* sysdeps/unix/sysv/linux/x86_64/x32/fseeko64.c: File removed.
+	* sysdeps/unix/sysv/linux/x86_64/x32/ftello.c: File removed.
+	* sysdeps/unix/sysv/linux/x86_64/x32/ftello64.c: File removed.
+	* sysdeps/unix/sysv/linux/x86_64/x32/iofgetpos.c: File removed.
+	* sysdeps/unix/sysv/linux/x86_64/x32/iofgetpos64.c: File removed.
+	* sysdeps/unix/sysv/linux/x86_64/x32/iofsetpos.c: File removed.
+	* sysdeps/unix/sysv/linux/x86_64/x32/iofsetpos64.c: File removed.
+
+	* bits/typesizes.h [__LP64__] (__OFF_T_MATCHES_OFF64_T): New macro.
+	* sysdeps/unix/sysv/linux/s390/bits/typesizes.h:
+	[__s390x__] (__OFF_T_MATCHES_OFF64_T): New macro.
+	* sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
+	[defined __arch64__ || defined __sparcv9]
+	(__OFF_T_MATCHES_OFF64_T): New macro.
+	* sysdeps/unix/sysv/linux/x86/bits/typesizes.h
+	[__x86_64__] (__OFF_T_MATCHES_OFF64_T): New macro.
+	* sysdeps/unix/bsd/bsd4.4/freebsd/bits/typesizes.h
+	(__OFF_T_MATCHES_OFF64_T): New macro.
+
 2012-08-06  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* stdlib/secure-getenv.c (__secure_getenv): Replace
diff --git a/bits/typesizes.h b/bits/typesizes.h
index 3fd4a2e067..09959f2b45 100644
--- a/bits/typesizes.h
+++ b/bits/typesizes.h
@@ -61,6 +61,13 @@
 #define __SYSCALL_SLONG_TYPE	__SLONGWORD_TYPE
 #define __SYSCALL_ULONG_TYPE	__ULONGWORD_TYPE
 
+#ifdef __LP64__
+/* Tell the libc code that off_t and off64_t are actually the same type
+   for all ABI purposes, even if possibly expressed as different base types
+   for C type-checking purposes.  */
+# define __OFF_T_MATCHES_OFF64_T	1
+#endif
+
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define	__FD_SETSIZE		1024
 
diff --git a/io/lockf.c b/io/lockf.c
index 42232d0764..1ee95114d7 100644
--- a/io/lockf.c
+++ b/io/lockf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994,1996,1997,1998,2000,2003 Free Software Foundation, Inc.
+/* Copyright (C) 1994-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
@@ -15,9 +15,17 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+/* We need to avoid the header declaration of lockf64, because
+   the types don't match lockf and then the compiler will
+   complain about the mismatch when we do the alias below.  */
+#define lockf64	__renamed_lockf64
+
+#include <fcntl.h>
+
+#undef	lockf64
+
 #include <sys/types.h>
 #include <unistd.h>
-#include <fcntl.h>
 #include <errno.h>
 #include <string.h>
 
@@ -71,3 +79,7 @@ lockf (int fd, int cmd, off_t len)
      the fcntl() function will take care of it.  */
   return __fcntl (fd, cmd, &fl);
 }
+
+#ifdef __OFF_T_MATCHES_OFF64_T
+weak_alias (lockf, lockf64)
+#endif
diff --git a/io/lockf64.c b/io/lockf64.c
index 80ca151c19..60516ebaad 100644
--- a/io/lockf64.c
+++ b/io/lockf64.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994,96,97,98,99,2000 Free Software Foundation, Inc.
+/* Copyright (C) 1994-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
@@ -21,6 +21,9 @@
 #include <errno.h>
 #include <string.h>
 
+/* lockf.c defines lockf64 as an lias if __OFF_T_MATCHES_OFF64_T.  */
+#ifndef __OFF_T_MATCHES_OFF64_T
+
 /* lockf is a simplified interface to fcntl's locking facilities.  */
 
 int
@@ -76,3 +79,5 @@ lockf64 (int fd, int cmd, off64_t len64)
 
   return __fcntl (fd, cmd, &fl);
 }
+
+#endif
diff --git a/libio/fseeko.c b/libio/fseeko.c
index 7a70636e57..6d37aeaab8 100644
--- a/libio/fseeko.c
+++ b/libio/fseeko.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993,1995,1996,1997,1998,2003 Free Software Foundation, Inc.
+/* Copyright (C) 1993-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
@@ -40,3 +40,7 @@ fseeko (fp, offset, whence)
   _IO_release_lock (fp);
   return result;
 }
+
+#ifdef __OFF_T_MATCHES_OFF64_T
+weak_alias (fseeko, fseeko64)
+#endif
diff --git a/libio/fseeko64.c b/libio/fseeko64.c
index 2291f61487..9fbe308c56 100644
--- a/libio/fseeko64.c
+++ b/libio/fseeko64.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993,1995,1996,1997,1998,2003 Free Software Foundation, Inc.
+/* Copyright (C) 1993-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
@@ -28,6 +28,9 @@
 #include "libioP.h"
 #include "stdio.h"
 
+/* fseeko.c defines this as an alias if __OFF_T_MATCHES_OFF64_T.  */
+#ifndef __OFF_T_MATCHES_OFF64_T
+
 int
 fseeko64 (fp, offset, whence)
      _IO_FILE* fp;
@@ -46,3 +49,5 @@ fseeko64 (fp, offset, whence)
   return -1;
 #endif
 }
+
+#endif
diff --git a/libio/ftello.c b/libio/ftello.c
index 1d85bc6e4c..90522769ea 100644
--- a/libio/ftello.c
+++ b/libio/ftello.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993, 1995-2001, 2002, 2003, 2004, 2007
-   Free Software Foundation, Inc.
+/* Copyright (C) 1993-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
@@ -63,3 +62,7 @@ ftello (fp)
   return pos;
 }
 libc_hidden_def (ftello)
+
+#ifdef __OFF_T_MATCHES_OFF64_T
+weak_alias (ftello, ftello64)
+#endif
diff --git a/libio/ftello64.c b/libio/ftello64.c
index 0f70c6630b..852ef71ebf 100644
--- a/libio/ftello64.c
+++ b/libio/ftello64.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993, 1995-2001, 2002, 2003, 2004
-   Free Software Foundation, Inc.
+/* Copyright (C) 1993-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
@@ -30,6 +29,7 @@
 #include <libioP.h>
 #include <errno.h>
 
+#ifndef __OFF_T_MATCHES_OFF64_T
 
 off64_t
 ftello64 (fp)
@@ -60,3 +60,5 @@ ftello64 (fp)
   return -1;
 #endif
 }
+
+#endif
diff --git a/libio/iofgetpos.c b/libio/iofgetpos.c
index 4338b5097a..a1d6bb693a 100644
--- a/libio/iofgetpos.c
+++ b/libio/iofgetpos.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993, 1995-2001, 2002, 2003, 2004
-   Free Software Foundation, Inc.
+/* Copyright (C) 1993-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
@@ -25,7 +24,17 @@
    This exception applies to code released by its copyright holders
    in files containing the exception.  */
 
+/* We need to avoid the header declarations of these, because
+   the types don't match _IO_fgetpos and then the compiler will
+   complain about the mismatch when we do the alias below.  */
+#define _IO_new_fgetpos64 __renamed__IO_new_fgetpos64
+#define _IO_fgetpos64 __renamed__IO_fgetpos64
+
 #include "libioP.h"
+
+#undef _IO_new_fgetpos64
+#undef _IO_fgetpos64
+
 #include <errno.h>
 #include <stdlib.h>
 #include <shlib-compat.h>
@@ -78,3 +87,10 @@ _IO_new_fgetpos (fp, posp)
 strong_alias (_IO_new_fgetpos, __new_fgetpos)
 versioned_symbol (libc, _IO_new_fgetpos, _IO_fgetpos, GLIBC_2_2);
 versioned_symbol (libc, __new_fgetpos, fgetpos, GLIBC_2_2);
+
+#ifdef __OFF_T_MATCHES_OFF64_T
+strong_alias (_IO_new_fgetpos, _IO_new_fgetpos64)
+strong_alias (_IO_new_fgetpos64, __new_fgetpos64)
+versioned_symbol (libc, _IO_new_fgetpos64, _IO_fgetpos64, GLIBC_2_2);
+versioned_symbol (libc, __new_fgetpos64, fgetpos64, GLIBC_2_2);
+#endif
diff --git a/libio/iofgetpos64.c b/libio/iofgetpos64.c
index 0cb141b143..9755c32734 100644
--- a/libio/iofgetpos64.c
+++ b/libio/iofgetpos64.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993, 1995-2001, 2002, 2003, 2004
-   Free Software Foundation, Inc.
+/* Copyright (C) 1993-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
@@ -29,6 +28,7 @@
 #include <errno.h>
 #include <shlib-compat.h>
 
+#ifndef __OFF_T_MATCHES_OFF64_T
 
 int
 _IO_new_fgetpos64 (fp, posp)
@@ -75,3 +75,5 @@ _IO_new_fgetpos64 (fp, posp)
 strong_alias (_IO_new_fgetpos64, __new_fgetpos64)
 versioned_symbol (libc, _IO_new_fgetpos64, _IO_fgetpos64, GLIBC_2_2);
 versioned_symbol (libc, __new_fgetpos64, fgetpos64, GLIBC_2_2);
+
+#endif
diff --git a/libio/iofsetpos.c b/libio/iofsetpos.c
index 19bea3b08f..5e8d444d2e 100644
--- a/libio/iofsetpos.c
+++ b/libio/iofsetpos.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993, 1995, 1997, 1998, 1999, 2000, 2002, 2003
-   Free Software Foundation, Inc.
+/* Copyright (C) 1993-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
@@ -25,7 +24,17 @@
    This exception applies to code released by its copyright holders
    in files containing the exception.  */
 
+/* We need to avoid the header declarations of these, because
+   the types don't match _IO_fsetpos and then the compiler will
+   complain about the mismatch when we do the alias below.  */
+#define _IO_new_fsetpos64 __renamed__IO_new_fsetpos64
+#define _IO_fsetpos64 __renamed__IO_fsetpos64
+
 #include <libioP.h>
+
+#undef _IO_new_fsetpos64
+#undef _IO_fsetpos64
+
 #include <errno.h>
 #include <shlib-compat.h>
 
@@ -63,3 +72,10 @@ _IO_new_fsetpos (fp, posp)
 strong_alias (_IO_new_fsetpos, __new_fsetpos)
 versioned_symbol (libc, _IO_new_fsetpos, _IO_fsetpos, GLIBC_2_2);
 versioned_symbol (libc, __new_fsetpos, fsetpos, GLIBC_2_2);
+
+#ifdef __OFF_T_MATCHES_OFF64_T
+strong_alias (_IO_new_fsetpos, _IO_new_fsetpos64)
+strong_alias (_IO_new_fsetpos64, __new_fsetpos64)
+versioned_symbol (libc, __new_fsetpos64, fsetpos64, GLIBC_2_2);
+versioned_symbol (libc, _IO_new_fsetpos64, _IO_fsetpos64, GLIBC_2_2);
+#endif
diff --git a/libio/iofsetpos64.c b/libio/iofsetpos64.c
index 9835c127c1..20edd8dd65 100644
--- a/libio/iofsetpos64.c
+++ b/libio/iofsetpos64.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993, 1995, 1997, 1998, 1999, 2000, 2002, 2003
-   Free Software Foundation, Inc.
+/* Copyright (C) 1993-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
@@ -29,6 +28,8 @@
 #include <errno.h>
 #include <shlib-compat.h>
 
+#ifndef __OFF_T_MATCHES_OFF64_T
+
 int
 _IO_new_fsetpos64 (fp, posp)
      _IO_FILE *fp;
@@ -68,3 +69,5 @@ _IO_new_fsetpos64 (fp, posp)
 strong_alias (_IO_new_fsetpos64, __new_fsetpos64)
 versioned_symbol (libc, __new_fsetpos64, fsetpos64, GLIBC_2_2);
 versioned_symbol (libc, _IO_new_fsetpos64, _IO_fsetpos64, GLIBC_2_2);
+
+#endif
diff --git a/ports/ChangeLog.alpha b/ports/ChangeLog.alpha
index b0d66edea7..b13857f92d 100644
--- a/ports/ChangeLog.alpha
+++ b/ports/ChangeLog.alpha
@@ -1,3 +1,8 @@
+2012-08-02  Roland McGrath  <roland@hack.frob.com>
+
+	* sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
+	(__OFF_T_MATCHES_OFF64_T): New macro.
+
 2012-08-03  Joseph Myers  <joseph@codesourcery.com>
 
 	* sysdeps/unix/sysv/linux/alpha/configure.in
diff --git a/ports/ChangeLog.linux-generic b/ports/ChangeLog.linux-generic
index 79d46129b3..b5774de5ff 100644
--- a/ports/ChangeLog.linux-generic
+++ b/ports/ChangeLog.linux-generic
@@ -1,3 +1,8 @@
+2012-08-02  Roland McGrath  <roland@hack.frob.com>
+
+	* sysdeps/unix/sysv/linux/generic/bits/typesizes.h
+	[__LP64__] (__OFF_T_MATCHES_OFF64_T): New macro.
+
 2012-05-30  Chris Metcalf  <cmetcalf@tilera.com>
 
 	* sysdeps/unix/sysv/linux/generic/syscalls.list: Remove
diff --git a/ports/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h b/ports/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
index 2dbeb42a17..31258e4205 100644
--- a/ports/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
+++ b/ports/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
@@ -1,5 +1,5 @@
 /* bits/typesizes.h -- underlying types for *_t.  Linux/Alpha version.
-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2002-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
@@ -61,6 +61,10 @@
 #define __SYSCALL_ULONG_TYPE	__ULONGWORD_TYPE
 #define __FSWORD_T_TYPE		__S32_TYPE
 
+/* Tell the libc code that off_t and off64_t are actually the same type
+   for all ABI purposes, even if possibly expressed as different base types
+   for C type-checking purposes.  */
+#define __OFF_T_MATCHES_OFF64_T	1
 
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define	__FD_SETSIZE		1024
diff --git a/ports/sysdeps/unix/sysv/linux/generic/bits/typesizes.h b/ports/sysdeps/unix/sysv/linux/generic/bits/typesizes.h
index 948edeb96b..670c6d119f 100644
--- a/ports/sysdeps/unix/sysv/linux/generic/bits/typesizes.h
+++ b/ports/sysdeps/unix/sysv/linux/generic/bits/typesizes.h
@@ -62,6 +62,13 @@
 #define __SYSCALL_SLONG_TYPE	__SLONGWORD_TYPE
 #define __SYSCALL_ULONG_TYPE	__ULONGWORD_TYPE
 
+#ifdef __LP64__
+/* Tell the libc code that off_t and off64_t are actually the same type
+   for all ABI purposes, even if possibly expressed as different base types
+   for C type-checking purposes.  */
+# define __OFF_T_MATCHES_OFF64_T	1
+#endif
+
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define	__FD_SETSIZE		1024
 
diff --git a/sysdeps/unix/bsd/bsd4.4/freebsd/bits/typesizes.h b/sysdeps/unix/bsd/bsd4.4/freebsd/bits/typesizes.h
index 02c24e44c0..67d82e6e75 100644
--- a/sysdeps/unix/bsd/bsd4.4/freebsd/bits/typesizes.h
+++ b/sysdeps/unix/bsd/bsd4.4/freebsd/bits/typesizes.h
@@ -61,6 +61,11 @@
 #define __SYSCALL_SLONG_TYPE	__SLONGWORD_TYPE
 #define __SYSCALL_ULONG_TYPE	__ULONGWORD_TYPE
 
+
+/* Tell the libc code that off_t and off64_t are actually the same type.  */
+#define __OFF_T_MATCHES_OFF64_T	1
+
+
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define	__FD_SETSIZE		1024
 
diff --git a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
index def84cc790..bf3d8b761e 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
@@ -67,6 +67,13 @@
 #define __SYSCALL_SLONG_TYPE	__SLONGWORD_TYPE
 #define __SYSCALL_ULONG_TYPE	__ULONGWORD_TYPE
 
+#ifdef __s390x__
+/* Tell the libc code that off_t and off64_t are actually the same type
+   for all ABI purposes, even if possibly expressed as different base types
+   for C type-checking purposes.  */
+# define __OFF_T_MATCHES_OFF64_T	1
+#endif
+
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define	__FD_SETSIZE		1024
 
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h b/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
index b65a1a5cdb..7b1f19184b 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
@@ -61,6 +61,13 @@
 #define __SYSCALL_SLONG_TYPE	__SLONGWORD_TYPE
 #define __SYSCALL_ULONG_TYPE	__ULONGWORD_TYPE
 
+#if defined __arch64__ || defined __sparcv9
+/* Tell the libc code that off_t and off64_t are actually the same type
+   for all ABI purposes, even if possibly expressed as different base types
+   for C type-checking purposes.  */
+# define __OFF_T_MATCHES_OFF64_T	1
+#endif
+
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define	__FD_SETSIZE		1024
 
diff --git a/sysdeps/unix/sysv/linux/x86/bits/typesizes.h b/sysdeps/unix/sysv/linux/x86/bits/typesizes.h
index be8985b4c6..a477627a1b 100644
--- a/sysdeps/unix/sysv/linux/x86/bits/typesizes.h
+++ b/sysdeps/unix/sysv/linux/x86/bits/typesizes.h
@@ -73,6 +73,13 @@
 #define __FSID_T_TYPE		struct { int __val[2]; }
 #define __SSIZE_T_TYPE		__SWORD_TYPE
 
+#ifdef __x86_64__
+/* Tell the libc code that off_t and off64_t are actually the same type
+   for all ABI purposes, even if possibly expressed as different base types
+   for C type-checking purposes.  */
+# define __OFF_T_MATCHES_OFF64_T	1
+#endif
+
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define __FD_SETSIZE		1024
 
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/fseeko.c b/sysdeps/unix/sysv/linux/x86_64/x32/fseeko.c
deleted file mode 100644
index dc47698f23..0000000000
--- a/sysdeps/unix/sysv/linux/x86_64/x32/fseeko.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/wordsize-64/fseeko.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/fseeko64.c b/sysdeps/unix/sysv/linux/x86_64/x32/fseeko64.c
deleted file mode 100644
index 3e554ec1ea..0000000000
--- a/sysdeps/unix/sysv/linux/x86_64/x32/fseeko64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/wordsize-64/fseeko64.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/ftello.c b/sysdeps/unix/sysv/linux/x86_64/x32/ftello.c
deleted file mode 100644
index 735e3e16b3..0000000000
--- a/sysdeps/unix/sysv/linux/x86_64/x32/ftello.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/wordsize-64/ftello.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/ftello64.c b/sysdeps/unix/sysv/linux/x86_64/x32/ftello64.c
deleted file mode 100644
index eb155ed57b..0000000000
--- a/sysdeps/unix/sysv/linux/x86_64/x32/ftello64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/wordsize-64/ftello64.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/iofgetpos.c b/sysdeps/unix/sysv/linux/x86_64/x32/iofgetpos.c
deleted file mode 100644
index de2ff015da..0000000000
--- a/sysdeps/unix/sysv/linux/x86_64/x32/iofgetpos.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/wordsize-64/iofgetpos.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/iofgetpos64.c b/sysdeps/unix/sysv/linux/x86_64/x32/iofgetpos64.c
deleted file mode 100644
index 34aabfc6be..0000000000
--- a/sysdeps/unix/sysv/linux/x86_64/x32/iofgetpos64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/wordsize-64/iofgetpos64.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/iofsetpos.c b/sysdeps/unix/sysv/linux/x86_64/x32/iofsetpos.c
deleted file mode 100644
index a4c99c93cf..0000000000
--- a/sysdeps/unix/sysv/linux/x86_64/x32/iofsetpos.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/wordsize-64/iofsetpos.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/iofsetpos64.c b/sysdeps/unix/sysv/linux/x86_64/x32/iofsetpos64.c
deleted file mode 100644
index e83fbba194..0000000000
--- a/sysdeps/unix/sysv/linux/x86_64/x32/iofsetpos64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/wordsize-64/iofsetpos64.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/lockf.c b/sysdeps/unix/sysv/linux/x86_64/x32/lockf.c
deleted file mode 100644
index 42306a08aa..0000000000
--- a/sysdeps/unix/sysv/linux/x86_64/x32/lockf.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/wordsize-64/lockf.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/lockf64.c b/sysdeps/unix/sysv/linux/x86_64/x32/lockf64.c
deleted file mode 100644
index 3b4b55abc8..0000000000
--- a/sysdeps/unix/sysv/linux/x86_64/x32/lockf64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/wordsize-64/lockf64.c>
diff --git a/sysdeps/wordsize-64/fseeko.c b/sysdeps/wordsize-64/fseeko.c
deleted file mode 100644
index 692885a8be..0000000000
--- a/sysdeps/wordsize-64/fseeko.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "../../libio/fseeko.c"
-
-weak_alias (fseeko, fseeko64)
diff --git a/sysdeps/wordsize-64/fseeko64.c b/sysdeps/wordsize-64/fseeko64.c
deleted file mode 100644
index 73e011afbb..0000000000
--- a/sysdeps/wordsize-64/fseeko64.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Defined in fseeko.c.  */
diff --git a/sysdeps/wordsize-64/ftello.c b/sysdeps/wordsize-64/ftello.c
deleted file mode 100644
index fa05cfcf02..0000000000
--- a/sysdeps/wordsize-64/ftello.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "../../libio/ftello.c"
-
-weak_alias (ftello, ftello64)
diff --git a/sysdeps/wordsize-64/ftello64.c b/sysdeps/wordsize-64/ftello64.c
deleted file mode 100644
index 2cbbe6320a..0000000000
--- a/sysdeps/wordsize-64/ftello64.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Defined in ftello.c.  */
diff --git a/sysdeps/wordsize-64/iofgetpos.c b/sysdeps/wordsize-64/iofgetpos.c
deleted file mode 100644
index ba8df67c9b..0000000000
--- a/sysdeps/wordsize-64/iofgetpos.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#define _IO_new_fgetpos64 __renamed__IO_new_fgetpos64
-#define _IO_fgetpos64 __renamed__IO_fgetpos64
-
-#include "../../libio/iofgetpos.c"
-
-#undef _IO_new_fgetpos64
-#undef _IO_fgetpos64
-
-strong_alias (_IO_new_fgetpos, _IO_new_fgetpos64)
-strong_alias (_IO_new_fgetpos64, __new_fgetpos64)
-versioned_symbol (libc, _IO_new_fgetpos64, _IO_fgetpos64, GLIBC_2_2);
-versioned_symbol (libc, __new_fgetpos64, fgetpos64, GLIBC_2_2);
diff --git a/sysdeps/wordsize-64/iofgetpos64.c b/sysdeps/wordsize-64/iofgetpos64.c
deleted file mode 100644
index 1748b810fb..0000000000
--- a/sysdeps/wordsize-64/iofgetpos64.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Defined in iofgetpos.c.  */
diff --git a/sysdeps/wordsize-64/iofsetpos.c b/sysdeps/wordsize-64/iofsetpos.c
deleted file mode 100644
index f2bb8aec55..0000000000
--- a/sysdeps/wordsize-64/iofsetpos.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#define _IO_new_fsetpos64 __renamed__IO_new_fsetpos64
-#define _IO_fsetpos64 __renamed__IO_fsetpos64
-
-#include "../../libio/iofsetpos.c"
-
-#undef _IO_new_fsetpos64
-#undef _IO_fsetpos64
-
-strong_alias (_IO_new_fsetpos, _IO_new_fsetpos64)
-strong_alias (_IO_new_fsetpos64, __new_fsetpos64)
-versioned_symbol (libc, __new_fsetpos64, fsetpos64, GLIBC_2_2);
-versioned_symbol (libc, _IO_new_fsetpos64, _IO_fsetpos64, GLIBC_2_2);
diff --git a/sysdeps/wordsize-64/iofsetpos64.c b/sysdeps/wordsize-64/iofsetpos64.c
deleted file mode 100644
index 5fbc7328b5..0000000000
--- a/sysdeps/wordsize-64/iofsetpos64.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Defined in iofsetpos.c.  */
diff --git a/sysdeps/wordsize-64/lockf.c b/sysdeps/wordsize-64/lockf.c
deleted file mode 100644
index 502472d98b..0000000000
--- a/sysdeps/wordsize-64/lockf.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "../../io/lockf.c"
-
-weak_alias (lockf, lockf64)
diff --git a/sysdeps/wordsize-64/lockf64.c b/sysdeps/wordsize-64/lockf64.c
deleted file mode 100644
index 8ef5fc6b46..0000000000
--- a/sysdeps/wordsize-64/lockf64.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Defined in lockf.c.  */