Browse Source

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).
pull/774/head
Ayke van Laethem 5 years ago
committed by Ron Evans
parent
commit
f14127be76
  1. 10
      targets/gameboy-advance.ld
  2. 4
      targets/gameboy-advance.s

10
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. */

4
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

Loading…
Cancel
Save