Re: [PATCH bpf-next 6/7] bpftool: Add LLVM as default library for disassembling JIT-ed programs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Sep 6, 2022 at 6:36 AM Quentin Monnet <quentin@xxxxxxxxxxxxx> wrote:
>
> Naturally, the display of disassembled instructions comes with a few
> minor differences. Here is a sample output with libbfd (already
> supported before this patch):
>
>     # bpftool prog dump jited id 56
>     bpf_prog_6deef7357e7b4530:
>        0:   nopl   0x0(%rax,%rax,1)
>        5:   xchg   %ax,%ax
>        7:   push   %rbp
>        8:   mov    %rsp,%rbp
>        b:   push   %rbx
>        c:   push   %r13
>        e:   push   %r14
>       10:   mov    %rdi,%rbx
>       13:   movzwq 0xb0(%rbx),%r13
>       1b:   xor    %r14d,%r14d
>       1e:   or     $0x2,%r14d
>       22:   mov    $0x1,%eax
>       27:   cmp    $0x2,%r14
>       2b:   jne    0x000000000000002f
>       2d:   xor    %eax,%eax
>       2f:   pop    %r14
>       31:   pop    %r13
>       33:   pop    %rbx
>       34:   leave
>       35:   ret
>       36:   int3
>
> LLVM supports several variants that we could set when initialising the
> disassembler, for example with:
>
>     LLVMSetDisasmOptions(*ctx,
>                          LLVMDisassembler_Option_AsmPrinterVariant);
>
> but the default printer is kept for now. Here is the output with LLVM:
>
>     # bpftool prog dump jited id 56
>     bpf_prog_6deef7357e7b4530:
>        0:   nopl    (%rax,%rax)
>        5:   nop
>        7:   pushq   %rbp
>        8:   movq    %rsp, %rbp
>        b:   pushq   %rbx
>        c:   pushq   %r13
>        e:   pushq   %r14
>       10:   movq    %rdi, %rbx
>       13:   movzwq  176(%rbx), %r13
>       1b:   xorl    %r14d, %r14d
>       1e:   orl     $2, %r14d
>       22:   movl    $1, %eax
>       27:   cmpq    $2, %r14
>       2b:   jne     2
>       2d:   xorl    %eax, %eax
>       2f:   popq    %r14

If I'm reading the asm correctly the difference is significant.
jne 0x2f was an absolute address and jmps were easy
to follow.
While in llvm disasm it's 'jne 2' ?! What is 2 ?
2 bytes from the next insn of 0x2d ?
That is super hard to read.
Is there a way to tune/configure llvm disasm?



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux