@@ -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)
This is to avoid misaligned access to BTF type structs when memory-mapping ELF sections. Signed-off-by: Giuliano Procida <gprocida@google.com> --- libbtf.c | 9 +++++++++ 1 file changed, 9 insertions(+)