]> Cypherpunks repositories - gostls13.git/commit
cmd/internal/obj/x86: prevent jumps crossing 32 byte boundaries
authorMark Ryan <mark.d.ryan@intel.com>
Mon, 28 Oct 2019 18:12:56 +0000 (19:12 +0100)
committerDavid Chase <drchase@google.com>
Fri, 1 May 2020 19:55:48 +0000 (19:55 +0000)
commit30f8074e3510da8c39f879cfdbde600eb876a79e
treea3169d8bb45f4e950b1b3733620e8406f86094ec
parent8ba0e919d26e54b10b559502cc79a43422933417
cmd/internal/obj/x86: prevent jumps crossing 32 byte boundaries

This commit adds a new option to the x86 assembler.  If the
GOAMD64 environment variable is set to alignedjumps (the
default) and we're doing a 64 bit build, the assembler will
make sure that neither stand alone nor macro-fused jumps will
end on or cross 32 byte boundaries.  To achieve this, functions
are aligned on 32 byte boundaries, rather than 16 bytes, and
jump instructions are padded to ensure that they do not
cross or end on 32 byte boundaries.  Jumps are padded
by adding a NOP instruction of the appropriate length before
the jump.

The commit is likely to result in larger binary sizes when
GOAMD64=alignedjumps.  On the binaries tested so far, an
increase of between 1.4% and 1.5% has been observed.

Updates #35881

Co-authored-by: David Chase <drchase@google.com>
Change-Id: Ief0722300bc3f987098e4fd92b22b14ad6281d91
Reviewed-on: https://go-review.googlesource.com/c/go/+/219357
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
src/cmd/asm/internal/asm/endtoend_test.go
src/cmd/dist/build.go
src/cmd/dist/buildruntime.go
src/cmd/go/alldocs.go
src/cmd/go/internal/cfg/cfg.go
src/cmd/go/internal/help/helpdoc.go
src/cmd/internal/obj/x86/asm6.go
src/cmd/internal/objabi/util.go
src/cmd/link/internal/amd64/obj.go
src/internal/cfg/cfg.go