From: Julian Seward Date: Fri, 3 Aug 2012 07:47:01 +0000 (+0000) Subject: Add support for sys_shm_unlink on Darwin. Fixes #288298. X-Git-Tag: svn/VALGRIND_3_8_0~49 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e9cda68ea7ca3e5bd2638d4532f2bdb266828581;p=thirdparty%2Fvalgrind.git Add support for sys_shm_unlink on Darwin. Fixes #288298. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12819 --- diff --git a/coregrind/m_syswrap/priv_syswrap-darwin.h b/coregrind/m_syswrap/priv_syswrap-darwin.h index 41e9e178fe..e81d1addd6 100644 --- a/coregrind/m_syswrap/priv_syswrap-darwin.h +++ b/coregrind/m_syswrap/priv_syswrap-darwin.h @@ -324,7 +324,7 @@ DECL_TEMPLATE(darwin, shmctl); // 263 DECL_TEMPLATE(darwin, shmdt); // 264 DECL_TEMPLATE(darwin, shmget); // 265 DECL_TEMPLATE(darwin, shm_open); // 266 -// NYI shm_unlink 267 +DECL_TEMPLATE(darwin, shm_unlink); // 267 DECL_TEMPLATE(darwin, sem_open); // 268 DECL_TEMPLATE(darwin, sem_close); // 269 DECL_TEMPLATE(darwin, sem_unlink); // 270 diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index 77e0bb1f92..a85d4eb3ad 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -1941,6 +1941,21 @@ POST(shm_open) } } +PRE(shm_unlink) +{ + *flags |= SfMayBlock; + PRINT("shm_unlink ( %#lx(%s) )", ARG1,(char*)ARG1); + PRE_REG_READ1(long, "shm_unlink", const char *, pathname); + PRE_MEM_RASCIIZ( "shm_unlink(pathname)", ARG1 ); +} +POST(shm_unlink) +{ + /* My reading of the man page suggests that a call may cause memory + mappings to change: "if no references exist at the time of the + call to shm_unlink(), the resources are reclaimed immediately". + So we need to resync here, sigh. */ + ML_(sync_mappings)("after", "shm_unlink", 0); +} PRE(stat_extended) { @@ -8189,7 +8204,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { MACXY(__NR_shmdt, shmdt), MACX_(__NR_shmget, shmget), MACXY(__NR_shm_open, shm_open), -// _____(__NR_shm_unlink), + MACXY(__NR_shm_unlink, shm_unlink), MACX_(__NR_sem_open, sem_open), MACX_(__NR_sem_close, sem_close), MACX_(__NR_sem_unlink, sem_unlink),