Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 15 Oct 2010 07:44:47 GMT
From:      Stanislav Sedov <stas@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 184758 for review
Message-ID:  <201010150744.o9F7ilM5031498@skunkworks.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@184758?ac=10

Change 184758 by stas@stas_orion on 2010/10/15 07:44:12

	- Implement shmctl syscall wrapper.

Affected files ...

.. //depot/projects/valgrind/coregrind/m_syswrap/priv_syswrap-freebsd.h#22 edit
.. //depot/projects/valgrind/coregrind/m_syswrap/syswrap-freebsd.c#48 edit
.. //depot/projects/valgrind/include/vki/vki-freebsd.h#22 edit
.. //depot/projects/valgrind/include/vki/vki-scnums-freebsd.h#9 edit

Differences ...

==== //depot/projects/valgrind/coregrind/m_syswrap/priv_syswrap-freebsd.h#22 (text+ko) ====

@@ -119,6 +119,7 @@
 DECL_TEMPLATE(freebsd, sys_msgrcv);
 DECL_TEMPLATE(freebsd, sys_shmat);
 DECL_TEMPLATE(freebsd, sys_shmctl);
+DECL_TEMPLATE(freebsd, sys_shmctl7);
 DECL_TEMPLATE(freebsd, sys_shmdt);
 DECL_TEMPLATE(freebsd, sys_shmget);
 DECL_TEMPLATE(freebsd, sys_clock_gettime);

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

@@ -2642,13 +2642,56 @@
 {
    PRINT("sys_shmctl ( %ld, %ld, %#lx )",ARG1,ARG2,ARG3);
    PRE_REG_READ3(long, "shmctl",
-                 int, shmid, int, cmd, struct shmid_ds *, buf);
-   ML_(generic_PRE_sys_shmctl)(tid, ARG1,ARG2,ARG3);
+                 int, shmid, int, cmd, struct vki_shmid_ds *, buf);
+   switch (ARG2 /* cmd */) {
+   case VKI_IPC_STAT:
+      PRE_MEM_WRITE( "shmctl(IPC_STAT, buf)",
+                     ARG3, sizeof(struct vki_shmid_ds) );
+      break;
+   case VKI_IPC_SET:
+      PRE_MEM_READ( "shmctl(IPC_SET, buf)",
+                    ARG3, sizeof(struct vki_shmid_ds) );
+      break;
+   case VKI_IPC_RMID:
+      PRE_MEM_READ( "shmctl(IPC_RMID, buf)",
+                    ARG3, sizeof(struct vki_shmid_ds) );
+      break;
+   }
+}
+
+PRE(sys_shmctl7)
+{
+   PRINT("sys_shmctl7 ( %ld, %ld, %#lx )",ARG1,ARG2,ARG3);
+   PRE_REG_READ3(long, "shmctl",
+                 int, shmid, int, cmd, struct vki_shmid_ds7 *, buf);
+   switch (ARG2 /* cmd */) {
+   case VKI_IPC_STAT:
+      PRE_MEM_WRITE( "shmctl7(IPC_STAT, buf)",
+                     ARG3, sizeof(struct vki_shmid_ds7) );
+      break;
+   case VKI_IPC_SET:
+      PRE_MEM_READ( "shmctl7(IPC_SET, buf)",
+                    ARG3, sizeof(struct vki_shmid_ds7) );
+      break;
+   case VKI_IPC_RMID:
+      PRE_MEM_READ( "shmctl7(IPC_RMID, buf)",
+                    ARG3, sizeof(struct vki_shmid_ds7) );
+      break;
+   }
 }
 
 POST(sys_shmctl)
 {
-   ML_(generic_POST_sys_shmctl)(tid, RES,ARG1,ARG2,ARG3);
+   if (ARG2 == VKI_IPC_STAT) {
+      POST_MEM_WRITE( ARG3, sizeof(struct vki_shmid_ds) );
+   }
+}
+
+POST(sys_shmctl7)
+{
+   if (ARG2 == VKI_IPC_STAT) {
+      POST_MEM_WRITE( ARG3, sizeof(struct vki_shmid_ds7) );
+   }
 }
 
 PRE(sys_semget)
@@ -3563,7 +3606,7 @@
 // BSDXY(__NR_msgrcv,			sys_msgrcv),			// 227
 
    BSDXY(__NR_shmat,			sys_shmat),				// 228
-   BSDXY(__NR_shmctl,			sys_shmctl),			// 229
+   BSDXY(__NR_shmctl7,			sys_shmctl7),			// 229
    BSDXY(__NR_shmdt,			sys_shmdt),				// 230
    BSDX_(__NR_shmget,			sys_shmget),			// 231
 
@@ -3910,6 +3953,7 @@
    // posix_openpt							   504
 
    BSDXY(__NR___semctl,			sys___semctl),			// 510
+   BSDXY(__NR_shmctl,			sys_shmctl),			// 512
 
 
 };

==== //depot/projects/valgrind/include/vki/vki-freebsd.h#22 (text+ko) ====

@@ -1236,7 +1236,7 @@
 #define VKI_IPC_EXCL   00002000   /* fail if key exists */
 #define VKI_IPC_NOWAIT 00004000   /* return error on wait */
 
-//#define VKI_IPC_RMID 0     /* remove resource */
+#define VKI_IPC_RMID 0     /* remove resource */
 #define VKI_IPC_SET  1     /* set ipc_perm options */
 #define VKI_IPC_STAT 2     /* get ipc_perm options */
 #define VKI_IPC_INFO 3     /* see ipcs */
@@ -1252,6 +1252,17 @@
 	vki_key_t	key;
 };
 
+struct vki_ipc_perm7
+{
+	unsigned short	cuid;
+	unsigned short	cgid;
+	unsigned short	uid;
+	unsigned short	gid;
+	unsigned short	mode;
+	unsigned short	seq;
+	vki_key_t	key;
+};
+
 //----------------------------------------------------------------------
 // From sys/sem.h
 //----------------------------------------------------------------------
@@ -1493,6 +1504,18 @@
 	vki_time_t		shm_ctime;	/* last change time */
 };
 
+struct vki_shmid_ds7 {
+	struct vki_ipc_perm7	shm_perm;	/* operation perms */
+	int			shm_segsz;	/* size of segment (bytes) */
+	vki_pid_t		shm_lpid;	/* pid of last operator */
+	vki_pid_t		shm_cpid;	/* pid of creator */
+	short			shm_nattch;	/* no. of current attaches */
+	vki_time_t		shm_atime;	/* last attach time */
+	vki_time_t		shm_dtime;	/* last detach time */
+	vki_time_t		shm_ctime;	/* last change time */
+	void			*shm_internal;	/* sysv stupidity */
+};
+
 #define VKI_SHM_RDONLY  010000  /* read-only access */
 
 #if 0	/* not in freebsd abi */

==== //depot/projects/valgrind/include/vki/vki-scnums-freebsd.h#9 (text+ko) ====

@@ -194,7 +194,7 @@
 #define	__NR_msgsnd		226
 #define	__NR_msgrcv		227
 #define	__NR_shmat		228
-#define	__NR_shmctl		229
+#define	__NR_shmctl7		229
 #define	__NR_shmdt		230
 #define	__NR_shmget		231
 #define	__NR_clock_gettime	232
@@ -406,5 +406,6 @@
 #define	__NR_unlinkat		503
 #define	__NR_posix_openpt	504
 #define	__NR___semctl		510
+#define	__NR_shmctl		512
 
 #endif /* __VKI_UNISTD_FREEBSD_H */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201010150744.o9F7ilM5031498>