diff --git a/src/runtime/scheduler_gba.S b/src/runtime/scheduler_gba.S new file mode 100644 index 00000000..6eea9826 --- /dev/null +++ b/src/runtime/scheduler_gba.S @@ -0,0 +1,19 @@ +.section .text.tinygo_scanCurrentStack +.global tinygo_scanCurrentStack +.type tinygo_scanCurrentStack, %function +tinygo_scanCurrentStack: + // Save callee-saved registers onto the stack. + mov r0, r8 + mov r1, r9 + mov r2, r10 + mov r3, r11 + push {r0-r3, lr} + push {r4-r7} + + // Scan the stack. + mov r0, sp + bl tinygo_scanstack + + // Restore stack state and return. + add sp, #32 + pop {pc} diff --git a/targets/gameboy-advance.json b/targets/gameboy-advance.json index 8051acf3..711f9a83 100644 --- a/targets/gameboy-advance.json +++ b/targets/gameboy-advance.json @@ -25,7 +25,8 @@ ], "linkerscript": "targets/gameboy-advance.ld", "extra-files": [ - "targets/gameboy-advance.s" + "targets/gameboy-advance.s", + "src/runtime/scheduler_gba.S" ], "gdb": "gdb-multiarch", "emulator": ["mgba", "-3"]