diff options
author | Arthur Heymans <arthur@aheymans.xyz> | 2024-04-29 10:04:59 +0200 |
---|---|---|
committer | Julius Werner <jwerner@chromium.org> | 2024-06-20 19:34:14 +0000 |
commit | 6ed0ba1e93f99edef7a62c3670b4ec61103e0ae9 (patch) | |
tree | 80d30a886c7a291adc9d3c4566886a4f8aa38ff2 /util/cbfstool/elfheaders.c | |
parent | 71c90104438e453af6afa396e78e75e4f874a9e0 (diff) |
cbfstool: Read XIP stage alignment requirements from ELF
On x86_64 romstage can contain page tables and a page table pointer
which have an larger alignment requirement of 4096. Instead of
hardcoding it, read if from the ELF phdrs.
Change-Id: I94e4a4209b7441ecb2966a1342c3d46625771bb8
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/82102
Reviewed-by: Shuo Liu <shuo.liu@intel.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Jérémy Compostella <jeremy.compostella@intel.com>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Diffstat (limited to 'util/cbfstool/elfheaders.c')
-rw-r--r-- | util/cbfstool/elfheaders.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/util/cbfstool/elfheaders.c b/util/cbfstool/elfheaders.c index 39faff209d..5bcac15e4a 100644 --- a/util/cbfstool/elfheaders.c +++ b/util/cbfstool/elfheaders.c @@ -1434,12 +1434,13 @@ int elf_writer_add_rel(struct elf_writer *ew, const char *sym, Elf64_Addr addr) return add_rel(rel_sec, &rel); } -int elf_program_file_size(const struct buffer *input, size_t *file_size) +int elf_program_file_size_align(const struct buffer *input, size_t *file_size, size_t *align) { Elf64_Ehdr ehdr; Elf64_Phdr *phdr; int i; size_t loadable_file_size = 0; + size_t align_size = 0; if (elf_headers(input, &ehdr, &phdr, NULL)) return -1; @@ -1448,9 +1449,11 @@ int elf_program_file_size(const struct buffer *input, size_t *file_size) if (phdr[i].p_type != PT_LOAD) continue; loadable_file_size += phdr[i].p_filesz; + align_size = MAX(align_size, phdr[i].p_align); } *file_size = loadable_file_size; + *align = align_size; free(phdr); |