* [U-Boot-Users] U-Boot with gcc-3.3.2 and ARM926EJS Targets fails due to __udiv0
@ 2004-01-27 14:24 Markus Pietrek
2004-01-28 10:37 ` [U-Boot-Users] U-Boot with gcc-3.3.2 and ARM926EJS Targets fails due to __udi Anders Larsen
0 siblings, 1 reply; 5+ messages in thread
From: Markus Pietrek @ 2004-01-27 14:24 UTC (permalink / raw)
To: u-boot
Hi folks,
I'm currently porting U-Boot 1.0.0 to a NetSilicon NS9750 (ARM926EJS core).
This port is partly derived from board/omap1610inn. The compiler is
gcc-3.3.2, taken from the uClibc toolchain.
For my target the compiler is using his internal libgcc.a:__div0 routine which
of course fails (it's an SWI instruction). But compiling U-Boot for an
smdk2410 platform with the same compiler uses the correct U-Boot's own __div0
code. I can't see any relevant differences in both build lines.
Can anyone help me? And is it really necessary to include libgcc.a?
The build line for the NS9750:
========================
UNDEF_SYM=`arm-linux-objdump -x board/ns9750dev/libns9750dev.a
cpu/arm926ejs/libarm926ejs.a lib_arm/libarm.a fs/jffs2/libjffs2.a
fs/fdos/libfdos.a fs/fat/libfat.a net/libnet.a disk/libdisk.a rtc/librtc.a
dtt/libdtt.a drivers/libdrivers.a drivers/sk98lin/libsk98lin.a post/libpost.a
post/cpu/libcpu.a common/libcommon.a lib_generic/libgeneric.a |sed -n -e
's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
arm-linux-ld -Bstatic -T
/targets/ewp/LxMOD/build/apps/u-boot-1.0.0/board/ns9750dev/u-boot.lds -Ttext
0x00F80000 $UNDEF_SYM cpu/arm926ejs/start.o \
--start-group board/ns9750dev/libns9750dev.a
cpu/arm926ejs/libarm926ejs.a lib_arm/libarm.a fs/jffs2/libjffs2.a
fs/fdos/libfdos.a fs/fat/libfat.a net/libnet.a disk/libdisk.a rtc/librtc.a
dtt/libdtt.a drivers/libdrivers.a drivers/sk98lin/libsk98lin.a post/libpost.a
post/cpu/libcpu.a common/libcommon.a lib_generic/libgeneric.a -L
/usr/local/LxNETES-3/arm-linux/lib/gcc-lib/arm-linux/3.3.2 -lgcc --end-group
\
-Map u-boot.map -o u-boot
========================
The relevant entry in u-boot.map for __div0:
===========================
/usr/local/LxNETES-3/arm-linux/lib/gcc-lib/arm-linux/3.3.2/libgcc.a(_udivsi3.o)
drivers/libdrivers.a(serial_ns9750.o)
(__udivsi3)
/
Compilation
============================
The build line for SMDK2410
=======================-
UNDEF_SYM=`arm-linux-objdump -x board/smdk2410/libsmdk2410.a
cpu/arm920t/libarm920t.a lib_arm/libarm.a fs/jffs2/libjffs2.a
fs/fdos/libfdos.a fs/fat/libfat.a net/libnet.a disk/libdisk.a rtc/librtc.a
dtt/libdtt.a drivers/libdrivers.a drivers/sk98lin/libsk98lin.a post/libpost.a
post/cpu/libcpu.a common/libcommon.a lib_generic/libgeneric.a |sed -n -e
's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
arm-linux-ld -Bstatic -T
/targets/ewp/LxMOD/build/apps/u-boot.smdk/board/smdk2410/u-boot.lds -Ttext
0x33F80000 $UNDEF_SYM cpu/arm920t/start.o \
--start-group board/smdk2410/libsmdk2410.a
cpu/arm920t/libarm920t.a lib_arm/libarm.a fs/jffs2/libjffs2.a
fs/fdos/libfdos.a fs/fat/libfat.a net/libnet.a disk/libdisk.a rtc/librtc.a
dtt/libdtt.a drivers/libdrivers.a drivers/sk98lin/libsk98lin.a post/libpost.a
post/cpu/libcpu.a common/libcommon.a lib_generic/libgeneric.a -L
/usr/local/LxNETES-3/arm-linux/lib/gcc-lib/arm-linux/3.3.2 -lgcc --end-group
\
-Map u-boot.map -o u-boot
===================
The relevant entry in u-boot.map for __div0:
====================
lib_arm/libarm.a(_udivsi3.o) cpu/arm920t/libarm920t.a(speed.o) (__udivsi3)
--
Markus Pietrek
FS Forth-Systeme GmbH
Phone: +49 (7667) 908 145, FAX +49 (7667) 908 221
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot-Users] U-Boot with gcc-3.3.2 and ARM926EJS Targets fails due to __udi
2004-01-27 14:24 [U-Boot-Users] U-Boot with gcc-3.3.2 and ARM926EJS Targets fails due to __udiv0 Markus Pietrek
@ 2004-01-28 10:37 ` Anders Larsen
2004-01-28 16:55 ` Wolfgang Denk
2004-01-29 8:37 ` Markus Pietrek
0 siblings, 2 replies; 5+ messages in thread
From: Anders Larsen @ 2004-01-28 10:37 UTC (permalink / raw)
To: u-boot
Markus Pietrek <maillist@fsforth.de> schreibt:
>For my target the compiler is using his internal libgcc.a:__div0 routine
>which
>of course fails (it's an SWI instruction). But compiling U-Boot for an
>smdk2410 platform with the same compiler uses the correct U-Boot's own
>__div0
>code. I can't see any relevant differences in both build lines.
Hi,
your compiler wasn't built for a stand-alone target, otherwise
it would have included a full implementation of __div0, __udivsi3 etc.
However, there might be an easy solution to your problem, see below.
>
>Can anyone help me? And is it really necessary to include libgcc.a?
>
>The build line for the NS9750:
>========================
>/usr/local/LxNETES-3/arm-linux/lib/gcc-lib/arm-linux/3.3.2/libgcc.a(_udivsi3.o)
> drivers/libdrivers.a(serial_ns9750.o)
>(__udivsi3)
>The build line for SMDK2410
>========================
>lib_arm/libarm.a(_udivsi3.o) cpu/arm920t/libarm920t.a(speed.o)
>(__udivsi3)
The reason for the difference is the link order:
For SMDK2410, __udivsi3 is needed by a module linked before libarm.a
(in this case, cpu/arm920t/speed.c), whereas for NS9750 no module
before or in libarm.a needs it; drivers/libdrivers.a is linked after
libarm.a, so the linker won't go back to get __udivsi3 there and falls
back to using libgcc.a, which is linked last.
One solution could be to change the link order (link libarm.a last);
another (dirty) solution to add some code to your board-specific code
that needs __udivsi3.
I'd prefer the former, of course.
Please try the attached quick patch and let us know if it solves the
problem (or if it breaks thing). Caveat - I haven't tried it myself
yet!
Cheers
Anders
-------------- next part --------------
A non-text attachment was scrubbed...
Name: link-order.patch
Type: application/octet-stream
Size: 622 bytes
Desc: not available
Url : http://lists.denx.de/pipermail/u-boot/attachments/20040128/f1764a3e/attachment.obj
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot-Users] U-Boot with gcc-3.3.2 and ARM926EJS Targets fails due to __udi
2004-01-28 10:37 ` [U-Boot-Users] U-Boot with gcc-3.3.2 and ARM926EJS Targets fails due to __udi Anders Larsen
@ 2004-01-28 16:55 ` Wolfgang Denk
2004-01-29 8:37 ` Markus Pietrek
1 sibling, 0 replies; 5+ messages in thread
From: Wolfgang Denk @ 2004-01-28 16:55 UTC (permalink / raw)
To: u-boot
In message <fc.004c4e48002071d73b9aca009ccdb13f.207378@rea.de> you wrote:
>
> your compiler wasn't built for a stand-alone target, otherwise
can you please explain what you mean with this statement? It's rather
cryptic for me. I never built GCC "for a stand-alone target", and yet
I always was able to use it without problems including for U-Boot.
> The reason for the difference is the link order:
This is most definitely NOT the reason.
> One solution could be to change the link order (link libarm.a last);
This makes no sense to me.
If you look carefully at the link statement you might notice that all
the libraries are enclosed by a "--start-group ... --end-group"
sequence.
Reading TFM:
The specified archives are searched repeatedly until no new
undefined references are created. Normally, an archive is
searched only once in the order that it is specified on the
command line. If a symbol in that archive is needed to resolve an
undefined symbol referred to by an object in an archive that
appears later on the command line, the linker would not be able to
resolve that reference. By grouping the archives, they all be
searched repeatedly until all possible references are resolved.
Best regards,
Wolfgang Denk
--
See us @ Embedded World, Nuremberg, Feb 17 - 19, Hall 12.0 Booth 440
Phone: (+49)-8142-4596-87 Fax: (+49)-8142-4596-88 Email: wd at denx.de
The evolution of the human race will not be accomplished in the ten
thousand years of tame animals, but in the million years of wild
animals, because man is and will always be a wild animal.
- Charles Galton Darwin
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot-Users] U-Boot with gcc-3.3.2 and ARM926EJS Targets fails due to __udi
2004-01-28 10:37 ` [U-Boot-Users] U-Boot with gcc-3.3.2 and ARM926EJS Targets fails due to __udi Anders Larsen
2004-01-28 16:55 ` Wolfgang Denk
@ 2004-01-29 8:37 ` Markus Pietrek
2004-02-01 18:27 ` Robert Schwebel
1 sibling, 1 reply; 5+ messages in thread
From: Markus Pietrek @ 2004-01-29 8:37 UTC (permalink / raw)
To: u-boot
Hello,
> your compiler wasn't built for a stand-alone target, otherwise
> it would have included a full implementation of __div0, __udivsi3 etc.
> However, there might be an easy solution to your problem, see below.
There is a full set already available in the gcc? But anyway, it makes not
much sense using two different gcc compilers. One for the bootloader, one for
applications. And with which one has the linux kernel to be compiled?
> The reason for the difference is the link order:
> For SMDK2410, __udivsi3 is needed by a module linked before libarm.a
> (in this case, cpu/arm920t/speed.c), whereas for NS9750 no module
> before or in libarm.a needs it; drivers/libdrivers.a is linked after
> libarm.a, so the linker won't go back to get __udivsi3 there and falls
> back to using libgcc.a, which is linked last.
Yes, of course. Now I see it. I'm needing the non-power 2 division only in the
serial driver for calculation the baudrate divisior. And libdrivers has been
after libarm :-(
> Please try the attached quick patch and let us know if it solves the
> problem (or if it breaks thing). Caveat - I haven't tried it myself
> yet!
Thank you, it works fine. Therefore, in the near future a new board and CPU
will be supported by U-Boot :-)
Bye,
--
Markus Pietrek
Kueferstrasse 8, D-79206 Breisach, Germany
FS Forth-Systeme GmbH
Phone: +49 (7667) 908 145, FAX +49 (7667) 908 221
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot-Users] U-Boot with gcc-3.3.2 and ARM926EJS Targets fails due to __udi
2004-01-29 8:37 ` Markus Pietrek
@ 2004-02-01 18:27 ` Robert Schwebel
0 siblings, 0 replies; 5+ messages in thread
From: Robert Schwebel @ 2004-02-01 18:27 UTC (permalink / raw)
To: u-boot
Markus,
On Thu, Jan 29, 2004 at 09:37:25AM +0100, Markus Pietrek wrote:
> There is a full set already available in the gcc? But anyway, it makes
> not much sense using two different gcc compilers. One for the
> bootloader, one for applications. And with which one has the linux
> kernel to be compiled?
It looks like I have fixed the problems with softfloat support in
gcc-3.3.2 in PTXdist; they first came up when I tried to compile U-Boot
and the linker claimed that libgcc wouldn't have softfloat support
included. If you want to give it a try, download a snapshot from
http://www.pengutronix.de/software/ptxdist/ptxdist-20040201-1.tgz
and try it out with
make toolchain-arm-linux-3.3.2_config
make world
> Thank you, it works fine. Therefore, in the near future a new board
> and CPU will be supported by U-Boot :-)
The Atmel one? Which board are you working with?
Robert
--
Dipl.-Ing. Robert Schwebel | http://www.pengutronix.de
Pengutronix - Linux Solutions for Science and Industry
Handelsregister: Amtsgericht Hildesheim, HRA 2686
Hornemannstra?e 12, 31137 Hildesheim, Germany
Phone: +49-5121-28619-0 | Fax: +49-5121-28619-4
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2004-02-01 18:27 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-01-27 14:24 [U-Boot-Users] U-Boot with gcc-3.3.2 and ARM926EJS Targets fails due to __udiv0 Markus Pietrek
2004-01-28 10:37 ` [U-Boot-Users] U-Boot with gcc-3.3.2 and ARM926EJS Targets fails due to __udi Anders Larsen
2004-01-28 16:55 ` Wolfgang Denk
2004-01-29 8:37 ` Markus Pietrek
2004-02-01 18:27 ` Robert Schwebel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox