From owner-p4-projects@FreeBSD.ORG Fri Oct 15 07:44:48 2010 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id ECA861065670; Fri, 15 Oct 2010 07:44:47 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A22AA106564A for ; Fri, 15 Oct 2010 07:44:47 +0000 (UTC) (envelope-from stas@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 8EF0E8FC16 for ; Fri, 15 Oct 2010 07:44:47 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id o9F7il5l031501 for ; Fri, 15 Oct 2010 07:44:47 GMT (envelope-from stas@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id o9F7ilM5031498 for perforce@freebsd.org; Fri, 15 Oct 2010 07:44:47 GMT (envelope-from stas@freebsd.org) Date: Fri, 15 Oct 2010 07:44:47 GMT Message-Id: <201010150744.o9F7ilM5031498@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to stas@freebsd.org using -f From: Stanislav Sedov To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 184758 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Oct 2010 07:44:48 -0000 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 */