]> www.infradead.org Git - users/jedix/linux-maple.git/commit
selftests/bpf: utility function to get program disassembly after jit
authorEduard Zingerman <eddyz87@gmail.com>
Tue, 20 Aug 2024 10:23:53 +0000 (03:23 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 21 Aug 2024 18:03:01 +0000 (11:03 -0700)
commitb991fc52070042468f31b70fb8ccab96ba351f8a
tree19c297b3188a87172d90a975eb2d6b395fe9fc6d
parentf8d161756d422598e10a112171a73cf621e67fae
selftests/bpf: utility function to get program disassembly after jit

This commit adds a utility function to get disassembled text for jited
representation of a BPF program designated by file descriptor.
Function prototype looks as follows:

    int get_jited_program_text(int fd, char *text, size_t text_sz)

Where 'fd' is a file descriptor for the program, 'text' and 'text_sz'
refer to a destination buffer for disassembled text.
Output format looks as follows:

    18: 77 06                                ja L0
    1a: 50                                   pushq %rax
    1b: 48 89 e0                             movq %rsp, %rax
    1e: eb 01                                jmp L1
    20: 50                                  L0: pushq %rax
    21: 50                                  L1: pushq %rax
     ^  ^^^^^^^^                             ^  ^^^^^^^^^^^^^^^^^^
     |  binary insn                          |  textual insn
     |  representation                       |  representation
     |                                       |
    instruction offset              inferred local label name

The code and makefile changes are inspired by jit_disasm.c from bpftool.
Use llvm libraries to disassemble BPF program instead of libbfd to avoid
issues with disassembly output stability pointed out in [1].

Selftests makefile uses Makefile.feature to detect if LLVM libraries
are available. If that is not the case selftests build proceeds but
the function returns -EOPNOTSUPP at runtime.

[1] commit eb9d1acf634b ("bpftool: Add LLVM as default library for disassembling JIT-ed programs")

Acked-by: Yonghong Song <yonghong.song@linux.dev>
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20240820102357.3372779-6-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/.gitignore
tools/testing/selftests/bpf/Makefile
tools/testing/selftests/bpf/jit_disasm_helpers.c [new file with mode: 0644]
tools/testing/selftests/bpf/jit_disasm_helpers.h [new file with mode: 0644]