On Fri, Feb 5, 2021 at 5:42 AM Giuliano Procida <gprocida@xxxxxxxxxx> wrote: > > This is to avoid misaligned access to BTF type structs when > memory-mapping ELF objects. > > Signed-off-by: Giuliano Procida <gprocida@xxxxxxxxxx> > --- I trust you did verify that it actually works in cases where previously .BTF was mis-aligned? Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > libbtf.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/libbtf.c b/libbtf.c > index 9f4abb3..6754a17 100644 > --- a/libbtf.c > +++ b/libbtf.c > @@ -744,6 +744,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. > */ > @@ -821,6 +829,7 @@ static int btf_elf__write(const char *filename, struct btf *btf) > elf_error("elf_getshdr(btf_scn) failed"); > goto out; > } > + btf_shdr.sh_addralign = btf_alignment; > btf_shdr.sh_entsize = 0; > btf_shdr.sh_flags = 0; > if (dot_btf_offset) > -- > 2.30.0.478.g8a0d178c01-goog >