From ddd4060fa94c1ce1a6e50aa7193ee7ad5381d331 Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Wed, 10 Mar 2010 15:22:52 -0800 Subject: [PATCH] --- yaml --- r: 187241 b: refs/heads/master c: 857fb252a1858ccded2e31ee98c6c0ab79c07999 h: refs/heads/master i: 187239: 7f33cb588b8d03c23de1498ec81498a5134d07c0 v: v3 --- [refs] | 2 +- trunk/arch/h8300/include/asm/ptrace.h | 2 + trunk/arch/h8300/kernel/ptrace.c | 52 +++---------------- .../h8300/platform/h8300h/ptrace_h8300h.c | 6 +-- trunk/arch/h8300/platform/h8s/ptrace_h8s.c | 4 +- 5 files changed, 14 insertions(+), 52 deletions(-) diff --git a/[refs] b/[refs] index 470cc9a99dd0..0c0471ee4964 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1d8393171b1f6c30a889fd7cb16fc193f689923c +refs/heads/master: 857fb252a1858ccded2e31ee98c6c0ab79c07999 diff --git a/trunk/arch/h8300/include/asm/ptrace.h b/trunk/arch/h8300/include/asm/ptrace.h index c2e05e4b512e..d866c0efba87 100644 --- a/trunk/arch/h8300/include/asm/ptrace.h +++ b/trunk/arch/h8300/include/asm/ptrace.h @@ -55,6 +55,8 @@ struct pt_regs { /* Find the stack offset for a register, relative to thread.esp0. */ #define PT_REG(reg) ((long)&((struct pt_regs *)0)->reg) +#define arch_has_single_step() (1) + #define user_mode(regs) (!((regs)->ccr & PS_S)) #define instruction_pointer(regs) ((regs)->pc) #define profile_pc(regs) instruction_pointer(regs) diff --git a/trunk/arch/h8300/kernel/ptrace.c b/trunk/arch/h8300/kernel/ptrace.c index 04bb9dd194ec..df114122ebdf 100644 --- a/trunk/arch/h8300/kernel/ptrace.c +++ b/trunk/arch/h8300/kernel/ptrace.c @@ -34,8 +34,11 @@ /* cpu depend functions */ extern long h8300_get_reg(struct task_struct *task, int regno); extern int h8300_put_reg(struct task_struct *task, int regno, unsigned long data); -extern void h8300_disable_trace(struct task_struct *child); -extern void h8300_enable_trace(struct task_struct *child); + + +void user_disable_single_step(struct task_struct *child) +{ +} /* * does not yet catch signals sent when the child dies. @@ -44,7 +47,7 @@ extern void h8300_enable_trace(struct task_struct *child); void ptrace_disable(struct task_struct *child) { - h8300_disable_trace(child); + user_disable_single_step(child); } long arch_ptrace(struct task_struct *child, long request, long addr, long data) @@ -107,49 +110,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) } ret = -EIO; break ; - case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ - case PTRACE_CONT: { /* restart after signal. */ - 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; - wake_up_process(child); - /* make sure the single step bit is not set. */ - h8300_disable_trace(child); - ret = 0; - } - -/* - * 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) /* already dead */ - break; - child->exit_code = SIGKILL; - h8300_disable_trace(child); - wake_up_process(child); - break; - } - - case PTRACE_SINGLESTEP: { /* set the trap flag. */ - ret = -EIO; - if (!valid_signal(data)) - break; - clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); - child->exit_code = data; - h8300_enable_trace(child); - wake_up_process(child); - ret = 0; - break; - } case PTRACE_GETREGS: { /* Get all gp regs from the child. */ int i; diff --git a/trunk/arch/h8300/platform/h8300h/ptrace_h8300h.c b/trunk/arch/h8300/platform/h8300h/ptrace_h8300h.c index 746b1ae672a1..4f1ed0279633 100644 --- a/trunk/arch/h8300/platform/h8300h/ptrace_h8300h.c +++ b/trunk/arch/h8300/platform/h8300h/ptrace_h8300h.c @@ -60,7 +60,7 @@ int h8300_put_reg(struct task_struct *task, int regno, unsigned long data) } /* disable singlestep */ -void h8300_disable_trace(struct task_struct *child) +void user_disable_single_step(struct task_struct *child) { if((long)child->thread.breakinfo.addr != -1L) { *child->thread.breakinfo.addr = child->thread.breakinfo.inst; @@ -264,7 +264,7 @@ static unsigned short *getnextpc(struct task_struct *child, unsigned short *pc) /* Set breakpoint(s) to simulate a single step from the current PC. */ -void h8300_enable_trace(struct task_struct *child) +void user_enable_single_step(struct task_struct *child) { unsigned short *nextpc; nextpc = getnextpc(child,(unsigned short *)h8300_get_reg(child, PT_PC)); @@ -276,7 +276,7 @@ void h8300_enable_trace(struct task_struct *child) asmlinkage void trace_trap(unsigned long bp) { if ((unsigned long)current->thread.breakinfo.addr == bp) { - h8300_disable_trace(current); + user_disable_single_step(current); force_sig(SIGTRAP,current); } else force_sig(SIGILL,current); diff --git a/trunk/arch/h8300/platform/h8s/ptrace_h8s.c b/trunk/arch/h8300/platform/h8s/ptrace_h8s.c index e8cd46f9255c..c058ab1a8495 100644 --- a/trunk/arch/h8300/platform/h8s/ptrace_h8s.c +++ b/trunk/arch/h8300/platform/h8s/ptrace_h8s.c @@ -65,13 +65,13 @@ int h8300_put_reg(struct task_struct *task, int regno, unsigned long data) } /* disable singlestep */ -void h8300_disable_trace(struct task_struct *child) +void user_disable_single_step(struct task_struct *child) { *(unsigned short *)(child->thread.esp0 + h8300_register_offset[PT_EXR]) &= ~EXR_TRACE; } /* enable singlestep */ -void h8300_enable_trace(struct task_struct *child) +void user_enable_single_step(struct task_struct *child) { *(unsigned short *)(child->thread.esp0 + h8300_register_offset[PT_EXR]) |= EXR_TRACE; }