Commit Graph

21 Commits

Author SHA1 Message Date
Jerome Marchand ba8c4b4f1f bpftool: Fix spelling mistake "disasembler" -> "disassembler"
Bugzilla: https://bugzilla.redhat.com/2177177

commit 96f341a4751d1939a303c5c526b2ca79ebda075f
Author: Colin Ian King <colin.i.king@gmail.com>
Date:   Wed Oct 26 09:16:45 2022 +0100

    bpftool: Fix spelling mistake "disasembler" -> "disassembler"

    There is a spelling mistake in an error message. Fix it.

    Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
    Acked-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/r/20221026081645.3186878-1-colin.i.king@gmail.com
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2023-04-28 11:42:59 +02:00
Jerome Marchand cf1ae9f9e0 bpftool: Support setting alternative arch for JIT disasm with LLVM
Bugzilla: https://bugzilla.redhat.com/2177177

commit ce4f660862359f2172ff4e3df30e641df5475cf6
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Tue Oct 25 16:03:28 2022 +0100

    bpftool: Support setting alternative arch for JIT disasm with LLVM

    For offloaded BPF programs, instead of failing to create the
    LLVM disassembler without even looking for a triple at all, do run the
    function that attempts to retrieve a valid architecture name for the
    device.

    It will still fail for the LLVM disassembler, because currently we have
    no valid triple to return (NFP disassembly is not supported by LLVM).
    But failing in that function is more logical than to assume in
    jit_disasm.c that passing an "arch" name is simply not supported.

    Suggested-by: Song Liu <song@kernel.org>
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Link: https://lore.kernel.org/r/20221025150329.97371-8-quentin@isovalent.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2023-04-28 11:42:56 +02:00
Jerome Marchand c4937c4f03 bpftool: Add LLVM as default library for disassembling JIT-ed programs
Bugzilla: https://bugzilla.redhat.com/2177177

