• Eduard Zingerman's avatar
    selftests/bpf: utility function to get program disassembly after jit · b991fc52
    Eduard Zingerman authored
    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 eb9d1acf ("bpftool: Add LLVM as default library for disassembling JIT-ed programs")
    Acked-by: default avatarYonghong Song <yonghong.song@linux.dev>
    Signed-off-by: default avatarEduard Zingerman <eddyz87@gmail.com>
    Link: https://lore.kernel.org/r/20240820102357.3372779-6-eddyz87@gmail.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    b991fc52
Makefile 33.5 KB