}
}
-
-int asm_init_module_dependencies(void)
-{
- //No module dependencies
- return 0;
-}
-
void swap_register_undef_hook(struct undef_hook *hook)
{
__swap_register_undef_hook(hook);
.fn = kprobe_trap_handler
};
-int __init arch_init_kprobes (void)
+int arch_init_kprobes(void)
{
int ret = 0;
- if (arch_init_module_dependencies())
- {
- DBPRINTF ("Unable to init module dependencies\n");
- return -1;
- }
-
// Register hooks (kprobe_handler)
__swap_register_undef_hook = swap_ksyms("register_undef_hook");
if (__swap_register_undef_hook == NULL) {
void swap_register_undef_hook(struct undef_hook *hook);
void swap_unregister_undef_hook(struct undef_hook *hook);
+static inline int arch_init_module_deps(void)
+{
+ return 0;
+}
+
int arch_check_insn_arm(struct arch_specific_insn *ainsn);
int prep_pc_dep_insn_execbuf(kprobe_opcode_t *insns, kprobe_opcode_t insn, int uregs);
DECLARE_MOD_CB_DEP(flush_cache_page, \
void, struct vm_area_struct * vma, unsigned long page);
-int asm_init_module_dependencies()
+int arch_init_module_deps()
{
INIT_MOD_DEP_CB(flush_icache_range, r4k_flush_icache_range);
INIT_MOD_DEP_CB(flush_icache_page, r4k_flush_icache_page);
* 2006-2007 Ekaterina Gorelkina <e.gorelkina@samsung.com>: initial implementation for ARM/MIPS
* 2008-2009 Alexey Gerenkov <a.gerenkov@samsung.com> User-Space
* Probes initial implementation; Support x86/ARM/MIPS for both user-space and kernel space.
- * 2010 Ekaterina Gorelkina <e.gorelkina@samsung.com>: redesign module for separating core and arch parts
+ * 2010 Ekaterina Gorelkina <e.gorelkina@samsung.com>: redesign module for separating core and arch parts
*
*/
#ifndef KPROBES_RET_PROBE_TRAMP
#define UNDEF_INSTRUCTION 0x0000004d
-#endif
+#endif
#define MAX_INSN_SIZE 1
void gen_insn_execbuf_holder (void);
void patch_suspended_task_ret_addr(struct task_struct *p, struct kretprobe *rp);
+int arch_init_module_deps(void);
#endif /* _SRC_ASM_MIPS_KPROBES_H */
}
-int asm_init_module_dependencies()
+int arch_init_module_deps()
{
INIT_MOD_DEP_VAR(module_alloc, module_alloc);
INIT_MOD_DEP_VAR(module_free, module_free);
typedef kprobe_opcode_t (*entry_point_t) (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
+int arch_init_module_deps(void);
#endif /* _SRC_ASM_X86_KPROBES_H */
extern struct hlist_head kprobe_insn_pages;
-int arch_init_module_dependencies(void)
-{
- int ret;
-
- sched_addr = swap_ksyms("__switch_to");
- fork_addr = swap_ksyms("do_fork");
- exit_addr = swap_ksyms("do_exit");
-
- if ((void *)sched_addr == NULL ||
- (void *)fork_addr == NULL ||
- (void *)exit_addr == NULL) {
- return -ESRCH;
- }
-
- ret = init_module_dependencies();
- if (ret) {
- return ret;
- }
-
- return asm_init_module_dependencies();
-}
int longjmp_break_handler (struct kprobe *p, struct pt_regs *regs);
int trampoline_probe_handler (struct kprobe *p, struct pt_regs *regs);
-int arch_init_module_dependencies(void);
-int asm_init_module_dependencies(void);
-
#endif /* _DBI_ARCH_KPROBES_H */
return 0;
}
+static int init_module_deps(void)
+{
+ int ret;
+
+ sched_addr = swap_ksyms("__switch_to");
+ fork_addr = swap_ksyms("do_fork");
+ exit_addr = swap_ksyms("do_exit");
+
+ if (sched_addr == 0 || fork_addr == 0 || exit_addr == 0) {
+ return -ESRCH;
+ }
+
+ ret = init_module_dependencies();
+ if (ret) {
+ return ret;
+ }
+
+ return arch_init_module_deps();
+}
+
static int __init init_kprobes(void)
{
int i, err = 0;
}
atomic_set(&kprobe_count, 0);
+ err = init_module_deps();
+ if (err) {
+ return err;
+ }
+
err = arch_init_kprobes();
DBPRINTF ("init_kprobes: arch_init_kprobes - %d", err);