
Hi,
I got a problem while I was trying out v2013.01.01 on the u-boot-mips fork repo. It looks like my u-boot binary built with "-pie" linker option doesn't work due to wrong "gp" initialization.
In the "start.S" file, the gp is supposed to be initialized with "_gp" because ra will hold the address of ".word _gp" line. The below is part of "start.S".
---------------------------- ... /* Initialize $gp */ bal 1f nop .word _gp 1: lw gp, 0(ra) ... ----------------------------
Without the -pie option, linker puts the start address of the .got section. However, with -pie option, the ".word _gp" is translated to "nop". The below is disassembled code.
---------------------------------------------------------------------------- 84001490 <reset>: ... 840014b8: 40804800 mtc0 zero,c0_count 840014bc: 40805800 mtc0 zero,c0_compare 840014c0: 04110002 bal 840014cc <reset+0x3c> 840014c4: 00000000 nop 840014c8: 00000000 nop <--------------- 840014cc: 8ffc0000 lw gp,0(ra) 840014d0: 3c1d8440 lui sp,0x8440 840014d4: 8f9982c0 lw t9,-32064(gp) 840014d8: 03200008 jr t9 840014dc: 00000000 nop ----------------------------------------------------------------------------
Could anyone tell me what is going on here? Am I missing anything?
Thanks, Justin