Re: [PATCH v2 2/6] objtool: Set ELF_F_LAYOUT flag to preserve vmlinux segment layout

From: Peter Zijlstra

Date: Wed Sep 30 2026 - 05:51:02 EST


On Tue, Sep 29, 2026 at 11:21:33AM +0530, Shivang Upadhyay wrote:
> From: Sathvika Vasireddy <sv@xxxxxxxxxxxxx>
>
> 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 <sv@xxxxxxxxxxxxx>
> Signed-off-by: Shivang Upadhyay <shivangu@xxxxxxxxxxxxx>
> ---
> 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?