All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dirk Behme <dirk.behme@googlemail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] multiple definition of __udivsi3 when using divide operation on unsigned long numbers
Date: Tue, 25 Mar 2008 07:19:39 +0100	[thread overview]
Message-ID: <47E8997B.6010608@googlemail.com> (raw)
In-Reply-To: <5BF78BCE8D9BF14A83F836BD9E3916BA05411D@blrms.slti.sanyo.co.in>

Gururaja Hebbar K R wrote:
> Hi,
> 
> I am trying to compile uboot 1.3.1 for arm926ejs processor. i am using
> CodeSourcery arm-none-linux-gnueabi toolchain (gcc version 4.2.1
> (CodeSourcery Sourcery G++ Lite 2007q3-51)) . 
> 
> i am trying to write a driver for our on board mmc controller. i need to
> do multiply and divide operation as below.
> 
> unsigned long long c;
> static int lc69_mmci_clk = 0;
> unsigned int timeout_ns;
> 
> <snip>
> <snip>
> <snip>
> 
> c = (unsigned long long)timeout_ns * lc69_mmci_clk;
> c = c / 1000000000UL;

Don't do this. Compiler/Linker then tries to use math from libraries 
coming with your tool chain. Normally, U-Boot should be completely 
independent of any external libraries.

Option is to modify your code that compiler/linker doesn't need 
external libraries:

- Try to use shift operation instead of div. E.g. "c = c >> x"

- If this doesn't work, have a look to U-Boot's lib_arm directory and 
use only math available there. E.g (nand_util.c): do_div(n, opts->length);

Cheers

Dirk

