grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2] grub-core: Build fixes for i386


From: Jan (janneke) Nieuwenhuizen
Subject: [PATCH v2] grub-core: Build fixes for i386
Date: Tue, 18 May 2021 12:47:33 +0200

This fixes cross-compiling to x86 (e.g., the Hurd) from x86-linux.

To reproduce, update the Grub source description in your local Guix
archive and run

   ./pre-inst-env guix build --system=i686-linux --target=i586-pc-gnu grub

or install an x86 cross-build environment on x86-linux (32bit!) and
configure to cross build and make, e.g., do something like

    ./configure \
       CC_FOR_BUILD=gcc \
       --build=i686-unknown-linux-gnu
       --host=i586-pc-gnu
    make

* grub-core/lib/i386/relocator64.S: Avoid x86_64 instructions on i386.
---
 grub-core/lib/i386/relocator64.S | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/grub-core/lib/i386/relocator64.S b/grub-core/lib/i386/relocator64.S
index 148f38adb..b4675dd16 100644
--- a/grub-core/lib/i386/relocator64.S
+++ b/grub-core/lib/i386/relocator64.S
@@ -63,8 +63,10 @@ VARIABLE(grub_relocator64_cr3)
        movq    %rax, %cr3
 #endif
 

+#ifdef __x86_64__
        .code64
+#endif
 
        /* mov imm64, %rax */
        .byte   0x48
@@ -71,7 +73,14 @@ VARIABLE(grub_relocator64_cr3)
 VARIABLE(grub_relocator64_rsp)
        .quad   0
 
+#ifdef __x86_64__
        movq    %rax, %rsp
+#else
+       /* movq %rax, %rsp */
+       .byte   0x48
+       .byte   0x89
+       .byte   0xc4
+#endif
 
 #ifdef GRUB_MACHINE_EFI
        jmp     LOCAL(skip_efi_stack_align)
@@ -85,7 +94,14 @@ VARIABLE(grub_relocator64_rsp)
         */
 VARIABLE(grub_relocator64_efi_start)
        /* Align the stack as UEFI spec requires. */
+#ifdef __x86_64__
        andq    $~15, %rsp
+#else
+       .byte 0x48
+        .byte 0x83
+        .byte 0xe4
+        .byte 0xf0
+#endif
 
 LOCAL(skip_efi_stack_align):
 #endif
@@ -95,8 +111,15 @@ LOCAL(skip_efi_stack_align):
 VARIABLE(grub_relocator64_rsi)
        .quad   0
 
+#ifdef __x86_64__
        movq    %rax, %rsi
-       
+#else
+       /* movq %rax, %rsi */
+       .byte   0x48
+       .byte   0x89
+       .byte   0xc6
+#endif
+
        /* mov imm64, %rax */
        .byte   0x48
        .byte   0xb8
@@ -125,7 +148,7 @@ VARIABLE(grub_relocator64_rdx)
           payload and makes this implementation easier.  */
        cld
 
-#ifdef __APPLE__
+#if defined (__APPLE__) || !defined (__x86_64__)
        .byte 0xff, 0x25
        .quad 0
 #else
-- 
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | AvatarĀ® http://AvatarAcademy.com




reply via email to

[Prev in Thread] Current Thread [Next in Thread]