Dear Alan,
Thank you for looking into this.
Am 24.04.25 um 20:07 schrieb Alan Maguire:
On 22/04/2025 14:33, Paul Menzel wrote:
Trying to build Linux 6.12.23 with BTF and pahole 1.30, I get the build
failure below:
$ more .config
[…]
#
# Compile-time checks and compiler options
#
CONFIG_DEBUG_INFO=y
CONFIG_AS_HAS_NON_CONST_ULEB128=y
# CONFIG_DEBUG_INFO_NONE is not set
# CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set
# CONFIG_DEBUG_INFO_DWARF4 is not set
CONFIG_DEBUG_INFO_DWARF5=y
# CONFIG_DEBUG_INFO_REDUCED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
# CONFIG_DEBUG_INFO_COMPRESSED_ZLIB is not set
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_BTF=y
CONFIG_PAHOLE_HAS_SPLIT_BTF=y
CONFIG_DEBUG_INFO_BTF_MODULES=y
# CONFIG_MODULE_ALLOW_BTF_MISMATCH is not set
# CONFIG_GDB_SCRIPTS is not set
CONFIG_FRAME_WARN=2048
# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_READABLE_ASM is not set
# CONFIG_HEADERS_INSTALL is not set
# CONFIG_DEBUG_SECTION_MISMATCH is not set
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
CONFIG_OBJTOOL=y
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
# end of Compile-time checks and compiler options
[…]
$ make -j100
[…]
LD .tmp_vmlinux1
BTF .tmp_vmlinux1.btf.o
die__process: DW_TAG_compile_unit, DW_TAG_type_unit,
DW_TAG_partial_unit or DW_TAG_skeleton_unit expected got INVALID (0x0) @
115a4a9!
error decoding cu
pahole: .tmp_vmlinux1: Invalid argument
NM .tmp_vmlinux1.syms
KSYMS .tmp_vmlinux1.kallsyms.S
AS .tmp_vmlinux1.kallsyms.o
LD .tmp_vmlinux2
NM .tmp_vmlinux2.syms
KSYMS .tmp_vmlinux2.kallsyms.S
AS .tmp_vmlinux2.kallsyms.o
LD vmlinux
BTFIDS vmlinux
libbpf: failed to find '.BTF' ELF section in vmlinux
FAILED: load BTF from vmlinux: No data available
make[2]: *** [scripts/Makefile.vmlinux:34: vmlinux] Error 255
make[2]: *** Deleting file 'vmlinux'
make[1]: *** [/dev/shm/linux/Makefile:1179: vmlinux] Error 2
make: *** [Makefile:224: __sub-make] Error 2
Help how to get a successful build is much appreciated.
I haven't been able to reproduce this one yet with your config;
I tried with bpf-next + gcc-14, then switched to linux stable 6.12y +
gcc 12 as that more closely matched your situation; all works fine for
me. I'll try more precisely matching the gcc 12 version; things worked
fine with pahole v.130 + gcc 12.2.1; from your config looks like you
have gcc 12.3.0.
I also tried gcc 14.1.0, and now Linux origin/master (e72e9e6933071
(Merge tag 'net-6.15-rc4' of
git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net)) with gcc
12.3.0. We do build GCC ourselves [1]. Maybe there is something missing?
I built with `make V=1` now, and here are the commands:
```
$ make V=1
[…]
+ ld -m elf_x86_64 -z noexecstack --no-warn-rwx-segments -z
max-page-size=0x200000 --build-id=sha1 --orphan-handling=warn
--script=./arch/x86/kernel/vmlinux.lds -o .tmp_vmlinux1 --whole-archive
vmlinux.o .vmlinux.export.o init/version-timestamp.o --no-whole-archive
--start-group --end-group .tmp_vmlinux0.kallsyms.o
+ is_enabled CONFIG_DEBUG_INFO_BTF
+ grep -q '^CONFIG_DEBUG_INFO_BTF=y' include/config/auto.conf
+ gen_btf .tmp_vmlinux1
+ local btf_data=.tmp_vmlinux1.btf.o
+ info BTF .tmp_vmlinux1.btf.o
+ printf ' %-7s %s\n' BTF .tmp_vmlinux1.btf.o
BTF .tmp_vmlinux1.btf.o
+ LLVM_OBJCOPY=objcopy
+ pahole -J -j
--btf_features=encode_force,var,float,enum64,decl_tag,type_tag,optimized_func,consistent_func,decl_tag_kfuncs
--lang_exclude=rust .tmp_vmlinux1
die__process: DW_TAG_compile_unit, DW_TAG_type_unit, DW_TAG_partial_unit
or DW_TAG_skeleton_unit expected got INVALID (0x0) @ 1229728!
error decoding cu
pahole: .tmp_vmlinux1: Invalid argument
[…]
```
I uploaded `.tmp_vmlinux1` (295 MB) [3].
Copying this file to a Debian sid/unstable system with *pahole* 1.30-1,
and *llvm-19* 1:19.1.7-3, there is no error.
$ ls -l /usr/bin/llvm-objcopy
lrwxrwxrwx 1 root root 31 Nov 11 12:42 /usr/bin/llvm-objcopy ->
../lib/llvm-19/bin/llvm-objcopy
$ llvm-objcopy --version
llvm-objcopy, compatible with GNU objcopy
Debian LLVM version 19.1.7
Optimized build.
In the problematic environment, we have LLVM 18.1.8 installed:
$ llvm-objcopy --version
llvm-objcopy, compatible with GNU objcopy
LLVM (http://llvm.org/):
LLVM version 18.1.8
Optimized build.
Kind regards,
Paul
[1]:
https://github.molgen.mpg.de/mariux64/bee-files/blob/8cd1999f62d2865372c0240e5a62f7f0099fa615/gcc.be0#L28
[2]:
https://github.molgen.mpg.de/mariux64/pkg-scripts/blob/2c229b222d0ba0794e24e51223aa4768e30884e2/gcc-14.1.0-0.build.sh#L49
[3]: https://owww.molgen.mpg.de/~pmenzel/.tmp_vmlinux1
PS: Using pahole 1.23 I get:
$ make -j100
[…]
LD .tmp_vmlinux1
BTF .tmp_vmlinux1.btf.o
pahole: Multithreading requires elfutils >= 0.178. Continuing with a single thread...
Unsupported DW_TAG_unspecified_type(0x3b)
Encountered error while encoding BTF.
NM .tmp_vmlinux1.syms
KSYMS .tmp_vmlinux1.kallsyms.S
AS .tmp_vmlinux1.kallsyms.o
LD .tmp_vmlinux2
NM .tmp_vmlinux2.syms
KSYMS .tmp_vmlinux2.kallsyms.S
AS .tmp_vmlinux2.kallsyms.o
LD vmlinux
BTFIDS vmlinux
libbpf: failed to find '.BTF' ELF section in vmlinux
FAILED: load BTF from vmlinux: No data available
make[2]: *** [scripts/Makefile.vmlinux:34: vmlinux] Error 255
make[2]: *** Deleting file 'vmlinux'
make[1]: *** [/dev/shm/linux/Makefile:1179: vmlinux] Error 2
make: *** [Makefile:224: __sub-make] Error 2