runtime: add "none" garbage collector

This collector does not implement runtime.alloc, so it is a
quick-and-dirty way to check where in a program memory is allocated.
This commit is contained in:
Ayke van Laethem
2018-11-17 15:02:18 +01:00
parent c220c140ef
commit ef93001ab8
2 changed files with 30 additions and 1 deletions
+1 -1
View File
@@ -435,7 +435,7 @@ func handleCompilerError(err error) {
func main() {
outpath := flag.String("o", "", "output filename")
opt := flag.String("opt", "z", "optimization level: 0, 1, 2, s, z")
gc := flag.String("gc", "dumb", "garbage collector to use (dumb)")
gc := flag.String("gc", "dumb", "garbage collector to use (none, dumb)")
printIR := flag.Bool("printir", false, "print LLVM IR")
dumpSSA := flag.Bool("dumpssa", false, "dump internal Go SSA")
target := flag.String("target", "", "LLVM target")
+29
View File
@@ -0,0 +1,29 @@
// +build gc.none
package runtime
// This GC strategy provides no memory allocation at all. It can be useful to
// detect where in a program memory is allocated, or to combine this runtime
// with a separate (external) garbage collector.
import (
"unsafe"
)
func alloc(size uintptr) unsafe.Pointer
func free(ptr unsafe.Pointer) {
// Nothing to free when nothing gets allocated.
}
func GC() {
// Unimplemented.
}
func KeepAlive(x interface{}) {
// Unimplemented. Only required with SetFinalizer().
}
func SetFinalizer(obj interface{}, finalizer interface{}) {
// Unimplemented.
}