Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e8440c14 authored by Josh Stone's avatar Josh Stone Committed by Oleg Nesterov
Browse files

uprobes: Add exports for module use



The original pull message for uprobes (commit 654443e2) noted:

  This tree includes uprobes support in 'perf probe' - but SystemTap
  (and other tools) can take advantage of user probe points as well.

In order to actually be usable in module-based tools like SystemTap, the
interface needs to be exported.  This patch first adds the obvious
exports for uprobe_register and uprobe_unregister.  Then it also adds
one for task_user_regset_view, which is necessary to get the correct
state of userspace registers.

Signed-off-by: default avatarJosh Stone <jistone@redhat.com>
Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
parent af4355e9
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@
#include <linux/pagemap.h>	/* read_mapping_page */
#include <linux/pagemap.h>	/* read_mapping_page */
#include <linux/slab.h>
#include <linux/slab.h>
#include <linux/sched.h>
#include <linux/sched.h>
#include <linux/export.h>
#include <linux/rmap.h>		/* anon_vma_prepare */
#include <linux/rmap.h>		/* anon_vma_prepare */
#include <linux/mmu_notifier.h>	/* set_pte_at_notify */
#include <linux/mmu_notifier.h>	/* set_pte_at_notify */
#include <linux/swap.h>		/* try_to_free_swap */
#include <linux/swap.h>		/* try_to_free_swap */
@@ -851,6 +852,7 @@ int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *
		goto retry;
		goto retry;
	return ret;
	return ret;
}
}
EXPORT_SYMBOL_GPL(uprobe_register);


/*
/*
 * uprobe_unregister - unregister a already registered probe.
 * uprobe_unregister - unregister a already registered probe.
@@ -871,6 +873,7 @@ void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consume
	up_write(&uprobe->register_rwsem);
	up_write(&uprobe->register_rwsem);
	put_uprobe(uprobe);
	put_uprobe(uprobe);
}
}
EXPORT_SYMBOL_GPL(uprobe_unregister);


static int unapply_uprobe(struct uprobe *uprobe, struct mm_struct *mm)
static int unapply_uprobe(struct uprobe *uprobe, struct mm_struct *mm)
{
{
+6 −0
Original line number Original line Diff line number Diff line
@@ -712,6 +712,12 @@ static int ptrace_regset(struct task_struct *task, int req, unsigned int type,
					     kiov->iov_len, kiov->iov_base);
					     kiov->iov_len, kiov->iov_base);
}
}


/*
 * This is declared in linux/regset.h and defined in machine-dependent
 * code.  We put the export here, near the primary machine-neutral use,
 * to ensure no machine forgets it.
 */
EXPORT_SYMBOL_GPL(task_user_regset_view);
#endif
#endif


int ptrace_request(struct task_struct *child, long request,
int ptrace_request(struct task_struct *child, long request,