[U-Boot] [u-boot-mips] gp init and -pie option
Juhyun (Justin) Oh
Juhyun_Oh at sigmadesigns.com
Mon Feb 25 20:53:13 CET 2013
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
More information about the U-Boot
mailing list