[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