From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1Vgaik-0003Vh-Tj for mharc-grub-devel@gnu.org; Wed, 13 Nov 2013 08:43:02 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34568) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vgaif-0003Ur-Ty for grub-devel@gnu.org; Wed, 13 Nov 2013 08:42:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vgaie-000491-Kd for grub-devel@gnu.org; Wed, 13 Nov 2013 08:42:57 -0500 Received: from v6.chiark.greenend.org.uk ([2001:ba8:1e3::]:34890 helo=chiark.greenend.org.uk) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vgaie-00048r-Dz for grub-devel@gnu.org; Wed, 13 Nov 2013 08:42:56 -0500 Received: from [172.20.153.9] (helo=riva.pelham.vpn.ucam.org) by chiark.greenend.org.uk (Debian Exim 4.72 #1) with esmtps (return-path cjwatson@ubuntu.com) id 1Vgaid-0001ZR-A9 for grub-devel@gnu.org; Wed, 13 Nov 2013 13:42:55 +0000 Received: from ns1.pelham.vpn.ucam.org ([172.20.153.2] helo=riva.ucam.org) by riva.pelham.vpn.ucam.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1Vgaic-0007kz-CW for grub-devel@gnu.org; Wed, 13 Nov 2013 13:42:54 +0000 Date: Wed, 13 Nov 2013 13:42:53 +0000 From: Colin Watson To: grub-devel@gnu.org Subject: Division clash between core and libgcc on ARM Message-ID: <20131113134253.GL16147@riva.ucam.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable User-Agent: Mutt/1.5.21 (2010-09-15) X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:ba8:1e3:: X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Nov 2013 13:42:59 -0000 ./configure --build=3Dx86_64-linux-gnu --host=3Darm-linux-gnueabihf --tar= get=3Darm-linux-gnueabihf --with-platform=3Duboot This fails with: arm-linux-gnueabihf-gcc -Wall -W -Wshadow -Wold-style-definition -Wpointe= r-arith -Wundef -Wextra -Wattributes -Wchar-subscripts -Wcomment -Wdeprecat= ed-declarations -Wdisabled-optimization -Wdiv-by-zero -Wendif-labels -Wfloa= t-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimp= licit-function-declaration -Wimplicit-int -Winit-self -Wint-to-pointer-cast= -Winvalid-pch -Wmain -Wmissing-braces -Wmissing-field-initializers -Wmissi= ng-format-attribute -Wmultichar -Wnonnull -Woverflow -Wparentheses -Wpointe= r-arith -Wpointer-to-int-cast -Wreturn-type -Wsequence-point -Wshadow -Wsig= n-compare -Wstrict-aliasing -Wswitch -Wtrigraphs -Wundef -Wunknown-pragmas = -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value= -Wunused-variable -Wvariadic-macros -Wvolatile-register-var -Wwrite-strin= gs -Wnested-externs -Wstrict-prototypes -Wpointer-sign -Wcast-align -Werror= -Wno-undef -Wno-sign-compare -Wno-unused -Wno-unused-parameter -Wno-redund= ant-decls -Wno-unreachable-code -Wno-conversion -Wno-old-style-definition = -o grub-script-check util/grub_script_check-grub-script-check.o grub-c= ore/kern/emu/grub_script_check-argp_common.o grub-core/osdep/grub_script_ch= eck-init.o libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libg= nu.a arm-linux-gnueabihf-gcc -Wall -W -Wshadow -Wold-style-definition -Wpointe= r-arith -Wundef -Wextra -Wattributes -Wchar-subscripts -Wcomment -Wdeprecat= ed-declarations -Wdisabled-optimization -Wdiv-by-zero -Wendif-labels -Wfloa= t-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimp= licit-function-declaration -Wimplicit-int -Winit-self -Wint-to-pointer-cast= -Winvalid-pch -Wmain -Wmissing-braces -Wmissing-field-initializers -Wmissi= ng-format-attribute -Wmultichar -Wnonnull -Woverflow -Wparentheses -Wpointe= r-arith -Wpointer-to-int-cast -Wreturn-type -Wsequence-point -Wshadow -Wsig= n-compare -Wstrict-aliasing -Wswitch -Wtrigraphs -Wundef -Wunknown-pragmas = -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value= -Wunused-variable -Wvariadic-macros -Wvolatile-register-var -Wwrite-strin= gs -Wnested-externs -Wstrict-prototypes -Wpointer-sign -Wcast-align -Werror= -Wno-undef -Wno-sign-compare -Wno-unused -Wno-unused-parameter -Wno-redund= ant-decls -Wno-unreachable-code -Wno-conversion -Wno-old-style-definition = -o grub-editenv util/grub_editenv-grub-editenv.o util/grub_editenv-edi= tenv.o grub-core/osdep/grub_editenv-init.o libgrubmods.a libgrubgcry.a lib= grubkern.a grub-core/gnulib/libgnu.a /usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/libgcc.a(_udivsi3.o): In funct= ion `__aeabi_uidiv': (.text+0x0): multiple definition of `__udivsi3' libgrubkern.a(libgrubkern_a-misc.o):misc.c:(.text+0xa3c): first defined h= ere /usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/libgcc.a(_udivsi3.o): In funct= ion `__aeabi_uidiv': (.text+0x0): multiple definition of `__aeabi_uidiv' libgrubkern.a(libgrubkern_a-misc.o):misc.c:(.text+0xa3c): first defined h= ere collect2: error: ld returned 1 exit status I don't think we should redirect divisions when building userspace utilities; it would be simpler to just let libgcc handle them in those cases. How does this look? * grub-core/kern/misc.c: Don't redirect divisions in the GRUB_UTIL case. diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c index 8b771a5..194e770 100644 --- a/grub-core/kern/misc.c +++ b/grub-core/kern/misc.c @@ -596,6 +596,8 @@ grub_divmod64 (grub_uint64_t n, grub_uint64_t d, grub_u= int64_t *r) return q; } =20 +#ifndef GRUB_UTIL + #if defined (__arm__) =20 grub_uint32_t @@ -639,6 +641,8 @@ __umoddi3 (grub_uint64_t a, grub_uint64_t b) =20 #endif =20 +#endif /* GRUB_UTIL */ + /* Convert a long long value to a string. This function avoids 64-bit modular arithmetic or divisions. */ static char * Thanks, --=20 Colin Watson [cjwatson@ubuntu.com]