summaryrefslogtreecommitdiff
path: root/ipc.c
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2011-11-30 13:16:29 +0100
committerDmitry V. Levin <ldv@altlinux.org>2011-12-01 20:41:42 +0000
commite0f5fd87da61c6123467a8701e9c0dc5b528f3bf (patch)
tree761c4b05f04f6e003a2a57d6bdd4374bd0e45e42 /ipc.c
parent436d892212dd56401bacf818a238333d30f85c6a (diff)
downloadstrace-e0f5fd87da61c6123467a8701e9c0dc5b528f3bf.tar.gz
strace-e0f5fd87da61c6123467a8701e9c0dc5b528f3bf.tar.bz2
strace-e0f5fd87da61c6123467a8701e9c0dc5b528f3bf.tar.xz
Fix sys_ipc/sys_semtimedop decoding on s390
The s390 kernel sys_ipc system call only takes five arguments instead of six arguments which the common code sys_ipc implementation takes. One of the arguments of the sys_semtimedop subcall is therefore passed in a different register than in the common code implementation. This leads to broken decoding of the timespec argument: semtimedop(0, 0x3ffffb43832, 1, {...}) = -1 EAGAIN Fixed it looks like this: semtimedop(0, 0x3ffffc2c842, 1, {0, 10000000}) = -1 EINTR * linux/ipc.c (sys_semtimedop): Fix timespec decoding on s390. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Diffstat (limited to 'ipc.c')
-rw-r--r--ipc.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/ipc.c b/ipc.c
index 25539a6..5fb2c67 100644
--- a/ipc.c
+++ b/ipc.c
@@ -346,7 +346,11 @@ int sys_semtimedop(struct tcb *tcp)
if (indirect_ipccall(tcp)) {
tprint_sembuf(tcp, tcp->u_arg[3], tcp->u_arg[1]);
tprints(", ");
+#if defined(S390)
+ printtv(tcp, tcp->u_arg[2]);
+#else
printtv(tcp, tcp->u_arg[5]);
+#endif
} else {
tprint_sembuf(tcp, tcp->u_arg[1], tcp->u_arg[2]);
tprints(", ");