]> granicus.if.org Git - strace/commitdiff
m68k: switch to PTRACE_GETREGS
authorAndreas Schwab <schwab@linux-m68k.org>
Sat, 12 Nov 2016 19:02:23 +0000 (20:02 +0100)
committerDmitry V. Levin <ldv@altlinux.org>
Sat, 12 Nov 2016 21:29:58 +0000 (21:29 +0000)
* Makefile.am (EXTRA_DIST): Add linux/m68k/arch_regs.h, remove
linux/m68k/get_syscall_result.c.
* linux/m68k/arch_regs.c (m68k_d0, ARCH_PC_PEEK_ADDR): Don't
define.
(m68k_regs, m68k_usp_ptr, ARCH_PC_REG, ARCH_REGS_FOR_GETREGS):
Define.
* linux/m68k/arch_regs.h: New file.
* linux/m68k/arch_sigreturn.c (arch_sigreturn): Use m68k_usp_ptr.
* linux/m68k/get_error.c (get_error): Use m68k_regs.d0.
* linux/m68k/get_scno.c (arch_get_scno): Use m68k_regs.orig_d0.
* linux/m68k/get_syscall_args.c (get_syscall_args): Use m68k_regs.
* linux/m68k/get_syscall_result.c: Remove.

Makefile.am
linux/m68k/arch_regs.c
linux/m68k/arch_regs.h [new file with mode: 0644]
linux/m68k/arch_sigreturn.c
linux/m68k/get_error.c
linux/m68k/get_scno.c
linux/m68k/get_syscall_args.c
linux/m68k/get_syscall_result.c [deleted file]

index e55a0db2183e7abc93c2b2c0bffabc9922ed2f33..457659fe341d768ee2eb02894da76cf519baad84 100644 (file)
@@ -414,11 +414,11 @@ EXTRA_DIST =                              \
        linux/ia64/userent.h            \
        linux/inet_diag.h               \
        linux/m68k/arch_regs.c          \
+       linux/m68k/arch_regs.h          \
        linux/m68k/arch_sigreturn.c     \
        linux/m68k/get_error.c          \
        linux/m68k/get_scno.c           \
        linux/m68k/get_syscall_args.c   \
-       linux/m68k/get_syscall_result.c \
        linux/m68k/ioctls_arch0.h       \
        linux/m68k/ioctls_inc0.h        \
        linux/m68k/syscallent.h         \
index 8f0ab79ad67f1ff7de0e582121ac685c6dea7782..1198762b07b4dad6338485e3078a7e52816b17e6 100644 (file)
@@ -1,2 +1,4 @@
-static long m68k_d0;
-#define ARCH_PC_PEEK_ADDR (4 * PT_PC)
+static struct user_regs_struct m68k_regs;
+long *const m68k_usp_ptr = &m68k_regs.usp;
+#define ARCH_PC_REG m68k_regs.pc
+#define ARCH_REGS_FOR_GETREGS m68k_regs
diff --git a/linux/m68k/arch_regs.h b/linux/m68k/arch_regs.h
new file mode 100644 (file)
index 0000000..0829336
--- /dev/null
@@ -0,0 +1 @@
+extern long *const m68k_usp_ptr;
index 0011c1748f0e0fe56c7e837701fafd6af085f9e4..12e8bded6dc4c33893bc4c5f0503d1aae4519498 100644 (file)
@@ -3,10 +3,8 @@ arch_sigreturn(struct tcb *tcp)
 {
        long addr;
 
-       if (upeek(tcp->pid, 4*PT_USP, &addr) < 0)
-               return;
        /* Fetch pointer to struct sigcontext.  */
-       if (umove(tcp, addr + 2 * sizeof(int), &addr) < 0)
+       if (umove(tcp, *m68k_usp_ptr + 2 * sizeof(int), &addr) < 0)
                return;
 
        unsigned long mask[NSIG / 8 / sizeof(long)];
index a792835d4a19772ec0271d1281aa587d80346fdc..3ad51a08d3a4ead700c53288ee2be4aa3a09bf89 100644 (file)
@@ -1,10 +1,10 @@
 static void
 get_error(struct tcb *tcp, const bool check_errno)
 {
-       if (check_errno && is_negated_errno(m68k_d0)) {
+       if (check_errno && is_negated_errno(m68k_regs.d0)) {
                tcp->u_rval = -1;
-               tcp->u_error = -m68k_d0;
+               tcp->u_error = -m68k_regs.d0;
        } else {
-               tcp->u_rval = m68k_d0;
+               tcp->u_rval = m68k_regs.d0;
        }
 }
index 716a761618571d2a583e0d4cd23a4285f91b1273..829f3477cde6fbaca022cb2ba56cf5d71c990aab 100644 (file)
@@ -2,5 +2,6 @@
 static int
 arch_get_scno(struct tcb *tcp)
 {
-       return upeek(tcp->pid, 4 * PT_ORIG_D0, &tcp->scno) < 0 ? -1 : 1;
+       tcp->scno = m68k_regs.orig_d0;
+       return 1;
 }
index bc69a1957c12a484a75f4566a8438613daaee2b3..8ec3d28165e42f296e987bf64d76b58d8027e770 100644 (file)
@@ -2,10 +2,11 @@
 static int
 get_syscall_args(struct tcb *tcp)
 {
-       unsigned int i;
-
-       for (i = 0; i < tcp->s_ent->nargs; ++i)
-               if (upeek(tcp->pid, (i < 5 ? i : i + 2)*4, &tcp->u_arg[i]) < 0)
-                       return -1;
+       tcp->u_arg[0] = m68k_regs.d1;
+       tcp->u_arg[1] = m68k_regs.d2;
+       tcp->u_arg[2] = m68k_regs.d3;
+       tcp->u_arg[3] = m68k_regs.d4;
+       tcp->u_arg[4] = m68k_regs.d5;
+       tcp->u_arg[5] = m68k_regs.a0;
        return 1;
 }
diff --git a/linux/m68k/get_syscall_result.c b/linux/m68k/get_syscall_result.c
deleted file mode 100644 (file)
index 005cf60..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-static int
-get_syscall_result_regs(struct tcb *tcp)
-{
-       return upeek(tcp->pid, 4 * PT_D0, &m68k_d0) < 0 ? -1 : 0;
-}