]> Cypherpunks repositories - gostls13.git/commit
runtime: redo stack map entries to avoid false retention
authorKeith Randall <khr@golang.org>
Tue, 25 Mar 2014 21:11:34 +0000 (14:11 -0700)
committerKeith Randall <khr@golang.org>
Tue, 25 Mar 2014 21:11:34 +0000 (14:11 -0700)
commit1b45cc45e37cfe67733ebff5eb5cabfef207eef6
tree011b8304ffbf3cf262473cacd32797f99bb4f107
parent4ebfa8319914e1ed9727592d1fa360ce339b7597
runtime: redo stack map entries to avoid false retention

Change two-bit stack map entries to encode:
0 = dead
1 = scalar
2 = pointer
3 = multiword

If multiword, the two-bit entry for the following word encodes:
0 = string
1 = slice
2 = iface
3 = eface

That way, during stack scanning we can check if a string
is zero length or a slice has zero capacity.  We can avoid
following the contained pointer in those cases.  It is safe
to do so because it can never be dereferenced, and it is
desirable to do so because it may cause false retention
of the following block in memory.

Slice feature turned off until issue 7564 is fixed.

Update #7549

LGTM=rsc
R=golang-codereviews, bradfitz, rsc
CC=golang-codereviews
https://golang.org/cl/76380043
src/cmd/cc/pgen.c
src/cmd/gc/plive.c
src/pkg/runtime/extern.go
src/pkg/runtime/malloc.h
src/pkg/runtime/mfinal_test.go
src/pkg/runtime/mgc0.c
src/pkg/runtime/runtime.c
src/pkg/runtime/runtime.h
src/pkg/runtime/stack.c