On Mon, 2015-10-26 at 16:03 +0000, Anthony PERARD wrote: > Signed-off-by: Anthony PERARD <anthony.per...@citrix.com> > --- > tools/firmware/hvmloader/hvmloader.c | 69 > +++++++++++++++++++++++++++++++++++- > 1 file changed, 68 insertions(+), 1 deletion(-) > > diff --git a/tools/firmware/hvmloader/hvmloader.c > b/tools/firmware/hvmloader/hvmloader.c > index 716d03c..9df12ac 100644 > --- a/tools/firmware/hvmloader/hvmloader.c > +++ b/tools/firmware/hvmloader/hvmloader.c > @@ -62,7 +62,7 @@ asm ( > " mov %ax,%ss \n" > /* Initialise all 32-bit GPRs to zero. */ > " xor %eax,%eax \n" > - " xor %ebx,%ebx \n" > + /* Keep ebx, for HVMLite start info */
Isn't this now an ABI between the tools and HVM loader, which is embedded in the more formal PVH/HVMLite startup protocol? In which case hopefully there is somewhere it can be documented. Is a HVMlite/PVH guest allowed to assume anything about %ebx, those sorts of questions need to be considered. > " xor %ecx,%ecx \n" > " xor %edx,%edx \n" > " xor %esp,%esp \n" > @@ -249,15 +249,82 @@ static void acpi_enable_sci(void) > BUG_ON(!(pm1a_cnt_val & ACPI_PM1C_SCI_EN)); > } > > +static const char *module_list_order = NULL; > +void cmdline_parser(const char *the_cmdline) I'll leave this until we've decided if this approach is the one we want. > int main(void) > { > const struct bios_config *bios; > int acpi_enabled; > + const struct hvm_start_info *hvmlite_start_info; > + > + /* Load hvmlite start info pointer from ebx. */ > + asm volatile ( "mov %%ebx,%0" : "=r" (hvmlite_start_info) ); The stub which calls main should perhaps arrange for this to be in a register which ends up being a parameter to this struct. I think otherwise nothing ensures that the function prolog hasn't clobbered %ebx already. > > /* Initialise hypercall stubs with RET, rendering them no-ops. */ > memset((void *)HYPERCALL_PHYSICAL_ADDRESS, 0xc3 /* RET */, > PAGE_SIZE); > > printf("HVM Loader\n"); > + BUG_ON(hvmlite_start_info->magic != HVM_START_MAGIC_VALUE); > + printf("cmdline: %s\n", (char*)hvmlite_start_info->cmdline_paddr); > + cmdline_parser((char*)hvmlite_start_info->cmdline_paddr); > > init_hypercalls(); > _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel