mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-21 23:02:40 +00:00
lib/i386/relocator64: Build fixes for i386
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>
This commit is contained in:
1 parent
777276063e
commit
80948f532d
1 file changed
+26
-2
@@ -63,7 +63,9 @@ VARIABLE(grub_relocator64_cr3)
|
|||||||
movq %rax, %cr3
|
movq %rax, %cr3
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
.code64
|
.code64
|
||||||
|
#endif
|
||||||
|
|
||||||
/* mov imm64, %rax */
|
/* mov imm64, %rax */
|
||||||
.byte 0x48
|
.byte 0x48
|
||||||
@@ -71,7 +73,14 @@ VARIABLE(grub_relocator64_cr3)
|
|||||||
VARIABLE(grub_relocator64_rsp)
|
VARIABLE(grub_relocator64_rsp)
|
||||||
.quad 0
|
.quad 0
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
movq %rax, %rsp
|
movq %rax, %rsp
|
||||||
|
#else
|
||||||
|
/* movq %rax, %rsp */
|
||||||
|
.byte 0x48
|
||||||
|
.byte 0x89
|
||||||
|
.byte 0xc4
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef GRUB_MACHINE_EFI
|
#ifdef GRUB_MACHINE_EFI
|
||||||
jmp LOCAL(skip_efi_stack_align)
|
jmp LOCAL(skip_efi_stack_align)
|
||||||
@@ -85,7 +94,15 @@ VARIABLE(grub_relocator64_rsp)
|
|||||||
*/
|
*/
|
||||||
VARIABLE(grub_relocator64_efi_start)
|
VARIABLE(grub_relocator64_efi_start)
|
||||||
/* Align the stack as UEFI spec requires. */
|
/* Align the stack as UEFI spec requires. */
|
||||||
|
#ifdef __x86_64__
|
||||||
andq $~15, %rsp
|
andq $~15, %rsp
|
||||||
|
#else
|
||||||
|
/* andq $~15, %rsp */
|
||||||
|
.byte 0x48
|
||||||
|
.byte 0x83
|
||||||
|
.byte 0xe4
|
||||||
|
.byte 0xf0
|
||||||
|
#endif
|
||||||
|
|
||||||
LOCAL(skip_efi_stack_align):
|
LOCAL(skip_efi_stack_align):
|
||||||
#endif
|
#endif
|
||||||
@@ -95,8 +112,15 @@ LOCAL(skip_efi_stack_align):
|
|||||||
VARIABLE(grub_relocator64_rsi)
|
VARIABLE(grub_relocator64_rsi)
|
||||||
.quad 0
|
.quad 0
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
movq %rax, %rsi
|
movq %rax, %rsi
|
||||||
|
#else
|
||||||
|
/* movq %rax, %rsi */
|
||||||
|
.byte 0x48
|
||||||
|
.byte 0x89
|
||||||
|
.byte 0xc6
|
||||||
|
#endif
|
||||||
|
|
||||||
/* mov imm64, %rax */
|
/* mov imm64, %rax */
|
||||||
.byte 0x48
|
.byte 0x48
|
||||||
.byte 0xb8
|
.byte 0xb8
|
||||||
@@ -125,7 +149,7 @@ VARIABLE(grub_relocator64_rdx)
|
|||||||
payload and makes this implementation easier. */
|
payload and makes this implementation easier. */
|
||||||
cld
|
cld
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#if defined (__APPLE__) || !defined (__x86_64__)
|
||||||
.byte 0xff, 0x25
|
.byte 0xff, 0x25
|
||||||
.quad 0
|
.quad 0
|
||||||
#else
|
#else
|
||||||
|
|||||||
Reference in new issue
Block a user