[U-Boot] [PATCH v2 12/20] x86: Remove usage of %ebp as a return pointer

Graeme Russ graeme.russ at gmail.com
Tue Oct 5 13:19:18 CEST 2010


Using %ebp as a return pointer prevents creating 'load anywhere' images

Signed-off-by: Graeme Russ <graeme.russ at gmail.com>
---
 arch/i386/cpu/sc520/sc520_asm.S |    6 +++---
 arch/i386/cpu/start.S           |   12 ++++++------
 arch/i386/cpu/start16.S         |    2 +-
 board/eNET/eNET_start.S         |    2 +-
 board/eNET/eNET_start16.S       |    3 +--
 5 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/arch/i386/cpu/sc520/sc520_asm.S b/arch/i386/cpu/sc520/sc520_asm.S
index e0d3102..a18e2c3 100644
--- a/arch/i386/cpu/sc520/sc520_asm.S
+++ b/arch/i386/cpu/sc520/sc520_asm.S
@@ -517,7 +517,7 @@ bad_ram:
 	jmp	bad_reint
 
 dram_done:
-	jmp	*%ebp
+	jmp	mem_init_ret
 
 #if CONFIG_SYS_SDRAM_ECC_ENABLE
 .globl init_ecc
@@ -562,7 +562,7 @@ set_ecc:
 	movb	%al,(%edi)
 
 out:
-	jmp	*%ebp
+	jmp	init_ecc_ret
 #endif
 
 /*
@@ -607,4 +607,4 @@ bank3:	movl	(%edi), %eax
 
 done:
 	movl	%ebx, %eax
-	jmp	*%ebp
+	jmp	get_mem_size_ret
diff --git a/arch/i386/cpu/start.S b/arch/i386/cpu/start.S
index 819274f..551965f 100644
--- a/arch/i386/cpu/start.S
+++ b/arch/i386/cpu/start.S
@@ -1,7 +1,7 @@
 /*
  *  U-boot - i386 Startup Code
  *
- *  Copyright (c) 2002	Omicron Ceti AB, Daniel Engström <denaiel at omicron.se>
+ *  Copyright (c) 2002	Omicron Ceti AB, Daniel Engstr�m <denaiel at omicron.se>
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -79,18 +79,18 @@ _start:
 	 * to store the return address */
 
 	/* Early platform init (setup gpio, etc ) */
-	mov	$early_board_init_ret, %ebp
 	jmp	early_board_init
+.globl early_board_init_ret
 early_board_init_ret:
 
 	/* size memory */
-	mov	$mem_init_ret, %ebp
 	jmp	mem_init
+.globl mem_init_ret
 mem_init_ret:
 
 	/* fetch memory size (into %eax) */
-	mov	$get_mem_size_ret, %ebp
 	jmp	get_mem_size
+.globl get_mem_size_ret
 get_mem_size_ret:
 
 #if CONFIG_SYS_SDRAM_ECC_ENABLE
@@ -98,9 +98,9 @@ get_mem_size_ret:
 	movl	%ebx, %ecx
 	andl	$GD_FLG_COLD_BOOT, %ecx
 	jz	init_ecc_ret
-	mov	$init_ecc_ret, %ebp
 	jmp	init_ecc
 
+.globl init_ecc_ret
 init_ecc_ret:
 #endif
 
@@ -116,7 +116,7 @@ mem_ok:
 	pushl	$0
 	popl	%eax
 	cmpl	$0, %eax
-	jne	no_stack
+	jne	die
 	push	$0x55aa55aa
 	popl	%ebx
 	cmpl	$0x55aa55aa, %ebx
diff --git a/arch/i386/cpu/start16.S b/arch/i386/cpu/start16.S
index 2a5cca9..0de4d09 100644
--- a/arch/i386/cpu/start16.S
+++ b/arch/i386/cpu/start16.S
@@ -35,8 +35,8 @@ start16:
 	 * First we let the BSP do some early initialization
 	 * this code have to map the flash to its final position
 	 */
-	mov	$board_init16_ret, %bp
 	jmp	board_init16
+.globl board_init16_ret
 board_init16_ret:
 
 	/* Turn of cache (this might require a 486-class CPU) */
diff --git a/board/eNET/eNET_start.S b/board/eNET/eNET_start.S
index 6659549..137fe41 100644
--- a/board/eNET/eNET_start.S
+++ b/board/eNET/eNET_start.S
@@ -27,7 +27,7 @@
 .globl early_board_init
 early_board_init:
 	/* No 32-bit board specific initialisation */
-	jmp	*%ebp		/* return to caller */
+	jmp	early_board_init_ret
 
 .globl cpu_halt_asm
 cpu_halt_asm:
diff --git a/board/eNET/eNET_start16.S b/board/eNET/eNET_start16.S
index af2c132..06cfd55 100644
--- a/board/eNET/eNET_start16.S
+++ b/board/eNET/eNET_start16.S
@@ -65,8 +65,7 @@ board_init16:
 	movl	$0x000000cb, %eax
 	outl	%eax, %dx
 
-	/* the return address is stored in bp */
-	jmp	*%bp
+	jmp	board_init16_ret
 
 .section .bios, "ax"
 .code16
-- 
1.7.1.422.g049e9



More information about the U-Boot mailing list