]> granicus.if.org Git - strace/commitdiff
Fix IPC decoding on alpha and arm
authorDmitry V. Levin <ldv@altlinux.org>
Thu, 15 Mar 2012 21:19:36 +0000 (21:19 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Thu, 15 Mar 2012 21:19:36 +0000 (21:19 +0000)
* ipc.c (indirect_ipccall): Return 0 on ALPHA and ARM EABI.
(sys_shmat): Use indirect_ipccall for proper return value decoding.

ipc.c

diff --git a/ipc.c b/ipc.c
index e1746cba05375170824a3955c572f353731747e7..00dc9461c5107e3364202c0dc98e470b9a08881c 100644 (file)
--- a/ipc.c
+++ b/ipc.c
@@ -178,10 +178,10 @@ indirect_ipccall(struct tcb *tcp)
 #if defined IA64
        return tcp->scno < 1024; /* ia32 emulation syscalls are low */
 #endif
-#if !defined MIPS && !defined HPPA
-       return 1;
-#endif
+#if defined(ALPHA) || defined(MIPS) || defined(HPPA) || defined(__ARM_EABI__)
        return 0;
+#endif
+       return 1;
 }
 
 int sys_msgctl(struct tcb *tcp)
@@ -404,8 +404,6 @@ int sys_shmctl(struct tcb *tcp)
 
 int sys_shmat(struct tcb *tcp)
 {
-       unsigned long raddr;
-
        if (exiting(tcp)) {
                tprintf("%lu", tcp->u_arg[0]);
                if (indirect_ipccall(tcp)) {
@@ -419,12 +417,12 @@ int sys_shmat(struct tcb *tcp)
                }
                if (syserror(tcp))
                        return 0;
-/* HPPA does not use an IPC multiplexer on Linux.  */
-#if !defined(HPPA)
-               if (umove(tcp, tcp->u_arg[2], &raddr) < 0)
-                       return RVAL_NONE;
-               tcp->u_rval = raddr;
-#endif
+               if (indirect_ipccall(tcp)) {
+                       unsigned long raddr;
+                       if (umove(tcp, tcp->u_arg[2], &raddr) < 0)
+                               return RVAL_NONE;
+                       tcp->u_rval = raddr;
+               }
                return RVAL_HEX;
        }
        return 0;