git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 1.9.5.x5
[linux-2.6.git]
/
arch
/
arm
/
kernel
/
ptrace.c
diff --git
a/arch/arm/kernel/ptrace.c
b/arch/arm/kernel/ptrace.c
index
4dcf99a
..
6dd2a7d
100644
(file)
--- a/
arch/arm/kernel/ptrace.c
+++ b/
arch/arm/kernel/ptrace.c
@@
-485,7
+485,7
@@
void ptrace_break(struct task_struct *tsk, struct pt_regs *regs)
info.si_signo = SIGTRAP;
info.si_errno = 0;
info.si_code = TRAP_BRKPT;
info.si_signo = SIGTRAP;
info.si_errno = 0;
info.si_code = TRAP_BRKPT;
- info.si_addr = (void *)instruction_pointer(regs);
+ info.si_addr = (void
__user
*)instruction_pointer(regs);
force_sig_info(SIGTRAP, &info, tsk);
}
force_sig_info(SIGTRAP, &info, tsk);
}
@@
-622,7
+622,7
@@
static int do_ptrace(int request, struct task_struct *child, long addr, long dat
ret = access_process_vm(child, addr, &tmp,
sizeof(unsigned long), 0);
if (ret == sizeof(unsigned long))
ret = access_process_vm(child, addr, &tmp,
sizeof(unsigned long), 0);
if (ret == sizeof(unsigned long))
- ret = put_user(tmp, (unsigned long *) data);
+ ret = put_user(tmp, (unsigned long
__user
*) data);
else
ret = -EIO;
break;
else
ret = -EIO;
break;
@@
-677,7
+677,7
@@
static int do_ptrace(int request, struct task_struct *child, long addr, long dat
/* make sure single-step breakpoint is gone. */
child->ptrace &= ~PT_SINGLESTEP;
ptrace_cancel_bpt(child);
/* make sure single-step breakpoint is gone. */
child->ptrace &= ~PT_SINGLESTEP;
ptrace_cancel_bpt(child);
- if (child->
state != TASK
_ZOMBIE) {
+ if (child->
exit_state != EXIT
_ZOMBIE) {
child->exit_code = SIGKILL;
wake_up_process(child);
}
child->exit_code = SIGKILL;
wake_up_process(child);
}
@@
-719,6
+719,11
@@
static int do_ptrace(int request, struct task_struct *child, long addr, long dat
ret = ptrace_setfpregs(child, (void __user *)data);
break;
ret = ptrace_setfpregs(child, (void __user *)data);
break;
+ case PTRACE_GET_THREAD_AREA:
+ ret = put_user(child->thread_info->tp_value,
+ (unsigned long __user *) data);
+ break;
+
default:
ret = ptrace_request(child, request, addr, data);
break;
default:
ret = ptrace_request(child, request, addr, data);
break;
@@
-794,11
+799,8
@@
asmlinkage void syscall_trace(int why, struct pt_regs *regs)
/* the 0x80 provides a way for the tracing parent to distinguish
between a syscall stop and SIGTRAP delivery */
/* the 0x80 provides a way for the tracing parent to distinguish
between a syscall stop and SIGTRAP delivery */
- current->exit_code = SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
- ? 0x80 : 0);
- current->state = TASK_STOPPED;
- notify_parent(current, SIGCHLD);
- schedule();
+ ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
+ ? 0x80 : 0));
/*
* this isn't the same as continuing with a signal, but it will do
* for normal use. strace only continues with a signal if the
/*
* this isn't the same as continuing with a signal, but it will do
* for normal use. strace only continues with a signal if the