mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-11 22:43:40 +00:00
runtime: implement a simple mark/sweep garbage collector
This commit is contained in:
@@ -4,6 +4,8 @@ package runtime
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
|
||||
"device/arm"
|
||||
)
|
||||
|
||||
const GOARCH = "arm"
|
||||
@@ -17,12 +19,28 @@ var heapStartSymbol unsafe.Pointer
|
||||
//go:extern _heap_end
|
||||
var heapEndSymbol unsafe.Pointer
|
||||
|
||||
//go:extern _globals_start
|
||||
var globalsStartSymbol unsafe.Pointer
|
||||
|
||||
//go:extern _globals_end
|
||||
var globalsEndSymbol unsafe.Pointer
|
||||
|
||||
//go:extern _stack_top
|
||||
var stackTopSymbol unsafe.Pointer
|
||||
|
||||
var (
|
||||
heapStart = uintptr(unsafe.Pointer(&heapStartSymbol))
|
||||
heapEnd = uintptr(unsafe.Pointer(&heapEndSymbol))
|
||||
heapStart = uintptr(unsafe.Pointer(&heapStartSymbol))
|
||||
heapEnd = uintptr(unsafe.Pointer(&heapEndSymbol))
|
||||
globalsStart = uintptr(unsafe.Pointer(&globalsStartSymbol))
|
||||
globalsEnd = uintptr(unsafe.Pointer(&globalsEndSymbol))
|
||||
stackTop = uintptr(unsafe.Pointer(&stackTopSymbol))
|
||||
)
|
||||
|
||||
// Align on word boundary.
|
||||
func align(ptr uintptr) uintptr {
|
||||
return (ptr + 3) &^ 3
|
||||
}
|
||||
|
||||
func getCurrentStackPointer() uintptr {
|
||||
return arm.ReadRegister("sp")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user