mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 18:13:01 +00:00
Add support for the semtimedop system call.
Based on patch from Peter Knaggs <sedragdnuon@yahoo.com>. CCMAIL: 79714-done@bugs.kde.org git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2410
This commit is contained in:
parent
73500af01e
commit
05369f9e57
@ -2583,6 +2583,13 @@ PRE(ipc)
|
||||
case 2: /* IPCOP_semget */
|
||||
case 3: /* IPCOP_semctl */
|
||||
break;
|
||||
case 4: /* IPCOP_semtimedop */
|
||||
SYSCALL_TRACK( pre_mem_read, tid, "semtimedop(sops)", arg5,
|
||||
arg3 * sizeof(struct sembuf) );
|
||||
if (arg6 != (UInt)NULL)
|
||||
SYSCALL_TRACK( pre_mem_read, tid, "semtimedop(timeout)", arg5,
|
||||
sizeof(struct timespec) );
|
||||
break;
|
||||
case 11: /* IPCOP_msgsnd */
|
||||
{
|
||||
struct msgbuf *msgp = (struct msgbuf *)arg5;
|
||||
@ -2710,9 +2717,9 @@ POST(ipc)
|
||||
{
|
||||
switch (arg1 /* call */) {
|
||||
case 1: /* IPCOP_semop */
|
||||
break;
|
||||
case 2: /* IPCOP_semget */
|
||||
case 3: /* IPCOP_semctl */
|
||||
case 4: /* IPCOP_semtimedop */
|
||||
break;
|
||||
case 11: /* IPCOP_msgsnd */
|
||||
break;
|
||||
|
||||
@ -45,6 +45,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \
|
||||
resolv.stderr.exp resolv.stdout.exp resolv.vgtest \
|
||||
seg_override.stderr.exp \
|
||||
seg_override.stdout.exp seg_override.vgtest \
|
||||
sem.stderr.exp sem.stdout.exp sem.vgtest \
|
||||
semlimit.stderr.exp semlimit.stdout.exp semlimit.vgtest \
|
||||
susphello.stdout.exp susphello.stderr.exp susphello.vgtest \
|
||||
sha1_test.stderr.exp sha1_test.vgtest \
|
||||
@ -62,7 +63,7 @@ check_PROGRAMS = \
|
||||
cpuid dastest discard exec-sigmask floored fork fpu_lazy_eflags \
|
||||
fucomip $(INSN_TESTS) \
|
||||
int munmap_exe map_unmap mremap rcl_assert \
|
||||
rcrl readline1 resolv seg_override semlimit sha1_test \
|
||||
rcrl readline1 resolv seg_override sem semlimit sha1_test \
|
||||
shortpush shorts smc1 susphello pth_blockedsig pushpopseg \
|
||||
syscall-restart1 syscall-restart2 system \
|
||||
coolo_sigaction gxx304 yield
|
||||
@ -111,6 +112,7 @@ rcrl_SOURCES = rcrl.c
|
||||
readline1_SOURCES = readline1.c
|
||||
resolv_SOURCES = resolv.c
|
||||
seg_override_SOURCES = seg_override.c
|
||||
sem_SOURCES = sem.c
|
||||
semlimit_SOURCES = semlimit.c
|
||||
semlimit_LDADD = -lpthread
|
||||
smc1_SOURCES = smc1.c
|
||||
|
||||
78
none/tests/sem.c
Normal file
78
none/tests/sem.c
Normal file
@ -0,0 +1,78 @@
|
||||
#define _GNU_SOURCE
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/sem.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int semid;
|
||||
struct sembuf sop;
|
||||
struct timespec ts;
|
||||
|
||||
if ((semid = semget(IPC_PRIVATE, 1, 0600)) < 0)
|
||||
{
|
||||
perror("semget");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
sop.sem_num = 0;
|
||||
sop.sem_op = 1;
|
||||
sop.sem_flg = 0;
|
||||
|
||||
if (semop(semid, &sop, 1) < 0)
|
||||
{
|
||||
perror("semop");
|
||||
semctl(semid, 0, IPC_RMID);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
sop.sem_num = 0;
|
||||
sop.sem_op = 0;
|
||||
sop.sem_flg = 0;
|
||||
|
||||
ts.tv_sec = 0;
|
||||
ts.tv_nsec = 1000;
|
||||
|
||||
if (semtimedop(semid, &sop, 1, &ts) < 0 && errno != EAGAIN)
|
||||
{
|
||||
perror("semtimedop");
|
||||
semctl(semid, 0, IPC_RMID);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
sop.sem_num = 0;
|
||||
sop.sem_op = -1;
|
||||
sop.sem_flg = 0;
|
||||
|
||||
if (semop(semid, &sop, 1) < 0)
|
||||
{
|
||||
perror("semop");
|
||||
semctl(semid, 0, IPC_RMID);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
sop.sem_num = 0;
|
||||
sop.sem_op = 0;
|
||||
sop.sem_flg = 0;
|
||||
|
||||
ts.tv_sec = 0;
|
||||
ts.tv_nsec = 1000;
|
||||
|
||||
if (semtimedop(semid, &sop, 1, &ts) < 0)
|
||||
{
|
||||
perror("semtimedop");
|
||||
semctl(semid, 0, IPC_RMID);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (semctl(semid, 0, IPC_RMID) < 0)
|
||||
{
|
||||
perror("semctl(IPC_RMID)");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
exit(0);
|
||||
}
|
||||
2
none/tests/sem.stderr.exp
Normal file
2
none/tests/sem.stderr.exp
Normal file
@ -0,0 +1,2 @@
|
||||
|
||||
|
||||
0
none/tests/sem.stdout.exp
Normal file
0
none/tests/sem.stdout.exp
Normal file
1
none/tests/sem.vgtest
Normal file
1
none/tests/sem.vgtest
Normal file
@ -0,0 +1 @@
|
||||
prog: sem
|
||||
Loading…
x
Reference in New Issue
Block a user