ipc.c: make use of RVAL_DECODED

* ipc.c (sys_mq_notify, sys_mq_open, sys_mq_timedreceive,
sys_mq_timedsend, sys_msgctl, sys_msgget, sys_msgsnd, sys_semctl,
sys_semget, sys_semop, sys_semtimedop, sys_shmctl, sys_shmdt,
sys_shmget): Update for RVAL_DECODED.
(sys_shmat): Decode all arguments on entering syscall.
diff --git a/ipc.c b/ipc.c
index 3db527c..dc72151 100644
--- a/ipc.c
+++ b/ipc.c
@@ -74,16 +74,14 @@
 
 SYS_FUNC(msgget)
 {
-	if (entering(tcp)) {
-		if (tcp->u_arg[0])
-			tprintf("%#lx, ", tcp->u_arg[0]);
-		else
-			tprints("IPC_PRIVATE, ");
-		if (printflags(resource_flags, tcp->u_arg[1] & ~0777, NULL) != 0)
-			tprints("|");
-		tprintf("%#lo", tcp->u_arg[1] & 0777);
-	}
-	return 0;
+	if (tcp->u_arg[0])
+		tprintf("%#lx, ", tcp->u_arg[0]);
+	else
+		tprints("IPC_PRIVATE, ");
+	if (printflags(resource_flags, tcp->u_arg[1] & ~0777, NULL) != 0)
+		tprints("|");
+	tprintf("%#lo", tcp->u_arg[1] & 0777);
+	return RVAL_DECODED;
 }
 
 #ifdef IPC_64
@@ -102,12 +100,10 @@
 
 SYS_FUNC(msgctl)
 {
-	if (entering(tcp)) {
-		tprintf("%lu, ", tcp->u_arg[0]);
-		PRINTCTL(msgctl_flags, tcp->u_arg[1], "MSG_???");
-		tprintf(", %#lx", tcp->u_arg[indirect_ipccall(tcp) ? 3 : 2]);
-	}
-	return 0;
+	tprintf("%lu, ", tcp->u_arg[0]);
+	PRINTCTL(msgctl_flags, tcp->u_arg[1], "MSG_???");
+	tprintf(", %#lx", tcp->u_arg[indirect_ipccall(tcp) ? 3 : 2]);
+	return RVAL_DECODED;
 }
 
 static void
