mbox series

[bpf-next,v3,0/8] __jited test tag to check disassembly after jit

Message ID 20240820102357.3372779-1-eddyz87@gmail.com (mailing list archive)
Headers show
Series __jited test tag to check disassembly after jit | expand

Message

Eduard Zingerman Aug. 20, 2024, 10:23 a.m. UTC
Some of the logic in the BPF jits might be non-trivial.
It might be useful to allow testing this logic by comparing
generated native code with expected code template.
This patch set adds a macro __jited() that could be used for
test_loader based tests in a following manner:

    SEC("tp")
    __arch_x86_64
    __jited("   endbr64")
    __jited("   nopl    (%rax,%rax)")
    __jited("   xorq    %rax, %rax")
    ...
    __naked void some_test(void) { ... }

Also add a test for jit code generated for tail calls handling to
demonstrate the feature.

The feature uses LLVM libraries to do the disassembly.
At selftests compilation time Makefile detects if these libraries are
available. When libraries are not available tests using __jit_x86()
are skipped. 
Current CI environment does not include llvm development libraries,
but changes to add these are trivial.

This was previously discussed here:
https://lore.kernel.org/bpf/20240718205158.3651529-1-yonghong.song@linux.dev/

Patch-set includes a few auxiliary steps:
- patches #2 and #3 fix a few bugs in test_loader behaviour;
- patch #4 replaces __regex macro with ability to specify regular
  expressions in __msg and __xlated using "{{" "}}" escapes;
- patch #8 updates __xlated to match disassembly lines consequently,
  same way as __jited does.

Changes v2->v3:
- changed macro name from __jit_x86 to __jited with __arch_* to
  specify disassembly arch (Yonghong);
- __jited matches disassembly lines consequently with "..."
  allowing to skip some number of lines (Andrii);
- __xlated matches disassembly lines consequently, same as __jited;
- "{{...}}" regex brackets instead of __regex macro;
- bug fixes for old commits.

Changes v1->v2:
- stylistic changes suggested by Yonghong;
- fix for -Wformat-truncation related warning when compiled with
  llvm15 (Yonghong).

v1: https://lore.kernel.org/bpf/20240809010518.1137758-1-eddyz87@gmail.com/
v2: https://lore.kernel.org/bpf/20240815205449.242556-1-eddyz87@gmail.com/

Eduard Zingerman (8):
  selftests/bpf: less spam in the log for message matching
  selftests/bpf: correctly move 'log' upon successful match
  selftests/bpf: fix to avoid __msg tag de-duplication by clang
  selftests/bpf: replace __regex macro with "{{...}}" patterns
  selftests/bpf: utility function to get program disassembly after jit
  selftests/bpf: __jited test tag to check disassembly after jit
  selftests/bpf: validate jit behaviour for tail calls
  selftests/bpf: validate __xlated same way as __jited

 tools/testing/selftests/bpf/.gitignore        |   1 +
 tools/testing/selftests/bpf/Makefile          |  48 ++-
 .../selftests/bpf/jit_disasm_helpers.c        | 234 ++++++++++++
 .../selftests/bpf/jit_disasm_helpers.h        |  10 +
 .../selftests/bpf/prog_tests/verifier.c       |   2 +
 tools/testing/selftests/bpf/progs/bpf_misc.h  |  55 ++-
 .../testing/selftests/bpf/progs/dynptr_fail.c |   6 +-
 .../testing/selftests/bpf/progs/rbtree_fail.c |   2 +-
 .../bpf/progs/refcounted_kptr_fail.c          |   4 +-
 .../selftests/bpf/progs/verifier_nocsr.c      |  53 ++-
 .../selftests/bpf/progs/verifier_spill_fill.c |   8 +-
 .../bpf/progs/verifier_tailcall_jit.c         | 105 ++++++
 tools/testing/selftests/bpf/test_loader.c     | 357 +++++++++++++-----
 13 files changed, 772 insertions(+), 113 deletions(-)
 create mode 100644 tools/testing/selftests/bpf/jit_disasm_helpers.c
 create mode 100644 tools/testing/selftests/bpf/jit_disasm_helpers.h
 create mode 100644 tools/testing/selftests/bpf/progs/verifier_tailcall_jit.c

Comments

patchwork-bot+netdevbpf@kernel.org Aug. 21, 2024, 6:10 p.m. UTC | #1
Hello:

This series was applied to bpf/bpf-next.git (master)
by Alexei Starovoitov <ast@kernel.org>:

On Tue, 20 Aug 2024 03:23:48 -0700 you wrote:
> Some of the logic in the BPF jits might be non-trivial.
> It might be useful to allow testing this logic by comparing
> generated native code with expected code template.
> This patch set adds a macro __jited() that could be used for
> test_loader based tests in a following manner:
> 
>     SEC("tp")
>     __arch_x86_64
>     __jited("   endbr64")
>     __jited("   nopl    (%rax,%rax)")
>     __jited("   xorq    %rax, %rax")
>     ...
>     __naked void some_test(void) { ... }
> 
> [...]

Here is the summary with links:
  - [bpf-next,v3,1/8] selftests/bpf: less spam in the log for message matching
    https://git.kernel.org/bpf/bpf-next/c/7d41dad105b6
  - [bpf-next,v3,2/8] selftests/bpf: correctly move 'log' upon successful match
    https://git.kernel.org/bpf/bpf-next/c/d0a29cdb6ef9
  - [bpf-next,v3,3/8] selftests/bpf: fix to avoid __msg tag de-duplication by clang
    https://git.kernel.org/bpf/bpf-next/c/f00bb757ed63
  - [bpf-next,v3,4/8] selftests/bpf: replace __regex macro with "{{...}}" patterns
    https://git.kernel.org/bpf/bpf-next/c/f8d161756d42
  - [bpf-next,v3,5/8] selftests/bpf: utility function to get program disassembly after jit
    https://git.kernel.org/bpf/bpf-next/c/b991fc520700
  - [bpf-next,v3,6/8] selftests/bpf: __jited test tag to check disassembly after jit
    https://git.kernel.org/bpf/bpf-next/c/7d743e4c759c
  - [bpf-next,v3,7/8] selftests/bpf: validate jit behaviour for tail calls
    https://git.kernel.org/bpf/bpf-next/c/e5bdd6a8be78
  - [bpf-next,v3,8/8] selftests/bpf: validate __xlated same way as __jited
    https://git.kernel.org/bpf/bpf-next/c/a038eacdbf59

You are awesome, thank you!