]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
lib/i386/relocator64: Build fixes for i386
authorJan (janneke) Nieuwenhuizen <janneke@gnu.org>
Wed, 26 May 2021 18:18:24 +0000 (20:18 +0200)
committerDaniel Kiper <daniel.kiper@oracle.com>
Tue, 1 Jun 2021 15:20:20 +0000 (17:20 +0200)
This fixes cross-compiling to x86 (e.g., the Hurd) from x86-linux of

    grub-core/lib/i386/relocator64.S

This file has six sections that only build with a 64-bit assembler,
yet only the first two sections had support for a 32-bit assembler.
This patch completes this for the remaining sections.

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 (32-bit!) 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

Additionally, remove a line with redundant spaces.

Signed-off-by: Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/lib/i386/relocator64.S

index 148f38adb67d6679f3625533f68e5e542b7f1e40..00bf3159921371bc759e51d0539964bc81a064b4 100644 (file)
@@ -63,7 +63,9 @@ 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,15 @@ VARIABLE(grub_relocator64_rsp)
         */
 VARIABLE(grub_relocator64_efi_start)
        /* Align the stack as UEFI spec requires. */
+#ifdef __x86_64__
        andq    $~15, %rsp
+#else
+       /* andq $~15, %rsp */
+       .byte 0x48
+       .byte 0x83
+       .byte 0xe4
+       .byte 0xf0
+#endif
 
 LOCAL(skip_efi_stack_align):
 #endif
@@ -95,8 +112,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 +149,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