ARM: define bootloader stack in linker script

This removes the need for the whole HAIKU_BOARD_LOADER_STACK_BASE
sing and dance, since it is always included in the bootloader binary
itself.
This commit is contained in:
Ithamar R. Adema
2014-09-07 20:56:14 +02:00
parent 6fb65b9dfe
commit 0a163b65c7
9 changed files with 14 additions and 26 deletions
-3
View File
@@ -20,8 +20,6 @@ HAIKU_BOARD_LOADER_FAKE_OS = netbsd ;
# (must be different than real load address) # (must be different than real load address)
HAIKU_BOARD_LOADER_UIBASE = 0x82800000 ; HAIKU_BOARD_LOADER_UIBASE = 0x82800000 ;
HAIKU_BOARD_LOADER_STACK_BASE = 0x81a00000 ;
# #
# Flash image # Flash image
# #
@@ -64,7 +62,6 @@ HAIKU_BOARD_SDIMAGE_FILES =
# gcc flags for the specific cpu # gcc flags for the specific cpu
local flags = -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard local flags = -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard
-DHAIKU_BOARD_LOADER_STACK_BASE=$(HAIKU_BOARD_LOADER_STACK_BASE)
-DHAIKU_BOARD_LOADER_UIBASE=$(HAIKU_BOARD_LOADER_UIBASE) ; -DHAIKU_BOARD_LOADER_UIBASE=$(HAIKU_BOARD_LOADER_UIBASE) ;
HAIKU_ASFLAGS_$(HAIKU_PACKAGING_ARCH) += $(flags) ; HAIKU_ASFLAGS_$(HAIKU_PACKAGING_ARCH) += $(flags) ;
@@ -19,8 +19,6 @@ HAIKU_BOARD_LOADER_FAKE_OS = netbsd ;
# (must be different than real load address) # (must be different than real load address)
HAIKU_BOARD_LOADER_UIBASE = 0x34000000 ; HAIKU_BOARD_LOADER_UIBASE = 0x34000000 ;
HAIKU_BOARD_LOADER_STACK_BASE = 0x34000000 ;
# #
# Flash image # Flash image
# #
-3
View File
@@ -20,9 +20,6 @@ HAIKU_BOARD_LOADER_FAKE_OS = netbsd ;
# (must be different than real load address) # (must be different than real load address)
HAIKU_BOARD_LOADER_UIBASE = 0x84000000 ; HAIKU_BOARD_LOADER_UIBASE = 0x84000000 ;
HAIKU_BOARD_LOADER_STACK_BASE = 0x84000000 ;
# #
# mmc/SD image # mmc/SD image
# #
-2
View File
@@ -24,8 +24,6 @@ HAIKU_BOARD_LOADER_FAKE_OS = linux ;
# (must be different than real load address) # (must be different than real load address)
HAIKU_BOARD_LOADER_UIBASE = 0x02000000 ; HAIKU_BOARD_LOADER_UIBASE = 0x02000000 ;
HAIKU_BOARD_LOADER_STACK_BASE = 0x02000000 ;
# #
# gcc flags for the specific cpu # gcc flags for the specific cpu
# #
-2
View File
@@ -19,8 +19,6 @@ HAIKU_BOARD_LOADER_FAKE_OS = netbsd ;
# (must be different than real load address) # (must be different than real load address)
HAIKU_BOARD_LOADER_UIBASE = 0xa4000000 ; HAIKU_BOARD_LOADER_UIBASE = 0xa4000000 ;
HAIKU_BOARD_LOADER_STACK_BASE = 0xa4000000 ;
# #
# Flash image # Flash image
# #
-6
View File
@@ -110,12 +110,6 @@ static struct memblock LOADER_MEMORYMAP[] = {
kLoaderBaseAddress + 0x11FFFFF, kLoaderBaseAddress + 0x11FFFFF,
ARM_MMU_L2_FLAG_C, ARM_MMU_L2_FLAG_C,
}, },
{
"RAM_stack", // stack
HAIKU_BOARD_LOADER_STACK_BASE,
HAIKU_BOARD_LOADER_STACK_BASE + 0xe00000,
ARM_MMU_L2_FLAG_C,
},
{ {
"RAM_initrd", // initrd "RAM_initrd", // initrd
HAIKU_BOARD_LOADER_UIBASE, HAIKU_BOARD_LOADER_UIBASE,
@@ -2,8 +2,6 @@
#include <asm_defs.h> #include <asm_defs.h>
#include <board_config.h>
.text .text
/* /*
@@ -59,10 +57,7 @@ SYMBOL(_start_common):
mov r4, r4 mov r4, r4
mov r4, r4 mov r4, r4
ldr sp,=__stack_top
ldr sp,=SDRAM_BASE + KSTACK_TOP
ldrb r4,gUBootOS ldrb r4,gUBootOS
cmp r4,#0 cmp r4,#0
beq start_raw beq start_raw
@@ -75,6 +70,7 @@ SYMBOL_END(_start_common)
//XXX: doesn't seem to work //XXX: doesn't seem to work
//.data //.data
.global __stack_end, __stack_start
SYMBOL(gUBootGlobalData): SYMBOL(gUBootGlobalData):
.long 0 .long 0
+2 -2
View File
@@ -50,7 +50,7 @@ typedef struct uboot_gd {
// GCC defined globals // GCC defined globals
extern void (*__ctor_list)(void); extern void (*__ctor_list)(void);
extern void (*__ctor_end)(void); extern void (*__ctor_end)(void);
extern uint8 __bss_start; extern uint8 __bss_start, __bss_end;
extern uint8 _end; extern uint8 _end;
extern "C" int main(stage2_args *args); extern "C" int main(stage2_args *args);
@@ -72,7 +72,7 @@ static uint32 sBootOptions;
static void static void
clear_bss(void) clear_bss(void)
{ {
memset(&__bss_start, 0, &_end - &__bss_start); memset(&__bss_start, 0, &__bss_end - &__bss_start);
} }
@@ -1,6 +1,8 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm) OUTPUT_ARCH(arm)
STACK_SIZE = 16384;
ENTRY(_start) ENTRY(_start)
SECTIONS SECTIONS
{ {
@@ -29,6 +31,14 @@ SECTIONS
/* uninitialized data (in same segment as writable data) */ /* uninitialized data (in same segment as writable data) */
__bss_start = .; __bss_start = .;
.bss : { *(.bss) } .bss : { *(.bss) }
__bss_end = .;
.stack : {
__stack_start = .;
. += STACK_SIZE;
. = ALIGN(0x8);
__stack_top = .;
}
. = ALIGN(0x1000); . = ALIGN(0x1000);
_end = . ; _end = . ;