]> Cypherpunks repositories - gostls13.git/commit
cmd/internal/obj: fix LSym.Type during compilation, not linking
authorJosh Bleecher Snyder <josharian@gmail.com>
Sun, 16 Apr 2017 15:22:44 +0000 (08:22 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Tue, 2 May 2017 00:21:33 +0000 (00:21 +0000)
commit18fb670e5ee038ab681562a6b018da516f6a6f9f
treeb98f0b286ee44b497943cbfcb066acd4cf01bf08
parent00f827784b37babedcd7da53cdd5d657eb761dd3
cmd/internal/obj: fix LSym.Type during compilation, not linking

Prior to this CL, the compiler and assembler
were sloppy about the LSym.Type for LSyms
containing static data.

The linker then fixed this up, converting
Sxxx and SBSS to SDATA, and SNOPTRBSS to SNOPTRDATA
if it noticed that the symbol had associated data.

It is preferable to just get this right in cmd/compile
and cmd/asm, because it removes an unnecessary traversal
of the symbol table from the linker (see #14624).
Do this by touching up the LSym.Type fixes in
LSym.prepwrite and Link.Globl.

I have confirmed by instrumenting the linker
that the now-eliminated code paths were unreached.
And an additional check in the object file writing code
will help preserve that invariant.

There was a case in the Windows linker,
with internal linking and cgo,
where we were generating SNOPTRBSS symbols with data.
For now, convert those at the site at which they occur
into SNOPTRDATA, just like they were.

Does not pass toolstash-check,
but does generate identical linked binaries.

No compiler performance changes.

Change-Id: I77b071ab103685ff8e042cee9abb864385488872
Reviewed-on: https://go-review.googlesource.com/40864
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
src/cmd/compile/internal/gc/obj.go
src/cmd/internal/obj/data.go
src/cmd/internal/obj/objfile.go
src/cmd/internal/obj/plist.go
src/cmd/link/internal/ld/data.go
src/cmd/link/internal/ld/ldpe.go
src/cmd/link/internal/ld/lib.go
src/debug/pe/file_test.go