
Wolfgang Wegner wrote:
Hi,
thank you all for all the comments so far.
It seems I have at least 2 problems:
- my gcc (m68k-elf-gcc (Sourcery G++ Lite 4.3-208) 4.3.3) does not produce correctly relocatable code; no matter if I give -fPIC or not (-mrelocatable is not accepted at all), I do not get any entries in .got2 or .fixup, only .got
-mreloctable only applies to PPC CPUs - not version of gcc will give you .got2 and .fixup unless you are building for PPC
However, there still may be anything wrong in my conclusion, because I can use this compiler to compile uClinux-dist-20071107 and get working applications (which, as far as I understand, have to be relocated at runtime, too, but I do not know if any of these use such features as statically initialized function pointers that I have in the U-Boot fpga code...).
They are build and linked as pic or pie (position independent executable) This puts information in the elf binary that the dynamic loader/linker can user to modify the executable as it is loaded into memory to enable it to run at the target load address
- the current coldfire startup code (at least for MCF532x/MCF537x) would not handle these sections even if they existed - however, this seems to be rather easily (i.e. maybe even I could do it) fixed, looking at the ppc examples.
You might want to look at the x86 example instead. I posted a patch a while ago (http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/68923)
I will first live with the problem (relocating the fpga struct pointers in my own board code, where it is filled anyways - for coldfire, gd->reloc_off is still present) and see if I can get hold of a better gcc version.
Yes, this manual 'fixup' will work, but the long term goal is to remove this
I tried gcc-4.4.1, but was unable to compile one of U-Boot or uClinux, so switched back to this one which I found to compile (old and current) U-Boot, old uClinux _and_ support mcf5445x, which I am designing in now...
Thank you and sorry for my stupid questions.
Not stupid at all - Proper relocation can be very tricky to achieve. I spent a _long_ time getting it to work for x86, and in the end the solution is rather trivial - Have a search through the u-boot mailing list ;)
Regards, Wolfgang
Regards,
Graeme