From 0d344e45af155da2f26bb941fab816e3f8035e62 Mon Sep 17 00:00:00 2001 From: TuxSH Date: Fri, 4 May 2018 23:56:01 +0200 Subject: [PATCH] Initialize heap, increase stack size --- fusee/fusee-secondary/src/main.c | 26 +++++++++++++++++--------- fusee/fusee-secondary/src/start.s | 5 ++++- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/fusee/fusee-secondary/src/main.c b/fusee/fusee-secondary/src/main.c index 6e72dab5f..38cb78f42 100644 --- a/fusee/fusee-secondary/src/main.c +++ b/fusee/fusee-secondary/src/main.c @@ -14,32 +14,40 @@ char g_bct0[0x8000]; /* Allow for main(int argc, void **argv) signature. */ #pragma GCC diagnostic ignored "-Wmain" +void __init_heap(void) { + extern char* fake_heap_start; + extern char* fake_heap_end; + + fake_heap_start = (char*)0xF0000000; + fake_heap_end = (char*)0xFFF00000; +} + int main(int argc, void **argv) { stage2_args_t args = {0}; loader_ctx_t *loader_ctx = get_loader_ctx(); - + if (argc != STAGE2_ARGC || ((args = *((stage2_args_t *)argv[STAGE2_ARGV_ARGUMENT_STRUCT])).version != 0)) { generic_panic(); } - + resume_sd_state((struct mmc *)args.sd_mmc, (FATFS *)args.sd_fs); - + /* Copy the BCT0 from unsafe primary memory into our memory. */ strncpy(g_bct0, args.bct0, sizeof(g_bct0)); - + /* TODO: What other hardware init should we do here? */ - + /* Setup LFB. */ video_resume(args.lfb, args.console_row, args.console_col); - + printk("Welcome to Atmosph\xe8re Fus\xe9" "e Stage 2!\n"); printk("Stage 2 executing from: %s\n", (const char *)argv[STAGE2_ARGV_PROGRAM_PATH]); - + /* This will load all remaining binaries off of the SD. */ load_payload(g_bct0); - + printk("Loaded payloads!\n"); - + if (loader_ctx->chainload_entrypoint != NULL) { /* TODO: What do we want to do in terms of argc/argv? */ loader_ctx->chainload_entrypoint(0, NULL); diff --git a/fusee/fusee-secondary/src/start.s b/fusee/fusee-secondary/src/start.s index 3686a2a27..5a060b0be 100644 --- a/fusee/fusee-secondary/src/start.s +++ b/fusee/fusee-secondary/src/start.s @@ -33,7 +33,7 @@ _start: _relocation_loop_end: /* Set the stack pointer */ - ldr sp, =0x40008000 + ldr sp, =0x40010000 mov fp, #0 stmfd sp!, {r0, r1} @@ -44,6 +44,9 @@ _start: sub r2, r2, r0 bl memset + /* Initialize the heap */ + bl __init_heap + /* Call global constructors */ bl __libc_init_array