5b15510d96
Currently, GODEBUG=sbrk=1 mode aligns allocations by their type's alignment. You would think this would be the right thing to do, but because 64-bit fields are only 4-byte aligned right now (see #599), this can cause a 64-bit field of an allocated object to be 4-byte aligned, but not 8-byte aligned. If there is an atomic access to that unaligned 64-bit field, it will crash. This doesn't happen in normal allocation mode because the size-segregated allocation and the current size classes will cause any types larger than 8 bytes to be 8 byte aligned. We fix this by making sbrk=1 mode use alignment based on the type's size rather than its declared alignment. This matches how the tiny allocator aligns allocations. This was tested with GOARCH=386 GODEBUG=sbrk=1 go test sync/atomic This crashes with an unaligned access before this change, and passes with this change. This should be reverted when/if we fix #599. Fixes #33159. Change-Id: Ifc52c72c6b99c5d370476685271baa43ad907565 Reviewed-on: https://go-review.googlesource.com/c/go/+/186919 Run-TryBot: Austin Clements <austin@google.com> Reviewed-by: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> |
||
---|---|---|
.github | ||
api | ||
doc | ||
lib/time | ||
misc | ||
src | ||
test | ||
.gitattributes | ||
.gitignore | ||
AUTHORS | ||
CONTRIBUTING.md | ||
CONTRIBUTORS | ||
favicon.ico | ||
LICENSE | ||
PATENTS | ||
README.md | ||
robots.txt | ||
SECURITY.md |
The Go Programming Language
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
Gopher image by Renee French, licensed under Creative Commons 3.0 Attributions license.
Our canonical Git repository is located at https://go.googlesource.com/go. There is a mirror of the repository at https://github.com/golang/go.
Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file.
Download and Install
Binary Distributions
Official binary distributions are available at https://golang.org/dl/.
After downloading a binary release, visit https://golang.org/doc/install or load doc/install.html in your web browser for installation instructions.
Install From Source
If a binary distribution is not available for your combination of operating system and architecture, visit https://golang.org/doc/install/source or load doc/install-source.html in your web browser for source installation instructions.
Contributing
Go is the work of thousands of contributors. We appreciate your help!
To contribute, please read the contribution guidelines: https://golang.org/doc/contribute.html
Note that the Go project uses the issue tracker for bug reports and proposals only. See https://golang.org/wiki/Questions for a list of places to ask questions about the Go language.