From: Dmitriy Vyukov Date: Wed, 3 Apr 2013 22:11:34 +0000 (+1100) Subject: runtime: fix data/bss shadow memory mapping for race detector X-Git-Tag: go1.1rc2~192 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=12b7db3d578f9764416ae987a4fa2e90125f379c;p=gostls13.git runtime: fix data/bss shadow memory mapping for race detector 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 --- diff --git a/src/pkg/runtime/race.c b/src/pkg/runtime/race.c index cfd97041a8..ce250b5b63 100644 --- a/src/pkg/runtime/race.c +++ b/src/pkg/runtime/race.c @@ -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; }