diff options
author | Russ Cox <rsc@golang.org> | 2014-10-07 11:06:51 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2014-10-07 11:06:51 -0400 |
commit | 44ae5998770a185d1f8518b6917e1c094bc62a19 (patch) | |
tree | 272222847117acc2ce64d1a80d36777e72fb975b /src/cmd/ld | |
parent | 049be2f16a585e45be4d8fe17660a537934488ee (diff) | |
download | go-44ae5998770a185d1f8518b6917e1c094bc62a19.tar.gz |
runtime: remove type-punning for Type.gc[0], gc[1]
Depending on flags&KindGCProg,
gc[0] and gc[1] are either pointers or inlined bitmap bits.
That's not compatible with a precise garbage collector:
it needs to be always pointers or never pointers.
Change the inlined bitmap case to store a pointer to an
out-of-line bitmap in gc[0]. The out-of-line bitmaps are
dedup'ed, so that for example all pointer types share the
same out-of-line bitmap.
Fixes issue 8864.
LGTM=r
R=golang-codereviews, dvyukov, r
CC=golang-codereviews, iant, khr, rlh
https://codereview.appspot.com/155820043
Diffstat (limited to 'src/cmd/ld')
-rw-r--r-- | src/cmd/ld/decodesym.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/cmd/ld/decodesym.c b/src/cmd/ld/decodesym.c index c53066942..037263dce 100644 --- a/src/cmd/ld/decodesym.c +++ b/src/cmd/ld/decodesym.c @@ -111,7 +111,10 @@ decodetype_gcprog(LSym *s) uint8* decodetype_gcmask(LSym *s) { - return (uint8*)(s->p + 1*PtrSize + 8 + 1*PtrSize); + LSym *mask; + + mask = decode_reloc_sym(s, 1*PtrSize + 8 + 1*PtrSize); + return mask->p; } // Type.ArrayType.elem and Type.SliceType.Elem |