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

Remove __ASSUME_TRUNCATE64_SYSCALL


__ASSUME_TRUNCATE64_SYSCALL is used in:

sysdeps/unix/sysv/linux/ftruncate64.c
sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c
sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c
sysdeps/unix/sysv/linux/truncate64.c

None of these files is #included from anywhere else.
sysdeps/unix/sysv/linux/wordsize-64 overrides these files, as, in
ports, does MIPS, so they are only ever used by 32-bit Linux
architectures.

__ASSUME_TRUNCATE64_SYSCALL is defined (for all supported kernel
versions) for i386, sparc (32-bit), powerpc (32-bit) and sh (so the
only 32-bit libc architecture not defining it is s390-32).  In ports,
it is defined for all supported kernel versions for arm, hppa and
tile, and for 2.4.12 and later for m68k.  So the only 32-bit ports
architectures not defining it for all supported kernel versions, but
using files testing the macro, are am33 and m68k.

Examining 2.4.0-test1 sources shows that both s390 and m68k had the
syscall there, and examining 2.6.25 shows that when the mn10300/am33
port was added the syscalls were there as well.  So this macro is
obsolete and can be unconditionally assumed to be true.  I propose
this patch to remove tests and definitions of this macro accordingly.
Tested x86.  Ryan, could you test/review the powerpc32 changes?

(This is the last of the macros defined for all supported kernel
versions but only some architectures that can be removed everywhere on
the assumption of 2.4.0-test1 as minimum kernel.  After 2.16 it will
make sense to do a series of further increases of the minimum kernel
version - I think an appropriate sequence will be 2.4.1, 2.4.21,
2.6.0, 2.6.16(-rc), 2.6.16(-final) - each time cleaning up whatever
macros can be shown to be no longer needed based on the new minimum
kernel.)

2012-05-26  Joseph Myers  <joseph@codesourcery.com>

	* sysdeps/unix/sysv/linux/kernel-features.h
	(__ASSUME_TRUNCATE64_SYSCALL): Remove all definitions.
	* sysdeps/unix/sysv/linux/ftruncate64.c: Do not
	include <kernel-features.h>.
	[!__NR_ftruncate64]: Remove conditional code.
	[!__ASSUME_TRUNCATE64_SYSCALL]: Likewise.
	[__NR_ftruncate64]: Make code unconditional.
	[__ASSUME_TRUNCATE64_SYSCALL]: Likewise.
	* sysdeps/unix/sysv/linux/truncate64.c: Do not
	include <kernel-features.h>.
	[!__NR_ftruncate64]: Remove conditional code.
	[!__ASSUME_TRUNCATE64_SYSCALL]: Likewise.
	[__NR_ftruncate64]: Make code unconditional.
	[__ASSUME_TRUNCATE64_SYSCALL]: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c: Do not
	include <kernel-features.h>.
	[!__NR_ftruncate64]: Remove conditional code.
	[!__ASSUME_TRUNCATE64_SYSCALL]: Likewise.
	[__NR_ftruncate64]: Make code unconditional.
	[__ASSUME_TRUNCATE64_SYSCALL]: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c: Do not
	include <kernel-features.h>.
	[!__NR_ftruncate64]: Remove conditional code.
	[!__ASSUME_TRUNCATE64_SYSCALL]: Likewise.
	[__NR_ftruncate64]: Make code unconditional.
	[__ASSUME_TRUNCATE64_SYSCALL]: Likewise.

