Help with -march and -mcpu issues

Rick Mann rmann@latencyzero.com
Thu Aug 30 19:21:00 GMT 2007


Hi. I'm using GCC to target an ARM (XScale) processor. I've  
successfully built code that runs on the target hardware, but I'm  
trying to understand better some of the nuances.

I should point out that I've asked this question on the GNUARM list  
and gotten no responses.

I have a very simple situation. A single main.c and start.S are  
compiled, then linked using ld, then stripped with objcopy and  
finally downloaded to the target. However, if I add -march=armv5te, I  
get a very puzzling error. Here are the basic invocations:

$ arm-elf-gcc -c main.c -o main.o
$ arm-elf-ld  -e _start -o h.elf --script=link.lds start.o main.o
$ arm-elf-objcopy --output-target=binary --gap-fill=0xff h.elf h

The resulting file "h" works very well.

However, if I add -mcpu=xscale or -march=armv5te to the gcc line, I  
get errors like this:

arm-elf-ld: ERROR: main.o uses VFP instructions, whereas h.elf does not

What's puzzling to me about this is that h.elf is what's being built  
by ld. Presumably there's an option to ld to make it recognize the  
architecture, but I'm not sure what it is. I tried to change the  
build steps to call gcc instead of ld, as follows (although I'm not  
at all sure this is the correct approach):

$ arm-elf-gcc -ffreestanding -nostdlib -std=c99 \
	-Xlinker -e -Xlinker _start -Xlinker --script=link.lds \
	-v -o h.elf start.o main.o


Which seems to have produced the exact same final output (after  
objcopy). However, when I added -march=armv5e to the gcc invocations,  
I still get the error about VFP instructions.


I sure hope there's a GCC guru out there who can enlighten me. Thanks!

-- 
Rick



More information about the Binutils mailing list