|
@@ -189,6 +189,10 @@ static inline void ptrace_init_task(struct task_struct *child, bool ptrace)
|
|
|
child->ptrace = current->ptrace;
|
|
|
__ptrace_link(child, current->parent);
|
|
|
}
|
|
|
+
|
|
|
+#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
|
|
+ atomic_set(&child->ptrace_bp_refcnt, 1);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -350,6 +354,13 @@ extern int task_current_syscall(struct task_struct *target, long *callno,
|
|
|
unsigned long args[6], unsigned int maxargs,
|
|
|
unsigned long *sp, unsigned long *pc);
|
|
|
|
|
|
-#endif
|
|
|
+#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
|
|
+extern int ptrace_get_breakpoints(struct task_struct *tsk);
|
|
|
+extern void ptrace_put_breakpoints(struct task_struct *tsk);
|
|
|
+#else
|
|
|
+static inline void ptrace_put_breakpoints(struct task_struct *tsk) { }
|
|
|
+#endif /* CONFIG_HAVE_HW_BREAKPOINT */
|
|
|
+
|
|
|
+#endif /* __KERNEL */
|
|
|
|
|
|
#endif
|