diff --git a/sysdeps/unix/sysv/linux/ftruncate64.c b/sysdeps/unix/sysv/linux/ftruncate64.c
index 719f025..af05a4b 100644
--- a/sysdeps/unix/sysv/linux/ftruncate64.c
+++ b/sysdeps/unix/sysv/linux/ftruncate64.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2001,2003,2005,2006,2011
-	 Free Software Foundation, Inc.
+/* Copyright (C) 1997-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
@@ -24,53 +23,14 @@
 #include <sysdep.h>
 #include <sys/syscall.h>
 
-#include <kernel-features.h>
-
-#ifdef __NR_ftruncate64
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-/* The variable is shared between all wrappers around *truncate64 calls.  */
-extern int __have_no_truncate64;
-#endif
-
-
 /* Truncate the file referenced by FD to LENGTH bytes.  */
 int
 __ftruncate64 (int fd, off64_t length)
 {
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-  if (! __have_no_truncate64)
-#endif
-    {
-      unsigned int low = length & 0xffffffff;
-      unsigned int high = length >> 32;
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-      int saved_errno = errno;
-#endif
-      int result = INLINE_SYSCALL (ftruncate64, 3, fd,
-				   __LONG_LONG_PAIR (high, low));
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-      if (result != -1 || errno != ENOSYS)
-#endif
-	return result;
-
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-      __set_errno (saved_errno);
-      __have_no_truncate64 = 1;
-#endif
-    }
-
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-  if ((off_t) length != length)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-  return __ftruncate (fd, (off_t) length);
-#endif
+  unsigned int low = length & 0xffffffff;
+  unsigned int high = length >> 32;
+  int result = INLINE_SYSCALL (ftruncate64, 3, fd,
+			       __LONG_LONG_PAIR (high, low));
+  return result;
 }
 weak_alias (__ftruncate64, ftruncate64)
-
-#else
-/* Use the generic implementation.  */
-# include <misc/ftruncate64.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index 0ea453d..4d333e8 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -40,11 +40,6 @@
 /* The sendfile syscall was introduced in 2.2.0.  */
 #define __ASSUME_SENDFILE		1
 
-/* On x86 the truncate64/ftruncate64 syscalls were introduced in 2.3.31.  */
-#ifdef __i386__
-# define __ASSUME_TRUNCATE64_SYSCALL	1
-#endif
-
 /* On x86 the mmap2 syscall was introduced in 2.3.31.  */
 #ifdef __i386__
 # define __ASSUME_MMAP2_SYSCALL	1
@@ -55,10 +50,9 @@
 # define __ASSUME_STAT64_SYSCALL	1
 #endif
 
-/* On sparc the truncate64/ftruncate64/mmap2/stat64/lstat64/fstat64
-   syscalls were introduced in 2.3.35.  */
+/* On sparc the mmap2/stat64/lstat64/fstat64 syscalls were introduced
+   in 2.3.35.  */
 #if defined __sparc__ && !defined __arch64__
-# define __ASSUME_TRUNCATE64_SYSCALL	1
 # define __ASSUME_MMAP2_SYSCALL		1
 # define __ASSUME_STAT64_SYSCALL	1
 #endif
@@ -66,7 +60,6 @@
 /* I know for sure that these are in 2.3.35 on powerpc. But PowerPC64 does not
    support separate 64-bit syscalls, already 64-bit.  */
 #if defined __powerpc__ && !defined __powerpc64__
-# define __ASSUME_TRUNCATE64_SYSCALL	1
 # define __ASSUME_STAT64_SYSCALL	1
 #endif
 
@@ -77,9 +70,8 @@
 # define __ASSUME_IPC64		1
 #endif
 
-/* SH kernels got stat64, mmap2, and truncate64 during 2.4.0-test.  */
+/* SH kernels got stat64 and mmap2 during 2.4.0-test.  */
 #ifdef __sh__
-# define __ASSUME_TRUNCATE64_SYSCALL	1
 # define __ASSUME_MMAP2_SYSCALL		1
 # define __ASSUME_STAT64_SYSCALL	1
 #endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c
index 0b69663..494d898 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997-2002,2005,2006,2011 Free Software Foundation, Inc.
+/* Copyright (C) 1997-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
@@ -22,56 +22,17 @@
 #include <sysdep.h>
 #include <sys/syscall.h>
 
-#include <kernel-features.h>
-
-#ifdef __NR_ftruncate64
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-/* The variable is shared between all wrappers around *truncate64 calls.  */
-extern int __have_no_truncate64;
-#endif
-
-
 /* Truncate the file referenced by FD to LENGTH bytes.  */
 int
 __ftruncate64 (fd, length)
      int fd;
      off64_t length;
 {
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-  if (! __have_no_truncate64)
-#endif
-    {
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-      int saved_errno = errno;
-#endif
-      /* On PPC32 64bit values are aligned in odd/even register pairs.  */
-      int result = INLINE_SYSCALL (ftruncate64, 4, fd, 0,
-				   (long) (length >> 32),
-				   (long) length);
+  /* On PPC32 64bit values are aligned in odd/even register pairs.  */
+  int result = INLINE_SYSCALL (ftruncate64, 4, fd, 0,
+			       (long) (length >> 32),
+			       (long) length);
 
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-      if (result != -1 || errno != ENOSYS)
-#endif
-	return result;
-
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-      __set_errno (saved_errno);
-      __have_no_truncate64 = 1;
-#endif
-    }
-
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-  if ((off_t) length != length)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-  return __ftruncate (fd, (off_t) length);
-#endif
+  return result;
 }
 weak_alias (__ftruncate64, ftruncate64)
