about summary refs log tree commit diff
path: root/sysdeps/unix/sysv
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv')
-rw-r--r--sysdeps/unix/sysv/linux/Makefile3
-rw-r--r--sysdeps/unix/sysv/linux/Versions6
-rw-r--r--sysdeps/unix/sysv/linux/alpha/syscalls.list2
-rw-r--r--sysdeps/unix/sysv/linux/i386/i686/sysdep.h52
-rw-r--r--sysdeps/unix/sysv/linux/i386/sysdep.h42
-rw-r--r--sysdeps/unix/sysv/linux/ia64/syscalls.list2
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/syscalls.list1
-rw-r--r--sysdeps/unix/sysv/linux/readahead.c51
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list2
-rw-r--r--sysdeps/unix/sysv/linux/syscalls.list1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/syscalls.list2
11 files changed, 152 insertions, 12 deletions
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 8f4c562c32..99950086e7 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -11,7 +11,8 @@ CFLAGS-malloc.c = -DMORECORE_CLEARS=2
 endif
 
 ifeq ($(subdir),misc)
-sysdep_routines += sysctl clone llseek getresuid getresgid umount umount2
+sysdep_routines += sysctl clone llseek getresuid getresgid umount umount2 \
+		   readahead
 
 sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \
 		  sys/klog.h sys/kdaemon.h \
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index 7965e11b85..2a90387f82 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -90,6 +90,12 @@ libc {
     # p*
     pivot_root;
   }
