aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/runtime/malloc.go
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2017-06-08 19:02:12 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2017-06-08 19:02:12 +0000
commit20e96b489ea501861c0bb6e509888275d682ed2f (patch)
treef064a2348260e9821e3f50ff2fc8a0247c19be56 /libgo/go/runtime/malloc.go
parent34361776fb238310222e0b24d4f0b51a3717a785 (diff)
downloadgcc-20e96b489ea501861c0bb6e509888275d682ed2f.zip
gcc-20e96b489ea501861c0bb6e509888275d682ed2f.tar.gz
gcc-20e96b489ea501861c0bb6e509888275d682ed2f.tar.bz2
libgo: update to 1.8.3 release
Reviewed-on: https://go-review.googlesource.com/45150 From-SVN: r249033
Diffstat (limited to 'libgo/go/runtime/malloc.go')
-rw-r--r--libgo/go/runtime/malloc.go14
1 files changed, 13 insertions, 1 deletions
diff --git a/libgo/go/runtime/malloc.go b/libgo/go/runtime/malloc.go
index ed25782..05a69c9 100644
--- a/libgo/go/runtime/malloc.go
+++ b/libgo/go/runtime/malloc.go
@@ -412,10 +412,12 @@ func (h *mheap) sysAlloc(n uintptr) unsafe.Pointer {
if p == 0 {
return nil
}
+ // p can be just about anywhere in the address
+ // space, including before arena_end.
if p == h.arena_end {
h.arena_end = new_end
h.arena_reserved = reserved
- } else if h.arena_start <= p && p+p_size-h.arena_start-1 <= _MaxArena32 {
+ } else if h.arena_end < p && p+p_size-h.arena_start-1 <= _MaxArena32 {
// Keep everything page-aligned.
// Our pages are bigger than hardware pages.
h.arena_end = p + p_size
@@ -425,6 +427,16 @@ func (h *mheap) sysAlloc(n uintptr) unsafe.Pointer {
h.arena_used = used
h.arena_reserved = reserved
} else {
+ // We got a mapping, but it's not
+ // linear with our current arena, so
+ // we can't use it.
+ //
+ // TODO: Make it possible to allocate
+ // from this. We can't decrease
+ // arena_used, but we could introduce
+ // a new variable for the current
+ // allocation position.
+
// We haven't added this allocation to
// the stats, so subtract it from a
// fake stat (but avoid underflow).