aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2018-02-22 12:30:27 -0500
committerAustin Clements <austin@google.com>2018-02-23 21:59:47 +0000
commit9680980efe66fc91d838fa9a06077f6ee87f0759 (patch)
tree1831d06e62c06fc8aa44df5d58b62616430cc3cf /src
parentb86e76681366447798c94abb959bb60875bcc856 (diff)
downloadgo-9680980efe66fc91d838fa9a06077f6ee87f0759.tar.xz
runtime: don't assume arena is in address order
On amd64, the arena is no longer in address space order, but currently the heap dumper assumes that it is. Fix this assumption. Change-Id: Iab1953cd36b359d0fb78ed49e5eb813116a18855 Reviewed-on: https://go-review.googlesource.com/96776 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rick Hudson <rlh@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/runtime/heapdump.go9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/runtime/heapdump.go b/src/runtime/heapdump.go
index 362cb7c308..dbeaed9277 100644
--- a/src/runtime/heapdump.go
+++ b/src/runtime/heapdump.go
@@ -491,10 +491,13 @@ func dumpparams() {
var arenaStart, arenaEnd uintptr
for i, ha := range mheap_.arenas {
if ha != nil {
- if arenaStart == 0 {
- arenaStart = arenaBase(uint(i))
+ base := arenaBase(uint(i))
+ if arenaStart == 0 || base < arenaStart {
+ arenaStart = base
+ }
+ if base+heapArenaBytes > arenaEnd {
+ arenaEnd = base + heapArenaBytes
}
- arenaEnd = arenaBase(uint(i)) + heapArenaBytes
}
}
dumpint(uint64(arenaStart))