From dba9eb336930ccddafb4bec2ca67d6ea125b1f02 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Fri, 16 Jan 2015 19:22:58 -0500 Subject: build: implement GOEXPERIMENT again in runtime, and add to liblink For Austin's framepointer experiment. Change-Id: I81b6f414943b3578924f853300b9193684f79bf4 Reviewed-on: https://go-review.googlesource.com/2994 Reviewed-by: Austin Clements --- src/liblink/go.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/liblink/sym.c | 1 + 2 files changed, 61 insertions(+) (limited to 'src/liblink') diff --git a/src/liblink/go.c b/src/liblink/go.c index 9f5a423d38..e31c71ab92 100644 --- a/src/liblink/go.c +++ b/src/liblink/go.c @@ -9,6 +9,66 @@ #include #include +int framepointer_enabled; +int fieldtrack_enabled; + +// Toolchain experiments. +// These are controlled by the GOEXPERIMENT environment +// variable recorded when the toolchain is built. +// This list is also known to cmd/gc. +static struct { + char *name; + int *val; +} exper[] = { + {"fieldtrack", &fieldtrack_enabled}, + {"basepointer", &framepointer_enabled}, +}; + +static void +addexp(char *s) +{ + int i; + + for(i=0; i < nelem(exper); i++ ) { + if(strcmp(exper[i].name, s) == 0) { + if(exper[i].val != nil) + *exper[i].val = 1; + return; + } + } + + print("unknown experiment %s\n", s); + exits("unknown experiment"); +} + +void +linksetexp(void) +{ + char *f[20]; + int i, nf; + + // cmd/dist #defines GOEXPERIMENT for us. + nf = getfields(GOEXPERIMENT, f, nelem(f), 1, ","); + for(i=0; i