Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 187240
b: refs/heads/master
c: 1d83931
h: refs/heads/master
v: v3
  • Loading branch information
Christoph Hellwig authored and Linus Torvalds committed Mar 12, 2010
1 parent 7f33cb5 commit 07d74b9
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 47 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 440e6ca79aebdc274ce4c625a6f42c8bf3c7bc91
refs/heads/master: 1d8393171b1f6c30a889fd7cb16fc193f689923c
2 changes: 2 additions & 0 deletions trunk/arch/avr32/include/asm/ptrace.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,8 @@ struct pt_regs {

#include <asm/ocd.h>

#define arch_has_single_step() (1)

#define arch_ptrace_attach(child) ocd_enable(child)

#define user_mode(regs) (((regs)->sr & MODE_MASK) == MODE_USER)
Expand Down
53 changes: 7 additions & 46 deletions trunk/arch/avr32/kernel/ptrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ static struct pt_regs *get_user_regs(struct task_struct *tsk)
THREAD_SIZE - sizeof(struct pt_regs));
}

static void ptrace_single_step(struct task_struct *tsk)
static void user_enable_single_step(struct task_struct *tsk)
{
pr_debug("ptrace_single_step: pid=%u, PC=0x%08lx, SR=0x%08lx\n",
pr_debug("user_enable_single_step: pid=%u, PC=0x%08lx, SR=0x%08lx\n",
tsk->pid, task_pt_regs(tsk)->pc, task_pt_regs(tsk)->sr);

/*
Expand All @@ -49,6 +49,11 @@ static void ptrace_single_step(struct task_struct *tsk)
set_tsk_thread_flag(tsk, TIF_SINGLE_STEP);
}

void user_disable_single_step(struct task_struct *child)
{
/* XXX(hch): a no-op here seems wrong.. */
}

/*
* Called by kernel/ptrace.c when detaching
*
Expand Down Expand Up @@ -167,50 +172,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
ret = ptrace_write_user(child, addr, data);
break;

/* continue and stop at next (return from) syscall */
case PTRACE_SYSCALL:
/* restart after signal */
case PTRACE_CONT:
ret = -EIO;
if (!valid_signal(data))
break;
if (request == PTRACE_SYSCALL)
set_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
else
clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
child->exit_code = data;
/* XXX: Are we sure no breakpoints are active here? */
wake_up_process(child);
ret = 0;
break;

/*
* Make the child exit. Best I can do is send it a
* SIGKILL. Perhaps it should be put in the status that it
* wants to exit.
*/
case PTRACE_KILL:
ret = 0;
if (child->exit_state == EXIT_ZOMBIE)
break;
child->exit_code = SIGKILL;
wake_up_process(child);
break;

/*
* execute single instruction.
*/
case PTRACE_SINGLESTEP:
ret = -EIO;
if (!valid_signal(data))
break;
clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
ptrace_single_step(child);
child->exit_code = data;
wake_up_process(child);
ret = 0;
break;

case PTRACE_GETREGS:
ret = ptrace_getregs(child, (void __user *)data);
break;
Expand Down

0 comments on commit 07d74b9

Please sign in to comment.