1
0
mirror of https://github.com/golang/go synced 2024-11-26 22:31:23 -07:00
go/misc/cgo
Ian Lance Taylor 1683dab725 cmd/ld: fix bug with "runtime/cgo" in external link mode
In external link mode the linker explicitly adds the string
constant "runtime/cgo".  It adds the string constant using the
same symbol name as the compiler, but a different format.  The
compiler assumes that the string data immediately follows the
string header, but the linker puts the two in different
sections.  The result is bad string data when the compiler
sees "runtime/cgo" used as a string constant.

The compiler assumption is in datastring in [568]g/gobj.c.
The linker layout is in addstrdata in ld/data.c.  The compiler
assumption is valid for string literals.  The linker is not
creating a string literal, so its assumption is also valid.

There are a few ways to avoid this problem.  This patch fixes
it by only doing the fake import of runtime/cgo if necessary,
and by only creating the string symbol if necessary.

Fixes #7234.

LGTM=dvyukov
R=golang-codereviews, dvyukov, bradfitz
CC=golang-codereviews
https://golang.org/cl/58410043
2014-01-30 09:25:47 -08:00
..
errors cmd/cgo: fix line number in an error message 2013-10-18 16:52:44 -04:00
gmp misc/cgo/gmp: fix typo. 2013-03-30 19:02:14 +08:00
life
stdio
test cmd/ld: fix bug with "runtime/cgo" in external link mode 2014-01-30 09:25:47 -08:00
testasan runtime: more flexible heap memory mapping on 64-bits 2013-06-12 18:47:16 +04:00
testcdefs misc/cgo/testcdefs: rm correct file in test.bash 2013-12-10 12:06:24 +11:00
testso cgo: enable cgo on dragonfly 2013-09-04 15:19:21 -07:00
testtls misc/cgo/testtls: make test less flaky 2014-01-21 19:44:51 -05:00