On Tue, Sep 29, 2026 at 11:21:33AM +0530, Shivang Upadhyay wrote: > From: Sathvika Vasireddy <[email protected]> > > When objtool writes changes back to vmlinux with --ftr-fixup --link, > libelf recalculates the file layout and inserts padding between > sections. This corrupts the ELF segment structure, causing kexec to > fail with: > > ELF Note corrupted ! > Cannot determine the file type of vmlinux > > This happens because libelf's default behavior assumes it can freely > rearrange section offsets when writing, which breaks the carefully > constructed vmlinux layout produced by the linker. > > Set ELF_F_LAYOUT after elf_begin() to instruct libelf that the > application is responsible for the file layout. This prevents libelf > from inserting padding or repositioning sections while still allowing > data modifications to be written back. > > Signed-off-by: Sathvika Vasireddy <[email protected]> > Signed-off-by: Shivang Upadhyay <[email protected]> > --- > tools/objtool/elf.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/tools/objtool/elf.c b/tools/objtool/elf.c > index a791f4ea6ec1..55c20a993f5d 100644 > --- a/tools/objtool/elf.c > +++ b/tools/objtool/elf.c > @@ -1239,6 +1239,9 @@ struct elf *elf_open_read(const char *name, int flags) > goto err; > } > > + if (opts.ftr_fixup) > + elf_flagelf(elf->elf, ELF_C_SET, ELF_F_LAYOUT);
So per the previous email; you need this because this is a post-link pass. As such, anything that has absolute sections would need this. So should this be conditional on that, rather than ftr?
