Skip to content

Commit ea3b5dc

Browse files
aykevldeadprogram
authored andcommitted
nintendoswitch: scan globals conservatively
This is a step towards #2870, similar to #2867 and #2869.
1 parent 3dd502a commit ea3b5dc

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

src/runtime/gc_globals_precise.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
//go:build gc.conservative && !baremetal && !darwin && !tinygo.wasm && !windows
2-
// +build gc.conservative,!baremetal,!darwin,!tinygo.wasm,!windows
1+
//go:build gc.conservative && !baremetal && !darwin && !nintendoswitch && !tinygo.wasm && !windows
2+
// +build gc.conservative,!baremetal,!darwin,!nintendoswitch,!tinygo.wasm,!windows
33

44
package runtime
55

src/runtime/runtime_nintendoswitch.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,31 @@ func getHeapEnd() uintptr {
233233
return heapEnd
234234
}
235235

236+
//go:extern __data_start
237+
var dataStartSymbol [0]byte
238+
239+
//go:extern __data_end
240+
var dataEndSymbol [0]byte
241+
242+
//go:extern __bss_start
243+
var bssStartSymbol [0]byte
244+
245+
//go:extern __bss_end
246+
var bssEndSymbol [0]byte
247+
248+
// Mark global variables.
249+
// The linker script provides __*_start and __*_end symbols that can be used to
250+
// scan the given sections. They are already aligned so don't need to be
251+
// manually aligned here.
252+
func markGlobals() {
253+
dataStart := uintptr(unsafe.Pointer(&dataStartSymbol))
254+
dataEnd := uintptr(unsafe.Pointer(&dataEndSymbol))
255+
markRoots(dataStart, dataEnd)
256+
bssStart := uintptr(unsafe.Pointer(&bssStartSymbol))
257+
bssEnd := uintptr(unsafe.Pointer(&bssEndSymbol))
258+
markRoots(bssStart, bssEnd)
259+
}
260+
236261
// getContextPtr returns the hblauncher context
237262
// this is externally linked by gonx
238263
func getContextPtr() uintptr {

0 commit comments

Comments
 (0)