
Instead of markGlobals calling markRoots unconditionally (which doesn't make sense for -gc=none and -gc=leaking), provide markRoots as a callback function. This is in preparation for -gc=boehm, where the previous design is even more awkward and a callback makes far more sense. I've tested the size impact using `make smoketest XTENSA=0`. There is none, except for two cases: * One with `-opt=0` so const-propagation for the callback didn't take place. * One other on AVR, I don't know why but as it's only 16 bytes in a very specific case I'm going to assume it's just a random change in compiler output that caused a size difference.
15 строки
582 Б
Go
15 строки
582 Б
Go
//go:build (gc.conservative || gc.precise) && (baremetal || tinygo.wasm)
|
|
|
|
package runtime
|
|
|
|
// This file implements findGlobals for all systems where the start and end of
|
|
// the globals section can be found through linker-defined symbols.
|
|
|
|
// findGlobals finds all globals (which are reachable by definition) and calls
|
|
// the callback for them.
|
|
//
|
|
// This implementation marks all globals conservatively and assumes it can use
|
|
// linker-defined symbols for the start and end of the .data section.
|
|
func findGlobals(found func(start, end uintptr)) {
|
|
found(globalsStart, globalsEnd)
|
|
}
|