diff options
-rw-r--r-- | ChangeLog | 18 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/Makefile | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/semctl.c | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/syscalls.list | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/semctl.c | 54 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/syscalls.list | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/hppa/syscalls.list | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/syscalls.list | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/microblaze/semctl.c | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/mips/mips64/semctl.c | 38 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/semctl.c | 71 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/semctl.c | 54 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/x86_64/syscalls.list | 1 |
14 files changed, 54 insertions, 191 deletions
diff --git a/ChangeLog b/ChangeLog index eb7e75129e..b9e40cc12d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,23 @@ 2016-12-28 Adhemerval Zanella <adhemerval.zanella@linaro.org> + * sysdeps/unix/sysv/linux/alpha/Makefile (sysdeps_routines): Remove + oldsemctl. + * sysdeps/unix/sysv/linux/alpha/semctl.c: Remove file. + * sysdeps/unix/sysv/linux/arm/semctl.c: Likewise. + * sysdeps/unix/sysv/linux/microblaze/semctl.c: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/semctl.c: Likewise. + * sysdeps/unix/sysv/linux/mips/mips64/semctl.c: Use defaulf + implementation. + * sysdeps/unix/sysv/linux/semctl.c (__new_semctl): Use semctl + syscall if it is defined. + * sysdeps/unix/sysv/linux/generic/syscalls.list (semctl): Remove. + * sysdeps/unix/sysv/linux/alpha/syscalls.list (semctl): Likewise. + * sysdeps/unix/sysv/linux/hppa/syscalls.list (semctl): Likewise. + * sysdeps/unix/sysv/linux/ia64/syscalls.list (semctl): Likewise. + * sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list (semctl): + Likewise. + * sysdeps/unix/sysv/linux/x86_64/syscalls.list (semctl): Likewise. + * sysvipc/Makefile (tests): Add test-sysvmsg. * sysvipc/test-sysvmsg.c: New file. * support/check.h (FAIL_UNSUPPORTED): New define. diff --git a/sysdeps/unix/sysv/linux/alpha/Makefile b/sysdeps/unix/sysv/linux/alpha/Makefile index c24dc2e900..386b3fdd38 100644 --- a/sysdeps/unix/sysv/linux/alpha/Makefile +++ b/sysdeps/unix/sysv/linux/alpha/Makefile @@ -18,7 +18,7 @@ sysdep_routines += osf_select osf_gettimeofday osf_settimeofday \ osf_getrusage osf_wait4 # Support old ipc control -sysdep_routines += oldsemctl oldshmctl +sysdep_routines += oldshmctl CFLAGS-ioperm.c = -Wa,-mev6 endif diff --git a/sysdeps/unix/sysv/linux/alpha/semctl.c b/sysdeps/unix/sysv/linux/alpha/semctl.c deleted file mode 100644 index 4cb834ad97..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/semctl.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/arm/semctl.c> diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list index 54c1752522..c12620a382 100644 --- a/sysdeps/unix/sysv/linux/alpha/syscalls.list +++ b/sysdeps/unix/sysv/linux/alpha/syscalls.list @@ -7,7 +7,6 @@ shmget - shmget i:iii __shmget shmget semop - semop i:ipi __semop semop semtimedop - semtimedop i:ipip semtimedop semget - semget i:iii __semget semget -oldsemctl EXTRA semctl i:iiii __old_semctl semctl@GLIBC_2.0 sigstack - sigstack 2 sigstack diff --git a/sysdeps/unix/sysv/linux/arm/semctl.c b/sysdeps/unix/sysv/linux/arm/semctl.c deleted file mode 100644 index 79d9d3e0db..0000000000 --- a/sysdeps/unix/sysv/linux/arm/semctl.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1995-2016 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <stdarg.h> -#include <sys/sem.h> -#include <ipc_priv.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 */ -}; - -int -__new_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 (semctl, 4, semid, semnum, cmd | __IPC_64, - arg.array); -} - -#include <shlib-compat.h> -versioned_symbol (libc, __new_semctl, semctl, GLIBC_2_2); diff --git a/sysdeps/unix/sysv/linux/generic/syscalls.list b/sysdeps/unix/sysv/linux/generic/syscalls.list index ad75223884..f95f1f7a49 100644 --- a/sysdeps/unix/sysv/linux/generic/syscalls.list +++ b/sysdeps/unix/sysv/linux/generic/syscalls.list @@ -2,7 +2,6 @@ # SysV APIs semget - semget i:iii __semget semget -semctl - semctl i:iiii __semctl semctl semtimedop - semtimedop i:ipip semtimedop semop - semop i:ipi __semop semop shmget - shmget i:iii __shmget shmget diff --git a/sysdeps/unix/sysv/linux/hppa/syscalls.list b/sysdeps/unix/sysv/linux/hppa/syscalls.list index da2c9abbbf..5040ef34ec 100644 --- a/sysdeps/unix/sysv/linux/hppa/syscalls.list +++ b/sysdeps/unix/sysv/linux/hppa/syscalls.list @@ -8,7 +8,6 @@ shmget - shmget i:iii __shmget shmget semop - semop i:ipi __semop semop semtimedop - semtimedop i:ipip semtimedop semget - semget i:iii __semget semget -semctl - semctl i:iiii __semctl semctl # proper socket implementations: accept - accept Ci:iBN __libc_accept __accept accept diff --git a/sysdeps/unix/sysv/linux/ia64/syscalls.list b/sysdeps/unix/sysv/linux/ia64/syscalls.list index 8056781e41..ca5cba46f8 100644 --- a/sysdeps/unix/sysv/linux/ia64/syscalls.list +++ b/sysdeps/unix/sysv/linux/ia64/syscalls.list @@ -12,7 +12,6 @@ shmget - shmget i:iii __shmget shmget semop - semop i:ipi __semop semop semtimedop - semtimedop i:ipip semtimedop semget - semget i:iii __semget semget -semctl - semctl i:iiii __semctl semctl # proper socket implementations: accept - accept Ci:iBN __libc_accept __accept accept diff --git a/sysdeps/unix/sysv/linux/microblaze/semctl.c b/sysdeps/unix/sysv/linux/microblaze/semctl.c deleted file mode 100644 index 4cb834ad97..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/semctl.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/arm/semctl.c> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/semctl.c b/sysdeps/unix/sysv/linux/mips/mips64/semctl.c index 1115a25a51..5a0c2a3dd3 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/semctl.c +++ b/sysdeps/unix/sysv/linux/mips/mips64/semctl.c @@ -15,39 +15,11 @@ License along with the GNU C Library. If not, see <http://www.gnu.org/licenses/>. */ -#include <errno.h> -#include <stdarg.h> -#include <sys/sem.h> -#include <ipc_priv.h> -#include <sysdep.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 */ -}; - -int __semctl (int semid, int semnum, int cmd, ...); - -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); +#include <shlib-compat.h> - va_end (ap); +#undef SHLIB_COMPAT +#define SHLIB_COMPAT(a, b, c) 0 - return INLINE_SYSCALL (semctl, 4, semid, semnum, cmd | __IPC_64, - arg.array); -} +#define DEFAULT_VERSION GLIBC_2_0 -#include <shlib-compat.h> -versioned_symbol (libc, __semctl, semctl, GLIBC_2_0); +#include <sysdeps/unix/sysv/linux/semctl.c> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list b/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list index f23b3798b4..09ab580504 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list +++ b/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list @@ -7,4 +7,3 @@ shmdt - shmdt i:s __shmdt shmdt shmget - shmget i:iii __shmget shmget semop - semop i:ipi __semop semop semget - semget i:iii __semget semget -semctl - semctl i:iiii __semctl semctl diff --git a/sysdeps/unix/sysv/linux/semctl.c b/sysdeps/unix/sysv/linux/semctl.c index ee84a1e316..dde224105b 100644 --- a/sysdeps/unix/sysv/linux/semctl.c +++ b/sysdeps/unix/sysv/linux/semctl.c @@ -16,29 +16,12 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#include <errno.h> -#include <stdarg.h> #include <sys/sem.h> +#include <stdarg.h> #include <ipc_priv.h> - #include <sysdep.h> -#include <string.h> -#include <sys/syscall.h> #include <shlib-compat.h> - -#include <kernel-features.h> - -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 */ -}; +#include <errno.h> /* Define a `union semun' suitable for Linux here. */ union semun @@ -47,26 +30,19 @@ union semun 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 */ - struct __old_semid_ds *__old_buf; }; -/* Return identifier for array of NSEMS semaphores associated with - KEY. */ -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2) -int __old_semctl (int semid, int semnum, int cmd, ...); +#ifndef DEFAULT_VERSION +# define DEFAULT_VERSION GLIBC_2_2 #endif -int __new_semctl (int semid, int semnum, int cmd, ...); -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2) int -attribute_compat_text_section -__old_semctl (int semid, int semnum, int cmd, ...) +__new_semctl (int semid, int semnum, int cmd, ...) { - union semun arg; + union semun arg = { 0 }; va_list ap; /* Get the argument only if required. */ - arg.buf = NULL; switch (cmd) { case SETVAL: /* arg.val */ @@ -83,20 +59,29 @@ __old_semctl (int semid, int semnum, int cmd, ...) break; } - return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd, - &arg); -} -compat_symbol (libc, __old_semctl, semctl, GLIBC_2_0); +#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS + return INLINE_SYSCALL_CALL (semctl, semid, semnum, cmd | __IPC_64, + arg.array); +#else + return INLINE_SYSCALL_CALL (ipc, IPCOP_semctl, semid, semnum, cmd | __IPC_64, + SEMCTL_ARG_ADDRESS (arg)); #endif +} +versioned_symbol (libc, __new_semctl, semctl, DEFAULT_VERSION); + +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2) +/* Since semctl use a variadic argument for semid_ds there is not need to + define and tie the compatibility symbol to the old 'union semun' + definition. */ int -__new_semctl (int semid, int semnum, int cmd, ...) +attribute_compat_text_section +__old_semctl (int semid, int semnum, int cmd, ...) { - union semun arg; + union semun arg = { 0 }; va_list ap; /* Get the argument only if required. */ - arg.buf = NULL; switch (cmd) { case SETVAL: /* arg.val */ @@ -113,8 +98,12 @@ __new_semctl (int semid, int semnum, int cmd, ...) break; } - return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd | __IPC_64, - &arg); +# ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS + return INLINE_SYSCALL_CALL (semctl, semid, semnum, cmd, arg.array); +# else + return INLINE_SYSCALL_CALL (ipc, IPCOP_semctl, semid, semnum, cmd, + SEMCTL_ARG_ADDRESS (arg)); +# endif } - -versioned_symbol (libc, __new_semctl, semctl, GLIBC_2_2); +compat_symbol (libc, __old_semctl, semctl, GLIBC_2_0); +#endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/semctl.c b/sysdeps/unix/sysv/linux/sparc/sparc64/semctl.c deleted file mode 100644 index a9ae4c6076..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/semctl.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1995-2016 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <stdarg.h> -#include <sys/sem.h> -#include <ipc_priv.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.array); -} diff --git a/sysdeps/unix/sysv/linux/x86_64/syscalls.list b/sysdeps/unix/sysv/linux/x86_64/syscalls.list index 75b25a1b33..f3a15416a4 100644 --- a/sysdeps/unix/sysv/linux/x86_64/syscalls.list +++ b/sysdeps/unix/sysv/linux/x86_64/syscalls.list @@ -13,7 +13,6 @@ shmget - shmget i:iii __shmget shmget semop - semop i:ipi __semop semop semtimedop - semtimedop i:ipip semtimedop semget - semget i:iii __semget semget -semctl - semctl i:iiii __semctl semctl syscall_clock_gettime EXTRA clock_gettime Ei:ip __syscall_clock_gettime |