| /linux/arch/arm/probes/uprobes/ |
| H A D | core.c | 29 int set_swbp(struct arch_uprobe *auprobe, struct vm_area_struct *vma, in set_swbp() argument 32 return uprobe_write_opcode(auprobe, vma, vaddr, in set_swbp() 33 __opcode_to_mem_arm(auprobe->bpinsn), true); in set_swbp() 36 bool arch_uprobe_ignore(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_ignore() argument 38 if (!auprobe->asi.insn_check_cc(regs->ARM_cpsr)) { in arch_uprobe_ignore() 46 bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_skip_sstep() argument 50 if (!auprobe->simulate) in arch_uprobe_skip_sstep() 53 opcode = __mem_to_opcode_arm(*(unsigned int *) auprobe->insn); in arch_uprobe_skip_sstep() 55 auprobe->asi.insn_singlestep(opcode, &auprobe->asi, regs); in arch_uprobe_skip_sstep() 72 int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, in arch_uprobe_analyze_insn() argument [all …]
|
| H A D | actions-arm.c | 66 static void uprobe_set_pc(struct arch_uprobe *auprobe, in uprobe_set_pc() argument 70 u32 pcreg = auprobe->pcreg; in uprobe_set_pc() 76 static void uprobe_unset_pc(struct arch_uprobe *auprobe, in uprobe_unset_pc() argument 81 regs->uregs[auprobe->pcreg] = autask->backup; in uprobe_unset_pc() 84 static void uprobe_aluwrite_pc(struct arch_uprobe *auprobe, in uprobe_aluwrite_pc() argument 88 u32 pcreg = auprobe->pcreg; in uprobe_aluwrite_pc() 94 static void uprobe_write_pc(struct arch_uprobe *auprobe, in uprobe_write_pc() argument 98 u32 pcreg = auprobe->pcreg; in uprobe_write_pc() 108 struct arch_uprobe *auprobe = container_of(asi, struct arch_uprobe, in decode_pc_ro() local 114 reg = uprobes_substitute_pc(&auprobe->ixol[0], regs); in decode_pc_ro() [all …]
|
| /linux/arch/loongarch/kernel/ |
| H A D | uprobes.c | 10 int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, in arch_uprobe_analyze_insn() argument 19 for (idx = ARRAY_SIZE(auprobe->insn) - 1; idx >= 0; idx--) { in arch_uprobe_analyze_insn() 20 insn.word = auprobe->insn[idx]; in arch_uprobe_analyze_insn() 26 auprobe->ixol[0] = larch_insn_gen_nop(); in arch_uprobe_analyze_insn() 27 auprobe->simulate = true; in arch_uprobe_analyze_insn() 29 auprobe->ixol[0] = auprobe->insn[0]; in arch_uprobe_analyze_insn() 30 auprobe->simulate = false; in arch_uprobe_analyze_insn() 33 auprobe->ixol[1] = UPROBE_XOLBP_INSN; in arch_uprobe_analyze_insn() 38 int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_pre_xol() argument 49 int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_post_xol() argument [all …]
|
| /linux/arch/csky/kernel/probes/ |
| H A D | uprobes.c | 24 int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, in arch_uprobe_analyze_insn() argument 29 insn = *(probe_opcode_t *)(&auprobe->insn[0]); in arch_uprobe_analyze_insn() 31 auprobe->insn_size = is_insn32(insn) ? 4 : 2; in arch_uprobe_analyze_insn() 33 switch (csky_probe_decode_insn(&insn, &auprobe->api)) { in arch_uprobe_analyze_insn() 38 auprobe->simulate = true; in arch_uprobe_analyze_insn() 48 int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_pre_xol() argument 62 int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_post_xol() argument 69 instruction_pointer_set(regs, utask->vaddr + auprobe->insn_size); in arch_uprobe_post_xol() 84 bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_skip_sstep() argument 89 if (!auprobe->simulate) in arch_uprobe_skip_sstep() [all …]
|
| /linux/arch/riscv/kernel/probes/ |
| H A D | uprobes.c | 31 int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, in arch_uprobe_analyze_insn() argument 36 opcode = *(probe_opcode_t *)(&auprobe->insn[0]); in arch_uprobe_analyze_insn() 38 auprobe->insn_size = GET_INSN_LENGTH(opcode); in arch_uprobe_analyze_insn() 40 switch (riscv_probe_decode_insn(&opcode, &auprobe->api)) { in arch_uprobe_analyze_insn() 45 auprobe->simulate = true; in arch_uprobe_analyze_insn() 49 auprobe->simulate = false; in arch_uprobe_analyze_insn() 59 int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_pre_xol() argument 71 int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_post_xol() argument 78 instruction_pointer_set(regs, utask->vaddr + auprobe->insn_size); in arch_uprobe_post_xol() 91 bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_skip_sstep() argument [all …]
|
| /linux/arch/powerpc/kernel/ |
| H A D | uprobes.c | 38 int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, in arch_uprobe_analyze_insn() argument 45 ppc_inst_prefixed(ppc_inst_read(auprobe->insn)) && in arch_uprobe_analyze_insn() 51 if (!can_single_step(ppc_inst_val(ppc_inst_read(auprobe->insn)))) { in arch_uprobe_analyze_insn() 64 int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_pre_xol() argument 112 int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_post_xol() argument 127 regs_set_return_ip(regs, (unsigned long)ppc_inst_next((void *)utask->vaddr, auprobe->insn)); in arch_uprobe_post_xol() 168 void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_abort_xol() argument 182 bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_skip_sstep() argument 190 ret = emulate_step(regs, ppc_inst_read(auprobe->insn)); in arch_uprobe_skip_sstep()
|
| /linux/arch/arm/include/asm/ |
| H A D | uprobes.h | 33 void (*prehandler)(struct arch_uprobe *auprobe, 36 void (*posthandler)(struct arch_uprobe *auprobe,
|
| /linux/include/linux/ |
| H A D | uprobes.h | 151 struct arch_uprobe *auprobe; member 204 extern int uprobe_write_opcode(struct arch_uprobe *auprobe, struct vm_area_struct *vma, unsigned lo… 206 extern int uprobe_write(struct arch_uprobe *auprobe, struct vm_area_struct *vma, const unsigned lon… 244 extern void arch_uprobe_optimize(struct arch_uprobe *auprobe, unsigned long vaddr);
|
| /linux/kernel/events/ |
| H A D | uprobes.c | 489 int uprobe_write_opcode(struct arch_uprobe *auprobe, struct vm_area_struct *vma, in uprobe_write_opcode() argument 493 return uprobe_write(auprobe, vma, opcode_vaddr, &opcode, UPROBE_SWBP_INSN_SIZE, in uprobe_write_opcode() 497 int uprobe_write(struct arch_uprobe *auprobe, struct vm_area_struct *vma, in uprobe_write() argument 512 uprobe = container_of(auprobe, struct uprobe, arch); in uprobe_write() 612 int __weak set_swbp(struct arch_uprobe *auprobe, struct vm_area_struct *vma, in set_swbp() argument 615 return uprobe_write_opcode(auprobe, vma, vaddr, UPROBE_SWBP_INSN, true); in set_swbp() 627 int __weak set_orig_insn(struct arch_uprobe *auprobe, in set_orig_insn() argument 630 return uprobe_write_opcode(auprobe, vma, vaddr, in set_orig_insn() 631 *(uprobe_opcode_t *)&auprobe->insn, false); in set_orig_insn() 2552 utask->auprobe = &uprobe->arch; in handler_chain() [all …]
|
| /linux/arch/mips/kernel/ |
| H A D | uprobes.c | 243 bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_skip_sstep() argument
|