PERFORCE change 184758 for review
Stanislav Sedov
stas at FreeBSD.org
Fri Oct 15 07:44:48 UTC 2010
http://p4web.freebsd.org/@@184758?ac=10
Change 184758 by stas at 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 */
More information about the p4-projects
mailing list