| /linux-6.15/arch/x86/kernel/ |
| H A D | uprobes.c | 284 ret = insn_decode(insn, auprobe->insn, sizeof(auprobe->insn), m); in uprobe_init_insn() 879 auprobe->branch.opc1 = opc1; in branch_setup_xol_ops() 964 auprobe->ops = &push_xol_ops; in push_setup_xol_ops() 1041 if (auprobe->ops->pre_xol) { in arch_uprobe_pre_xol() 1042 int err = auprobe->ops->pre_xol(auprobe, regs); in arch_uprobe_pre_xol() 1093 if (auprobe->ops->post_xol) { in arch_uprobe_post_xol() 1094 err = auprobe->ops->post_xol(auprobe, regs); in arch_uprobe_post_xol() 1161 if (auprobe->ops->abort) in arch_uprobe_abort_xol() 1162 auprobe->ops->abort(auprobe, regs); in arch_uprobe_abort_xol() 1173 if (auprobe->ops->emulate) in __skip_sstep() [all …]
|
| /linux-6.15/arch/arm/probes/uprobes/ |
| H A D | core.c | 32 return uprobe_write_opcode(auprobe, mm, vaddr, in set_swbp() 33 __opcode_to_mem_arm(auprobe->bpinsn)); in set_swbp() 50 if (!auprobe->simulate) in arch_uprobe_skip_sstep() 55 auprobe->asi.insn_singlestep(opcode, &auprobe->asi, regs); in arch_uprobe_skip_sstep() 84 auprobe->ixol[0] = __opcode_to_mem_arm(insn); in arch_uprobe_analyze_insn() 94 auprobe->simulate = true; in arch_uprobe_analyze_insn() 108 auprobe->bpinsn = bpinsn; in arch_uprobe_analyze_insn() 137 if (auprobe->prehandler) in arch_uprobe_pre_xol() 138 auprobe->prehandler(auprobe, &utask->autask, regs); in arch_uprobe_pre_xol() 156 if (auprobe->posthandler) in arch_uprobe_post_xol() [all …]
|
| H A D | actions-arm.c | 70 u32 pcreg = auprobe->pcreg; in uprobe_set_pc() 81 regs->uregs[auprobe->pcreg] = autask->backup; in uprobe_unset_pc() 88 u32 pcreg = auprobe->pcreg; in uprobe_aluwrite_pc() 98 u32 pcreg = auprobe->pcreg; in uprobe_write_pc() 121 auprobe->pcreg = reg; in decode_pc_ro() 122 auprobe->prehandler = uprobe_set_pc; in decode_pc_ro() 123 auprobe->posthandler = uprobe_unset_pc; in decode_pc_ro() 182 auprobe->pcreg = 14; in uprobe_decode_ldmstm() 185 auprobe->prehandler = uprobe_set_pc; in uprobe_decode_ldmstm() 187 auprobe->posthandler = uprobe_write_pc; in uprobe_decode_ldmstm() [all …]
|
| /linux-6.15/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 80 if (!auprobe->simulate) in arch_uprobe_skip_sstep() [all …]
|
| /linux-6.15/arch/csky/kernel/probes/ |
| H A D | uprobes.c | 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() 89 if (!auprobe->simulate) in arch_uprobe_skip_sstep() 92 insn = *(probe_opcode_t *)(&auprobe->insn[0]); in arch_uprobe_skip_sstep() 95 if (auprobe->api.handler) in arch_uprobe_skip_sstep() [all …]
|
| /linux-6.15/arch/riscv/kernel/probes/ |
| H A D | uprobes.c | 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 78 instruction_pointer_set(regs, utask->vaddr + auprobe->insn_size); in arch_uprobe_post_xol() 96 if (!auprobe->simulate) in arch_uprobe_skip_sstep() 99 insn = *(probe_opcode_t *)(&auprobe->insn[0]); in arch_uprobe_skip_sstep() 102 if (auprobe->api.handler) in arch_uprobe_skip_sstep() [all …]
|
| /linux-6.15/arch/arm64/kernel/probes/ |
| H A D | uprobes.c | 42 int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, in arch_uprobe_analyze_insn() argument 53 insn = le32_to_cpu(auprobe->insn); in arch_uprobe_analyze_insn() 55 switch (arm_probe_decode_insn(insn, &auprobe->api)) { in arch_uprobe_analyze_insn() 60 auprobe->simulate = true; in arch_uprobe_analyze_insn() 70 int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_pre_xol() argument 85 int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_post_xol() argument 116 if (!auprobe->simulate) in arch_uprobe_skip_sstep() 119 insn = le32_to_cpu(auprobe->insn); in arch_uprobe_skip_sstep() 122 if (auprobe->api.handler) in arch_uprobe_skip_sstep() 123 auprobe->api.handler(insn, addr, regs); in arch_uprobe_skip_sstep() [all …]
|
| /linux-6.15/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-6.15/arch/s390/kernel/ |
| H A D | uprobes.c | 25 return probe_is_prohibited_opcode(auprobe->insn); in arch_uprobe_analyze_insn() 35 auprobe->saved_per = psw_bits(regs->psw).per; in arch_uprobe_pre_xol() 36 auprobe->saved_int_code = regs->int_code; in arch_uprobe_pre_xol() 79 int fixup = probe_get_fixup_type(auprobe->insn); in arch_uprobe_post_xol() 84 psw_bits(regs->psw).per = auprobe->saved_per; in arch_uprobe_post_xol() 85 regs->int_code = auprobe->saved_int_code; in arch_uprobe_post_xol() 90 int reg = (auprobe->insn[0] & 0xf0) >> 4; in arch_uprobe_post_xol() 95 int ilen = insn_length(auprobe->insn[0] >> 8); in arch_uprobe_post_xol() 138 regs->int_code = auprobe->saved_int_code; in arch_uprobe_abort_xol() 271 insn = (struct insn_ril *) &auprobe->insn; in handle_insn_ril() [all …]
|
| /linux-6.15/arch/sparc/kernel/ |
| H A D | uprobes.c | 78 int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, in arch_uprobe_analyze_insn() argument 171 bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_skip_sstep() argument 176 if (auprobe->ixol == (1 << 24)) { in arch_uprobe_skip_sstep() 192 int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_pre_xol() argument 218 int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_post_xol() argument 222 u32 insn = auprobe->ixol; in arch_uprobe_post_xol() 295 void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) in arch_uprobe_abort_xol() argument
|
| /linux-6.15/arch/arm/include/asm/ |
| H A D | uprobes.h | 33 void (*prehandler)(struct arch_uprobe *auprobe, 36 void (*posthandler)(struct arch_uprobe *auprobe,
|
| /linux-6.15/include/linux/ |
| H A D | uprobes.h | 150 struct arch_uprobe *auprobe; member 197 extern int uprobe_write_opcode(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vad…
|
| /linux-6.15/kernel/events/ |
| H A D | uprobes.c | 484 int uprobe_write_opcode(struct arch_uprobe *auprobe, struct mm_struct *mm, in uprobe_write_opcode() argument 495 uprobe = container_of(auprobe, struct uprobe, arch); in uprobe_write_opcode() 599 int __weak set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) in set_swbp() argument 601 return uprobe_write_opcode(auprobe, mm, vaddr, UPROBE_SWBP_INSN); in set_swbp() 614 set_orig_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) in set_orig_insn() argument 616 return uprobe_write_opcode(auprobe, mm, vaddr, in set_orig_insn() 617 *(uprobe_opcode_t *)&auprobe->insn); in set_orig_insn() 2526 utask->auprobe = &uprobe->arch; in handler_chain() 2551 utask->auprobe = NULL; in handler_chain()
|
| /linux-6.15/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
|
| /linux-6.15/arch/x86/events/ |
| H A D | core.c | 2838 struct arch_uprobe *auprobe; in is_uprobe_at_func_entry() local 2843 auprobe = current->utask->auprobe; in is_uprobe_at_func_entry() 2844 if (!auprobe) in is_uprobe_at_func_entry() 2848 if (auprobe->insn[0] == 0x55) in is_uprobe_at_func_entry() 2852 if (user_64bit_mode(regs) && is_endbr((u32 *)auprobe->insn)) in is_uprobe_at_func_entry()
|