diff options
| author | Ben Cheng <bccheng@google.com> | 2014-05-17 17:03:43 -0700 |
|---|---|---|
| committer | Ben Cheng <bccheng@google.com> | 2014-05-17 17:12:35 -0700 |
| commit | 8c493ead6366b552adee796de296936b78f34c5a (patch) | |
| tree | 4936e52fb9b84edbcd9293bd321027413d1835bf /gcc-4.9/libgo/runtime | |
| parent | 9750bde7e561731ce8a07cdbd0165a688e74a696 (diff) | |
| download | toolchain_gcc-8c493ead6366b552adee796de296936b78f34c5a.tar.gz toolchain_gcc-8c493ead6366b552adee796de296936b78f34c5a.tar.bz2 toolchain_gcc-8c493ead6366b552adee796de296936b78f34c5a.zip | |
[4.9] Refresh GCC 4.9 to the 20140514 snapshot.
For critical bug fixes including devirtualization and codegen.
Change-Id: I8138d3dc408fc12db5eecb01d2753d39219712f2
Diffstat (limited to 'gcc-4.9/libgo/runtime')
| -rw-r--r-- | gcc-4.9/libgo/runtime/mheap.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/gcc-4.9/libgo/runtime/mheap.c b/gcc-4.9/libgo/runtime/mheap.c index fee493c13..1b8ab7916 100644 --- a/gcc-4.9/libgo/runtime/mheap.c +++ b/gcc-4.9/libgo/runtime/mheap.c @@ -387,7 +387,7 @@ forcegchelper(void *vnote) static uintptr scavengelist(MSpan *list, uint64 now, uint64 limit) { - uintptr released, sumreleased; + uintptr released, sumreleased, start, end, pagesize; MSpan *s; if(runtime_MSpanList_IsEmpty(list)) @@ -400,7 +400,17 @@ scavengelist(MSpan *list, uint64 now, uint64 limit) mstats.heap_released += released; sumreleased += released; s->npreleased = s->npages; - runtime_SysUnused((void*)(s->start << PageShift), s->npages << PageShift); + + start = s->start << PageShift; + end = start + (s->npages << PageShift); + + // Round start up and end down to ensure we + // are acting on entire pages. + pagesize = getpagesize(); + start = ROUND(start, pagesize); + end &= ~(pagesize - 1); + if(end > start) + runtime_SysUnused((void*)start, end - start); } } return sumreleased; |
