Controlling ld and as with GCC-Backend

Jens Mehler
Sun Mar 17 10:12:00 GMT 2013


the problem I keep running into is something that I don't fully
understand (yet).
I wrote a new backend for GCC, ported the GNU-Toolchain to my target and
got it running.

The next thing I did:
I wrote a small helloworld.c a start.s and an end.s.
Everything that is needed is included in those files. When building the
program myself:
eco32-elf-gcc -S helloworld.c
eco32-elf-as -o hello.o start.s helloworld.s end.s
eco32-elf-ld -o hello.elf hello.o
everything works like a charm. The program even runs in the simulator
(after using eco32-elf-objdump -O binary hello.elf hello.bin)

After that I tried using only gcc:
gcc -o hello.elf start.s helloworld.c end.s
after that I got "ld can't find crt0.o".
crt0.o normally comes with the clibrary (that isn't present at the
moment => I will do that after I confirmed my GCC cross is working
So I used as and ld to produce crt0.o from start.s and end.s and put it
into the path for this cross-toolchain.
Well the resulting elf32 binary had complete wrong branch/jump
relocations (wrong offset). And even with adding my own linkderscript
with -T and specifying -nostdlib and -nostdinc the result
still was as horrible as before.

To sum it up, I suspect that either I did something wrong or GCC is
giving some options to ld (or as) that cause this behaviour.

I could really use a pointer in the right direction with this. First I
suspected the tool-chain but the my procedure shows that it works correctly.

With best regards
~ Jens

More information about the Gcc-help mailing list