aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r--sysdeps/unix/sysv/linux/aio_sigqueue.c6
-rw-r--r--sysdeps/unix/sysv/linux/alpha/syscalls.list30
-rw-r--r--sysdeps/unix/sysv/linux/arm/setregid.c1
-rw-r--r--sysdeps/unix/sysv/linux/arm/setreuid.c1
-rw-r--r--sysdeps/unix/sysv/linux/arm/syscalls.list32
-rw-r--r--sysdeps/unix/sysv/linux/fxstat.c11
-rw-r--r--sysdeps/unix/sysv/linux/fxstat64.c7
-rw-r--r--sysdeps/unix/sysv/linux/getcwd.c4
-rw-r--r--sysdeps/unix/sysv/linux/getdents.c12
-rw-r--r--sysdeps/unix/sysv/linux/getpriority.c7
-rw-r--r--sysdeps/unix/sysv/linux/getresgid.c18
-rw-r--r--sysdeps/unix/sysv/linux/getresuid.c18
-rw-r--r--sysdeps/unix/sysv/linux/i386/Makefile3
-rw-r--r--sysdeps/unix/sysv/linux/i386/chown.c6
-rw-r--r--sysdeps/unix/sysv/linux/i386/getgroups.c6
-rw-r--r--sysdeps/unix/sysv/linux/i386/pread.c55
-rw-r--r--sysdeps/unix/sysv/linux/i386/pread64.c60
-rw-r--r--sysdeps/unix/sysv/linux/i386/pwrite.c55
-rw-r--r--sysdeps/unix/sysv/linux/i386/pwrite64.c57
-rw-r--r--sysdeps/unix/sysv/linux/i386/s_pread64.S55
-rw-r--r--sysdeps/unix/sysv/linux/i386/s_pwrite64.S55
-rw-r--r--sysdeps/unix/sysv/linux/i386/setfsgid.c15
-rw-r--r--sysdeps/unix/sysv/linux/i386/setfsuid.c15
-rw-r--r--sysdeps/unix/sysv/linux/i386/setgid.c8
-rw-r--r--sysdeps/unix/sysv/linux/i386/setgroups.c10
-rw-r--r--sysdeps/unix/sysv/linux/i386/setregid.c42
-rw-r--r--sysdeps/unix/sysv/linux/i386/setresgid.c9
-rw-r--r--sysdeps/unix/sysv/linux/i386/setresuid.c9
-rw-r--r--sysdeps/unix/sysv/linux/i386/setreuid.c42
-rw-r--r--sysdeps/unix/sysv/linux/i386/setuid.c8
-rw-r--r--sysdeps/unix/sysv/linux/i386/syscalls.list9
-rw-r--r--sysdeps/unix/sysv/linux/lxstat.c11
-rw-r--r--sysdeps/unix/sysv/linux/lxstat64.c7
-rw-r--r--sysdeps/unix/sysv/linux/m68k/setregid.c1
-rw-r--r--sysdeps/unix/sysv/linux/m68k/setreuid.c1
-rw-r--r--sysdeps/unix/sysv/linux/m68k/syscalls.list32
-rw-r--r--sysdeps/unix/sysv/linux/mips/syscalls.list26
-rw-r--r--sysdeps/unix/sysv/linux/poll.c17
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/syscalls.list30
-rw-r--r--sysdeps/unix/sysv/linux/pread.c4
-rw-r--r--sysdeps/unix/sysv/linux/pread64.c6
-rw-r--r--sysdeps/unix/sysv/linux/ptrace.c20
-rw-r--r--sysdeps/unix/sysv/linux/pwrite.c4
-rw-r--r--sysdeps/unix/sysv/linux/pwrite64.c6
-rw-r--r--sysdeps/unix/sysv/linux/readv.c7
-rw-r--r--sysdeps/unix/sysv/linux/reboot.c8
-rw-r--r--sysdeps/unix/sysv/linux/sigaction.c11
-rw-r--r--sysdeps/unix/sysv/linux/siglist.h2
-rw-r--r--sysdeps/unix/sysv/linux/sigpending.c7
-rw-r--r--sysdeps/unix/sysv/linux/sigprocmask.c8
-rw-r--r--sysdeps/unix/sysv/linux/sigqueue.c6
-rw-r--r--sysdeps/unix/sysv/linux/sigsuspend.c7
-rw-r--r--sysdeps/unix/sysv/linux/sigtimedwait.c8
-rw-r--r--sysdeps/unix/sysv/linux/sigwaitinfo.c6
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/setregid.c1
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/setreuid.c1
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list32
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list30
-rw-r--r--sysdeps/unix/sysv/linux/syscalls.list28
-rw-r--r--sysdeps/unix/sysv/linux/sysctl.c9
-rw-r--r--sysdeps/unix/sysv/linux/ustat.c7
-rw-r--r--sysdeps/unix/sysv/linux/writev.c7
-rw-r--r--sysdeps/unix/sysv/linux/xmknod.c7
-rw-r--r--sysdeps/unix/sysv/linux/xstat.c11
-rw-r--r--sysdeps/unix/sysv/linux/xstat64.c7
65 files changed, 759 insertions, 282 deletions
diff --git a/sysdeps/unix/sysv/linux/aio_sigqueue.c b/sysdeps/unix/sysv/linux/aio_sigqueue.c
index 5dea29f..8d1d5cf 100644
--- a/sysdeps/unix/sysv/linux/aio_sigqueue.c
+++ b/sysdeps/unix/sysv/linux/aio_sigqueue.c
@@ -17,9 +17,13 @@
Boston, MA 02111-1307, USA. */
#include <aio.h>
+#include <errno.h>
#include <signal.h>
#include <unistd.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
#include "aio_misc.h"
extern int __syscall_rt_sigqueueinfo (int, int, siginfo_t *);
@@ -41,5 +45,5 @@ __aio_sigqueue (sig, val)
info.si_uid = getuid ();
info.si_value = val;
- return __syscall_rt_sigqueueinfo (info.si_pid, sig, &info);
+ return INLINE_SYSCALL (rt_sigqueueinfo, 3, info.si_pid, sig, &info);
}
diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list
index 9f002b2..5d89ccb 100644
--- a/sysdeps/unix/sysv/linux/alpha/syscalls.list
+++ b/sysdeps/unix/sysv/linux/alpha/syscalls.list
@@ -79,3 +79,33 @@ old_adjtimex - old_adjtimex 1 __adjtimex_tv32 __adjtimex@GLIBC_2.0 adjtimex@GLI
# and one for timeval64 entry points
adjtimex adjtime adjtimex 1 __syscall_adjtimex_tv64
+
+# System calls with wrappers.
+rt_sigaction - rt_sigaction 4 __syscall_rt_sigaction
+rt_sigpending - rt_sigpending 2 __syscall_rt_sigpending
+rt_sigprocmask - rt_sigprocmask 4 __syscall_rt_sigprocmask
+rt_sigqueueinfo - rt_sigqueueinfo 3 __syscall_rt_sigqueueinfo
+rt_sigsuspend - rt_sigsuspend 2 __syscall_rt_sigsuspend
+rt_sigtimedwait - rt_sigtimedwait 4 __syscall_rt_sigtimedwait
+s_getcwd getcwd getcwd 2 __syscall_getcwd
+s_getdents getdents getdents 3 __syscall_getdents
+s_getpriority getpriority getpriority 2 __syscall_getpriority
+s_getresgid getresgid getresgid 3 __syscall_getresgid
+s_getresuid getresuid getresuid 3 __syscall_getresuid
+s_poll poll poll 3 __syscall_poll
+s_pread64 pread64 pread 5 __syscall_pread64
+s_ptrace ptrace ptrace 4 __syscall_ptrace
+s_pwrite64 pwrite64 pwrite 5 __syscall_pwrite64
+s_reboot reboot reboot 3 __syscall_reboot
+s_sigaction sigaction sigaction 3 __syscall_sigaction
+s_sigpending sigpending sigpending 1 __syscall_sigpending
+s_sigprocmask sigprocmask sigprocmask 3 __syscall_sigprocmask
+s_sigsuspend sigsuspend sigsuspend 3 __syscall_sigsuspend
+s_sysctl sysctl _sysctl 1 __syscall__sysctl
+s_ustat ustat ustat 2 __syscall_ustat
+sys_fstat fxstat fstat 2 __syscall_fstat
+sys_lstat lxstat lstat 2 __syscall_lstat
+sys_mknod xmknod mknod 3 __syscall_mknod
+sys_readv readv readv 3 __syscall_readv
+sys_stat xstat stat 2 __syscall_stat
+sys_writev writev writev 3 __syscall_writev
diff --git a/sysdeps/unix/sysv/linux/arm/setregid.c b/sysdeps/unix/sysv/linux/arm/setregid.c
new file mode 100644
index 0000000..99c57ad
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arm/setregid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setregid.c>
diff --git a/sysdeps/unix/sysv/linux/arm/setreuid.c b/sysdeps/unix/sysv/linux/arm/setreuid.c
new file mode 100644
index 0000000..8ad6122
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arm/setreuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setreuid.c>
diff --git a/sysdeps/unix/sysv/linux/arm/syscalls.list b/sysdeps/unix/sysv/linux/arm/syscalls.list
index e3fe1d7..b89badf 100644
--- a/sysdeps/unix/sysv/linux/arm/syscalls.list
+++ b/sysdeps/unix/sysv/linux/arm/syscalls.list
@@ -6,8 +6,40 @@ s_setfsgid setfsgid setfsgid 1 __syscall_setfsgid
s_setfsuid setfsuid setfsuid 1 __syscall_setfsuid
s_setgid setgid setgid 1 __syscall_setgid
s_setgroups setgroups setgroups 2 __syscall_setgroups
+s_setregid setregid setregid 2 __syscall_setregid
s_setresgid setresgid setresgid 3 __syscall_setresgid
s_setresuid setresuid setresuid 3 __syscall_setresuid
+s_setreuid setreuid setreuid 2 __syscall_setreuid
s_setuid setuid setuid 1 __syscall_setuid
syscall - syscall 5 syscall
vm86 - vm86 1 __vm86 vm86
+
+# System calls with wrappers.
+rt_sigaction - rt_sigaction 4 __syscall_rt_sigaction
+rt_sigpending - rt_sigpending 2 __syscall_rt_sigpending
+rt_sigprocmask - rt_sigprocmask 4 __syscall_rt_sigprocmask
+rt_sigqueueinfo - rt_sigqueueinfo 3 __syscall_rt_sigqueueinfo
+rt_sigsuspend - rt_sigsuspend 2 __syscall_rt_sigsuspend
+rt_sigtimedwait - rt_sigtimedwait 4 __syscall_rt_sigtimedwait
+s_getcwd getcwd getcwd 2 __syscall_getcwd
+s_getdents getdents getdents 3 __syscall_getdents
+s_getpriority getpriority getpriority 2 __syscall_getpriority
+s_getresgid getresgid getresgid 3 __syscall_getresgid
+s_getresuid getresuid getresuid 3 __syscall_getresuid
+s_poll poll poll 3 __syscall_poll
+s_pread64 pread64 pread 5 __syscall_pread64
+s_ptrace ptrace ptrace 4 __syscall_ptrace
+s_pwrite64 pwrite64 pwrite 5 __syscall_pwrite64
+s_reboot reboot reboot 3 __syscall_reboot
+s_sigaction sigaction sigaction 3 __syscall_sigaction
+s_sigpending sigpending sigpending 1 __syscall_sigpending
+s_sigprocmask sigprocmask sigprocmask 3 __syscall_sigprocmask
+s_sigsuspend sigsuspend sigsuspend 3 __syscall_sigsuspend
+s_sysctl sysctl _sysctl 1 __syscall__sysctl
+s_ustat ustat ustat 2 __syscall_ustat
+sys_fstat fxstat fstat 2 __syscall_fstat
+sys_lstat lxstat lstat 2 __syscall_lstat
+sys_mknod xmknod mknod 3 __syscall_mknod
+sys_readv readv readv 3 __syscall_readv
+sys_stat xstat stat 2 __syscall_stat
+sys_writev writev writev 3 __syscall_writev
diff --git a/sysdeps/unix/sysv/linux/fxstat.c b/sysdeps/unix/sysv/linux/fxstat.c
index afed300..99074f9 100644
--- a/sysdeps/unix/sysv/linux/fxstat.c
+++ b/sysdeps/unix/sysv/linux/fxstat.c
@@ -1,5 +1,5 @@
/* fxstat using old-style Unix fstat system call.
- Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1995, 1996, 1997, 1998 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
@@ -26,6 +26,9 @@
#include <sys/stat.h>
#include <kernel_stat.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
#include <xstatconv.c>
extern int __syscall_fstat (int, struct kernel_stat *);
@@ -38,9 +41,11 @@ __fxstat (int vers, int fd, struct stat *buf)
int result;
if (vers == _STAT_VER_KERNEL)
- return __syscall_fstat (fd, (struct kernel_stat *) buf);
+ {
+ return INLINE_SYSCALL (fstat, 2, fd, (struct kernel_stat *) buf);
+ }
- result = __syscall_fstat (fd, &kbuf);
+ result = INLINE_SYSCALL (fstat, 2, fd, &kbuf);
if (result == 0)
result = xstat_conv (vers, &kbuf, buf);
diff --git a/sysdeps/unix/sysv/linux/fxstat64.c b/sysdeps/unix/sysv/linux/fxstat64.c
index f688499..5f13fbe 100644
--- a/sysdeps/unix/sysv/linux/fxstat64.c
+++ b/sysdeps/unix/sysv/linux/fxstat64.c
@@ -1,5 +1,5 @@
/* fxstat64 using old-style Unix fstat system call.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998 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,6 +22,9 @@
#include <sys/stat.h>
#include <kernel_stat.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
#include <xstatconv.c>
extern int __syscall_fstat (int, struct kernel_stat *);
@@ -33,7 +36,7 @@ __fxstat64 (int vers, int fd, struct stat64 *buf)
struct kernel_stat kbuf;
int result;
- result = __syscall_fstat (fd, &kbuf);
+ result = INLINE_SYSCALL (fstat, 2, fd, &kbuf);
if (result == 0)
result = xstat64_conv (vers, &kbuf, buf);
diff --git a/sysdeps/unix/sysv/linux/getcwd.c b/sysdeps/unix/sysv/linux/getcwd.c
index 19a2c0f..bbe21d6 100644
--- a/sysdeps/unix/sysv/linux/getcwd.c
+++ b/sysdeps/unix/sysv/linux/getcwd.c
@@ -22,6 +22,8 @@
#include <limits.h>
#include <stdlib.h>
#include <unistd.h>
+
+#include <sysdep.h>
#include <sys/syscall.h>
@@ -83,7 +85,7 @@ __getcwd (char *buf, size_t size)
{
int retval;
- retval = __syscall_getcwd (path, alloc_size);
+ retval = INLINE_SYSCALL (getcwd, 2, path, alloc_size);
if (retval >= 0)
{
if (buf == NULL)
diff --git a/sysdeps/unix/sysv/linux/getdents.c b/sysdeps/unix/sysv/linux/getdents.c
index f253878..b59acc0 100644
--- a/sysdeps/unix/sysv/linux/getdents.c
+++ b/sysdeps/unix/sysv/linux/getdents.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1995, 1996, 1997, 1998 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
@@ -17,6 +17,7 @@
Boston, MA 02111-1307, USA. */
#include <alloca.h>
+#include <errno.h>
#include <dirent.h>
#include <stddef.h>
#include <string.h>
@@ -24,19 +25,22 @@
#include <sys/param.h>
#include <sys/types.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
#include <linux/posix_types.h>
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-extern int __getdents __P ((int fd, char *buf, size_t nbytes));
+extern int __syscall_getdents __P ((int fd, char *buf, size_t nbytes));
/* For Linux we need a special version of this file since the
definition of `struct dirent' is not the same for the kernel and
the libc. There is one additional field which might be introduced
in the kernel structure in the future.
- He is the kernel definition of `struct dirent' as of 2.1.20: */
+ Here is the kernel definition of `struct dirent' as of 2.1.20: */
struct kernel_dirent
{
@@ -76,7 +80,7 @@ __getdirentries (int fd, char *buf, size_t nbytes, off_t *basep)
dp = (struct dirent *) buf;
skdp = kdp = __alloca (red_nbytes);
- retval = __getdents (fd, (char *) kdp, red_nbytes);
+ retval = INLINE_SYSCALL (getdents, 3, fd, (char *) kdp, red_nbytes);
while ((char *) kdp < (char *) skdp + retval)
{
diff --git a/sysdeps/unix/sysv/linux/getpriority.c b/sysdeps/unix/sysv/linux/getpriority.c
index dba7cb3..9be8d3f 100644
--- a/sysdeps/unix/sysv/linux/getpriority.c
+++ b/sysdeps/unix/sysv/linux/getpriority.c
@@ -1,5 +1,5 @@
/* getpriority for Linux.
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1998 Free Software Foundation, Inc.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
@@ -19,6 +19,9 @@
#include <errno.h>
#include <sys/resource.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
extern int __syscall_getpriority (int, int);
/* The return value of __syscall_getpriority is biased by this value
@@ -35,7 +38,7 @@ getpriority (enum __priority_which which, int who)
{
int res;
- res = __syscall_getpriority ((int) which, who);
+ res = INLINE_SYSCALL (getpriority, 2, (int) which, who);
if (res >= 0)
res = PZERO - res;
return res;
diff --git a/sysdeps/unix/sysv/linux/getresgid.c b/sysdeps/unix/sysv/linux/getresgid.c
index 4c326d5..475592e 100644
--- a/sysdeps/unix/sysv/linux/getresgid.c
+++ b/sysdeps/unix/sysv/linux/getresgid.c
@@ -16,11 +16,13 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <linux/posix_types.h>
+#include <sysdep.h>
#include <sys/syscall.h>
#ifdef __NR_getresgid
@@ -31,14 +33,18 @@ int
getresgid (gid_t *rgid, gid_t *egid, gid_t *sgid)
{
__kernel_gid_t k_rgid, k_egid, k_sgid;
+ int result;
- if (__syscall_getresgid (&k_rgid, &k_egid, &k_sgid) < 0)
- return -1;
+ result = INLINE_SYSCALL (getresgid, 3, &k_rgid, &k_egid, &k_sgid);
- *rgid = (gid_t) k_rgid;
- *egid = (gid_t) k_egid;
- *sgid = (gid_t) k_sgid;
- return 0;
+ if (result == 0)
+ {
+ *rgid = (gid_t) k_rgid;
+ *egid = (gid_t) k_egid;
+ *sgid = (gid_t) k_sgid;
+ }
+
+ return result;
}
#else
# include <sysdeps/generic/getresgid.c>
diff --git a/sysdeps/unix/sysv/linux/getresuid.c b/sysdeps/unix/sysv/linux/getresuid.c
index 6b6bc37..09b12a5 100644
--- a/sysdeps/unix/sysv/linux/getresuid.c
+++ b/sysdeps/unix/sysv/linux/getresuid.c
@@ -16,11 +16,13 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <linux/posix_types.h>
+#include <sysdep.h>
#include <sys/syscall.h>
#ifdef __NR_getresuid
@@ -31,14 +33,18 @@ int
getresuid (uid_t *ruid, uid_t *euid, uid_t *suid)
{
__kernel_uid_t k_ruid, k_euid, k_suid;
+ int result;
- if (__syscall_getresuid (&k_ruid, &k_euid, &k_suid) < 0)
- return -1;
+ result = INLINE_SYSCALL (getresuid, 3, &k_ruid, &k_euid, &k_suid);
- *ruid = (uid_t) k_ruid;
- *euid = (uid_t) k_euid;
- *suid = (uid_t) k_suid;
- return 0;
+ if (result == 0)
+ {
+ *ruid = (uid_t) k_ruid;
+ *euid = (uid_t) k_euid;
+ *suid = (uid_t) k_suid;
+ }
+
+ return result;
}
#else
# include <sysdeps/generic/getresuid.c>
diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile
index 29011fd..38987e4 100644
--- a/sysdeps/unix/sysv/linux/i386/Makefile
+++ b/sysdeps/unix/sysv/linux/i386/Makefile
@@ -1,6 +1,5 @@
ifeq ($(subdir),misc)
-sysdep_routines += ioperm iopl vm86 s_pread64 s_pwrite64 setfsgid setfsuid \
- setresgid setresuid
+sysdep_routines += ioperm iopl vm86 setfsgid setfsuid setresgid setresuid
sysdep_headers += sys/elf.h sys/perm.h sys/reg.h sys/vm86.h sys/debugreg.h
endif
diff --git a/sysdeps/unix/sysv/linux/i386/chown.c b/sysdeps/unix/sysv/linux/i386/chown.c
index 9d864d0..3776a44 100644
--- a/sysdeps/unix/sysv/linux/i386/chown.c
+++ b/sysdeps/unix/sysv/linux/i386/chown.c
@@ -18,6 +18,8 @@
#include <errno.h>
#include <unistd.h>
+
+#include <sysdep.h>
#include <sys/syscall.h>
/*
@@ -45,7 +47,7 @@ __real_chown (const char *file, uid_t owner, gid_t group)
if (!__libc_old_chown)
{
int saved_errno = errno;
- result = __syscall_chown (file, owner, group);
+ result = INLINE_SYSCALL (chown, 3, file, owner, group);
if (result >= 0 || errno != ENOSYS)
return result;
@@ -64,7 +66,7 @@ __real_chown (const char *file, uid_t owner, gid_t group)
int
__chown_is_lchown (const char *file, uid_t owner, gid_t group)
{
- return __syscall_chown (file, owner, group);
+ return INLINE_SYSCALL (chown, 3, file, owner, group);
}
#elif defined HAVE_ELF && defined PIC && defined DO_VERSIONING
/* Compiling for compatibiity. */
diff --git a/sysdeps/unix/sysv/linux/i386/getgroups.c b/sysdeps/unix/sysv/linux/i386/getgroups.c
index 2b8f957..c306dd1 100644
--- a/sysdeps/unix/sysv/linux/i386/getgroups.c
+++ b/sysdeps/unix/sysv/linux/i386/getgroups.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998 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
@@ -16,9 +16,11 @@
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 <unistd.h>
+#include <sysdep.h>
#include <linux/posix_types.h>
extern int __syscall_getgroups __P ((int, __kernel_gid_t *));
@@ -33,7 +35,7 @@ __getgroups (n, groups)
int i, ngids;
__kernel_gid_t kernel_groups[n];
- ngids = __syscall_getgroups (n, kernel_groups);
+ ngids = INLINE_SYSCALL (getgroups, 2, n, kernel_groups);
if (n != 0 && ngids > 0)
for (i = 0; i < ngids; i++)
groups[i] = kernel_groups[i];
diff --git a/sysdeps/unix/sysv/linux/i386/pread.c b/sysdeps/unix/sysv/linux/i386/pread.c
new file mode 100644
index 0000000..4c2f18d
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/i386/pread.c
@@ -0,0 +1,55 @@
+/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <errno.h>
+#include <unistd.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+#ifdef __NR_pread
+
+static ssize_t __emulate_pread (int fd, void *buf, size_t count,
+ off_t offset) internal_function;
+
+
+ssize_t
+__pread (fd, buf, count, offset)
+ int fd;
+ void *buf;
+ size_t count;
+ off_t offset;
+{
+ ssize_t result;
+
+ /* First try the syscall. */
+ result = INLINE_SYSCALL (pread, 5, fd, buf, count, offset, 0);
+ if (result == -1 && errno == ENOSYS)
+ /* No system call available. Use the emulation. */
+ result = __emulate_pread (fd, buf, count, offset);
+
+ return result;
+}
+
+weak_alias (__pread, pread)
+
+#define __pread(fd, buf, count, offset) \
+ static internal_function __emulate_pread (fd, buf, count, offset)
+#endif
+#include <sysdeps/posix/pread.c>
diff --git a/sysdeps/unix/sysv/linux/i386/pread64.c b/sysdeps/unix/sysv/linux/i386/pread64.c
new file mode 100644
index 0000000..8cfb3c0
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/i386/pread64.c
@@ -0,0 +1,60 @@
+/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <errno.h>
+#include <unistd.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+#ifdef __NR_pread
+
+extern ssize_t __syscall_pread64 (int fd, void *buf, size_t count,
+ off_t offset_hi, off_t offset_lo);
+
+static ssize_t __emulate_pread64 (int fd, void *buf, size_t count,
+ off64_t offset) internal_function;
+
+
+ssize_t
+__pread64 (fd, buf, count, offset)
+ int fd;
+ void *buf;
+ size_t count;
+ off64_t offset;
+{
+ ssize_t result;
+
+ /* First try the syscall. */
+ result = INLINE_SYSCALL (pread, 5, fd, buf, count,
+ (off_t) (offset & 0xffffffff),
+ (off_t) (offset >> 32));
+ if (result == -1 && errno == ENOSYS)
+ /* No system call available. Use the emulation. */
+ result = __emulate_pread64 (fd, buf, count, offset);
+
+ return result;
+}
+
+weak_alias (__pread64, pread64)
+
+#define __pread64(fd, buf, count, offset) \
+ static internal_function __emulate_pread64 (fd, buf, count, offset)
+#endif
+#include <sysdeps/posix/pread64.c>
diff --git a/sysdeps/unix/sysv/linux/i386/pwrite.c b/sysdeps/unix/sysv/linux/i386/pwrite.c
new file mode 100644
index 0000000..a1fc99f
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/i386/pwrite.c
@@ -0,0 +1,55 @@
+/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <errno.h>
+#include <unistd.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+#ifdef __NR_pwrite
+
+static ssize_t __emulate_pwrite (int fd, const void *buf, size_t count,
+ off_t offset) internal_function;
+
+
+ssize_t
+__pwrite (fd, buf, count, offset)
+ int fd;
+ const void *buf;
+ size_t count;
+ off_t offset;
+{
+ ssize_t result;
+
+ /* First try the syscall. */
+ result = INLINE_SYSCALL (pwrite, 5, fd, buf, count, offset, 0);
+ if (result == -1 && errno == ENOSYS)
+ /* No system call available. Use the emulation. */
+ result = __emulate_pwrite (fd, buf, count, offset);
+
+ return result;
+}
+
+weak_alias (__pwrite, pwrite)
+
+#define __pwrite(fd, buf, count, offset) \
+ static internal_function __emulate_pwrite (fd, buf, count, offset)
+#endif
+#include <sysdeps/posix/pwrite.c>
diff --git a/sysdeps/unix/sysv/linux/i386/pwrite64.c b/sysdeps/unix/sysv/linux/i386/pwrite64.c
new file mode 100644
index 0000000..7a5d665
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/i386/pwrite64.c
@@ -0,0 +1,57 @@
+/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <errno.h>
+#include <unistd.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+#ifdef __NR_pwrite
+
+static ssize_t __emulate_pwrite64 (int fd, const void *buf, size_t count,
+ off64_t offset) internal_function;
+
+
+ssize_t
+__pwrite64 (fd, buf, count, offset)
+ int fd;
+ const void *buf;
+ size_t count;
+ off64_t offset;
+{
+ ssize_t result;
+
+ /* First try the syscall. */
+ result = INLINE_SYSCALL (pwrite, 5, fd, buf, count,
+ (off_t) (offset & 0xffffffff),
+ (off_t) (offset >> 32));
+ if (result == -1 && errno == ENOSYS)
+ /* No system call available. Use the emulation. */
+ result = __emulate_pwrite64 (fd, buf, count, offset);
+
+ return result;
+}
+
+weak_alias (__pwrite64, pwrite64)
+
+#define __pwrite64(fd, buf, count, offset) \
+ static internal_function __emulate_pwrite64 (fd, buf, count, offset)
+#endif
+#include <sysdeps/posix/pwrite64.c>
diff --git a/sysdeps/unix/sysv/linux/i386/s_pread64.S b/sysdeps/unix/sysv/linux/i386/s_pread64.S
deleted file mode 100644
index 7817cf7..0000000
--- a/sysdeps/unix/sysv/linux/i386/s_pread64.S
+++ /dev/null
@@ -1,55 +0,0 @@
-/* pread64 syscall for Linux/ix86.
- Copyright (C) 1997, 1998 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 Library General Public License as
- published by the Free Software Foundation; either version 2 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <sysdep.h>
-#include <asm/errno.h>
-
-/* Please consult the file sysdeps/unix/sysv/linux/i386/sysdep.h for
- more information about the value -4095 used below.*/
-
- .text
-ENTRY (__syscall_pread64)
-
-#ifndef __NR_pread
- movl $-ENOSYS,%eax
-# ifndef PIC
- jmp syscall_error
-# endif
-#else
-
- PUSHARGS_5 /* Save register contents. */
-
- /* Load arguments. This is unfortunately a little bit of a problem
- since the kernel expects the arguments in a different order. */
- movl 0x20(%esp,1),%esi
- movl 0x1c(%esp,1),%edi
- movl 0x18(%esp,1),%edx
- movl 0x14(%esp,1),%ecx
- movl 0x10(%esp,1),%ebx
- /* Load syscall number into %eax. */
- movl $SYS_ify(pread), %eax
- int $0x80 /* Do the system call. */
- POPARGS_5 /* Restore register contents. */
- cmpl $-4095, %eax /* Check %eax for error. */
- jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */
-#endif
-L(pseudo_end):
- ret /* Return to caller. */
-
-PSEUDO_END (__syscall_pread64)
diff --git a/sysdeps/unix/sysv/linux/i386/s_pwrite64.S b/sysdeps/unix/sysv/linux/i386/s_pwrite64.S
deleted file mode 100644
index 89449b6..0000000
--- a/sysdeps/unix/sysv/linux/i386/s_pwrite64.S
+++ /dev/null
@@ -1,55 +0,0 @@
-/* pwrite64 syscall for Linux/ix86.
- Copyright (C) 1997, 1998 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 Library General Public License as
- published by the Free Software Foundation; either version 2 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <sysdep.h>
-#include <asm/errno.h>
-
-/* Please consult the file sysdeps/unix/sysv/linux/i386/sysdep.h for
- more information about the value -4095 used below.*/
-
- .text
-ENTRY (__syscall_pwrite64)
-
-#ifndef __NR_pwrite
- movl $-ENOSYS,%eax
-# ifndef PIC
- jmp syscall_error
-# endif
-#else
-
- PUSHARGS_5 /* Save register contents. */
-
- /* Load arguments. This is unfortunately a little bit of a problem
- since the kernel expects the arguments in a different order. */
- movl 0x20(%esp,1),%esi
- movl 0x1c(%esp,1),%edi
- movl 0x18(%esp,1),%edx
- movl 0x14(%esp,1),%ecx
- movl 0x10(%esp,1),%ebx
- /* Load syscall number into %eax. */
- movl $SYS_ify(pwrite), %eax
- int $0x80 /* Do the system call. */
- POPARGS_5 /* Restore register contents. */
- cmpl $-4095, %eax /* Check %eax for error. */
- jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */
-#endif
-L(pseudo_end):
- ret /* Return to caller. */
-
-PSEUDO_END (__syscall_pwrite64)
diff --git a/sysdeps/unix/sysv/linux/i386/setfsgid.c b/sysdeps/unix/sysv/linux/i386/setfsgid.c
index 4af26f5..1614431 100644
--- a/sysdeps/unix/sysv/linux/i386/setfsgid.c
+++ b/sysdeps/unix/sysv/linux/i386/setfsgid.c
@@ -17,9 +17,11 @@
Boston, MA 02111-1307, USA. */
#include <errno.h>
-#include <sys/syscall.h>
-#include <sys/types.h>
#include <unistd.h>
+#include <sys/types.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
#include <linux/posix_types.h>
@@ -35,13 +37,6 @@ setfsgid (gid_t gid)
return -1;
}
- return __syscall_setfsgid (gid);
-}
-#else
-int
-setfsgid (gid_t gid)
-{
- __set_errno (ENOSYS);
- return -1;
+ return INLINE_SYSCALL (setfsgid, 1, gid);
}
#endif
diff --git a/sysdeps/unix/sysv/linux/i386/setfsuid.c b/sysdeps/unix/sysv/linux/i386/setfsuid.c
index 5133dc0..a2983a5 100644
--- a/sysdeps/unix/sysv/linux/i386/setfsuid.c
+++ b/sysdeps/unix/sysv/linux/i386/setfsuid.c
@@ -17,9 +17,11 @@
Boston, MA 02111-1307, USA. */
#include <errno.h>
-#include <sys/syscall.h>
-#include <sys/types.h>
#include <unistd.h>
+#include <sys/types.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
#include <linux/posix_types.h>
@@ -35,13 +37,6 @@ setfsuid (uid_t uid)
return -1;
}
- return __syscall_setfsuid (uid);
-}
-#else
-int
-setfsuid (uid_t uid)
-{
- __set_errno (ENOSYS);
- return -1;
+ return INLINE_SYSCALL (setfsuid, 1, uid);
}
#endif
diff --git a/sysdeps/unix/sysv/linux/i386/setgid.c b/sysdeps/unix/sysv/linux/i386/setgid.c
index 87fbd74..2ab8dfd 100644
--- a/sysdeps/unix/sysv/linux/i386/setgid.c
+++ b/sysdeps/unix/sysv/linux/i386/setgid.c
@@ -17,9 +17,11 @@
Boston, MA 02111-1307, USA. */
#include <errno.h>
-#include <sys/syscall.h>
-#include <sys/types.h>
#include <unistd.h>
+#include <sys/types.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
#include <linux/posix_types.h>
@@ -35,6 +37,6 @@ __setgid (gid_t gid)
return -1;
}
- return __syscall_setgid (gid);
+ return INLINE_SYSCALL (setgid, 1, gid);
}
weak_alias (__setgid, setgid)
diff --git a/sysdeps/unix/sysv/linux/i386/setgroups.c b/sysdeps/unix/sysv/linux/i386/setgroups.c
index 38e62a8..ad2a6b5 100644
--- a/sysdeps/unix/sysv/linux/i386/setgroups.c
+++ b/sysdeps/unix/sysv/linux/i386/setgroups.c
@@ -17,9 +17,12 @@
Boston, MA 02111-1307, USA. */
#include <errno.h>
-#include <sys/types.h>
-#include <unistd.h>
#include <grp.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
#include <linux/posix_types.h>
@@ -45,5 +48,6 @@ setgroups (n, groups)
return -1;
}
}
- return __syscall_setgroups (n, kernel_groups);
+
+ return INLINE_SYSCALL (setgroups, 2, n, kernel_groups);
}
diff --git a/sysdeps/unix/sysv/linux/i386/setregid.c b/sysdeps/unix/sysv/linux/i386/setregid.c
new file mode 100644
index 0000000..98603bd
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/i386/setregid.c
@@ -0,0 +1,42 @@
+/* Copyright (C) 1998 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 Library General Public License as
+ published by the Free Software Foundation; either version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. 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 <unistd.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+#include <linux/posix_types.h>
+
+extern int __syscall_setregid (__kernel_gid_t, __kernel_gid_t);
+
+int
+__setregid (gid_t rgid, gid_t egid)
+{
+ if ((rgid != (gid_t) -1 && rgid != (gid_t) (__kernel_gid_t) rgid)
+ || (egid != (gid_t) -1 && egid != (gid_t) (__kernel_gid_t) egid))
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ return INLINE_SYSCALL (setregid, 2, rgid, egid);
+}
+weak_alias (__setregid, setregid)
diff --git a/sysdeps/unix/sysv/linux/i386/setresgid.c b/sysdeps/unix/sysv/linux/i386/setresgid.c
index 20256e1..ab27385 100644
--- a/sysdeps/unix/sysv/linux/i386/setresgid.c
+++ b/sysdeps/unix/sysv/linux/i386/setresgid.c
@@ -22,6 +22,7 @@
#include <linux/posix_types.h>
+#include <sysdep.h>
#include <sys/syscall.h>
#ifdef __NR_setresgid
@@ -31,14 +32,14 @@ extern int __syscall_setresgid (__kernel_gid_t rgid, __kernel_gid_t egid,
int
setresgid (gid_t rgid, gid_t egid, gid_t sgid)
{
- if ((rgid != (gid_t) ((__kernel_gid_t) rgid))
- || (egid != (gid_t) ((__kernel_gid_t) egid))
- || (sgid != (gid_t) ((__kernel_gid_t) sgid)))
+ if ((rgid != (gid_t) -1 && rgid != (gid_t) (__kernel_gid_t) rgid)
+ || (egid != (gid_t) -1 && egid != (gid_t) (__kernel_gid_t) egid)
+ || (sgid != (gid_t) -1 && sgid != (gid_t) (__kernel_gid_t) sgid))
{
__set_errno (EINVAL);
return -1;
}
- return __syscall_setresgid (rgid, egid, sgid);
+ return INLINE_SYSCALL (setresgid, 3, rgid, egid, sgid);
}
#endif
diff --git a/sysdeps/unix/sysv/linux/i386/setresuid.c b/sysdeps/unix/sysv/linux/i386/setresuid.c
index 5100681..953b829 100644
--- a/sysdeps/unix/sysv/linux/i386/setresuid.c
+++ b/sysdeps/unix/sysv/linux/i386/setresuid.c
@@ -22,6 +22,7 @@
#include <linux/posix_types.h>
+#include <sysdep.h>
#include <sys/syscall.h>
#ifdef __NR_setresuid
@@ -31,15 +32,15 @@ extern int __syscall_setresuid (__kernel_uid_t rgid, __kernel_uid_t egid,
int
__setresuid (uid_t ruid, uid_t euid, uid_t suid)
{
- if ((ruid != (uid_t) ((__kernel_uid_t) ruid))
- || (euid != (uid_t) ((__kernel_uid_t) euid))
- || (suid != (uid_t) ((__kernel_uid_t) suid)))
+ if ((ruid != (uid_t) -1 && ruid != (uid_t) (__kernel_uid_t) ruid)
+ || (euid != (uid_t) -1 && euid != (uid_t) (__kernel_uid_t) euid)
+ || (suid != (uid_t) -1 && suid != (uid_t) (__kernel_uid_t) suid))
{
__set_errno (EINVAL);
return -1;
}
- return __syscall_setresuid (ruid, euid, suid);
+ return INLINE_SYSCALL (setresuid, 3, ruid, euid, suid);
}
weak_alias (__setresuid, setresuid)
#endif
diff --git a/sysdeps/unix/sysv/linux/i386/setreuid.c b/sysdeps/unix/sysv/linux/i386/setreuid.c
new file mode 100644
index 0000000..f38f136
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/i386/setreuid.c
@@ -0,0 +1,42 @@
+/* Copyright (C) 1998 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 Library General Public License as
+ published by the Free Software Foundation; either version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. 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 <unistd.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+#include <linux/posix_types.h>
+
+extern int __syscall_setreuid (__kernel_uid_t, __kernel_uid_t);
+
+int
+__setreuid (uid_t ruid, uid_t euid)
+{
+ if ((ruid != (uid_t) -1 && ruid != (uid_t) (__kernel_uid_t) ruid)
+ || (euid != (uid_t) -1 && euid != (uid_t) (__kernel_uid_t) euid))
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ return INLINE_SYSCALL (setreuid, 2, ruid, euid);
+}
+weak_alias (__setreuid, setreuid)
diff --git a/sysdeps/unix/sysv/linux/i386/setuid.c b/sysdeps/unix/sysv/linux/i386/setuid.c
index 3379114..5e5346c 100644
--- a/sysdeps/unix/sysv/linux/i386/setuid.c
+++ b/sysdeps/unix/sysv/linux/i386/setuid.c
@@ -17,9 +17,11 @@
Boston, MA 02111-1307, USA. */
#include <errno.h>
-#include <sys/syscall.h>
-#include <sys/types.h>
#include <unistd.h>
+#include <sys/types.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
#include <linux/posix_types.h>
@@ -35,6 +37,6 @@ __setuid (uid_t uid)
return -1;
}
- return __syscall_setuid (uid);
+ return INLINE_SYSCALL (setuid, 1, uid);
}
weak_alias (__setuid, setuid)
diff --git a/sysdeps/unix/sysv/linux/i386/syscalls.list b/sysdeps/unix/sysv/linux/i386/syscalls.list
index e02c5cf..b8421e9 100644
--- a/sysdeps/unix/sysv/linux/i386/syscalls.list
+++ b/sysdeps/unix/sysv/linux/i386/syscalls.list
@@ -1,14 +1,5 @@
# File name Caller Syscall name # args Strong name Weak names
modify_ldt EXTRA modify_ldt 3 __modify_ldt modify_ldt
-s_chown chown chown 3 __syscall_chown
-s_getgroups getgroups getgroups 2 __syscall_getgroups
s_llseek llseek _llseek 5 __sys_llseek
-s_setfsgid setfsgid setfsgid 1 __syscall_setfsgid
-s_setfsuid setfsuid setfsuid 1 __syscall_setfsuid
-s_setgid setgid setgid 1 __syscall_setgid
-s_setgroups setgroups setgroups 2 __syscall_setgroups
-s_setresgid setresgid setresgid 3 __syscall_setresgid
-s_setresuid setresuid setresuid 3 __syscall_setresuid
-s_setuid setuid setuid 1 __syscall_setuid
vm86 - vm86 1 __vm86 vm86
diff --git a/sysdeps/unix/sysv/linux/lxstat.c b/sysdeps/unix/sysv/linux/lxstat.c
index 7fbe14e..50aa4f9 100644
--- a/sysdeps/unix/sysv/linux/lxstat.c
+++ b/sysdeps/unix/sysv/linux/lxstat.c
@@ -1,5 +1,5 @@
/* lxstat using old-style Unix lstat system call.
- Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1995, 1996, 1997, 1998 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
@@ -26,6 +26,9 @@
#include <sys/stat.h>
#include <kernel_stat.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
#include <xstatconv.c>
extern int __syscall_lstat (const char *, struct kernel_stat *);
@@ -38,9 +41,11 @@ __lxstat (int vers, const char *name, struct stat *buf)
int result;
if (vers == _STAT_VER_KERNEL)
- return __syscall_lstat (name, (struct kernel_stat *) buf);
+ {
+ return INLINE_SYSCALL (lstat, 2, name, (struct kernel_stat *) buf);
+ }
- result = __syscall_lstat (name, &kbuf);
+ result = INLINE_SYSCALL (lstat, 2, name, &kbuf);
if (result == 0)
result = xstat_conv (vers, &kbuf, buf);
diff --git a/sysdeps/unix/sysv/linux/lxstat64.c b/sysdeps/unix/sysv/linux/lxstat64.c
index 8813fad..6028080 100644
--- a/sysdeps/unix/sysv/linux/lxstat64.c
+++ b/sysdeps/unix/sysv/linux/lxstat64.c
@@ -1,5 +1,5 @@
/* lxstat64 using old-style Unix lstat system call.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998 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,6 +22,9 @@
#include <sys/stat.h>
#include <kernel_stat.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
#include <xstatconv.c>
extern int __syscall_lstat (const char *, struct kernel_stat *);
@@ -33,7 +36,7 @@ __lxstat64 (int vers, const char *name, struct stat64 *buf)
struct kernel_stat kbuf;
int result;
- result = __syscall_lstat (name, &kbuf);
+ result = INLINE_SYSCALL (lstat, 2, name, &kbuf);
if (result == 0)
result = xstat64_conv (vers, &kbuf, buf);
diff --git a/sysdeps/unix/sysv/linux/m68k/setregid.c b/sysdeps/unix/sysv/linux/m68k/setregid.c
new file mode 100644
index 0000000..99c57ad
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/m68k/setregid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setregid.c>
diff --git a/sysdeps/unix/sysv/linux/m68k/setreuid.c b/sysdeps/unix/sysv/linux/m68k/setreuid.c
new file mode 100644
index 0000000..8ad6122
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/m68k/setreuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setreuid.c>
diff --git a/sysdeps/unix/sysv/linux/m68k/syscalls.list b/sysdeps/unix/sysv/linux/m68k/syscalls.list
index 93dec8c..d10a6e8 100644
--- a/sysdeps/unix/sysv/linux/m68k/syscalls.list
+++ b/sysdeps/unix/sysv/linux/m68k/syscalls.list
@@ -8,6 +8,38 @@ s_setfsgid setfsgid setfsgid 1 __syscall_setfsgid
s_setfsuid setfsuid setfsuid 1 __syscall_setfsuid
s_setgid setgid setgid 1 __syscall_setgid
s_setgroups setgroups setgroups 2 __syscall_setgroups
+s_setregid setregid setregid 2 __syscall_setregid
s_setresgid setresgid setresgid 3 __syscall_setresgid
s_setresuid setresuid setresuid 3 __syscall_setresuid
+s_setreuid setreuid setreuid 2 __syscall_setreuid
s_setuid setuid setuid 1 __syscall_setuid
+
+# System calls with wrappers.
+rt_sigaction - rt_sigaction 4 __syscall_rt_sigaction
+rt_sigpending - rt_sigpending 2 __syscall_rt_sigpending
+rt_sigprocmask - rt_sigprocmask 4 __syscall_rt_sigprocmask
+rt_sigqueueinfo - rt_sigqueueinfo 3 __syscall_rt_sigqueueinfo
+rt_sigsuspend - rt_sigsuspend 2 __syscall_rt_sigsuspend
+rt_sigtimedwait - rt_sigtimedwait 4 __syscall_rt_sigtimedwait
+s_getcwd getcwd getcwd 2 __syscall_getcwd
+s_getdents getdents getdents 3 __syscall_getdents
+s_getpriority getpriority getpriority 2 __syscall_getpriority
+s_getresgid getresgid getresgid 3 __syscall_getresgid
+s_getresuid getresuid getresuid 3 __syscall_getresuid
+s_poll poll poll 3 __syscall_poll
+s_pread64 pread64 pread 5 __syscall_pread64
+s_ptrace ptrace ptrace 4 __syscall_ptrace
+s_pwrite64 pwrite64 pwrite 5 __syscall_pwrite64
+s_reboot reboot reboot 3 __syscall_reboot
+s_sigaction sigaction sigaction 3 __syscall_sigaction
+s_sigpending sigpending sigpending 1 __syscall_sigpending
+s_sigprocmask sigprocmask sigprocmask 3 __syscall_sigprocmask
+s_sigsuspend sigsuspend sigsuspend 3 __syscall_sigsuspend
+s_sysctl sysctl _sysctl 1 __syscall__sysctl
+s_ustat ustat ustat 2 __syscall_ustat
+sys_fstat fxstat fstat 2 __syscall_fstat
+sys_lstat lxstat lstat 2 __syscall_lstat
+sys_mknod xmknod mknod 3 __syscall_mknod
+sys_readv readv readv 3 __syscall_readv
+sys_stat xstat stat 2 __syscall_stat
+sys_writev writev writev 3 __syscall_writev
diff --git a/sysdeps/unix/sysv/linux/mips/syscalls.list b/sysdeps/unix/sysv/linux/mips/syscalls.list
index b939200..7f3630c 100644
--- a/sysdeps/unix/sysv/linux/mips/syscalls.list
+++ b/sysdeps/unix/sysv/linux/mips/syscalls.list
@@ -41,9 +41,33 @@ getresgid - getresgid 3 getresgid
# There are defined locally because the caller is also defined in this dir.
#
s_llseek llseek _llseek 5 __sys_llseek
+
+# System calls with wrappers.
+rt_sigaction - rt_sigaction 4 __syscall_rt_sigaction
+rt_sigpending - rt_sigpending 2 __syscall_rt_sigpending
+rt_sigprocmask - rt_sigprocmask 4 __syscall_rt_sigprocmask
+rt_sigqueueinfo - rt_sigqueueinfo 3 __syscall_rt_sigqueueinfo
+rt_sigsuspend - rt_sigsuspend 2 __syscall_rt_sigsuspend
+rt_sigtimedwait - rt_sigtimedwait 4 __syscall_rt_sigtimedwait
+s_getcwd getcwd getcwd 2 __syscall_getcwd
+s_getdents getdents getdents 3 __syscall_getdents
+s_getpriority getpriority getpriority 2 __syscall_getpriority
+s_getresgid getresgid getresgid 3 __syscall_getresgid
+s_getresuid getresuid getresuid 3 __syscall_getresuid
+s_poll poll poll 3 __syscall_poll
+s_pread64 pread64 pread 5 __syscall_pread64
+s_ptrace ptrace ptrace 4 __syscall_ptrace
+s_pwrite64 pwrite64 pwrite 5 __syscall_pwrite64
+s_reboot reboot reboot 3 __syscall_reboot
s_sigaction sigaction sigaction 3 __syscall_sigaction
+s_sigpending sigpending sigpending 1 __syscall_sigpending
+s_sigprocmask sigprocmask sigprocmask 3 __syscall_sigprocmask
+s_sigsuspend sigsuspend sigsuspend 3 __syscall_sigsuspend
+s_sysctl sysctl _sysctl 1 __syscall__sysctl
s_ustat ustat ustat 2 __syscall_ustat
-sys_mknod xmknod mknod 3 __syscall_mknod
sys_fstat fxstat fstat 2 __syscall_fstat
sys_lstat lxstat lstat 2 __syscall_lstat
+sys_mknod xmknod mknod 3 __syscall_mknod
+sys_readv readv readv 3 __syscall_readv
sys_stat xstat stat 2 __syscall_stat
+sys_writev writev writev 3 __syscall_writev
diff --git a/sysdeps/unix/sysv/linux/poll.c b/sysdeps/unix/sysv/linux/poll.c
index 8119a97..880eeb9 100644
--- a/sysdeps/unix/sysv/linux/poll.c
+++ b/sysdeps/unix/sysv/linux/poll.c
@@ -20,12 +20,12 @@
#include <errno.h>
#include <sys/poll.h>
+#include <sysdep.h>
#include <sys/syscall.h>
#ifdef __NR_poll
extern int __syscall_poll __P ((struct pollfd *fds, unsigned int nfds,
int timeout));
-weak_extern (__syscall_poll)
static int __emulate_poll __P ((struct pollfd *fds, unsigned long int nfds,
int timeout)) internal_function;
@@ -38,21 +38,16 @@ __poll (fds, nfds, timeout)
int timeout;
{
static int must_emulate = 0;
- int (*syscall) __P ((struct pollfd *, unsigned int, int)) = __syscall_poll;
if (!must_emulate)
{
- if (syscall)
- {
- int errno_saved = errno;
- int retval = __syscall_poll (fds, nfds, timeout);
+ int errno_saved = errno;
+ int retval = INLINE_SYSCALL (poll, 3, fds, nfds, timeout);
- if (retval >= 0 || errno != ENOSYS)
- return retval;
-
- __set_errno (errno_saved);
- }
+ if (retval >= 0 || errno != ENOSYS)
+ return retval;
+ __set_errno (errno_saved);
must_emulate = 1;
}
diff --git a/sysdeps/unix/sysv/linux/powerpc/syscalls.list b/sysdeps/unix/sysv/linux/powerpc/syscalls.list
index a9f0bde..92939bd 100644
--- a/sysdeps/unix/sysv/linux/powerpc/syscalls.list
+++ b/sysdeps/unix/sysv/linux/powerpc/syscalls.list
@@ -5,3 +5,33 @@ s_llseek llseek _llseek 5 __sys_llseek
s_chown chown chown 3 __syscall_chown
s_pread64 pread64 pread 4 __syscall_pread64
s_pwrite64 pwrite64 pwrite 4 __syscall_pwrite64
+
+# System calls with wrappers.
+rt_sigaction - rt_sigaction 4 __syscall_rt_sigaction
+rt_sigpending - rt_sigpending 2 __syscall_rt_sigpending
+rt_sigprocmask - rt_sigprocmask 4 __syscall_rt_sigprocmask
+rt_sigqueueinfo - rt_sigqueueinfo 3 __syscall_rt_sigqueueinfo
+rt_sigsuspend - rt_sigsuspend 2 __syscall_rt_sigsuspend
+rt_sigtimedwait - rt_sigtimedwait 4 __syscall_rt_sigtimedwait
+s_getcwd getcwd getcwd 2 __syscall_getcwd
+s_getdents getdents getdents 3 __syscall_getdents
+s_getpriority getpriority getpriority 2 __syscall_getpriority
+s_getresgid getresgid getresgid 3 __syscall_getresgid
+s_getresuid getresuid getresuid 3 __syscall_getresuid
+s_poll poll poll 3 __syscall_poll
+s_pread64 pread64 pread 5 __syscall_pread64
+s_ptrace ptrace ptrace 4 __syscall_ptrace
+s_pwrite64 pwrite64 pwrite 5 __syscall_pwrite64
+s_reboot reboot reboot 3 __syscall_reboot
+s_sigaction sigaction sigaction 3 __syscall_sigaction
+s_sigpending sigpending sigpending 1 __syscall_sigpending
+s_sigprocmask sigprocmask sigprocmask 3 __syscall_sigprocmask
+s_sigsuspend sigsuspend sigsuspend 3 __syscall_sigsuspend
+s_sysctl sysctl _sysctl 1 __syscall__sysctl
+s_ustat ustat ustat 2 __syscall_ustat
+sys_fstat fxstat fstat 2 __syscall_fstat
+sys_lstat lxstat lstat 2 __syscall_lstat
+sys_mknod xmknod mknod 3 __syscall_mknod
+sys_readv readv readv 3 __syscall_readv
+sys_stat xstat stat 2 __syscall_stat
+sys_writev writev writev 3 __syscall_writev
diff --git a/sysdeps/unix/sysv/linux/pread.c b/sysdeps/unix/sysv/linux/pread.c
index 4d7a7c5..9554fb3 100644
--- a/sysdeps/unix/sysv/linux/pread.c
+++ b/sysdeps/unix/sysv/linux/pread.c
@@ -19,6 +19,8 @@
#include <errno.h>
#include <unistd.h>
+
+#include <sysdep.h>
#include <sys/syscall.h>
#ifdef __NR_pread
@@ -40,7 +42,7 @@ __pread (fd, buf, count, offset)
ssize_t result;
/* First try the syscall. */
- result = __syscall_pread64 (fd, buf, count, 0, offset);
+ result = INLINE_SYSCALL (pread, 5, fd, buf, count, 0, offset);
if (result == -1 && errno == ENOSYS)
/* No system call available. Use the emulation. */
result = __emulate_pread (fd, buf, count, offset);
diff --git a/sysdeps/unix/sysv/linux/pread64.c b/sysdeps/unix/sysv/linux/pread64.c
index bd600f1..a5b7d97 100644
--- a/sysdeps/unix/sysv/linux/pread64.c
+++ b/sysdeps/unix/sysv/linux/pread64.c
@@ -19,6 +19,8 @@
#include <errno.h>
#include <unistd.h>
+
+#include <sysdep.h>
#include <sys/syscall.h>
#ifdef __NR_pread
@@ -40,8 +42,8 @@ __pread64 (fd, buf, count, offset)
ssize_t result;
/* First try the syscall. */
- result = __syscall_pread64 (fd, buf, count, (off_t) (offset >> 32),
- (off_t) (offset & 0xffffffff));
+ result = INLINE_SYSCALL (pread, 5, fd, buf, count, (off_t) (offset >> 32),
+ (off_t) (offset & 0xffffffff));
if (result == -1 && errno == ENOSYS)
/* No system call available. Use the emulation. */
result = __emulate_pread64 (fd, buf, count, offset);
diff --git a/sysdeps/unix/sysv/linux/ptrace.c b/sysdeps/unix/sysv/linux/ptrace.c
index 1c60931..109191e 100644
--- a/sysdeps/unix/sysv/linux/ptrace.c
+++ b/sysdeps/unix/sysv/linux/ptrace.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1997, 1998 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 <sys/ptrace.h>
#include <stdarg.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
extern long int __syscall_ptrace (int, pid_t, void *, void *);
long int
@@ -40,17 +43,12 @@ ptrace (enum __ptrace_request request, ...)
if (request > 0 && request < 4)
data = &ret;
- res = __syscall_ptrace (request, pid, addr, data);
-
- if (res >= 0)
+ res = INLINE_SYSCALL (ptrace, 4, request, pid, addr, data);
+ if (res >= 0 && request > 0 && request < 4)
{
- if (request > 0 && request < 4)
- {
- __set_errno (0);
- return ret;
- }
- return res;
+ __set_errno (0);
+ return ret;
}
- return -1;
+ return res;
}
diff --git a/sysdeps/unix/sysv/linux/pwrite.c b/sysdeps/unix/sysv/linux/pwrite.c
index 72b3cfb..74be599 100644
--- a/sysdeps/unix/sysv/linux/pwrite.c
+++ b/sysdeps/unix/sysv/linux/pwrite.c
@@ -19,6 +19,8 @@
#include <errno.h>
#include <unistd.h>
+
+#include <sysdep.h>
#include <sys/syscall.h>
#ifdef __NR_pwrite
@@ -40,7 +42,7 @@ __pwrite (fd, buf, count, offset)
ssize_t result;
/* First try the syscall. */
- result = __syscall_pwrite64 (fd, buf, count, 0, offset);
+ result = INLINE_SYSCALL (pwrite, 5, fd, buf, count, 0, offset);
if (result == -1 && errno == ENOSYS)
/* No system call available. Use the emulation. */
result = __emulate_pwrite (fd, buf, count, offset);
diff --git a/sysdeps/unix/sysv/linux/pwrite64.c b/sysdeps/unix/sysv/linux/pwrite64.c
index 70902b2..b6ebba1 100644
--- a/sysdeps/unix/sysv/linux/pwrite64.c
+++ b/sysdeps/unix/sysv/linux/pwrite64.c
@@ -19,6 +19,8 @@
#include <errno.h>
#include <unistd.h>
+
+#include <sysdep.h>
#include <sys/syscall.h>
#ifdef __NR_pwrite
@@ -40,8 +42,8 @@ __pwrite64 (fd, buf, count, offset)
ssize_t result;
/* First try the syscall. */
- result = __syscall_pwrite64 (fd, buf, count, (off_t) (offset >> 32),
- (off_t) (offset & 0xffffffff));
+ result = INLINE_SYSCALL (pwrite, 5, fd, buf, count, (off_t) (offset >> 32),
+ (off_t) (offset & 0xffffffff));
if (result == -1 && errno == ENOSYS)
/* No system call available. Use the emulation. */
result = __emulate_pwrite64 (fd, buf, count, offset);
diff --git a/sysdeps/unix/sysv/linux/readv.c b/sysdeps/unix/sysv/linux/readv.c
index 10cd519..9f2b437 100644
--- a/sysdeps/unix/sysv/linux/readv.c
+++ b/sysdeps/unix/sysv/linux/readv.c
@@ -1,5 +1,5 @@
/* readv supports all Linux kernels >= 2.0.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998 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,6 +22,9 @@
#include <sys/param.h>
#include <sys/uio.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
extern ssize_t __syscall_readv __P ((int, __const struct iovec *, int));
static ssize_t __atomic_readv_replacement __P ((int, __const struct iovec *,
int)) internal_function;
@@ -44,7 +47,7 @@ __readv (fd, vector, count)
int errno_saved = errno;
ssize_t bytes_read;
- bytes_read = __syscall_readv (fd, vector, count);
+ bytes_read = INLINE_SYSCALL (readv, 3, fd, vector, count);
if (bytes_read >= 0 || errno != EINVAL || count <= UIO_FASTIOV)
return bytes_read;
diff --git a/sysdeps/unix/sysv/linux/reboot.c b/sysdeps/unix/sysv/linux/reboot.c
index 4b64d9d..1a01ec2 100644
--- a/sysdeps/unix/sysv/linux/reboot.c
+++ b/sysdeps/unix/sysv/linux/reboot.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 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
@@ -16,13 +16,17 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <errno.h>
#include <sys/reboot.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
extern int __syscall_reboot (int magic, int magic_too, int flag);
/* Call kernel with additional two arguments the syscall requires. */
int
reboot (int howto)
{
- return __syscall_reboot (0xfee1dead, 672274793, howto);
+ return INLINE_SYSCALL (reboot, 3, 0xfee1dead, 672274793, howto);
}
diff --git a/sysdeps/unix/sysv/linux/sigaction.c b/sysdeps/unix/sysv/linux/sigaction.c
index 773bfa0..72cead8 100644
--- a/sysdeps/unix/sysv/linux/sigaction.c
+++ b/sysdeps/unix/sysv/linux/sigaction.c
@@ -20,6 +20,9 @@
#include <signal.h>
#include <string.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
/* The difference here is that the sigaction structure used in the
kernel is not the same as we use in the libc. Therefore we must
translate it here. */
@@ -64,8 +67,8 @@ __sigaction (sig, act, oact)
/* XXX The size argument hopefully will have to be changed to the
real size of the user-level sigset_t. */
- result = __syscall_rt_sigaction (sig, act ? &kact : 0,
- oact ? &koact : 0, _NSIG / 8);
+ result = INLINE_SYSCALL (rt_sigaction, 4, sig, act ? &kact : 0,
+ oact ? &koact : 0, _NSIG / 8);
if (result >= 0 || errno != ENOSYS)
{
@@ -94,8 +97,8 @@ __sigaction (sig, act, oact)
k_sigact.sa_restorer = act->sa_restorer;
#endif
}
- result = __syscall_sigaction (sig, act ? &k_sigact : 0,
- oact ? &k_osigact : 0);
+ result = INLINE_SYSCALL (sigaction, 3, sig, act ? &k_sigact : 0,
+ oact ? &k_osigact : 0);
if (oact && result >= 0)
{
oact->sa_handler = k_osigact.k_sa_handler;
diff --git a/sysdeps/unix/sysv/linux/siglist.h b/sysdeps/unix/sysv/linux/siglist.h
index 63c716c..4c47e8a 100644
--- a/sysdeps/unix/sysv/linux/siglist.h
+++ b/sysdeps/unix/sysv/linux/siglist.h
@@ -22,7 +22,7 @@
init_sig (SIGHUP, "HUP", N_("Hangup"))
init_sig (SIGINT, "INT", N_("Interrupt"))
init_sig (SIGQUIT, "QUIT", N_("Quit"))
- init_sig (SIGILL, "ILL", N_("Illegal Instruction"))
+ init_sig (SIGILL, "ILL", N_("Illegal instruction"))
init_sig (SIGTRAP, "TRAP", N_("Trace/breakpoint trap"))
init_sig (SIGABRT, "ABRT", N_("Aborted"))
init_sig (SIGFPE, "FPE", N_("Floating point exception"))
diff --git a/sysdeps/unix/sysv/linux/sigpending.c b/sysdeps/unix/sysv/linux/sigpending.c
index 1776fdd..b370626 100644
--- a/sysdeps/unix/sysv/linux/sigpending.c
+++ b/sysdeps/unix/sysv/linux/sigpending.c
@@ -20,6 +20,9 @@
#include <signal.h>
#include <unistd.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
extern int __syscall_sigpending (sigset_t *);
extern int __syscall_rt_sigpending (sigset_t *, size_t);
@@ -41,7 +44,7 @@ sigpending (set)
/* XXX The size argument hopefully will have to be changed to the
real size of the user-level sigset_t. */
int saved_errno = errno;
- int result = __syscall_rt_sigpending (set, _NSIG / 8);
+ int result = INLINE_SYSCALL (rt_sigpending, 2, set, _NSIG / 8);
if (result >= 0 || errno != ENOSYS)
return result;
@@ -50,5 +53,5 @@ sigpending (set)
__libc_missing_rt_sigs = 1;
}
- return __syscall_sigpending (set);
+ return INLINE_SYSCALL (sigpending, 1, set);
}
diff --git a/sysdeps/unix/sysv/linux/sigprocmask.c b/sysdeps/unix/sysv/linux/sigprocmask.c
index 064179e..62c5f77 100644
--- a/sysdeps/unix/sysv/linux/sigprocmask.c
+++ b/sysdeps/unix/sysv/linux/sigprocmask.c
@@ -20,6 +20,9 @@
#include <signal.h>
#include <unistd.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
extern int __syscall_sigprocmask (int, const sigset_t *, sigset_t *);
extern int __syscall_rt_sigprocmask (int, const sigset_t *, sigset_t *,
size_t);
@@ -42,7 +45,8 @@ __sigprocmask (how, set, oset)
/* XXX The size argument hopefully will have to be changed to the
real size of the user-level sigset_t. */
int saved_errno = errno;
- int result = __syscall_rt_sigprocmask (how, set, oset, _NSIG / 8);
+ int result = INLINE_SYSCALL (rt_sigprocmask, 4, how, set, oset,
+ _NSIG / 8);
if (result >= 0 || errno != ENOSYS)
return result;
@@ -51,6 +55,6 @@ __sigprocmask (how, set, oset)
__libc_missing_rt_sigs = 1;
}
- return __syscall_sigprocmask (how, set, oset);
+ return INLINE_SYSCALL (sigprocmask, 3, how, set, oset);
}
weak_alias (__sigprocmask, sigprocmask)
diff --git a/sysdeps/unix/sysv/linux/sigqueue.c b/sysdeps/unix/sysv/linux/sigqueue.c
index 5719e24..fa31119 100644
--- a/sysdeps/unix/sysv/linux/sigqueue.c
+++ b/sysdeps/unix/sysv/linux/sigqueue.c
@@ -16,9 +16,13 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <errno.h>
#include <signal.h>
#include <unistd.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
extern int __syscall_rt_sigqueueinfo (int, int, siginfo_t *);
@@ -39,6 +43,6 @@ __sigqueue (pid, sig, val)
info.si_uid = __getuid ();
info.si_value = val;
- return __syscall_rt_sigqueueinfo (pid, sig, &info);
+ return INLINE_SYSCALL (rt_sigqueueinfo, 3, pid, sig, &info);
}
weak_alias (__sigqueue, sigqueue)
diff --git a/sysdeps/unix/sysv/linux/sigsuspend.c b/sysdeps/unix/sysv/linux/sigsuspend.c
index a5d2eb0..b9aeffe 100644
--- a/sysdeps/unix/sysv/linux/sigsuspend.c
+++ b/sysdeps/unix/sysv/linux/sigsuspend.c
@@ -20,6 +20,9 @@
#include <signal.h>
#include <unistd.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
extern int __syscall_sigsuspend (int, unsigned long int, unsigned long int);
extern int __syscall_rt_sigsuspend (const sigset_t *, size_t);
@@ -41,7 +44,7 @@ __sigsuspend (set)
/* XXX The size argument hopefully will have to be changed to the
real size of the user-level sigset_t. */
int saved_errno = errno;
- int result = __syscall_rt_sigsuspend (set, _NSIG / 8);
+ int result = INLINE_SYSCALL (rt_sigsuspend, 2, set, _NSIG / 8);
if (result >= 0 || errno != ENOSYS)
return result;
@@ -50,6 +53,6 @@ __sigsuspend (set)
__libc_missing_rt_sigs = 1;
}
- return __syscall_sigsuspend (0, 0, set->__val[0]);
+ return INLINE_SYSCALL (sigsuspend, 3, 0, 0, set->__val[0]);
}
weak_alias (__sigsuspend, sigsuspend)
diff --git a/sysdeps/unix/sysv/linux/sigtimedwait.c b/sysdeps/unix/sysv/linux/sigtimedwait.c
index 90854c6..09c04cf 100644
--- a/sysdeps/unix/sysv/linux/sigtimedwait.c
+++ b/sysdeps/unix/sysv/linux/sigtimedwait.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998 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
@@ -16,8 +16,12 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <errno.h>
#include <signal.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
extern int __syscall_rt_sigtimedwait (const sigset_t *, siginfo_t *,
const struct timespec *, size_t);
@@ -31,6 +35,6 @@ __sigtimedwait (set, info, timeout)
{
/* XXX The size argument hopefully will have to be changed to the
real size of the user-level sigset_t. */
- return __syscall_rt_sigtimedwait (set, info, timeout, _NSIG / 8);
+ return INLINE_SYSCALL (rt_sigtimedwait, 4, set, info, timeout, _NSIG / 8);
}
weak_alias (__sigtimedwait, sigtimedwait)
diff --git a/sysdeps/unix/sysv/linux/sigwaitinfo.c b/sysdeps/unix/sysv/linux/sigwaitinfo.c
index da4624e..718d179 100644
--- a/sysdeps/unix/sysv/linux/sigwaitinfo.c
+++ b/sysdeps/unix/sysv/linux/sigwaitinfo.c
@@ -16,10 +16,14 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <errno.h>
#include <signal.h>
#define __need_NULL
#include <stddef.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
extern int __syscall_rt_sigtimedwait (const sigset_t *, siginfo_t *,
const struct timespec *, size_t);
@@ -32,6 +36,6 @@ __sigwaitinfo (set, info)
{
/* XXX The size argument hopefully will have to be changed to the
real size of the user-level sigset_t. */
- return __syscall_rt_sigtimedwait (set, info, NULL, _NSIG / 8);
+ return INLINE_SYSCALL (rt_sigtimedwait, 4, set, info, NULL, _NSIG / 8);
}
weak_alias (__sigwaitinfo, sigwaitinfo)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/setregid.c b/sysdeps/unix/sysv/linux/sparc/sparc32/setregid.c
new file mode 100644
index 0000000..99c57ad
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/setregid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setregid.c>
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/setreuid.c b/sysdeps/unix/sysv/linux/sparc/sparc32/setreuid.c
new file mode 100644
index 0000000..8ad6122
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/setreuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setreuid.c>
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
index fce5b5f..f5413ce 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
@@ -5,6 +5,38 @@ s_getpagesize getpagesize getpagesize 0 __syscall_getpagesize
s_llseek llseek _llseek 5 __sys_llseek
s_setgid setgid setgid 1 __syscall_setgid
s_setgroups setgroups setgroups 2 __syscall_setgroups
+s_setregid setregid setregid 2 __syscall_setregid
s_setresgid setresgid setresgid 3 __syscall_setresgid
s_setresuid setresuid setresuid 3 __syscall_setresuid
+s_setreuid setreuid setreuid 2 __syscall_setreuid
s_setuid setuid setuid 1 __syscall_setuid
+
+# System calls with wrappers.
+rt_sigaction - rt_sigaction 4 __syscall_rt_sigaction
+rt_sigpending - rt_sigpending 2 __syscall_rt_sigpending
+rt_sigprocmask - rt_sigprocmask 4 __syscall_rt_sigprocmask
+rt_sigqueueinfo - rt_sigqueueinfo 3 __syscall_rt_sigqueueinfo
+rt_sigsuspend - rt_sigsuspend 2 __syscall_rt_sigsuspend
+rt_sigtimedwait - rt_sigtimedwait 4 __syscall_rt_sigtimedwait
+s_getcwd getcwd getcwd 2 __syscall_getcwd
+s_getdents getdents getdents 3 __syscall_getdents
+s_getpriority getpriority getpriority 2 __syscall_getpriority
+s_getresgid getresgid getresgid 3 __syscall_getresgid
+s_getresuid getresuid getresuid 3 __syscall_getresuid
+s_poll poll poll 3 __syscall_poll
+s_pread64 pread64 pread 5 __syscall_pread64
+s_ptrace ptrace ptrace 4 __syscall_ptrace
+s_pwrite64 pwrite64 pwrite 5 __syscall_pwrite64
+s_reboot reboot reboot 3 __syscall_reboot
+s_sigaction sigaction sigaction 3 __syscall_sigaction
+s_sigpending sigpending sigpending 1 __syscall_sigpending
+s_sigprocmask sigprocmask sigprocmask 3 __syscall_sigprocmask
+s_sigsuspend sigsuspend sigsuspend 3 __syscall_sigsuspend
+s_sysctl sysctl _sysctl 1 __syscall__sysctl
+s_ustat ustat ustat 2 __syscall_ustat
+sys_fstat fxstat fstat 2 __syscall_fstat
+sys_lstat lxstat lstat 2 __syscall_lstat
+sys_mknod xmknod mknod 3 __syscall_mknod
+sys_readv readv readv 3 __syscall_readv
+sys_stat xstat stat 2 __syscall_stat
+sys_writev writev writev 3 __syscall_writev
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
index 1ec42fa..ed7bca0 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
@@ -33,3 +33,33 @@ socketpair - socketpair 4 __socketpair socketpair
getresuid - getresuid 3 getresuid
getresgid - getresgid 3 getresuid
+
+# System calls with wrappers.
+rt_sigaction - rt_sigaction 4 __syscall_rt_sigaction
+rt_sigpending - rt_sigpending 2 __syscall_rt_sigpending
+rt_sigprocmask - rt_sigprocmask 4 __syscall_rt_sigprocmask
+rt_sigqueueinfo - rt_sigqueueinfo 3 __syscall_rt_sigqueueinfo
+rt_sigsuspend - rt_sigsuspend 2 __syscall_rt_sigsuspend
+rt_sigtimedwait - rt_sigtimedwait 4 __syscall_rt_sigtimedwait
+s_getcwd getcwd getcwd 2 __syscall_getcwd
+s_getdents getdents getdents 3 __syscall_getdents
+s_getpriority getpriority getpriority 2 __syscall_getpriority
+s_getresgid getresgid getresgid 3 __syscall_getresgid
+s_getresuid getresuid getresuid 3 __syscall_getresuid
+s_poll poll poll 3 __syscall_poll
+s_pread64 pread64 pread 5 __syscall_pread64
+s_ptrace ptrace ptrace 4 __syscall_ptrace
+s_pwrite64 pwrite64 pwrite 5 __syscall_pwrite64
+s_reboot reboot reboot 3 __syscall_reboot
+s_sigaction sigaction sigaction 3 __syscall_sigaction
+s_sigpending sigpending sigpending 1 __syscall_sigpending
+s_sigprocmask sigprocmask sigprocmask 3 __syscall_sigprocmask
+s_sigsuspend sigsuspend sigsuspend 3 __syscall_sigsuspend
+s_sysctl sysctl _sysctl 1 __syscall__sysctl
+s_ustat ustat ustat 2 __syscall_ustat
+sys_fstat fxstat fstat 2 __syscall_fstat
+sys_lstat lxstat lstat 2 __syscall_lstat
+sys_mknod xmknod mknod 3 __syscall_mknod
+sys_readv readv readv 3 __syscall_readv
+sys_stat xstat stat 2 __syscall_stat
+sys_writev writev writev 3 __syscall_writev
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index 8880035..a2ea5b8 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -36,28 +36,6 @@ pipe - pipe 1 __pipe pipe
prctl EXTRA prctl 5 prctl
query_module EXTRA query_module 5 query_module
quotactl EXTRA quotactl 4 quotactl
-rt_sigaction - rt_sigaction 4 __syscall_rt_sigaction
-rt_sigpending - rt_sigpending 2 __syscall_rt_sigpending
-rt_sigprocmask - rt_sigprocmask 4 __syscall_rt_sigprocmask
-rt_sigqueueinfo - rt_sigqueueinfo 3 __syscall_rt_sigqueueinfo
-rt_sigsuspend - rt_sigsuspend 2 __syscall_rt_sigsuspend
-rt_sigtimedwait - rt_sigtimedwait 4 __syscall_rt_sigtimedwait
-s_getcwd getcwd getcwd 2 __syscall_getcwd
-s_getdents getdents getdents 3 __getdents
-s_getpriority getpriority getpriority 2 __syscall_getpriority
-s_getresgid getresgid getresgid 3 __syscall_getresgid
-s_getresuid getresuid getresuid 3 __syscall_getresuid
-s_poll poll poll 3 __syscall_poll
-s_pread64 pread64 pread 5 __syscall_pread64
-s_ptrace ptrace ptrace 4 __syscall_ptrace
-s_pwrite64 pwrite64 pwrite 5 __syscall_pwrite64
-s_reboot reboot reboot 3 __syscall_reboot
-s_sigaction sigaction sigaction 3 __syscall_sigaction
-s_sigpending sigpending sigpending 1 __syscall_sigpending
-s_sigprocmask sigprocmask sigprocmask 3 __syscall_sigprocmask
-s_sigsuspend sigsuspend sigsuspend 3 __syscall_sigsuspend
-s_sysctl sysctl _sysctl 1 __syscall__sysctl
-s_ustat ustat ustat 2 __syscall_ustat
sched_getp - sched_getparam 2 __sched_getparam sched_getparam
sched_gets - sched_getscheduler 1 __sched_getscheduler sched_getscheduler
sched_primax - sched_get_priority_max 1 __sched_get_priority_max sched_get_priority_max
@@ -74,12 +52,6 @@ setpgid - setpgid 2 __setpgid setpgid
setresuid EXTRA setresuid 3 __setresuid setresuid
setresgid EXTRA setresgid 3 setresgid
sigaltstack - sigaltstack 2 __sigaltstack sigaltstack
-sys_fstat fxstat fstat 2 __syscall_fstat
-sys_lstat lxstat lstat 2 __syscall_lstat
-sys_mknod xmknod mknod 3 __syscall_mknod
-sys_readv readv readv 3 __syscall_readv
-sys_stat xstat stat 2 __syscall_stat
-sys_writev writev writev 3 __syscall_writev
sysinfo EXTRA sysinfo 1 sysinfo
swapon - swapon 2 __swapon swapon
swapoff - swapoff 1 __swapoff swapoff
diff --git a/sysdeps/unix/sysv/linux/sysctl.c b/sysdeps/unix/sysv/linux/sysctl.c
index 9c136a5..1ab3c79 100644
--- a/sysdeps/unix/sysv/linux/sysctl.c
+++ b/sysdeps/unix/sysv/linux/sysctl.c
@@ -1,5 +1,5 @@
-/* sysctl - Read or write system information. Linux version.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Read or write system information. Linux version.
+ Copyright (C) 1996, 1997, 1998 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
@@ -17,8 +17,11 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <errno.h>
#include <sys/sysctl.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
extern int __syscall__sysctl (struct __sysctl_args *args);
@@ -36,5 +39,5 @@ sysctl (int *name, int nlen, void *oldval, size_t *oldlenp,
newlen: newlen
};
- return __syscall__sysctl (&args);
+ return INLINE_SYSCALL (_sysctl, 1, &args);
}
diff --git a/sysdeps/unix/sysv/linux/ustat.c b/sysdeps/unix/sysv/linux/ustat.c
index a8dfbb4..fdf2032 100644
--- a/sysdeps/unix/sysv/linux/ustat.c
+++ b/sysdeps/unix/sysv/linux/ustat.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -17,9 +17,12 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <errno.h>
#include <sys/ustat.h>
#include <sys/sysmacros.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
extern int __syscall_ustat (unsigned short int dev, struct ustat *ubuf);
@@ -31,5 +34,5 @@ ustat (dev_t dev, struct ustat *ubuf)
/* We must convert the value to dev_t type used by the kernel. */
k_dev = ((major (dev) & 0xff) << 8) | (minor (dev) & 0xff);
- return __syscall_ustat (k_dev, ubuf);
+ return INLINE_SYSCALL (ustat, 2, k_dev, ubuf);
}
diff --git a/sysdeps/unix/sysv/linux/writev.c b/sysdeps/unix/sysv/linux/writev.c
index 3b3c5b6..77ad9f5 100644
--- a/sysdeps/unix/sysv/linux/writev.c
+++ b/sysdeps/unix/sysv/linux/writev.c
@@ -1,5 +1,5 @@
/* writev supports all Linux kernels >= 2.0.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998 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,6 +22,9 @@
#include <sys/param.h>
#include <sys/uio.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
extern ssize_t __syscall_writev __P ((int, const struct iovec *, int));
static ssize_t __atomic_writev_replacement __P ((int, const struct iovec *,
int)) internal_function;
@@ -44,7 +47,7 @@ __writev (fd, vector, count)
int errno_saved = errno;
ssize_t bytes_written;
- bytes_written = __syscall_writev (fd, vector, count);
+ bytes_written = INLINE_SYSCALL (writev, 3, fd, vector, count);
if (bytes_written >= 0 || errno != EINVAL || count <= UIO_FASTIOV)
return bytes_written;
diff --git a/sysdeps/unix/sysv/linux/xmknod.c b/sysdeps/unix/sysv/linux/xmknod.c
index cd73849..d58da28 100644
--- a/sysdeps/unix/sysv/linux/xmknod.c
+++ b/sysdeps/unix/sysv/linux/xmknod.c
@@ -1,5 +1,5 @@
/* xmknod call using old-style Unix mknod system call.
- Copyright (C) 1991, 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1991, 93, 95, 96, 97, 98 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,6 +22,9 @@
#include <sys/stat.h>
#include <sys/sysmacros.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
extern int __syscall_mknod (const char *, unsigned short int,
unsigned short int);
@@ -42,7 +45,7 @@ __xmknod (int vers, const char *path, mode_t mode, dev_t *dev)
/* We must convert the value to dev_t type used by the kernel. */
k_dev = ((major (*dev) & 0xff) << 8) | (minor (*dev) & 0xff);
- return __syscall_mknod (path, mode, k_dev);
+ return INLINE_SYSCALL (mknod, 3, path, mode, k_dev);
}
weak_alias (__xmknod, _xmknod)
diff --git a/sysdeps/unix/sysv/linux/xstat.c b/sysdeps/unix/sysv/linux/xstat.c
index 8532857..79759fe 100644
--- a/sysdeps/unix/sysv/linux/xstat.c
+++ b/sysdeps/unix/sysv/linux/xstat.c
@@ -1,5 +1,5 @@
/* xstat using old-style Unix stat system call.
- Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1995, 1996, 1997, 1998 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
@@ -26,6 +26,9 @@
#include <sys/stat.h>
#include <kernel_stat.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
#include <xstatconv.c>
extern int __syscall_stat (const char *, struct kernel_stat *);
@@ -38,9 +41,11 @@ __xstat (int vers, const char *name, struct stat *buf)
int result;
if (vers == _STAT_VER_KERNEL)
- return __syscall_stat (name, (struct kernel_stat *) buf);
+ {
+ return INLINE_SYSCALL (stat, 2, name, (struct kernel_stat *) buf);
+ }
- result = __syscall_stat (name, &kbuf);
+ result = INLINE_SYSCALL (stat, 2, name, &kbuf);
if (result == 0)
result = xstat_conv (vers, &kbuf, buf);
diff --git a/sysdeps/unix/sysv/linux/xstat64.c b/sysdeps/unix/sysv/linux/xstat64.c
index 02f70c5..33f130b 100644
--- a/sysdeps/unix/sysv/linux/xstat64.c
+++ b/sysdeps/unix/sysv/linux/xstat64.c
@@ -1,5 +1,5 @@
/* xstat64 using old-style Unix stat system call.
- Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1995, 1996, 1997, 1998 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,6 +22,9 @@
#include <sys/stat.h>
#include <kernel_stat.h>
+#include <sysdep.h>
+#include <sys/syscall.h>
+
#include <xstatconv.c>
extern int __syscall_stat (const char *, struct kernel_stat *);
@@ -33,7 +36,7 @@ __xstat64 (int vers, const char *name, struct stat64 *buf)
struct kernel_stat kbuf;
int result;
- result = __syscall_stat (name, &kbuf);
+ result = INLINE_SYSCALL (stat, 2, name, &kbuf);
if (result == 0)
result = xstat64_conv (vers, &kbuf, buf);