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
> >

Reply via email to