On Thu, 2 Feb 2017, 15:43 Andrei Borzenkov <arvidj...@gmail.com> wrote:
> On Thu, Feb 2, 2017 at 5:27 PM, Daniel Kiper <daniel.ki...@oracle.com> > wrote: > > Unified Extensible Firmware Interface Specification, Version 2.6, > > section 2.3.4, x64 Platforms, boot services, says among others: > > The stack must be 16-byte aligned. So, do it. Otherwise OS may > > boot only by chance as it happens right now. > > > > Signed-off-by: Daniel Kiper <daniel.ki...@oracle.com> > > --- > > grub-core/lib/i386/relocator64.S | 16 +++++++++++++--- > > 1 file changed, 13 insertions(+), 3 deletions(-) > > > > diff --git a/grub-core/lib/i386/relocator64.S > b/grub-core/lib/i386/relocator64.S > > index 75725cf..148f38a 100644 > > --- a/grub-core/lib/i386/relocator64.S > > +++ b/grub-core/lib/i386/relocator64.S > > @@ -73,14 +73,22 @@ VARIABLE(grub_relocator64_rsp) > > > > movq %rax, %rsp > > > > +#ifdef GRUB_MACHINE_EFI > > + jmp LOCAL(skip_efi_stack_align) > > + > > /* > > - * Here is grub_relocator64_efi_start() entry point. > > - * Following code is shared between grub_relocator64_efi_start() > > + * Here is grub_relocator64_efi_start() entry point. Most of the > > + * code below is shared between grub_relocator64_efi_start() > > * and grub_relocator64_start(). > > * > > - * Think twice before changing anything below!!! > > + * Think twice before changing anything there!!! > > */ > > VARIABLE(grub_relocator64_efi_start) > > + /* Align the stack as UEFI spec requires. */ > > + andq $~15, %rsp > > + > > It sounds like it should be fixed on caller side instead. I mean, > caller allocated some memory, we cannot just arbitrary adjust it now. > It sounds wrong. > Unlike normal relocator, EFI relocator didn't use .RSP field but instead uses EFI stack, so there is no other place to fix this. > > > +LOCAL(skip_efi_stack_align): > > +#endif > > /* mov imm64, %rax */ > > .byte 0x48 > > .byte 0xb8 > > @@ -128,8 +136,10 @@ LOCAL(jump_addr): > > VARIABLE(grub_relocator64_rip) > > .quad 0 > > > > +#ifdef GRUB_MACHINE_EFI > > /* Here grub_relocator64_efi_start() ends. Ufff... */ > > VARIABLE(grub_relocator64_efi_end) > > +#endif > > > > #ifndef __x86_64__ > > .p2align 4 > > -- > > 1.7.10.4 > > >
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel