|
From: <sv...@va...> - 2009-06-09 23:44:47
|
Author: njn
Date: 2009-06-10 00:44:42 +0100 (Wed, 10 Jun 2009)
New Revision: 10287
Log:
Handle shmctl on Darwin. From bug 191271.
Modified:
trunk/coregrind/m_syswrap/priv_syswrap-darwin.h
trunk/coregrind/m_syswrap/syswrap-darwin.c
trunk/memcheck/tests/darwin/scalar.c
trunk/memcheck/tests/darwin/scalar.stderr.exp
Modified: trunk/coregrind/m_syswrap/priv_syswrap-darwin.h
===================================================================
--- trunk/coregrind/m_syswrap/priv_syswrap-darwin.h 2009-06-09 23:03:02 UTC (rev 10286)
+++ trunk/coregrind/m_syswrap/priv_syswrap-darwin.h 2009-06-09 23:44:42 UTC (rev 10287)
@@ -81,6 +81,7 @@
DECL_TEMPLATE(darwin, sys_setegid);
DECL_TEMPLATE(darwin, sys_listxattr);
DECL_TEMPLATE(darwin, sys_flistxattr);
+DECL_TEMPLATE(darwin, sys_shmctl);
DECL_TEMPLATE(darwin, sys_shmget);
DECL_TEMPLATE(darwin, sys_shm_open);
DECL_TEMPLATE(darwin, sys_statx);
Modified: trunk/coregrind/m_syswrap/syswrap-darwin.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-darwin.c 2009-06-09 23:03:02 UTC (rev 10286)
+++ trunk/coregrind/m_syswrap/syswrap-darwin.c 2009-06-09 23:44:42 UTC (rev 10287)
@@ -1858,6 +1858,19 @@
PRE_REG_READ3(long, "shmget", vki_key_t, key, vki_size_t, size, int, shmflg);
}
+PRE(sys_shmctl)
+{
+ PRINT("sys_shmctl ( %ld, %ld, %#lx )",ARG1,ARG2,ARG3);
+ PRE_REG_READ3(long, "shmctl",
+ int, shmid, int, cmd, struct vki_shmid_ds *, buf);
+ ML_(generic_PRE_sys_shmctl)(tid, ARG1,ARG2,ARG3);
+}
+
+POST(sys_shmctl)
+{
+ ML_(generic_POST_sys_shmctl)(tid, RES,ARG1,ARG2,ARG3);
+}
+
PRE(sys_shm_open)
{
PRINT("shm_open(%#lx(%s), %ld, %ld)", ARG1, (char *)ARG1, ARG2, ARG3);
@@ -7226,7 +7239,7 @@
// _____(__NR_msgsnd), // 260
// _____(__NR_msgrcv),
// _____(__NR_shmat),
-// _____(__NR_shmctl),
+ MACXY(__NR_shmctl, sys_shmctl),
// _____(__NR_shmdt),
MACX_(__NR_shmget, sys_shmget),
MACXY(__NR_shm_open, sys_shm_open),
Modified: trunk/memcheck/tests/darwin/scalar.c
===================================================================
--- trunk/memcheck/tests/darwin/scalar.c 2009-06-09 23:03:02 UTC (rev 10286)
+++ trunk/memcheck/tests/darwin/scalar.c 2009-06-09 23:44:42 UTC (rev 10287)
@@ -3,6 +3,7 @@
#include <unistd.h>
#include <sched.h>
#include <signal.h>
+#include <sys/shm.h>
// See memcheck/tests/x86-linux/scalar.c for an explanation of what this test
// is doing.
@@ -309,7 +310,11 @@
// __NR_msgsnd 260
// __NR_msgrcv 261
// __NR_shmat 262
+
// __NR_shmctl 263
+ GO(__NR_shmctl, "3s 1m");
+ SY(__NR_shmctl, x0, x0+IPC_STAT, x0+1); FAIL;
+
// __NR_shmdt 264
// __NR_shmget 265
Modified: trunk/memcheck/tests/darwin/scalar.stderr.exp
===================================================================
--- trunk/memcheck/tests/darwin/scalar.stderr.exp 2009-06-09 23:03:02 UTC (rev 10286)
+++ trunk/memcheck/tests/darwin/scalar.stderr.exp 2009-06-09 23:44:42 UTC (rev 10287)
@@ -83,7 +83,7 @@
...
Address 0x........ is 0 bytes after a block of size 4 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: main (scalar.c:13)
+ by 0x........: main (scalar.c:14)
-----------------------------------------------------
x20000a9(169): __NR_csops 4s 1m
-----------------------------------------------------
@@ -104,6 +104,22 @@
...
Address 0x........ is not stack'd, malloc'd or (recently) free'd
-----------------------------------------------------
+x2000107(263): __NR_shmctl 3s 1m
+-----------------------------------------------------
+
+Syscall param shmctl(shmid) contains uninitialised byte(s)
+ ...
+
+Syscall param shmctl(cmd) contains uninitialised byte(s)
+ ...
+
+Syscall param shmctl(buf) contains uninitialised byte(s)
+ ...
+
+Syscall param shmctl(IPC_STAT, buf) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+-----------------------------------------------------
x2000109(265): __NR_shmget 3s 0m
-----------------------------------------------------
|