[U-Boot-Users] link error on first compile

Hi all,
On a fresh untar; make xxx_config; make all, I get an error linking the example program hello_world with start.o.
This can be worked around by removing 'examples' from the list of SUBDIRS in the top-level Makefile.
After building, I added 'examples' back in. Strangely, for one set of builds, this solved my problem (and hello_world linked OK, even after a 'make distclean'), but for another set of builds, hello_world wouldn't link even when cpu/arm925t/start.o was present.
I haven't been able to figure out the problem, but I thought I'd report it. This is with a home-built gcc: arm-sony-linux-gcc (GCC) 3.4.3
-- Tim
---------------- [tbird@timdesk u-boot-1.1.2]$ make all make[1]: Entering directory `/home/tbird/work/innovator/u-boot-1.1.2/tools' make[1]: `.depend' is up to date. make[1]: Leaving directory `/home/tbird/work/innovator/u-boot-1.1.2/tools' make[1]: Entering directory `/home/tbird/work/innovator/u-boot-1.1.2/examples' make[1]: `.depend' is up to date. make[1]: Leaving directory `/home/tbird/work/innovator/u-boot-1.1.2/examples' make[1]: Entering directory `/home/tbird/work/innovator/u-boot-1.1.2/post' make[1]: `.depend' is up to date. make[1]: Leaving directory `/home/tbird/work/innovator/u-boot-1.1.2/post' make[1]: Entering directory `/home/tbird/work/innovator/u-boot-1.1.2/post/cpu' make[1]: `.depend' is up to date. make[1]: Leaving directory `/home/tbird/work/innovator/u-boot-1.1.2/post/cpu' make -C tools all make[1]: Entering directory `/home/tbird/work/innovator/u-boot-1.1.2/tools' gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -c -o img2srec.o img2srec.c gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -o img2srec img2srec.o strip img2srec gcc -g -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -c mkimage.c gcc -g -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -c crc32.c gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -o mkimage mkimage.o crc32.o strip mkimage gcc -g -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -c envcrc.c gcc -g -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -c environment.c gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -o envcrc envcrc.o crc32.o environment.o gcc -g -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -c gen_eth_addr.c gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -o gen_eth_addr gen_eth_addr.o strip gen_eth_addr gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -c -o bmp_logo.o bmp_logo.c gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -o bmp_logo bmp_logo.o strip bmp_logo ./bmp_logo logos/denx.bmp >/home/tbird/work/innovator/u-boot-1.1.2/include/bmp_logo.h make[1]: Leaving directory `/home/tbird/work/innovator/u-boot-1.1.2/tools' make -C examples all make[1]: Entering directory `/home/tbird/work/innovator/u-boot-1.1.2/examples' arm-sony-linux-gcc -g -Os -fno-strict-aliasing -fno-common -ffixed-r8 -malignment-traps -msoft-float -D__KERNEL__ -DTEXT_BASE=0x11080000 -I/home/tbird/work/innovator/u-boot-1.1.2/include -fno-builtin -ffreestanding -nostdinc -isystem /home/local/arm-sony-linux/devel/bin/../lib/gcc/arm-sony-linux/3.4.3/include -pipe -DCONFIG_ARM -D__ARM__ -mapcs-32 -march=armv4 -Wall -Wstrict-prototypes -c -o stubs.o stubs.c arm-sony-linux-ar crv libstubs.a stubs.o a - stubs.o arm-sony-linux-gcc -g -Os -fno-strict-aliasing -fno-common -ffixed-r8 -malignment-traps -msoft-float -D__KERNEL__ -DTEXT_BASE=0x11080000 -I/home/tbird/work/innovator/u-boot-1.1.2/include -fno-builtin -ffreestanding -nostdinc -isystem /home/local/arm-sony-linux/devel/bin/../lib/gcc/arm-sony-linux/3.4.3/include -pipe -DCONFIG_ARM -D__ARM__ -mapcs-32 -march=armv4 -Wall -Wstrict-prototypes -g -Os -fno-strict-aliasing -fno-common -ffixed-r8 -malignment-traps -msoft-float -D__KERNEL__ -DTEXT_BASE=0x11080000 -I/home/tbird/work/innovator/u-boot-1.1.2/include -fno-builtin -ffreestanding -nostdinc -isystem /home/local/arm-sony-linux/devel/bin/../lib/gcc/arm-sony-linux/3.4.3/include -pipe -DCONFIG_ARM -D__ARM__ -mapcs-32 -march=armv4 -I.. -Bstatic -T /home/tbird/work/innovator/u-boot-1.1.2/board/omap1510inn/u-boot.lds -Ttext 0x11080000 hello_world.c -o hello_world /home/local/arm-sony-linux/devel/bin/../lib/gcc/arm-sony-linux/3.4.3/../../../../arm-sony-linux/bin/ld: cannot find cpu/arm925t/start.o collect2: ld returned 1 exit status make[1]: *** [hello_world] Error 1 make[1]: Leaving directory `/home/tbird/work/innovator/u-boot-1.1.2/examples' make: *** [examples] Error 2 -----
============================= Tim Bird Architecture Group Chair, CE Linux Forum Senior Staff Engineer, Sony Electronics =============================

Hi Tim,
I also met this problem. When I use MV31 for MPC85xx cross-compiler to compile for board MPC8560ADS, I was stuck at exactly the same place : can't link examples/hello_world.o, however if I use ELDK's compiler everything is fine. So I digged into them a little bit deeper. The problem happens at examples/stubs.c, when compile it to generate stubs.o, no symbols like dummy, or printf is in stubs.o, which is needed when link hello_world.o later. If we look at stubs.c, =========== static void __attribute__((unused)) dummy(void) { #include <_exports.h> } =========== this declaration makes dummy and all stubs functions not be included in stubs.o if using yours and MV31 compiler, it's the cross-compiler's optimization make this happen. Check the file u-boot/config.mk, and find OPTFLAGS = -Os, which ask compiler to optimize for the purpose of reducing code size. Some compilers, like yours arm-sony-linux-gcc (GCC) 3.4.3 and mine ppc_85xx-gcc (GCC) 3.4.1 (MontaVista 3.4.1-2.0.14.0401563 2004-11-12), optimize the stubs.c code by eliminating "unused" function "dummy" and of course all stubs functions defined in dummy() out of the stubs.o. If I change -Os to -O1, and compile again, then compiling was successful, in this case I can't guarantee the obj files are working or not :). So you should check your compiler documents on how to include those "unused" functions while in -Os optimization level. Just my 2 cents, hope it works.
----- Yang Yang Software Engineer, R&D Cyclades Corporation Phone: +1-510-771-6100 x253 Fax: +1-510-771-6200 E-mail: yang.yang@cyclades.com
Tim Bird <tim.bird@am.sony .com> To Sent by: u-boot-users@lists.sourceforge.net u-boot-users-admi cc n@lists.sourcefor ge.net Subject [U-Boot-Users] link error on first compile 02/03/2005 05:17 PM
Hi all,
On a fresh untar; make xxx_config; make all, I get an error linking the example program hello_world with start.o.
This can be worked around by removing 'examples' from the list of SUBDIRS in the top-level Makefile.
After building, I added 'examples' back in. Strangely, for one set of builds, this solved my problem (and hello_world linked OK, even after a 'make distclean'), but for another set of builds, hello_world wouldn't link even when cpu/arm925t/start.o was present.
I haven't been able to figure out the problem, but I thought I'd report it. This is with a home-built gcc: arm-sony-linux-gcc (GCC) 3.4.3
-- Tim
---------------- [tbird@timdesk u-boot-1.1.2]$ make all make[1]: Entering directory `/home/tbird/work/innovator/u-boot-1.1.2/tools' make[1]: `.depend' is up to date. make[1]: Leaving directory `/home/tbird/work/innovator/u-boot-1.1.2/tools' make[1]: Entering directory `/home/tbird/work/innovator/u-boot-1.1.2 /examples' make[1]: `.depend' is up to date. make[1]: Leaving directory `/home/tbird/work/innovator/u-boot-1.1.2 /examples' make[1]: Entering directory `/home/tbird/work/innovator/u-boot-1.1.2/post' make[1]: `.depend' is up to date. make[1]: Leaving directory `/home/tbird/work/innovator/u-boot-1.1.2/post' make[1]: Entering directory `/home/tbird/work/innovator/u-boot-1.1.2 /post/cpu' make[1]: `.depend' is up to date. make[1]: Leaving directory `/home/tbird/work/innovator/u-boot-1.1.2 /post/cpu' make -C tools all make[1]: Entering directory `/home/tbird/work/innovator/u-boot-1.1.2/tools' gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -c -o img2srec.o img2srec.c gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -o img2srec img2srec.o strip img2srec gcc -g -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -c mkimage.c gcc -g -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -c crc32.c gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -o mkimage mkimage.o crc32.o strip mkimage gcc -g -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -c envcrc.c gcc -g -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -c environment.c gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -o envcrc envcrc.o crc32.o environment.o gcc -g -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -c gen_eth_addr.c gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -o gen_eth_addr gen_eth_addr.o strip gen_eth_addr gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -c -o bmp_logo.o bmp_logo.c gcc -Wall -pedantic -idirafter ../include -DTEXT_BASE=0x11080000 -DUSE_HOSTCC -O -o bmp_logo bmp_logo.o strip bmp_logo ./bmp_logo logos/denx.bmp >/home/tbird/work/innovator/u-boot-1.1.2 /include/bmp_logo.h make[1]: Leaving directory `/home/tbird/work/innovator/u-boot-1.1.2/tools' make -C examples all make[1]: Entering directory `/home/tbird/work/innovator/u-boot-1.1.2 /examples' arm-sony-linux-gcc -g -Os -fno-strict-aliasing -fno-common -ffixed-r8 -malignment-traps -msoft-float -D__KERNEL__ -DTEXT_BASE=0x11080000 -I/home/tbird/work/innovator/u-boot-1.1.2/include -fno-builtin -ffreestanding -nostdinc -isystem /home/local/arm-sony-linux/devel/bin/../lib/gcc/arm-sony-linux/3.4.3 /include -pipe -DCONFIG_ARM -D__ARM__ -mapcs-32 -march=armv4 -Wall -Wstrict-prototypes -c -o stubs.o stubs.c arm-sony-linux-ar crv libstubs.a stubs.o a - stubs.o arm-sony-linux-gcc -g -Os -fno-strict-aliasing -fno-common -ffixed-r8 -malignment-traps -msoft-float -D__KERNEL__ -DTEXT_BASE=0x11080000 -I/home/tbird/work/innovator/u-boot-1.1.2/include -fno-builtin -ffreestanding -nostdinc -isystem /home/local/arm-sony-linux/devel/bin/../lib/gcc/arm-sony-linux/3.4.3 /include -pipe -DCONFIG_ARM -D__ARM__ -mapcs-32 -march=armv4 -Wall -Wstrict-prototypes -g -Os -fno-strict-aliasing -fno-common -ffixed-r8 -malignment-traps -msoft-float -D__KERNEL__ -DTEXT_BASE=0x11080000 -I/home/tbird/work/innovator/u-boot-1.1.2/include -fno-builtin -ffreestanding -nostdinc -isystem /home/local/arm-sony-linux/devel/bin/../lib/gcc/arm-sony-linux/3.4.3 /include -pipe -DCONFIG_ARM -D__ARM__ -mapcs-32 -march=armv4 -I.. -Bstatic -T /home/tbird/work/innovator/u-boot-1.1.2/board/omap1510inn/u-boot.lds -Ttext 0x11080000 hello_world.c -o hello_world /home/local/arm-sony-linux/devel/bin/../lib/gcc/arm-sony-linux/3.4.3 /../../../../arm-sony-linux/bin/ld: cannot find cpu/arm925t/start.o collect2: ld returned 1 exit status make[1]: *** [hello_world] Error 1 make[1]: Leaving directory `/home/tbird/work/innovator/u-boot-1.1.2 /examples' make: *** [examples] Error 2 -----
============================= Tim Bird Architecture Group Chair, CE Linux Forum Senior Staff Engineer, Sony Electronics =============================
------------------------------------------------------- This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting Tool for open source databases. Create drag-&-drop reports. Save time by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc. Download a FREE copy at http://www.intelliview.com/go/osdn_nl _______________________________________________ U-Boot-Users mailing list U-Boot-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/u-boot-users