> while compilling i am getting an error as below.
> 
>                 cd /home/guru/project/u_boot/Ubuild &&
> arm-none-linux-gnueabi-ld -Bstatic -T
> /home/guru/project/u_boot/u-boot/board/kboard/u-boot.lds -Ttext 0x200000
> $UNDEF_SYM cpu/arm926ejs/start.o \
>                         --start-group lib_generic/libgeneric.a
> board/kboard/libkboard.a cpu/arm926ejs/libarm926ejs.a lib_arm/libarm.a
> fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a
> fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a
> net/libnet.a disk/libdisk.a drivers/bios_emulator/libatibiosemu.a
> drivers/block/libblock.a drivers/hwmon/libhwmon.a drivers/i2c/libi2c.a
> drivers/input/libinput.a drivers/misc/libmisc.a drivers/mtd/libmtd.a
> drivers/mtd/nand/libnand.a drivers/mtd/nand_legacy/libnand_legacy.a
> drivers/mtd/onenand/libonenand.a drivers/net/libnet.a
> drivers/net/sk98lin/libsk98lin.a drivers/pci/libpci.a
> drivers/pcmcia/libpcmcia.a drivers/rtc/librtc.a
> drivers/serial/libserial.a drivers/usb/libusb.a drivers/video/libvideo.a
> post/libpost.a post/drivers/libpostdrivers.a common/libcommon.a
> libfdt/libfdt.a --end-group -L
> /home/guru/project/original/arm-2007q3/bin/../lib/gcc/arm-none-linux-gnu
> eabi/4.2.1 -lgcc \
>                         -Map u-boot.map -o u-boot
> /home/guru/project/original/arm-2007q3/bin/../lib/gcc/arm-none-linux-gnu
> eabi/4.2.1/libgcc.a(_udivsi3.o): In function `__aeabi_uidiv':
> (.text+0x0): multiple definition of `__udivsi3'
> lib_arm/libarm.a(_udivsi3.o):/home/guru/project/u_boot/u-boot/lib_arm/_u
> divsi3.S:17: first defined here
> arm-none-linux-gnueabi-ld: ERROR: Source object
> /home/guru/project/original/arm-2007q3/bin/../lib/gcc/arm-none-linux-gnu
> eabi/4.2.1/libgcc.a(_udivdi3.o) has EABI version 5, but target u-boot
> has EABI version 0
> arm-none-linux-gnueabi-ld: failed to merge target specific data of file
> /home/guru/project/original/arm-2007q3/bin/../lib/gcc/arm-none-linux-gnu
> eabi/4.2.1/libgcc.a(_udivdi3.o)
> arm-none-linux-gnueabi-ld: ERROR: Source object
> /home/guru/project/original/arm-2007q3/bin/../lib/gcc/arm-none-linux-gnu
> eabi/4.2.1/libgcc.a(_udivsi3.o) has EABI version 5, but target u-boot
> has EABI version 0
> arm-none-linux-gnueabi-ld: failed to merge target specific data of file
> /home/guru/project/original/arm-2007q3/bin/../lib/gcc/arm-none-linux-gnu
> eabi/4.2.1/libgcc.a(_udivsi3.o)
> arm-none-linux-gnueabi-ld: ERROR: Source object
> /home/guru/project/original/arm-2007q3/bin/../lib/gcc/arm-none-linux-gnu
> eabi/4.2.1/libgcc.a(_clz.o) has EABI version 5, but target u-boot has
> EABI version 0
> arm-none-linux-gnueabi-ld: failed to merge target specific data of file
> /home/guru/project/original/arm-2007q3/bin/../lib/gcc/arm-none-linux-gnu
> eabi/4.2.1/libgcc.a(_clz.o)
> /home/guru/project/original/arm-2007q3/bin/../lib/gcc/arm-none-linux-gnu
> eabi/4.2.1/libgcc.a(_udivdi3.o):(.ARM.exidx+0x0): undefined reference to
> `__aeabi_unwind_cpp_pr0'
> make: *** [/home/guru/project/u_boot/Ubuild/u-boot] Error 1
> 
> when i checked on the internet for this error few
> (http://bugzilla.openmoko.org/cgi-bin/bugzilla/attachment.cgi?id=7&actio
> n=view) recommended about removing -mabi from config script.
> 
> -PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
> +PLATFORM_CPPFLAGS +=$(call cc-option)
>  PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call
> cc-option,-malignment-traps,))
> 
> when i try this, i get a different error. 
> 
>                 cd /home/guru/project/u_boot/Ubuild &&
> arm-none-linux-gnueabi-ld -Bstatic -T
> /home/guru/project/u_boot/u-boot/board/kboard/u-boot.lds -Ttext 0x200000
> $UNDEF_SYM cpu/arm926ejs/start.o \
>                         --start-group lib_generic/libgeneric.a
> board/kboard/libkboard.a cpu/arm926ejs/libarm926ejs.a lib_arm/libarm.a
> fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a
> fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a
> net/libnet.a disk/libdisk.a drivers/bios_emulator/libatibiosemu.a
> drivers/block/libblock.a drivers/hwmon/libhwmon.a drivers/i2c/libi2c.a
> drivers/input/libinput.a drivers/misc/libmisc.a drivers/mtd/libmtd.a
> drivers/mtd/nand/libnand.a drivers/mtd/nand_legacy/libnand_legacy.a
> drivers/mtd/onenand/libonenand.a drivers/net/libnet.a
> drivers/net/sk98lin/libsk98lin.a drivers/pci/libpci.a
> drivers/pcmcia/libpcmcia.a drivers/rtc/librtc.a
> drivers/serial/libserial.a drivers/usb/libusb.a drivers/video/libvideo.a
> post/libpost.a post/drivers/libpostdrivers.a common/libcommon.a
> libfdt/libfdt.a --end-group -L
> /home/guru/project/original/arm-2007q3/bin/../lib/gcc/arm-none-linux-gnu
> eabi/4.2.1 -lgcc \
>                         -Map u-boot.map -o u-boot
> /home/guru/project/original/arm-2007q3/bin/../lib/gcc/arm-none-linux-gnu
> eabi/4.2.1/libgcc.a(_dvmd_lnx.o): In function `__div0':
> (.text+0x8): undefined reference to `raise'
> /home/guru/project/original/arm-2007q3/bin/../lib/gcc/arm-none-linux-gnu
> eabi/4.2.1/libgcc.a(_divdi3.o):(.ARM.exidx+0x0): undefined reference to
> `__aeabi_unwind_cpp_pr0'
> /home/guru/project/original/arm-2007q3/bin/../lib/gcc/arm-none-linux-gnu
> eabi/4.2.1/libgcc.a(_udivdi3.o):(.ARM.exidx+0x0): undefined reference to
> `__aeabi_unwind_cpp_pr0'
> make: *** [/home/guru/project/u_boot/Ubuild/u-boot] Error 1
> 
> 
> Does anyone has a better solution for this. 
> 
> Thanks in advance
> 
> Regards
> Gururaja
> 
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> U-Boot-Users mailing list
> U-Boot-Users at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/u-boot-users
> 

  reply	other threads:[~2008-03-25  6:19 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <mailman.51127.1206423886.31037.u-boot-users@lists.sourceforge.net>
2008-03-25  6:17 ` [U-Boot-Users] multiple definition of __udivsi3 when using divide operation on unsigned long numbers Gururaja Hebbar K R
2008-03-25  6:19   ` Dirk Behme [this message]
2008-03-25  7:13     ` Gururaja Hebbar K R

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=47E8997B.6010608@googlemail.com \
    --to=dirk.behme@googlemail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.