Old U-boot (v1.1.3 in my example, too old hum?) needs a option -mips_allow_branch_to_undefined for ELDK AS to assemble. We have to modify cpu/mips/start.S so that AS of other toolchains could assemble it without an error - Error: can't resolve `_GLOBAL_OFFSET_TABLE_' {*UND* section} - `L16' {.text section}
original start.S:
/* Initialize GOT pointer. */ bal 1f nop .word _GLOBAL_OFFSET_TABLE_ - 1f + 4 1: move gp, ra lw t1, 0(ra) add gp, t1
It counts an offset first, and gets the gp later from the return address and the offset. Let us do it with different method.
new start.S:
bal 1f nop .word _GLOBAL_OFFSET_TABLE_ 1: lw gp, 0(ra)
Second, remove -Wa,-mips_allow_branch_to_undefined from cpu/mips/config.mk. Then we can make Uboot successfully with the toolchain built from buildroot.
1 comment:
Good solution U-boot-1.1.4 using the same method to fix this problem.
/* Initialize GOT pointer. */
bal 1f
nop
.word _GLOBAL_OFFSET_TABLE_
1:
move gp, ra
lw t1, 0(ra)
move gp, t1
_GLOBAL_OFFSET_TABLE_ will be determined at link time. So compiler can't compile _GLOBAL_OFFSET_TABLE_ - 1f + 4
Post a Comment