[U-Boot-Users] [PATCH] Fixed the _gp/_G_O_T_ confusion for good
Vlad Lungu
vlad at comsys.ro
Fri Oct 12 14:06:17 CEST 2007
$gp is loaded with _gp
the GOT is updated starting from _G_O_T_+8 up to (but not including) __got_end
__got_start is unused
num_got_entries is unused and could be removed from ld scripts
To test:
_gp =ALIGN(16)+4;
__got_start = .;
. += 4;
.got : { *(.got) }
__got_end = .;
produces
0x00000000bfc1f564 _gp = (ALIGN (0x10) + 0x4)
0x00000000bfc1f560 __got_start = .
0x00000000bfc1f564 . = (. + 0x4)
.got 0x00000000bfc1f570 0x500
*(.got)
.got 0x00000000bfc1f570 0x500 cpu/mips/start.o
0x00000000bfc1f570 _GLOBAL_OFFSET_TABLE_
0x00000000bfc1fa70 __got_end = .
0x00000000bfc1fa70 . = .
The boards boots and the command line is working
Signed-off-by: Vlad Lungu <vlad at comsys.ro>
---
cpu/mips/start.S | 23 +++++++++++++----------
1 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/cpu/mips/start.S b/cpu/mips/start.S
index e91e213..816c23a 100644
--- a/cpu/mips/start.S
+++ b/cpu/mips/start.S
@@ -234,11 +234,11 @@ reset:
li t0, CONF_CM_UNCACHED
mtc0 t0, CP0_CONFIG
- /* Initialize GOT pointer.
+ /* Initialize $gp.
*/
bal 1f
nop
- .word _GLOBAL_OFFSET_TABLE_
+ .word _gp
1:
move gp, ra
lw t1, 0(ra)
@@ -306,9 +306,9 @@ relocate_code:
move t1, a2
/*
- * Fix GOT pointer:
+ * Fix _gp:
*
- * New GOT-PTR = (old GOT-PTR - CFG_MONITOR_BASE) + Destination Address
+ * New _gp = (old _gp - CFG_MONITOR_BASE) + Destination Address
*/
move t6, gp
sub gp, CFG_MONITOR_BASE
@@ -341,25 +341,28 @@ relocate_code:
j t0
nop
+ .gpword _GLOBAL_OFFSET_TABLE_
.word uboot_end_data
.word uboot_end
- .word num_got_entries
+ .gpword __got_end
in_ram:
/* Now we want to update GOT.
*/
- lw t3, -4(t0) /* t3 <-- num_got_entries */
+ lw t3, -16(t0) /* t3 <-- _G_O_T_-_gp */
addi t4, gp, 8 /* Skipping first two entries. */
- li t2, 2
+ add t4, t4, t3 /* Actual &(_G_O_T_[2]) */
+ lw t3, -4(t0) /* t3 <-- __got_end-_gp */
+ add t3,gp
1:
lw t1, 0(t4)
beqz t1, 2f
add t1, t6
sw t1, 0(t4)
2:
- addi t2, 1
- blt t2, t3, 1b
- addi t4, 4 /* delay slot */
+ addi t4, 4
+ blt t4, t3, 1b
+ nop
/* Clear BSS.
*/
--
1.5.2.2
More information about the U-Boot
mailing list