
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