Commit 03ac8302 by Ian Lance Taylor

runtime: enable precise GC checks when using stack maps

    
    In the runtime there are bad pointer checks that currently don't
    work with the concervative collector. With stack maps, the GC is
    precise and the checks should work. Enable them.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/153871

From-SVN: r269406
parent 934e9926
14e48e756af205a68374c872f3bd03d62ccd70bb
3f8ddaa1d773309b6a4b8e4640f8b9675d9764c6
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
......@@ -1106,9 +1106,9 @@ func scanstackblockwithmap(pc, b0, n0 uintptr, ptrmask *uint8, gcw *gcWork) {
// Preemption must be disabled.
//go:nowritebarrier
func shade(b uintptr) {
if obj, span, objIndex := findObject(b, 0, 0, true); obj != 0 {
if obj, span, objIndex := findObject(b, 0, 0, !usestackmaps); obj != 0 {
gcw := &getg().m.p.ptr().gcw
greyobject(obj, 0, 0, span, gcw, objIndex, true)
greyobject(obj, 0, 0, span, gcw, objIndex, !usestackmaps)
}
}
......
......@@ -342,8 +342,10 @@ func (s *mspan) sweep(preserve bool) bool {
// it is not otherwise a problem. So we disable the test for gccgo.
nfreedSigned := int(nfreed)
if nalloc > s.allocCount {
// print("runtime: nelems=", s.nelems, " nalloc=", nalloc, " previous allocCount=", s.allocCount, " nfreed=", nfreed, "\n")
// throw("sweep increased allocation count")
if usestackmaps {
print("runtime: nelems=", s.nelems, " nalloc=", nalloc, " previous allocCount=", s.allocCount, " nfreed=", nfreed, "\n")
throw("sweep increased allocation count")
}
// For gccgo, adjust the freed count as a signed number.
nfreedSigned = int(s.allocCount) - int(nalloc)
......
......@@ -362,7 +362,9 @@ func parsedebugvars() {
// At that point, if debug.invalidptr is set, we crash.
// This is not a problem, assuming that M1 really is dead and
// the pointer we discovered to it will not be used.
// debug.invalidptr = 1
if usestackmaps {
debug.invalidptr = 1
}
for p := gogetenv("GODEBUG"); p != ""; {
field := ""
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment