mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 20:40:05 +00:00
Consolidate Linux semtimedop implementation
This patch consolidates the semtimedop Linux implementation in only one default file, sysdeps/unix/sysv/linux/semtimedop.c. If tries to use the direct syscall if it is supported, otherwise will use the old ipc multiplex mechanism. Checked on x86_64, i686, powerpc64le, aarch64, and armhf. * sysdeps/unix/sysv/linux/alpha/syscalls.list (semtimedop): Remove. * sysdeps/unix/sysv/linux/arm/syscalls.list (semtimedop): Likewise. * sysdeps/unix/sysv/linux/generic/syscalls.list (semtimedop): Likewise. * sysdeps/unix/sysv/linux/hppa/syscalls.list (semtimedop): Likewise. * sysdeps/unix/sysv/linux/ia64/syscalls.list (semtimedop): Likewise. * sysdeps/unix/sysv/linux/microblaze/syscalls.list (semtimedop): Likewise. * sysdeps/unix/sysv/linux/mips/mips64/syscalls.list (semtimedop): Likewise. * sysdeps/unix/sysv/linux/x86_64/syscalls.list (semtimedop): Likewise. * sysdeps/unix/sysv/linux/m68k/semtimedop.S: Remove file. * sysdeps/unix/sysv/linux/s390/semtimedop.c: Reorganize headers and add a comment about s390 syscall difference from default one. * sysdeps/unix/sysv/linux/semtimedop.c (semtimedop): Use semtimedop syscall if it is defined.
This commit is contained in:
parent
0f97184020
commit
38cee35b0c
17
ChangeLog
17
ChangeLog
@ -1,5 +1,22 @@
|
||||
2016-12-28 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
|
||||
* sysdeps/unix/sysv/linux/alpha/syscalls.list (semtimedop): Remove.
|
||||
* sysdeps/unix/sysv/linux/arm/syscalls.list (semtimedop): Likewise.
|
||||
* sysdeps/unix/sysv/linux/generic/syscalls.list (semtimedop):
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/hppa/syscalls.list (semtimedop): Likewise.
|
||||
* sysdeps/unix/sysv/linux/ia64/syscalls.list (semtimedop): Likewise.
|
||||
* sysdeps/unix/sysv/linux/microblaze/syscalls.list (semtimedop):
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/mips64/syscalls.list (semtimedop):
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/syscalls.list (semtimedop): Likewise.
|
||||
* sysdeps/unix/sysv/linux/m68k/semtimedop.S: Remove file.
|
||||
* sysdeps/unix/sysv/linux/s390/semtimedop.c: Reorganize headers and
|
||||
add a comment about s390 syscall difference from default one.
|
||||
* sysdeps/unix/sysv/linux/semtimedop.c (semtimedop): Use semtimedop
|
||||
syscall if it is defined.
|
||||
|
||||
* sysdeps/unix/sysv/linux/alpha/syscalls.list (semop): Remove.
|
||||
* sysdeps/unix/sysv/linux/arm/syscalls.list (semop): Likewise.
|
||||
* sysdeps/unix/sysv/linux/generic/syscalls.list (semop): Likewise.
|
||||
|
@ -4,7 +4,6 @@ shmat - osf_shmat i:ipi __shmat shmat
|
||||
oldshmctl EXTRA shmctl i:iip __old_shmctl shmctl@GLIBC_2.0
|
||||
shmdt - shmdt i:s __shmdt shmdt
|
||||
shmget - shmget i:iii __shmget shmget
|
||||
semtimedop - semtimedop i:ipip semtimedop
|
||||
|
||||
sigstack - sigstack 2 sigstack
|
||||
|
||||
|
@ -26,7 +26,6 @@ personality EXTRA personality Ei:i __personality personality
|
||||
shmat - shmat i:ipi __shmat shmat
|
||||
shmdt - shmdt i:s __shmdt shmdt
|
||||
shmget - shmget i:iii __shmget shmget
|
||||
semtimedop - semtimedop i:ipip semtimedop
|
||||
|
||||
# proper socket implementations:
|
||||
accept - accept Ci:iBN __libc_accept __accept accept
|
||||
|
@ -1,7 +1,6 @@
|
||||
# File name Caller Syscall name # args Strong name Weak names
|
||||
|
||||
# SysV APIs
|
||||
semtimedop - semtimedop i:ipip semtimedop
|
||||
shmget - shmget i:iii __shmget shmget
|
||||
shmctl - shmctl i:iip __shmctl shmctl
|
||||
shmat - shmat i:ipi __shmat shmat
|
||||
|
@ -5,7 +5,6 @@ shmat - shmat i:ipi __shmat shmat
|
||||
shmctl - shmctl i:iip __shmctl shmctl
|
||||
shmdt - shmdt i:s __shmdt shmdt
|
||||
shmget - shmget i:iii __shmget shmget
|
||||
semtimedop - semtimedop i:ipip semtimedop
|
||||
|
||||
# proper socket implementations:
|
||||
accept - accept Ci:iBN __libc_accept __accept accept
|
||||
|
@ -9,7 +9,6 @@ shmat - shmat i:ipi __shmat shmat
|
||||
shmctl - shmctl i:iip __shmctl shmctl
|
||||
shmdt - shmdt i:s __shmdt shmdt
|
||||
shmget - shmget i:iii __shmget shmget
|
||||
semtimedop - semtimedop i:ipip semtimedop
|
||||
|
||||
# proper socket implementations:
|
||||
accept - accept Ci:iBN __libc_accept __accept accept
|
||||
|
@ -1,69 +0,0 @@
|
||||
/* Copyright (C) 2003-2016 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Schwab <schwab@suse.de>, 2003.
|
||||
|
||||
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 <sysdep.h>
|
||||
|
||||
#define SYSOP_semtimedop 4
|
||||
|
||||
#define SVRSP 8 /* saved register space */
|
||||
#define PARMS 4+SVRSP /* space for 3 saved regs */
|
||||
#define SEMID PARMS
|
||||
#define SOPS SEMID+4
|
||||
#define NSOPS SOPS+4
|
||||
#define TIMEOUT NSOPS+4
|
||||
|
||||
.text
|
||||
ENTRY (semtimedop)
|
||||
|
||||
/* Save registers. */
|
||||
move.l %d2, %a1
|
||||
move.l %d3, -(%sp)
|
||||
cfi_adjust_cfa_offset (4)
|
||||
move.l %d5, -(%sp)
|
||||
cfi_adjust_cfa_offset (4)
|
||||
cfi_register (%d2, %a1)
|
||||
cfi_rel_offset (%d3, 0)
|
||||
cfi_rel_offset (%d5, 4)
|
||||
|
||||
move.l #SYSOP_semtimedop, %d1
|
||||
move.l SEMID(%sp), %d2
|
||||
move.l NSOPS(%sp), %d3
|
||||
move.l SOPS(%sp), %d5
|
||||
move.l TIMEOUT(%sp), %a0
|
||||
move.l #SYS_ify (ipc), %d0
|
||||
|
||||
trap #0
|
||||
|
||||
/* Restore registers. */
|
||||
move.l (%sp)+, %d5
|
||||
cfi_adjust_cfa_offset (-4)
|
||||
cfi_restore (%d5)
|
||||
move.l (%sp)+, %d3
|
||||
cfi_adjust_cfa_offset (-4)
|
||||
cfi_restore (%d3)
|
||||
move.l %a1, %d2
|
||||
cfi_restore (%d2)
|
||||
|
||||
/* Check for error. */
|
||||
tst.l %d0
|
||||
jmi SYSCALL_ERROR_LABEL
|
||||
|
||||
/* Successful; return the syscall's value. */
|
||||
ret
|
||||
|
||||
PSEUDO_END (semtimedop)
|
@ -11,4 +11,3 @@ personality EXTRA personality Ei:i __personality personality
|
||||
shmat - shmat i:ipi __shmat shmat
|
||||
shmdt - shmdt i:s __shmdt shmdt
|
||||
shmget - shmget i:iii __shmget shmget
|
||||
semtimedop - semtimedop i:ipip semtimedop
|
||||
|
@ -5,4 +5,3 @@
|
||||
shmat - shmat i:ipi __shmat shmat
|
||||
shmdt - shmdt i:s __shmdt shmdt
|
||||
shmget - shmget i:iii __shmget shmget
|
||||
semtimedop - semtimedop i:ipip semtimedop
|
||||
|
@ -16,12 +16,10 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/sem.h>
|
||||
#include <ipc_priv.h>
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <errno.h>
|
||||
|
||||
/* Perform user-defined atomical operation of array of semaphores. */
|
||||
|
||||
@ -29,6 +27,10 @@ int
|
||||
semtimedop (int semid, struct sembuf *sops, size_t nsops,
|
||||
const struct timespec *timeout)
|
||||
{
|
||||
return INLINE_SYSCALL (ipc, 5, IPCOP_semtimedop,
|
||||
semid, (int) nsops, timeout, sops);
|
||||
/* The s390 sys_ipc variant has only five parameters instead of six
|
||||
(as for default variant) and the only difference is the handling of
|
||||
SEMTIMEDOP where on s390 the third parameter is used as a pointer
|
||||
to a struct timespec where the generic variant uses fifth parameter. */
|
||||
return INLINE_SYSCALL_CALL (ipc, IPCOP_semtimedop, semid, nsops, timeout,
|
||||
sops);
|
||||
}
|
||||
|
@ -16,12 +16,10 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/sem.h>
|
||||
#include <ipc_priv.h>
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <errno.h>
|
||||
|
||||
/* Perform user-defined atomical operation of array of semaphores. */
|
||||
|
||||
@ -29,7 +27,10 @@ int
|
||||
semtimedop (int semid, struct sembuf *sops, size_t nsops,
|
||||
const struct timespec *timeout)
|
||||
{
|
||||
return INLINE_SYSCALL (ipc, 6, IPCOP_semtimedop,
|
||||
semid, (int) nsops, 0, sops,
|
||||
timeout);
|
||||
#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
||||
return INLINE_SYSCALL_CALL (semtimedop, semid, sops, nsops, timeout);
|
||||
#else
|
||||
return INLINE_SYSCALL_CALL (ipc, IPCOP_semtimedop, semid, nsops, 0, sops,
|
||||
timeout);
|
||||
#endif
|
||||
}
|
||||
|
@ -10,7 +10,6 @@ shmat - shmat i:ipi __shmat shmat
|
||||
shmctl - shmctl i:iip __shmctl shmctl
|
||||
shmdt - shmdt i:s __shmdt shmdt
|
||||
shmget - shmget i:iii __shmget shmget
|
||||
semtimedop - semtimedop i:ipip semtimedop
|
||||
syscall_clock_gettime EXTRA clock_gettime Ei:ip __syscall_clock_gettime
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user