runtime: implement a simple mark/sweep garbage collector

This commit is contained in:
Ayke van Laethem
2018-11-18 19:18:39 +01:00
parent dbf581b56d
commit 8402e84b6d
7 changed files with 477 additions and 3 deletions
+20 -2
View File
@@ -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")
}