[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210119231718.GA3173@redhat.com>
Date: Tue, 19 Jan 2021 18:17:18 -0500
From: Joe Lawrence <joe.lawrence@...hat.com>
To: Jiri Olsa <jolsa@...nel.org>
Cc: Arnaldo Carvalho de Melo <acme@...nel.org>,
Alexei Starovoitov <ast@...nel.org>,
Daniel Borkmann <daniel@...earbox.net>,
Andrii Nakryiko <andriin@...com>, dwarves@...r.kernel.org,
netdev@...r.kernel.org, bpf@...r.kernel.org,
Yonghong Song <yhs@...com>, Hao Luo <haoluo@...gle.com>,
Martin KaFai Lau <kafai@...com>,
Song Liu <songliubraving@...com>,
John Fastabend <john.fastabend@...il.com>,
KP Singh <kpsingh@...omium.org>, Mark Wielaard <mjw@...hat.com>
Subject: Re: [PATCH 0/3] dwarves,libbpf: Add support to use optional extended
section index table
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@...ry=0x55eb2ecbb5d0, conf=0x55eb2e6bc0e0 <conf_load>, mod=mod@...ry=0x55eb2ecbb5f0, dw=0x55eb2ecbe6a0,
elf=elf@...ry=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@...ry=0x55eb2ecbb5d0, conf=conf@...ry=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
Powered by blists - more mailing lists