runtime: refactor GC mark phase into gcMarkReachable

This is a small refactor to prepare GC marking for multithreaded
stop-the-world.
This commit is contained in:
Ayke van Laethem
2024-11-02 10:47:28 +01:00
parent 2599db2990
commit 8659b18d6f
3 changed files with 11 additions and 2 deletions
+1 -2
View File
@@ -456,8 +456,7 @@ func runGC() (freeBytes uintptr) {
}
// Mark phase: mark all reachable objects, recursively.
markStack()
findGlobals(markRoots)
gcMarkReachable()
if baremetal && hasScheduler {
// Channel operations in interrupts may move task pointers around while we are marking.
+5
View File
@@ -8,6 +8,11 @@ import (
"unsafe"
)
func gcMarkReachable() {
markStack()
findGlobals(markRoots)
}
//go:extern runtime.stackChainStart
var stackChainStart *stackChainObject
+5
View File
@@ -4,6 +4,11 @@ package runtime
import "internal/task"
func gcMarkReachable() {
markStack()
findGlobals(markRoots)
}
// markStack marks all root pointers found on the stack.
//
// This implementation is conservative and relies on the stack top (provided by