[U-Boot] [PATCH 11/19] x86: Remove usage of %ebp as a return pointer
Graeme Russ
graeme.russ at gmail.com
Mon Oct 4 05:37:55 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 | 10 +++++-----
arch/i386/cpu/start16.S | 2 +-
board/eNET/eNET_start.S | 2 +-
board/eNET/eNET_start16.S | 3 +--
5 files changed, 11 insertions(+), 12 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 9e6e0bf..a2157a5 100644
--- a/arch/i386/cpu/start.S
+++ b/arch/i386/cpu/start.S
@@ -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 ecc_init_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