sh: kprobes: __kprobes annotations and formatting cleanups.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
Родитель
734db3770d
Коммит
4eb5845d6c
|
@ -115,20 +115,20 @@ void __kprobes arch_remove_kprobe(struct kprobe *p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb)
|
static void __kprobes save_previous_kprobe(struct kprobe_ctlblk *kcb)
|
||||||
{
|
{
|
||||||
kcb->prev_kprobe.kp = kprobe_running();
|
kcb->prev_kprobe.kp = kprobe_running();
|
||||||
kcb->prev_kprobe.status = kcb->kprobe_status;
|
kcb->prev_kprobe.status = kcb->kprobe_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void restore_previous_kprobe(struct kprobe_ctlblk *kcb)
|
static void __kprobes restore_previous_kprobe(struct kprobe_ctlblk *kcb)
|
||||||
{
|
{
|
||||||
__get_cpu_var(current_kprobe) = kcb->prev_kprobe.kp;
|
__get_cpu_var(current_kprobe) = kcb->prev_kprobe.kp;
|
||||||
kcb->kprobe_status = kcb->prev_kprobe.status;
|
kcb->kprobe_status = kcb->prev_kprobe.status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void set_current_kprobe(struct kprobe *p, struct pt_regs *regs,
|
static void __kprobes set_current_kprobe(struct kprobe *p, struct pt_regs *regs,
|
||||||
struct kprobe_ctlblk *kcb)
|
struct kprobe_ctlblk *kcb)
|
||||||
{
|
{
|
||||||
__get_cpu_var(current_kprobe) = p;
|
__get_cpu_var(current_kprobe) = p;
|
||||||
}
|
}
|
||||||
|
@ -138,7 +138,7 @@ static inline void set_current_kprobe(struct kprobe *p, struct pt_regs *regs,
|
||||||
* on the next instruction, following branches. Two probes are set if the
|
* on the next instruction, following branches. Two probes are set if the
|
||||||
* branch is conditional.
|
* branch is conditional.
|
||||||
*/
|
*/
|
||||||
static inline void prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
|
static void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
kprobe_opcode_t *addr = NULL;
|
kprobe_opcode_t *addr = NULL;
|
||||||
saved_current_opcode.addr = (kprobe_opcode_t *) (regs->pc);
|
saved_current_opcode.addr = (kprobe_opcode_t *) (regs->pc);
|
||||||
|
@ -273,12 +273,12 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
|
||||||
/* handler has already set things up, so skip ss setup */
|
/* handler has already set things up, so skip ss setup */
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
ss_probe:
|
ss_probe:
|
||||||
prepare_singlestep(p, regs);
|
prepare_singlestep(p, regs);
|
||||||
kcb->kprobe_status = KPROBE_HIT_SS;
|
kcb->kprobe_status = KPROBE_HIT_SS;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
no_kprobe:
|
no_kprobe:
|
||||||
preempt_enable_no_resched();
|
preempt_enable_no_resched();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -358,7 +358,7 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
|
||||||
return orig_ret_address;
|
return orig_ret_address;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int post_kprobe_handler(struct pt_regs *regs)
|
static int __kprobes post_kprobe_handler(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct kprobe *cur = kprobe_running();
|
struct kprobe *cur = kprobe_running();
|
||||||
struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
|
struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
|
||||||
|
@ -391,14 +391,15 @@ static inline int post_kprobe_handler(struct pt_regs *regs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*Restore back the original saved kprobes variables and continue. */
|
/* Restore back the original saved kprobes variables and continue. */
|
||||||
if (kcb->kprobe_status == KPROBE_REENTER) {
|
if (kcb->kprobe_status == KPROBE_REENTER) {
|
||||||
restore_previous_kprobe(kcb);
|
restore_previous_kprobe(kcb);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
reset_current_kprobe();
|
reset_current_kprobe();
|
||||||
|
|
||||||
out:
|
out:
|
||||||
preempt_enable_no_resched();
|
preempt_enable_no_resched();
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -463,6 +464,7 @@ int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr)
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -498,8 +500,8 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
|
||||||
ret = NOTIFY_STOP;
|
ret = NOTIFY_STOP;
|
||||||
} else {
|
} else {
|
||||||
p = __get_cpu_var(current_kprobe);
|
p = __get_cpu_var(current_kprobe);
|
||||||
if (p->break_handler
|
if (p->break_handler &&
|
||||||
&& p->break_handler(p, args->regs))
|
p->break_handler(p, args->regs))
|
||||||
ret = NOTIFY_STOP;
|
ret = NOTIFY_STOP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -542,25 +544,26 @@ void __kprobes jprobe_return(void)
|
||||||
int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
|
int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
|
struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
|
||||||
u8 *addr = (u8 *) regs->pc;
|
|
||||||
unsigned long stack_addr = kcb->jprobe_saved_r15;
|
unsigned long stack_addr = kcb->jprobe_saved_r15;
|
||||||
|
u8 *addr = (u8 *)regs->pc;
|
||||||
|
|
||||||
if ((addr >= (u8 *) jprobe_return)
|
if ((addr >= (u8 *)jprobe_return) &&
|
||||||
&& (addr <= (u8 *) jprobe_return_end)) {
|
(addr <= (u8 *)jprobe_return_end)) {
|
||||||
*regs = kcb->jprobe_saved_regs;
|
*regs = kcb->jprobe_saved_regs;
|
||||||
|
|
||||||
memcpy((kprobe_opcode_t *) stack_addr, kcb->jprobes_stack,
|
memcpy((kprobe_opcode_t *)stack_addr, kcb->jprobes_stack,
|
||||||
MIN_STACK_SIZE(stack_addr));
|
MIN_STACK_SIZE(stack_addr));
|
||||||
|
|
||||||
kcb->kprobe_status = KPROBE_HIT_SS;
|
kcb->kprobe_status = KPROBE_HIT_SS;
|
||||||
preempt_enable_no_resched();
|
preempt_enable_no_resched();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct kprobe trampoline_p = {
|
static struct kprobe trampoline_p = {
|
||||||
.addr = (kprobe_opcode_t *) &kretprobe_trampoline,
|
.addr = (kprobe_opcode_t *)&kretprobe_trampoline,
|
||||||
.pre_handler = trampoline_probe_handler
|
.pre_handler = trampoline_probe_handler
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче