linux/scripts
Ilya Leoshkevich 581ee79a25 scripts/gdb/symbols: make BPF debug info available to GDB
One can debug BPF programs with QEMU gdbstub by setting a breakpoint on
bpf_prog_kallsyms_add(), waiting for a hit with a matching aux.name, and
then setting a breakpoint on bpf_func.  This is tedious, error-prone, and
also lacks line numbers.

Automate this in a way similar to the existing support for modules in
lx-symbols.

Enumerate and monitor changes to both BPF kallsyms and JITed progs.  For
each ksym, generate and compile a synthetic .s file containing the name,
code, and size.  In addition, if this ksym is also a prog, and not a
trampoline, add line number information.

Ensure that this is a no-op if the kernel is built without BPF support or
if "as" is missing.  In theory the "as" dependency may be dropped by
generating the synthetic .o file manually, but this is too much complexity
for too little benefit.

Now one can debug BPF progs out of the box like this:

    (gdb) lx-symbols -bpf
    (gdb) b bpf_prog_4e612a6a881a086b_arena_list_add
    Breakpoint 2 (bpf_prog_4e612a6a881a086b_arena_list_add) pending.

    # ./test_progs -t arena_list

    Thread 4 hit Breakpoint 2, bpf_prog_4e612a6a881a086b_arena_list_add ()
        at linux/tools/testing/selftests/bpf/progs/arena_list.c:51
    51              list_head = &global_head;
    (gdb) n
    bpf_prog_4e612a6a881a086b_arena_list_add () at linux/tools/testing/selftests/bpf/progs/arena_list.c:53
    53              for (i = zero; i < cnt && can_loop; i++) {

This also works for subprogs.

Link: https://lkml.kernel.org/r/20251106124600.86736-3-iii@linux.ibm.com
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Cc: Alexander Gordeev <agordeev@linux.ibm.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Andrii Nakryiko <andrii@kernel.org>
Cc: Daniel Borkman <daniel@iogearbox.net>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Kieran Bingham <kbingham@kernel.org>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2025-11-20 14:03:42 -08:00
..
atomic rust: Introduce atomic API helpers 2025-09-15 09:38:32 +02:00
bash-completion kbuild: add Kbuild bash completion 2025-03-15 21:22:52 +09:00
basic integer-wrap: Force full rebuild when .scl file changes 2025-05-08 09:42:06 -07:00
clang-tools gen_compile_commands.py: remove code for '\#' replacement 2025-03-15 21:16:21 +09:00
coccinelle Patch series in this pull request: 2025-10-02 18:44:54 -07:00
crypto lib/crypto: tests: Add KUnit tests for BLAKE2s 2025-08-29 09:50:19 -07:00
dtc scripts: dt_to_config: fix grammar and a typo in --help text 2025-09-26 15:53:30 -05:00
dummy-tools kbuild: dummy-tools: pretend we understand -fpatchable-function-entry 2023-11-01 23:24:56 +09:00
gcc-plugins gcc-plugins: Remove TODO_verify_il for GCC >= 16 2025-09-23 13:59:39 -07:00
gdb scripts/gdb/symbols: make BPF debug info available to GDB 2025-11-20 14:03:42 -08:00
gendwarfksyms gendwarfksyms: order -T symtypes output by name 2025-07-26 15:31:30 +09:00
genksyms genksyms: Fix enum consts from a reference affecting new values 2025-06-07 14:38:07 +09:00
include scripts: import more list macros 2024-10-07 02:12:27 +09:00
ipe scripts: ipe: polgen: remove redundant close and error exit path 2024-11-19 13:57:03 -08:00
kconfig kconfig/nconf: Initialize the default locale at startup 2025-11-01 00:23:22 -04:00
ksymoops
lib docs: kdoc: a few more dump_typedef() tweaks 2025-09-18 10:19:54 -06:00
mod modpost: Initialize builtin_modname to stop SIGSEGVs 2025-09-28 07:54:07 -04:00
package kbuild: install-extmod-build: Fix when given dir outside the build dir 2025-10-25 21:59:20 +01:00
selinux docs: Remove remainders of reiserfs 2025-08-18 10:45:43 -06:00
tracing scripts/tracing: Remove scripts/tracing/draw_functrace.py 2025-03-20 07:02:21 -04:00
.gitignore lib: packing: add pack_fields() and unpack_fields() 2024-12-11 20:13:00 -08:00
as-version.sh
asn1_compiler.c ASN.1: Fix check for strdup() success 2023-04-21 08:58:00 -07:00
bloat-o-meter scripts/bloat-o-meter: count weak symbol sizes 2023-08-21 13:46:25 -07:00
bootgraph.pl
bpf_doc.py bpf: Finish constification of 1st parameter of bpf_d_path() 2025-10-04 09:05:23 -07:00
build-version kbuild: move init/build-version to scripts/ 2024-07-16 01:08:37 +09:00
cc-can-link.sh
cc-version.sh scripts: Remove ICC-related dead code 2023-04-24 10:18:32 -07:00
check-git
check-sysctl-docs docs: Replace spaces with tabs in check-sysctl-docs 2025-07-23 11:57:05 +02:00
check-uapi.sh check-uapi: Introduce check-uapi.sh 2023-12-29 22:25:20 +09:00
check-variable-fonts.sh docs: scripts/check-variable-fonts.sh: Improve commands for detection 2024-05-02 10:14:52 -06:00
check_extable.sh
checkdeclares.pl
checkincludes.pl
checkkconfigsymbols.py
checkpatch.pl checkpatch: add IDR to the deprecated list 2025-11-20 14:03:41 -08:00
checkstack.pl scripts/checkstack.pl: fix no space expression between sp and offset 2023-12-29 12:22:28 -08:00
checksyscalls.sh
checktransupdate.py scripts: add origin commit identification based on specific patterns 2025-07-24 08:41:15 -06:00
checkversion.pl
cleanfile
cleanpatch
coccicheck kbuild: change working directory to external module directory with M= 2024-11-28 08:10:23 +09:00
config kbuild: fix argument parsing in scripts/config 2025-03-15 21:22:42 +09:00
const_structs.checkpatch const_structs.checkpatch: add bin_attribute 2025-06-17 10:44:07 +02:00
decode_stacktrace.sh scripts/decode_stacktrace.sh: code: preserve alignment 2025-09-21 14:22:28 -07:00
decodecode scripts/decodecode: add support for LoongArch 2023-12-29 12:22:25 -08:00
depmod.sh kbuild: add $(objtree)/ prefix to some in-kernel build artifacts 2024-11-27 09:38:27 +09:00
dev-needs.sh
diffconfig
documentation-file-ref-check scripts/documentation-file-ref-check: don't check perl/python scripts 2025-02-10 11:19:56 -07:00
extract-fwblobs scripts: add script to extract built-in firmware blobs 2025-03-16 22:30:46 -07:00
extract-ikconfig
extract-module-sig.pl
extract-sys-certs.pl
extract-vmlinux extract-vmlinux: Output used decompression method 2025-08-28 15:25:48 -07:00
extract_xc3028.pl
faddr2line Revert "scripts/faddr2line: Check only two symbols when calculating symbol size" 2024-10-17 15:16:04 -07:00
file-size.sh
find-unused-docs.sh scripts/kernel-doc.py: don't create *.pyc files 2025-04-24 10:12:46 -06:00
gen-crc-consts.py riscv/crc: add "template" for Zbc optimized CRC functions 2025-03-10 09:29:08 -07:00
gen-randstruct-seed.sh
gen_packed_field_checks.c lib: packing: add pack_fields() and unpack_fields() 2024-12-11 20:13:00 -08:00
generate_builtin_ranges.awk kbuild: exclude .rodata.(cst|str)* when building ranges 2025-03-15 21:22:52 +09:00
generate_initcall_order.pl
generate_rust_analyzer.py rust: add pin-init as a dependency to bindings and uapi 2025-09-08 13:42:39 +02:00
generate_rust_target.rs rust: support Rust >= 1.91.0 target spec 2025-08-31 23:34:34 +02:00
get_abi.py scripts/get_abi.py: add support for undefined ABIs 2025-02-10 11:19:57 -07:00
get_dvb_firmware
get_feat.pl scripts: get_feat.pl: substitute s390x with s390 2025-03-12 16:25:50 -06:00
get_maintainer.pl get_maintainer: stop reporting subsystem status as maintainer role 2025-03-16 22:30:49 -07:00
gfp-translate scripts: fix gfp-translate after ___GFP_*_BITS conversion to an enum 2024-09-01 17:59:01 -07:00
git-resolve.sh git-resolve: add SPDX and copyright line 2025-04-25 15:54:24 +02:00
git.orderFile scripts: Introduce a default git.orderFile 2023-12-29 22:25:20 +09:00
head-object-list.txt openrisc: place exception table at the head of vmlinux 2024-12-10 12:04:19 +00:00
headerdep.pl
headers_install.sh uapi: wrap compiler_types.h in an ifdef instead of the implicit strip 2025-08-28 13:06:48 +02:00
insert-sys-cert.c
install.sh kbuild: Create INSTALL_PATH directory if it does not exist 2024-07-20 13:34:54 +09:00
integer-wrap-ignore.scl ubsan/overflow: Enable ignorelist parsing and add type filter 2025-03-07 19:58:05 -08:00
jobserver-exec
kallsyms.c kallsyms: Remove KALLSYMS_ABSOLUTE_PERCPU 2025-02-18 10:16:04 +01:00
Kbuild.include kbuild: add $(objtree)/ prefix to some in-kernel build artifacts 2024-11-27 09:38:27 +09:00
Kconfig.include kbuild: rust: add CONFIG_RUSTC_LLVM_VERSION 2024-10-13 22:22:28 +02:00
kernel-doc scripts/kernel-doc: switch to use kernel-doc.py 2025-04-09 12:10:34 -06:00
kernel-doc.pl scripts: kernel-doc: fix parsing function-like typedefs (again) 2025-04-09 12:10:34 -06:00
kernel-doc.py docs: kernel-doc: avoid script crash on ancient Python 2025-08-11 10:54:29 -06:00
ld-version.sh kbuild: Make ld-version.sh more robust against version string changes 2024-07-15 03:13:32 +09:00
leaking_addresses.pl leaking_addresses: Provide mechanism to scan binary files 2024-02-29 13:38:03 -08:00
Lindent
link-vmlinux.sh kbuild: vmlinux.unstripped should always depend on .vmlinux.export.o 2025-09-24 09:10:45 -07:00
macro_checker.py scripts: add macro_checker script to check unused parameters in macros 2024-09-01 20:43:28 -07:00
make_fit.py scripts/make_fit: Print DT name before libfdt errors 2025-03-27 14:03:32 -05:00
Makefile Kbuild updates for v6.14 2025-01-31 12:07:07 -08:00
Makefile.asm-headers kbuild: fix rebuild of generic syscall headers 2024-07-18 10:01:55 -07:00
Makefile.autofdo AutoFDO: Enable machine function split optimization for AutoFDO 2024-11-27 09:38:27 +09:00
Makefile.btf kbuild, bpf: Enable --btf_features=attributes 2025-04-15 11:17:50 -07:00
Makefile.build kbuild: Let kernel-doc.py use PYTHON3 override 2025-11-08 19:42:22 -07:00
Makefile.clang kbuild: clang: Support building UM with SUBARCH=i386 2025-03-04 09:40:13 -08:00
Makefile.clean kbuild: change working directory to external module directory with M= 2024-11-28 08:10:23 +09:00
Makefile.compiler require gcc-8 and binutils-2.30 2025-05-31 08:16:52 -07:00
Makefile.debug kbuild: rust: use -Zdebuginfo-compression 2024-04-02 17:41:22 +02:00
Makefile.defconf kbuild: suppress stdout from merge_config for silent builds 2025-01-10 23:01:21 +09:00
Makefile.dtbinst kbuild: Install dtb files as 0644 in Makefile.dtbinst 2024-06-26 00:18:57 +09:00
Makefile.dtbs scripts/dtc: Update to upstream version v1.7.2-35-g52f07dcca47c 2025-08-11 08:08:51 -05:00
Makefile.extrawarn scripts/Makefile.extrawarn: Respect CONFIG_WERROR / W=e for hostprogs 2025-10-07 09:46:04 -07:00
Makefile.gcc-plugins stackleak: Split KSTACK_ERASE_CFLAGS from GCC_PLUGINS_CFLAGS 2025-07-21 21:40:57 -07:00
Makefile.headersinst
Makefile.host kbuild: support building external modules in a separate build directory 2024-11-28 08:11:55 +09:00
Makefile.kasan kasan: fix GCC mem-intrinsic prefix with sw tags 2025-08-27 22:45:43 -07:00
Makefile.kcov - The 2 patch series "zram: support algorithm-specific parameters" from 2025-06-02 16:00:26 -07:00
Makefile.kcsan
Makefile.kmsan
Makefile.kstack_erase kstack_erase: Fix missed export of renamed KSTACK_ERASE_CFLAGS 2025-07-29 17:17:46 -07:00
Makefile.lib Kbuild updates for v6.16 2025-06-07 10:05:35 -07:00
Makefile.modfinal kbuild: re-enable KCSAN for autogenerated *.mod.c intermediaries 2024-11-28 08:11:55 +09:00
Makefile.modinst kbuild: Fix signing issue for external modules 2025-01-18 08:52:09 +09:00
Makefile.modpost modpost: Allow extended modversions without basic MODVERSIONS 2025-01-11 02:36:32 +09:00
Makefile.package kbuild: rpm-pkg: disable kernel-devel package when cross-compiling 2024-10-31 21:40:46 +09:00
Makefile.propeller kbuild: Fix Propeller build option 2024-11-27 09:38:27 +09:00
Makefile.randstruct
Makefile.ubsan ARM: 2025-05-29 08:10:01 -07:00
Makefile.userprogs kbuild: support 'userldlibs' syntax 2023-11-01 23:26:01 +09:00
Makefile.vdsoinst more s390 updates for 6.10 merge window 2024-05-21 12:09:36 -07:00
Makefile.vmlinux kbuild: Strip trailing padding bytes from modules.builtin.modinfo 2025-11-06 09:50:23 -07:00
Makefile.vmlinux_o kbuild: extract modules.builtin.modinfo from vmlinux.unstripped 2025-09-24 09:10:44 -07:00
makelst
markup_oops.pl
min-tool-version.sh kbuild: Bump minimum version of LLVM for building the kernel to 15.0.0 2025-08-28 16:58:43 -07:00
misc-check scripts/misc-check: update export checks for EXPORT_SYMBOL_FOR_MODULES() 2025-08-26 12:00:17 -07:00
mkcompile_h
mksysmap modpost: Create modalias for builtin modules 2025-09-24 09:10:45 -07:00
mkuboot.sh
module-common.c kbuild: compile constant module information only once 2024-09-07 17:24:08 +09:00
module.lds.S alloc_tag: remove empty module tag section 2025-07-09 22:42:03 -07:00
modules-check.sh
nsdeps scripts/nsdeps: get 'make nsdeps' working again 2024-12-03 08:22:25 -08:00
objdiff
objdump-func
orc_hash.sh x86/unwind/orc: Add ELF section with ORC version identifier 2023-06-16 17:17:42 +02:00
pahole-version.sh
parse-maintainers.pl
patch-kernel
profile2linkerlist.pl
prune-kernel
recordmcount.c scripts: clean up IA-64 code 2023-12-03 18:51:48 +09:00
recordmcount.h
recordmcount.pl tracing: Remove redundant config HAVE_FTRACE_MCOUNT_RECORD 2025-07-22 20:15:56 -04:00
relocs_check.sh
remove-stale-files selinux: move genheaders to security/selinux/ 2024-10-03 16:07:51 -04:00
rust_is_available.sh rust: document bindgen 0.71.0 regression 2025-01-10 00:17:00 +01:00
rust_is_available_bindgen_0_66.h rust: warn about bindgen versions 0.66.0 and 0.66.1 2024-07-10 10:28:52 +02:00
rust_is_available_bindgen_libclang.h
rust_is_available_bindgen_libclang_concat.h rust: warn on bindgen < 0.69.5 and libclang >= 19.1 2024-11-12 21:26:54 +01:00
rust_is_available_test.py rust: warn on bindgen < 0.69.5 and libclang >= 19.1 2024-11-12 21:26:54 +01:00
rustc-llvm-version.sh kbuild: rust: avoid errors with old rustcs without LLVM patch version 2024-10-28 00:27:16 +01:00
rustc-version.sh kbuild: rust: add CONFIG_RUSTC_VERSION 2024-09-05 22:44:18 +02:00
rustdoc_test_builder.rs rust: use absolute paths in macros referencing core and kernel 2025-05-23 00:12:14 +02:00
rustdoc_test_gen.rs rust: kunit: use kernel::{fmt,prelude::fmt!} 2025-09-16 09:26:59 +02:00
setlocalversion setlocalversion: add -e option 2024-11-28 08:11:56 +09:00
show_delta scripts: make python shebangs specific about desired version 2025-03-15 21:19:44 +09:00
sign-file.c sign-file,extract-cert: use pkcs11 provider for OPENSSL MAJOR >= 3 2024-09-20 19:52:48 +03:00
sorttable.c scripts/sorttable: Fix endianness handling in build-time mcount sort 2025-04-02 09:51:26 -04:00
spdxcheck-test.sh
spdxcheck.py scripts/spdxcheck: Handle license identifiers in Jinja comments 2025-01-08 15:38:33 +01:00
spdxexclude
spelling.txt scripts/spelling.txt: add notifer||notifier to spelling.txt 2025-08-02 12:01:40 -07:00
sphinx-build-wrapper scripts: sphinx-build-wrapper: get rid of uapi/media Makefile 2025-08-29 15:54:43 -06:00
sphinx-pre-install scripts/sphinx-pre-install: fix Archlinux PDF dependencies 2025-08-21 14:08:53 -06:00
split-man.pl
ssl-common.h sign-file,extract-cert: avoid using deprecated ERR_get_error_line() 2024-09-20 19:49:52 +03:00
stackdelta
stackusage
subarch.include scripts: subarch.include: fix SUBARCH on macOS hosts 2024-09-10 13:56:37 +09:00
syscall.tbl fs: introduce file_getattr and file_setattr syscalls 2025-07-02 17:05:17 +02:00
syscallhdr.sh
syscallnr.sh
syscalltbl.sh x86/syscall: Mark exit[_group] syscall handlers __noreturn 2024-06-28 15:23:38 +02:00
tags.sh scripts/tags.sh: allow to use alternative ctags implementation 2025-06-06 05:40:25 +09:00
test_doc_build.py scripts: test_doc_build.py: regroup and rename arguments 2025-06-25 12:22:48 -06:00
tools-support-relr.sh
unifdef.c scripts/unifdef: avoid constexpr keyword 2024-04-23 00:09:41 +09:00
ver_linux ver_linux: Remove checks for reiserfsprogs. 2025-06-09 14:53:16 -06:00
verify_builtin_ranges.awk scripts: add verifier script for builtin module range data 2024-09-20 09:21:52 +09:00
xen-hypercalls.sh
xz_wrap.sh xz: adjust arch-specific options for better kernel compression 2024-09-01 20:43:27 -07:00