2013-01-15 03:46:38 +00:00
|
|
|
#include <linux/ftrace.h>
|
|
|
|
|
|
|
|
#define KPATCH_MAX_FUNCS 256
|
|
|
|
|
|
|
|
struct kpatch_func {
|
|
|
|
unsigned long old_func_addr;
|
|
|
|
unsigned long new_func_addr;
|
|
|
|
char *old_func_name;
|
|
|
|
unsigned long old_func_addr_end;
|
2013-01-18 18:31:14 +00:00
|
|
|
struct module *mod;
|
2013-01-15 03:46:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct kpatch_rela {
|
|
|
|
unsigned long dest; /* TODO share struct header file with elfdiff */
|
|
|
|
unsigned long src;
|
|
|
|
unsigned long type;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct kpatch_patch {
|
|
|
|
unsigned long new;
|
|
|
|
unsigned long orig; /* TODO eventually add name of symbol so we can verify it with kallsyms */
|
|
|
|
};
|
|
|
|
|
|
|
|
void kpatch_trampoline(unsigned long ip, unsigned long parent_ip,
|
|
|
|
struct ftrace_ops *op, struct pt_regs *regs);
|
|
|
|
int kpatch_register(struct module *mod, void *kpatch_relas,
|
|
|
|
void *kpatch_relas_end, void *kpatch_patches,
|
|
|
|
void *kpatch_patches_end);
|
|
|
|
int kpatch_unregister(struct module *mod);
|
|
|
|
void ftrace_hacks(void);
|