From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark H Weaver Subject: bug#31380: grub fails to build on i686-linux Date: Wed, 13 Jun 2018 23:43:18 -0400 Message-ID: <874li6rq21.fsf@netris.org> References: <87d0y7grsz.fsf@netris.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:46736) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fTJC6-0007LF-LJ for bug-guix@gnu.org; Wed, 13 Jun 2018 23:45:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fTJC2-0005aI-AG for bug-guix@gnu.org; Wed, 13 Jun 2018 23:45:06 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:39279) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fTJC2-0005Zy-4i for bug-guix@gnu.org; Wed, 13 Jun 2018 23:45:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1fTJC1-0003Fz-Qo for bug-guix@gnu.org; Wed, 13 Jun 2018 23:45:01 -0400 Sender: "Debbugs-submit" Resent-Message-ID: In-Reply-To: <87d0y7grsz.fsf@netris.org> (Mark H. Weaver's message of "Mon, 07 May 2018 15:59:56 -0400") List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+gcggb-bug-guix=m.gmane.org@gnu.org Sender: "bug-Guix" To: 31380@debbugs.gnu.org --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable retitle 31380 grub fails to build on i686-linux severity 31380 serious thanks Mark H Weaver writes: > On the 'core-updates' branch, both 'grub' and 'grub-efi' fail to build > on i686-linux. See below for the relevant excerpt from the build log > of 'grub-efi', but the error is the same for both. core-updates has since been merged to master, so this is now a serious problem for i686 users. It prevents building any system, and therefore prevents i686 users from applying security updates. > gcc -DHAVE_CONFIG_H -I. -I.. -Wall -W -DGRUB_MACHINE_EFI=3D1 -DGRUB_MAC= HINE=3DI386_EFI -m32 -nostdinc -isystem /gnu/store/w55k6qc17s6nf7rv4agap9ls= as4hb50l-gcc-5.5.0-lib/lib/gcc/i686-unknown-linux-gnu/5.5.0/include -I../in= clude -I../include -DGRUB_FILE=3D\"lib/i386/relocator.c\" -I. -I. -I.. -I..= -I../include -I../include -I../grub-core/lib/libgcrypt-grub/src/ -D_FIL= E_OFFSET_BITS=3D64 -Os -Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-sub= scripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-b= y-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wi= mplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-bra= ces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wreturn-type -Wse= quence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wunknown-pragmas= -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-valu= e -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes -= g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations -Wextra -W= attributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -= Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cas= t -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sig= n -Wmissing-include-dirs -Wmissing-prototypes -Wmissing-declarations -Wform= at=3D2 -march=3Di386 -m32 -falign-jumps=3D1 -falign-loops=3D1 -falign-funct= ions=3D1 -freg-struct-return -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dn= ow -msoft-float -fno-dwarf2-cfi-asm -mno-stack-arg-probe -fno-asynchronous-= unwind-tables -fno-unwind-tables -Qn -fno-stack-protector -Wtrampolines -We= rror -ffreestanding -MT lib/i386/relocator_module-relocator.o -MD -MP -= MF lib/i386/.deps-core/relocator_module-relocator.Tpo -c -o lib/i386/reloca= tor_module-relocator.o `test -f 'lib/i386/relocator.c' || echo './'`lib/i38= 6/relocator.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:88: Error: bad register name `%rsp' > lib/i386/relocator64.S:98: Error: bad register name `%rax' > lib/i386/relocator64.S:132: Error: bad register name `%rip)' I looked into this, and the problem is that our 'binutils' package on i686-linux is not configured to support 64-bit instructions. Here's a proposed patch that I hope will fix the problem, although I'm unable to easily test it because I no longer use binary substitutes, and I have not yet built the core packages for i686-linux. However, I've applied this patch to my x86_64 system, and verified that it does not cause any problems there. Would someone be willing to test it and report back? Mark --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-UNTESTED-gnu-grub-Fix-build-on-32-bit-x86.patch Content-Description: [PATCH] UNTESTED: gnu: grub: Fix build on 32-bit x86 >From 6fb0495569846b6399583a6c32ee341dde2e1785 Mon Sep 17 00:00:00 2001 From: Mark H Weaver Date: Mon, 11 Jun 2018 19:21:39 -0400 Subject: [PATCH] UNTESTED: gnu: grub: Fix build on 32-bit x86. --- gnu/packages/bootloaders.scm | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index a86c73731..8c8588973 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -61,7 +61,8 @@ #:use-module (guix packages) #:use-module (guix utils) #:use-module (srfi srfi-1) - #:use-module (srfi srfi-26)) + #:use-module (srfi srfi-26) + #:use-module (ice-9 regex)) (define unifont ;; GNU Unifont, . @@ -144,6 +145,19 @@ ("texinfo" ,texinfo) ("help2man" ,help2man) + ;; FIXME: When building GRUB 2.02 on 32-bit x86, we need a binutils + ;; capable of assembling 64-bit instructions. However, our default + ;; binutils on 32-bit x86 is not 64-bit capable. + ,@(if (string-match "^i[3456]86-" (%current-system)) + `(("binutils" + ,(package/inherit + binutils + (arguments + (substitute-keyword-arguments (package-arguments binutils) + ((#:configure-flags flags ''()) + `(cons "--enable-64-bit-bfd" ,flags))))))) + '()) + ;; Dependencies for the test suite. The "real" QEMU is needed here, ;; because several targets are used. ("parted" ,parted) -- 2.17.1 --=-=-=--