From: Nicholas Nethercote Date: Wed, 10 Jun 2009 01:23:26 +0000 (+0000) Subject: Add wrappers for sem_wait and sem_trywait on Darwin. Also change the layout X-Git-Tag: svn/VALGRIND_3_5_0~509 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ae530719e681dac5008c47103b5bbf48125ec0e0;p=thirdparty%2Fvalgrind.git Add wrappers for sem_wait and sem_trywait on Darwin. Also change the layout of some Darwin syscall stuff. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10288 --- diff --git a/coregrind/m_syswrap/priv_syswrap-darwin.h b/coregrind/m_syswrap/priv_syswrap-darwin.h index 4f0d5a4002..651f0c8843 100644 --- a/coregrind/m_syswrap/priv_syswrap-darwin.h +++ b/coregrind/m_syswrap/priv_syswrap-darwin.h @@ -57,6 +57,8 @@ DECL_TEMPLATE(darwin, sys_semctl); DECL_TEMPLATE(darwin, sys_sem_open); DECL_TEMPLATE(darwin, sys_sem_close); DECL_TEMPLATE(darwin, sys_sem_unlink); +DECL_TEMPLATE(darwin, sys_sem_wait); +DECL_TEMPLATE(darwin, sys_sem_trywait); DECL_TEMPLATE(darwin, sys_sem_post); DECL_TEMPLATE(darwin, sys_sem_init); DECL_TEMPLATE(darwin, sys_sem_destroy); diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index f1a8a5e4b6..62e0959802 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -1406,6 +1406,13 @@ POST(sys_sem_init) POST_MEM_WRITE(ARG1, sizeof(vki_sem_t)); } +PRE(sys_sem_wait) +{ + PRINT("sem_wait( %#lx )", ARG1); + PRE_REG_READ1(int, "sem_wait", vki_sem_t *, sem); + *flags |= SfMayBlock; +} + PRE(sys_sem_wait_nocancel) { PRINT("sem_wait_nocancel( %#lx )", ARG1); @@ -7247,7 +7254,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { MACX_(__NR_sem_open, sys_sem_open), MACX_(__NR_sem_close, sys_sem_close), MACX_(__NR_sem_unlink, sys_sem_unlink), -// _____(__NR_sem_wait), + MACX_(__NR_sem_wait, sys_sem_wait), MACX_(__NR_sem_trywait, sys_sem_trywait), // _____(__NR_sem_post), MACX_(__NR_sem_post, sys_sem_post), diff --git a/include/vki/vki-scnums-darwin.h b/include/vki/vki-scnums-darwin.h index 4dfd22ae25..5ddb14bf58 100644 --- a/include/vki/vki-scnums-darwin.h +++ b/include/vki/vki-scnums-darwin.h @@ -587,38 +587,38 @@ #define __NR___mac_set_lctx VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(393) #define __NR_setlcid VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(394) #define __NR_getlcid VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(395) -#define __NR_read_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(396) -#define __NR_write_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(397) -#define __NR_open_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(398) -#define __NR_close_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(399) -#define __NR_wait4_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(400) -#define __NR_recvmsg_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(401) -#define __NR_sendmsg_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(402) -#define __NR_recvfrom_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(403) -#define __NR_accept_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(404) -#define __NR_msync_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(405) -#define __NR_fcntl_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(406) -#define __NR_select_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(407) -#define __NR_fsync_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(408) -#define __NR_connect_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(409) -#define __NR_sigsuspend_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(410) -#define __NR_readv_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(411) -#define __NR_writev_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(412) -#define __NR_sendto_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(413) -#define __NR_pread_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(414) -#define __NR_pwrite_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(415) -#define __NR_waitid_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(416) -#define __NR_poll_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(417) -#define __NR_msgsnd_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(418) -#define __NR_msgrcv_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(419) -#define __NR_sem_wait_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(420) -#define __NR_aio_suspend_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(421) -#define __NR___sigwait_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(422) +#define __NR_read_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(396) +#define __NR_write_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(397) +#define __NR_open_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(398) +#define __NR_close_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(399) +#define __NR_wait4_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(400) +#define __NR_recvmsg_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(401) +#define __NR_sendmsg_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(402) +#define __NR_recvfrom_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(403) +#define __NR_accept_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(404) +#define __NR_msync_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(405) +#define __NR_fcntl_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(406) +#define __NR_select_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(407) +#define __NR_fsync_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(408) +#define __NR_connect_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(409) +#define __NR_sigsuspend_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(410) +#define __NR_readv_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(411) +#define __NR_writev_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(412) +#define __NR_sendto_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(413) +#define __NR_pread_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(414) +#define __NR_pwrite_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(415) +#define __NR_waitid_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(416) +#define __NR_poll_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(417) +#define __NR_msgsnd_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(418) +#define __NR_msgrcv_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(419) +#define __NR_sem_wait_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(420) +#define __NR_aio_suspend_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(421) +#define __NR___sigwait_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(422) #define __NR___semwait_signal_nocancel VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(423) -#define __NR___mac_mount VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(424) -#define __NR___mac_get_mount VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(425) -#define __NR___mac_getfsstat VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(426) -#define __NR_MAXSYSCALL VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(427) +#define __NR___mac_mount VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(424) +#define __NR___mac_get_mount VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(425) +#define __NR___mac_getfsstat VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(426) +#define __NR_MAXSYSCALL VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(427) #define __NR_DARWIN_FAKE_SIGRETURN (1 + __NR_MAXSYSCALL) diff --git a/memcheck/tests/darwin/scalar.c b/memcheck/tests/darwin/scalar.c index c185b320ca..6b8c1c5ecd 100644 --- a/memcheck/tests/darwin/scalar.c +++ b/memcheck/tests/darwin/scalar.c @@ -341,7 +341,12 @@ int main(void) SY(__NR_sem_unlink, x0); FAIL; // __NR_sem_wait 271 + GO(__NR_sem_wait, "1s 0m"); + SY(__NR_sem_wait, x0); FAIL; + // __NR_sem_trywait 272 + GO(__NR_sem_trywait, "1s 0m"); + SY(__NR_sem_trywait, x0); FAIL; // __NR_sem_post 273 GO(__NR_sem_post, "1s 0m");