PR go/60931
commitd371d0bbc4de7af71dd4b4912233aaf9b332dfee
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Apr 2014 04:29:07 +0000 (25 04:29 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Apr 2014 04:29:07 +0000 (25 04:29 +0000)
tree18c5834b67f481d5fc0ec27e474a13cf00b8dff6
parentdb103ea49b53bd043df835d280c023100ade68e3
PR go/60931

runtime: Fix garbage collector issue with non 4kB system page size

The go garbage collector tracks memory in terms of 4kB pages.
Most of the code checks getpagesize() at runtime and does the
right thing.

On a 64kB ppc64 box I see SEGVs in long running processes
which has been diagnosed as a bug in scavengelist.
scavengelist does a madvise(MADV_DONTNEED) without rounding
the arguments to the system page size.  A strace of one of the
failures shows the problem:

madvise(0xc211030000, 4096, MADV_DONTNEED) = 0

The kernel rounds the length up to 64kB and we mark 60kB of
valid data as no longer needed.

Round start up to a system page and end down before calling
madvise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@209777 138bc75d-0d04-0410-961f-82ee72b054a4
libgo/runtime/mheap.c