]> xenbits.xensource.com Git - people/aperard/xen-unstable.git/commitdiff
libelf: Store maximum PHDR p_align
authorJason Andryuk <jason.andryuk@amd.com>
Mon, 8 Apr 2024 07:22:28 +0000 (09:22 +0200)
committerJan Beulich <jbeulich@suse.com>
Mon, 8 Apr 2024 07:22:28 +0000 (09:22 +0200)
While parsing the PHDRs, store the maximum p_align value.  This may be
consulted for moving a PVH image's load address.

Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
xen/common/libelf/libelf-loader.c
xen/include/xen/libelf.h

index 629cc0d3e611f065689f239e368100c0624ee5a6..e571ea670e0e00c91cadfe755f67083c0282c53f 100644 (file)
@@ -468,6 +468,7 @@ void elf_parse_binary(struct elf_binary *elf)
 {
     ELF_HANDLE_DECL(elf_phdr) phdr;
     uint64_t low = -1, high = 0, paddr, memsz;
+    uint64_t max_align = 0, palign;
     unsigned i, count;
 
     count = elf_phdr_count(elf);
@@ -481,15 +482,19 @@ void elf_parse_binary(struct elf_binary *elf)
             continue;
         paddr = elf_uval(elf, phdr, p_paddr);
         memsz = elf_uval(elf, phdr, p_memsz);
+        palign = elf_uval(elf, phdr, p_align);
         elf_msg(elf, "ELF: phdr: paddr=%#" PRIx64 " memsz=%#" PRIx64 "\n",
                 paddr, memsz);
         if ( low > paddr )
             low = paddr;
         if ( high < paddr + memsz )
             high = paddr + memsz;
+        if ( max_align < palign )
+            max_align = palign;
     }
     elf->pstart = low;
     elf->pend = high;
+    elf->palign = max_align;
     elf_msg(elf, "ELF: memory: %#" PRIx64 " -> %#" PRIx64 "\n",
             elf->pstart, elf->pend);
 }
index 1c77e3df319e04845def5dfa95b21b7b957cc278..2d971f958ebc946e02b4bab96e8a62177982f0f9 100644 (file)
@@ -196,6 +196,7 @@ struct elf_binary {
     size_t dest_size;
     uint64_t pstart;
     uint64_t pend;
+    uint64_t palign;
     uint64_t reloc_offset;
 
     uint64_t bsd_symtab_pstart;