On 06/20, Andrii Nakryiko wrote: > > On Thu, Jun 20, 2024 at 12:40 PM Oleg Nesterov <oleg@xxxxxxxxxx> wrote: > > > > But I can't understand what does it do, it calls emit_break() and > > git grep -w emit_break finds nothing. > > > > It's DEF_EMIT_REG0I15_FORMAT(break, break_op) in > arch/loongarch/include/asm/inst.h > > A bunch of macro magic, but in the end it produces some constant > value, of course. I see, thanks! Then perhaps something like below? Oleg. --- x/arch/loongarch/include/asm/uprobes.h +++ x/arch/loongarch/include/asm/uprobes.h @@ -9,7 +9,7 @@ typedef u32 uprobe_opcode_t; #define MAX_UINSN_BYTES 8 #define UPROBE_XOL_SLOT_BYTES MAX_UINSN_BYTES -#define UPROBE_SWBP_INSN larch_insn_gen_break(BRK_UPROBE_BP) +#define UPROBE_SWBP_INSN (uprobe_opcode_t)(BRK_UPROBE_BP | (break_op << 15)) #define UPROBE_SWBP_INSN_SIZE LOONGARCH_INSN_SIZE #define UPROBE_XOLBP_INSN larch_insn_gen_break(BRK_UPROBE_XOLBP) --- x/arch/loongarch/kernel/uprobes.c +++ x/arch/loongarch/kernel/uprobes.c @@ -7,6 +7,13 @@ #define UPROBE_TRAP_NR UINT_MAX +static __init int __ck_insn(void) +{ + BUG_ON(UPROBE_SWBP_INSN != larch_insn_gen_break(BRK_UPROBE_BP)); + return 0; +} +late_initcall(__ck_insn); + int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long addr) {