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>