git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-2.6 into test
[pandora-kernel.git]
/
arch
/
m68knommu
/
kernel
/
ptrace.c
diff --git
a/arch/m68knommu/kernel/ptrace.c
b/arch/m68knommu/kernel/ptrace.c
index
6fe7c38
..
6709fb7
100644
(file)
--- a/
arch/m68knommu/kernel/ptrace.c
+++ b/
arch/m68knommu/kernel/ptrace.c
@@
-112,9
+112,12
@@
void ptrace_disable(struct task_struct *child)
user_disable_single_step(child);
}
user_disable_single_step(child);
}
-long arch_ptrace(struct task_struct *child, long request, long addr, long data)
+long arch_ptrace(struct task_struct *child, long request,
+ unsigned long addr, unsigned long data)
{
int ret;
{
int ret;
+ int regno = addr >> 2;
+ unsigned long __user *datap = (unsigned long __user *) data;
switch (request) {
/* read the word at location addr in the USER area. */
switch (request) {
/* read the word at location addr in the USER area. */
@@
-122,53
+125,48
@@
long arch_ptrace(struct task_struct *child, long request, long addr, long data)
unsigned long tmp;
ret = -EIO;
unsigned long tmp;
ret = -EIO;
- if ((addr & 3) || addr < 0 ||
- addr > sizeof(struct user) - 3)
+ if ((addr & 3) || addr > sizeof(struct user) - 3)
break;
tmp = 0; /* Default return condition */
break;
tmp = 0; /* Default return condition */
- addr = addr >> 2; /* temporary hack. */
ret = -EIO;
ret = -EIO;
- if (
addr
< 19) {
- tmp = get_reg(child,
addr
);
- if (
addr
== PT_SR)
+ if (
regno
< 19) {
+ tmp = get_reg(child,
regno
);
+ if (
regno
== PT_SR)
tmp >>= 16;
tmp >>= 16;
- } else if (
addr >= 21 && addr
< 49) {
- tmp = child->thread.fp[
addr
- 21];
- } else if (
addr
== 49) {
+ } else if (
regno >= 21 && regno
< 49) {
+ tmp = child->thread.fp[
regno
- 21];
+ } else if (
regno
== 49) {
tmp = child->mm->start_code;
tmp = child->mm->start_code;
- } else if (
addr
== 50) {
+ } else if (
regno
== 50) {
tmp = child->mm->start_data;
tmp = child->mm->start_data;
- } else if (
addr
== 51) {
+ } else if (
regno
== 51) {
tmp = child->mm->end_code;
} else
break;
tmp = child->mm->end_code;
} else
break;
- ret = put_user(tmp,
(unsigned long *) data
);
+ ret = put_user(tmp,
datap
);
break;
}
case PTRACE_POKEUSR: /* write the word at location addr in the USER area */
ret = -EIO;
break;
}
case PTRACE_POKEUSR: /* write the word at location addr in the USER area */
ret = -EIO;
- if ((addr & 3) || addr < 0 ||
- addr > sizeof(struct user) - 3)
+ if ((addr & 3) || addr > sizeof(struct user) - 3)
break;
break;
- addr = addr >> 2; /* temporary hack. */
-
- if (addr == PT_SR) {
+ if (regno == PT_SR) {
data &= SR_MASK;
data <<= 16;
data |= get_reg(child, PT_SR) & ~(SR_MASK << 16);
}
data &= SR_MASK;
data <<= 16;
data |= get_reg(child, PT_SR) & ~(SR_MASK << 16);
}
- if (
addr
< 19) {
- if (put_reg(child,
addr
, data))
+ if (
regno
< 19) {
+ if (put_reg(child,
regno
, data))
break;
ret = 0;
break;
}
break;
ret = 0;
break;
}
- if (
addr >= 21 && addr
< 48)
+ if (
regno >= 21 && regno
< 48)
{
{
- child->thread.fp[
addr
- 21] = data;
+ child->thread.fp[
regno
- 21] = data;
ret = 0;
}
break;
ret = 0;
}
break;
@@
-180,11
+178,11
@@
long arch_ptrace(struct task_struct *child, long request, long addr, long data)
tmp = get_reg(child, i);
if (i == PT_SR)
tmp >>= 16;
tmp = get_reg(child, i);
if (i == PT_SR)
tmp >>= 16;
- if (put_user(tmp,
(unsigned long *) data
)) {
+ if (put_user(tmp,
datap
)) {
ret = -EFAULT;
break;
}
ret = -EFAULT;
break;
}
- data
+= sizeof(long)
;
+ data
p++
;
}
ret = 0;
break;
}
ret = 0;
break;
@@
-194,7
+192,7
@@
long arch_ptrace(struct task_struct *child, long request, long addr, long data)
int i;
unsigned long tmp;
for (i = 0; i < 19; i++) {
int i;
unsigned long tmp;
for (i = 0; i < 19; i++) {
- if (get_user(tmp,
(unsigned long *) data
)) {
+ if (get_user(tmp,
datap
)) {
ret = -EFAULT;
break;
}
ret = -EFAULT;
break;
}
@@
-204,7
+202,7
@@
long arch_ptrace(struct task_struct *child, long request, long addr, long data)
tmp |= get_reg(child, PT_SR) & ~(SR_MASK << 16);
}
put_reg(child, i, tmp);
tmp |= get_reg(child, PT_SR) & ~(SR_MASK << 16);
}
put_reg(child, i, tmp);
- data
+= sizeof(long)
;
+ data
p++
;
}
ret = 0;
break;
}
ret = 0;
break;
@@
-213,7
+211,7
@@
long arch_ptrace(struct task_struct *child, long request, long addr, long data)
#ifdef PTRACE_GETFPREGS
case PTRACE_GETFPREGS: { /* Get the child FPU state. */
ret = 0;
#ifdef PTRACE_GETFPREGS
case PTRACE_GETFPREGS: { /* Get the child FPU state. */
ret = 0;
- if (copy_to_user(
(void *)data
, &child->thread.fp,
+ if (copy_to_user(
datap
, &child->thread.fp,
sizeof(struct user_m68kfp_struct)))
ret = -EFAULT;
break;
sizeof(struct user_m68kfp_struct)))
ret = -EFAULT;
break;
@@
-223,7
+221,7
@@
long arch_ptrace(struct task_struct *child, long request, long addr, long data)
#ifdef PTRACE_SETFPREGS
case PTRACE_SETFPREGS: { /* Set the child FPU state. */
ret = 0;
#ifdef PTRACE_SETFPREGS
case PTRACE_SETFPREGS: { /* Set the child FPU state. */
ret = 0;
- if (copy_from_user(&child->thread.fp,
(void *)data
,
+ if (copy_from_user(&child->thread.fp,
datap
,
sizeof(struct user_m68kfp_struct)))
ret = -EFAULT;
break;
sizeof(struct user_m68kfp_struct)))
ret = -EFAULT;
break;
@@
-231,8
+229,7
@@
long arch_ptrace(struct task_struct *child, long request, long addr, long data)
#endif
case PTRACE_GET_THREAD_AREA:
#endif
case PTRACE_GET_THREAD_AREA:
- ret = put_user(task_thread_info(child)->tp_value,
- (unsigned long __user *)data);
+ ret = put_user(task_thread_info(child)->tp_value, datap);
break;
default:
break;
default: