1
0
mirror of https://github.com/golang/go synced 2024-11-11 21:50:21 -07:00
go/misc/cgo
Cherry Zhang 5779bb4e92 cmd/link: fix GC data reading from shared library
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 used to have
a special case to get the addend from the relocation on the
gcdata field. That was removed, but the new code accidentally
returned 0 unconditionally. 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 #39927.

Change-Id: Iecd32315b326c7059587fdc190e2fa99426e497e
Reviewed-on: https://go-review.googlesource.com/c/go/+/240462
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Austin Clements <austin@google.com>
2020-06-30 18:40:39 +00:00
..
errors cmd/cgo: do not rewrite call if there are more args than parameters 2019-07-12 17:31:29 +00:00
fortran misc/cgo/fortran: avoid writing to $PWD 2019-11-20 22:37:23 +00:00
gmp all: make copyright headers consistent with one space after period 2016-05-02 13:43:18 +00:00
life misc: remove use of relative directories in overlayDir functions 2019-11-25 16:26:15 +00:00
nocgo cmd/ld: really import runtime/cgo for external link 2014-05-20 21:36:50 -07:00
stdio misc: remove use of relative directories in overlayDir functions 2019-11-25 16:26:15 +00:00
test cmd/cgo: prevent redeclaration of _Ctype_void when C.void is used 2020-06-26 19:00:25 +00:00
testasan misc: log 'ok' from 'go run' tests on success 2019-11-25 16:43:27 +00:00
testcarchive all: remove scattered remnants of darwin/arm 2020-04-08 18:35:49 +00:00
testcshared all: remove scattered remnants of darwin/arm 2020-04-08 18:35:49 +00:00
testgodefs cmd/cgo: in -godefs mode, don't change constant to type 2020-06-11 21:53:45 +00:00
testplugin misc/cgo/testplugin: fix typo in comment 2020-06-01 23:25:14 +00:00
testsanitizers runtime: save/restore callee saved registers in arm64's sigtramp 2019-06-03 19:02:11 +00:00
testshared cmd/link: fix GC data reading from shared library 2020-06-30 18:40:39 +00:00
testsigfwd misc: log 'ok' from 'go run' tests on success 2019-11-25 16:43:27 +00:00
testso all: remove scattered remnants of darwin/arm 2020-04-08 18:35:49 +00:00
testsovar all: remove scattered remnants of darwin/arm 2020-04-08 18:35:49 +00:00
testtls all: make copyright headers consistent with one space after period 2016-05-02 13:43:18 +00:00