aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/kprobes-arm.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/kernel/kprobes-arm.c')
-rw-r--r--arch/arm/kernel/kprobes-arm.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/arm/kernel/kprobes-arm.c b/arch/arm/kernel/kprobes-arm.c
index 0262b29163d1..a1143e86a09a 100644
--- a/arch/arm/kernel/kprobes-arm.c
+++ b/arch/arm/kernel/kprobes-arm.c
@@ -1494,6 +1494,12 @@ space_cccc_11xx(kprobe_opcode_t insn, struct arch_specific_insn *asi)
1494 return INSN_REJECTED; 1494 return INSN_REJECTED;
1495} 1495}
1496 1496
1497static void __kprobes arm_singlestep(struct kprobe *p, struct pt_regs *regs)
1498{
1499 regs->ARM_pc += 4;
1500 p->ainsn.insn_handler(p, regs);
1501}
1502
1497/* Return: 1503/* Return:
1498 * INSN_REJECTED If instruction is one not allowed to kprobe, 1504 * INSN_REJECTED If instruction is one not allowed to kprobe,
1499 * INSN_GOOD If instruction is supported and uses instruction slot, 1505 * INSN_GOOD If instruction is supported and uses instruction slot,
@@ -1509,6 +1515,7 @@ space_cccc_11xx(kprobe_opcode_t insn, struct arch_specific_insn *asi)
1509enum kprobe_insn __kprobes 1515enum kprobe_insn __kprobes
1510arm_kprobe_decode_insn(kprobe_opcode_t insn, struct arch_specific_insn *asi) 1516arm_kprobe_decode_insn(kprobe_opcode_t insn, struct arch_specific_insn *asi)
1511{ 1517{
1518 asi->insn_singlestep = arm_singlestep;
1512 asi->insn_check_cc = kprobe_condition_checks[insn>>28]; 1519 asi->insn_check_cc = kprobe_condition_checks[insn>>28];
1513 asi->insn[1] = KPROBE_RETURN_INSTRUCTION; 1520 asi->insn[1] = KPROBE_RETURN_INSTRUCTION;
1514 1521