From 27e2b84e31a15ef194371f0b2ddb8305dadd14f6 Mon Sep 17 00:00:00 2001 From: mintsuki Date: Mon, 27 Jun 2022 15:20:01 +0200 Subject: [PATCH] elf64: Do not align ELF ranges if using paddr --- common/lib/elf.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/common/lib/elf.c b/common/lib/elf.c index 90e00fb7..9028cca8 100644 --- a/common/lib/elf.c +++ b/common/lib/elf.c @@ -479,8 +479,13 @@ static void elf64_get_ranges(uint8_t *elf, uint64_t slide, bool use_paddr, struc uint64_t this_top = load_addr + phdr.p_memsz; - ranges[r].base = load_addr & ~(phdr.p_align - 1); - ranges[r].length = ALIGN_UP(this_top - ranges[r].base, phdr.p_align); + if (use_paddr) { + ranges[r].base = load_addr; + ranges[r].length = this_top - ranges[r].base; + } else { + ranges[r].base = load_addr & ~(phdr.p_align - 1); + ranges[r].length = ALIGN_UP(this_top - ranges[r].base, phdr.p_align); + } ranges[r].permissions = phdr.p_flags & 0b111; r++; @@ -651,7 +656,11 @@ final: uint64_t mem_base, mem_size; if (ranges) { - mem_base = load_addr & ~(phdr.p_align - 1); + if (use_paddr) { + mem_base = load_addr; + } else { + mem_base = load_addr & ~(phdr.p_align - 1); + } mem_size = this_top - mem_base; } else { mem_base = load_addr;