]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add support for the F_GETOWN_EX and F_SETOWN_EX fcntl calls.
authorTom Hughes <tom@compton.nu>
Thu, 9 Feb 2012 12:21:47 +0000 (12:21 +0000)
committerTom Hughes <tom@compton.nu>
Thu, 9 Feb 2012 12:21:47 +0000 (12:21 +0000)
Patch from Jakub Jelinek to fix BZ#292626.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12373

coregrind/m_syswrap/syswrap-linux.c
include/vki/vki-amd64-linux.h
include/vki/vki-arm-linux.h
include/vki/vki-ppc32-linux.h
include/vki/vki-ppc64-linux.h
include/vki/vki-s390x-linux.h
include/vki/vki-x86-linux.h

index f0b94edfe4a8468fafd7fb3d8bf0682fb4fa664e..5a62f5927fc244e385f4e32c7815d1aa2a501943 100644 (file)
@@ -3790,6 +3790,22 @@ PRE(sys_fcntl)
                     struct flock64 *, lock);
       break;
 
+   case VKI_F_SETOWN_EX:
+      PRINT("sys_fcntl[F_SETOWN_EX] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+      PRE_REG_READ3(long, "fcntl",
+                    unsigned int, fd, unsigned int, cmd,
+                    struct vki_f_owner_ex *, arg);
+      PRE_MEM_READ("fcntl(F_SETOWN_EX)", ARG3, sizeof(struct vki_f_owner_ex));
+      break;
+
+   case VKI_F_GETOWN_EX:
+      PRINT("sys_fcntl[F_GETOWN_EX] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+      PRE_REG_READ3(long, "fcntl",
+                    unsigned int, fd, unsigned int, cmd,
+                    struct vki_f_owner_ex *, arg);
+      PRE_MEM_WRITE("fcntl(F_GETOWN_EX)", ARG3, sizeof(struct vki_f_owner_ex));
+      break;
+
    default:
       PRINT("sys_fcntl[UNKNOWN] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
       I_die_here;
@@ -3824,6 +3840,8 @@ POST(sys_fcntl)
          if (VG_(clo_track_fds))
             ML_(record_fd_open_named)(tid, RES);
       }
+   } else if (ARG2 == VKI_F_GETOWN_EX) {
+      POST_MEM_WRITE(ARG3, sizeof(struct vki_f_owner_ex));
    }
 }
 
@@ -3869,6 +3887,22 @@ PRE(sys_fcntl64)
                     unsigned int, fd, unsigned int, cmd,
                     struct flock64 *, lock);
       break;
+
+   case VKI_F_SETOWN_EX:
+      PRINT("sys_fcntl[F_SETOWN_EX] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+      PRE_REG_READ3(long, "fcntl",
+                    unsigned int, fd, unsigned int, cmd,
+                    struct vki_f_owner_ex *, arg);
+      PRE_MEM_READ("fcntl(F_SETOWN_EX)", ARG3, sizeof(struct vki_f_owner_ex));
+      break;
+
+   case VKI_F_GETOWN_EX:
+      PRINT("sys_fcntl[F_GETOWN_EX] ( %ld, %ld, %ld )", ARG1,ARG2,ARG3);
+      PRE_REG_READ3(long, "fcntl",
+                    unsigned int, fd, unsigned int, cmd,
+                    struct vki_f_owner_ex *, arg);
+      PRE_MEM_WRITE("fcntl(F_GETOWN_EX)", ARG3, sizeof(struct vki_f_owner_ex));
+      break;
    }
    
 #  if defined(VGP_x86_linux)
@@ -3899,6 +3933,8 @@ POST(sys_fcntl64)
          if (VG_(clo_track_fds))
             ML_(record_fd_open_named)(tid, RES);
       }
+   } else if (ARG2 == VKI_F_GETOWN_EX) {
+      POST_MEM_WRITE(ARG3, sizeof(struct vki_f_owner_ex));
    }
 }
 
