
On 04/26/2012 01:53 AM, Joakim Tjernlund wrote:
Scott Wood scottwood@freescale.com wrote on 2012/04/25 21:01:00:
On 04/18/2012 05:07 AM, Joakim Tjernlund wrote:
Your linker file is buggy I think. I found u-boot-nand_spl.lds, is that the one?
That's the one for the SPL part.
OK, good.
Check out that files reloc part: .reloc : { _GOT2_TABLE_ = .; KEEP(*(.got2)) _FIXUP_TABLE_ = .; KEEP(*(.fixup)) } __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2; __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
Compare that with(from u-boot.lds): .reloc : { _GOT2_TABLE_ = .; KEEP(*(.got2)) KEEP(*(.got)) PROVIDE(_GLOBAL_OFFSET_TABLE_ = . + 4); _FIXUP_TABLE_ = .; KEEP(*(.fixup)) } __got2_entries = ((_GLOBAL_OFFSET_TABLE_ - _GOT2_TABLE_) >> 2) - 1; __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
I notice a difference between u-boot.lds and u-boot-nand.lds -- the latter (used for the main part of U-Boot when loaded from SPL) has:
.reloc : { KEEP(*(.got)) _GOT2_TABLE_ = .; KEEP(*(.got2)) _FIXUP_TABLE_ = .; KEEP(*(.fixup)) } __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2; __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
Is this wrong as well?
Yes, I think so. This one does not care about the .got entries at all so I suspect never gcc's wont work.
Thanks.
I'm not entirely sure about the _GLOBAL_OFFSET_TABLE_ stuff, though -- what's wrong with the simpler version that uses _FIXUP_TABLE_?
-Scott