PERFORCE change 167593 for review

Stanislav Sedov stas at FreeBSD.org
Fri Aug 21 22:56:58 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=167593

Change 167593 by stas at stas_orion on 2009/08/21 22:56:07

	- Implement fcntl wrapper.

Affected files ...

.. //depot/projects/valgrind/coregrind/m_syswrap/syswrap-freebsd.c#36 edit

Differences ...

==== //depot/projects/valgrind/coregrind/m_syswrap/syswrap-freebsd.c#36 (text+ko) ====

@@ -3048,6 +3048,60 @@
       POST_MEM_WRITE( ARG1, sizeof(struct vki_ucontext) );
 }
 
+PRE(sys_fcntl)
+{
+   switch (ARG2) {
+   // These ones ignore ARG3.
+   case VKI_F_GETFD:
+   case VKI_F_GETFL:
+   case VKI_F_GETOWN:
+      PRINT("sys_fcntl ( %ld, %ld )", ARG1,ARG2);
+      PRE_REG_READ2(long, "fcntl", unsigned int, fd, unsigned int, cmd);
+      break;
+
+   // These ones use ARG3 as "arg".
+   case VKI_F_DUPFD:
+   case VKI_F_SETFD:
+   case VKI_F_SETFL:
+   case VKI_F_SETOWN:
+      PRINT("sys_fcntl[ARG3=='arg'] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+      PRE_REG_READ3(long, "fcntl",
+                    unsigned int, fd, unsigned int, cmd, unsigned long, arg);
+      break;
+
+   // These ones use ARG3 as "lock".
+   case VKI_F_GETLK:
+   case VKI_F_SETLK:
+   case VKI_F_SETLKW:
+      PRINT("sys_fcntl[ARG3=='lock'] ( %ld, %ld, %#lx )", ARG1,ARG2,ARG3);
+      PRE_REG_READ3(long, "fcntl",
+                    unsigned int, fd, unsigned int, cmd,
+                    struct flock64 *, lock);
+      break;
+
+   default:
+      PRINT("sys_fcntl[UNKNOWN] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+      I_die_here;
+      break;
+   }
+   if (ARG2 == VKI_F_SETLKW)
+      *flags |= SfMayBlock;
+}
+
+POST(sys_fcntl)
+{
+   vg_assert(SUCCESS);
+   if (ARG2 == VKI_F_DUPFD) {
+      if (!ML_(fd_allowed)(RES, "fcntl(DUPFD)", tid, True)) {
+         VG_(close)(RES);
+         SET_STATUS_Failure( VKI_EMFILE );
+      } else {
+         if (VG_(clo_track_fds))
+            ML_(record_fd_open_named)(tid, RES);
+      }
+   }
+}
+
 #undef PRE
 #undef POST
 
@@ -3167,7 +3221,7 @@
    GENXY(__NR_dup2,			sys_dup2),			// 90
    // unimpl getdopt							   91
 
-//   GENXY(__NR_fcntl,			sys_fcntl),			// 92
+   BSDXY(__NR_fcntl,			sys_fcntl),			// 92
    GENX_(__NR_select,			sys_select),			// 93
    // unimpl setdopt							   94
    GENX_(__NR_fsync,			sys_fsync),			// 95


More information about the p4-projects mailing list