|
From: <sv...@va...> - 2012-08-03 07:47:09
|
sewardj 2012-08-03 08:47:01 +0100 (Fri, 03 Aug 2012)
New Revision: 12819
Log:
Add support for sys_shm_unlink on Darwin. Fixes #288298.
Modified files:
trunk/coregrind/m_syswrap/priv_syswrap-darwin.h
trunk/coregrind/m_syswrap/syswrap-darwin.c
Modified: trunk/coregrind/m_syswrap/syswrap-darwin.c (+16 -1)
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-darwin.c 2012-08-03 04:21:42 +01:00 (rev 12818)
+++ trunk/coregrind/m_syswrap/syswrap-darwin.c 2012-08-03 08:47:01 +01:00 (rev 12819)
@@ -1941,6 +1941,21 @@
}
}
+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 @@
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),
Modified: trunk/coregrind/m_syswrap/priv_syswrap-darwin.h (+1 -1)
===================================================================
--- trunk/coregrind/m_syswrap/priv_syswrap-darwin.h 2012-08-03 04:21:42 +01:00 (rev 12818)
+++ trunk/coregrind/m_syswrap/priv_syswrap-darwin.h 2012-08-03 08:47:01 +01:00 (rev 12819)
@@ -324,7 +324,7 @@
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
|