For #65614. Updates #67401. Change-Id: Ib38c134ea7ffc69434c79600ba75185e02809d0f Reviewed-on: https://go-review.googlesource.com/c/go/+/591898 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Than McIntosh <thanm@google.com>
1.8 KiB
Compiler
The build time overhead to building with Profile Guided Optimization has been reduced significantly. Previously, large builds could see 100%+ build time increase from enabling PGO. In Go 1.23, overhead should be in the single digit percentages.
The compiler in Go 1.23 can now overlap the stack frame slots of local variables accessed in disjoint regions of a function, which reduces stack usage for Go applications.
For 386 and amd64, the compiler will use information from PGO to align certain
hot blocks in loops. This improves performance an additional 1-1.5% at
a cost of an additional 0.1% text and binary size. This is currently only implemented
on 386 and amd64 because it has not shown an improvement on other platforms.
Hot block alignment can be disabled with -gcflags=[<packages>=]-d=alignhot=0
Assembler
Linker
The linker now disallows using a //go:linkname
directive to refer to
internal symbols in the standard library (including the runtime) that
are not marked with //go:linkname
on their definitions.
Similarly, the linker disallows references to such symbols from assembly
code.
For backward compatibility, existing usages of //go:linkname
found in
a large open-source code corpus remain supported.
Any new references to standard library internal symbols will be disallowed.
A linker command line flag -checklinkname=0
can be used to disable
this check, for debugging and experimenting purposes.
When building a dynamically linked ELF binary (including PIE binary), the
new -bindnow
flag enables immediate function binding.