Skip to contentSkip to conversation

Allow building mips versions with ELDK 3.1.1

PATCH New Vlad Lungu 3 participants 3 messages May 5, 2008 – May 6, 2008

lore
Share & tools
lore

Vlad Lungu

author
#0 lore raw

PATCH 1/1 Allow building mips versions with ELDK 3.1.1

.gpword works only with local symbols on certain binutils versions

---
 cpu/mips/start.S |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)
cpu/mips/start.S +6 -3
index 6e1a78c..947128d 100644
@@ -345,7 +345,8 @@ relocate_code:
 	jr	t0
 	nop
 
-	.gpword	_GLOBAL_OFFSET_TABLE_	/* _GLOBAL_OFFSET_TABLE_ - _gp	*/
+	.word 	_gp
+	.word	_GLOBAL_OFFSET_TABLE_
 	.word	uboot_end_data
 	.word	uboot_end
 	.word	num_got_entries
@@ -358,8 +359,10 @@ in_ram:
 	 * generated by GNU ld. Skip these reserved entries from relocation.
 	 */
 	lw	t3, -4(t0)	/* t3 <-- num_got_entries	*/
-	lw	t4, -16(t0)	/* t4 <-- (_GLOBAL_OFFSET_TABLE_ - _gp)	*/
-	add	t4, t4, gp	/* t4 now holds _GLOBAL_OFFSET_TABLE_	*/
+	lw	t4, -16(t0)	/* t4 <-- _GLOBAL_OFFSET_TABLE_	*/
+	lw	t5, -20(t0)	/* t5 <-- _gp	*/
+	sub	t4, t5		/* compute offset*/
+	add	t4, t4, gp	/* t4 now holds relocated _GLOBAL_OFFSET_TABLE_	*/
 	addi	t4, t4, 8	/* Skipping first two entries.	*/
 	li	t2, 2
 1:
Signature · 1 line
1.5.4
#1 lore raw

PATCH 1/1 Allow building mips versions with ELDK 3.1.1

Quoted 6 lines · In message <[email protected]> you wrote:

.gpword works only with local symbols on certain binutils versions

---
 cpu/mips/start.S |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

Applied, thanks a lot.

This fixes the start.S erros/warnings.

So the only obvious problem remaining for MIPS are the cache.S warnings:

cache.S:243: Warning: Pretending global symbol used as branch target is local. cache.S:250: Warning: Pretending global symbol used as branch target is local.

Best regards,

Wolfgang Denk

Signature · 6 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Hiring experienced unix people is  like  a  built-in  filter  against
idiots. Hiring experienced NT people provides no such guarantee.
            -- Miguel Cruz in WgL96.349$CC.122704 at typhoon2.ba-dsg.net
#2 lore raw

PATCH 1/1 Allow building mips versions with ELDK 3.1.1

Quoted 11 lines · Wolfgang Denk
Quoted 6 lines · In message <[email protected]> you wrote:

.gpword works only with local symbols on certain binutils versions

---
 cpu/mips/start.S |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

Applied, thanks a lot.

This fixes the start.S erros/warnings.

This patch works with my two different CPUs. Thanks!

Quoted 5 lines

So the only obvious problem remaining for MIPS are the cache.S warnings:

cache.S:243: Warning: Pretending global symbol used as branch target is local. cache.S:250: Warning: Pretending global symbol used as branch target is local.

Assembler might be sensitive to global symbol references under PIC code because they should be processed through GOT in principle.

Therefore, we should have set up function entry point explicitly like:

cpu/mips/cache.S +4 -2
index 8024a2e..7966079 100644
@@ -239,14 +239,16 @@ NESTED(mips_cache_reset, 0, ra)
         */
        move    a1, t2
        move    a2, t4
-       bal     mips_init_icache
+       PTR_LA  t7, mips_init_icache
+       jalr    t7
 
        /*
         * then initialize D-cache.
         */
        move    a1, t3
        move    a2, t5
-       bal     mips_init_dcache
+       PTR_LA  t7, mips_init_dcache
+       jalr    t7
 
        jr      RA
        END(mips_cache_reset)

I'll post the patch later.

thanks,

Shinya