]> Cypherpunks repositories - gostls13.git/commit
cmd/ld: fix bug with "runtime/cgo" in external link mode
authorIan Lance Taylor <iant@golang.org>
Thu, 30 Jan 2014 17:25:47 +0000 (09:25 -0800)
committerIan Lance Taylor <iant@golang.org>
Thu, 30 Jan 2014 17:25:47 +0000 (09:25 -0800)
commit1683dab725f66320d3d9d500b33233a11930f596
treec5b70311a2229f1319b62d9bfc41734cd10a6662
parent73b0d84c83833b21968ed9bf4d00cbfbc2ec2fdb
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
misc/cgo/test/issue7234_test.go [new file with mode: 0644]
src/cmd/ld/lib.c