Package: guix;
Reported by: Jan Nieuwenhuizen <janneke <at> gnu.org>
Date: Sun, 21 Jun 2020 13:56:02 UTC
Severity: normal
Tags: patch
Done: Jan Nieuwenhuizen <janneke <at> gnu.org>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 41982 in the body.
You can then email your comments to 41982 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-guix <at> gnu.org
:bug#41982
; Package guix
.
(Sun, 21 Jun 2020 13:56:02 GMT) Full text and rfc822 format available.Jan Nieuwenhuizen <janneke <at> gnu.org>
:bug-guix <at> gnu.org
.
(Sun, 21 Jun 2020 13:56:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Jan Nieuwenhuizen <janneke <at> gnu.org> To: bug-guix <at> gnu.org Subject: [PATCH 0/1] gnu: grub: Cross-build fix for system i686-linux. Date: Sun, 21 Jun 2020 15:55:10 +0200
Hi! Attempting to reconfigure a i686-linux guix system to a Hurd system, I found that the Grub(-minimal) cross build fails like this --8<---------------cut here---------------start------------->8--- i586-pc-gnu-gcc -DHAVE_CONFIG_H -I. -I.. -Wall -W -DGRUB_MACHINE_PCBIOS=1 -DGRUB_MACHINE=I386_PC -m32 -nostdinc -isystem /gnu/store/5s0ldm31100d9ix15d1lmbsvi0aa77pq-gcc-cross-i586-pc-gnu-7.5.0-lib/lib/gcc/i586-pc-gnu/7.5.0/include -I../include -I../include -DGRUB_FILE=\"lib/cmos_datetime.c\" -I. -I. -I.. -I.. -I../include -I../include -I../grub-core/lib/libgcrypt-grub/src/ -D_FILE_OFFSET_BITS=64 -Os -Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations -Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign -Wmissing-include-dirs -Wmissing-prototypes -Wmissing-declarations -Wformat=2 -march=i386 -m32 -mrtd -mregparm=3 -falign-jumps=1 -falign-loops=1 -falign-functions=1 -freg-struct-return -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow -msoft-float -fno-dwarf2-cfi-asm -mno-stack-arg-probe -fno-asynchronous-unwind-tables -fno-unwind-tables -fno-stack-protector -Wtrampolines -Werror -ffreestanding -MT lib/datetime_module-cmos_datetime.o -MD -MP -MF lib/.deps-core/datetime_module-cmos_datetime.Tpo -c -o lib/datetime_module-cmos_datetime.o `test -f 'lib/cmos_datetime.c' || echo './'`lib/cmos_datetime.c lib/i386/relocator64.S: Assembler messages: lib/i386/relocator64.S:66: Error: unknown pseudo-op: `.code64' lib/i386/relocator64.S:74: Error: bad register name `%rax' lib/i386/relocator64.S:98: Error: bad register name `%rax' lib/i386/relocator64.S:132: Error: bad register name `%rip)' make[3]: *** [Makefile:32165: lib/i386/relocator_module-relocator64.o] Error 1 make[3]: *** Waiting for unfinished jobs.... mv -f lib/i386/.deps-core/relocator_module-relocator_common_c.Tpo lib/i386/.deps-core/relocator_module-relocator_common_c.Po mv -f lib/i386/.deps-core/relocator_module-relocator.Tpo lib/i386/.deps-core/relocator_module-relocator.Po mv -f kern/.deps-core/elf_module-elf.Tpo kern/.deps-core/elf_module-elf.Po mv -f lib/.deps-core/datetime_module-cmos_datetime.Tpo lib/.deps-core/datetime_module-cmos_datetime.Po mv -f fs/.deps-core/xfs_module-xfs.Tpo fs/.deps-core/xfs_module-xfs.Po mv -f lib/.deps-core/crypto_module-crypto.Tpo lib/.deps-core/crypto_module-crypto.Po mv -f lib/.deps-core/relocator_module-relocator.Tpo lib/.deps-core/relocator_module-relocator.Po make[3]: Leaving directory '/tmp/guix-build-grub-minimal-2.04.drv-0/grub-2.04/grub-core' make[2]: *** [Makefile:26403: all] Error 2 make[2]: Leaving directory '/tmp/guix-build-grub-minimal-2.04.drv-0/grub-2.04/grub-core' make[1]: *** [Makefile:11304: all-recursive] Error 1 make[1]: Leaving directory '/tmp/guix-build-grub-minimal-2.04.drv-0/grub-2.04' make: *** [Makefile:3343: all] Error 2 command "make" "-j" "8" failed with status 2 --8<---------------cut here---------------end--------------->8--- It is non-Hurd specific, it can be reproduced by running --8<---------------cut here---------------start------------->8--- ./pre-inst-env guix build --system=i686-linux --target=i686-linux-gnu grub-minimal --8<---------------cut here---------------end--------------->8--- I am not sure if and how to report this upstream. Ideas for a bug description? Apparently, non-cross builds "just" work (how?!). Greetings, Janneke Jan (janneke) Nieuwenhuizen (1): gnu: grub: Cross-build fix for system-i686. gnu/local.mk | 1 + gnu/packages/bootloaders.scm | 3 +- .../patches/grub-cross-system-i686.patch | 73 +++++++++++++++++++ 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/grub-cross-system-i686.patch -- Jan Nieuwenhuizen <janneke <at> gnu.org> | GNU LilyPond http://lilypond.org Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
bug-guix <at> gnu.org
:bug#41982
; Package guix
.
(Sun, 21 Jun 2020 14:00:02 GMT) Full text and rfc822 format available.Message #8 received at 41982 <at> debbugs.gnu.org (full text, mbox):
From: "Jan (janneke) Nieuwenhuizen" <janneke <at> gnu.org> To: 41982 <at> debbugs.gnu.org Subject: [PATCH 1/1] gnu: grub: Cross-build fix for system i686-linux. Date: Sun, 21 Jun 2020 15:59:03 +0200
* gnu/packages/patches/grub-cross-system-i686.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/bootloaders.scm (grub): Use it. --- gnu/local.mk | 1 + gnu/packages/bootloaders.scm | 3 +- .../patches/grub-cross-system-i686.patch | 79 +++++++++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/grub-cross-system-i686.patch diff --git a/gnu/local.mk b/gnu/local.mk index 347d4bbb17..1a061f43f8 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1044,6 +1044,7 @@ dist_patch_DATA = \ %D%/packages/patches/grocsvs-dont-use-admiral.patch \ %D%/packages/patches/gromacs-tinyxml2.patch \ %D%/packages/patches/groovy-add-exceptionutilsgenerator.patch \ + %D%/packages/patches/grub-cross-system-i686.patch \ %D%/packages/patches/grub-efi-fat-serial-number.patch \ %D%/packages/patches/grub-setup-root.patch \ %D%/packages/patches/grub-verifiers-Blocklist-fallout-cleanup.patch \ diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index ea80cf020e..efbe488bc3 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -97,7 +97,8 @@ (patches (search-patches "grub-efi-fat-serial-number.patch" "grub-setup-root.patch" - "grub-verifiers-Blocklist-fallout-cleanup.patch")))) + "grub-verifiers-Blocklist-fallout-cleanup.patch" + "grub-cross-system-i686.patch")))) (build-system gnu-build-system) (arguments `(#:configure-flags diff --git a/gnu/packages/patches/grub-cross-system-i686.patch b/gnu/packages/patches/grub-cross-system-i686.patch new file mode 100644 index 0000000000..a376cae1db --- /dev/null +++ b/gnu/packages/patches/grub-cross-system-i686.patch @@ -0,0 +1,79 @@ +Not upstreamed. +Fixes cross-build for the Hurd, from i686-linux, +see <https://bugs.gnu.org/41982>. + +From 270667540146f8ef9ea7a44258a71b3837a7af4a Mon Sep 17 00:00:00 2001 +From: "Jan (janneke) Nieuwenhuizen" <janneke <at> gnu.org> +Date: Sun, 21 Jun 2020 15:10:40 +0200 +Subject: [PATCH] grub-core: Build fixes for i386 + +* grub-core/lib/i386/relocator64.S: Avoid x86_64 instructions on i386. +--- + grub-core/lib/i386/relocator64.S | 26 +++++++++++++++++++++++++- + 1 file changed, 25 insertions(+), 1 deletion(-) + +diff --git a/grub-core/lib/i386/relocator64.S b/grub-core/lib/i386/relocator64.S +index 148f38adb..45fed9444 100644 +--- a/grub-core/lib/i386/relocator64.S ++++ b/grub-core/lib/i386/relocator64.S +@@ -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 + ++#ifndef __x86_64__ ++ /* movq %rax, %rsp */ ++ .byte 0x48 ++ .byte 0x89 ++ .byte 0xc4 ++#else + movq %rax, %rsp ++#endif + + #ifdef GRUB_MACHINE_EFI + jmp LOCAL(skip_efi_stack_align) +@@ -95,8 +104,15 @@ LOCAL(skip_efi_stack_align): + VARIABLE(grub_relocator64_rsi) + .quad 0 + ++#ifndef __x86_64__ ++ /* movq %rax, %rsi */ ++ .byte 0x48 ++ .byte 0x89 ++ .byte 0xc6 ++#else + movq %rax, %rsi +- ++#endif ++ + /* mov imm64, %rax */ + .byte 0x48 + .byte 0xb8 +@@ -128,6 +144,14 @@ VARIABLE(grub_relocator64_rdx) + #ifdef __APPLE__ + .byte 0xff, 0x25 + .quad 0 ++#elif !defined (__x86_64__) ++ /* jmp *LOCAL(jump_addr) (%rip) */ ++ .byte 0xff ++ .byte 0x25 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 + #else + jmp *LOCAL(jump_addr) (%rip) + #endif +-- +Jan Nieuwenhuizen <janneke <at> gnu.org> | GNU LilyPond http://lilypond.org +Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com + -- Jan Nieuwenhuizen <janneke <at> gnu.org> | GNU LilyPond http://lilypond.org Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
bug-guix <at> gnu.org
:bug#41982
; Package guix
.
(Tue, 23 Jun 2020 09:29:02 GMT) Full text and rfc822 format available.Message #11 received at 41982 <at> debbugs.gnu.org (full text, mbox):
From: Ludovic Courtès <ludo <at> gnu.org> To: Jan Nieuwenhuizen <janneke <at> gnu.org> Cc: 41982 <at> debbugs.gnu.org Subject: Re: bug#41982: [PATCH 0/1] gnu: grub: Cross-build fix for system i686-linux. Date: Tue, 23 Jun 2020 11:27:58 +0200
Hi, Jan Nieuwenhuizen <janneke <at> gnu.org> skribis: > Attempting to reconfigure a i686-linux guix system to a Hurd system, I > found that the Grub(-minimal) cross build fails like this > > i586-pc-gnu-gcc -DHAVE_CONFIG_H -I. -I.. -Wall -W -DGRUB_MACHINE_PCBIOS=1 -DGRUB_MACHINE=I386_PC -m32 -nostdinc -isystem /gnu/store/5s0ldm31100d9ix15d1lmbsvi0aa77pq-gcc-cross-i586-pc-gnu-7.5.0-lib/lib/gcc/i586-pc-gnu/7.5.0/include -I../include -I../include -DGRUB_FILE=\"lib/cmos_datetime.c\" -I. -I. -I.. -I.. -I../include -I../include -I../grub-core/lib/libgcrypt-grub/src/ -D_FILE_OFFSET_BITS=64 -Os -Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations -Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign -Wmissing-include-dirs -Wmissing-prototypes -Wmissing-declarations -Wformat=2 -march=i386 -m32 -mrtd -mregparm=3 -falign-jumps=1 -falign-loops=1 -falign-functions=1 -freg-struct-return -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow -msoft-float -fno-dwarf2-cfi-asm -mno-stack-arg-probe -fno-asynchronous-unwind-tables -fno-unwind-tables -fno-stack-protector -Wtrampolines -Werror -ffreestanding -MT lib/datetime_module-cmos_datetime.o -MD -MP -MF lib/.deps-core/datetime_module-cmos_datetime.Tpo -c -o lib/datetime_module-cmos_datetime.o `test -f 'lib/cmos_datetime.c' || echo './'`lib/cmos_datetime.c > lib/i386/relocator64.S: Assembler messages: > lib/i386/relocator64.S:66: Error: unknown pseudo-op: `.code64' > lib/i386/relocator64.S:74: Error: bad register name `%rax' > lib/i386/relocator64.S:98: Error: bad register name `%rax' > lib/i386/relocator64.S:132: Error: bad register name `%rip)' Interesting. Why doesn’t it happen when doing: guix build grub-minimal -s i686-linux ? That’s because ‘as’ supports ‘.code64’ there? > I am not sure if and how to report this upstream. Ideas for a bug > description? Apparently, non-cross builds "just" work (how?!). The issue seems to be that ‘.code64’ is not supported by cross assemblers to 32-bit Intel, right? Is this a defect of cross-as in general, or a misconfiguration in our Guix package? Or is this normal behavior that should be fixed in GRUB? Anyway, the patch LGTM! Thanks, Ludo’.
bug-guix <at> gnu.org
:bug#41982
; Package guix
.
(Tue, 23 Jun 2020 12:53:02 GMT) Full text and rfc822 format available.Message #14 received at 41982 <at> debbugs.gnu.org (full text, mbox):
From: Jan Nieuwenhuizen <janneke <at> gnu.org> To: Ludovic Courtès <ludo <at> gnu.org> Cc: 41982 <at> debbugs.gnu.org Subject: Re: bug#41982: [PATCH 0/1] gnu: grub: Cross-build fix for system i686-linux. Date: Tue, 23 Jun 2020 14:52:46 +0200
Ludovic Courtès writes: Hello, > Jan Nieuwenhuizen <janneke <at> gnu.org> skribis: > >> Attempting to reconfigure a i686-linux guix system to a Hurd system, I >> found that the Grub(-minimal) cross build fails like this >> >> i586-pc-gnu-gcc -DHAVE_CONFIG_H -I. -I.. -Wall -W >> -DGRUB_MACHINE_PCBIOS=1 -DGRUB_MACHINE=I386_PC -m32 -nostdinc >> -isystem >> /gnu/store/5s0ldm31100d9ix15d1lmbsvi0aa77pq-gcc-cross-i586-pc-gnu-7.5.0-lib/lib/gcc/i586-pc-gnu/7.5.0/include >> -I../include -I../include -DGRUB_FILE=\"lib/cmos_datetime.c\" [..] >> lib/.deps-core/datetime_module-cmos_datetime.Tpo -c -o >> lib/datetime_module-cmos_datetime.o `test -f 'lib/cmos_datetime.c' >> || echo './'`lib/cmos_datetime.c >> lib/i386/relocator64.S: Assembler messages: >> lib/i386/relocator64.S:66: Error: unknown pseudo-op: `.code64' >> lib/i386/relocator64.S:74: Error: bad register name `%rax' >> lib/i386/relocator64.S:98: Error: bad register name `%rax' >> lib/i386/relocator64.S:132: Error: bad register name `%rip)' > > Interesting. Why doesn’t it happen when doing: > > guix build grub-minimal -s i686-linux > > ? That’s because ‘as’ supports ‘.code64’ there? Ah, that could be a switch! I imagined ".code64" was not supported, "just like" using 64-bit registers. >> I am not sure if and how to report this upstream. Ideas for a bug >> description? Apparently, non-cross builds "just" work (how?!). > > The issue seems to be that ‘.code64’ is not supported by cross > assemblers to 32-bit Intel, right? That could be part of the problem, I don't know. I tested ‘.code64’ on a 32-bit machine and get --8<---------------cut here---------------start------------->8--- gcc -c foo-64.S foo-64.S: Assembler messages: foo-64.S:23: Error: unknown pseudo-op: `.code64' foo-64.S:24: Error: bad register name `%rax' foo-64.S:48: Error: unknown pseudo-op: `.code64' foo-64.S:49: Error: bad register name `%rip)' --8<---------------cut here---------------end--------------->8--- so, I'm not sure what's the idea here. > Is this a defect of cross-as in general, or a misconfiguration in our > Guix package? Or is this normal behavior that should be fixed in GRUB? Good question. I will send the patch upstream (to Grub), maybe they can share some light on this? > Anyway, the patch LGTM! Pushed to master as cd6b0910dc471afb76677109625af0a42ce3056a Thanks! Janneke -- Jan Nieuwenhuizen <janneke <at> gnu.org> | GNU LilyPond http://lilypond.org Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
bug-guix <at> gnu.org
:bug#41982
; Package guix
.
(Tue, 23 Jun 2020 12:58:02 GMT) Full text and rfc822 format available.Message #17 received at 41982 <at> debbugs.gnu.org (full text, mbox):
From: Jan Nieuwenhuizen <janneke <at> gnu.org> To: bug-grub <at> gnu.org Cc: 41982 <at> debbugs.gnu.org Subject: [PATCH] grub-core: Build fixes for i386 Date: Tue, 23 Jun 2020 14:57:00 +0200
[Message part 1 (text/plain, inline)]
Hi! When cross-compiling Grub-2.04 from i386-linux-gnu to i586-pc-hurd on GNU Guix, I got this error --8<---------------cut here---------------start------------->8--- i586-pc-gnu-gcc -DHAVE_CONFIG_H -I. -I.. -Wall -W -DGRUB_MACHINE_PCBIOS=1 -DGRUB_MACHINE=I386_PC -m32 -nostdinc -isystem /gnu/store/5s0ldm31100d9ix15d1lmbsvi0aa77pq-gcc-cross-i586-pc-gnu-7.5.0-lib/lib/gcc/i586-pc-gnu/7.5.0/include -I../include -I../include -DGRUB_FILE=\"lib/cmos_datetime.c\" -I. -I. -I.. -I.. -I../include -I../include -I../grub-core/lib/libgcrypt-grub/src/ -D_FILE_OFFSET_BITS=64 -Os -Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations -Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign -Wmissing-include-dirs -Wmissing-prototypes -Wmissing-declarations -Wformat=2 -march=i386 -m32 -mrtd -mregparm=3 -falign-jumps=1 -falign-loops=1 -falign-functions=1 -freg-struct-return -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow -msoft-float -fno-dwarf2-cfi-asm -mno-stack-arg-probe -fno-asynchronous-unwind-tables -fno-unwind-tables -fno-stack-protector -Wtrampolines -Werror -ffreestanding -MT lib/datetime_module-cmos_datetime.o -MD -MP -MF lib/.deps-core/datetime_module-cmos_datetime.Tpo -c -o lib/datetime_module-cmos_datetime.o `test -f 'lib/cmos_datetime.c' || echo './'`lib/cmos_datetime.c lib/i386/relocator64.S: Assembler messages: lib/i386/relocator64.S:66: Error: unknown pseudo-op: `.code64' lib/i386/relocator64.S:74: Error: bad register name `%rax' lib/i386/relocator64.S:98: Error: bad register name `%rax' lib/i386/relocator64.S:132: Error: bad register name `%rip)' make[3]: *** [Makefile:32165: lib/i386/relocator_module-relocator64.o] Error 1 make[3]: *** Waiting for unfinished jobs.... mv -f lib/i386/.deps-core/relocator_module-relocator_common_c.Tpo lib/i386/.deps-core/relocator_module-relocator_common_c.Po mv -f lib/i386/.deps-core/relocator_module-relocator.Tpo lib/i386/.deps-core/relocator_module-relocator.Po mv -f kern/.deps-core/elf_module-elf.Tpo kern/.deps-core/elf_module-elf.Po mv -f lib/.deps-core/datetime_module-cmos_datetime.Tpo lib/.deps-core/datetime_module-cmos_datetime.Po mv -f fs/.deps-core/xfs_module-xfs.Tpo fs/.deps-core/xfs_module-xfs.Po mv -f lib/.deps-core/crypto_module-crypto.Tpo lib/.deps-core/crypto_module-crypto.Po mv -f lib/.deps-core/relocator_module-relocator.Tpo lib/.deps-core/relocator_module-relocator.Po make[3]: Leaving directory '/tmp/guix-build-grub-minimal-2.04.drv-0/grub-2.04/grub-core' make[2]: *** [Makefile:26403: all] Error 2 make[2]: Leaving directory '/tmp/guix-build-grub-minimal-2.04.drv-0/grub-2.04/grub-core' make[1]: *** [Makefile:11304: all-recursive] Error 1 make[1]: Leaving directory '/tmp/guix-build-grub-minimal-2.04.drv-0/grub-2.04' make: *** [Makefile:3343: all] Error 2 command "make" "-j" "8" failed with status 2 --8<---------------cut here---------------end--------------->8--- In Guix we are now using the patch attached, which seems to fix this for us. We are not entirely sure if this is the proper fix though, see <https://bugs.gnu.org/41982>. Paraphrasing the questions raised there: why does this seem to compile on i386? Is that because the non-cross 32-bit ‘as’ supports ‘.code64’? Is the Guix's cross-assembler ‘i586-pc-gnu-as’ configured wrong and should it support this? (FWIW, this is not specific for the Hurd, cross compiling from i686-linux-gnu to i686-linux-gnu show the same error. The use case for that may be a bit thin to warrant a bug report.) Ideas welcome! Greetings, Janneke
[0001-grub-core-Build-fixes-for-i386.patch (text/x-patch, inline)]
From 270667540146f8ef9ea7a44258a71b3837a7af4a Mon Sep 17 00:00:00 2001 From: "Jan (janneke) Nieuwenhuizen" <janneke <at> gnu.org> Date: Sun, 21 Jun 2020 15:10:40 +0200 Subject: [PATCH] grub-core: Build fixes for i386 * grub-core/lib/i386/relocator64.S: Avoid x86_64 instructions on i386. --- grub-core/lib/i386/relocator64.S | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/grub-core/lib/i386/relocator64.S b/grub-core/lib/i386/relocator64.S index 148f38adb..45fed9444 100644 --- a/grub-core/lib/i386/relocator64.S +++ b/grub-core/lib/i386/relocator64.S @@ -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 +#ifndef __x86_64__ + /* movq %rax, %rsp */ + .byte 0x48 + .byte 0x89 + .byte 0xc4 +#else movq %rax, %rsp +#endif #ifdef GRUB_MACHINE_EFI jmp LOCAL(skip_efi_stack_align) @@ -95,8 +104,15 @@ LOCAL(skip_efi_stack_align): VARIABLE(grub_relocator64_rsi) .quad 0 +#ifndef __x86_64__ + /* movq %rax, %rsi */ + .byte 0x48 + .byte 0x89 + .byte 0xc6 +#else movq %rax, %rsi - +#endif + /* mov imm64, %rax */ .byte 0x48 .byte 0xb8 @@ -128,6 +144,14 @@ VARIABLE(grub_relocator64_rdx) #ifdef __APPLE__ .byte 0xff, 0x25 .quad 0 +#elif !defined (__x86_64__) + /* jmp *LOCAL(jump_addr) (%rip) */ + .byte 0xff + .byte 0x25 + .byte 0 + .byte 0 + .byte 0 + .byte 0 #else jmp *LOCAL(jump_addr) (%rip) #endif -- Jan Nieuwenhuizen <janneke <at> gnu.org> | GNU LilyPond http://lilypond.org Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
[Message part 3 (text/plain, inline)]
-- Jan Nieuwenhuizen <janneke <at> gnu.org> | GNU LilyPond http://lilypond.org Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
bug-guix <at> gnu.org
:bug#41982
; Package guix
.
(Tue, 23 Jun 2020 15:55:01 GMT) Full text and rfc822 format available.Message #20 received at 41982 <at> debbugs.gnu.org (full text, mbox):
From: Ludovic Courtès <ludo <at> gnu.org> To: Jan Nieuwenhuizen <janneke <at> gnu.org> Cc: 41982 <at> debbugs.gnu.org Subject: Re: bug#41982: [PATCH 0/1] gnu: grub: Cross-build fix for system i686-linux. Date: Tue, 23 Jun 2020 17:54:43 +0200
Hi, Jan Nieuwenhuizen <janneke <at> gnu.org> skribis: > Ludovic Courtès writes: > > Hello, > >> Jan Nieuwenhuizen <janneke <at> gnu.org> skribis: >> >>> Attempting to reconfigure a i686-linux guix system to a Hurd system, I >>> found that the Grub(-minimal) cross build fails like this >>> >>> i586-pc-gnu-gcc -DHAVE_CONFIG_H -I. -I.. -Wall -W >>> -DGRUB_MACHINE_PCBIOS=1 -DGRUB_MACHINE=I386_PC -m32 -nostdinc >>> -isystem >>> /gnu/store/5s0ldm31100d9ix15d1lmbsvi0aa77pq-gcc-cross-i586-pc-gnu-7.5.0-lib/lib/gcc/i586-pc-gnu/7.5.0/include >>> -I../include -I../include -DGRUB_FILE=\"lib/cmos_datetime.c\" > > [..] >>> lib/.deps-core/datetime_module-cmos_datetime.Tpo -c -o >>> lib/datetime_module-cmos_datetime.o `test -f 'lib/cmos_datetime.c' >>> || echo './'`lib/cmos_datetime.c >>> lib/i386/relocator64.S: Assembler messages: >>> lib/i386/relocator64.S:66: Error: unknown pseudo-op: `.code64' >>> lib/i386/relocator64.S:74: Error: bad register name `%rax' >>> lib/i386/relocator64.S:98: Error: bad register name `%rax' >>> lib/i386/relocator64.S:132: Error: bad register name `%rip)' >> >> Interesting. Why doesn’t it happen when doing: >> >> guix build grub-minimal -s i686-linux >> >> ? That’s because ‘as’ supports ‘.code64’ there? > > Ah, that could be a switch! I imagined ".code64" was not supported, > "just like" using 64-bit registers. Yeah I didn’t know about the existence of such a thing but the manual has it (info "(as) i386-16bit"). > Pushed to master as cd6b0910dc471afb76677109625af0a42ce3056a Cool, thanks! Ludo’.
Jan Nieuwenhuizen <janneke <at> gnu.org>
:Jan Nieuwenhuizen <janneke <at> gnu.org>
:Message #25 received at 41982-done <at> debbugs.gnu.org (full text, mbox):
From: Jan Nieuwenhuizen <janneke <at> gnu.org> To: Ludovic Courtès <ludo <at> gnu.org> Cc: 41982-done <at> debbugs.gnu.org Subject: Re: bug#41982: [PATCH 0/1] gnu: grub: Cross-build fix for system i686-linux. Date: Thu, 25 Jun 2020 17:52:10 +0200
Ludovic Courtès writes: Hello, >> Pushed to master as cd6b0910dc471afb76677109625af0a42ce3056a > > Cool, thanks! Well, preparing a new patch I found the commit above didn't make it to master yet, I'm puzzled. I'm pretty sure that I send this mail after (I believe that) the push was successful. A new attempt: pushed to master as d613991a8ebe5d4b3a7706f8f0dd52f16fc1c50a And closing (forgot that too). Greetings, Janneke -- Jan Nieuwenhuizen <janneke <at> gnu.org> | GNU LilyPond http://lilypond.org Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
bug-guix <at> gnu.org
:bug#41982
; Package guix
.
(Wed, 08 Jul 2020 17:30:02 GMT) Full text and rfc822 format available.Message #28 received at 41982 <at> debbugs.gnu.org (full text, mbox):
From: Jan Nieuwenhuizen <janneke <at> gnu.org> To: bug-grub <at> gnu.org Cc: 41982 <at> debbugs.gnu.org Subject: [PATCH v2] grub-core: Build fixes for i386 Date: Wed, 08 Jul 2020 19:29:31 +0200
[Message part 1 (text/plain, inline)]
Jan Nieuwenhuizen writes: Hello! > When cross-compiling Grub-2.04 from i386-linux-gnu to i586-pc-hurd on > GNU Guix, I got this error Today, we found* that my patch introduced a regression: a native, EFI build on i686-linux-gnu failed with lib/i386/relocator64.S:97: Error: bad register name `%rsp' The attached v2 fixes that. Greetings, Janneke *) http://logs.guix.gnu.org/guix/2020-07-08.log#104852
[v2-0001-grub-core-Build-fixes-for-i386.patch (text/x-patch, inline)]
From 17b242e7b80108f1467037e15b605595e4823b2e Mon Sep 17 00:00:00 2001 From: "Jan (janneke) Nieuwenhuizen" <janneke <at> gnu.org> Date: Sun, 21 Jun 2020 15:10:40 +0200 Subject: [PATCH v2] grub-core: Build fixes for i386 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 * grub-core/lib/i386/relocator64.S: Avoid x86_64 instructions on i386. --- grub-core/lib/i386/relocator64.S | 33 +++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/grub-core/lib/i386/relocator64.S b/grub-core/lib/i386/relocator64.S index 148f38adb..ea39908c1 100644 --- a/grub-core/lib/i386/relocator64.S +++ b/grub-core/lib/i386/relocator64.S @@ -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 +#ifndef __x86_64__ + /* movq %rax, %rsp */ + .byte 0x48 + .byte 0x89 + .byte 0xc4 +#else movq %rax, %rsp +#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. */ +#ifndef __x86_64__ + .byte 0x48 + .byte 0x83 + .byte 0xe4 + .byte 0xf0 +#else andq $~15, %rsp +#endif LOCAL(skip_efi_stack_align): #endif @@ -95,8 +111,15 @@ LOCAL(skip_efi_stack_align): VARIABLE(grub_relocator64_rsi) .quad 0 +#ifndef __x86_64__ + /* movq %rax, %rsi */ + .byte 0x48 + .byte 0x89 + .byte 0xc6 +#else movq %rax, %rsi - +#endif + /* mov imm64, %rax */ .byte 0x48 .byte 0xb8 @@ -128,6 +151,14 @@ VARIABLE(grub_relocator64_rdx) #ifdef __APPLE__ .byte 0xff, 0x25 .quad 0 +#elif !defined (__x86_64__) + /* jmp *LOCAL(jump_addr) (%rip) */ + .byte 0xff + .byte 0x25 + .byte 0 + .byte 0 + .byte 0 + .byte 0 #else jmp *LOCAL(jump_addr) (%rip) #endif -- Jan Nieuwenhuizen <janneke <at> gnu.org> | GNU LilyPond http://lilypond.org Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
[Message part 3 (text/plain, inline)]
-- Jan Nieuwenhuizen <janneke <at> gnu.org> | GNU LilyPond http://lilypond.org Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
bug-guix <at> gnu.org
:bug#41982
; Package guix
.
(Mon, 13 Jul 2020 13:52:02 GMT) Full text and rfc822 format available.Message #31 received at 41982 <at> debbugs.gnu.org (full text, mbox):
From: Ludovic Courtès <ludo <at> gnu.org> To: Jan Nieuwenhuizen <janneke <at> gnu.org> Cc: bug-grub <at> gnu.org, 41982 <at> debbugs.gnu.org Subject: Re: bug#41982: [PATCH v2] grub-core: Build fixes for i386 Date: Mon, 13 Jul 2020 15:51:29 +0200
Hi! Jan Nieuwenhuizen <janneke <at> gnu.org> skribis: > Jan Nieuwenhuizen writes: > > Hello! > >> When cross-compiling Grub-2.04 from i386-linux-gnu to i586-pc-hurd on >> GNU Guix, I got this error > > Today, we found* that my patch introduced a regression: a native, EFI > build on i686-linux-gnu failed with > > lib/i386/relocator64.S:97: Error: bad register name `%rsp' > > The attached v2 fixes that. On the Guix side I guess you can go ahead and apply it. Well done! Ludo’.
bug-guix <at> gnu.org
:bug#41982
; Package guix
.
(Mon, 13 Jul 2020 14:04:02 GMT) Full text and rfc822 format available.Message #34 received at 41982 <at> debbugs.gnu.org (full text, mbox):
From: Jan Nieuwenhuizen <janneke <at> gnu.org> To: Ludovic Courtès <ludo <at> gnu.org> Cc: bug-grub <at> gnu.org, 41982 <at> debbugs.gnu.org Subject: Re: bug#41982: [PATCH v2] grub-core: Build fixes for i386 Date: Mon, 13 Jul 2020 16:03:09 +0200
Ludovic Courtès writes: Hi! > Jan Nieuwenhuizen <janneke <at> gnu.org> skribis: > >> Jan Nieuwenhuizen writes: >> >> lib/i386/relocator64.S:97: Error: bad register name `%rsp' >> >> The attached v2 fixes that. > > On the Guix side I guess you can go ahead and apply it. > > Well done! Thanks! Ah, I already done in 54e70a70f2cb6336b02ed3ac4256f6b44da5c769 after discussing with Mathieu on IRC. I wanted to keep a line to upstream, being cautious for continuing to carry a diff here. Janneke -- Jan Nieuwenhuizen <janneke <at> gnu.org> | GNU LilyPond http://lilypond.org Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Tue, 11 Aug 2020 11:24:05 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.