x86: Remove usage of %ebp as a return pointer
authorGraeme Russ <graeme.russ@gmail.com>
Thu, 7 Oct 2010 09:03:27 +0000 (20:03 +1100)
committerGraeme Russ <graeme.russ@gmail.com>
Thu, 7 Oct 2010 09:03:27 +0000 (20:03 +1100)
Using %ebp as a return pointer prevents creating 'load anywhere' images

arch/i386/cpu/sc520/sc520_asm.S
arch/i386/cpu/start.S
arch/i386/cpu/start16.S
board/eNET/eNET_start.S
board/eNET/eNET_start16.S

index e0d3102ce260453a20633e8e68dc252cc2f6813b..a18e2c3d0c571ef7e2c848335a0de4b9e2156abd 100644 (file)
@@ -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
index 819274f05062e0054a2839642cbb9d904b6d7be4..551965f42ecb932ef889025478af0240ffae6dcb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  U-boot - i386 Startup Code
  *
- *  Copyright (c) 2002 Omicron Ceti AB, Daniel Engström <denaiel@omicron.se>
+ *  Copyright (c) 2002 Omicron Ceti AB, Daniel Engstrm <denaiel@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
index 2a5cca9d69ac86f64ef5b7b839267071a973d913..0de4d09398c1fcbc161ab2e5a3c91924d595e7b4 100644 (file)
@@ -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) */
index 6659549a37cfe3f214eecdd4364aac1213c2b4e6..137fe41b4be0fd50daea279775f3282a008ac4d4 100644 (file)
@@ -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:
index af2c13215663f62c675fe35b663148e98f51c670..06cfd558d1306b3020f5dcee0092cc106c6e94b4 100644 (file)
@@ -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