Commit 610f6e14 authored by Jiri Olsa's avatar Jiri Olsa Committed by Ingo Molnar
Browse files

uprobes/x86: Add support to emulate NOP instructions



Add support to emulate all NOP instructions as the original uprobe
instruction.

This change speeds up uprobe on top of all NOP instructions and is a
preparation for usdt probe optimization, that will be done on top of
NOP5 instructions.

With this change the usdt probe on top of NOP5s won't take the performance
hit compared to usdt probe on top of standard NOP instructions.

Suggested-by: default avatarOleg Nesterov <oleg@redhat.com>
Suggested-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Reviewed-by: default avatarOleg Nesterov <oleg@redhat.com>
Acked-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Cc: Alan Maguire <alan.maguire@oracle.com>
Cc: Hao Luo <haoluo@google.com>
Cc: John Fastabend <john.fastabend@gmail.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Song Liu <songliubraving@fb.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Yonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/r/20250414083647.1234007-1-jolsa@kernel.org
parent 4a3fd130
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -840,6 +840,11 @@ static int branch_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn)
	insn_byte_t p;
	int i;

	/* x86_nops[insn->length]; same as jmp with .offs = 0 */
	if (insn->length <= ASM_NOP_MAX &&
	    !memcmp(insn->kaddr, x86_nops[insn->length], insn->length))
		goto setup;

	switch (opc1) {
	case 0xeb:	/* jmp 8 */
	case 0xe9:	/* jmp 32 */