diff options
| author | Austin Clements <austin@google.com> | 2018-02-22 12:30:27 -0500 |
|---|---|---|
| committer | Austin Clements <austin@google.com> | 2018-02-23 21:59:47 +0000 |
| commit | 9680980efe66fc91d838fa9a06077f6ee87f0759 (patch) | |
| tree | 1831d06e62c06fc8aa44df5d58b62616430cc3cf /src | |
| parent | b86e76681366447798c94abb959bb60875bcc856 (diff) | |
| download | go-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.go | 9 |
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)) |
