Commit 8db3f525 authored by Petr Tesarik's avatar Petr Tesarik Committed by Tony Luck

[IA64] remove duplicate code from arch_ptrace()

Remove all code which does exactly the same thing as ptrace_request().
Signed-off-by: default avatarPetr Tesarik <ptesarik@suse.cz>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent eac738e6
...@@ -1454,6 +1454,35 @@ ptrace_setregs (struct task_struct *child, struct pt_all_user_regs __user *ppr) ...@@ -1454,6 +1454,35 @@ ptrace_setregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
return ret; return ret;
} }
void
user_enable_single_step (struct task_struct *child)
{
struct ia64_psr *child_psr = ia64_psr(task_pt_regs(child));
set_tsk_thread_flag(child, TIF_SINGLESTEP);
child_psr->ss = 1;
}
void
user_enable_block_step (struct task_struct *child)
{
struct ia64_psr *child_psr = ia64_psr(task_pt_regs(child));
set_tsk_thread_flag(child, TIF_SINGLESTEP);
child_psr->tb = 1;
}
void
user_disable_single_step (struct task_struct *child)
{
struct ia64_psr *child_psr = ia64_psr(task_pt_regs(child));
/* make sure the single step/taken-branch trap bits are not set: */
clear_tsk_thread_flag(child, TIF_SINGLESTEP);
child_psr->ss = 0;
child_psr->tb = 0;
}
/* /*
* Called by kernel/ptrace.c when detaching.. * Called by kernel/ptrace.c when detaching..
* *
...@@ -1528,73 +1557,6 @@ arch_ptrace (struct task_struct *child, long request, long addr, long data) ...@@ -1528,73 +1557,6 @@ arch_ptrace (struct task_struct *child, long request, long addr, long data)
ret = ptrace_request(child, PTRACE_SETSIGINFO, addr, data); ret = ptrace_request(child, PTRACE_SETSIGINFO, addr, data);
goto out_tsk; goto out_tsk;
case PTRACE_SYSCALL:
/* continue and stop at next (return from) syscall */
case PTRACE_CONT:
/* restart after signal. */
ret = -EIO;
if (!valid_signal(data))
goto out_tsk;
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;
/*
* Make sure the single step/taken-branch trap bits
* are not set:
*/
clear_tsk_thread_flag(child, TIF_SINGLESTEP);
ia64_psr(pt)->ss = 0;
ia64_psr(pt)->tb = 0;
wake_up_process(child);
ret = 0;
goto out_tsk;
case PTRACE_KILL:
/*
* 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.
*/
if (child->exit_state == EXIT_ZOMBIE)
/* already dead */
return 0;
child->exit_code = SIGKILL;
ptrace_disable(child);
wake_up_process(child);
ret = 0;
goto out_tsk;
case PTRACE_SINGLESTEP:
/* let child execute for one instruction */
case PTRACE_SINGLEBLOCK:
ret = -EIO;
if (!valid_signal(data))
goto out_tsk;
clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
set_tsk_thread_flag(child, TIF_SINGLESTEP);
if (request == PTRACE_SINGLESTEP) {
ia64_psr(pt)->ss = 1;
} else {
ia64_psr(pt)->tb = 1;
}
child->exit_code = data;
/* give it a chance to run. */
wake_up_process(child);
ret = 0;
goto out_tsk;
case PTRACE_DETACH:
/* detach a process that was attached. */
ret = ptrace_detach(child, data);
goto out_tsk;
case PTRACE_GETREGS: case PTRACE_GETREGS:
ret = ptrace_getregs(child, ret = ptrace_getregs(child,
(struct pt_all_user_regs __user *) data); (struct pt_all_user_regs __user *) data);
......
...@@ -312,6 +312,13 @@ struct switch_stack { ...@@ -312,6 +312,13 @@ struct switch_stack {
#define arch_ptrace_attach(child) \ #define arch_ptrace_attach(child) \
ptrace_attach_sync_user_rbs(child) ptrace_attach_sync_user_rbs(child)
#define arch_has_single_step() (1)
extern void user_enable_single_step(struct task_struct *);
extern void user_disable_single_step(struct task_struct *);
#define arch_has_block_step() (1)
extern void user_enable_block_step(struct task_struct *);
#endif /* !__KERNEL__ */ #endif /* !__KERNEL__ */
/* pt_all_user_regs is used for PTRACE_GETREGS PTRACE_SETREGS */ /* pt_all_user_regs is used for PTRACE_GETREGS PTRACE_SETREGS */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment