Commit Graph

1989 Commits

Author SHA1 Message Date
Song Liu
ea28429902 ci: Remove xdp_info from ALLOWLIST-5.5.0
xdp_info now depends on newer functionalities. Let's skip it for 5.5.0
kernel.

Signed-off-by: Song Liu <song@kernel.org>
2023-02-17 17:17:27 -08:00
Song Liu
34212c94a6 ci: regenerate vmlinux.h
Regenerate latest vmlinux.h for old kernel CI tests.

Signed-off-by: Song Liu <song@kernel.org>
2023-02-17 17:17:27 -08:00
Song Liu
6f1c8eddb2 sync: Add netdev.h from kernel tree
Add netdev.h to include/uapi/linux to make build success.

Signed-off-by: Song Liu <song@kernel.org>
2023-02-17 17:17:27 -08:00
Song Liu
4b492df97e sync: latest libbpf changes from kernel
Syncing latest libbpf commits from kernel repository.
Baseline bpf-next commit:   a5f6b9d577eba18601c14bba2dbff4a9b76af962
Checkpoint bpf-next commit: 6c20822fada1b8adb77fa450d03a0d449686a4a9
Baseline bpf commit:        e8c8fd9b8393d7064152c8806f5ac446d760a23e
Checkpoint bpf commit:      6c20822fada1b8adb77fa450d03a0d449686a4a9

Dave Marchevsky (1):
  bpf: Add basic bpf_rb_{root,node} support

Florian Lehner (1):
  bpf: fix typo in header for bpf_perf_prog_read_value

Grant Seltzer (2):
  libbpf: Fix malformed documentation formatting
  libbpf: Add documentation to map pinning API functions

Hao Xiang (1):
  libbpf: Correctly set the kernel code version in Debian kernel.

Ilya Leoshkevich (4):
  libbpf: Simplify barrier_var()
  libbpf: Fix unbounded memory access in bpf_usdt_arg()
  libbpf: Fix BPF_PROBE_READ{_STR}_INTO() on s390x
  libbpf: Fix alen calculation in libbpf_nla_dump_errormsg()

Jon Doron (1):
  libbpf: Add sample_period to creation options

Lorenzo Bianconi (3):
  libbpf: add the capability to specify netlink proto in
    libbpf_netlink_send_recv
  libbpf: add API to get XDP/XSK supported features
  libbpf: Always use libbpf_err to return an error in bpf_xdp_query()

Randy Dunlap (1):
  Documentation: bpf: correct spelling

Tiezhu Yang (1):
  tools/bpf: Use tab instead of white spaces to sync bpf.h

 docs/libbpf_naming_convention.rst |   6 +-
 include/uapi/linux/bpf.h          |  17 ++++-
 src/bpf_core_read.h               |   4 +-
 src/bpf_helpers.h                 |   2 +-
 src/libbpf.c                      |  46 ++----------
 src/libbpf.h                      |  97 +++++++++++++++++++++---
 src/libbpf_probes.c               |  83 +++++++++++++++++++++
 src/netlink.c                     | 118 +++++++++++++++++++++++++++---
 src/nlattr.c                      |   2 +-
 src/nlattr.h                      |  12 +++
 src/usdt.bpf.h                    |   5 +-
 11 files changed, 321 insertions(+), 71 deletions(-)

Signed-off-by: Song Liu <song@kernel.org>
2023-02-17 17:17:27 -08:00
Song Liu
24476fe699 sync: auto-generate latest BPF helpers
Latest changes to BPF helper definitions.

Signed-off-by: Song Liu <song@kernel.org>
2023-02-17 17:17:27 -08:00
Dave Marchevsky
d74065659a bpf: Add basic bpf_rb_{root,node} support
This patch adds special BPF_RB_{ROOT,NODE} btf_field_types similar to
BPF_LIST_{HEAD,NODE}, adds the necessary plumbing to detect the new
types, and adds bpf_rb_root_free function for freeing bpf_rb_root in
map_values.

structs bpf_rb_root and bpf_rb_node are opaque types meant to
obscure structs rb_root_cached rb_node, respectively.

btf_struct_access will prevent BPF programs from touching these special
fields automatically now that they're recognized.

btf_check_and_fixup_fields now groups list_head and rb_root together as
"graph root" fields and {list,rb}_node as "graph node", and does same
ownership cycle checking as before. Note that this function does _not_
prevent ownership type mixups (e.g. rb_root owning list_node) - that's
handled by btf_parse_graph_root.

After this patch, a bpf program can have a struct bpf_rb_root in a
map_value, but not add anything to nor do anything useful with it.

Signed-off-by: Dave Marchevsky <davemarchevsky@fb.com>
Link: https://lore.kernel.org/r/20230214004017.2534011-2-davemarchevsky@fb.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2023-02-17 17:17:27 -08:00
Ilya Leoshkevich
418962b686 libbpf: Fix alen calculation in libbpf_nla_dump_errormsg()
The code assumes that everything that comes after nlmsgerr are nlattrs.
When calculating their size, it does not account for the initial
nlmsghdr. This may lead to accessing uninitialized memory.

Fixes: bbf48c18ee0c ("libbpf: add error reporting in XDP")
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20230210001210.395194-8-iii@linux.ibm.com
2023-02-17 17:17:27 -08:00
Jon Doron
8c8243a409 libbpf: Add sample_period to creation options
Add option to set when the perf buffer should wake up, by default the
perf buffer becomes signaled for every event that is being pushed to it.

In case of a high throughput of events it will be more efficient to wake
up only once you have X events ready to be read.

So your application can wakeup once and drain the entire perf buffer.

Signed-off-by: Jon Doron <jond@wiz.io>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20230207081916.3398417-1-arilou@gmail.com
2023-02-17 17:17:27 -08:00
Lorenzo Bianconi
6333ea6a3a libbpf: Always use libbpf_err to return an error in bpf_xdp_query()
In order to properly set errno, rely on libbpf_err utility routine in
bpf_xdp_query() to return an error to the caller.

Fixes: 04d58f1b26a4 ("libbpf: add API to get XDP/XSK supported features")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/827d40181f9f90fb37702f44328e1614df7c0503.1675768112.git.lorenzo@kernel.org
2023-02-17 17:17:27 -08:00
Hao Xiang
855bf91055 libbpf: Correctly set the kernel code version in Debian kernel.
In a previous commit, Ubuntu kernel code version is correctly set
by retrieving the information from /proc/version_signature.

commit<5b3d72987701d51bf31823b39db49d10970f5c2d>
(libbpf: Improve LINUX_VERSION_CODE detection)

The /proc/version_signature file doesn't present in at least the
older versions of Debian distributions (eg, Debian 9, 10). The Debian
kernel has a similar issue where the release information from uname()
syscall doesn't give the kernel code version that matches what the
kernel actually expects. Below is an example content from Debian 10.

release: 4.19.0-23-amd64
version: #1 SMP Debian 4.19.269-1 (2022-12-20) x86_64

Debian reports incorrect kernel version in utsname::release returned
by uname() syscall, which in older kernels (Debian 9, 10) leads to
kprobe BPF programs failing to load due to the version check mismatch.

Fortunately, the correct kernel code version presents in the
utsname::version returned by uname() syscall in Debian kernels. This
change adds another get kernel version function to handle Debian in
addition to the previously added get kernel version function to handle
Ubuntu. Some minor refactoring work is also done to make the code more
readable.

Signed-off-by: Hao Xiang <hao.xiang@bytedance.com>
Signed-off-by: Ho-Ren (Jack) Chuang <horenchuang@bytedance.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20230203234842.2933903-1-hao.xiang@bytedance.com
2023-02-17 17:17:27 -08:00
Florian Lehner
5e0270f66e bpf: fix typo in header for bpf_perf_prog_read_value
Fix a simple typo in the documentation for bpf_perf_prog_read_value.

Signed-off-by: Florian Lehner <dev@der-flo.net>
Acked-by: John Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/r/20230203121439.25884-1-dev@der-flo.net
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
2023-02-17 17:17:27 -08:00
Lorenzo Bianconi
547881e04e libbpf: add API to get XDP/XSK supported features
Extend bpf_xdp_query routine in order to get XDP/XSK supported features
of netdev over route netlink interface.
Extend libbpf netlink implementation in order to support netlink_generic
protocol.

