This is to avoid misaligned access to BTF type structs when memory-mapping ELF sections. Signed-off-by: Giuliano Procida <gprocida@xxxxxxxxxx> --- libbtf.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libbtf.c b/libbtf.c index 5b91d3a..9974747 100644 --- a/libbtf.c +++ b/libbtf.c @@ -740,6 +740,14 @@ static int btf_elf__write(const char *filename, struct btf *btf) goto out; } + /* + * We'll align .BTF to 8 bytes to cater for all architectures. It'd be + * nice if we could fetch this value from somewhere. The BTF + * specification does not discuss alignment and its trailing string + * table is not currently padded to any particular alignment. + */ + const size_t btf_alignment = 8; + /* * First we check if there is already a .BTF section present. */ @@ -823,6 +831,7 @@ static int btf_elf__write(const char *filename, struct btf *btf) __func__, elf_errmsg(elf_errno())); goto out; } + btf_shdr->sh_addralign = btf_alignment; btf_shdr->sh_entsize = 0; btf_shdr->sh_flags = SHF_ALLOC; if (dot_btf_offset) -- 2.30.0.365.g02bc693789-goog