index 8c0bcbac36c5e43f38174cf2c9cfbe4db0237fcb..18e458863dcddf8b584ea33628fb158bba1c577b 100644 (file)
@@ -268,6 +268,18 @@ struct vki_sigcontext {
 #define VKI_F_SETSIG           10      /*  for sockets. */
 #define VKI_F_GETSIG           11      /*  for sockets. */
 
+#define VKI_F_SETOWN_EX                15
+#define VKI_F_GETOWN_EX                16
+
+#define VKI_F_OWNER_TID                0
+#define VKI_F_OWNER_PID                1
+#define VKI_F_OWNER_PGRP       2
+
+struct vki_f_owner_ex {
+       int     type;
+       __vki_kernel_pid_t      pid;
+};
+
 #define VKI_FD_CLOEXEC 1       /* actually anything with low bit set goes */
 
 #define VKI_F_LINUX_SPECIFIC_BASE      1024
index 08e4b80329e2eabf9683cf87584b9f0af24d207f..c06b028d70a516401dfc75f36a93c9196acfdbb4 100644 (file)
@@ -270,6 +270,18 @@ struct vki_sigcontext {
 #define VKI_F_SETLK64          13
 #define VKI_F_SETLKW64         14
 
+#define VKI_F_SETOWN_EX                15
+#define VKI_F_GETOWN_EX                16
+
+#define VKI_F_OWNER_TID                0
+#define VKI_F_OWNER_PID                1
+#define VKI_F_OWNER_PGRP       2
+
+struct vki_f_owner_ex {
+       int     type;
+       __vki_kernel_pid_t      pid;
+};
+
 /* for F_[GET|SET]FL */
 #define VKI_FD_CLOEXEC 1       /* actually anything with low bit set goes */
 
index d0c5ba6b3e8262716a7a0e97142ad16096a24aff..4d7bdf2db9a492412a0e9b0529c347dc06e3b9c5 100644 (file)
@@ -337,6 +337,18 @@ struct vki_sigcontext {
 #define VKI_F_SETLK64          13
 #define VKI_F_SETLKW64         14
 
+#define VKI_F_SETOWN_EX                15
+#define VKI_F_GETOWN_EX                16
+
+#define VKI_F_OWNER_TID                0
+#define VKI_F_OWNER_PID                1
+#define VKI_F_OWNER_PGRP       2
+
+struct vki_f_owner_ex {
+       int     type;
+       __vki_kernel_pid_t      pid;
+};
+
 /* for F_[GET|SET]FL */
 #define VKI_FD_CLOEXEC  1              /* actually anything with low bit set goes */
 
index 6e50b5bb976d007b95a58c29f582a0f47e2fdf80..a41ad4e74b5dfbd92f1fd120b9e4fe542b0cf4a1 100644 (file)
@@ -386,6 +386,18 @@ struct vki_sigcontext {
 #define VKI_F_SETSIG        10      /*  for sockets. */
 #define VKI_F_GETSIG        11      /*  for sockets. */
 
+#define VKI_F_SETOWN_EX                15
+#define VKI_F_GETOWN_EX                16
+
+#define VKI_F_OWNER_TID                0
+#define VKI_F_OWNER_PID                1
+#define VKI_F_OWNER_PGRP       2
+
+struct vki_f_owner_ex {
+       int     type;
+       __vki_kernel_pid_t      pid;
+};
+
 /* for F_[GET|SET]FL */
 #define VKI_FD_CLOEXEC  1  /* actually anything with low bit set goes */
 
index 2b5b8615be742bef0c6971d8a8655581fc6592fb..53e9bb5145e3b86f1eb845dded8cad759e3797d1 100644 (file)
@@ -332,6 +332,18 @@ typedef struct vki_sigaltstack {
 #define VKI_F_SETSIG   10      /* for sockets. */
 #define VKI_F_GETSIG   11      /* for sockets. */
 
+#define VKI_F_SETOWN_EX                15
+#define VKI_F_GETOWN_EX                16
+
+#define VKI_F_OWNER_TID                0
+#define VKI_F_OWNER_PID                1
+#define VKI_F_OWNER_PGRP       2
+
+struct vki_f_owner_ex {
+       int     type;
+       __vki_kernel_pid_t      pid;
+};
+
 #define VKI_FD_CLOEXEC  1  /* actually anything with low bit set goes */
 
 #define VKI_F_LINUX_SPECIFIC_BASE   1024
index 2a14104739c208068d55d89b6b0f0b9884478364..1f3d7621f40f8897cc6d1012a7d826df40bb24c5 100644 (file)
@@ -308,6 +308,18 @@ struct vki_sigcontext {
 #define VKI_F_SETLK64          13
 #define VKI_F_SETLKW64         14
 
+#define VKI_F_SETOWN_EX                15
+#define VKI_F_GETOWN_EX                16
+
+#define VKI_F_OWNER_TID                0
+#define VKI_F_OWNER_PID                1
+#define VKI_F_OWNER_PGRP       2
+
+struct vki_f_owner_ex {
+       int     type;
+       __vki_kernel_pid_t      pid;
+};
+
 /* for F_[GET|SET]FL */
 #define VKI_FD_CLOEXEC 1       /* actually anything with low bit set goes */