[uClibc] building an arm-be toolchain

Frank Meerkoetter meerkoetter at stud.fbi.fh-darmstadt.de
Thu Aug 21 10:30:21 UTC 2003


On Mon, Aug 18, 2003 at 04:02:17PM -0600, Erik Andersen wrote:
> On Mon Aug 18, 2003 at 03:53:10PM +0200, Frank Meerkoetter wrote:
> > i would like to compile an arm-big-endian-uclibc toolchain using the
> > toolchain makefile from uclibc.org.
> > 
> > Compiling an arm-little-endian-uclibc toolchain worked well. So i tried
> > the naive approch by setting ARCH:=armbe in the Makefile.
> > This didnt worked out.
> > 
> > Can someone give me a hint how to do it?
> 
> ok, this stuff is now in cvs.  Lemme know if you have problems,

I think there is an error in uClibc/Rules.mak. The endianess is
overwritten by the target architecture.

diff -u uClibc/Rules.mak uClibc-mod/Rules.mak
--- uClibc/Rules.mak    2003-08-21 01:19:23.000000000 +0200
+++ uClibc-mod/Rules.mak        2003-08-21 10:44:27.000000000 +0200
@@ -134,16 +134,16 @@
        CPU_LDFLAGS-$(ARCH_BIG_ENDIAN):="-EB"
        CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN):="-mlittle-endian"
        CPU_CFLAGS-$(ARCH_BIG_ENDIAN):="-mbig-endian"
-       CPU_CFLAGS-$(CONFIG_GENERIC_ARM):=
-       CPU_CFLAGS-$(CONFIG_ARM610):=-mtune=arm610 -march=armv3
-       CPU_CFLAGS-$(CONFIG_ARM710):=-mtune=arm710 -march=armv3
-       CPU_CFLAGS-$(CONFIG_ARM720T):=-mtune=arm7tdmi -march=armv4
-       CPU_CFLAGS-$(CONFIG_ARM920T):=-mtune=arm9tdmi -march=armv4
-       CPU_CFLAGS-$(CONFIG_ARM922T):=-mtune=arm9tdmi -march=armv4
-       CPU_CFLAGS-$(CONFIG_ARM926T):=-mtune=arm9tdmi -march=armv4
-       CPU_CFLAGS-$(CONFIG_ARM_SA110):=-mtune=strongarm110 -march=armv4
-       CPU_CFLAGS-$(CONFIG_ARM_SA1100):=-mtune=strongarm1100 -march=armv4
-       CPU_CFLAGS-$(CONFIG_ARM_XSCALE):=$(call check_gcc,-mtune=xscale,-mtune=strongarm110) \
+       CPU_CFLAGS-$(CONFIG_GENERIC_ARM)+=
+       CPU_CFLAGS-$(CONFIG_ARM610)+=-mtune=arm610 -march=armv3
+       CPU_CFLAGS-$(CONFIG_ARM710)+=-mtune=arm710 -march=armv3
+       CPU_CFLAGS-$(CONFIG_ARM720T)+=-mtune=arm7tdmi -march=armv4
+       CPU_CFLAGS-$(CONFIG_ARM920T)+=-mtune=arm9tdmi -march=armv4
+       CPU_CFLAGS-$(CONFIG_ARM922T)+=-mtune=arm9tdmi -march=armv4
+       CPU_CFLAGS-$(CONFIG_ARM926T)+=-mtune=arm9tdmi -march=armv4
+       CPU_CFLAGS-$(CONFIG_ARM_SA110)+=-mtune=strongarm110 -march=armv4
+       CPU_CFLAGS-$(CONFIG_ARM_SA1100)+=-mtune=strongarm1100 -march=armv4
+       CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=$(call check_gcc,-mtune=xscale,-mtune=strongarm110) \
                                $(call check_gcc,-march=armv5te,-march=armv4 -Wa$(comma)-mxscale)
 endif

After making these changes, the uClibc target still breaks, because
crtbeginS.o, crtbegin.o, crtendS.o and crtend.o are build little endian by
the gcc-initial target.
As a temporary measure i just recompiled these files plus libgcc.a by hand 
with -mbig-endian set and copied them to the right places. 
After this, the uClibc build completes!

