>>> On 15.04.16 at 14:33, <daniel.ki...@oracle.com> wrote: > --- a/xen/arch/x86/boot/reloc.c > +++ b/xen/arch/x86/boot/reloc.c > @@ -10,15 +10,25 @@ > * Keir Fraser <k...@xen.org> > */ > > -/* entered with %eax = BOOT_TRAMPOLINE */ > +/* > + * This entry point is entered from xen/arch/x86/boot/head.S with: > + * - 0x4(%esp) = MULTIBOOT_INFORMATION_ADDRESS, > + * - 0x8(%esp) = BOOT_TRAMPOLINE_ADDRESS. > + */ > asm ( > " .text \n" > " .globl _start \n" > "_start: \n" > + " push %ebp \n" > + " mov %esp,%ebp \n" > " call 1f \n" > - "1: pop %ebx \n" > - " mov %eax,alloc-1b(%ebx) \n" > - " jmp reloc \n" > + "1: pop %ecx \n" > + " mov 0xc(%ebp),%eax \n" > + " mov %eax,alloc-1b(%ecx) \n" > + " push 0x8(%ebp) \n" > + " call reloc \n" > + " leave \n" > + " ret \n" > );
If Andrew's suggestion to remove this asm() altogether doesn't work out, then I do not see justification for adding a frame pointer here - addressing through %esp should be quite fine. Which in turn would eliminate the need to convert jmp to call. Jan _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel