diff options
Diffstat (limited to 'arch/arm/cpu/arm925t/start.S')
| -rw-r--r-- | arch/arm/cpu/arm925t/start.S | 28 | 
1 files changed, 15 insertions, 13 deletions
| diff --git a/arch/arm/cpu/arm925t/start.S b/arch/arm/cpu/arm925t/start.S index 827fee249..021e2418d 100644 --- a/arch/arm/cpu/arm925t/start.S +++ b/arch/arm/cpu/arm925t/start.S @@ -79,7 +79,11 @@ _fiq:			.word fiq  .globl _TEXT_BASE  _TEXT_BASE: +#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_TEXT_BASE) +	.word	CONFIG_SPL_TEXT_BASE +#else  	.word	CONFIG_SYS_TEXT_BASE +#endif  /*   * These are defined in the board-specific linker script. @@ -91,6 +95,10 @@ _TEXT_BASE:  _bss_start_ofs:  	.word __bss_start - _start +.globl _image_copy_end_ofs +_image_copy_end_ofs: +	.word __image_copy_end - _start +  .globl _bss_end_ofs  _bss_end_ofs:  	.word __bss_end - _start @@ -177,29 +185,24 @@ poll1:  /*------------------------------------------------------------------------------*/  /* - * void relocate_code (addr_sp, gd, addr_moni) - * - * This "function" does not return, instead it continues in RAM - * after relocating the monitor code. + * void relocate_code(addr_moni)   * + * This function relocates the monitor code.   */  	.globl	relocate_code  relocate_code: -	mov	r4, r0	/* save addr_sp */ -	mov	r5, r1	/* save addr of gd */ -	mov	r6, r2	/* save addr of destination */ +	mov	r6, r0	/* save addr of destination */  	adr	r0, _start -	cmp	r0, r6 -	moveq	r9, #0		/* no relocation. relocation offset(r9) = 0 */ +	subs	r9, r6, r0		/* r9 <- relocation offset */  	beq	relocate_done		/* skip relocation */  	mov	r1, r6			/* r1 <- scratch for copy_loop */ -	ldr	r3, _bss_start_ofs +	ldr	r3, _image_copy_end_ofs  	add	r2, r0, r3		/* r2 <- source end address	    */  copy_loop: -	ldmia	r0!, {r9-r10}		/* copy from source address [r0]    */ -	stmia	r1!, {r9-r10}		/* copy to   target address [r1]    */ +	ldmia	r0!, {r10-r11}		/* copy from source address [r0]    */ +	stmia	r1!, {r10-r11}		/* copy to   target address [r1]    */  	cmp	r0, r2			/* until source end address [r2]    */  	blo	copy_loop @@ -208,7 +211,6 @@ copy_loop:  	 * fix .rel.dyn relocations  	 */  	ldr	r0, _TEXT_BASE		/* r0 <- Text base */ -	sub	r9, r6, r0		/* r9 <- relocation offset */  	ldr	r10, _dynsym_start_ofs	/* r10 <- sym table ofs */  	add	r10, r10, r0		/* r10 <- sym table in FLASH */  	ldr	r2, _rel_dyn_start_ofs	/* r2 <- rel dyn start ofs */ |