all: add support for multicore scheduler

This commit adds support for a scheduler that runs a scheduler on all
available cores. It is meant to be used on baremetal systems with a
fixed number of cores, such as the RP2040.

The initial implementation adds support for multicore scheduling to the
riscv-qemu target as a convenient testing target. This means that this
new multicore scheduler is tested in CI, including a bunch of standard
library tests (`make tinygo-test-baremetal`). This should ensure the new
scheduler is reasonably well tested before trying to use it on
harder-to-debug targets like the RP2040.
This commit is contained in:
Ayke van Laethem
2025-04-03 13:29:55 +02:00
committed by Ron Evans
parent 0c7c2926f9
commit 60f8a62978
35 changed files with 1237 additions and 160 deletions
+22 -1
View File
@@ -16,13 +16,34 @@ SECTIONS
/* Put the stack at the bottom of RAM, so that the application will
* crash on stack overflow instead of silently corrupting memory.
* See: http://blog.japaric.io/stack-overflow-protection/ */
.stack (NOLOAD) :
.stack0 (NOLOAD) :
{
. = ALIGN(16);
. += _stack_size;
_stack_top = .;
} >RAM
.stack1 (NOLOAD) :
{
. = ALIGN(16);
. += DEFINED(__num_stacks) && __num_stacks >= 2 ? _stack_size : 0;
_stack1_top = .;
} >RAM
.stack2 (NOLOAD) :
{
. = ALIGN(16);
. += DEFINED(__num_stacks) && __num_stacks >= 3 ? _stack_size : 0;
_stack2_top = .;
} >RAM
.stack3 (NOLOAD) :
{
. = ALIGN(16);
. += DEFINED(__num_stacks) && __num_stacks >= 4 ? _stack_size : 0;
_stack3_top = .;
} >RAM
/* Start address (in flash) of .data, used by startup code. */
_sidata = LOADADDR(.data);