Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0ac15559 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Linus Torvalds
Browse files

m32r: convert to generic sys_ptrace



Convert m32r to the generic sys_ptrace.  The conversion requires an
architecture hook after ptrace_attach which this patch adds.  The hook
will also be needed for a conersion of ia64 to the generic ptrace code.

Thanks to Hirokazu Takata for fixing a bug in the first version of this
code.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Cc: Hirokazu Takata <takata@linux-m32r.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent dab8f496
Loading
Loading
Loading
Loading
+3 −39
Original line number Diff line number Diff line
@@ -570,7 +570,7 @@ withdraw_debug_trap(struct pt_regs *regs)
	}
}

static void
void
init_debug_traps(struct task_struct *child)
{
	struct debug_trap *p = &child->thread.debug_trap;
@@ -593,8 +593,8 @@ void ptrace_disable(struct task_struct *child)
	/* nothing to do.. */
}

static int
do_ptrace(long request, struct task_struct *child, long addr, long data)
long
arch_ptrace(struct task_struct *child, long request, long addr, long data)
{
	int ret;

@@ -720,42 +720,6 @@ do_ptrace(long request, struct task_struct *child, long addr, long data)
	return ret;
}

asmlinkage long sys_ptrace(long request, long pid, long addr, long data)
{
	struct task_struct *child;
	int ret;

	lock_kernel();
	if (request == PTRACE_TRACEME) {
		ret = ptrace_traceme();
		goto out;
	}

	child = ptrace_get_task_struct(pid);
	if (IS_ERR(child)) {
		ret = PTR_ERR(child);
		goto out;
	}

	if (request == PTRACE_ATTACH) {
		ret = ptrace_attach(child);
		if (ret == 0)
			init_debug_traps(child);
		goto out_tsk;
	}

	ret = ptrace_check_attach(child, request == PTRACE_KILL);
	if (ret == 0)
		ret = do_ptrace(request, child, addr, data);

out_tsk:
	put_task_struct(child);
out:
	unlock_kernel();

	return ret;
}

/* notification of system call entry/exit
 * - triggered by current->work.syscall_trace
 */
+4 −1
Original line number Diff line number Diff line
@@ -120,7 +120,10 @@ struct pt_regs {

#include <asm/m32r.h>		/* M32R_PSW_BSM, M32R_PSW_BPM */

#define __ARCH_SYS_PTRACE	1
struct task_struct;
extern void init_debug_traps(struct task_struct *);
#define arch_ptrace_attach(child) \
	init_debug_traps(child)

#if defined(CONFIG_ISA_M32R2) || defined(CONFIG_CHIP_VDEC2)
#define user_mode(regs) ((M32R_PSW_BPM & (regs)->psw) != 0)
+10 −0
Original line number Diff line number Diff line
@@ -453,6 +453,10 @@ struct task_struct *ptrace_get_task_struct(pid_t pid)
	return child;
}

#ifndef arch_ptrace_attach
#define arch_ptrace_attach(child)	do { } while (0)
#endif

#ifndef __ARCH_SYS_PTRACE
asmlinkage long sys_ptrace(long request, long pid, long addr, long data)
{
@@ -476,6 +480,12 @@ asmlinkage long sys_ptrace(long request, long pid, long addr, long data)

	if (request == PTRACE_ATTACH) {
		ret = ptrace_attach(child);
		/*
		 * Some architectures need to do book-keeping after
		 * a ptrace attach.
		 */
		if (!ret)
			arch_ptrace_attach(child);
		goto out_put_task_struct;
	}