+  GLIBC_2.3 {
+    # r*
+    readahead;
+    # s*
+    sendfile64;
+  }
   GLIBC_PRIVATE {
     # needed by libpthread.
     __libc_sigaction;
diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list
index 3dc07341e3..28c60bb876 100644
--- a/sysdeps/unix/sysv/linux/alpha/syscalls.list
+++ b/sysdeps/unix/sysv/linux/alpha/syscalls.list
@@ -28,6 +28,8 @@ getrlimit	-	getrlimit	2	__getrlimit	getrlimit getrlimit64
 setrlimit	-	setrlimit	2	__setrlimit	setrlimit64 setrlimit
 ftruncate	-	ftruncate	2	__ftruncate	ftruncate __ftruncate64 ftruncate64
 truncate	-	truncate	2	truncate	truncate64
+readahead	EXTRA	readahead	3	__readahead	readahead
+sendfile	EXTRA	sendfile	i:iipi	sendfile	sendfile64
 
 # these are actually common with the x86:
 sys_ustat	ustat	ustat		2	__syscall_ustat
diff --git a/sysdeps/unix/sysv/linux/i386/i686/sysdep.h b/sysdeps/unix/sysv/linux/i386/i686/sysdep.h
index 8e7e5e0420..6b54a81d32 100644
--- a/sysdeps/unix/sysv/linux/i386/i686/sysdep.h
+++ b/sysdeps/unix/sysv/linux/i386/i686/sysdep.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper, <drepper@cygnus.com>, 1998.
 
@@ -32,11 +32,30 @@
 
 /* Store (- %eax) into errno through the GOT.  */
 # ifdef _LIBC_REENTRANT
-#  define SYSCALL_ERROR_HANDLER						      \
-1:movl (%esp),%ebx;							      \
+
+#  ifndef HAVE_HIDDEN
+#   define SETUP_PIC_REG \
+  call 1f;								      \
+  .subsection 1;							      \
+1:movl (%esp), %ebx;							      \
+  ret;									      \
+  .previous
+#  else
+#   define SETUP_PIC_REG \
+  .section .gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax",@progbits;	      \
+  .globl __i686.get_pc_thunk.bx;					      \
+  .hidden __i686.get_pc_thunk.bx;					      \
+  .type __i686.get_pc_thunk.bx,@function;				      \
+__i686.get_pc_thunk.bx:							      \
+  movl (%esp), %ebx;							      \
   ret;									      \
+  .previous;								      \
+  call __i686.get_pc_thunk.bx
+#  endif
+
+#  define SYSCALL_ERROR_HANDLER						      \
 0:pushl %ebx;								      \
-  call 1b;								      \
+  SETUP_PIC_REG;							      \
   addl $_GLOBAL_OFFSET_TABLE_, %ebx;					      \
   xorl %edx, %edx;							      \
   subl %eax, %edx;							      \
@@ -52,10 +71,29 @@
 /* A quick note: it is assumed that the call to `__errno_location' does
    not modify the stack!  */
 # else
-#  define SYSCALL_ERROR_HANDLER						      \
-1:movl (%esp),%ecx;							      \
+
+#  ifndef HAVE_HIDDEN
+#   define SETUP_PIC_REG \
+  call 1f;								      \
+  .subsection 1;							      \
+1:movl (%esp), %ecx;							      \
+  ret;									      \
+  .previous
+#  else
+#   define SETUP_PIC_REG \
+  .section .gnu.linkonce.t.__i686.get_pc_thunk.cx,"ax",@progbits;	      \
+  .globl __i686.get_pc_thunk.cx;					      \
+  .hidden __i686.get_pc_thunk.cx;					      \
+  .type __i686.get_pc_thunk.cx,@function;				      \
+__i686.get_pc_thunk.cx:							      \
+  movl (%esp), %ecx;							      \
   ret;									      \
-0:call 1b;								      \
+  .previous;								      \
+  call __i686.get_pc_thunk.cx
+#  endif
+
+#  define SYSCALL_ERROR_HANDLER						      \
+0:SETUP_PIC_REG;							      \
   addl $_GLOBAL_OFFSET_TABLE_, %ecx;					      \
   xorl %edx, %edx;							      \
   subl %eax, %edx;							      \
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h
index 2cc39d69cd..730c4dfdf9 100644
--- a/sysdeps/unix/sysv/linux/i386/sysdep.h
+++ b/sysdeps/unix/sysv/linux/i386/sysdep.h
@@ -76,13 +76,30 @@
 #else
 /* Store (- %eax) into errno through the GOT.  */
 #ifdef _LIBC_REENTRANT
-#define SYSCALL_ERROR_HANDLER						      \
-0:pushl %ebx;								      \
+
+# ifndef HAVE_HIDDEN
+#  define SETUP_PIC_REG \
   call 1f;								      \
   .subsection 1;							      \
 1:movl (%esp), %ebx;							      \
   ret;									      \
+  .previous
+# else
+#  define SETUP_PIC_REG \
+  .section .gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax",@progbits;	      \
+  .globl __i686.get_pc_thunk.bx;					      \
+  .hidden __i686.get_pc_thunk.bx;					      \
+  .type __i686.get_pc_thunk.bx,@function;				      \
+__i686.get_pc_thunk.bx:							      \
+  movl (%esp), %ebx;							      \
+  ret;									      \
   .previous;								      \
+  call __i686.get_pc_thunk.bx
+# endif
+
+#define SYSCALL_ERROR_HANDLER						      \
+0:pushl %ebx;								      \
+  SETUP_PIC_REG;							      \
   addl $_GLOBAL_OFFSET_TABLE_, %ebx;					      \
   xorl %edx, %edx;							      \
   subl %eax, %edx;							      \
@@ -98,12 +115,29 @@
 /* A quick note: it is assumed that the call to `__errno_location' does
    not modify the stack!  */
 #else
-#define SYSCALL_ERROR_HANDLER						      \
-0:call 1f;								      \
+
+# ifndef HAVE_HIDDEN
+#  define SETUP_PIC_REG \
+  call 1f;								      \
   .subsection 1;							      \
 1:movl (%esp), %ecx;							      \
   ret;									      \
+  .previous
+# else
+#  define SETUP_PIC_REG \
+  .section .gnu.linkonce.t.__i686.get_pc_thunk.cx,"ax",@progbits;	      \
+  .globl __i686.get_pc_thunk.cx;					      \
+  .hidden __i686.get_pc_thunk.cx;					      \
+  .type __i686.get_pc_thunk.cx,@function;				      \
+__i686.get_pc_thunk.cx:							      \
+  movl (%esp), %ecx;							      \
+  ret;									      \
   .previous;								      \
+  call __i686.get_pc_thunk.cx
+# endif
+
+#define SYSCALL_ERROR_HANDLER						      \
+0:define SETUP_PIC_REG;							      \
   addl $_GLOBAL_OFFSET_TABLE_, %ecx;					      \
   xorl %edx, %edx;							      \
   subl %eax, %edx;							      \
diff --git a/sysdeps/unix/sysv/linux/ia64/syscalls.list b/sysdeps/unix/sysv/linux/ia64/syscalls.list
index 15a93df618..6463a6ffaa 100644
--- a/sysdeps/unix/sysv/linux/ia64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/ia64/syscalls.list
@@ -15,6 +15,8 @@ ftruncate	-	ftruncate	2	__ftruncate	ftruncate ftruncate64 __ftruncate64
 truncate	-	truncate	2	truncate	truncate64
 getrlimit	-	getrlimit	2	__getrlimit	getrlimit getrlimit64
 setrlimit	-	setrlimit	2	__setrlimit	setrlimit setrlimit64
+readahead	EXTRA	readahead	3	__readahead	readahead
+sendfile	EXTRA	sendfile	i:iipi	sendfile	sendfile64
 
 # semaphore and shm system calls
 msgctl		-	msgctl		i:iip	__msgctl	msgctl
diff --git a/sysdeps/unix/sysv/linux/powerpc/syscalls.list b/sysdeps/unix/sysv/linux/powerpc/syscalls.list
index 7532b9c8fe..434a9a1f7a 100644
--- a/sysdeps/unix/sysv/linux/powerpc/syscalls.list
+++ b/sysdeps/unix/sysv/linux/powerpc/syscalls.list
@@ -4,6 +4,7 @@
 s_ioctl		ioctl	ioctl		i:iiI	__syscall_ioctl
 s_ipc		msgget	ipc		i:iiiip	__syscall_ipc
 s_llseek	llseek	_llseek		i:iiipi	__syscall__llseek
+s_readahead	readahead readahead	i:iiii	__syscall_readahead
 s_chown		chown	chown		i:sii	__syscall_chown
 s_execve	execve	execve		i:spp	__syscall_execve
 rt_sigaction	-	rt_sigaction	i:ippi	__syscall_rt_sigaction
diff --git a/sysdeps/unix/sysv/linux/readahead.c b/sysdeps/unix/sysv/linux/readahead.c
new file mode 100644
index 0000000000..33ea7315d5
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/readahead.c
@@ -0,0 +1,51 @@
+/* Provide kernel hint to read ahead.
+   Copyright (C) 2002 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <errno.h>
+#include <sys/types.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+
+#ifdef __NR_readahead
+
+extern int __syscall_readahead (int fd, off_t offset_hi, off_t offset_lo,
+				size_t count);
+
+
+ssize_t
+__readahead (int fd, loff_t offset, size_t count)
+{
+  return INLINE_SYSCALL (readahead, 4, fd, (off_t) (offset >> 32),
+			 (off_t) (offset & 0xffffffff), count);
+}
+#else
+ssize_t
+__readahead (int fd, loff_t offset, size_t count)
+{
+  __set_errno (ENOSYS);
+  return -1;
+}
+stub_warning (readahead)
+
+# include <stub-tag.h>
+#endif
+
+weak_alias (__readahead, readahead)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
index ab93d2fce3..6521c25120 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
@@ -11,6 +11,8 @@ setrlimit	-	setrlimit	2	__setrlimit	setrlimit64 setrlimit
 ftruncate	-	ftruncate	2	__ftruncate	ftruncate __ftruncate64 ftruncate64
 truncate	-	truncate	2	truncate	truncate64
 mmap		-	mmap		6	__mmap		mmap __mmap64 mmap64
+readahead	EXTRA	readahead	3	__readahead	readahead
+sendfile	EXTRA	sendfile	i:iipi	sendfile	sendfile64
 
 # Override select.S in parent directory:
 select		-	select		5	__select	select
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index 205699d94d..c3388b28bd 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -49,6 +49,7 @@ sched_sets	-	sched_setscheduler	i:iip	__sched_setscheduler	sched_setscheduler
 sched_yield	-	sched_yield	i:	__sched_yield	sched_yield
 select		-	_newselect	i:iPPPP	__select	select
 sendfile	EXTRA	sendfile	i:iipi	sendfile
+sendfile64	EXTRA	sendfile64	i:iipi	sendfile64
 setfsgid	EXTRA	setfsgid	i:i	setfsgid
 setfsuid	EXTRA	setfsuid	i:i	setfsuid
 setpgid		-	setpgid		i:ii	__setpgid	setpgid
diff --git a/sysdeps/unix/sysv/linux/x86_64/syscalls.list b/sysdeps/unix/sysv/linux/x86_64/syscalls.list
index dcb1a090d7..294226726f 100644
--- a/sysdeps/unix/sysv/linux/x86_64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/x86_64/syscalls.list
@@ -14,6 +14,8 @@ getrlimit	-	getrlimit	i:ip	__getrlimit	getrlimit getrlimit64
 setrlimit	-	setrlimit	i:ip	__setrlimit	setrlimit64 setrlimit
 ftruncate	-	ftruncate	i:ii	__ftruncate	ftruncate ftruncate64 __ftruncate64
 truncate	-	truncate	i:si	truncate	truncate64
+readahead	EXTRA	readahead	i:iipi	__readahead	readahead
+sendfile	EXTRA	sendfile	i:iip	sendfile	sendfile64
 
 # semaphore and shm system calls
 msgctl		-	msgctl		i:iip	__msgctl	msgctl