@@ -574,7 +574,7 @@ static int __init pvh_load_kernel(struct domain *d, const module_t *image,
}
/* Copy the OS image and free temporary buffer. */
- elf.dest_base = (void *)parms.phys_kstart - parms.elf_paddr_offset;
+ elf.dest_base = (void *)parms.phys_kstart;
elf.dest_size = parms.phys_kend - parms.phys_kstart;
elf_set_vcpu(&elf, v);
@@ -433,6 +433,12 @@ static elf_errorstatus elf_xen_addr_calc_check_pvh(struct elf_binary *elf,
parms->phys_kend = elf->bsd_symtab_pend;
}
+ if ( parms->elf_paddr_offset != 0 ) {
+ elf_err(elf, "ERROR: ELF elf_paddr_offset (0x" PRIx64 ") is non-zero\n",
+ parms->elf_paddr_offset);
+ return -1;
+ }
+
elf_msg(elf, "ELF: addresses:\n");
elf_msg(elf, " phys_kstart = 0x%" PRIx64 "\n", parms->phys_kstart);
elf_msg(elf, " phys_kend = 0x%" PRIx64 "\n", parms->phys_kend);
Modern Linux and FreeBSD hardcode it to 0. Just drop its use for PVH. Signed-off-by: Jason Andryuk <jandryuk@gmail.com> --- xen/arch/x86/hvm/dom0_build.c | 2 +- xen/common/libelf/libelf-dominfo.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-)