Co-developed-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Co-developed-by: Marek Majtyka <alardam@gmail.com>
Signed-off-by: Marek Majtyka <alardam@gmail.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://lore.kernel.org/r/a72609ef4f0de7fee5376c40dbf54ad7f13bfb8d.1675245258.git.lorenzo@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2023-02-17 17:17:27 -08:00
Lorenzo Bianconi
41b96a8c08 libbpf: add the capability to specify netlink proto in libbpf_netlink_send_recv
This is a preliminary patch in order to introduce netlink_generic
protocol support to libbpf.

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://lore.kernel.org/r/7878a54667e74afeec3ee519999c044bd514b44c.1675245258.git.lorenzo@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2023-02-17 17:17:27 -08:00
Tiezhu Yang
700d755151 tools/bpf: Use tab instead of white spaces to sync bpf.h
Just silence the following build warning:

Warning: Kernel ABI header at 'tools/include/uapi/linux/bpf.h' differs from latest version at 'include/uapi/linux/bpf.h'

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Link: https://lore.kernel.org/r/1675319486-27744-2-git-send-email-yangtiezhu@loongson.cn
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2023-02-17 17:17:27 -08:00
Ilya Leoshkevich
981da2b380 libbpf: Fix BPF_PROBE_READ{_STR}_INTO() on s390x
BPF_PROBE_READ_INTO() and BPF_PROBE_READ_STR_INTO() should map to
bpf_probe_read() and bpf_probe_read_str() respectively in order to work
correctly on architectures with !ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE.

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Link: https://lore.kernel.org/r/20230128000650.1516334-24-iii@linux.ibm.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2023-02-17 17:17:27 -08:00
Ilya Leoshkevich
23898cf858 libbpf: Fix unbounded memory access in bpf_usdt_arg()
Loading programs that use bpf_usdt_arg() on s390x fails with:

    ; if (arg_num >= BPF_USDT_MAX_ARG_CNT || arg_num >= spec->arg_cnt)
    128: (79) r1 = *(u64 *)(r10 -24)      ; frame1: R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R10=fp0
    129: (25) if r1 > 0xb goto pc+83      ; frame1: R1_w=scalar(umax=11,var_off=(0x0; 0xf))
    ...
    ; arg_spec = &spec->args[arg_num];
    135: (79) r1 = *(u64 *)(r10 -24)      ; frame1: R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R10=fp0
    ...
    ; switch (arg_spec->arg_type) {
    139: (61) r1 = *(u32 *)(r2 +8)
    R2 unbounded memory access, make sure to bounds check any such access

The reason is that, even though the C code enforces that
arg_num < BPF_USDT_MAX_ARG_CNT, the verifier cannot propagate this
constraint to the arg_spec assignment yet. Help it by forcing r1 back
to stack after comparison.

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Link: https://lore.kernel.org/r/20230128000650.1516334-23-iii@linux.ibm.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2023-02-17 17:17:27 -08:00
Ilya Leoshkevich
7285d529cf libbpf: Simplify barrier_var()
Use a single "+r" constraint instead of the separate "=r" and "0".

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Link: https://lore.kernel.org/r/20230128000650.1516334-22-iii@linux.ibm.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2023-02-17 17:17:27 -08:00
Randy Dunlap
dd460a52bc Documentation: bpf: correct spelling
Correct spelling problems for Documentation/bpf/ as reported
by codespell.

Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
Cc: Andrii Nakryiko <andrii@kernel.org>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: bpf@vger.kernel.org
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: linux-doc@vger.kernel.org
Reviewed-by: Bagas Sanjaya <bagasdotme@gmail.com>
Link: https://lore.kernel.org/r/20230128195046.13327-1-rdunlap@infradead.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2023-02-17 17:17:27 -08:00
Grant Seltzer
44c1d381ff libbpf: Add documentation to map pinning API functions
This adds documentation for the following API functions:

- bpf_map__set_pin_path()
- bpf_map__pin_path()
- bpf_map__is_pinned()
- bpf_map__pin()
- bpf_map__unpin()
- bpf_object__pin_maps()
- bpf_object__unpin_maps()

Signed-off-by: Grant Seltzer <grantseltzer@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230126024225.520685-1-grantseltzer@gmail.com
2023-02-17 17:17:27 -08:00
Grant Seltzer
522fe6f721 libbpf: Fix malformed documentation formatting
This fixes the doxygen format documentation above the
user_ring_buffer__* APIs. There has to be a newline
before the @brief, otherwise doxygen won't render them
for libbpf.readthedocs.org.

Signed-off-by: Grant Seltzer <grantseltzer@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230126024749.522278-1-grantseltzer@gmail.com
2023-02-17 17:17:27 -08:00
Andrii Nakryiko
04aafdf9c9 ci: replicate BPF CI changes for clang installation
Add ability to install specified version of Clang. This replicates what
was done in https://github.com/libbpf/ci/pull/86.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
2023-02-09 16:49:06 -08:00
Andrii Nakryiko
416620416f sync: sync include/uapi/linux/openat2.h
As reported in [0], we are missing openat2.h in libbpf-local UAPI
headers. Sync it and adjust sync script to keep syncing it going
forward.

  [0] https://github.com/libbpf/libbpf/issues/649

Closes: https://github.com/libbpf/libbpf/issues/649
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
2023-01-31 16:46:18 -08:00
Joanne Koong
6b4a3f3131 ci: Update default llvm version to 17
Currently, CI is unable to locate llvm-16 on
aarch64/gcc, aarch64/llvm-16, and s390x/gcc [0].

This change upgrades the default llvm version to 17.

[0] https://github.com/kernel-patches/bpf/actions/runs/4040302668

Signed-off-by: Joanne Koong <joannekoong@gmail.com>
2023-01-30 17:20:12 -08:00
Dave Marchevsky
d73ecc91e1 Add patch fixing s390 issues
Signed-off-by: Dave Marchevsky <davemarchevsky@gmail.com>
2023-01-26 11:23:52 -08:00
Andrii Nakryiko
c2e797c8de ci: temporarily denylist decap_sanity test
It is mysteriously fails in CI, for now don't run it.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
f99818dd1a libbpf: regenerate vmlinux.h
Regenerate latest vmlinux.h for old kernel CI tests.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
b2e29a1026 libbpf: dump version to v1.2 in Makefile
Bump LIBBPF_MINOR_VERSION to 2 for v1.2 dev cycle.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
e398e7eaf4 sync: latest libbpf changes from kernel
Syncing latest libbpf commits from kernel repository.
Baseline bpf-next commit:   7b43df6c6ec38c9097420902a1c8165c4b25bf70
Checkpoint bpf-next commit: a5f6b9d577eba18601c14bba2dbff4a9b76af962
Baseline bpf commit:        54c3f1a81421f85e60ae2eaae7be3727a09916ee
Checkpoint bpf commit:      e8c8fd9b8393d7064152c8806f5ac446d760a23e

Alexei Starovoitov (1):
  libbpf: Restore errno after pr_warn.

Andrii Nakryiko (24):
  libbpf: start v1.2 development cycle
  libbpf: Add support for fetching up to 8 arguments in kprobes
  libbpf: Add 6th argument support for x86-64 in bpf_tracing.h
  libbpf: Fix arm and arm64 specs in bpf_tracing.h
  libbpf: Complete mips spec in bpf_tracing.h
  libbpf: Complete powerpc spec in bpf_tracing.h
  libbpf: Complete sparc spec in bpf_tracing.h
  libbpf: Complete riscv arch spec in bpf_tracing.h
  libbpf: Fix and complete ARC spec in bpf_tracing.h
  libbpf: Complete LoongArch (loongarch) spec in bpf_tracing.h
  libbpf: Add BPF_UPROBE and BPF_URETPROBE macro aliases
  libbpf: Improve syscall tracing support in bpf_tracing.h
  libbpf: Define x86-64 syscall regs spec in bpf_tracing.h
  libbpf: Define i386 syscall regs spec in bpf_tracing.h
  libbpf: Define s390x syscall regs spec in bpf_tracing.h
  libbpf: Define arm syscall regs spec in bpf_tracing.h
  libbpf: Define arm64 syscall regs spec in bpf_tracing.h
  libbpf: Define mips syscall regs spec in bpf_tracing.h
  libbpf: Define powerpc syscall regs spec in bpf_tracing.h
  libbpf: Define sparc syscall regs spec in bpf_tracing.h
  libbpf: Define riscv syscall regs spec in bpf_tracing.h
  libbpf: Define arc syscall regs spec in bpf_tracing.h
  libbpf: Define loongarch syscall regs spec in bpf_tracing.h
  libbpf: Clean up now not needed __PT_PARM{1-6}_SYSCALL_REG defaults

Changbin Du (1):
  libbpf: Return -ENODATA for missing btf section

Daniel T. Lee (1):
  libbpf: Fix invalid return address register in s390

David Vernet (1):
  libbpf: Support sleepable struct_ops.s section

Hengqi Chen (1):
  libbpf: Add LoongArch support to bpf_tracing.h

Ludovic L'Hours (1):
  libbpf: Fix map creation flags sanitization

Menglong Dong (1):
  libbpf: Replace '.' with '_' in legacy kprobe event name

Rong Tao (1):
  libbpf: Poison strlcpy()

Stanislav Fomichev (1):
  bpf: Introduce device-bound XDP programs

Xin Liu (2):
  libbpf: fix errno is overwritten after being closed.
  libbpf: Added the description of some API functions

Ziyang Xuan (1):
  bpf: Add ipip6 and ip6ip decap support for bpf_skb_adjust_room()

 include/uapi/linux/bpf.h |  12 ++
 src/bpf_tracing.h        | 320 ++++++++++++++++++++++++++++++++++-----
 src/btf.c                |   2 +-
 src/libbpf.c             |  10 +-
 src/libbpf.h             |  29 +++-
 src/libbpf.map           |   3 +
 src/libbpf_internal.h    |   5 +-
 src/libbpf_version.h     |   2 +-
 8 files changed, 341 insertions(+), 42 deletions(-)

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
c93ba3907f sync: auto-generate latest BPF helpers
Latest changes to BPF helper definitions.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
2023-01-25 20:44:09 -08:00
David Vernet
112479afb7 libbpf: Support sleepable struct_ops.s section
In a prior change, the verifier was updated to support sleepable
BPF_PROG_TYPE_STRUCT_OPS programs. A caller could set the program as
sleepable with bpf_program__set_flags(), but it would be more ergonomic
and more in-line with other sleepable program types if we supported
suffixing a struct_ops section name with .s to indicate that it's
sleepable.

Signed-off-by: David Vernet <void@manifault.com>
Link: https://lore.kernel.org/r/20230125164735.785732-3-void@manifault.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
004ed7120b libbpf: Clean up now not needed __PT_PARM{1-6}_SYSCALL_REG defaults
Each architecture supports at least 6 syscall argument registers, so now
that specs for each architecture is defined in bpf_tracing.h, remove
unnecessary macro overrides, which previously were required to keep
existing BPF_KSYSCALL() uses compiling and working.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-26-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
97740e5103 libbpf: Define loongarch syscall regs spec in bpf_tracing.h
Define explicit table of registers used for syscall argument passing.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-24-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
ef191974b3 libbpf: Define arc syscall regs spec in bpf_tracing.h
Define explicit table of registers used for syscall argument passing.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-23-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
ed66fb297d libbpf: Define riscv syscall regs spec in bpf_tracing.h
Define explicit table of registers used for syscall argument passing.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Tested-by: Pu Lehui <pulehui@huawei.com> # RISC-V
Link: https://lore.kernel.org/bpf/20230120200914.3008030-22-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
2c58ba33fb libbpf: Define sparc syscall regs spec in bpf_tracing.h
Define explicit table of registers used for syscall argument passing.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-21-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
9a6f8da473 libbpf: Define powerpc syscall regs spec in bpf_tracing.h
Define explicit table of registers used for syscall argument passing.
Note that 7th arg is supported on 32-bit powerpc architecture, by not on
powerpc64.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-20-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
a005bb2ff8 libbpf: Define mips syscall regs spec in bpf_tracing.h
Define explicit table of registers used for syscall argument passing.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-19-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
7f627a6202 libbpf: Define arm64 syscall regs spec in bpf_tracing.h
Define explicit table of registers used for syscall argument passing.
We need PT_REGS_PARM1_[CORE_]SYSCALL macros overrides, similarly to
s390x, due to orig_x0 not being present in UAPI's pt_regs, so we need to
utilize BPF CO-RE and custom pt_regs___arm64 definition.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Tested-by: Alan Maguire <alan.maguire@oracle.com> # arm64
Link: https://lore.kernel.org/bpf/20230120200914.3008030-18-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
a095b4f04d libbpf: Define arm syscall regs spec in bpf_tracing.h
Define explicit table of registers used for syscall argument passing.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-17-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
bd6e1ec311 libbpf: Define s390x syscall regs spec in bpf_tracing.h
Define explicit table of registers used for syscall argument passing.
Note that we need custom overrides for PT_REGS_PARM1_[CORE_]SYSCALL
macros due to the need to use BPF CO-RE and custom local pt_regs
definitions to fetch orig_gpr2, storing 1st argument.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com> # s390x
Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-16-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
b2d8a8d269 libbpf: Define i386 syscall regs spec in bpf_tracing.h
Define explicit table of registers used for syscall argument passing.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-15-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
df16188dc2 libbpf: Define x86-64 syscall regs spec in bpf_tracing.h
Define explicit table of registers used for syscall argument passing.
Remove now unnecessary overrides of PT_REGS_PARM5_[CORE_]SYSCALL macros.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-14-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
672401ae09 libbpf: Improve syscall tracing support in bpf_tracing.h
Set up generic support in bpf_tracing.h for up to 7 syscall arguments
tracing with BPF_KSYSCALL, which seems to be the limit according to
syscall(2) manpage. Also change the way that syscall convention is
specified to be more explicit. Subsequent patches will adjust and define
proper per-architecture syscall conventions.

__PT_PARM1_SYSCALL_REG through __PT_PARM6_SYSCALL_REG is added
temporarily to keep everything working before each architecture has
syscall reg tables defined. They will be removed afterwards.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Tested-by: Alan Maguire <alan.maguire@oracle.com> # arm64
Link: https://lore.kernel.org/bpf/20230120200914.3008030-13-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
ed8b4c90ea libbpf: Add BPF_UPROBE and BPF_URETPROBE macro aliases
Add BPF_UPROBE and BPF_URETPROBE macros, aliased to BPF_KPROBE and
BPF_KRETPROBE, respectively. This makes uprobe-based BPF program code
much less confusing, especially to people new to tracing, at no cost in
terms of maintainability. We'll use this macro in selftests in
subsequent patch.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-11-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
2094e1b37e libbpf: Complete LoongArch (loongarch) spec in bpf_tracing.h
Add PARM6 through PARM8 definitions. Add kernel docs link describing ABI
for LoongArch.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-10-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
c978366c38 libbpf: Fix and complete ARC spec in bpf_tracing.h
Add PARM6 through PARM8 definitions. Also fix frame pointer (FP)
register definition. Also leave a link to where to find ABI spec.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-9-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
9db84de5f0 libbpf: Complete riscv arch spec in bpf_tracing.h
Add PARM6 through PARM8 definitions for RISC V (riscv) arch. Leave the
link for ABI doc for future reference.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Tested-by: Pu Lehui <pulehui@huawei.com> # RISC-V
Link: https://lore.kernel.org/bpf/20230120200914.3008030-8-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
ffbc84cf6f libbpf: Complete sparc spec in bpf_tracing.h
Add PARM6 definition for sparc architecture. Leave a link to calling
convention documentation.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-7-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
7b86294a90 libbpf: Complete powerpc spec in bpf_tracing.h
Add definitions of PARM6 through PARM8 for powerpc architecture. Add
also a link to a functiona call sequence documentation for future reference.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-6-andrii@kernel.org
2023-01-25 20:44:09 -08:00
Andrii Nakryiko
31e29d9346 libbpf: Complete mips spec in bpf_tracing.h
Add registers for PARM6 through PARM8. Add a link to an ABI. We don't
distinguish between O32, N32, and N64, so document that we assume N64
right now.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230120200914.3008030-5-andrii@kernel.org
2023-01-25 20:44:09 -08:00