On Fri, May 22, 2026 at 11:52:56AM -0700, Andrii Nakryiko wrote: > 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?)
hm, I think that would affect the subtest_optimized_attach usdt test which depend on this behaviour, will check jirka > > > 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 > >
