From ef93001ab82bfad9165dc7fd359ae2f40b153fa6 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sat, 17 Nov 2018 15:02:18 +0100 Subject: [PATCH] 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. --- main.go | 2 +- src/runtime/gc_none.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 src/runtime/gc_none.go diff --git a/main.go b/main.go index 3858b213..28455319 100644 --- a/main.go +++ b/main.go @@ -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") diff --git a/src/runtime/gc_none.go b/src/runtime/gc_none.go new file mode 100644 index 00000000..b7fc628d --- /dev/null +++ b/src/runtime/gc_none.go @@ -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. +}