mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-17 19:23:25 +00:00
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).
This commit is contained in:
committed by
Ron Evans
parent
a9b2d8c294
commit
f14127be76
@@ -7,10 +7,8 @@ MEMORY {
|
|||||||
rom : ORIGIN = 0x08000000, LENGTH = 32M /* flash ROM */
|
rom : ORIGIN = 0x08000000, LENGTH = 32M /* flash ROM */
|
||||||
}
|
}
|
||||||
|
|
||||||
__iwram_top = ORIGIN(iwram) + LENGTH(iwram);;
|
__stack_size_irq = 1K;
|
||||||
_stack_size = 3K;
|
__stack_size_usr = 2K;
|
||||||
__sp_irq = _stack_top;
|
|
||||||
__sp_usr = _stack_top - 1K;
|
|
||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
@@ -35,8 +33,10 @@ SECTIONS
|
|||||||
.stack (NOLOAD) :
|
.stack (NOLOAD) :
|
||||||
{
|
{
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
. += _stack_size;
|
_stack_top_irq = .;
|
||||||
|
. += __stack_size_irq;
|
||||||
_stack_top = .;
|
_stack_top = .;
|
||||||
|
. += __stack_size_usr;
|
||||||
} >iwram
|
} >iwram
|
||||||
|
|
||||||
/* Start address (in flash) of .data, used by startup code. */
|
/* Start address (in flash) of .data, used by startup code. */
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ start_vector:
|
|||||||
|
|
||||||
mov r0, #0x12 // Switch to IRQ Mode
|
mov r0, #0x12 // Switch to IRQ Mode
|
||||||
msr cpsr, r0
|
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
|
mov r0, #0x1f // Switch to System Mode
|
||||||
msr cpsr, r0
|
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)
|
// Jump to user code (switching to Thumb mode)
|
||||||
ldr r3, =main
|
ldr r3, =main
|
||||||
|
|||||||
Reference in New Issue
Block a user