-
-#else
-/* Use the generic implementation.  */
-# include <misc/ftruncate64.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c
index 316d59c..c9f6616 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2005,2006,2011
-	Free Software Foundation, Inc.
+/* Copyright (C) 1997-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
@@ -24,55 +23,15 @@
 #include <sys/syscall.h>
 #include <bp-checks.h>
 
-#include <kernel-features.h>
-
-#ifdef __NR_truncate64
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-/* The variable is shared between all wrappers around *truncate64 calls.  */
-int __have_no_truncate64;
-#endif
-
-
 /* Truncate the file referenced by FD to LENGTH bytes.  */
 int
 truncate64 (path, length)
      const char *path;
      off64_t length;
 {
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-  if (! __have_no_truncate64)
-#endif
-    {
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-      int saved_errno = errno;
-#endif
-      /* On PPC32 64bit values are aligned in odd/even register pairs.  */
-      int result = INLINE_SYSCALL (truncate64, 4, CHECK_STRING (path), 0,
-				   (long) (length >> 32),
-				   (long) length);
-
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-      if (result != -1 || errno != ENOSYS)
-#endif
-	return result;
-
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-      __set_errno (saved_errno);
-      __have_no_truncate64 = 1;
-#endif
-    }
-
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-  if ((off_t) length != length)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-  return __truncate (path, (off_t) length);
-#endif
+  /* On PPC32 64bit values are aligned in odd/even register pairs.  */
+  int result = INLINE_SYSCALL (truncate64, 4, CHECK_STRING (path), 0,
+			       (long) (length >> 32),
+			       (long) length);
+  return result;
 }
-
-#else
-/* Use the generic implementation.  */
-# include <misc/truncate64.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/truncate64.c b/sysdeps/unix/sysv/linux/truncate64.c
index 12ae4b5..b31b74d 100644
--- a/sysdeps/unix/sysv/linux/truncate64.c
+++ b/sysdeps/unix/sysv/linux/truncate64.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997-2000,2003,2004,2005,2006,2011
-	Free Software Foundation, Inc.
+/* Copyright (C) 1997-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,51 +24,13 @@
 #include <sys/syscall.h>
 #include <bp-checks.h>
 
-#include <kernel-features.h>
-
-#ifdef __NR_truncate64
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-/* The variable is shared between all wrappers around *truncate64 calls.  */
-int __have_no_truncate64;
-#endif
-
 /* Truncate the file referenced by FD to LENGTH bytes.  */
 int
 truncate64 (const char *path, off64_t length)
 {
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-  if (! __have_no_truncate64)
-#endif
-    {
-      unsigned int low = length & 0xffffffff;
-      unsigned int high = length >> 32;
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-      int saved_errno = errno;
-#endif
-      int result = INLINE_SYSCALL (truncate64, 3, CHECK_STRING (path),
-				   __LONG_LONG_PAIR (high, low));
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-      if (result != -1 || errno != ENOSYS)
-#endif
-	return result;
-
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-      __set_errno (saved_errno);
-      __have_no_truncate64 = 1;
-#endif
-    }
-
-#ifndef __ASSUME_TRUNCATE64_SYSCALL
-  if ((off_t) length != length)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-  return __truncate (path, (off_t) length);
-#endif
+  unsigned int low = length & 0xffffffff;
+  unsigned int high = length >> 32;
+  int result = INLINE_SYSCALL (truncate64, 3, CHECK_STRING (path),
+			       __LONG_LONG_PAIR (high, low));
+  return result;
 }
-
-#else
-/* Use the generic implementation.  */
-# include <misc/truncate64.c>
-#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]