On Tue, Jan 19, 2021 at 11:12:17PM +0100, Jiri Olsa wrote: > hi, > kpatch guys hit an issue with pahole over their vmlinux, which > contains many (over 100000) sections, pahole crashes. > FWIW this is probably only going to be problem when building the kernel with -f[function|data]-sections and tipping over 65536 sections. We only use these option to determine code deltas, but other users (FG-ASLR, LTO?) may need to actually build runtime code. > With so many sections, ELF is using extended section index table, > which is used to hold values for some of the indexes and extra > code is needed to retrieve them. > > This patchset adds the support for pahole to properly read string > table index and symbol's section index, which are used in btf_encoder. > > This patchset also adds support for libbpf to properly parse .BTF > section on such object. > > This patchset based on previously posted fix [1]. > Hi Jiri, Thanks for posting a potential fix, here's what I saw when running it: 1-Installed your scratch build: % rpm -q --whatprovides $(which pahole) dwarves-1.19-2.el8.x86_64 2-From the kernel build: LD vmlinux.o MODPOST vmlinux.o BTF .btf.vmlinux.bin.o scripts/link-vmlinux.sh: line 127: 1851330 Segmentation fault (core dumped) LLVM_OBJCOPY=${OBJCOPY} ${PAHOLE} -J ${1} objcopy: --change-section-vma .BTF=0x0000000000000000 never used objcopy: --change-section-lma .BTF=0x0000000000000000 never used objcopy: error: the input file '.btf.vmlinux.bin' is empty Failed to generate BTF for vmlinux Try to disable CONFIG_DEBUG_INFO_BTF make: *** [Makefile:1050: vmlinux] Error 1 3-coredump backtrace: ... Core was generated by `pahole -J .tmp_vmlinux.btf'. ... (gdb) bt #0 0x00007fc0e81e31c0 in __memcpy_ssse3 () from /lib64/libc.so.6 #1 0x00007fc0e8b6700a in memcpy (__len=306248, __src=<optimized out>, __dest=0x7fc0e91a0010) at /usr/include/bits/string_fortified.h:34 #2 get_vmlinux_addrs (btfe=<optimized out>, pcount=<synthetic pointer>, paddrs=<synthetic pointer>, fl=<synthetic pointer>) at /usr/src/debug/dwarves-1.19-2.el8.x86_64/btf_encoder.c:167 #3 setup_functions (fl=<synthetic pointer>, btfe=<optimized out>) at /usr/src/debug/dwarves-1.19-2.el8.x86_64/btf_encoder.c:251 #4 collect_symbols (collect_percpu_vars=<optimized out>, btfe=<optimized out>) at /usr/src/debug/dwarves-1.19-2.el8.x86_64/btf_encoder.c:645 #5 cu__encode_btf (cu=<optimized out>, verbose=0, force=false, skip_encoding_vars=<optimized out>) at /usr/src/debug/dwarves-1.19-2.el8.x86_64/btf_encoder.c:694 #6 0x000055eb2e4b6cc5 in pahole_stealer (cu=0x55eb2ecbb920, conf_load=<optimized out>) at /usr/src/debug/dwarves-1.19-2.el8.x86_64/pahole.c:2402 #7 0x00007fc0e8b6d2db in finalize_cu_immediately (conf=0x55eb2e6bc0e0 <conf_load>, dcu=0x7ffd88fda9d0, cu=0x55eb2ecbb920, cus=0x55eb2ecbb5d0) at /usr/src/debug/dwarves-1.19-2.el8.x86_64/dwarf_loader.c:2477 #8 cus__load_module (cus=cus@entry=0x55eb2ecbb5d0, conf=0x55eb2e6bc0e0 <conf_load>, mod=mod@entry=0x55eb2ecbb5f0, dw=0x55eb2ecbe6a0, elf=elf@entry=0x7fc0ad941010, filename=0x7ffd8905b98d ".tmp_vmlinux.btf") at /usr/src/debug/dwarves-1.19-2.el8.x86_64/dwarf_loader.c:2477 #9 0x00007fc0e8b6d5c5 in cus__process_dwflmod (dwflmod=0x55eb2ecbb5f0, userdata=<optimized out>, name=<optimized out>, base=<optimized out>, arg=0x7ffd8905ab00) at /usr/src/debug/dwarves-1.19-2.el8.x86_64/dwarf_loader.c:2522 #10 0x00007fc0e88f9c71 in dwfl_getmodules () from /lib64/libdw.so.1 #11 0x00007fc0e8b69cdc in cus__process_file (filename=<optimized out>, fd=5, conf=0x55eb2e6bc0e0 <conf_load>, cus=0x55eb2ecbb5d0) at /usr/src/debug/dwarves-1.19-2.el8.x86_64/dwarf_loader.c:2575 #12 dwarf__load_file (cus=0x55eb2ecbb5d0, conf=0x55eb2e6bc0e0 <conf_load>, filename=<optimized out>) at /usr/src/debug/dwarves-1.19-2.el8.x86_64/dwarf_loader.c:2592 #13 0x00007fc0e8b5cb82 in cus__load_file (cus=cus@entry=0x55eb2ecbb5d0, conf=conf@entry=0x55eb2e6bc0e0 <conf_load>, filename=0x7ffd8905b98d ".tmp_vmlinux.btf") at /usr/src/debug/dwarves-1.19-2.el8.x86_64/dwarves.c:1963 #14 0x00007fc0e8b5ce29 in cus__load_files (cus=0x55eb2ecbb5d0, conf=0x55eb2e6bc0e0 <conf_load>, filenames=0x7ffd8905aea8) at /usr/src/debug/dwarves-1.19-2.el8.x86_64/dwarves.c:2324 #15 0x000055eb2e4b371e in main (argc=3, argv=0x7ffd8905ae98) at /usr/src/debug/dwarves-1.19-2.el8.x86_64/pahole.c:2760 I uploaded a gzipped core file here: http://people.redhat.com/~jolawren/coredump.gz If it's easier to get you setup on a repro system, let me know and I can do that. Thanks, -- Joe