Messages in this thread Patch in this message |  | | From | Sathvika Vasireddy <> | | Subject | [PATCH v1 2/6] objtool: Set ELF_F_LAYOUT flag to preserve vmlinux segment layout | | Date | Tue, 5 May 2026 14:16:24 +0530 |
| |
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@linux.ibm.com> --- tools/objtool/elf.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/tools/objtool/elf.c b/tools/objtool/elf.c index 2ca2a4e4b92e..8752cec5e818 100644 --- a/tools/objtool/elf.c +++ b/tools/objtool/elf.c @@ -1162,6 +1162,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); + if (!gelf_getehdr(elf->elf, &elf->ehdr)) { ERROR_ELF("gelf_getehdr"); goto err; -- 2.43.0
|  |