Merge tag 'mfd-for-linus-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd
[linux-2.6-microblaze.git] / include / linux / uprobes.h
index 60beb5d..0bdc72f 100644 (file)
@@ -92,6 +92,22 @@ struct uprobe_task {
        unsigned int                    depth;
 };
 
+struct return_instance {
+       struct uprobe           *uprobe;
+       unsigned long           func;
+       unsigned long           stack;          /* stack pointer */
+       unsigned long           orig_ret_vaddr; /* original return address */
+       bool                    chained;        /* true, if instance is nested */
+
+       struct return_instance  *next;          /* keep as stack */
+};
+
+enum rp_check {
+       RP_CHECK_CALL,
+       RP_CHECK_CHAIN_CALL,
+       RP_CHECK_RET,
+};
+
 struct xol_area;
 
 struct uprobes_state {
@@ -128,6 +144,7 @@ extern bool arch_uprobe_xol_was_trapped(struct task_struct *tsk);
 extern int  arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data);
 extern void arch_uprobe_abort_xol(struct arch_uprobe *aup, struct pt_regs *regs);
 extern unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs *regs);
+extern bool arch_uretprobe_is_alive(struct return_instance *ret, enum rp_check ctx, struct pt_regs *regs);
 extern bool arch_uprobe_ignore(struct arch_uprobe *aup, struct pt_regs *regs);
 extern void arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr,
                                         void *src, unsigned long len);