]> Cypherpunks repositories - gostls13.git/commitdiff
undo CL 64100044 / 04d062c2e81c
authorRuss Cox <rsc@golang.org>
Tue, 18 Feb 2014 02:34:58 +0000 (21:34 -0500)
committerRuss Cox <rsc@golang.org>
Tue, 18 Feb 2014 02:34:58 +0000 (21:34 -0500)
broke 32-bit builds

««« original CL description
cmd/gc, runtime: enable precisestack by default

Precisestack makes stack collection completely precise,
in the sense that there are no "used and not set" errors
in the collection of stack frames, no times where the collector
reads a pointer from a stack word that has not actually been
initialized with a pointer (possibly a nil pointer) in that function.

The most important part is interfaces: precisestack means
that if reading an interface value, the interface value is guaranteed
to be initialized, meaning that the type word can be relied
upon to be either nil or a valid interface type word describing
the data word.

This requires additional zeroing of certain values on the stack
on entry, which right now costs about 5% overall execution
time in all.bash. That cost will come down before Go 1.3
(issue 7345).

There are at least two known garbage collector bugs right now,
issues 7343 and 7344. The first happens even without precisestack.
The second I have only seen with precisestack, but that does not
mean that precisestack is what causes it. In fact it is very difficult
to explain by what precisestack does directly. Precisestack may
be exacerbating an existing problem. Both of those issues are
marked for Go 1.3 as well.

The reasons for enabling precisestack now are to give it more
time to soak and because the copying stack work depends on it.

LGTM=r
R=r
CC=golang-codereviews, iant, khr
https://golang.org/cl/64100044
»»»

TBR=r
CC=golang-codereviews
https://golang.org/cl/65230043

src/cmd/gc/lex.c
src/pkg/runtime/proc.c

index 2a817f3d9a5227fe9ff24b01d067bf738580518f..ad2499701f96aeaeacc3065251b019e35e0a2345 100644 (file)
@@ -60,7 +60,7 @@ static void
 addexp(char *s)
 {
        int i;
-
+       
        for(i=0; exper[i].name != nil; i++) {
                if(strcmp(exper[i].name, s) == 0) {
                        *exper[i].val = 1;
@@ -77,9 +77,7 @@ setexp(void)
 {
        char *f[20];
        int i, nf;
-
-       precisestack_enabled = 1; // on by default
-
+       
        // The makefile #defines GOEXPERIMENT for us.
        nf = getfields(GOEXPERIMENT, f, nelem(f), 1, ",");
        for(i=0; i<nf; i++)
index ba31c503ee33814bea93ea9b7b2026f9dbe6caf2..b782d0fe1a0a30216cf70e9128760d4a722306a4 100644 (file)
@@ -144,7 +144,7 @@ runtime·schedinit(void)
        Eface i;
 
        runtime·sched.maxmcount = 10000;
-       runtime·precisestack = true; // haveexperiment("precisestack");
+       runtime·precisestack = haveexperiment("precisestack");
 
        runtime·mallocinit();
        mcommoninit(m);