Compiled for big endian target is little endian ld error

Nick Clifton nickc@redhat.com
Tue Mar 14 11:10:00 GMT 2006
Hi DSP,

> [root@localhost phy_ctrl]# arm-linux-gcc arm_obj/main.o
> arm_obj/dm256_reg_defs.o -mbig-endian -mhard-float -o  dm256_ctrll
> /usr/local/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld:
> ERROR: /usr/local/arm-linux/lib/be/libc. so.6 uses FPA instructions,
> whereas dm256_ctrl does not

Ah - this is probably because the very first object file on the linker's 
command line has not been compiled with -mhard-float.  This file is 
usually the crt0.o file - you can add the "-v" to the gcc command line 
to find out.

The implication is that the toolchain you are using has not been built 
with a set of hard-float multilibs, or that there is a bug in the linker 
and it is choosing the wrong set of flags to set in the private header 
of the dm256_ctrl output file.  The latter seems more likely since you 
have other error messages which imply that there are hard-float binaries 
in the toolchain:

   /usr/local/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld:
   ERROR: /usr/local/lib/gcc-lib/arm-linux/ 3.3.2/be/crtn.o uses hardware
   FP, whereas dm256_ctrl uses software FP

So - what to do ?  First find out which file is the first object file on 
the linker's command line and then check to see what private flags have 
been set on this file (use "objdump -p").  If this file does have the 
hard-float and FPA flags set then the problem must be the linker.  Try 
downloading the latest binutils sources (either the 2.16 release or from 
the CVS mainline) ans building yourself a new linker.  If the first file 
has not been compiled with FPA support, then you could try finding the 
sources for it and recompiling it.

Cheers
   Nick



More information about the Binutils mailing list