kprobe_module_name=swap_kprobe.ko
make CROSS_COMPILE=${cross_compile} ARCH=${arch} -C ${kernel_dir} M=${kprobe_dir} \
- extra_cflags="-I${modules_dir} -I${kprobe_dir} -I${kprobe_arch_dir} -I${ksyms_dir}" \
+ extra_cflags="-Werror -I${modules_dir} -I${kprobe_dir} -I${kprobe_arch_dir} -I${ksyms_dir}" \
modules || exit 1
ks_manager_module_name=swap_ks_manager.ko
int arch_init_kprobes(void)
{
// Register hooks (kprobe_handler)
- __swap_register_undef_hook = swap_ksyms("register_undef_hook");
+ __swap_register_undef_hook = (void *)swap_ksyms("register_undef_hook");
if (__swap_register_undef_hook == NULL) {
printk("no register_undef_hook symbol found!\n");
return -1;
}
// Unregister hooks (kprobe_handler)
- __swap_unregister_undef_hook = swap_ksyms("unregister_undef_hook");
+ __swap_unregister_undef_hook = (void *)swap_ksyms("unregister_undef_hook");
if (__swap_unregister_undef_hook == NULL) {
printk("no unregister_undef_hook symbol found!\n");
return -1;
void __naked kretprobe_trampoline(void);
-static unsigned long swap_get_karg(struct pt_regs *regs, unsigned long n)
+static inline unsigned long swap_get_karg(struct pt_regs *regs, unsigned long n)
{
switch (n) {
case 0:
int arch_prepare_kprobe(struct kprobe *p, struct slot_manager *sm)
{
- kprobe_opcode_t insns[KPROBES_TRAMP_LEN];
-
int ret = 0;
if ((unsigned long) p->addr & 0x01)
kprobe_pre_entry_handler_t pre_entry;
entry_point_t entry;
- unsigned long addr, args[6];
+ unsigned long addr;
struct kprobe_ctlblk *kcb = get_kprobe_ctlblk ();
DBPRINTF ("setjmp_pre_handler %p:%d", p->addr, p->tgid);
trace_hardirqs_off();
#endif
if (pre_entry)
- p->ss_addr = pre_entry(jp->priv_arg, regs);
+ p->ss_addr = (kprobe_opcode_t *)pre_entry(jp->priv_arg, regs);
regs->EREG(ip) = (unsigned long)(jp->entry);
*/
static void resume_execution (struct kprobe *p, struct pt_regs *regs, struct kprobe_ctlblk *kcb)
{
- unsigned long *tos, tos_dword = 0;
+ unsigned long *tos;
unsigned long copy_eip = (unsigned long) p->ainsn.insn;
unsigned long orig_eip = (unsigned long) p->addr;
kprobe_opcode_t insns[2];
preempt_enable_no_resched ();
return 1;
}
+
+ return 0;
}
void arch_arm_kprobe (struct kprobe *p)
return 0;
}
-static unsigned long swap_get_karg(struct pt_regs *regs, unsigned long n)
+static inline unsigned long swap_get_karg(struct pt_regs *regs, unsigned long n)
{
switch (n) {
case 0:
__wrapper_module_free(ptr);
}
-static void init_sm()
+static void init_sm(void)
{
sm.slot_size = KPROBES_TRAMP_LEN;
sm.alloc = sm_alloc;
sm.free = sm_free;
- INIT_HLIST_NODE(&sm.page_list);
+ INIT_HLIST_HEAD(&sm.page_list);
}
-static void exit_sm()
+static void exit_sm(void)
{
/* FIXME: free */
}
unsigned long flags, orig_ret_address = 0;
unsigned long trampoline_address = (unsigned long)&kretprobe_trampoline;
- struct kretprobe *crp = NULL;
struct kprobe_ctlblk *kcb;
preempt_disable();