diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-01-18 04:33:34 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-01-18 04:33:34 +0000 |
commit | 0482576eec37874110782f0bae6dd0e1b4a357c6 (patch) | |
tree | 87c6c9880dffc5f89b1fc716b52136ee4c72d844 /sysdeps/unix/sysv/linux/sparc | |
parent | d316a91962f62fb44c713feac0e82241e8cec1cd (diff) | |
download | glibc-0482576eec37874110782f0bae6dd0e1b4a357c6.tar.gz glibc-0482576eec37874110782f0bae6dd0e1b4a357c6.tar.xz glibc-0482576eec37874110782f0bae6dd0e1b4a357c6.zip |
Update.
2000-01-17 Jakub Jelinek <jakub@redhat.com> * sysdeps/unix/sysv/linux/bits/ipc.h: New file. * sysdeps/unix/sysv/linux/bits/sem.h: New file. * sysdeps/unix/sysv/linux/bits/shm.h: New file. * sysdeps/unix/sysv/linux/bits/msg.h: New file. * sysdeps/unix/sysv/linux/bits/alpha/ipc.h: Update for new ipc. * sysdeps/unix/sysv/linux/bits/alpha/sem.h: New file. * sysdeps/unix/sysv/linux/bits/alpha/shm.h: New file. * sysdeps/unix/sysv/linux/bits/alpha/msg.h: New file. * sysdeps/unix/sysv/linux/bits/sparc/ipc.h: New file. * sysdeps/unix/sysv/linux/bits/sparc/sem.h: New file. * sysdeps/unix/sysv/linux/bits/sparc/shm.h: New file. * sysdeps/unix/sysv/linux/bits/sparc/msg.h: New file. * sysdeps/unix/sysv/linux/msgctl.c (__old_msgctl): Renamed from msgctl. (__new_msgctl): New function. * sysdeps/unix/sysv/linux/semctl.c (__old_semctl): Renamed from semctl. (__new_semctl): New function. * sysdeps/unix/sysv/linux/shmctl.c (__old_shmctl): Renamed from shmctl. (__new_shmctl): New function. * sysdeps/unix/sysv/linux/msgget.c: Define __LIBC_IPC_INTERNAL. * sysdeps/unix/sysv/linux/msgrcv.c: Likewise. * sysdeps/unix/sysv/linux/semget.c: Likewise. * sysdeps/unix/sysv/linux/msgsnd.c: Likewise. * sysdeps/unix/sysv/linux/semop.c: Likewise. * sysdeps/unix/sysv/linux/shmat.c: Likewise. * sysdeps/unix/sysv/linux/shmdt.c: Likewise. * sysdeps/unix/sysv/linux/shmget.c: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/semctl.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/msgctl.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/shmctl.c: New file. * sysdeps/unix/sysv/linux/Versions: Add msgctl, semctl, shmctl. 2000-01-17 Jakub Jelinek <jakub@redhat.com> * sysdeps/unix/sysv/linux/sparc/sparc32/seteuid.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/setegid.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/Dist: Remove setres[ug]id. * sysdeps/unix/sysv/linux/sparc/sparc32/mmap64.c: Kill warnings. * sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list: Define needed syscalls. * sysdeps/unix/sysv/linux/pwrite64.c: Use proper prototype. * sysdeps/unix/sysv/linux/truncate64.c: Likewise. * sysdeps/unix/sysv/linux/kernel-features.h: [gs]etres[ug]id are available on sparc since 2.3.39. * sysdeps/unix/sysv/linux/execve.c: Kill warnings. 2000-01-17 Jakub Jelinek <jakub@redhat.com> * sysdeps/unix/sysv/linux/i386/chown.c (__syscall_chown): Use proper prototype. (__real_chown): Return EINVAL if owner or group are out of the range -1U .. 65534. * sysdeps/unix/sysv/linux/i386/lchown.c (__lchown): Likewise. * sysdeps/unix/sysv/linux/i386/fchown.c (__fchown): Likewise. * sysdeps/unix/sysv/linux/i386/setresuid.c (__setresuid): Return EINVAL if ruid, euid or suid are out of the range -1U .. 65534. * sysdeps/unix/sysv/linux/i386/setresgid.c (__setresgid): Similarly. * sysdeps/unix/sysv/linux/i386/setreuid.c (__setreuid): Simplify. * sysdeps/unix/sysv/linux/i386/setregid.c (__setregid): Likewise. * sysdeps/unix/sysv/linux/m68k/chown.c (__syscall_chown): Use proper prototype. Don't include non-existant header. (__chown): Return EINVAL if owner or group are out of the range -1U .. 65534. * sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list (setresuid, setresgid): Inherit standard linux/syscalls.list definitions. * sysdeps/unix/sysv/linux/sparc/sparc32/setresuid.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/setresgid.c: Remove. * sysdeps/unix/sysv/linux/syscalls.list (setresgid): Provide __setresgid symbol.
Diffstat (limited to 'sysdeps/unix/sysv/linux/sparc')
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/bits/ipc.h | 98 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/bits/msq.h | 99 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/bits/sem.h | 106 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/bits/shm.h | 123 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/Dist | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/mmap64.c | 8 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/setegid.c | 52 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/seteuid.c | 56 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/setresgid.c | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/setresuid.c | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list | 28 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/msgctl.c | 36 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/semctl.c | 54 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/shmctl.c | 35 |
14 files changed, 687 insertions, 12 deletions
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/ipc.h b/sysdeps/unix/sysv/linux/sparc/bits/ipc.h new file mode 100644 index 0000000000..1a479248a5 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/bits/ipc.h @@ -0,0 +1,98 @@ +/* Copyright (C) 1995-1999, 2000 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. */ + +#ifndef _SYS_IPC_H +# error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead." +#endif + +#include <bits/types.h> +#include <bits/wordsize.h> + +/* Mode bits for `msgget', `semget', and `shmget'. */ +#define IPC_CREAT 01000 /* Create key if key does not exist. */ +#define IPC_EXCL 02000 /* Fail if key exists. */ +#define IPC_NOWAIT 04000 /* Return error on wait. */ + +/* Control commands for `msgctl', `semctl', and `shmctl'. */ +#define IPC_RMID 0 /* Remove identifier. */ +#define IPC_SET 1 /* Set `ipc_perm' options. */ +#define IPC_STAT 2 /* Get `ipc_perm' options. */ +#define IPC_INFO 3 /* See ipcs. */ + +/* Special key values. */ +#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ + +#define __IPC_64 0x100 + + +/* Data structure used to pass permission information to IPC operations. */ +struct ipc_perm + { + __key_t __key; /* Key. */ + __uid_t uid; /* Owner's user ID. */ + __gid_t gid; /* Owner's group ID. */ + __uid_t cuid; /* Creator's user ID. */ + __gid_t cgid; /* Creator's group ID. */ +#if __WORDSIZE == 32 + unsigned short int __pad1; + unsigned short int mode; /* Read/write permission. */ + unsigned short int __pad2; +#else + unsigned int mode; /* Read/write permission. */ + unsigned short int __pad1; +#endif + unsigned short int __seq; /* Sequence number. */ + unsigned long long int __unused1; + unsigned long long int __unused2; + }; + +#ifdef __LIBC_IPC_INTERNAL +struct __old_ipc_perm + { + __key_t __key; /* Key. */ + unsigned short int uid; /* Owner's user ID. */ + unsigned short int gid; /* Owner's group ID. */ + unsigned short int cuid; /* Creator's user ID. */ + unsigned short int cgid; /* Creator's group ID. */ + unsigned short int mode; /* Read/write permission. */ + unsigned short int __seq; /* Sequence number. */ + }; + +__BEGIN_DECLS + +/* The actual system call: all functions are multiplexed by this. */ +extern int __syscall_ipc (int __call, int __first, int __second, + int __third, void *__ptr); + +__END_DECLS + + +/* The codes for the functions to use the multiplexer `__syscall_ipc'. */ +#define IPCOP_semop 1 +#define IPCOP_semget 2 +#define IPCOP_semctl 3 +#define IPCOP_msgsnd 11 +#define IPCOP_msgrcv 12 +#define IPCOP_msgget 13 +#define IPCOP_msgctl 14 +#define IPCOP_shmat 21 +#define IPCOP_shmdt 22 +#define IPCOP_shmget 23 +#define IPCOP_shmctl 24 + +#endif /* __LIBC_IPC_INTERNAL */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/msq.h b/sysdeps/unix/sysv/linux/sparc/bits/msq.h new file mode 100644 index 0000000000..c5095083c8 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/bits/msq.h @@ -0,0 +1,99 @@ +/* Copyright (C) 1995, 1996, 1997, 2000 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. */ + +#ifndef _SYS_MSG_H +# error "Never use <bits/msq.h> directly; include <sys/msg.h> instead." +#endif + +#include <sys/types.h> +#include <bits/wordsize.h> + +/* Define options for message queue functions. */ +#define MSG_NOERROR 010000 /* no error if message is too big */ +#define MSG_EXCEPT 020000 /* recv any msg except of specified type */ + + +/* Structure of record for one message inside the kernel. + The type `struct msg' is opaque. */ +struct msqid_ds +{ + struct ipc_perm msg_perm; /* structure describing operation permission */ +#if __WORDSIZE == 32 + unsigned int __pad1; +#endif + __time_t msg_stime; /* time of last msgsnd command */ +#if __WORDSIZE == 32 + unsigned int __pad2; +#endif + __time_t msg_rtime; /* time of last msgrcv command */ +#if __WORDSIZE == 32 + unsigned int __pad3; +#endif + __time_t msg_ctime; /* time of last change */ + unsigned long int __msg_cbytes; /* current number of bytes on queue */ + unsigned long int msg_qnum; /* number of messages currently on queue */ + unsigned long int msg_qbytes; /* max number of bytes allowed on queue */ + pid_t msg_lspid; /* pid of last msgsnd() */ + pid_t msg_lrpid; /* pid of last msgrcv() */ + unsigned long int __unused1; + unsigned long int __unused2; +}; + +#ifdef __LIBC_IPC_INTERNAL + +struct __old_msqid_ds +{ + struct __old_ipc_perm msg_perm; /* structure describing operation permission */ + struct msg *__msg_first; /* pointer to first message on queue */ + struct msg *__msg_last; /* pointer to last message on queue */ + __time_t msg_stime; /* time of last msgsnd command */ + __time_t msg_rtime; /* time of last msgrcv command */ + __time_t msg_ctime; /* time of last change */ + struct wait_queue *__wwait; /* ??? */ + struct wait_queue *__rwait; /* ??? */ + unsigned short int __msg_cbytes; /* current number of bytes on queue */ + unsigned short int msg_qnum; /* number of messages currently on queue */ + unsigned short int msg_qbytes; /* max number of bytes allowed on queue */ + __ipc_pid_t msg_lspid; /* pid of last msgsnd() */ + __ipc_pid_t msg_lrpid; /* pid of last msgrcv() */ +}; + +#endif + +#ifdef __USE_MISC + +# define msg_cbytes __msg_cbytes + +/* ipcs ctl commands */ +# define MSG_STAT 11 +# define MSG_INFO 12 + +/* buffer for msgctl calls IPC_INFO, MSG_INFO */ +struct msginfo + { + int msgpool; + int msgmap; + int msgmax; + int msgmnb; + int msgmni; + int msgssz; + int msgtql; + unsigned short int msgseg; + }; + +#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sem.h b/sysdeps/unix/sysv/linux/sparc/bits/sem.h new file mode 100644 index 0000000000..92906bc81b --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/bits/sem.h @@ -0,0 +1,106 @@ +/* Copyright (C) 1995, 1996, 1997, 1998, 2000 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. */ + +#ifndef _SYS_SEM_H +# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead." +#endif + +#include <sys/types.h> +#include <bits/wordsize.h> + +/* Flags for `semop'. */ +#define SEM_UNDO 0x1000 /* undo the operation on exit */ + +/* Commands for `semctl'. */ +#define GETPID 11 /* get sempid */ +#define GETVAL 12 /* get semval */ +#define GETALL 13 /* get all semval's */ +#define GETNCNT 14 /* get semncnt */ +#define GETZCNT 15 /* get semzcnt */ +#define SETVAL 16 /* set semval */ +#define SETALL 17 /* set all semval's */ + + +/* Data structure describing a set of semaphores. */ +struct semid_ds +{ + struct ipc_perm sem_perm; /* operation permission struct */ +#if __WORDSIZE == 32 + unsigned int __pad1; +#endif + __time_t sem_otime; /* last semop() time */ +#if __WORDSIZE == 32 + unsigned int __pad2; +#endif + __time_t sem_ctime; /* last time changed by semctl() */ + unsigned long int sem_nsems; /* number of semaphores in set */ + unsigned long int __unused1; + unsigned long int __unused2; +}; + +#ifdef __LIBC_IPC_INTERNAL +struct __old_semid_ds +{ + struct __old_ipc_perm sem_perm; /* operation permission struct */ + __time_t sem_otime; /* last semop() time */ + __time_t sem_ctime; /* last time changed by semctl() */ + struct sem *__sembase; /* ptr to first semaphore in array */ + struct sem_queue *__sem_pending; /* pending operations */ + struct sem_queue *__sem_pending_last; /* last pending operation */ + struct sem_undo *__undo; /* ondo requests on this array */ + unsigned short int sem_nsems; /* number of semaphores in set */ +}; +#endif + +/* The user should define a union like the following to use it for arguments + for `semctl'. + + union semun + { + int val; <= value for SETVAL + struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET + unsigned short int *array; <= array for GETALL & SETALL + struct seminfo *__buf; <= buffer for IPC_INFO + }; + + Previous versions of this file used to define this union but this is + incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether + one must define the union or not. */ +#define _SEM_SEMUN_UNDEFINED 1 + +#ifdef __USE_MISC + +/* ipcs ctl cmds */ +# define SEM_STAT 18 +# define SEM_INFO 19 + +struct seminfo +{ + int semmap; + int semmni; + int semmns; + int semmnu; + int semmsl; + int semopm; + int semume; + int semusz; + int semvmx; + int semaem; +}; + +#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/shm.h b/sysdeps/unix/sysv/linux/sparc/bits/shm.h new file mode 100644 index 0000000000..8f2ee52296 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/bits/shm.h @@ -0,0 +1,123 @@ +/* Copyright (C) 1995, 1996, 1997, 2000 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. */ + +#ifndef _SYS_SHM_H +# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead." +#endif + +#include <sys/types.h> +#include <bits/wordsize.h> + +/* Permission flag for shmget. */ +#define SHM_R 0400 /* or S_IRUGO from <linux/stat.h> */ +#define SHM_W 0200 /* or S_IWUGO from <linux/stat.h> */ + +/* Flags for `shmat'. */ +#define SHM_RDONLY 010000 /* attach read-only else read-write */ +#define SHM_RND 020000 /* round attach address to SHMLBA */ +#define SHM_REMAP 040000 /* take-over region on attach */ + +/* Commands for `shmctl'. */ +#define SHM_LOCK 11 /* lock segment (root only) */ +#define SHM_UNLOCK 12 /* unlock segment (root only) */ + + +/* Data structure describing a set of semaphores. */ +struct shmid_ds + { + struct ipc_perm shm_perm; /* operation permission struct */ +#if __WORDSIZE == 32 + unsigned int __pad1; +#endif + __time_t shm_atime; /* time of last shmat() */ +#if __WORDSIZE == 32 + unsigned int __pad2; +#endif + __time_t shm_dtime; /* time of last shmdt() */ +#if __WORDSIZE == 32 + unsigned int __pad3; +#endif + __time_t shm_ctime; /* time of last change by shmctl() */ + size_t shm_segsz; /* size of segment in bytes */ + pid_t shm_cpid; /* pid of creator */ + pid_t shm_lpid; /* pid of last shmop */ + unsigned long int shm_nattch; /* number of current attaches */ + unsigned long int __unused1; + unsigned long int __unused2; + }; + +#ifdef __LIBC_IPC_INTERNAL +struct __old_shmid_ds + { + struct __old_ipc_perm shm_perm; /* operation permission struct */ + int shm_segsz; /* size of segment in bytes */ + __time_t shm_atime; /* time of last shmat() */ + __time_t shm_dtime; /* time of last shmdt() */ + __time_t shm_ctime; /* time of last change by shmctl() */ + __ipc_pid_t shm_cpid; /* pid of creator */ + __ipc_pid_t shm_lpid; /* pid of last shmop */ + unsigned short int shm_nattch; /* number of current attaches */ + unsigned short int __shm_npages; /* size of segment (pages) */ + unsigned long int *__shm_pages; /* array of ptrs to frames -> SHMMAX */ + struct vm_area_struct *__attaches; /* descriptors for attaches */ + }; +#endif + +#ifdef __USE_MISC + +/* ipcs ctl commands */ +# define SHM_STAT 13 +# define SHM_INFO 14 + +/* shm_mode upper byte flags */ +# define SHM_DEST 01000 /* segment will be destroyed on last detach */ +# define SHM_LOCKED 02000 /* segment will not be swapped */ + +struct shminfo + { + unsigned long shmmax; + unsigned long shmmin; + unsigned long shmmni; + unsigned long shmseg; + unsigned long shmall; + unsigned long __unused1; + unsigned long __unused2; + unsigned long __unused3; + unsigned long __unused4; + }; + +struct __old_shminfo + { + int shmmax; + int shmmin; + int shmmni; + int shmseg; + int shmall; + }; + +struct shm_info + { + int used_ids; + unsigned long int shm_tot; /* total allocated shm */ + unsigned long int shm_rss; /* total resident shm */ + unsigned long int shm_swp; /* total swapped shm */ + unsigned long int swap_attempts; + unsigned long int swap_successes; + }; + +#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/Dist b/sysdeps/unix/sysv/linux/sparc/sparc32/Dist index 28968fd133..24b16852e6 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/Dist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/Dist @@ -1,7 +1,5 @@ clone.S kernel_stat.h init-first.h -setresuid.c -setresgid.c setfsuid.c setfsgid.c diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/mmap64.c b/sysdeps/unix/sysv/linux/sparc/sparc32/mmap64.c index c9e7653c89..6a77e28a8a 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/mmap64.c +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/mmap64.c @@ -28,7 +28,7 @@ #include "kernel-features.h" #ifdef __NR_mmap2 -extern int __syscall_mmap2(__ptr_t, size_t, int, int, int, off_t); +extern __ptr_t __syscall_mmap2(__ptr_t, size_t, int, int, int, off_t); #ifndef __ASSUME_MMAP2_SYSCALL static int have_no_mmap2; #endif @@ -48,11 +48,11 @@ __mmap64 (__ptr_t addr, size_t len, int prot, int flags, int fd, off64_t offset) int saved_errno = errno; #endif /* This will be always 12, no matter what page size is. */ - int result = INLINE_SYSCALL (mmap2, 6, addr, len, prot, flags, - fd, (off_t) (offset >> 12)); + __ptr_t result = INLINE_SYSCALL (mmap2, 6, addr, len, prot, flags, + fd, (off_t) (offset >> 12)); #ifndef __ASSUME_MMAP2_SYSCALL - if (result != -1 || errno != ENOSYS) + if (result != (__ptr_t) -1 || errno != ENOSYS) #endif return result; diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/setegid.c b/sysdeps/unix/sysv/linux/sparc/sparc32/setegid.c index 2e3a54c893..f822b0902e 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/setegid.c +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/setegid.c @@ -1 +1,51 @@ -#include <sysdeps/unix/sysv/linux/i386/setegid.c> +/* Copyright (C) 1998, 2000 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/syscall.h> +#include <sys/types.h> +#include <unistd.h> + +#ifdef __NR_setresgid32 + +extern int __setresgid (gid_t rgid, gid_t egid, gid_t sgid); + +int +setegid (gid_t gid) +{ + int result; + + if (gid == (gid_t) ~0) + { + __set_errno (EINVAL); + return -1; + } + + /* First try the syscall. */ + result = __setresgid (-1, gid, -1); + if (result == -1 && errno == ENOSYS) + /* No system call available. Use emulation. This may not work + since `setregid' also sets the saved group ID when GID is not + equal to the real group ID, making it impossible to switch back. */ + result = __setregid (-1, gid); + + return result; +} +#else +# include <sysdeps/unix/bsd/setegid.c> +#endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/seteuid.c b/sysdeps/unix/sysv/linux/sparc/sparc32/seteuid.c index 18e41d08c1..0b3c700924 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/seteuid.c +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/seteuid.c @@ -1 +1,55 @@ -#include <sysdeps/unix/sysv/linux/i386/seteuid.c> +/* Copyright (C) 1998, 1999, 2000 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/syscall.h> +#include <sys/types.h> +#include <unistd.h> + +#include "kernel-features.h" + +#if defined __NR_setresuid32 || __ASSUME_SETRESUID_SYSCALL > 0 + +extern int __setresuid (uid_t ruid, uid_t euid, uid_t suid); + +int +seteuid (uid_t uid) +{ + int result; + + if (uid == (uid_t) ~0) + { + __set_errno (EINVAL); + return -1; + } + + /* First try the syscall. */ + result = __setresuid (-1, uid, -1); +# if __ASSUME_SETRESUID_SYSCALL == 0 + if (result == -1 && errno == ENOSYS) + /* No system call available. Use emulation. This may not work + since `setreuid' also sets the saved user ID when UID is not + equal to the real user ID, making it impossible to switch back. */ + result = __setreuid (-1, uid); +# endif + + return result; +} +#else +# include <sysdeps/unix/bsd/seteuid.c> +#endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/setresgid.c b/sysdeps/unix/sysv/linux/sparc/sparc32/setresgid.c deleted file mode 100644 index daca1a4833..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/setresgid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/setresgid.c> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/setresuid.c b/sysdeps/unix/sysv/linux/sparc/sparc32/setresuid.c deleted file mode 100644 index 3aeabe9ad7..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/setresuid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/setresuid.c> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list index 07333a72b6..5f472d56c7 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list @@ -8,12 +8,14 @@ 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_setrlimit setrlimit setrlimit 3 __syscall_setrlimit s_ipc msgget ipc 5 __syscall_ipc s_setuid setuid setuid 1 __syscall_setuid +setresuid EXTRA setresuid32 3 __setresuid setresuid +setresgid EXTRA setresgid32 3 __setresgid setresgid +getresuid EXTRA getresuid32 3 getresuid +getresgid EXTRA getresgid32 3 getresgid # System calls with wrappers. rt_sigaction - rt_sigaction 4 __syscall_rt_sigaction @@ -52,3 +54,25 @@ 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 +s_chown chown chown 3 __syscall_chown +s_chown32 chown chown32 3 __syscall_chown32 +s_fchown fchown fchown 3 __syscall_fchown +s_fchown32 fchown fchown32 3 __syscall_fchown32 +s_lchown lchown lchown 3 __syscall_lchown +s_lchown32 lchown lchown32 3 __syscall_lchown32 +s_getgid getgid getgid 0 __syscall_getgid +s_getgid32 getgid getgid32 0 __syscall_getgid32 +s_getuid getuid getuid 0 __syscall_getuid +s_getuid32 getuid getuid32 0 __syscall_getuid32 +s_getgroups32 getgroups getgroups32 2 __syscall_getgroups32 +s_setgroups32 setgroups setgroups32 2 __syscall_setgroups32 +s_setfsgid32 setfsgid setfsgid32 1 __syscall_setfsgid32 +s_setfsuid32 setfsuid setfsuid32 1 __syscall_setfsuid32 +s_setregid32 setregid setregid32 2 __syscall_setregid32 +s_setreuid32 setreuid setreuid32 2 __syscall_setreuid32 +s_getegid getegid getegid 0 __syscall_getegid +s_geteuid geteuid geteuid 0 __syscall_geteuid +s_getegid32 getegid getegid32 0 __syscall_getegid32 +s_geteuid32 geteuid geteuid32 0 __syscall_geteuid32 +s_setgid32 setgid setgid32 1 __syscall_setgid32 +s_setuid32 setuid setuid32 1 __syscall_setuid32 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/msgctl.c b/sysdeps/unix/sysv/linux/sparc/sparc64/msgctl.c new file mode 100644 index 0000000000..53ace35584 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/msgctl.c @@ -0,0 +1,36 @@ +/* Copyright (C) 1995, 1997, 1998, 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. + + 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/msg.h> + +#include <sysdep.h> +#include <sys/syscall.h> + +/* Allows to control internal state and destruction of message queue + objects. */ + +int +msgctl (msqid, cmd, buf) + int msqid; + int cmd; + struct msqid_ds *buf; +{ + return INLINE_SYSCALL (ipc, 5, IPCOP_msgctl, msqid, cmd, 0, buf); +} diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/semctl.c b/sysdeps/unix/sysv/linux/sparc/sparc64/semctl.c new file mode 100644 index 0000000000..b0f76e6552 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/semctl.c @@ -0,0 +1,54 @@ +/* Copyright (C) 1995, 1997, 1998, 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. + + 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 <stdarg.h> +#include <sys/sem.h> + +#include <sysdep.h> +#include <sys/syscall.h> + +/* Define a `union semun' suitable for Linux here. */ +union semun +{ + int val; /* value for SETVAL */ + struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */ + unsigned short int *array; /* array for GETALL & SETALL */ + struct seminfo *__buf; /* buffer for IPC_INFO */ +}; + + +/* Return identifier for array of NSEMS semaphores associated with + KEY. */ + +int +semctl (int semid, int semnum, int cmd, ...) +{ + union semun arg; + va_list ap; + + va_start (ap, cmd); + + /* Get the argument. */ + arg = va_arg (ap, union semun); + + va_end (ap); + + return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd, &arg); +} diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/shmctl.c b/sysdeps/unix/sysv/linux/sparc/sparc64/shmctl.c new file mode 100644 index 0000000000..7bb49469e0 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/shmctl.c @@ -0,0 +1,35 @@ +/* Copyright (C) 1995, 1997, 1998, 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. + + 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/shm.h> + +#include <sysdep.h> +#include <sys/syscall.h> + +/* Provide operations to control over shared memory segments. */ + +int +shmctl (shmid, cmd, buf) + int shmid; + int cmd; + struct shmid_ds *buf; +{ + return INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd, 0, buf); +} |