On Thu, Apr 13, 2023 at 12:54:19PM +0800, Tianyi Liu wrote: > On Wed, Apr 12, 2023 at 16:30PM UTC, Josh Poimboeuf wrote: > > On Wed, Apr 12, 2023 at 03:10:14PM +0800, Tianyi Liu wrote: > > > On Tue, Apr 11, 2023 at 17:00 , Josh Poimboeuf wrote: > > > > On Tue, Feb 14, 2023 at 02:33:02PM +0800, Tianyi Liu wrote: > > > > > > LLVM_OBJCOPY=objcopy pahole -J --btf_gen_floats -j > > > > > > --skip_encoding_btf_inconsistent_proto --btf_gen_optimized > > > > > > .tmp_vmlinux.btf > > > > > > btf_encoder__encode: btf__dedup failed! > > > > > > Failed to encode BTF > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > I encountered the same problem when building a new kernel and I found some > > > > > reasons for the error. > > > > > > > > > > In short, enabling CONFIG_X86_KERNEL_IBT will change the order of records in > > > > > .notes section. In addition, due to historical problems, the alignment of > > > > > records in the .notes section is not unified, which leads to the inability of > > > > > gelf_getnote() to read the records after the wrong one. > > > > > > > > Alexandre, Tianyi, are you still seeing this issue with the latest > > > > dwarves? If so can you confirm the below patch fixes it? > > > > > > > > > > Josh, first of all, thank you very much for your help. However, this patch > > > doesn't work in my environment. I am using gcc 12.2.1 20230201. > > > After compiling, when I use readelf -S to view ELF sections, > > > the align of .notes section is still 8: > > > > > > $ readelf -S .tmp_vmlinux.btf > > > [20] .notes NOTE ffffffff8250b570 0170b570 > > > 0000000000000084 0000000000000000 A 0 0 8 > > > > Hm, weird. > > I have consulted some materials and found that using ALIGN() in linker > scripts can only "increase" alignment, not decrease it. > > Perhaps could you try modifying your patch to use ALIGN(2) and SUBALIGN(2) > and see if the .notes section in the output file is aligned to 2? > In my tests, this had no effect. > > [1] https://sourceware.org/binutils/docs/ld/Forced-Output-Alignment.html Not sure about the ld documentation (it may just be ambiguous wording) but while doing some tests, I have found that Josh's ALIGN/SUBALIGN(4) patch only works for certain kernel configs and fails for others. This likely explains why Josh's patch worked for me but not for Tianyi. I haven't investigated why or when it works though, but here's a config where Josh's ALIGN(4) patch works and or where it doesn't (for me): https://zealcharm.com/20230416-btf-dedup-bug-sample-configs/align-4-working https://zealcharm.com/20230416-btf-dedup-bug-sample-configs/align-4-not-working OTOH the new patch to discard .note.gnu.property works in both cases.