On Thu, 2005-02-03 at 20:59, Yang Yang wrote:
Hi Tim,
I also met this problem. When I use MV31 for MPC85xx cross-compiler to compile for board MPC8560ADS, I was stuck at exactly the same place : can't link examples/hello_world.o, however if I use ELDK's compiler everything is fine. So I digged into them a little bit deeper. The problem happens at examples/stubs.c, when compile it to generate stubs.o, no symbols like dummy, or printf is in stubs.o, which is needed when link hello_world.o later.
...and I mentioned it on this list here as well:
From: Jon Loeliger <jdl@fr...> Those hello_world compilation problems 2004-10-14 13:29
Folks,
I did some digging on our toolchain here on our new Yellowdog 4.0 installed machines. They have a 3.3.2 compiler on them by default, apparently.
As someone else discerned, that cause an issue with the dummy() function being static in the stubs.o file for the examples directory.
I"ve found that all appears to be better if the test in the example/stubs.c file is changed from:
#if GCC_VERSION < 3004 to #if GCC_VERSION < 3003
HTH, jdl
PS -- Watch that list address carefully!

In message 1107538825.12662.8.camel@cashmere.sps.mot.com you wrote:
...
I"ve found that all appears to be better if the test in the example/stubs.c file is changed from: #if GCC_VERSION < 3004 to #if GCC_VERSION < 3003
I think this is not the case, as the current ELDK uses GCC-3.3.3 (GCC_VERSION = 3003), and "examples/stubs.c" builds just fine.
Best regards,
Wolfgang Denk

On Fri, 2005-02-04 at 15:03, Wolfgang Denk wrote:
In message 1107538825.12662.8.camel@cashmere.sps.mot.com you wrote:
...
I"ve found that all appears to be better if the test in the example/stubs.c file is changed from: #if GCC_VERSION < 3004 to #if GCC_VERSION < 3003
I think this is not the case, as the current ELDK uses GCC-3.3.3 (GCC_VERSION = 3003), and "examples/stubs.c" builds just fine.
Indeed. Though what it does point out is that there was a problem with the treatment of the "static-ness" of these symbols in the stubs.c file. In reality, I believe the issue was more accurately binutils hidden behind these compiler revs.
jdl
participants (4)
-
Jon Loeliger
-
Tim Bird
-
Wolfgang Denk
-
Yang Yang