]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix data/bss shadow memory mapping for race detector
authorDmitriy Vyukov <dvyukov@google.com>
Wed, 3 Apr 2013 22:11:34 +0000 (09:11 +1100)
committerAndrew Gerrand <adg@golang.org>
Wed, 3 Apr 2013 22:11:34 +0000 (09:11 +1100)
Fixes #5175.
Race detector runtime expects values passed to MapShadow() to be page-aligned,
because they are used in mmap() call. If they are not aligned mmap() trims
either beginning or end of the mapping.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/8325043

src/pkg/runtime/race.c

index cfd97041a8002f8bd50fd60f3647df605c614421..ce250b5b634338caaf7326490f0153414cf172cf 100644 (file)
@@ -36,11 +36,14 @@ static bool onstack(uintptr argp);
 uintptr
 runtime·raceinit(void)
 {
-       uintptr racectx;
+       uintptr racectx, start, size;
 
        m->racecall = true;
        runtime∕race·Initialize(&racectx);
-       runtime∕race·MapShadow(noptrdata, enoptrbss - noptrdata);
+       // Round data segment to page boundaries, because it's used in mmap().
+       start = (uintptr)noptrdata & ~(PageSize-1);
+       size = ROUND((uintptr)enoptrbss - start, PageSize);
+       runtime∕race·MapShadow((void*)start, size);
        m->racecall = false;
        return racectx;
 }