summaryrefslogtreecommitdiff
path: root/src/runtime/cgocall.go
diff options
context:
space:
mode:
authorElias Naur <elias.naur@gmail.com>2016-03-09 10:00:12 +0100
committerElias Naur <elias.naur@gmail.com>2016-05-07 03:04:39 +0000
commite6ec82067a9068c93db6e7041017060a1c863452 (patch)
tree9b5cdea550f0724f66ab7546c6192e2d969d6177 /src/runtime/cgocall.go
parent83676d694b64205e80c042ca7cf61f7ad4de6c62 (diff)
downloadgo-git-e6ec82067a9068c93db6e7041017060a1c863452.tar.gz
runtime: use entire address space on 32 bit
In issue #13992, Russ mentioned that the heap bitmap footprint was halved but that the bitmap size calculation hadn't been updated. This presents the opportunity to either halve the bitmap size or double the addressable virtual space. This CL doubles the addressable virtual space. On 32 bit this can be tweaked further to allow the bitmap to cover the entire 4GB virtual address space, removing a failure mode if the kernel hands out memory with a too low address. First, fix the calculation and double _MaxArena32 to cover 4GB virtual memory space with the same bitmap size (256 MB). Then, allow the fallback mode for the initial memory reservation on 32 bit (or 64 bit with too little available virtual memory) to not include space for the arena. mheap.sysAlloc will automatically reserve additional space when the existing arena is full. Finally, set arena_start to 0 in 32 bit mode, so that any address is acceptable for subsequent (additional) reservations. Before, the bitmap was always located just before arena_start, so fix the two places relying on that assumption: Point the otherwise unused mheap.bitmap to one byte after the end of the bitmap, and use it for bitmap addressing instead of arena_start. With arena_start set to 0 on 32 bit, the cgoInRange check is no longer a sufficient check for Go pointers. Introduce and call inHeapOrStack to check whether a pointer is to the Go heap or stack. While we're here, remove sysReserveHigh which seems to be unused. Fixes #13992 Change-Id: I592b513148a50b9d3967b5c5d94b86b3ec39acc2 Reviewed-on: https://go-review.googlesource.com/20471 Reviewed-by: Austin Clements <austin@google.com> Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/runtime/cgocall.go')
-rw-r--r--src/runtime/cgocall.go2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/runtime/cgocall.go b/src/runtime/cgocall.go
index 8457fb2de7..1e0d4c7f19 100644
--- a/src/runtime/cgocall.go
+++ b/src/runtime/cgocall.go
@@ -601,7 +601,7 @@ func cgoIsGoPointer(p unsafe.Pointer) bool {
return false
}
- if cgoInRange(p, mheap_.arena_start, mheap_.arena_used) {
+ if inHeapOrStack(uintptr(p)) {
return true
}