diff options
| author | Matthew Dempsky <mdempsky@google.com> | 2022-03-28 09:30:41 -0700 |
|---|---|---|
| committer | Matthew Dempsky <mdempsky@google.com> | 2022-05-11 03:28:01 +0000 |
| commit | ccb798741b9bd9d5eda56648a8b3383e6e55cfcd (patch) | |
| tree | 8b58c1891ef17f5be3efd9b2f193488b4afa21d4 /src/runtime/mpagealloc.go | |
| parent | f12461cb0f3878b6d332f4be3a02fa44cc744df6 (diff) | |
| download | go-ccb798741b9bd9d5eda56648a8b3383e6e55cfcd.tar.xz | |
runtime: change maxSearchAddr into a helper function
This avoids a dependency on the compiler statically initializing
maxSearchAddr, which is necessary so we can disable the (overly
aggressive and spec non-conforming) optimizations in cmd/compile and
gccgo.
Updates #51913.
Change-Id: I424e62c81c722bb179ed8d2d8e188274a1aeb7b6
Reviewed-on: https://go-review.googlesource.com/c/go/+/396194
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Austin Clements <austin@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/runtime/mpagealloc.go')
| -rw-r--r-- | src/runtime/mpagealloc.go | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/runtime/mpagealloc.go b/src/runtime/mpagealloc.go index c85da15ff2..5de25cfe00 100644 --- a/src/runtime/mpagealloc.go +++ b/src/runtime/mpagealloc.go @@ -83,11 +83,16 @@ const ( pallocChunksL1Shift = pallocChunksL2Bits ) -// Maximum searchAddr value, which indicates that the heap has no free space. +// maxSearchAddr returns the maximum searchAddr value, which indicates +// that the heap has no free space. // -// We alias maxOffAddr just to make it clear that this is the maximum address +// This function exists just to make it clear that this is the maximum address // for the page allocator's search space. See maxOffAddr for details. -var maxSearchAddr = maxOffAddr +// +// It's a function (rather than a variable) because it needs to be +// usable before package runtime's dynamic initialization is complete. +// See #51913 for details. +func maxSearchAddr() offAddr { return maxOffAddr } // Global chunk index. // @@ -319,7 +324,7 @@ func (p *pageAlloc) init(mheapLock *mutex, sysStat *sysMemStat) { p.sysInit() // Start with the searchAddr in a state indicating there's no free memory. - p.searchAddr = maxSearchAddr + p.searchAddr = maxSearchAddr() // Set the mheapLock. p.mheapLock = mheapLock @@ -745,7 +750,7 @@ nextLevel: } if l == 0 { // We're at level zero, so that means we've exhausted our search. - return 0, maxSearchAddr + return 0, maxSearchAddr() } // We're not at level zero, and we exhausted the level we were looking in. @@ -839,7 +844,7 @@ func (p *pageAlloc) alloc(npages uintptr) (addr uintptr, scav uintptr) { // exhausted. Otherwise, the heap still might have free // space in it, just not enough contiguous space to // accommodate npages. - p.searchAddr = maxSearchAddr + p.searchAddr = maxSearchAddr() } return 0, 0 } |
