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
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;
}