mbox series

[bpf-next,v3,0/8] bpf: Fix a couple of test failures with LTO kernel

Message ID 20240326041443.1197498-1-yonghong.song@linux.dev (mailing list archive)
Headers show
Series bpf: Fix a couple of test failures with LTO kernel | expand

Message

Yonghong Song March 26, 2024, 4:14 a.m. UTC
With a LTO kernel built with clang, with one of earlier version of kernel,
I encountered two test failures, ksyms and kprobe_multi_bench_attach/kernel.
Now with latest bpf-next, only kprobe_multi_bench_attach/kernel failed.
But it is possible in the future ksyms selftest may fail again.

Both test failures are due to static variable/function renaming
due to cross-file inlining. For Ksyms failure, the solution is
to strip .llvm.<hash> suffixes for symbols in /proc/kallsyms before
comparing against the ksym in bpf program.
For kprobe_multi_bench_attach/kernel failure, the solution is
to either provide names in /proc/kallsyms to the kernel or
ignore those names who have .llvm.<hash> suffix since the kernel
sym name comparison is against /proc/kallsyms.

Please see each individual patches for details.

Changelogs:
  v2 -> v3:
    - no need to check config file, directly so strstr with '.llvm.'.
    - for kprobe_multi_bench with syms, instead of skipping the syms,
      consult /proc/kallyms to find corresponding names.
    - add a test with populating addrs to the kernel for kprobe
      multi attach.
  v1 -> v2:
    - Let libbpf handle .llvm.<hash suffixes since it may impact
      bpf program ksym.

Yonghong Song (8):
  selftests/bpf: Replace CHECK with ASSERT macros for ksyms test
  libbpf: Mark libbpf_kallsyms_parse static function
  libbpf: Handle <orig_name>.llvm.<hash> symbol properly
  selftests/bpf: Refactor some functions for kprobe_multi_test
  selftests/bpf: Refactor trace helper func load_kallsyms_local()
  selftests/bpf: Add {load,search}_kallsyms_custom_local()
  selftests/bpf: Fix kprobe_multi_bench_attach test failure with LTO
    kernel
  selftests/bpf: Add a kprobe_multi subtest to use addrs instead of syms

 tools/lib/bpf/libbpf.c                        |  26 +-
 tools/lib/bpf/libbpf_internal.h               |   5 -
 .../bpf/prog_tests/kprobe_multi_test.c        | 248 ++++++++++++++----
 .../testing/selftests/bpf/prog_tests/ksyms.c  |  30 +--
 tools/testing/selftests/bpf/trace_helpers.c   |  46 +++-
 tools/testing/selftests/bpf/trace_helpers.h   |   7 +
 6 files changed, 281 insertions(+), 81 deletions(-)

Comments

patchwork-bot+netdevbpf@kernel.org March 28, 2024, 2 a.m. UTC | #1
Hello:

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

On Mon, 25 Mar 2024 21:14:43 -0700 you wrote:
> With a LTO kernel built with clang, with one of earlier version of kernel,
> I encountered two test failures, ksyms and kprobe_multi_bench_attach/kernel.
> Now with latest bpf-next, only kprobe_multi_bench_attach/kernel failed.
> But it is possible in the future ksyms selftest may fail again.
> 
> Both test failures are due to static variable/function renaming
> due to cross-file inlining. For Ksyms failure, the solution is
> to strip .llvm.<hash> suffixes for symbols in /proc/kallsyms before
> comparing against the ksym in bpf program.
> For kprobe_multi_bench_attach/kernel failure, the solution is
> to either provide names in /proc/kallsyms to the kernel or
> ignore those names who have .llvm.<hash> suffix since the kernel
> sym name comparison is against /proc/kallsyms.
> 
> [...]

Here is the summary with links:
  - [bpf-next,v3,1/8] selftests/bpf: Replace CHECK with ASSERT macros for ksyms test
    https://git.kernel.org/bpf/bpf-next/c/779012842209
  - [bpf-next,v3,2/8] libbpf: Mark libbpf_kallsyms_parse static function
    https://git.kernel.org/bpf/bpf-next/c/2c8bc4cf4d03
  - [bpf-next,v3,3/8] libbpf: Handle <orig_name>.llvm.<hash> symbol properly
    https://git.kernel.org/bpf/bpf-next/c/afc6524702c5
  - [bpf-next,v3,4/8] selftests/bpf: Refactor some functions for kprobe_multi_test
    https://git.kernel.org/bpf/bpf-next/c/de2c50ce88ec
  - [bpf-next,v3,5/8] selftests/bpf: Refactor trace helper func load_kallsyms_local()
    https://git.kernel.org/bpf/bpf-next/c/8cfdd77e94e6
  - [bpf-next,v3,6/8] selftests/bpf: Add {load,search}_kallsyms_custom_local()
    https://git.kernel.org/bpf/bpf-next/c/3fa5b1626130
  - [bpf-next,v3,7/8] selftests/bpf: Fix kprobe_multi_bench_attach test failure with LTO kernel
    https://git.kernel.org/bpf/bpf-next/c/ba4a347e17d0
  - [bpf-next,v3,8/8] selftests/bpf: Add a kprobe_multi subtest to use addrs instead of syms
    https://git.kernel.org/bpf/bpf-next/c/aa17f462133f

You are awesome, thank you!