@@ -129,17 +125,15 @@
 
 SYS_FUNC(msgsnd)
 {
-	if (entering(tcp)) {
-		tprintf("%d, ", (int) tcp->u_arg[0]);
-		if (indirect_ipccall(tcp)) {
-			tprint_msgsnd(tcp, tcp->u_arg[3], tcp->u_arg[1],
-				      tcp->u_arg[2]);
-		} else {
-			tprint_msgsnd(tcp, tcp->u_arg[1], tcp->u_arg[2],
-				      tcp->u_arg[3]);
-		}
+	tprintf("%d, ", (int) tcp->u_arg[0]);
+	if (indirect_ipccall(tcp)) {
+		tprint_msgsnd(tcp, tcp->u_arg[3], tcp->u_arg[1],
+			      tcp->u_arg[2]);
+	} else {
+		tprint_msgsnd(tcp, tcp->u_arg[1], tcp->u_arg[2],
+			      tcp->u_arg[3]);
 	}
-	return 0;
+	return RVAL_DECODED;
 }
 
 static void
@@ -229,104 +223,88 @@
 
 SYS_FUNC(semop)
 {
-	if (entering(tcp)) {
-		tprintf("%lu, ", tcp->u_arg[0]);
-		if (indirect_ipccall(tcp)) {
-			tprint_sembuf(tcp, tcp->u_arg[3], tcp->u_arg[1]);
-		} else {
-			tprint_sembuf(tcp, tcp->u_arg[1], tcp->u_arg[2]);
-		}
+	tprintf("%lu, ", tcp->u_arg[0]);
+	if (indirect_ipccall(tcp)) {
+		tprint_sembuf(tcp, tcp->u_arg[3], tcp->u_arg[1]);
+	} else {
+		tprint_sembuf(tcp, tcp->u_arg[1], tcp->u_arg[2]);
 	}
-	return 0;
+	return RVAL_DECODED;
 }
 
 SYS_FUNC(semtimedop)
 {
-	if (entering(tcp)) {
-		tprintf("%lu, ", tcp->u_arg[0]);
-		if (indirect_ipccall(tcp)) {
-			tprint_sembuf(tcp, tcp->u_arg[3], tcp->u_arg[1]);
-			tprints(", ");
+	tprintf("%lu, ", tcp->u_arg[0]);
+	if (indirect_ipccall(tcp)) {
+		tprint_sembuf(tcp, tcp->u_arg[3], tcp->u_arg[1]);
+		tprints(", ");
 #if defined(S390) || defined(S390X)
-			printtv(tcp, tcp->u_arg[2]);
+		printtv(tcp, tcp->u_arg[2]);
 #else
-			printtv(tcp, tcp->u_arg[4]);
+		printtv(tcp, tcp->u_arg[4]);
 #endif
-		} else {
-			tprint_sembuf(tcp, tcp->u_arg[1], tcp->u_arg[2]);
-			tprints(", ");
-			printtv(tcp, tcp->u_arg[3]);
-		}
+	} else {
+		tprint_sembuf(tcp, tcp->u_arg[1], tcp->u_arg[2]);
+		tprints(", ");
+		printtv(tcp, tcp->u_arg[3]);
 	}
-	return 0;
+	return RVAL_DECODED;
 }
 
 SYS_FUNC(semget)
 {
-	if (entering(tcp)) {
-		if (tcp->u_arg[0])
-			tprintf("%#lx", tcp->u_arg[0]);
-		else
-			tprints("IPC_PRIVATE");
-		tprintf(", %lu, ", tcp->u_arg[1]);
-		if (printflags(resource_flags, tcp->u_arg[2] & ~0777, NULL) != 0)
-			tprints("|");
-		tprintf("%#lo", tcp->u_arg[2] & 0777);
-	}
-	return 0;
+	if (tcp->u_arg[0])
+		tprintf("%#lx", tcp->u_arg[0]);
+	else
+		tprints("IPC_PRIVATE");
+	tprintf(", %lu, ", tcp->u_arg[1]);
+	if (printflags(resource_flags, tcp->u_arg[2] & ~0777, NULL) != 0)
+		tprints("|");
+	tprintf("%#lo", tcp->u_arg[2] & 0777);
+	return RVAL_DECODED;
 }
 
 SYS_FUNC(semctl)
 {
-	if (entering(tcp)) {
-		tprintf("%lu, %lu, ", tcp->u_arg[0], tcp->u_arg[1]);
-		PRINTCTL(semctl_flags, tcp->u_arg[2], "SEM_???");
-		tprints(", ");
-		if (indirect_ipccall(tcp)) {
-			if (current_wordsize == sizeof(int)) {
-				printnum_int(tcp, tcp->u_arg[3], "%#x");
-			} else {
-				printnum_long(tcp, tcp->u_arg[3], "%#lx");
-			}
+	tprintf("%lu, %lu, ", tcp->u_arg[0], tcp->u_arg[1]);
+	PRINTCTL(semctl_flags, tcp->u_arg[2], "SEM_???");
+	tprints(", ");
+	if (indirect_ipccall(tcp)) {
+		if (current_wordsize == sizeof(int)) {
+			printnum_int(tcp, tcp->u_arg[3], "%#x");
 		} else {
-			tprintf("%#lx", tcp->u_arg[3]);
+			printnum_long(tcp, tcp->u_arg[3], "%#lx");
 		}
+	} else {
+		tprintf("%#lx", tcp->u_arg[3]);
 	}
-	return 0;
+	return RVAL_DECODED;
 }
 
 SYS_FUNC(shmget)
 {
-	if (entering(tcp)) {
-		if (tcp->u_arg[0])
-			tprintf("%#lx", tcp->u_arg[0]);
-		else
-			tprints("IPC_PRIVATE");
-		tprintf(", %lu, ", tcp->u_arg[1]);
-		if (printflags(shm_resource_flags, tcp->u_arg[2] & ~0777, NULL) != 0)
-			tprints("|");
-		tprintf("%#lo", tcp->u_arg[2] & 0777);
-	}
-	return 0;
+	if (tcp->u_arg[0])
+		tprintf("%#lx", tcp->u_arg[0]);
+	else
+		tprints("IPC_PRIVATE");
+	tprintf(", %lu, ", tcp->u_arg[1]);
+	if (printflags(shm_resource_flags, tcp->u_arg[2] & ~0777, NULL) != 0)
+		tprints("|");
+	tprintf("%#lo", tcp->u_arg[2] & 0777);
+	return RVAL_DECODED;
 }
 
 SYS_FUNC(shmctl)
 {
-	if (entering(tcp)) {
-		tprintf("%lu, ", tcp->u_arg[0]);
-		PRINTCTL(shmctl_flags, tcp->u_arg[1], "SHM_???");
-		if (indirect_ipccall(tcp)) {
-			tprintf(", %#lx", tcp->u_arg[3]);
-		} else {
-			tprintf(", %#lx", tcp->u_arg[2]);
-		}
-	}
-	return 0;
+	tprintf("%lu, ", tcp->u_arg[0]);
+	PRINTCTL(shmctl_flags, tcp->u_arg[1], "SHM_???");
+	tprintf(", %#lx", tcp->u_arg[indirect_ipccall(tcp) ? 3 : 2]);
+	return RVAL_DECODED;
 }
 
 SYS_FUNC(shmat)
 {
-	if (exiting(tcp)) {
+	if (entering(tcp)) {
 		tprintf("%lu", tcp->u_arg[0]);
 		if (indirect_ipccall(tcp)) {
 			tprintf(", %#lx, ", tcp->u_arg[3]);
@@ -335,6 +313,8 @@
 			tprintf(", %#lx, ", tcp->u_arg[1]);
 			printflags(shm_flags, tcp->u_arg[2], "SHM_???");
 		}
+		return 0;
+	} else {
 		if (syserror(tcp))
 			return 0;
 		if (indirect_ipccall(tcp)) {
@@ -345,56 +325,45 @@
 		}
 		return RVAL_HEX;
 	}
-	return 0;
 }
 
 SYS_FUNC(shmdt)
 {
-	if (entering(tcp)) {
-		if (indirect_ipccall(tcp)) {
-			tprintf("%#lx", tcp->u_arg[3]);
-		} else {
-			tprintf("%#lx", tcp->u_arg[0]);
-		}
-	}
-	return 0;
+	tprintf("%#lx", tcp->u_arg[indirect_ipccall(tcp) ? 3 : 0]);
+	return RVAL_DECODED;
 }
 
 SYS_FUNC(mq_open)
 {
-	if (entering(tcp)) {
-		printpath(tcp, tcp->u_arg[0]);
-		tprints(", ");
-		/* flags */
-		tprint_open_modes(tcp->u_arg[1]);
-		if (tcp->u_arg[1] & O_CREAT) {
+	printpath(tcp, tcp->u_arg[0]);
+	tprints(", ");
+	/* flags */
+	tprint_open_modes(tcp->u_arg[1]);
+	if (tcp->u_arg[1] & O_CREAT) {
 # ifndef HAVE_MQUEUE_H
-			tprintf(", %lx", tcp->u_arg[2]);
+		tprintf(", %lx", tcp->u_arg[2]);
 # else
-			struct mq_attr attr;
-			/* mode */
-			tprintf(", %#lo, ", tcp->u_arg[2]);
-			if (umove(tcp, tcp->u_arg[3], &attr) < 0)
-				tprints("{???}");
-			else
-				tprintf("{mq_maxmsg=%ld, mq_msgsize=%ld}",
-					(long) attr.mq_maxmsg,
-					(long) attr.mq_msgsize);
+		struct mq_attr attr;
+		/* mode */
+		tprintf(", %#lo, ", tcp->u_arg[2]);
+		if (umove(tcp, tcp->u_arg[3], &attr) < 0)
+			tprints("{???}");
+		else
+			tprintf("{mq_maxmsg=%ld, mq_msgsize=%ld}",
+				(long) attr.mq_maxmsg,
+				(long) attr.mq_msgsize);
 # endif
-		}
 	}
-	return 0;
+	return RVAL_DECODED;
 }
 
 SYS_FUNC(mq_timedsend)
 {
-	if (entering(tcp)) {
-		tprintf("%ld, ", tcp->u_arg[0]);
-		printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
-		tprintf(", %lu, %ld, ", tcp->u_arg[2], tcp->u_arg[3]);
-		printtv(tcp, tcp->u_arg[4]);
-	}
-	return 0;
+	tprintf("%ld, ", tcp->u_arg[0]);
+	printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
+	tprintf(", %lu, %ld, ", tcp->u_arg[2], tcp->u_arg[3]);
+	printtv(tcp, tcp->u_arg[4]);
+	return RVAL_DECODED;
 }
 
 SYS_FUNC(mq_timedreceive)
@@ -411,11 +380,9 @@
 
 SYS_FUNC(mq_notify)
 {
-	if (entering(tcp)) {
-		tprintf("%ld, ", tcp->u_arg[0]);
-		printsigevent(tcp, tcp->u_arg[1]);
-	}
-	return 0;
+	tprintf("%ld, ", tcp->u_arg[0]);
+	printsigevent(tcp, tcp->u_arg[1]);
+	return RVAL_DECODED;
 }
 
 static void