diff options
author | Ian Lance Taylor <iant@golang.org> | 2022-03-25 17:23:50 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2022-04-15 14:27:05 -0700 |
commit | d00dd52ea15f9026c327d2f591eb456d6f11df2c (patch) | |
tree | 278f15dc95ab9f1cebaa975bece1cbd395f127de /libgo | |
parent | 7e76cef873342a66408c126abceaf7dbddd3f477 (diff) | |
download | gcc-d00dd52ea15f9026c327d2f591eb456d6f11df2c.zip gcc-d00dd52ea15f9026c327d2f591eb456d6f11df2c.tar.gz gcc-d00dd52ea15f9026c327d2f591eb456d6f11df2c.tar.bz2 |
compiler: revert `for package-scope "a = b; b = x" just set "a = x"`
Revert CL 245098. It caused incorrect initialization ordering.
Adjust the runtime package to work even with the CL reverted.
Original description of CL 245098:
This avoids requiring an init function to initialize the variable.
This can only be done if x is a static initializer.
The go1.15rc1 runtime package relies on this optimization.
The package has a variable "var maxSearchAddr = maxOffAddr".
The maxSearchAddr variable is used by code that runs before package
initialization is complete.
For golang/go#51913
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/395994
Diffstat (limited to 'libgo')
-rw-r--r-- | libgo/go/runtime/mpagealloc.go | 12 | ||||
-rw-r--r-- | libgo/go/runtime/mpagecache.go | 2 |
2 files changed, 8 insertions, 6 deletions
diff --git a/libgo/go/runtime/mpagealloc.go b/libgo/go/runtime/mpagealloc.go index 2725e3b..5e40da45 100644 --- a/libgo/go/runtime/mpagealloc.go +++ b/libgo/go/runtime/mpagealloc.go @@ -87,7 +87,9 @@ const ( // // We alias maxOffAddr 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 +func maxSearchAddr() offAddr { + return maxOffAddr +} // Global chunk index. // @@ -331,13 +333,13 @@ 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 // Initialize scavenge tracking state. - p.scav.scavLWM = maxSearchAddr + p.scav.scavLWM = maxSearchAddr() } // tryChunkOf returns the bitmap data for the given chunk. @@ -760,7 +762,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. @@ -854,7 +856,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 } diff --git a/libgo/go/runtime/mpagecache.go b/libgo/go/runtime/mpagecache.go index 7206e2d..5bad4f7 100644 --- a/libgo/go/runtime/mpagecache.go +++ b/libgo/go/runtime/mpagecache.go @@ -143,7 +143,7 @@ func (p *pageAlloc) allocToCache() pageCache { if addr == 0 { // We failed to find adequate free space, so mark the searchAddr as OoM // and return an empty pageCache. - p.searchAddr = maxSearchAddr + p.searchAddr = maxSearchAddr() return pageCache{} } ci := chunkIndex(addr) |