On Thu, May 21, 2026 at 5:45 AM Jiri Olsa <[email protected]> wrote: > > We now expect nop combo with 10 bytes nop instead of 5 bytes nop, > fixing has_nop_combo to reflect that. > > Fixes: 41a5c7df4466 ("libbpf: Add support to detect nop,nop5 instructions > combo for usdt probe") > Reviewed-by: Jakub Sitnicki <[email protected]> > Signed-off-by: Jiri Olsa <[email protected]> > --- > tools/lib/bpf/usdt.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/tools/lib/bpf/usdt.c b/tools/lib/bpf/usdt.c > index e3710933fd52..484a4354e82b 100644 > --- a/tools/lib/bpf/usdt.c > +++ b/tools/lib/bpf/usdt.c > @@ -305,7 +305,7 @@ struct usdt_manager *usdt_manager_new(struct bpf_object > *obj) > > /* > * Detect kernel support for uprobe() syscall, it's presence means we > can > - * take advantage of faster nop5 uprobe handling. > + * take advantage of faster nop10 uprobe handling. > * Added in: 56101b69c919 ("uprobes/x86: Add uprobe syscall to speed > up uprobe")
Would be nice to add commit that switches nop5 to nop10 (but until it lands hash is not stable, so, hmmm, maybe we'll land this patch separately? send it a bit later to bpf-next?) but otherwise lgtm Acked-by: Andrii Nakryiko <[email protected]> > */ > man->has_uprobe_syscall = kernel_supports(obj, FEAT_UPROBE_SYSCALL); > @@ -596,14 +596,14 @@ static int parse_usdt_spec(struct usdt_spec *spec, > const struct usdt_note *note, > #if defined(__x86_64__) > static bool has_nop_combo(int fd, long off) > { > - unsigned char nop_combo[6] = { > - 0x90, 0x0f, 0x1f, 0x44, 0x00, 0x00 /* nop,nop5 */ > + unsigned char nop_combo[11] = { > + 0x90, 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, > 0x00, > }; > - unsigned char buf[6]; > + unsigned char buf[11]; > > - if (pread(fd, buf, 6, off) != 6) > + if (pread(fd, buf, 11, off) != 11) > return false; > - return memcmp(buf, nop_combo, 6) == 0; > + return memcmp(buf, nop_combo, 11) == 0; > } > #else > static bool has_nop_combo(int fd, long off) > @@ -814,8 +814,8 @@ static int collect_usdt_targets(struct usdt_manager *man, > struct elf_fd *elf_fd, > memset(target, 0, sizeof(*target)); > > /* > - * We have uprobe syscall and usdt with nop,nop5 instructions > combo, > - * so we can place the uprobe directly on nop5 (+1) and get > this probe > + * We have uprobe syscall and usdt with nop,nop10 > instructions combo, > + * so we can place the uprobe directly on nop10 (+1) and get > this probe > * optimized. > */ > if (man->has_uprobe_syscall && has_nop_combo(elf_fd->fd, > usdt_rel_ip)) { > -- > 2.53.0 >
