From f14127be7629eb131add86f97acadc1840ecc926 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Mon, 6 Jan 2020 11:48:09 +0100 Subject: [PATCH] targets/gba: make linker script cleaner Make it clearer where the stack is located. Additionally, get the heap to work (the GC needs to have _stack_top defined to work correctly). --- targets/gameboy-advance.ld | 10 +++++----- targets/gameboy-advance.s | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/targets/gameboy-advance.ld b/targets/gameboy-advance.ld index 5fd51696..0d7f8cd5 100644 --- a/targets/gameboy-advance.ld +++ b/targets/gameboy-advance.ld @@ -7,10 +7,8 @@ MEMORY { rom : ORIGIN = 0x08000000, LENGTH = 32M /* flash ROM */ } -__iwram_top = ORIGIN(iwram) + LENGTH(iwram);; -_stack_size = 3K; -__sp_irq = _stack_top; -__sp_usr = _stack_top - 1K; +__stack_size_irq = 1K; +__stack_size_usr = 2K; SECTIONS { @@ -35,8 +33,10 @@ SECTIONS .stack (NOLOAD) : { . = ALIGN(4); - . += _stack_size; + _stack_top_irq = .; + . += __stack_size_irq; _stack_top = .; + . += __stack_size_usr; } >iwram /* Start address (in flash) of .data, used by startup code. */ diff --git a/targets/gameboy-advance.s b/targets/gameboy-advance.s index d00ec879..f72b8a56 100644 --- a/targets/gameboy-advance.s +++ b/targets/gameboy-advance.s @@ -22,10 +22,10 @@ start_vector: mov r0, #0x12 // Switch to IRQ Mode msr cpsr, r0 - ldr sp, =__sp_irq // Set IRQ stack + ldr sp, =_stack_top_irq // Set IRQ stack mov r0, #0x1f // Switch to System Mode msr cpsr, r0 - ldr sp, =__sp_usr // Set user stack + ldr sp, =_stack_top // Set user stack // Jump to user code (switching to Thumb mode) ldr r3, =main