]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add support for sys_shm_unlink on Darwin. Fixes #288298.
authorJulian Seward <jseward@acm.org>
Fri, 3 Aug 2012 07:47:01 +0000 (07:47 +0000)
committerJulian Seward <jseward@acm.org>
Fri, 3 Aug 2012 07:47:01 +0000 (07:47 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12819

coregrind/m_syswrap/priv_syswrap-darwin.h
coregrind/m_syswrap/syswrap-darwin.c

index 41e9e178feac42c5d90f0739c6dcaade9adf12bf..e81d1addd62e8f7286d8a4cbc479c92a18ecee18 100644 (file)
@@ -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
index 77e0bb1f9274183a589c03959426c33eeac5c9e6..a85d4eb3ad8fdcf48ea0511a5b3dd92af8744eef 100644 (file)
@@ -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),