|
From: <sv...@va...> - 2012-02-09 12:26:22
|
Author: tom
Date: 2012-02-09 12:21:47 +0000 (Thu, 09 Feb 2012)
New Revision: 12373
Log:
Add support for the F_GETOWN_EX and F_SETOWN_EX fcntl calls.
Patch from Jakub Jelinek to fix BZ#292626.
Modified:
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/include/vki/vki-amd64-linux.h
trunk/include/vki/vki-arm-linux.h
trunk/include/vki/vki-ppc32-linux.h
trunk/include/vki/vki-ppc64-linux.h
trunk/include/vki/vki-s390x-linux.h
trunk/include/vki/vki-x86-linux.h
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-linux.c 2012-02-09 11:54:16 UTC (rev 12372)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c 2012-02-09 12:21:47 UTC (rev 12373)
@@ -3790,6 +3790,22 @@
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 @@
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 @@
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 @@
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));
}
}
Modified: trunk/include/vki/vki-amd64-linux.h
===================================================================
--- trunk/include/vki/vki-amd64-linux.h 2012-02-09 11:54:16 UTC (rev 12372)
+++ trunk/include/vki/vki-amd64-linux.h 2012-02-09 12:21:47 UTC (rev 12373)
@@ -268,6 +268,18 @@
#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
Modified: trunk/include/vki/vki-arm-linux.h
===================================================================
--- trunk/include/vki/vki-arm-linux.h 2012-02-09 11:54:16 UTC (rev 12372)
+++ trunk/include/vki/vki-arm-linux.h 2012-02-09 12:21:47 UTC (rev 12373)
@@ -270,6 +270,18 @@
#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 */
Modified: trunk/include/vki/vki-ppc32-linux.h
===================================================================
--- trunk/include/vki/vki-ppc32-linux.h 2012-02-09 11:54:16 UTC (rev 12372)
+++ trunk/include/vki/vki-ppc32-linux.h 2012-02-09 12:21:47 UTC (rev 12373)
@@ -337,6 +337,18 @@
#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 */
Modified: trunk/include/vki/vki-ppc64-linux.h
===================================================================
--- trunk/include/vki/vki-ppc64-linux.h 2012-02-09 11:54:16 UTC (rev 12372)
+++ trunk/include/vki/vki-ppc64-linux.h 2012-02-09 12:21:47 UTC (rev 12373)
@@ -386,6 +386,18 @@
#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 */
Modified: trunk/include/vki/vki-s390x-linux.h
===================================================================
--- trunk/include/vki/vki-s390x-linux.h 2012-02-09 11:54:16 UTC (rev 12372)
+++ trunk/include/vki/vki-s390x-linux.h 2012-02-09 12:21:47 UTC (rev 12373)
@@ -332,6 +332,18 @@
#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
Modified: trunk/include/vki/vki-x86-linux.h
===================================================================
--- trunk/include/vki/vki-x86-linux.h 2012-02-09 11:54:16 UTC (rev 12372)
+++ trunk/include/vki/vki-x86-linux.h 2012-02-09 12:21:47 UTC (rev 12373)
@@ -308,6 +308,18 @@
#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 */
|