But i'm still not done. Next the toolchain makefile tries to build the
gcc-final target. Which breaks with the following message:

[...make...]
/home/frank/toolchain/gcc-3.2.3/build_arm/gcc-final/gcc/xgcc \
   -B/home/frank/toolchain/gcc-3.2.3/build_arm/gcc-final/gcc/\
   -B/home/frank/toolchain/gcc-3.2.3/toolchain_arm/arm-linux/bin/ 
   -B/home/frank/toolchain/gcc-3.2.3/toolchain_arm/arm-linux/lib/\
   -isystem /home/frank/toolchain/gcc-3.2.3/toolchain_arm/arm-linux/include\
   -O2  -DIN_GCC -DCROSS_COMPILE   -W -Wall -Wwrite-strings \
   -Wstrict-prototypes -Wmissing-prototypes -isystem ./include \
   -fomit-frame-pointer -fPIC -g0 -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 \
   -D__GCC_FLOAT_NOT_NEEDED -Dinhibit_libc -shared -nodefaultlibs \
   -Wl,--soname=libgcc_s.so.0.9.9 -Wl,--version-script=libgcc/./libgcc.map \
   -o libgcc_s.so.0.9.9   libgcc/./_udivsi3.o libgcc/./_divsi3.o libgcc/./_umodsi3.o libgcc/./_modsi3.o libgcc/./_dvmd_lnx.o libgcc/./_muldi3.o libgcc/./_negdi2.o libgcc/./_lshrdi3.o libgcc/./_ashldi3.o libgcc/./_ashrdi3.o libgcc/./_ffsdi2.o libgcc/./_clz.o libgcc/./_cmpdi2.o libgcc/./_ucmpdi2.o libgcc/./_floatdidf.o libgcc/./_floatdisf.o libgcc/./_fixunsdfsi.o libgcc/./_fixunssfsi.o libgcc/./_fixunsdfdi.o libgcc/./_fixdfdi.o libgcc/./_fixunssfdi.o libgcc/./_fixsfdi.o libgcc/./_fixxfdi.o libgcc/./_fixunsxfdi.o libgcc/./_floatdixf.o libgcc/./_fixunsxfsi.o libgcc/./_fixtfdi.o libgcc/./_fixunstfdi.o libgcc/./_floatditf.o libgcc/./_clear_cache.o libgcc/./_trampoline.o libgcc/./__main.o libgcc/./_exit.o libgcc/./_absvsi2.o libgcc/./_absvdi2.o libgcc/./_addvsi3.o libgcc/./_addvdi3.o libgcc/./_subvsi3.o libgcc/./_subvdi3.o libgcc/./_mulvsi3.o libgcc/./_mulvdi3.o libgcc/./_negvsi2.o libgcc/./_negvdi2.o libgcc/./_ctors.o libgcc/./_divdi3.o libgcc/./_moddi3.o libgcc/./_udivdi3.o libgcc/./_umoddi3.o libgcc/./_udiv_w_sdiv.o libgcc/./_udivmoddi4.o  libgcc/./unwind-dw2.o libgcc/./unwind-dw2-fde-glibc.o libgcc/./unwind-sjlj.o -lc && rm -f libgcc_s.so && ln -s libgcc_s.so.0.9.9 libgcc_s.so
/home/frank/toolchain/gcc-3.2.3/toolchain_arm/arm-linux/lib/libc.so: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make[3]: *** [libgcc_s.so] Error 1
make[3]: Leaving directory `/home/frank/toolchain/gcc-3.2.3/build_arm/gcc-final/gcc'
make[2]: *** [libgcc.a] Error 2
make[2]: Leaving directory `/home/frank/toolchain/gcc-3.2.3/build_arm/gcc-final/gcc'
make[1]: *** [all-gcc] Error 2
make[1]: Leaving directory `/home/frank/toolchain/gcc-3.2.3/build_arm/gcc-final'
make: *** [/home/frank/toolchain/gcc-3.2.3/build_arm/gcc-final/.compiled] Error 2

toolchain_arm/arm-linux/lib/libc.so has indeed no symbols (stripped). 
So i recompiled a version with symbols and copied it into place. 
But still the same error.

Any suggestions?

TIA Frank



More information about the uClibc mailing list