On Mon, May 17, 2021 at 01:09:11PM +0200, Jan Beulich wrote: > On 14.05.2021 15:50, Roger Pau Monne wrote: > > @@ -426,7 +426,7 @@ static elf_errorstatus elf_xen_addr_calc_check(struct > > elf_binary *elf, > > } > > > > /* Initial guess for virt_base is 0 if it is not explicitly defined. */ > > - if ( parms->virt_base == UNSET_ADDR ) > > + if ( parms->virt_base == UNSET_ADDR || hvm ) > > { > > parms->virt_base = 0; > > elf_msg(elf, "ELF: VIRT_BASE unset, using %#" PRIx64 "\n", > > @@ -442,7 +442,7 @@ static elf_errorstatus elf_xen_addr_calc_check(struct > > elf_binary *elf, > > * If we are using the modern ELF notes interface then the default > > * is 0. > > */ > > - if ( parms->elf_paddr_offset == UNSET_ADDR ) > > + if ( parms->elf_paddr_offset == UNSET_ADDR || hvm ) > > { > > if ( parms->elf_note_start ) > > parms->elf_paddr_offset = 0; > > Both of these would want their respective comments also updated, I > think: There's no defaulting or guessing really in PVH mode, is > there? > > > @@ -456,8 +456,13 @@ static elf_errorstatus elf_xen_addr_calc_check(struct > > elf_binary *elf, > > parms->virt_kstart = elf->pstart + virt_offset; > > parms->virt_kend = elf->pend + virt_offset; > > > > - if ( parms->virt_entry == UNSET_ADDR ) > > - parms->virt_entry = elf_uval(elf, elf->ehdr, e_entry); > > + if ( parms->virt_entry == UNSET_ADDR || hvm ) > > + { > > + if ( parms->phys_entry != UNSET_ADDR32 ) > > Don't you need "&& hvm" here to prevent ... > > > + parms->virt_entry = parms->phys_entry; > > ... this taking effect for a kernel capable of running in both > PV and PVH modes, instead of ... > > > + else > > + parms->virt_entry = elf_uval(elf, elf->ehdr, e_entry); > > ... this (when actually in PV mode)?
Oh, I somehow assumed that PV guests _must_ provide the entry point in XEN_ELFNOTE_ENTRY, but I don't think that's the case. Will update and send a new version. Thanks, Roger.