commit eb9d1acf634baf6401dfb4f67dc895290713a357
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Tue Oct 25 16:03:27 2022 +0100

    bpftool: Add LLVM as default library for disassembling JIT-ed programs

    To disassemble instructions for JIT-ed programs, bpftool has relied on
    the libbfd library. This has been problematic in the past: libbfd's
    interface is not meant to be stable and has changed several times. For
    building bpftool, we have to detect how the libbfd version on the system
    behaves, which is why we have to handle features disassembler-four-args
    and disassembler-init-styled in the Makefile. When it comes to shipping
    bpftool, this has also caused issues with several distribution
    maintainers unwilling to support the feature (see for example Debian's
    page for binutils-dev, which ships libbfd: "Note that building Debian
    packages which depend on the shared libbfd is Not Allowed." [0]).

    For these reasons, we add support for LLVM as an alternative to libbfd
    for disassembling instructions of JIT-ed programs. Thanks to the
    preparation work in the previous commits, it's easy to add the library
    by passing the relevant compilation options in the Makefile, and by
    adding the functions for setting up the LLVM disassembler in file
    jit_disasm.c.

    The LLVM disassembler requires the LLVM development package (usually
    llvm-dev or llvm-devel).

    The expectation is that the interface for this disassembler will be more
    stable. There is a note in LLVM's Developer Policy [1] stating that the
    stability for the C API is "best effort" and not guaranteed, but at
    least there is some effort to keep compatibility when possible (which
    hasn't really been the case for libbfd so far). Furthermore, the Debian
    page for the related LLVM package does not caution against linking to
    the lib, as binutils-dev page does.

    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 0xb4(%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

    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 used 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  180(%rbx), %r13
          1b:   xorl    %r14d, %r14d
          1e:   orl     $2, %r14d
          22:   movl    $1, %eax
          27:   cmpq    $2, %r14
          2b:   jne     0x2f
          2d:   xorl    %eax, %eax
          2f:   popq    %r14
          31:   popq    %r13
          33:   popq    %rbx
          34:   leave
          35:   retq

    The LLVM disassembler comes as the default choice, with libbfd as a
    fall-back.

    Of course, we could replace libbfd entirely and avoid supporting two
    different libraries. One reason for keeping libbfd is that, right now,
    it works well, we have all we need in terms of features detection in the
    Makefile, so it provides a fallback for disassembling JIT-ed programs if
    libbfd is installed but LLVM is not. The other motivation is that libbfd
    supports nfp instruction for Netronome's SmartNICs and can be used to
    disassemble offloaded programs, something that LLVM cannot do. If
    libbfd's interface breaks again in the future, we might reconsider
    keeping support for it.

    [0] https://packages.debian.org/buster/binutils-dev
    [1] https://llvm.org/docs/DeveloperPolicy.html#c-api-changes

    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Tested-by: Niklas Söderlund <niklas.soderlund@corigine.com>
    Acked-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/r/20221025150329.97371-7-quentin@isovalent.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2023-04-28 11:42:56 +02:00
Jerome Marchand fa7a1cf1fe bpftool: Refactor disassembler for JIT-ed programs
Bugzilla: https://bugzilla.redhat.com/2177177

commit e1947c750ffe5effa371d7b7bc72043f100f6a93
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Tue Oct 25 16:03:26 2022 +0100

    bpftool: Refactor disassembler for JIT-ed programs

    Refactor disasm_print_insn() to extract the code specific to libbfd and
    move it to dedicated functions. There is no functional change. This is
    in preparation for supporting an alternative library for disassembling
    the instructions.

    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Tested-by: Niklas Söderlund <niklas.soderlund@corigine.com>
    Acked-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20221025150329.97371-6-quentin@isovalent.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2023-04-28 11:42:56 +02:00
Jerome Marchand f083571145 bpftool: Remove asserts from JIT disassembler
Bugzilla: https://bugzilla.redhat.com/2177177

commit 55b4de58d0e2aca810ed2b198a0173640300acf8
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Tue Oct 25 16:03:23 2022 +0100

    bpftool: Remove asserts from JIT disassembler

    The JIT disassembler in bpftool is the only components (with the JSON
    writer) using asserts to check the return values of functions. But it
    does not do so in a consistent way, and diasm_print_insn() returns no
    value, although sometimes the operation failed.

    Remove the asserts, and instead check the return values, print messages
    on errors, and propagate the error to the caller from prog.c.

    Remove the inclusion of assert.h from jit_disasm.c, and also from map.c
    where it is unused.

    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Tested-by: Niklas Söderlund <niklas.soderlund@corigine.com>
    Acked-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20221025150329.97371-3-quentin@isovalent.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2023-04-28 11:42:55 +02:00
Jerome Marchand bbd94960ae bpftool: Define _GNU_SOURCE only once
Bugzilla: https://bugzilla.redhat.com/2177177

commit b3d84af7cdfc079ef86d94f7cf125821559925fa
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Tue Oct 25 16:03:22 2022 +0100

    bpftool: Define _GNU_SOURCE only once

    _GNU_SOURCE is defined in several source files for bpftool, but only one
    of them takes the precaution of checking whether the value is already
    defined. Add #ifndef for other occurrences too.

    This is in preparation for the support of disassembling JIT-ed programs
    with LLVM, with $(llvm-config --cflags) passing -D_GNU_SOURCE as a
    compilation argument.

    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Tested-by: Niklas Söderlund <niklas.soderlund@corigine.com>
    Acked-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20221025150329.97371-2-quentin@isovalent.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2023-04-28 11:42:55 +02:00
Artem Savkov 25fe4226f7 tools bpftool: Fix compilation error with new binutils
Bugzilla: https://bugzilla.redhat.com/2137876

Conflicts: already applied 450a8dcb8c7f8 "bpftool: Remove zlib feature
test from Makefile"

commit 600b7b26c07a070d0153daa76b3806c1e52c9e00
Author: Andres Freund <andres@anarazel.de>
Date:   Sun Jul 31 18:38:33 2022 -0700

    tools bpftool: Fix compilation error with new binutils

    binutils changed the signature of init_disassemble_info(), which now causes
    compilation to fail for tools/bpf/bpftool/jit_disasm.c, e.g. on debian
    unstable.

    Relevant binutils commit:

      https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07

    Wire up the feature test and switch to init_disassemble_info_compat(),
    which were introduced in prior commits, fixing the compilation failure.

    I verified that bpftool can still disassemble bpf programs, both with an
    old and new dis-asm.h API. There are no output changes for plain and json
    formats. When comparing the output from old binutils (2.35)
    to new bintuils with the patch (upstream snapshot) there are a few output
    differences, but they are unrelated to this patch. An example hunk is:

         2f:	pop    %r14
         31:	pop    %r13
         33:	pop    %rbx
      -  34:	leaveq
      -  35:	retq
      +  34:	leave
      +  35:	ret

    Signed-off-by: Andres Freund <andres@anarazel.de>
    Acked-by: Quentin Monnet <quentin@isovalent.com>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Ben Hutchings <benh@debian.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Quentin Monnet <quentin@isovalent.com>
    Cc: Sedat Dilek <sedat.dilek@gmail.com>
    Cc: bpf@vger.kernel.org
    Link: http://lore.kernel.org/lkml/20220622181918.ykrs5rsnmx3og4sv@alap3.anarazel.de
    Link: https://lore.kernel.org/r/20220801013834.156015-8-andres@anarazel.de
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

Signed-off-by: Artem Savkov <asavkov@redhat.com>
2023-01-05 15:46:45 +01:00
Gu Shengxian bc832065b6 bpftool: Properly close va_list 'ap' by va_end() on error
va_list 'ap' was opened but not closed by va_end() in error case. It should
be closed by va_end() before the return.

Fixes: aa52bcbe0e ("tools: bpftool: Fix json dump crash on powerpc")
Signed-off-by: Gu Shengxian <gushengxian@yulong.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: https://lore.kernel.org/bpf/20210706013543.671114-1-gushengxian507419@gmail.com
2021-07-06 09:19:23 +02:00
Jagadeesh Pagadala 93e5168947 tools/bpf/bpftool: Remove duplicate headers
Code cleanup: Remove duplicate headers which are included twice.

Signed-off-by: Jagadeesh Pagadala <jagdsh.linux@gmail.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Reviewed-by: Quentin Monnet <quentin@isovalent.com>
Link: https://lore.kernel.org/bpf/1587274757-14101-1-git-send-email-jagdsh.linux@gmail.com
2020-04-26 08:40:01 -07:00
Toke Høiland-Jørgensen 229c3b47b7 bpftool: Use consistent include paths for libbpf
Fix bpftool to include libbpf header files with the bpf/ prefix, to be
consistent with external users of the library. Also ensure that all
includes of exported libbpf header files (those that are exported on 'make
install' of the library) use bracketed includes instead of quoted.

To make sure no new files are introduced that doesn't include the bpf/
prefix in its include, remove tools/lib/bpf from the include path entirely,
and use tools/lib instead.

Fixes: 6910d7d386 ("selftests/bpf: Ensure bpf_helper_defs.h are taken from selftests dir")
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Link: https://lore.kernel.org/bpf/157952560684.1683545.4765181397974997027.stgit@toke.dk
2020-01-20 16:37:45 -08:00
Jiri Olsa aa52bcbe0e tools: bpftool: Fix json dump crash on powerpc
Michael reported crash with by bpf program in json mode on powerpc:

  # bpftool prog -p dump jited id 14
  [{
        "name": "0xd00000000a9aa760",
        "insns": [{
                "pc": "0x0",
                "operation": "nop",
                "operands": [null
                ]
            },{
                "pc": "0x4",
                "operation": "nop",
                "operands": [null
                ]
            },{
                "pc": "0x8",
                "operation": "mflr",
  Segmentation fault (core dumped)

The code is assuming char pointers in format, which is not always
true at least for powerpc. Fixing this by dumping the whole string
into buffer based on its format.

Please note that libopcodes code does not check return values from
fprintf callback, but as per Jakub suggestion returning -1 on allocation
failure so we do the best effort to propagate the error.

Fixes: 107f041212 ("tools: bpftool: add JSON output for `bpftool prog dump jited *` command")
Reported-by: Michael Petlan <mpetlan@redhat.com>
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2019-07-05 23:50:38 +02:00
Jakub Kicinski 907b223651 tools: bpftool: dual license all files
Currently bpftool contains a mix of GPL-only and GPL or BSD2
licensed files.  Make sure all files are dual licensed under
GPLv2 and BSD-2-Clause.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Acked-by: Roman Gushchin <guro@fb.com>
Acked-by: YueHaibing <yuehaibing@huawei.com>
Acked-by: Yonghong Song <yhs@fb.com>
Acked-by: Stanislav Fomichev <sdf@google.com>
Acked-by: Sean Young <sean@mess.org>
Acked-by: Jiri Benc <jbenc@redhat.com>
Acked-by: David Calavera <david.calavera@gmail.com>
Acked-by: Andrey Ignatov <rdna@fb.com>
Acked-by: Joe Stringer <joe@wand.net.nz>
Acked-by: David Ahern <dsahern@gmail.com>
Acked-by: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Acked-by: Petar Penkov <ppenkov@stanford.edu>
Acked-by: Sandipan Das <sandipan@linux.ibm.com>
Acked-by: Prashant Bhole <bhole_prashant_q7@lab.ntt.co.jp>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: John Fastabend <john.fastabend@gmail.com>
Acked-by: Taeung Song <treeze.taeung@gmail.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
CC: okash.khawaja@gmail.com
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2018-12-13 12:08:44 +01:00
Martin KaFai Lau b053b439b7 bpf: libbpf: bpftool: Print bpf_line_info during prog dump
This patch adds print bpf_line_info function in 'prog dump jitted'
and 'prog dump xlated':

[root@arch-fb-vm1 bpf]# ~/devshare/fb-kernel/linux/tools/bpf/bpftool/bpftool prog dump jited pinned /sys/fs/bpf/test_btf_haskv
[...]
int test_long_fname_2(struct dummy_tracepoint_args * arg):
bpf_prog_44a040bf25481309_test_long_fname_2:
; static int test_long_fname_2(struct dummy_tracepoint_args *arg)
   0:	push   %rbp
   1:	mov    %rsp,%rbp
   4:	sub    $0x30,%rsp
   b:	sub    $0x28,%rbp
   f:	mov    %rbx,0x0(%rbp)
  13:	mov    %r13,0x8(%rbp)
  17:	mov    %r14,0x10(%rbp)
  1b:	mov    %r15,0x18(%rbp)
  1f:	xor    %eax,%eax
  21:	mov    %rax,0x20(%rbp)
  25:	xor    %esi,%esi
; int key = 0;
  27:	mov    %esi,-0x4(%rbp)
; if (!arg->sock)
  2a:	mov    0x8(%rdi),%rdi
; if (!arg->sock)
  2e:	cmp    $0x0,%rdi
  32:	je     0x0000000000000070
  34:	mov    %rbp,%rsi
; counts = bpf_map_lookup_elem(&btf_map, &key);
  37:	add    $0xfffffffffffffffc,%rsi
  3b:	movabs $0xffff8881139d7480,%rdi
  45:	add    $0x110,%rdi
  4c:	mov    0x0(%rsi),%eax
  4f:	cmp    $0x4,%rax
  53:	jae    0x000000000000005e
  55:	shl    $0x3,%rax
  59:	add    %rdi,%rax
  5c:	jmp    0x0000000000000060
  5e:	xor    %eax,%eax
; if (!counts)
  60:	cmp    $0x0,%rax
  64:	je     0x0000000000000070
; counts->v6++;
  66:	mov    0x4(%rax),%edi
  69:	add    $0x1,%rdi
  6d:	mov    %edi,0x4(%rax)
  70:	mov    0x0(%rbp),%rbx
  74:	mov    0x8(%rbp),%r13
  78:	mov    0x10(%rbp),%r14
  7c:	mov    0x18(%rbp),%r15
  80:	add    $0x28,%rbp
  84:	leaveq
  85:	retq
[...]

With linum:
[root@arch-fb-vm1 bpf]# ~/devshare/fb-kernel/linux/tools/bpf/bpftool/bpftool prog dump jited pinned /sys/fs/bpf/test_btf_haskv linum
int _dummy_tracepoint(struct dummy_tracepoint_args * arg):
bpf_prog_b07ccb89267cf242__dummy_tracepoint:
; return test_long_fname_1(arg); [file:/data/users/kafai/fb-kernel/linux/tools/testing/selftests/bpf/test_btf_haskv.c line_num:54 line_col:9]
   0:	push   %rbp
   1:	mov    %rsp,%rbp
   4:	sub    $0x28,%rsp
   b:	sub    $0x28,%rbp
   f:	mov    %rbx,0x0(%rbp)
  13:	mov    %r13,0x8(%rbp)
  17:	mov    %r14,0x10(%rbp)
  1b:	mov    %r15,0x18(%rbp)
  1f:	xor    %eax,%eax
  21:	mov    %rax,0x20(%rbp)
  25:	callq  0x000000000000851e
; return test_long_fname_1(arg); [file:/data/users/kafai/fb-kernel/linux/tools/testing/selftests/bpf/test_btf_haskv.c line_num:54 line_col:2]
  2a:	xor    %eax,%eax
  2c:	mov    0x0(%rbp),%rbx
  30:	mov    0x8(%rbp),%r13
  34:	mov    0x10(%rbp),%r14
  38:	mov    0x18(%rbp),%r15
  3c:	add    $0x28,%rbp
  40:	leaveq
  41:	retq
[...]

Signed-off-by: Martin KaFai Lau <kafai@fb.com>
Acked-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2018-12-09 13:54:38 -08:00
Quentin Monnet 327e5dab6d tools: bpftool: use "/proc/self/" i.o. crafting links with getpid()
The getpid() function is called in a couple of places in bpftool to
craft links of the shape "/proc/<pid>/...". Instead, it is possible to
use the "/proc/self/" shortcut, which makes things a bit easier, in
particular in jit_disasm.c.

Do the replacement, and remove the includes of <sys/types.h> from the
relevant files, now we do not use getpid() anymore.

Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2018-11-30 14:06:06 -08:00
Stanislav Fomichev 29a9c10e41 bpftool: make libbfd optional
Make it possible to build bpftool without libbfd. libbfd and libopcodes are
typically provided in dev/dbg packages (binutils-dev in debian) which we
usually don't have installed on the fleet machines and we'd like a way to have
bpftool version that works without installing any additional packages.
This excludes support for disassembling jit-ted code and prints an error if
the user tries to use these features.

Tested by:
cat > FEATURES_DUMP.bpftool <<EOF
feature-libbfd=0
feature-disassembler-four-args=1
feature-reallocarray=0
feature-libelf=1
feature-libelf-mmap=1
feature-bpf=1
EOF
FEATURES_DUMP=$PWD/FEATURES_DUMP.bpftool make
ldd bpftool | grep libbfd

Signed-off-by: Stanislav Fomichev <sdf@google.com>
Acked-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2018-11-16 20:45:01 -08:00
Jakub Kicinski 3ddeac6705 tools: bpftool: use 4 context mode for the NFP disasm
The nfp driver is currently always JITing the BPF for 4 context/thread
mode of the NFP flow processors.  Tell this to the disassembler,
otherwise some registers may be incorrectly decoded.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2018-10-18 22:16:02 +02:00
Jiong Wang e65935969d tools: bpftool: improve architecture detection by using ifindex
The current architecture detection method in bpftool is designed for host
case.

For offload case, we can't use the architecture of "bpftool" itself.
Instead, we could call the existing "ifindex_to_name_ns" to get DEVNAME,
then read pci id from /sys/class/dev/DEVNAME/device/vendor, finally we map
vendor id to bfd arch name which will finally be used to select bfd backend
for the disassembler.

Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2018-01-18 01:26:15 +01:00
Roman Gushchin fb982666e3 tools/bpftool: fix bpftool build with bintutils >= 2.9
Bpftool build is broken with binutils version 2.29 and later.
The cause is commit 003ca0fd2286 ("Refactor disassembler selection")
in the binutils repo, which changed the disassembler() function
signature.

Fix this by adding a new "feature" to the tools/build/features
infrastructure and make it responsible for decision which
disassembler() function signature to use.

Signed-off-by: Roman Gushchin <guro@fb.com>
Cc: Jakub Kicinski <jakub.kicinski@netronome.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2017-12-30 01:07:36 +01:00
Prashant Bhole cdc89c9198 tools: bpf: handle long path in jit disasm
Use PATH_MAX instead of hardcoded array size 256

Signed-off-by: Prashant Bhole <bhole_prashant_q7@lab.ntt.co.jp>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-11-02 20:25:27 +09:00
Quentin Monnet 107f041212 tools: bpftool: add JSON output for `bpftool prog dump jited *` command
Reuse the json_writer API introduced in an earlier commit to make
bpftool able to generate JSON output on `bpftool prog show *` commands.
A new printing function is created to be passed as an argument to the
disassembler.

Similarly to plain output, opcodes are printed on request.

Outputs from sample programs have been successfully tested against a
JSON validator.

Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-10-24 01:25:08 +01:00
Jakub Kicinski 71bb428fe2 tools: bpf: add bpftool
Add a simple tool for querying and updating BPF objects on the system.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Simon Horman <simon.horman@netronome.com>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-10-04 21:45:06 -07:00