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