The funcdata symbol incorrectly named the dead value map the
dead pointer map. The dead value map identifies all dead
values, including pointers and non-pointers, in a stack frame.
The purpose of this map is to allow the runtime to poison
locations of dead data to catch lost invariants.
R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/
38670043
// compile time. At present, the amount of additional RSS is
// substantial enough to affect our smallest build machines.
if(0)
- gcdead = makefuncdatasym("gcdead·%d", FUNCDATA_DeadPointerMaps);
+ gcdead = makefuncdatasym("gcdead·%d", FUNCDATA_DeadValueMaps);
else
gcdead = nil;
if(0) livenessprintcfg(lv);
livenessepilogue(lv);
- // Emit the map data structures
+ // Emit the live pointer map data structures
twobitwritesymbol(lv->livepointers, livesym, nil);
twobitwritesymbol(lv->argslivepointers, argssym, nil);
+
+ // Optionally emit a dead value map data structure for locals.
if(deadsym != nil)
twobitwritesymbol(lv->deadvalues, deadsym, nil);
#define FUNCDATA_ArgsPointerMaps 2 /* garbage collector blocks */
#define FUNCDATA_LocalsPointerMaps 3
-#define FUNCDATA_DeadPointerMaps 4
+#define FUNCDATA_DeadValueMaps 4
// To be used in assembly.
#define ARGSIZE(n) PCDATA $PCDATA_ArgSize, $n