]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.14] cmd/link: fix GC data reading from shared library (attempt 2)
authorCherry Zhang <cherryyz@google.com>
Mon, 29 Jun 2020 21:07:17 +0000 (17:07 -0400)
committerDmitri Shuralyov <dmitshur@golang.org>
Fri, 21 Aug 2020 23:57:04 +0000 (23:57 +0000)
commit73268bec86787cb8061baf9ab6f0fee3da1be7a4
tree9b83dd4a5cba9a7a840884eac26063d7447aa50a
parentdb4890e5044d65d58c9833655507688ecb003f22
[release-branch.go1.14] cmd/link: fix GC data reading from shared library (attempt 2)

This is a backport of CL 240621. This is not a clean cherry-pick,
as Go 1.15 switches to the new linker while it is still the old
linker here. Backporting is straightforward, though.

When linking against a Go shared library, when a global variable
in the main module has a type defined in the shared library, the
linker needs to pull the GC data from the shared library to build
the GC program for the global variable. Currently, this fails
silently, as the shared library file is closed too early and the
read failed (with no error check), causing a zero GC map emitted
for the variable, which in turn causes the runtime to treat the
variable as pointerless.

For now, fix this by keeping the file open. In the future we may
want to use mmap to read from the shared library instead.

Also add error checking. And fix a (mostly harmless) mistake in
size caluculation.

Also remove an erroneous condition for ARM64. ARM64 has a special
case to get the addend from the relocation on the gcdata field.
But that doesn't actually work. And it's no longer necessary to
have any special case, since the addend is now applied directly
to the gcdata field on ARM64, like on all the other platforms.

Fixes #39955.
Updates #39927.

Change-Id: I01c82422b9f67e872d833336885935bc509bc91b
Reviewed-on: https://go-review.googlesource.com/c/go/+/240621
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
(cherry picked from commit 7799756a50f0a4070d66c67e9615375f852f2c04)
Reviewed-on: https://go-review.googlesource.com/c/go/+/240511
Reviewed-by: Austin Clements <austin@google.com>
misc/cgo/testshared/shared_test.go
misc/cgo/testshared/testdata/gcdata/main/main.go [new file with mode: 0644]
misc/cgo/testshared/testdata/gcdata/p/p.go [new file with mode: 0644]
src/cmd/link/internal/ld/decodesym.go
src/cmd/link/internal/ld/lib.go