patch-2.4.6 linux/arch/mips/kernel/ptrace.c
Next file: linux/arch/mips/kernel/r2300_fpu.S
Previous file: linux/arch/mips/kernel/process.c
Back to the patch index
Back to the overall index
- Lines: 54
- Date:
Mon Jul 2 13:56:40 2001
- Orig file:
v2.4.5/linux/arch/mips/kernel/ptrace.c
- Orig date:
Fri Apr 13 20:26:07 2001
diff -u --recursive --new-file v2.4.5/linux/arch/mips/kernel/ptrace.c linux/arch/mips/kernel/ptrace.c
@@ -207,7 +207,7 @@
case PTRACE_POKEUSR: {
struct pt_regs *regs;
- int res = 0;
+ res = 0;
regs = (struct pt_regs *) ((unsigned long) child +
KERNEL_STACK_SIZE - 32 - sizeof(struct pt_regs));
@@ -289,7 +289,7 @@
*/
case PTRACE_KILL:
res = 0;
- if (child->state != TASK_ZOMBIE) /* already dead */
+ if (child->state == TASK_ZOMBIE) /* already dead */
break;
child->exit_code = SIGKILL;
wake_up_process(child);
@@ -299,7 +299,7 @@
res = -EIO;
if ((unsigned long) data > _NSIG)
break;
- child->ptrace &= ~(PT_PTRACED|PT_TRACESYS);
+ child->ptrace = 0;
child->exit_code = data;
write_lock_irq(&tasklist_lock);
REMOVE_LINKS(child);
@@ -310,6 +310,14 @@
res = 0;
break;
+ case PTRACE_SETOPTIONS:
+ if (data & PTRACE_O_TRACESYSGOOD)
+ child->ptrace |= PT_TRACESYSGOOD;
+ else
+ child->ptrace &= ~PT_TRACESYSGOOD;
+ res = 0;
+ break;
+
default:
res = -EIO;
goto out;
@@ -326,7 +334,10 @@
if ((current->ptrace & (PT_PTRACED|PT_TRACESYS))
!= (PT_PTRACED|PT_TRACESYS))
return;
- current->exit_code = SIGTRAP;
+ /* 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();
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)