* <barrow_dj@mail.yahoo.com,djbarrow@de.ibm.com>
* Copyright (c) 2000 PocketPenguins Inc. Linux for Hitachi SuperH
* port by Greg Banks <gbanks@pocketpenguins.com>
+ * Copyright (c) 1999-2017 The strace developers.
*
* All rights reserved.
*
};
static void
-print_user_offset_addr(const unsigned long addr)
+print_user_offset_addr(const kernel_ulong_t addr)
{
const struct xlat *x;
printaddr(addr);
} else {
--x;
- tprintf("%s + %lu",
- x->str, addr - (unsigned long) x->val);
+ tprintf("%s + %" PRI_klu,
+ x->str, addr - (kernel_ulong_t) x->val);
}
} else {
tprints(x->str);
SYS_FUNC(ptrace)
{
- const unsigned long request = tcp->u_arg[0];
+ const kernel_ulong_t request = tcp->u_arg[0];
const int pid = tcp->u_arg[1];
- const unsigned long addr = tcp->u_arg[2];
- const unsigned long data = tcp->u_arg[3];
+ const kernel_ulong_t addr = tcp->u_arg[2];
+ const kernel_ulong_t data = tcp->u_arg[3];
if (entering(tcp)) {
/* request */
case PTRACE_GETSIGMASK:
case PTRACE_SETSIGMASK:
case PTRACE_SECCOMP_GET_FILTER:
- tprintf(", %lu", addr);
+ tprintf(", %" PRI_klu, addr);
break;
case PTRACE_PEEKSIGINFO: {
tprints(", ");
tprintf(", nr=%u}", psi.nr);
break;
}
-#if defined SPARC || defined SPARC64
+ default:
+ tprints(", ");
+ printaddr(addr);
+ }
+
+# if defined IA64 || defined SPARC || defined SPARC64
+ switch (request) {
+# ifdef IA64
+ case PTRACE_PEEKDATA:
+ case PTRACE_PEEKTEXT:
+ case PTRACE_PEEKUSER:
+ /* data is ignored */
+ return RVAL_DECODED | RVAL_HEX;
+# endif /* IA64 */
+# if defined SPARC || defined SPARC64
case PTRACE_GETREGS:
case PTRACE_SETREGS:
case PTRACE_GETFPREGS:
case PTRACE_SETFPREGS:
- tprints(", ");
- printaddr(addr);
/* data is ignored */
return RVAL_DECODED;
-#endif
- default:
- tprints(", ");
- printaddr(addr);
+# endif /* SPARC || SPARC64 */
}
+# endif /* IA64 || SPARC || SPARC64 */
tprints(", ");
/* data */
switch (request) {
-#ifndef IA64
- case PTRACE_PEEKDATA:
- case PTRACE_PEEKTEXT:
- case PTRACE_PEEKUSER:
- break;
-#endif
case PTRACE_CONT:
case PTRACE_DETACH:
case PTRACE_SYSCALL:
#endif
printsignal(data);
break;
+ case PTRACE_SEIZE:
case PTRACE_SETOPTIONS:
- printflags(ptrace_setoptions_flags, data, "PTRACE_O_???");
+#ifdef PTRACE_OLDSETOPTIONS
+ case PTRACE_OLDSETOPTIONS:
+#endif
+ printflags64(ptrace_setoptions_flags, data, "PTRACE_O_???");
break;
case PTRACE_SETSIGINFO:
printsiginfo_at(tcp, data);
break;
+ case PTRACE_SETSIGMASK:
+ print_sigset_addr_len(tcp, data, addr);
+ break;
case PTRACE_SETREGSET:
- tprint_iov(tcp, /*len:*/ 1, data, /*as string:*/ 0);
+ tprint_iov(tcp, /*len:*/ 1, data, IOV_DECODE_ADDR);
break;
- case PTRACE_GETSIGINFO:
+#ifndef IA64
+ case PTRACE_PEEKDATA:
+ case PTRACE_PEEKTEXT:
+ case PTRACE_PEEKUSER:
+#endif
+ case PTRACE_GETEVENTMSG:
case PTRACE_GETREGSET:
- /* Don't print anything, do it at syscall return. */
- break;
+ case PTRACE_GETSIGINFO:
+ case PTRACE_GETSIGMASK:
+ case PTRACE_PEEKSIGINFO:
+ case PTRACE_SECCOMP_GET_FILTER:
+ if (verbose(tcp)) {
+ /* print data on exiting syscall */
+ return 0;
+ }
+ /* fall through */
default:
printaddr(data);
break;
}
+
+ return RVAL_DECODED;
} else {
switch (request) {
+#ifndef IA64
case PTRACE_PEEKDATA:
case PTRACE_PEEKTEXT:
case PTRACE_PEEKUSER:
-#ifdef IA64
- return RVAL_HEX;
-#else
printnum_ptr(tcp, data);
break;
#endif
+ case PTRACE_GETEVENTMSG:
+ printnum_ulong(tcp, data);
+ break;
+ case PTRACE_GETREGSET:
+ tprint_iov(tcp, /*len:*/ 1, data, IOV_DECODE_ADDR);
+ break;
case PTRACE_GETSIGINFO:
printsiginfo_at(tcp, data);
break;
- case PTRACE_GETREGSET:
- tprint_iov(tcp, /*len:*/ 1, data, /*as string:*/ 0);
+ case PTRACE_GETSIGMASK:
+ print_sigset_addr_len(tcp, data, addr);
+ break;
+ case PTRACE_PEEKSIGINFO:
+ print_siginfo_array(tcp, data, tcp->u_rval);
+ break;
+ case PTRACE_SECCOMP_GET_FILTER:
+ print_seccomp_fprog(tcp, data, tcp->u_rval);
break;
}
}