|
From: <sv...@va...> - 2009-06-10 22:59:23
|
Author: njn
Date: 2009-06-10 23:58:27 +0100 (Wed, 10 Jun 2009)
New Revision: 10295
Log:
Added a wrapper and test for exchangedata() on Darwin. Fixes bug 195860.
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-10 19:24:20 UTC (rev 10294)
+++ trunk/coregrind/m_syswrap/priv_syswrap-darwin.h 2009-06-10 22:58:27 UTC (rev 10295)
@@ -278,7 +278,7 @@
DECL_TEMPLATE(darwin, getattrlist); // 220
DECL_TEMPLATE(darwin, setattrlist); // 221
DECL_TEMPLATE(darwin, getdirentriesattr); // 222
-// NYI exchangedata 223
+DECL_TEMPLATE(darwin, exchangedata); // 223
// 224 checkuseraccess
// NYI searchfs 225
// GEN delete 226
Modified: trunk/coregrind/m_syswrap/syswrap-darwin.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-darwin.c 2009-06-10 19:24:20 UTC (rev 10294)
+++ trunk/coregrind/m_syswrap/syswrap-darwin.c 2009-06-10 22:58:27 UTC (rev 10295)
@@ -2002,8 +2002,8 @@
PRE(getfsstat)
{
PRINT("getfsstat(%#lx, %ld, %ld)", ARG1, ARG2, ARG3);
- PRE_REG_READ3(int, "getfsstat", struct vki_statfs *, buf,
- int, bufsize, int, flags);
+ PRE_REG_READ3(int, "getfsstat",
+ struct vki_statfs *, buf, int, bufsize, int, flags);
if (ARG1) {
// ARG2 is a BYTE SIZE
PRE_MEM_WRITE("getfsstat", ARG1, ARG2);
@@ -2225,7 +2225,6 @@
PRE_MEM_WRITE("getdirentriesattr(basep)", ARG6, sizeof(unsigned int));
PRE_MEM_WRITE("getdirentriesattr(newState)", ARG7, sizeof(unsigned int));
}
-
POST(getdirentriesattr)
{
char *p, *end;
@@ -2251,6 +2250,16 @@
}
+PRE(exchangedata)
+{
+ PRINT("exchangedata(%#lx(%s), %#lx(%s), %lu)",
+ ARG1, (char*)ARG1, ARG2, (char*)ARG2, ARG3);
+ PRE_REG_READ3(int, "exchangedata",
+ char *, path1, char *, path2, unsigned long, options);
+ PRE_MEM_RASCIIZ( "exchangedata(path1)", ARG1 );
+ PRE_MEM_RASCIIZ( "exchangedata(path2)", ARG2 );
+}
+
PRE(fsctl)
{
PRINT("fsctl ( %#lx(%s), %ld, %#lx, %ld )",
@@ -7168,7 +7177,7 @@
MACXY(__NR_getattrlist, getattrlist), // 220
MACX_(__NR_setattrlist, setattrlist),
MACXY(__NR_getdirentriesattr, getdirentriesattr),
-// _____(__NR_exchangedata),
+ MACX_(__NR_exchangedata, exchangedata),
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(224)), // checkuseraccess
// _____(__NR_searchfs),
GENX_(__NR_delete, sys_unlink),
Modified: trunk/memcheck/tests/darwin/scalar.c
===================================================================
--- trunk/memcheck/tests/darwin/scalar.c 2009-06-10 19:24:20 UTC (rev 10294)
+++ trunk/memcheck/tests/darwin/scalar.c 2009-06-10 22:58:27 UTC (rev 10295)
@@ -270,7 +270,11 @@
// __NR_getattrlist 220
// __NR_setattrlist 221
// __NR_getdirentriesattr 222
+
// __NR_exchangedata 223
+ GO(__NR_exchangedata, "3s 2m");
+ SY(__NR_exchangedata, x0, x0, x0); FAIL;
+
// /* 224 checkuseraccess */
// __NR_searchfs 225
// __NR_delete 226
Modified: trunk/memcheck/tests/darwin/scalar.stderr.exp
===================================================================
--- trunk/memcheck/tests/darwin/scalar.stderr.exp 2009-06-10 19:24:20 UTC (rev 10294)
+++ trunk/memcheck/tests/darwin/scalar.stderr.exp 2009-06-10 22:58:27 UTC (rev 10295)
@@ -104,6 +104,26 @@
...
Address 0x........ is not stack'd, malloc'd or (recently) free'd
-----------------------------------------------------
+x20000df(223): __NR_exchangedata 3s 2m
+-----------------------------------------------------
+
+Syscall param exchangedata(path1) contains uninitialised byte(s)
+ ...
+
+Syscall param exchangedata(path2) contains uninitialised byte(s)
+ ...
+
+Syscall param exchangedata(options) contains uninitialised byte(s)
+ ...
+
+Syscall param exchangedata(path1) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param exchangedata(path2) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+-----------------------------------------------------
x2000107(263): __NR_shmctl 3s 1m
-----------------------------------------------------
|