On Fri, 2024-09-20 at 00:49 -0700, Tony Ambardar wrote: > While building of vmlinux employs a linker script to align the .BTF_ids > section to 4 bytes, other usage leaves .BTF_ids unaligned and may lead to > problems (e.g. [1]). Post-processing and libelf-based endian translation by > resolve_btfids may also potentially suffer from misalignment. > > Update encoding macros in btf_ids.h to always align BTF ID data to 4 bytes. > > [1]: 3effc06a4dde ("selftests/bpf: Fix alignment of .BTF_ids") > > Signed-off-by: Tony Ambardar <tony.ambardar@xxxxxxxxx> > --- > include/linux/btf_ids.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/include/linux/btf_ids.h b/include/linux/btf_ids.h > index c0e3e1426a82..c10b163dc340 100644 > --- a/include/linux/btf_ids.h > +++ b/include/linux/btf_ids.h > @@ -89,6 +89,7 @@ word \ > #define __BTF_ID_LIST(name, scope) \ > asm( \ > ".pushsection " BTF_IDS_SECTION ",\"a\"; \n" \ > +".balign 4, 0; \n" \ > "." #scope " " #name "; \n" \ > #name ":; \n" \ > ".popsection; \n"); This forces all id list symbols to be aligned on 4 bytes. Should the same be done for __BTF_SET_START? Also, is it guaranteed that all btf ids are organized in lists and sets? Grepping through the code it seems they are, but it looks like resolve_btfids does not really enforce this, simply looking for symbols matching a special name __BTF_ID__<type>__<symbol>[__<id>] .