PERFORCE change 152442 for review
Peter Wemm
peter at FreeBSD.org
Mon Nov 3 19:34:17 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=152442
Change 152442 by peter at peter_overcee on 2008/11/04 03:33:58
Flesh out more umtx_op()'s
Affected files ...
.. //depot/projects/valgrind/coregrind/m_syswrap/syswrap-freebsd.c#22 edit
Differences ...
==== //depot/projects/valgrind/coregrind/m_syswrap/syswrap-freebsd.c#22 (text+ko) ====
@@ -1791,8 +1791,8 @@
PRINT( "sys__umtx_op ( %#lx, UNLOCK, %ld)", ARG1, ARG3);
PRE_REG_READ3(long, "_umtx_op_unlock",
struct umtx *, obj, int, op, unsigned long, id);
- PRE_MEM_READ( "_umtx_op_lock(mtx)", ARG1, sizeof(struct vki_umtx) );
- PRE_MEM_WRITE( "_umtx_op_lock(mtx)", ARG1, sizeof(struct vki_umtx) );
+ PRE_MEM_READ( "_umtx_op_unlock(mtx)", ARG1, sizeof(struct vki_umtx) );
+ PRE_MEM_WRITE( "_umtx_op_unlock(mtx)", ARG1, sizeof(struct vki_umtx) );
break;
case VKI_UMTX_OP_WAIT:
PRINT( "sys__umtx_op ( %#lx, WAIT, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
@@ -1811,24 +1811,66 @@
break;
case VKI_UMTX_OP_MUTEX_TRYLOCK:
PRINT( "sys__umtx_op ( %#lx, MUTEX_TRYLOCK, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRE_REG_READ5(long, "_umtx_op_mutex_trylock",
+ struct umutex *, obj, int, op, unsigned long, noid,
+ void *, zero, struct vki_timespec *, timeout);
+ PRE_MEM_READ( "_umtx_op_mutex_trylock(mutex)", ARG1, sizeof(struct vki_umutex) );
+ if (ARG5)
+ PRE_MEM_READ( "_umtx_op_mutex_trylock(timespec)", ARG5, sizeof(struct vki_timespec) );
+ PRE_MEM_WRITE( "_umtx_op_mutex_trylock(mutex)", ARG1, sizeof(struct vki_umutex) );
break;
case VKI_UMTX_OP_MUTEX_LOCK:
PRINT( "sys__umtx_op ( %#lx, MUTEX_LOCK, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRE_REG_READ5(long, "_umtx_op_mutex_lock",
+ struct umutex *, obj, int, op, unsigned long, noid,
+ void *, zero, struct vki_timespec *, timeout);
+ PRE_MEM_READ( "_umtx_op_mutex_lock(mutex)", ARG1, sizeof(struct vki_umutex) );
+ if (ARG5)
+ PRE_MEM_READ( "_umtx_op_mutex_lock(timespec)", ARG5, sizeof(struct vki_timespec) );
+ PRE_MEM_WRITE( "_umtx_op_mutex_lock(mutex)", ARG1, sizeof(struct vki_umutex) );
break;
case VKI_UMTX_OP_MUTEX_UNLOCK:
- PRINT( "sys__umtx_op ( %#lx, MUTEX_UNLOCK, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRINT( "sys__umtx_op ( %#lx, MUTEX_UNLOCK)", ARG1);
+ PRE_REG_READ2(long, "_umtx_op_mutex_unlock",
+ struct umutex *, obj, int, op);
+ PRE_MEM_READ( "_umtx_op_mutex_unlock(mutex)", ARG1, sizeof(struct vki_umutex) );
+ PRE_MEM_WRITE( "_umtx_op_mutex_unlock(mutex)", ARG1, sizeof(struct vki_umutex) );
break;
case VKI_UMTX_OP_SET_CEILING:
- PRINT( "sys__umtx_op ( %#lx, SET_CEILING, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRINT( "sys__umtx_op ( %#lx, SET_CEILING, %ld, %#lx)", ARG1, ARG3, ARG4);
+ PRE_REG_READ4(long, "_umtx_op_set_ceiling",
+ struct umutex *, obj, int, op, unsigned int, ceiling,
+ unsigned int *, old_ceiling);
+ PRE_MEM_READ( "_umtx_op_set_ceiling(mutex)", ARG1, sizeof(struct vki_umutex) );
+ PRE_MEM_WRITE( "_umtx_op_set_ceiling(mutex)", ARG1, sizeof(struct vki_umutex) );
+ if (ARG4)
+ PRE_MEM_WRITE( "_umtx_op_set_ceiling(old_ceiling)", ARG4, sizeof(vki_uint32_t) );
break;
case VKI_UMTX_OP_CV_WAIT:
PRINT( "sys__umtx_op ( %#lx, CV_WAIT, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRE_REG_READ5(long, "_umtx_op_cv_wait",
+ struct ucond *, obj, int, op, unsigned long, wflags,
+ struct umutex *, umtx, struct vki_timespec *, timeout);
+ PRE_MEM_READ( "_umtx_op_cv_wait(cond)", ARG1, sizeof(struct vki_ucond) );
+ PRE_MEM_WRITE( "_umtx_op_cv_wait(cond)", ARG1, sizeof(struct vki_ucond) );
+ PRE_MEM_READ( "_umtx_op_cv_wait(mutex)", ARG4, sizeof(struct vki_umutex) );
+ PRE_MEM_WRITE( "_umtx_op_cv_wait(mutex)", ARG4, sizeof(struct vki_umutex) );
+ if (ARG5)
+ PRE_MEM_READ( "_umtx_op_cv_wait(timespec)", ARG5, sizeof(struct vki_timespec) );
break;
case VKI_UMTX_OP_CV_SIGNAL:
- PRINT( "sys__umtx_op ( %#lx, CV_SIGNAL, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRINT( "sys__umtx_op ( %#lx, CV_SIGNAL)", ARG1);
+ PRE_REG_READ2(long, "_umtx_op_cv_signal",
+ struct ucond *, obj, int, op);
+ PRE_MEM_READ( "_umtx_op_cv_signal(cond)", ARG1, sizeof(struct vki_ucond) );
+ PRE_MEM_WRITE( "_umtx_op_cv_signal(cond)", ARG1, sizeof(struct vki_ucond) );
break;
case VKI_UMTX_OP_CV_BROADCAST:
PRINT( "sys__umtx_op ( %#lx, CV_BROADCAST, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRE_REG_READ2(long, "_umtx_op_cv_broadcast",
+ struct ucond *, obj, int, op);
+ PRE_MEM_READ( "_umtx_op_cv_broadcast(cond)", ARG1, sizeof(struct vki_ucond) );
+ PRE_MEM_WRITE( "_umtx_op_cv_broadcast(cond)", ARG1, sizeof(struct vki_ucond) );
break;
case VKI_UMTX_OP_WAIT_UINT:
PRINT( "sys__umtx_op ( %#lx, CV_WAIT_UINT, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
@@ -1840,13 +1882,27 @@
PRE_MEM_READ( "_umtx_op_wait(timespec)", ARG5, sizeof(struct vki_timespec) );
break;
case VKI_UMTX_OP_RW_RDLOCK:
- PRINT( "sys__umtx_op ( %#lx, CV_RW_RDLOCK, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRINT( "sys__umtx_op ( %#lx, RW_RDLOCK, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRE_REG_READ5(long, "_umtx_op_rw_rdlock",
+ struct urwlock *, obj, int, op, unsigned long, noid,
+ void *, zero, struct vki_timespec *, timeout);
+ PRE_MEM_READ( "_umtx_op_rw_rdlock(rw)", ARG1, sizeof(struct vki_urwlock) );
+ PRE_MEM_WRITE( "_umtx_op_rw_rdlock(rw)", ARG1, sizeof(struct vki_urwlock) );
break;
case VKI_UMTX_OP_RW_WRLOCK:
- PRINT( "sys__umtx_op ( %#lx, CV_RW_WRLOCK, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRINT( "sys__umtx_op ( %#lx, RW_WRLOCK, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRE_REG_READ5(long, "_umtx_op_rw_wrlock",
+ struct urwlock *, obj, int, op, unsigned long, noid,
+ void *, zero, struct vki_timespec *, timeout);
+ PRE_MEM_READ( "_umtx_op_rw_wrlock(rw)", ARG1, sizeof(struct vki_urwlock) );
+ PRE_MEM_WRITE( "_umtx_op_rw_wrlock(rw)", ARG1, sizeof(struct vki_urwlock) );
break;
case VKI_UMTX_OP_RW_UNLOCK:
- PRINT( "sys__umtx_op ( %#lx, CV_RW_UNLOCK, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRINT( "sys__umtx_op ( %#lx, RW_UNLOCK, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRE_REG_READ2(long, "_umtx_op_rw_unlock",
+ struct urwlock *, obj, int, op);
+ PRE_MEM_READ( "_umtx_op_rw_unlock(rw)", ARG1, sizeof(struct vki_urwlock) );
+ PRE_MEM_WRITE( "_umtx_op_rw_unlock(rw)", ARG1, sizeof(struct vki_urwlock) );
break;
case VKI_UMTX_OP_WAIT_UINT_PRIVATE:
PRINT( "sys__umtx_op ( %#lx, CV_WAIT_UINT_PRIVATE, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
@@ -1864,10 +1920,18 @@
PRE_MEM_READ( "_umtx_op_wake_private(mtx)", ARG1, sizeof(struct vki_umtx) );
break;
case VKI_UMTX_OP_MUTEX_WAIT:
- PRINT( "sys__umtx_op ( %#lx, CV_MUTEX_WAIT, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRINT( "sys__umtx_op ( %#lx, MUTEX_WAIT, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRE_REG_READ2(long, "_umtx_op_mutex_wait",
+ struct umutex *, obj, int, op);
+ PRE_MEM_READ( "_umtx_op_mutex_wait(mutex)", ARG1, sizeof(struct vki_umutex) );
+ PRE_MEM_WRITE( "_umtx_op_mutex_wait(mutex)", ARG1, sizeof(struct vki_umutex) );
break;
case VKI_UMTX_OP_MUTEX_WAKE:
- PRINT( "sys__umtx_op ( %#lx, CV_MUTEX_WAKE, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRINT( "sys__umtx_op ( %#lx, MUTEX_WAKE, %ld, %#lx, %#lx)", ARG1, ARG3, ARG4, ARG5);
+ PRE_REG_READ2(long, "_umtx_op_mutex_wake",
+ struct umutex *, obj, int, op);
+ PRE_MEM_READ( "_umtx_op_mutex_wake(mutex)", ARG1, sizeof(struct vki_umutex) );
+ PRE_MEM_WRITE( "_umtx_op_mutex_wake(mutex)", ARG1, sizeof(struct vki_umutex) );
break;
default:
PRINT( "sys__umtx_op ( %#lx, %ld(UNKNOWN), %ld, %#lx, %#lx )", ARG1, ARG2, ARG3, ARG4, ARG5);
@@ -1892,6 +1956,44 @@
case VKI_UMTX_OP_WAIT_UINT_PRIVATE:
case VKI_UMTX_OP_WAKE_PRIVATE:
break;
+ case VKI_UMTX_OP_MUTEX_TRYLOCK:
+ case VKI_UMTX_OP_MUTEX_LOCK:
+ case VKI_UMTX_OP_MUTEX_UNLOCK:
+ case VKI_UMTX_OP_MUTEX_WAIT: /* Sets/clears contested bits */
+ case VKI_UMTX_OP_MUTEX_WAKE: /* Sets/clears contested bits */
+ if (SUCCESS)
+ POST_MEM_WRITE( ARG1, sizeof(struct vki_umutex) );
+ break;
+ case VKI_UMTX_OP_SET_CEILING:
+ if (SUCCESS) {
+ POST_MEM_WRITE( ARG1, sizeof(struct vki_umutex) );
+ if (ARG4)
+ POST_MEM_WRITE( ARG4, sizeof(vki_uint32_t) );
+ }
+ break;
+ case VKI_UMTX_OP_CV_WAIT:
+ if (SUCCESS) {
+ POST_MEM_WRITE( ARG1, sizeof(struct vki_ucond) );
+ POST_MEM_WRITE( ARG4, sizeof(struct vki_umutex) );
+ }
+ break;
+ case VKI_UMTX_OP_CV_SIGNAL:
+ if (SUCCESS) {
+ POST_MEM_WRITE( ARG1, sizeof(struct vki_ucond) );
+ }
+ break;
+ case VKI_UMTX_OP_CV_BROADCAST:
+ if (SUCCESS) {
+ POST_MEM_WRITE( ARG1, sizeof(struct vki_ucond) );
+ }
+ break;
+ case VKI_UMTX_OP_RW_RDLOCK:
+ case VKI_UMTX_OP_RW_WRLOCK:
+ case VKI_UMTX_OP_RW_UNLOCK:
+ if (SUCCESS) {
+ POST_MEM_WRITE( ARG1, sizeof(struct vki_urwlock) );
+ }
+ break;
default:
break;
}
More information about the p4-projects
mailing list