Re: [PATCH bpf-next 4/4] selftests/bpf: validate jit behaviour for tail calls

Eduard Zingerman
2024-08-15T21:42:38Z

On Thu, 2024-08-15 at 14:15 -0700, Andrii Nakryiko wrote:

[...]

> > +/* program entry for main(), regular function prologue */
> > +__jit_x86(" endbr64")
> > +__jit_x86(" nopl (%rax,%rax)")
> > +__jit_x86(" xorq %rax, %rax")
> > +__jit_x86(" pushq %rbp")
> > +__jit_x86(" movq %rsp, %rbp")
>
> I'm a bit too lazy to fish it out of the code, so I'll just ask.
> Does matching of __jit_x86() string behave in the same way as __msg().
> I.e., there could be unexpected lines that would be skipped, as long
> as we find a match for each __jit_x86() one?

Yes, behaves same way as __msg().

> Isn't that a bit counter-intuitive and potentially dangerous behavior
> for checking disassembly? If my assumption is correct, maybe we should
> add some sort of `__jit_x86("...")` placeholder to explicitly mark
> that we allow some amount of lines to be skipped, but otherwise be
> strict and require matching line-by-line?

This is a valid concern.
What you suggest with "..." looks good.
Another option is to follow llvm-lit conventions and add
__jit_x86_next("<whatever>"), which would only match if pattern
is on line below any previous match.
(And later add __jit_x86_next_not, and make these *_not, *_next
variants accessible for every __msg-like macro).

Link: https://llvm.org/docs/CommandGuide/FileCheck.html#the-check-next-directive …