patch-2.4.20 linux-2.4.20/arch/ppc64/kernel/ptrace.c
Next file: linux-2.4.20/arch/ppc64/kernel/ptrace32.c
Previous file: linux-2.4.20/arch/ppc64/kernel/prom.c
Back to the patch index
Back to the overall index
- Lines: 154
- Date:
Thu Nov 28 15:53:11 2002
- Orig file:
linux-2.4.19/arch/ppc64/kernel/ptrace.c
- Orig date:
Fri Aug 2 17:39:43 2002
diff -urN linux-2.4.19/arch/ppc64/kernel/ptrace.c linux-2.4.20/arch/ppc64/kernel/ptrace.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/ppc/kernel/ptrace.c
+ * linux/arch/ppc64/kernel/ptrace.c
*
* PowerPC version
* Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
@@ -126,14 +126,9 @@
ret = ptrace_attach(child);
goto out_tsk;
}
- ret = -ESRCH;
- if (!(child->ptrace & PT_PTRACED))
- goto out_tsk;
- if (child->state != TASK_STOPPED) {
- if (request != PTRACE_KILL)
- goto out_tsk;
- }
- if (child->p_pptr != current)
+
+ ret = ptrace_check_attach(child, request == PTRACE_KILL);
+ if (ret < 0)
goto out_tsk;
switch (request) {
@@ -153,16 +148,17 @@
/* read the word at location addr in the USER area. */
case PTRACE_PEEKUSR: {
- unsigned long index, tmp;
+ unsigned long index;
+ unsigned long tmp;
ret = -EIO;
/* convert to index and check */
index = (unsigned long) addr >> 3;
- if ((addr & 7) || index > PT_FPSCR)
+ if ((addr & 7) || (index > PT_FPSCR))
break;
if (index < PT_FPR0) {
- tmp = get_reg(child, (int) index);
+ tmp = get_reg(child, (int)index);
} else {
if (child->thread.regs->msr & MSR_FP)
giveup_fpu(child);
@@ -176,7 +172,8 @@
case PTRACE_POKETEXT: /* write the word at location addr. */
case PTRACE_POKEDATA:
ret = 0;
- if (access_process_vm(child, addr, &data, sizeof(data), 1) == sizeof(data))
+ if (access_process_vm(child, addr, &data, sizeof(data), 1)
+ == sizeof(data))
break;
ret = -EIO;
break;
@@ -188,7 +185,7 @@
ret = -EIO;
/* convert to index and check */
index = (unsigned long) addr >> 3;
- if ((addr & 7) || index > PT_FPSCR)
+ if ((addr & 7) || (index > PT_FPSCR))
break;
if (index == PT_ORIG_R3)
@@ -221,11 +218,11 @@
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.
- */
+ /*
+ * 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->state == TASK_ZOMBIE) /* already dead */
@@ -254,56 +251,50 @@
ret = ptrace_detach(child, data);
break;
- case PPC_PTRACE_GETREGS:
- { /* Get GPRs 0 - 31. */
+ case PPC_PTRACE_GETREGS: { /* Get GPRs 0 - 31. */
u64 tmp;
u64 cntr;
+
ret = 0;
- for (cntr=0; cntr<32 && ret==0; ++cntr)
- {
+ for (cntr=0; cntr<32 && ret==0; ++cntr) {
tmp = ((u64*)child->thread.regs)[cntr];
ret = put_user(tmp, (u64*)(data+cntr));
}
break;
}
- case PPC_PTRACE_SETREGS:
- { /* Set GPRs 0 - 31. */
+ case PPC_PTRACE_SETREGS: { /* Set GPRs 0 - 31. */
u64 cntr;
+
ret = 0;
for (cntr=0; cntr<32 && ret==0; ++cntr)
- {
ret = put_reg(child, cntr, *(u64*)(data+cntr));
- }
break;
}
- case PPC_PTRACE_GETFPREGS:
- { /* Get FPRs 0 - 31. */
+ case PPC_PTRACE_GETFPREGS: { /* Get FPRs 0 - 31. */
u64 tmp;
u64 cntr;
+
ret = -EIO;
if (child->thread.regs->msr & MSR_FP)
giveup_fpu(child);
ret = 0;
- for (cntr=0; cntr<32 && ret==0; ++cntr)
- {
+ for (cntr=0; cntr<32 && ret==0; ++cntr) {
tmp = ((u64*)child->thread.fpr)[cntr];
ret = put_user(tmp, (u64*)(data+cntr));
}
break;
}
- case PPC_PTRACE_SETFPREGS:
- { /* Get FPRs 0 - 31. */
+ case PPC_PTRACE_SETFPREGS: { /* Get FPRs 0 - 31. */
u64 cntr;
+
ret = -EIO;
if (child->thread.regs->msr & MSR_FP)
giveup_fpu(child);
for (cntr=0; cntr<32; ++cntr)
- {
((u64*)child->thread.fpr)[cntr] = *(u64*)(data+cntr);
- }
ret = 0;
break;
}
@@ -338,4 +329,3 @@
current->exit_code = 0;
}
}
-
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)