summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/asm-i386/smp.h1
-rw-r--r--include/asm-i386/user.h1
-rw-r--r--include/linux/binfmts.h1
-rw-r--r--include/linux/elfcore.h1
-rw-r--r--include/linux/init_task.h2
-rw-r--r--include/linux/mm.h6
-rw-r--r--include/linux/ptrace.h24
-rw-r--r--include/linux/sched.h2
8 files changed, 28 insertions, 10 deletions
diff --git a/include/asm-i386/smp.h b/include/asm-i386/smp.h
index a6d46dec1d09..a4420f576dcf 100644
--- a/include/asm-i386/smp.h
+++ b/include/asm-i386/smp.h
@@ -7,7 +7,6 @@
#ifndef __ASSEMBLY__
#include <linux/config.h>
#include <linux/threads.h>
-#include <linux/ptrace.h>
#endif
#ifdef CONFIG_X86_LOCAL_APIC
diff --git a/include/asm-i386/user.h b/include/asm-i386/user.h
index ddc06ea014a6..0e85d2a5e33a 100644
--- a/include/asm-i386/user.h
+++ b/include/asm-i386/user.h
@@ -2,7 +2,6 @@
#define _I386_USER_H
#include <asm/page.h>
-#include <linux/ptrace.h>
/* Core file format: The core file is written in such a way that gdb
can understand it and provide useful information to the user (under
linux we use the 'trad-core' bfd). There are quite a number of
diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h
index 314addb2329d..dfea0f47ed3e 100644
--- a/include/linux/binfmts.h
+++ b/include/linux/binfmts.h
@@ -1,7 +1,6 @@
#ifndef _LINUX_BINFMTS_H
#define _LINUX_BINFMTS_H
-#include <linux/ptrace.h>
#include <linux/capability.h>
/*
diff --git a/include/linux/elfcore.h b/include/linux/elfcore.h
index 3129abe828fc..ebf16207732d 100644
--- a/include/linux/elfcore.h
+++ b/include/linux/elfcore.h
@@ -4,7 +4,6 @@
#include <linux/types.h>
#include <linux/signal.h>
#include <linux/time.h>
-#include <linux/ptrace.h>
#include <linux/user.h>
struct elf_siginfo
diff --git a/include/linux/init_task.h b/include/linux/init_task.h
index d023d2360a71..80a57914bccc 100644
--- a/include/linux/init_task.h
+++ b/include/linux/init_task.h
@@ -54,6 +54,8 @@
.run_list = LIST_HEAD_INIT(tsk.run_list), \
.time_slice = HZ, \
.tasks = LIST_HEAD_INIT(tsk.tasks), \
+ .ptrace_children= LIST_HEAD_INIT(tsk.ptrace_children), \
+ .ptrace_list = LIST_HEAD_INIT(tsk.ptrace_list), \
.real_parent = &tsk, \
.parent = &tsk, \
.children = LIST_HEAD_INIT(tsk.children), \
diff --git a/include/linux/mm.h b/include/linux/mm.h
index c4395b9fe950..d731c02741b9 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -354,12 +354,6 @@ extern pte_t *FASTCALL(pte_alloc_map(struct mm_struct *mm, pmd_t *pmd, unsigned
extern int handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma, unsigned long address, int write_access);
extern int make_pages_present(unsigned long addr, unsigned long end);
extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write);
-extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char *dst, int len);
-extern int ptrace_writedata(struct task_struct *tsk, char * src, unsigned long dst, int len);
-extern int ptrace_attach(struct task_struct *tsk);
-extern int ptrace_detach(struct task_struct *, unsigned int);
-extern void ptrace_disable(struct task_struct *);
-extern int ptrace_check_attach(struct task_struct *task, int kill);
int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start,
int len, int write, int force, struct page **pages, struct vm_area_struct **vmas);
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
index 0a02879d546f..78512fa922b9 100644
--- a/include/linux/ptrace.h
+++ b/include/linux/ptrace.h
@@ -3,6 +3,8 @@
/* ptrace.h */
/* structs and defines to help the user use the ptrace system call. */
+#include <linux/compiler.h>
+
/* has the defines to get at the registers. */
#define PTRACE_TRACEME 0
@@ -23,4 +25,26 @@
#include <asm/ptrace.h>
+extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char *dst, int len);
+extern int ptrace_writedata(struct task_struct *tsk, char * src, unsigned long dst, int len);
+extern int ptrace_attach(struct task_struct *tsk);
+extern int ptrace_detach(struct task_struct *, unsigned int);
+extern void ptrace_disable(struct task_struct *);
+extern int ptrace_check_attach(struct task_struct *task, int kill);
+extern void __ptrace_link(struct task_struct *child,
+ struct task_struct *new_parent);
+extern void __ptrace_unlink(struct task_struct *child);
+
+static inline void ptrace_link(struct task_struct *child,
+ struct task_struct *new_parent)
+{
+ if (unlikely(child->ptrace))
+ __ptrace_link(child, new_parent);
+}
+static inline void ptrace_unlink(struct task_struct *child)
+{
+ if (unlikely(child->ptrace))
+ __ptrace_unlink(child);
+}
+
#endif
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 5713927c300a..5afeecb164b9 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -270,6 +270,8 @@ struct task_struct {
unsigned int time_slice, first_time_slice;
struct list_head tasks;
+ struct list_head ptrace_children;
+ struct list_head ptrace_list;
struct mm_struct *mm, *active_mm;
struct list_head local_pages;