diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux')
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); |